[med-svn] [ugene] 01/10: Imported Upstream version 1.23.1+dfsg

Sascha Steinbiss satta at debian.org
Thu Jul 28 06:06:33 UTC 2016


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

satta pushed a commit to branch master
in repository ugene.

commit a8a1cc6264085656678cb15a3758e76177bd942d
Author: Sascha Steinbiss <satta at debian.org>
Date:   Wed Jul 27 21:42:03 2016 +0000

    Imported Upstream version 1.23.1+dfsg
---
 build.txt                                          |   33 +-
 data/DBXRefRegistry.txt                            |    2 +-
 data/cmdline/hmm3-search.uwl                       |  132 +
 installer/linux/fedora/ugene.spec                  |  170 +-
 installer/linux/ubuntu/debian/control              |    2 +-
 installer/linux/ubuntu/debian/rules                |    2 -
 src/corelibs/U2Algorithm/CMakeLists.txt            |   26 +
 src/corelibs/U2Algorithm/U2Algorithm.pro           |   37 +-
 src/corelibs/U2Algorithm/src/misc/EnzymeModel.cpp  |    3 +-
 src/corelibs/U2Algorithm/src/misc/EnzymeModel.h    |    3 +-
 .../U2Algorithm/src/misc/FindAlgorithm.cpp         |    4 +-
 src/corelibs/U2Algorithm/src/misc/FindAlgorithm.h  |    2 +
 .../src/util_msaedit/MSAColorScheme.cpp            | 1322 ----
 .../U2Algorithm/src/util_msaedit/MSAColorScheme.h  |  475 --
 .../color_schemes/ColorSchemeUtils.cpp             |  269 +
 .../util_msaedit/color_schemes/ColorSchemeUtils.h  |   54 +
 .../util_msaedit/color_schemes/MsaColorScheme.cpp  |  568 ++
 .../util_msaedit/color_schemes/MsaColorScheme.h    |  137 +
 .../color_schemes/MsaColorSchemeClustalX.cpp       |  264 +
 .../color_schemes/MsaColorSchemeClustalX.h         |   80 +
 .../color_schemes/MsaColorSchemeCustom.cpp         |   68 +
 .../color_schemes/MsaColorSchemeCustom.h           |   50 +
 ...saColorSchemePercentageIdententityGrayscale.cpp |   44 +
 .../MsaColorSchemePercentageIdententityGrayscale.h |   44 +
 .../MsaColorSchemePercentageIdentity.cpp           |   94 +
 .../MsaColorSchemePercentageIdentity.h             |   65 +
 .../color_schemes/MsaColorSchemeStatic.cpp         |   48 +
 .../color_schemes/MsaColorSchemeStatic.h           |   56 +
 .../highlighting_schemes/MsaHighlightingScheme.cpp |  164 +
 .../highlighting_schemes/MsaHighlightingScheme.h   |  109 +
 .../MsaHighlightingSchemeAgreements.cpp            |   52 +
 .../MsaHighlightingSchemeAgreements.h              |   47 +
 .../MsaHighlightingSchemeConservation.cpp          |  101 +
 .../MsaHighlightingSchemeConservation.h            |   60 +
 .../MsaHighlightingSchemeDisagreements.cpp         |   53 +
 .../MsaHighlightingSchemeDisagreements.h           |   46 +
 .../MsaHighlightingSchemeGaps.cpp                  |   59 +
 .../MsaHighlightingSchemeGaps.h                    |   48 +
 .../MsaHighlightingSchemeNoColors.cpp              |   48 +
 .../MsaHighlightingSchemeNoColors.h                |   46 +
 .../MsaHighlightingSchemeTransitions.cpp           |   73 +
 .../MsaHighlightingSchemeTransitions.h             |   46 +
 .../MsaHighlightingSchemeTransversions.cpp         |   73 +
 .../MsaHighlightingSchemeTransversions.h           |   47 +
 src/corelibs/U2Algorithm/transl/english.ts         |  180 +-
 src/corelibs/U2Algorithm/transl/russian.ts         |  180 +-
 src/corelibs/U2Core/CMakeLists.txt                 |   33 +
 src/corelibs/U2Core/U2Core.pri                     |   10 +-
 src/corelibs/U2Core/U2Core.pro                     |    6 +
 .../U2Core/src/cmdline/CMDLineRegistry.cpp         |    2 +
 src/corelibs/U2Core/src/cmdline/CMDLineRegistry.h  |    3 +
 src/corelibs/U2Core/src/cmdline/CMDLineUtils.cpp   |   30 +
 src/corelibs/U2Core/src/cmdline/CMDLineUtils.h     |    2 +
 src/corelibs/U2Core/src/datatype/Annotation.cpp    |   14 +
 src/corelibs/U2Core/src/datatype/Annotation.h      |    2 +
 .../U2Core/src/datatype/AnnotationModification.h   |    3 +-
 .../U2Core/src/datatype/DNASequenceUtils.cpp       |    3 +-
 .../U2Core/src/datatype/U2CoreAttributes.cpp       |    8 +
 .../U2Core/src/datatype/U2CoreAttributes.h         |    2 +
 src/corelibs/U2Core/src/datatype/U2FeatureType.cpp |    6 +-
 src/corelibs/U2Core/src/datatype/U2FeatureType.h   |    5 +-
 src/corelibs/U2Core/src/dbi/U2AbstractDbi.h        |    5 +
 src/corelibs/U2Core/src/dbi/U2ObjectDbi.h          |    5 +
 .../U2Core/src/dbi/U2SQLiteTripleStore.cpp         |    2 +-
 src/corelibs/U2Core/src/dbi/U2SqlHelpers.cpp       |    2 +-
 src/corelibs/U2Core/src/globals/AppContext.h       |   12 +-
 .../U2Core/src/globals/AutoAnnotationsSupport.cpp  |   35 +-
 .../U2Core/src/globals/AutoAnnotationsSupport.h    |   14 +-
 .../U2Core/src/globals/BaseDocumentFormats.cpp     |    2 +-
 .../U2Core/src/globals/ClipboardController.cpp     |    4 +
 .../U2Core/src/globals/ClipboardController.h       |    2 +-
 src/corelibs/U2Core/src/globals/Log.h              |    3 -
 src/corelibs/U2Core/src/globals/PluginModel.h      |   10 +-
 src/corelibs/U2Core/src/globals/Task.h             |    2 +
 .../U2Core/src/globals/UserActionsWriter.cpp       |  122 +-
 .../U2Core/src/globals/UserActionsWriter.h         |   27 +-
 .../src/globals/UserApplicationsSettings.cpp       |   18 +
 .../U2Core/src/globals/UserApplicationsSettings.h  |    6 +
 src/corelibs/U2Core/src/globals/global.h           |   12 +-
 .../U2Core/src/gobjects/AssemblyObject.cpp         |   80 +-
 src/corelibs/U2Core/src/gobjects/AssemblyObject.h  |    3 +
 src/corelibs/U2Core/src/io/ZlibAdapter.cpp         |    7 +-
 src/corelibs/U2Core/src/models/DocumentModel.cpp   |    4 +
 src/corelibs/U2Core/src/models/DocumentModel.h     |    3 +
 .../U2Core/src/tasks/CmdlineInOutTaskRunner.cpp    |  128 +
 .../U2Core/src/tasks/CmdlineInOutTaskRunner.h      |   71 +
 .../U2Core/src/tasks/CmdlineTaskRunner.cpp         |  311 +
 src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.h  |   83 +
 .../U2Core/src/tasks/ExternalToolRunTask.cpp       |  210 +-
 .../U2Core/src/tasks/ExternalToolRunTask.h         |   85 +-
 src/corelibs/U2Core/src/tasks/LoadDocumentTask.cpp |    3 +
 src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp |    2 +-
 .../U2Core/src/tasks/SequenceDbiWalkerTask.cpp     |   17 +-
 .../U2Core/src/util/FileAndDirectoryUtils.cpp      |    9 +
 .../U2Core/src/util/FileAndDirectoryUtils.h        |    3 +
 src/corelibs/U2Core/src/util/FormatUtils.cpp       |   22 +-
 src/corelibs/U2Core/src/util/FormatUtils.h         |    1 +
 src/corelibs/U2Core/src/util/GUrlUtils.cpp         |    2 +-
 src/corelibs/U2Core/src/util/GenbankFeatures.cpp   |    2 +-
 src/corelibs/U2Core/src/util/SNPTablesUtils.cpp    |  358 -
 src/corelibs/U2Core/src/util/SyncHttp.cpp          |   96 +
 src/corelibs/U2Core/src/util/SyncHttp.h            |   61 +
 src/corelibs/U2Core/src/util/U2SequenceUtils.cpp   |    2 +-
 src/corelibs/U2Core/transl/english.ts              |  524 +-
 src/corelibs/U2Core/transl/russian.ts              |  525 +-
 src/corelibs/U2Designer/CMakeLists.txt             |   27 +
 src/corelibs/U2Designer/U2Designer.pro             |   40 +-
 src/corelibs/U2Designer/html/Dashboard.html        |    1 +
 src/corelibs/U2Designer/html/EstimationReport.html |    1 +
 .../U2Designer/src/{ui => }/AnnsActionDialog.ui    |    0
 .../U2Designer/src/BreakpointHitCountDialog.cpp    |    4 +-
 .../src/{ui => }/BreakpointHitCountDialog.ui       |    0
 .../src/{ui => }/CreateDirectoryDialog.ui          |    0
 src/corelibs/U2Designer/src/DatasetWidget.cpp      |    2 +-
 src/corelibs/U2Designer/src/DatasetWidget.h        |    2 +-
 .../U2Designer/src/{ui => }/DatasetWidget.ui       |    0
 src/corelibs/U2Designer/src/DbFolderItem.cpp       |    4 +-
 src/corelibs/U2Designer/src/DbFolderItem.h         |    8 +-
 .../U2Designer/src/{ui => }/DbFolderOptions.ui     |    0
 src/corelibs/U2Designer/src/DirectoryItem.h        |    2 +-
 .../U2Designer/src/{ui => }/DirectoryOptions.ui    |    0
 .../U2Designer/src/EditBreakpointLabelsDialog.cpp  |    9 +-
 .../U2Designer/src/EditBreakpointLabelsDialog.h    |   14 +-
 .../src/{ui => }/EditBreakpointLabelsDialog.ui     |    0
 .../src/{ui => }/EditFloatMarkerWidget.ui          |    0
 .../src/{ui => }/EditIntegerMarkerWidget.ui        |    0
 .../U2Designer/src/{ui => }/EditMarkerDialog.ui    |    0
 .../U2Designer/src/EditMarkerGroupDialog.cpp       |    4 +-
 .../U2Designer/src/EditMarkerGroupDialog.h         |   10 +-
 .../src/{ui => }/EditMarkerGroupDialog.ui          |    0
 .../src/{ui => }/EditStringMarkerWidget.ui         |    0
 src/corelibs/U2Designer/src/GrouperEditorWidget.h  |    2 +-
 .../U2Designer/src/{ui => }/GrouperEditorWidget.ui |    0
 src/corelibs/U2Designer/src/MarkerEditorWidget.h   |    2 +-
 .../U2Designer/src/{ui => }/MarkerEditorWidget.ui  |    0
 .../U2Designer/src/{ui => }/MsaActionDialog.ui     |    0
 .../U2Designer/src/NewBreakpointDialog.cpp         |   12 +-
 src/corelibs/U2Designer/src/NewBreakpointDialog.h  |   13 +-
 .../U2Designer/src/{ui => }/NewBreakpointDialog.ui |    0
 .../U2Designer/src/NewGrouperSlotDialog.cpp        |   10 +-
 src/corelibs/U2Designer/src/NewGrouperSlotDialog.h |   10 +-
 .../src/{ui => }/NewGrouperSlotDialog.ui           |    0
 src/corelibs/U2Designer/src/OutputFileDialog.h     |    8 +-
 .../U2Designer/src/{ui => }/OutputFileDialog.ui    |    0
 .../src/{ui => }/SequenceActionDialog.ui           |    0
 .../U2Designer/src/{ui => }/StringActionDialog.ui  |    0
 .../U2Designer/src/support/URLLineEdit.cpp         |    2 +-
 src/corelibs/U2Designer/transl/english.ts          |  239 +-
 src/corelibs/U2Designer/transl/russian.ts          |  243 +-
 src/corelibs/U2Formats/CMakeLists.txt              |   26 +
 src/corelibs/U2Formats/U2Formats.pri               |   13 +-
 .../U2Formats/src/AbstractVariationFormat.cpp      |    2 +-
 src/corelibs/U2Formats/src/BAMUtils.cpp            |   13 +-
 src/corelibs/U2Formats/src/BAMUtils.h              |    5 +-
 src/corelibs/U2Formats/src/DocumentFormatUtils.cpp |   12 +-
 src/corelibs/U2Formats/src/DocumentFormatUtils.h   |    6 +-
 .../U2Formats/src/EMBLGenbankAbstractDocument.cpp  |  143 +-
 .../U2Formats/src/EMBLGenbankAbstractDocument.h    |   13 +-
 src/corelibs/U2Formats/src/EMBLPlainTextFormat.cpp |    3 +
 src/corelibs/U2Formats/src/FastqFormat.cpp         |  136 +-
 src/corelibs/U2Formats/src/GFFFormat.cpp           |   41 +-
 src/corelibs/U2Formats/src/GFFFormat.h             |    2 +-
 .../U2Formats/src/GenbankLocationParser.cpp        |  530 +-
 src/corelibs/U2Formats/src/GenbankLocationParser.h |   12 +-
 .../U2Formats/src/GenbankPlainTextFormat.cpp       |    3 +
 src/corelibs/U2Formats/src/PDBFormat.cpp           |    2 +-
 .../U2Formats/src/SwissProtPlainTextFormat.cpp     |    3 +
 .../U2Formats/src/VectorNtiSequenceFormat.cpp      |    6 +-
 .../U2Formats/src/mysql_dbi/MysqlObjectDbi.cpp     |   13 +
 .../U2Formats/src/mysql_dbi/MysqlObjectDbi.h       |    5 +
 .../src/sqlite_dbi/SQLiteBlobInputStream.cpp       |    2 +-
 .../src/sqlite_dbi/SQLiteBlobOutputStream.cpp      |    2 +-
 .../U2Formats/src/sqlite_dbi/SQLiteDbi.cpp         |    2 +-
 .../U2Formats/src/sqlite_dbi/SQLiteObjectDbi.cpp   |   13 +
 .../U2Formats/src/sqlite_dbi/SQLiteObjectDbi.h     |    5 +
 src/corelibs/U2Formats/src/tasks/MergeBamTask.cpp  |   45 +-
 src/corelibs/U2Formats/src/tasks/MergeBamTask.h    |    3 +-
 src/corelibs/U2Formats/transl/english.ts           |  659 +-
 src/corelibs/U2Formats/transl/russian.ts           |  281 +-
 src/corelibs/U2Gui/CMakeLists.txt                  |   28 +
 src/corelibs/U2Gui/U2Gui.pro                       |   77 +-
 src/corelibs/U2Gui/U2Gui.qrc                       |    2 +
 src/corelibs/U2Gui/images/codon_table.png          |  Bin 0 -> 21278 bytes
 .../U2Gui/images/extract_assembly_region.png       |  Bin 0 -> 23943 bytes
 src/corelibs/U2Gui/src/MainWindow.h                |    3 +-
 src/corelibs/U2Gui/src/OpenViewTask.cpp            |   53 +-
 src/corelibs/U2Gui/src/OpenViewTask.h              |   14 +-
 src/corelibs/U2Gui/src/ToolsMenu.cpp               |    2 -
 src/corelibs/U2Gui/src/ToolsMenu.h                 |    1 -
 src/corelibs/U2Gui/src/UnloadDocumentTask.cpp      |    4 +-
 .../U2Gui/src/options_panel/GroupOptionsWidget.h   |    2 +-
 .../U2Gui/src/util/AddNewDocumentDialog.ui         |  121 +
 .../U2Gui/src/util/AddNewDocumentDialogImpl.cpp    |  146 +-
 .../U2Gui/src/util/AddNewDocumentDialogImpl.h      |   18 +-
 .../U2Gui/src/util/AuthenticationDialog.cpp        |    4 +-
 .../src/util/{ui => }/AuthenticationDialog.ui      |    0
 src/corelibs/U2Gui/src/util/AuthenticationWidget.h |    2 +-
 .../src/util/{ui => }/AuthenticationWidget.ui      |    0
 .../src/util/BreakpointConditionEditDialog.cpp     |    8 +-
 .../util/{ui => }/BreakpointConditionEditDialog.ui |    0
 .../U2Gui/src/util/CreateAnnotationDialog.cpp      |   33 +-
 .../U2Gui/src/util/CreateAnnotationDialog.h        |   17 +-
 .../src/util/{ui => }/CreateAnnotationDialog.ui    |    0
 .../U2Gui/src/util/CreateAnnotationFullWidget.cpp  |   25 +-
 .../U2Gui/src/util/CreateAnnotationFullWidget.h    |    9 +-
 .../util/{ui => }/CreateAnnotationFullWidget.ui    |    0
 .../src/util/CreateAnnotationNormalWidget.cpp      |   21 +-
 .../U2Gui/src/util/CreateAnnotationNormalWidget.h  |    9 +-
 .../util/{ui => }/CreateAnnotationNormalWidget.ui  |    0
 .../util/CreateAnnotationOptionsPanelWidget.cpp    |   21 +-
 .../src/util/CreateAnnotationOptionsPanelWidget.h  |    9 +-
 .../{ui => }/CreateAnnotationOptionsPanelWidget.ui |    0
 .../U2Gui/src/util/CreateAnnotationWidget.cpp      |    4 -
 .../U2Gui/src/util/CreateAnnotationWidget.h        |   14 +-
 .../src/util/CreateAnnotationWidgetController.cpp  |  115 +-
 .../src/util/CreateAnnotationWidgetController.h    |   16 +-
 .../util/{ui => }/CreateDocumentFromTextDialog.ui  |    0
 .../CreateDocumentFromTextDialogController.cpp     |   87 +-
 .../util/CreateDocumentFromTextDialogController.h  |   22 +-
 .../util/{ui => }/CreateObjectRelationDialog.ui    |    0
 .../util/CreateObjectRelationDialogController.cpp  |    6 +-
 .../util/CreateSequenceFromTextAndOpenViewTask.h   |    2 +-
 src/corelibs/U2Gui/src/util/DialogUtils.cpp        |   14 +-
 src/corelibs/U2Gui/src/util/DialogUtils.h          |    2 -
 .../U2Gui/src/util/DownloadRemoteFileDialog.cpp    |   13 +-
 .../src/util/{ui => }/DownloadRemoteFileDialog.ui  |    0
 .../U2Gui/src/util/EditQualifierDialog.cpp         |    4 +-
 .../U2Gui/src/util/{ui => }/EditQualifierDialog.ui |    0
 .../U2Gui/src/util/{ui => }/EditSequenceDialog.ui  |    0
 .../src/util/EditSequenceDialogController.cpp      |  109 +-
 .../U2Gui/src/util/EditSequenceDialogController.h  |   10 +-
 .../U2Gui/src/util/ExportAnnotationsDialog.cpp     |  124 +-
 .../U2Gui/src/util/ExportAnnotationsDialog.h       |   26 +-
 .../src/util/{ui => }/ExportAnnotationsDialog.ui   |    0
 .../src/util/{ui => }/ExportDocumentDialog.ui      |    0
 .../src/util/ExportDocumentDialogController.cpp    |   96 +-
 .../src/util/ExportDocumentDialogController.h      |   13 +-
 src/corelibs/U2Gui/src/util/ExportImageDialog.cpp  |  217 +-
 src/corelibs/U2Gui/src/util/ExportImageDialog.h    |   24 +-
 .../U2Gui/src/util/{ui => }/ExportImageDialog.ui   |    0
 .../U2Gui/src/util/GenbankLocationValidator.cpp    |   13 +-
 src/corelibs/U2Gui/src/util/HelpButton.cpp         |    4 +-
 .../src/util/ImportDialogs/AceImportDialog.cpp     |   52 +-
 .../U2Gui/src/util/ImportDialogs/AceImportDialog.h |   12 +-
 .../util/ImportDialogs/{ui => }/AceImportDialog.ui |    0
 src/corelibs/U2Gui/src/util/MultiClickMenu.cpp     |   63 +
 src/corelibs/U2Gui/src/util/MultiClickMenu.h       |   48 +
 .../MultipartDocFormatConfiguratorWidget.ui        |    0
 .../src/util/ProjectTreeItemSelectorDialog.cpp     |    5 +-
 .../src/util/ProjectTreeItemSelectorDialogBase.ui  |   78 +
 .../src/util/ProjectTreeItemSelectorDialogImpl.h   |    4 +-
 .../src/util/{ui => }/RangeSelectionDialog.ui      |    0
 src/corelibs/U2Gui/src/util/RangeSelector.cpp      |    4 +-
 src/corelibs/U2Gui/src/util/RegionSelector.cpp     |  272 +-
 src/corelibs/U2Gui/src/util/RegionSelector.h       |   70 +-
 .../U2Gui/src/util/RegionSelectorController.cpp    |  347 +
 .../U2Gui/src/util/RegionSelectorController.h      |  131 +
 .../src/util/RegionSelectorWithExcludedRegion.cpp  |  108 +
 .../src/util/RegionSelectorWithExcludedRegion.h    |   65 +
 .../src/util/RegionSelectorWithExcludedRegion.ui   |  154 +
 .../util/{ui => }/RemovePartFromSequenceDialog.ui  |    0
 .../RemovePartFromSequenceDialogController.cpp     |   98 +-
 .../util/RemovePartFromSequenceDialogController.h  |   17 +-
 .../U2Gui/src/util/SaveDocumentController.cpp      |  344 +
 .../U2Gui/src/util/SaveDocumentController.h        |  127 +
 .../U2Gui/src/util/SaveDocumentGroupController.cpp |  113 -
 .../U2Gui/src/util/SaveDocumentGroupController.h   |   87 -
 src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp |    4 +-
 .../U2Gui/src/util/{ui => }/ScriptEditorDialog.ui  |    0
 .../util/{ui => }/SearchGenbankSequenceDialog.ui   |    0
 .../util/SearchGenbankSequenceDialogController.cpp |    8 +-
 .../util/SearchGenbankSequenceDialogController.h   |    2 +-
 .../U2Gui/src/util/{ui => }/SeqPasterWidget.ui     |    0
 .../U2Gui/src/util/SeqPasterWidgetController.cpp   |    2 +-
 src/corelibs/U2Gui/src/util/U2FileDialog.cpp       |    8 +-
 src/corelibs/U2Gui/src/util/U2FileDialog.h         |   12 +-
 .../U2Gui/src/util/project/EditableTreeView.cpp    |   36 +
 .../U2Gui/src/util/project/EditableTreeView.h      |   40 +
 .../U2Gui/src/util/project/FolderNameDialog.h      |    2 +-
 .../U2Gui/src/util/project/FolderNameDialog.ui     |   80 +
 .../src/util/project/ProjectTreeController.cpp     |   77 +-
 .../U2Gui/src/util/project/ProjectTreeController.h |    6 +-
 .../project/filter_tasks/FeatureKeyFilterTask.cpp  |    2 +
 .../util/shared_db/CommonImportOptionsDialog.cpp   |    2 +-
 .../src/util/shared_db/CommonImportOptionsDialog.h |    2 +-
 .../{ui => }/CommonImportOptionsDialog.ui          |    0
 .../src/util/shared_db/EditConnectionDialog.cpp    |    4 +-
 .../src/util/shared_db/EditConnectionDialog.h      |    6 +-
 .../src/util/shared_db/EditConnectionDialog.ui     |  170 +
 .../src/util/shared_db/ImportOptionsWidget.cpp     |    4 +-
 .../U2Gui/src/util/shared_db/ImportOptionsWidget.h |    6 +-
 .../util/shared_db/{ui => }/ImportOptionsWidget.ui |    0
 .../src/util/shared_db/ImportToDatabaseDialog.cpp  |   10 +-
 .../src/util/shared_db/ImportToDatabaseDialog.h    |    8 +-
 .../shared_db/{ui => }/ImportToDatabaseDialog.ui   |    0
 .../src/util/shared_db/ItemToImportEditDialog.cpp  |    4 +-
 .../src/util/shared_db/ItemToImportEditDialog.h    |    7 +-
 .../shared_db/{ui => }/ItemToImportEditDialog.ui   |    0
 .../src/util/shared_db/SharedConnectionsDialog.cpp |    8 +-
 .../src/util/shared_db/SharedConnectionsDialog.h   |    7 +-
 .../shared_db/{ui => }/SharedConnectionsDialog.ui  |    0
 .../src/util/shared_db/ui/EditConnectionDialog.ui  |  170 -
 .../U2Gui/src/util/ui/AddNewDocumentDialog.ui      |  105 -
 src/corelibs/U2Gui/src/util/ui/FolderNameDialog.ui |   80 -
 .../util/ui/ProjectTreeItemSelectorDialogBase.ui   |   68 -
 src/corelibs/U2Gui/transl/english.ts               | 1097 +--
 src/corelibs/U2Gui/transl/russian.ts               | 1111 +--
 src/corelibs/U2Lang/CMakeLists.txt                 |   23 +
 src/corelibs/U2Lang/U2Lang.pro                     |    2 +
 .../src/model/url_attribute/URLContainer.cpp       |    4 +-
 src/corelibs/U2Lang/src/support/DatasetFetcher.cpp |  103 +
 src/corelibs/U2Lang/src/support/DatasetFetcher.h   |   60 +
 .../U2Lang/src/support/SimpleWorkflowTask.cpp      |   25 +-
 .../U2Lang/src/support/SimpleWorkflowTask.h        |   11 +-
 .../U2Lang/src/support/WorkflowRunTask.cpp         |  399 +-
 src/corelibs/U2Lang/src/support/WorkflowRunTask.h  |   67 +-
 .../U2Lang/src/support/WorkflowSettings.cpp        |   36 +-
 src/corelibs/U2Lang/src/support/WorkflowUtils.cpp  |   37 +-
 src/corelibs/U2Lang/src/support/WorkflowUtils.h    |    2 +-
 .../src/support/serialize/HRSchemaSerializer.cpp   |   23 +
 .../src/support/serialize/HRSchemaSerializer.h     |    3 +
 src/corelibs/U2Lang/transl/english.ts              |  115 +-
 src/corelibs/U2Lang/transl/russian.ts              |  115 +-
 src/corelibs/U2Private/CMakeLists.txt              |   45 +
 src/corelibs/U2Private/src/AppContextImpl.h        |   12 +-
 src/corelibs/U2Private/src/PluginDescriptor.h      |    5 +
 src/corelibs/U2Private/src/PluginSupportImpl.cpp   |  241 +-
 src/corelibs/U2Private/src/PluginSupportImpl.h     |   18 +-
 src/corelibs/U2Private/src/TaskSchedulerImpl.cpp   |   56 +-
 .../U2Private/src/crash_handler/CrashHandler.cpp   |   13 +-
 .../src/crash_handler/CrashHandlerArgsHelper.cpp   |    2 +-
 .../src/crash_handler/CrashHandlerPrivateMac.cpp   |    5 +-
 .../CrashHandlerPrivateUnixNotMac.cpp              |    5 +-
 .../src/crash_handler/CrashHandlerPrivateWin.cpp   |    2 +
 src/corelibs/U2Private/transl/english.ts           |   71 +-
 src/corelibs/U2Private/transl/russian.ts           |   71 +-
 src/corelibs/U2Remote/U2Remote.pri                 |   31 -
 src/corelibs/U2Remote/U2Remote.pro                 |   42 -
 .../U2Remote/src/DistributedComputingUtil.cpp      |  148 -
 .../U2Remote/src/DistributedComputingUtil.h        |   74 -
 src/corelibs/U2Remote/src/PingTask.cpp             |   54 -
 src/corelibs/U2Remote/src/PingTask.h               |   43 -
 src/corelibs/U2Remote/src/ProtocolInfo.cpp         |   87 -
 src/corelibs/U2Remote/src/ProtocolInfo.h           |   75 -
 src/corelibs/U2Remote/src/ProtocolUI.cpp           |   33 -
 src/corelibs/U2Remote/src/ProtocolUI.h             |   63 -
 src/corelibs/U2Remote/src/RemoteMachine.cpp        |   55 -
 src/corelibs/U2Remote/src/RemoteMachine.h          |  144 -
 src/corelibs/U2Remote/src/RemoteMachineMonitor.cpp |  149 -
 src/corelibs/U2Remote/src/RemoteMachineMonitor.h   |   72 -
 .../src/RemoteMachineMonitorDialogController.cpp   |   53 -
 .../src/RemoteMachineMonitorDialogController.h     |   38 -
 .../src/RemoteMachineMonitorDialogImpl.cpp         |  504 --
 .../U2Remote/src/RemoteMachineMonitorDialogImpl.h  |  129 -
 .../U2Remote/src/RemoteMachineScanDialogImpl.cpp   |  192 -
 .../U2Remote/src/RemoteMachineScanDialogImpl.h     |   74 -
 src/corelibs/U2Remote/src/RemoteMachineScanner.cpp |   41 -
 src/corelibs/U2Remote/src/RemoteMachineScanner.h   |   54 -
 .../U2Remote/src/RemoteMachineSettingsDialog.cpp   |  111 -
 .../U2Remote/src/RemoteMachineSettingsDialog.h     |   60 -
 src/corelibs/U2Remote/src/RemoteMachineTasks.cpp   |  208 -
 src/corelibs/U2Remote/src/RemoteMachineTasks.h     |  104 -
 .../U2Remote/src/RemoteWorkflowRunTask.cpp         |  274 -
 src/corelibs/U2Remote/src/RemoteWorkflowRunTask.h  |   75 -
 src/corelibs/U2Remote/src/Serializable.cpp         |   39 -
 src/corelibs/U2Remote/src/Serializable.h           |   51 -
 src/corelibs/U2Remote/src/SerializeUtils.cpp       |  138 -
 src/corelibs/U2Remote/src/SerializeUtils.h         |  436 --
 src/corelibs/U2Remote/src/SynchHttp.cpp            |   97 -
 src/corelibs/U2Remote/src/SynchHttp.h              |   61 -
 src/corelibs/U2Remote/src/TaskDistributor.h        |   87 -
 .../U2Remote/src/ui/RemoteMachineMonitorDialog.ui  |  216 -
 .../U2Remote/src/ui/RemoteMachineScanDialog.ui     |   74 -
 .../U2Remote/src/ui/RemoteMachineSettingsDialog.ui |   71 -
 src/corelibs/U2Remote/transl/english.ts            |  516 --
 src/corelibs/U2Remote/transl/russian.ts            |  516 --
 src/corelibs/U2Script/U2Script.pri                 |    8 +-
 src/corelibs/U2Script/src/UgeneContextWrapper.cpp  |    6 -
 src/corelibs/U2Script/src/UgeneContextWrapper.h    |    1 -
 .../U2Script/src/WorkflowElementFacade.cpp         |    4 +-
 src/corelibs/U2Script/transl/english.ts            |   11 +-
 src/corelibs/U2Script/transl/russian.ts            |   11 +-
 src/corelibs/U2Test/CMakeLists.txt                 |   24 +
 src/corelibs/U2Test/U2Test.pri                     |    2 +-
 src/corelibs/U2Test/U2Test.pro                     |    2 +-
 .../U2Test/src/gui_tests/GUITestLauncher.cpp       |   17 +-
 .../U2Test/src/gui_tests/GUITestLauncher.h         |    2 +-
 .../U2Test/src/gui_tests/GUITestService.cpp        |   68 +-
 src/corelibs/U2Test/src/gui_tests/GUITestService.h |    8 +-
 .../U2Test/src/gui_tests/GUITestThread.cpp         |   95 +
 src/corelibs/U2Test/src/gui_tests/GUITestThread.h  |    5 +
 src/corelibs/U2Test/src/gui_tests/GUITestWindow.h  |    2 +-
 .../U2Test/{ => src/gui_tests}/GUITestingWindow.ui |    0
 src/corelibs/U2Test/src/gui_tests/UGUITestBase.cpp |   10 +-
 src/corelibs/U2Test/src/gui_tests/UGUITestBase.h   |    2 +-
 src/corelibs/U2Test/transl/english.ts              |   34 +-
 src/corelibs/U2Test/transl/russian.ts              |   34 +-
 src/corelibs/U2View/CMakeLists.txt                 |   24 +
 src/corelibs/U2View/U2View.pri                     |    6 +-
 src/corelibs/U2View/U2View.pro                     |   81 +-
 src/corelibs/U2View/src/LicenseDialog.cpp          |    2 +-
 src/corelibs/U2View/src/LicenseDialog.h            |    6 +-
 src/corelibs/U2View/src/{ui => }/LicenseDialog.ui  |    0
 .../U2View/src/ov_assembly/AssemblyBrowser.cpp     |   33 +-
 .../U2View/src/ov_assembly/AssemblyBrowser.h       |    2 +
 .../U2View/src/ov_assembly/AssemblyInfoWidget.cpp  |    2 +-
 .../src/ov_assembly/AssemblyNavigationWidget.cpp   |    2 +-
 .../U2View/src/ov_assembly/AssemblyReadsArea.cpp   |   19 +-
 .../src/ov_assembly/AssemblySettingsWidget.cpp     |    2 +-
 .../src/ov_assembly/ExportConsensusDialog.cpp      |   55 +-
 .../U2View/src/ov_assembly/ExportConsensusDialog.h |   10 +-
 .../ov_assembly/{ui => }/ExportConsensusDialog.ui  |    0
 .../ExportConsensusVariationsDialog.cpp            |   53 +-
 .../ov_assembly/ExportConsensusVariationsDialog.h  |   25 +-
 .../src/ov_assembly/ExportCoverageDialog.cpp       |  129 +-
 .../U2View/src/ov_assembly/ExportCoverageDialog.h  |    9 +-
 .../U2View/src/ov_assembly/ExportCoverageDialog.ui |  188 +
 .../U2View/src/ov_assembly/ExportCoverageTask.cpp  |    6 +-
 .../U2View/src/ov_assembly/ExportReadsDialog.cpp   |   64 +-
 .../U2View/src/ov_assembly/ExportReadsDialog.h     |   20 +-
 .../src/ov_assembly/{ui => }/ExportReadsDialog.ui  |    0
 .../ov_assembly/ExtractAssemblyRegionDialog.cpp    |  118 +
 .../src/ov_assembly/ExtractAssemblyRegionDialog.h  |   63 +
 .../src/ov_assembly/ExtractAssemblyRegionDialog.ui |  126 +
 .../src/ov_assembly/ExtractAssemblyRegionTask.cpp  |   98 +
 .../src/ov_assembly/ExtractAssemblyRegionTask.h    |   69 +
 .../src/ov_assembly/ui/ExportCoverageDialog.ui     |  194 -
 .../Clipboard/SubalignmentToClipboardTask.cpp      |   88 +-
 .../src/ov_msa/{ui => }/ColorSchemaDialog.ui       |    0
 .../src/ov_msa/ColorSchemaDialogController.cpp     |   34 +-
 .../src/ov_msa/ColorSchemaDialogController.h       |   16 +-
 .../src/ov_msa/ColorSchemaSettingsController.cpp   |   24 +-
 .../src/ov_msa/ColorSchemaSettingsController.h     |    4 +-
 .../ov_msa/{ui => }/ColorSchemaSettingsWidget.ui   |    0
 .../U2View/src/ov_msa/{ui => }/CreateMSAScheme.ui  |    0
 .../ov_msa/{ui => }/CreateSubalignmentDialog.ui    |    0
 .../ov_msa/CreateSubalignmentDialogController.cpp  |   99 +-
 .../ov_msa/CreateSubalignmentDialogController.h    |   20 +-
 .../U2View/src/ov_msa/DeleteGapsDialog.cpp         |   55 +-
 src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.h  |    7 +-
 .../U2View/src/ov_msa/{ui => }/DeleteGapsDialog.ui |    0
 .../src/ov_msa/{ui => Export}/MSAExportSettings.ui |    0
 .../ExportConsensus/ExportConsensusWidget.ui       |  139 +
 .../ExportConsensus/MSAExportConsensusTab.cpp      |  111 +-
 .../ov_msa/ExportConsensus/MSAExportConsensusTab.h |   11 +-
 .../MSAExportConsensusTabFactory.cpp               |    2 +-
 .../src/ov_msa/{ui => }/ExportHighlightedDialog.ui |    0
 .../ov_msa/ExportHighlightedDialogController.cpp   |  104 +-
 .../src/ov_msa/ExportHighlightedDialogController.h |   21 +-
 .../GeneralTabOptionsPanelWidget.ui                |    0
 .../U2View/src/ov_msa/General/MSAGeneralTab.h      |    2 +-
 .../src/ov_msa/General/MSAGeneralTabFactory.cpp    |    2 +-
 .../src/ov_msa/Highlighting/MSAHighlightingTab.cpp |   97 +-
 .../src/ov_msa/Highlighting/MSAHighlightingTab.h   |    3 +-
 .../Highlighting/MSAHighlightingTabFactory.cpp     |    2 +-
 src/corelibs/U2View/src/ov_msa/MSAEditor.cpp       |   29 +-
 src/corelibs/U2View/src/ov_msa/MSAEditorFactory.h  |    2 +-
 .../U2View/src/ov_msa/MSAEditorSequenceArea.cpp    |  402 +-
 .../U2View/src/ov_msa/MSAEditorSequenceArea.h      |   39 +-
 .../src/ov_msa/MSASelectSubalignmentDialog.cpp     |    2 +-
 .../src/ov_msa/MSASelectSubalignmentDialog.h       |    2 +-
 .../src/ov_msa/MsaEditorSimilarityColumn.cpp       |    2 +
 .../ov_msa/Overview/MSAGraphCalculationTask.cpp    |   46 +-
 .../src/ov_msa/Overview/MSAGraphCalculationTask.h  |   12 +-
 .../src/ov_msa/Overview/MSAGraphOverview.cpp       |    7 +-
 .../src/ov_msa/Overview/MSAOverviewContextMenu.cpp |    2 +-
 .../src/ov_msa/Overview/MSASimpleOverview.cpp      |   13 +-
 .../U2View/src/ov_msa/Overview/MSASimpleOverview.h |    4 +-
 .../U2View/src/ov_msa/PairAlign/PairAlign.cpp      |   57 +-
 .../U2View/src/ov_msa/PairAlign/PairAlign.h        |   72 +-
 .../src/ov_msa/PairAlign/PairAlignFactory.cpp      |    2 +-
 .../PairwiseAlignmentOptionsPanelWidget.ui         |    0
 .../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp   |    3 +-
 .../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp    |    2 +-
 .../ov_msa/PhyTrees/MSAEditorTreeViewerTasks.cpp   |  244 -
 .../src/ov_msa/PhyTrees/MSAEditorTreeViewerTasks.h |  100 -
 .../{ui => }/SaveSelectedSequenceFromMSADialog.ui  |    0
 ...SaveSelectedSequenceFromMSADialogController.cpp |   72 +-
 .../SaveSelectedSequenceFromMSADialogController.h  |   21 +-
 .../ov_msa/{ui => }/SelectSubalignmentDialog.ui    |    0
 .../MSADistancesColumnSettingsWidget.ui            |    0
 .../src/ov_msa/SeqStatistics/SeqStatisticsWidget.h |    2 +-
 .../SeqStatistics/SeqStatisticsWidgetFactory.cpp   |    2 +-
 .../src/ov_msa/{ui => }/SequenceSelectorWidget.ui  |    0
 .../src/ov_msa/SequenceSelectorWidgetController.h  |    2 +-
 .../src/ov_msa/TreeOptions/AddTreeWidget.cpp       |  172 -
 .../U2View/src/ov_msa/TreeOptions/AddTreeWidget.h  |   55 -
 .../src/ov_msa/TreeOptions/TreeOptionsWidget.h     |    2 +-
 .../{ui => TreeOptions}/TreeOptionsWidget.ui       |    0
 .../TreeOptions/TreeOptionsWidgetFactory.cpp       |    6 +-
 .../U2View/src/ov_msa/ui/ExportConsensusWidget.ui  |  139 -
 .../src/ov_sequence/ADVSequenceObjectContext.cpp   |   51 +-
 .../src/ov_sequence/ADVSequenceObjectContext.h     |    3 +-
 .../src/ov_sequence/ADVSingleSequenceWidget.cpp    |   18 +-
 .../src/ov_sequence/ADVSingleSequenceWidget.h      |    1 +
 .../U2View/src/ov_sequence/ADVSplitWidget.cpp      |    0
 .../U2View/src/ov_sequence/AnnotatedDNAView.cpp    |   57 +-
 .../U2View/src/ov_sequence/AnnotatedDNAView.h      |    6 +-
 .../U2View/src/ov_sequence/AnnotationsTreeView.cpp |  222 +-
 .../U2View/src/ov_sequence/AnnotationsTreeView.h   |   10 +-
 .../U2View/src/ov_sequence/AutoAnnotationUtils.cpp |    2 +-
 .../src/ov_sequence/{ui => }/CreateRulerDialog.ui  |    0
 .../ov_sequence/CreateRulerDialogController.cpp    |    2 +-
 .../src/ov_sequence/CreateRulerDialogController.h  |    2 +-
 src/corelibs/U2View/src/ov_sequence/DetView.cpp    |   13 +-
 src/corelibs/U2View/src/ov_sequence/DetView.h      |    3 +
 .../ov_sequence/EditAnnotationDialogController.cpp |  144 -
 .../ov_sequence/EditAnnotationDialogController.h   |   56 -
 .../src/ov_sequence/GSequenceLineViewAnnotated.cpp |    4 +-
 .../src/ov_sequence/GraphLabelsSelectDialog.cpp    |    2 +-
 .../U2View/src/ov_sequence/GraphSettingsDialog.cpp |    4 +-
 .../ov_sequence/{ui => }/SaveGraphCutoffsDialog.ui |    0
 .../SaveGraphCutoffsDialogController.cpp           |    2 +-
 .../ov_sequence/SaveGraphCutoffsDialogController.h |    2 +-
 .../src/ov_sequence/SearchQualifierDialog.cpp      |    4 +-
 .../ov_sequence/{ui => }/SearchQualifierDialog.ui  |    0
 .../annot_highlight/AnnotHighlightSettings.h       |    2 +-
 .../{ui => }/AnnotHighlightSettings.ui             |    0
 .../annot_highlight/AnnotHighlightTree.cpp         |    2 +-
 .../AnnotHighlightWidgetFactory.cpp                |    2 +-
 .../src/ov_sequence/codon_table/CodonTable.cpp     |   11 -
 .../src/ov_sequence/codon_table/CodonTable.h       |    8 -
 .../find_pattern/{ui => }/FindPatternForm.ui       |    0
 .../ov_sequence/find_pattern/FindPatternWidget.h   |    2 +-
 .../find_pattern/FindPatternWidgetFactory.cpp      |    2 +-
 .../image_export/SequenceExportSettingsWidget.h    |    2 +-
 .../ov_sequence/image_export/SequencePainter.cpp   |    2 +-
 .../src/ov_sequence/sequence_info/SequenceInfo.cpp |  169 +-
 .../src/ov_sequence/sequence_info/SequenceInfo.h   |   10 +-
 .../sequence_info/SequenceInfoFactory.cpp          |    2 +-
 .../src/ov_sequence/ui/EditAnnotationDialog.ui     |  119 -
 .../view_rendering/DetViewMultiLineRenderer.cpp    |    2 +-
 .../U2View/src/phyltree/BranchSettingsDialog.cpp   |    4 +-
 .../U2View/src/phyltree/BranchSettingsDialog.h     |    2 +-
 .../src/phyltree/{ui => }/BranchSettingsDialog.ui  |    0
 .../src/phyltree/{ui => }/CreatePhyTreeDialog.ui   |    0
 .../src/phyltree/CreatePhyTreeDialogController.cpp |   57 +-
 .../src/phyltree/CreatePhyTreeDialogController.h   |    4 +-
 .../U2View/src/phyltree/CreatePhyTreeWidget.cpp    |    2 +-
 .../src/phyltree/PhyTreeDisplayOptionsWidget.cpp   |    2 +-
 .../{ui => }/PhyTreeDisplayOptionsWidget.ui        |    0
 .../U2View/src/phyltree/TextSettingsDialog.cpp     |    2 +-
 .../U2View/src/phyltree/TextSettingsDialog.h       |    2 +-
 .../src/phyltree/{ui => }/TextSettingsDialog.ui    |    0
 .../U2View/src/phyltree/TreeSettingsDialog.cpp     |    2 +-
 .../U2View/src/phyltree/TreeSettingsDialog.h       |    2 +-
 .../src/phyltree/{ui => }/TreeSettingsDialog.ui    |    0
 .../{ui => }/AssemblyToRefDialog.ui                |    0
 .../src/util_dna_assembly/AssemblyToSamDialog.ui   |  102 +
 .../src/util_dna_assembly/BuildIndexDialog.cpp     |   14 +-
 .../src/util_dna_assembly/BuildIndexDialog.h       |    4 +-
 .../{ui => }/BuildIndexFromRefDialog.ui            |    0
 .../ConvertAssemblyToSamDialog.cpp                 |   62 +-
 .../util_dna_assembly/ConvertAssemblyToSamDialog.h |   15 +-
 .../src/util_dna_assembly/DnaAssemblyDialog.cpp    |  117 +-
 .../src/util_dna_assembly/DnaAssemblyDialog.h      |   22 +-
 .../src/util_dna_assembly/GenomeAssemblyDialog.cpp |    2 +-
 .../src/util_dna_assembly/GenomeAssemblyDialog.h   |    2 +-
 .../{ui => }/GenomeAssemblyDialog.ui               |    0
 .../util_dna_assembly/ui/AssemblyToSamDialog.ui    |   69 -
 .../util_sec_struct_predict/SecStructDialog.cpp    |    2 +-
 .../src/util_sec_struct_predict/SecStructDialog.h  |    4 +-
 .../{ui => }/SecStructDialog.ui                    |    0
 .../util_smith_waterman/SmithWatermanDialog.cpp    |    4 +-
 .../{ui => }/SmithWatermanDialogBase.ui            |    0
 .../util_smith_waterman/SmithWatermanDialogImpl.h  |    4 +-
 .../src/util_smith_waterman/SubstMatrixDialog.h    |    2 +-
 .../{ui => }/SubstMatrixDialogBase.ui              |    0
 src/corelibs/U2View/transl/english.ts              | 2230 +++---
 src/corelibs/U2View/transl/russian.ts              | 2234 +++---
 src/include/3rdparty/sqlite3/sqlite3.h             |    1 +
 src/include/3rdparty/zlib/zlib.h                   |    7 +
 src/include/U2Algorithm/ColorSchemeUtils.h         |    1 +
 src/include/U2Algorithm/MSAColorScheme.h           |    1 -
 src/include/U2Algorithm/MsaColorScheme.h           |    1 +
 src/include/U2Algorithm/MsaHighlightingScheme.h    |    1 +
 src/include/U2Core/CmdlineInOutTaskRunner.h        |    1 +
 src/include/U2Core/CmdlineTaskRunner.h             |    1 +
 src/include/U2Core/SyncHttp.h                      |    1 +
 src/include/U2Gui/EditableTreeView.h               |    1 +
 src/include/U2Gui/MultiClickMenu.h                 |    1 +
 .../U2Gui/RegionSelectorWithExcludedRegion.h       |    1 +
 src/include/U2Gui/SaveDocumentController.h         |    1 +
 src/include/U2Gui/SaveDocumentGroupController.h    |    1 -
 src/include/U2Lang/DatasetFetcher.h                |    1 +
 src/include/U2Remote/DistributedComputingUtil.h    |    1 -
 src/include/U2Remote/PingTask.h                    |    1 -
 src/include/U2Remote/ProtocolInfo.h                |    1 -
 src/include/U2Remote/ProtocolUI.h                  |    1 -
 src/include/U2Remote/RemoteMachine.h               |    1 -
 src/include/U2Remote/RemoteMachineMonitor.h        |    1 -
 .../RemoteMachineMonitorDialogController.h         |    1 -
 src/include/U2Remote/RemoteMachineScanner.h        |    1 -
 src/include/U2Remote/RemoteMachineTasks.h          |    1 -
 src/include/U2Remote/RemoteWorkflowRunTask.h       |    1 -
 src/include/U2Remote/Serializable.h                |    1 -
 src/include/U2Remote/SerializeUtils.h              |    1 -
 src/include/U2Remote/SynchHttp.h                   |    1 -
 src/include/U2Remote/TaskDistributor.h             |    1 -
 .../U2View/EditAnnotationDialogController.h        |    1 -
 src/libs_3rdparty/breakpad/CMakeLists.txt          |   28 +
 src/libs_3rdparty/breakpad/breakpad.pri            |    5 -
 src/libs_3rdparty/gtest/gtest.pri                  |   47 -
 src/libs_3rdparty/gtest/gtest.pro                  |   37 -
 src/libs_3rdparty/gtest/src/gtest-all.cc           |   48 -
 .../gtest/src/gtest/gtest-death-test.h             |  283 -
 src/libs_3rdparty/gtest/src/gtest/gtest-message.h  |  230 -
 .../gtest/src/gtest/gtest-param-test.h             | 1421 ----
 src/libs_3rdparty/gtest/src/gtest/gtest-printers.h |  796 ---
 src/libs_3rdparty/gtest/src/gtest/gtest-spi.h      |  232 -
 .../gtest/src/gtest/gtest-test-part.h              |  176 -
 .../gtest/src/gtest/gtest-typed-test.h             |  259 -
 src/libs_3rdparty/gtest/src/gtest/gtest.h          | 2155 ------
 .../gtest/src/gtest/gtest_pred_impl.h              |  358 -
 src/libs_3rdparty/gtest/src/gtest/gtest_prod.h     |   58 -
 .../src/gtest/internal/gtest-death-test-internal.h |  308 -
 .../gtest/src/gtest/internal/gtest-filepath.h      |  210 -
 .../gtest/src/gtest/internal/gtest-internal.h      | 1226 ----
 .../gtest/src/gtest/internal/gtest-linked_ptr.h    |  233 -
 .../gtest/internal/gtest-param-util-generated.h    | 4822 -------------
 .../internal/gtest-param-util-generated.h.pump     |  301 -
 .../gtest/src/gtest/internal/gtest-param-util.h    |  619 --
 .../gtest/src/gtest/internal/gtest-port.h          | 1788 -----
 .../gtest/src/gtest/internal/gtest-string.h        |  350 -
 .../gtest/src/gtest/internal/gtest-tuple.h         |  968 ---
 .../gtest/src/gtest/internal/gtest-tuple.h.pump    |  336 -
 .../gtest/src/gtest/internal/gtest-type-util.h     | 3330 ---------
 .../src/gtest/internal/gtest-type-util.h.pump      |  296 -
 src/libs_3rdparty/gtest/src/gtest_main.cc          |   40 -
 src/libs_3rdparty/gtest/src/gtest_prod_test.cc     |   57 -
 src/libs_3rdparty/gtest/src/gtest_unittest.cc      | 7337 --------------------
 .../gtest/src/src/gtest-death-test.cc              | 1234 ----
 src/libs_3rdparty/gtest/src/src/gtest-filepath.cc  |  380 -
 .../gtest/src/src/gtest-internal-inl.h             | 1038 ---
 src/libs_3rdparty/gtest/src/src/gtest-port.cc      |  746 --
 src/libs_3rdparty/gtest/src/src/gtest-printers.cc  |  356 -
 src/libs_3rdparty/gtest/src/src/gtest-test-part.cc |  110 -
 .../gtest/src/src/gtest-typed-test.cc              |  110 -
 src/libs_3rdparty/gtest/src/src/gtest.cc           | 4898 -------------
 src/libs_3rdparty/gtest/src/test/production.cc     |   36 -
 src/libs_3rdparty/gtest/src/test/production.h      |   55 -
 src/libs_3rdparty/samtools/CMakeLists.txt          |   33 +
 src/libs_3rdparty/samtools/samtools.pri            |    3 +-
 src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp |    5 +-
 src/libs_3rdparty/samtools/src/samtools/bam.h      |    2 +-
 .../samtools/src/samtools/bam_import.c             |    2 +-
 .../samtools/src/samtools/bam_rmdup.c              |    2 +-
 .../samtools/src/samtools/bcftools/bcf.h           |    2 +-
 .../samtools/src/samtools/bcftools/call1.c         |    2 +-
 .../samtools/src/samtools/bcftools/vcf.c           |    2 +-
 src/libs_3rdparty/samtools/src/samtools/bedidx.c   |    2 +-
 src/libs_3rdparty/samtools/src/samtools/bgzf.h     |    2 +-
 src/libs_3rdparty/samtools/src/samtools/phase.c    |    2 +-
 src/libs_3rdparty/samtools/src/samtools/razf.h     |    2 +-
 src/libs_3rdparty/sqlite3/CMakeLists.txt           |   18 +
 src/libs_3rdparty/sqlite3/sqlite3.pri              |    3 +-
 src/plugins/CoreTests/CMakeLists.txt               |    5 +
 src/plugins/CoreTests/CoreTests.pro                |    2 -
 .../CoreTests/src/AnnotationTableObjectTest.cpp    |    2 +-
 src/plugins/CoreTests/src/CoreTests.cpp            |    3 -
 .../CoreTests/src/PingRemoteServiceTests.cpp       |   78 -
 src/plugins/CoreTests/src/PingRemoteServiceTests.h |   49 -
 src/plugins/GUITestBase/GUITestBase.pri            |   10 +-
 src/plugins/GUITestBase/GUITestBase.pro            |    2 +
 .../src/GTUtilsAnnotationsHighlightingTreeView.cpp |    6 +-
 .../GUITestBase/src/GTUtilsAnnotationsTreeView.cpp |   59 +-
 .../GUITestBase/src/GTUtilsAssemblyBrowser.cpp     |   80 +-
 .../GUITestBase/src/GTUtilsAssemblyBrowser.h       |   14 +-
 .../GUITestBase/src/GTUtilsBookmarksTreeView.cpp   |    6 +-
 src/plugins/GUITestBase/src/GTUtilsDocument.cpp    |   26 +-
 src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp  |    6 +-
 src/plugins/GUITestBase/src/GTUtilsMdi.cpp         |   19 +-
 src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp   |   24 +-
 .../src/GTUtilsMsaEditorSequenceArea.cpp           |   64 +-
 .../GUITestBase/src/GTUtilsMsaEditorSequenceArea.h |    2 +-
 .../GUITestBase/src/GTUtilsNotifications.cpp       |    1 +
 .../GUITestBase/src/GTUtilsOptionPanelMSA.cpp      |    9 +-
 .../src/GTUtilsOptionPanelSequenceView.cpp         |   10 +-
 .../GUITestBase/src/GTUtilsOptionsPanel.cpp        |    8 +-
 src/plugins/GUITestBase/src/GTUtilsPcr.cpp         |   10 +-
 src/plugins/GUITestBase/src/GTUtilsPcr.h           |    1 +
 src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp     |    6 +-
 .../GUITestBase/src/GTUtilsPrimerLibrary.cpp       |   14 +-
 .../GUITestBase/src/GTUtilsProjectTreeView.cpp     |   70 +-
 .../GUITestBase/src/GTUtilsProjectTreeView.h       |    1 +
 .../GUITestBase/src/GTUtilsQueryDesigner.cpp       |    2 +-
 .../GUITestBase/src/GTUtilsSequenceView.cpp        |   44 +-
 .../src/GTUtilsSharedDatabaseDocument.cpp          |   10 +-
 .../GUITestBase/src/GTUtilsTaskTreeView.cpp        |   15 +-
 src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h  |    1 +
 .../GUITestBase/src/GTUtilsWorkflowDesigner.cpp    |   89 +-
 .../GUITestBase/src/GTUtilsWorkflowDesigner.h      |    2 +-
 src/plugins/GUITestBase/src/GUITestBasePlugin.cpp  |  112 +-
 .../GUITestBase/src/api/GTBaseCompleter.cpp        |    5 +-
 .../src/api/GTSequenceReadingModeDialogUtils.cpp   |   22 +-
 .../GUITestBase/src/runnables/qt/EscapeClicker.cpp |    2 +-
 .../ugene/corelibs/U2Gui/AddFolderDialogFiller.cpp |    2 +-
 .../corelibs/U2Gui/AppSettingsDialogFiller.cpp     |   51 +-
 .../ugene/corelibs/U2Gui/AppSettingsDialogFiller.h |    2 +-
 .../U2Gui/CreateAnnotationWidgetFiller.cpp         |    4 -
 .../U2Gui/CreateDocumentFromTextDialogFiller.cpp   |   36 +-
 .../corelibs/U2Gui/EditAnnotationDialogFiller.cpp  |   36 +-
 .../corelibs/U2Gui/EditAnnotationDialogFiller.h    |    6 +-
 .../U2Gui/EditGroupAnnotationsDialogFiller.cpp     |    2 +-
 .../corelibs/U2Gui/EditQualifierDialogFiller.cpp   |   25 +-
 .../corelibs/U2Gui/EditQualifierDialogFiller.h     |   26 +-
 .../corelibs/U2Gui/EditSequenceDialogFiller.cpp    |   33 +-
 .../corelibs/U2Gui/ExportDocumentDialogFiller.cpp  |    4 +-
 .../corelibs/U2Gui/ExportImageDialogFiller.cpp     |   14 +-
 .../ugene/corelibs/U2Gui/ExportImageDialogFiller.h |    8 +-
 .../U2Gui/ImportToDatabaseDialogFiller.cpp         |   24 +-
 .../corelibs/U2Gui/PositionSelectorFiller.cpp      |    3 -
 .../U2Gui/ProjectTreeItemSelectorDialogFiller.cpp  |   24 +-
 .../corelibs/U2Gui/RangeSelectionDialogFiller.cpp  |   12 +-
 .../corelibs/U2Gui/RangeSelectionDialogFiller.h    |   12 +-
 .../U2Gui/RemovePartFromSequenceDialogFiller.cpp   |    2 +-
 .../U2Gui/ReplaceSubsequenceDialogFiller.cpp       |    4 +-
 .../U2Gui/SharedConnectionsDialogFiller.cpp        |    4 +-
 .../ov_assembly/ExportCoverageDialogFiller.cpp     |    4 +-
 .../U2View/ov_assembly/ExportReadsDialogFiller.h   |    2 +-
 .../ExtractAssemblyRegionDialogFiller.cpp          |   65 +
 .../ExtractAssemblyRegionDialogFiller.h            |   45 +
 .../U2View/ov_msa/BuildTreeDialogFiller.cpp        |    4 +-
 .../U2View/ov_msa/DistanceMatrixDialogFiller.cpp   |   60 +-
 .../U2View/ov_msa/DistanceMatrixDialogFiller.h     |    3 +-
 .../ov_msa/ExtractSelectedAsMSADialogFiller.cpp    |    4 +-
 .../U2View/ov_msa/LicenseAgreementDialogFiller.cpp |    6 +-
 .../U2View/ov_msa/LicenseAgreementDialogFiller.h   |    4 +-
 .../dna_export/ExportAnnotationsDialogFiller.cpp   |   35 +-
 .../dna_export/ExportSequences2MSADialogFiller.cpp |   25 +-
 .../dna_export/ExportSequencesDialogFiller.cpp     |   33 +-
 .../dna_export/ExportSequencesDialogFiller.h       |   67 +-
 .../dna_export/ImportAnnotationsToCsvFiller.cpp    |   16 +-
 .../plugins/enzymes/FindEnzymesDialogFiller.cpp    |   60 +-
 .../plugins/enzymes/FindEnzymesDialogFiller.h      |    8 +
 .../plugins/pcr/PrimerLibrarySelectorFiller.cpp    |    6 +-
 .../workflow_designer/AliasesDialogFiller.cpp      |    8 +-
 .../ConfigurationWizardFiller.cpp                  |    4 +-
 .../CreateElementWithCommandLineFiller.cpp         |    6 +-
 .../CreateElementWithCommandLineToolFiller.h       |   24 +-
 .../DashboardsManagerDialogFiller.cpp              |    4 +-
 .../primer3/Primer3DialogFiller.cpp                |    2 +-
 .../ugene/ugeneui/NCBISearchDialogFiller.cpp       |   22 +-
 .../ugene/ugeneui/NCBISearchDialogFiller.h         |    6 +-
 .../GUITestBase/src/test_runner/GUITestRunner.cpp  |    2 +
 .../GUITestBase/src/tests/GUIInitialChecks.cpp     |   26 +-
 .../Assembly_browser/GTTestsAssemblyBrowser.cpp    |  317 +-
 .../Assembly_browser/GTTestsAssemblyBrowser.h      |   14 +
 .../Assembling/dna_assembly/GTTestsIndexReuse.cpp  |   24 +-
 .../Query_Designer/GTTestsQuerryDesigner.cpp       |   21 +-
 .../annotations/GTTestsAnnotations.cpp             |  114 +-
 .../annotations/GTTestsCreateAnnotationWidget.cpp  |   36 +-
 .../annotations/edit/GTTestsAnnotationsEdit.cpp    |  322 +-
 .../qualifiers/GTTestsAnnotationsQualifiers.cpp    |  238 +-
 .../GTTestsAnnotationsImport.cpp                   |  108 +-
 .../document_from_text/GTTestsDocumentFromText.cpp |   43 +-
 .../common_scenarios/dp_view/GTTestsDpView.cpp     |    7 +-
 .../msa_editor/GTTestsMsaEditor.cpp                |  739 +-
 .../common_scenarios/msa_editor/GTTestsMsaEditor.h |    8 +
 .../msa_editor/align/GTTestsAlignSequenceToMsa.cpp |    6 +-
 .../msa_editor/edit/GTTestsMSAEditorEdit.cpp       |   86 +-
 .../overview/GTTestsMSAEditorOverview.cpp          |   20 +-
 .../GTTestsMSAEditorReplaceCharacter.cpp           |  130 +-
 .../options_panel/GTTestsOptionPanel.cpp           |  157 +-
 .../options_panel/msa/GTTestsOptionPanelMSA.cpp    |  131 +-
 .../common_scenarios/pcr/GTTestsInSilicoPcr.cpp    |  225 +-
 .../common_scenarios/pcr/GTTestsInSilicoPcr.h      |    7 +
 .../common_scenarios/pcr/GTTestsPrimerLibrary.cpp  |  124 +-
 .../common_scenarios/pcr/GTTestsPrimerLibrary.h    |    3 +
 .../common_scenarios/project/GTTestsProject.cpp    |  109 +-
 .../GTTestsProjectAnonymousProject.cpp             |    4 +-
 .../project/bookmarks/GTTestsBookmarks.cpp         |   20 +-
 .../GTTestsProjectDocumentModifying.cpp            |   22 +-
 .../project_filtering/GTTestsProjectFiltering.cpp  |   32 +-
 .../project/relations/GTTestsProjectRelations.cpp  |    8 +-
 .../GTTestsProjectSequenceExporting.cpp            |  100 +-
 .../from_project_view/GTTestsFromProjectView.cpp   |  100 +-
 .../user_locking/GTTestsProjectUserLocking.cpp     |   42 +-
 .../repeat_finder/GTTestsRepeatFinder.cpp          |   12 +-
 .../sequence_edit/GTTestsSequenceEdit.cpp          |   18 +-
 .../sequence_view/GTTestsSequenceView.cpp          |  503 +-
 .../sequence_view/GTTestsSequenceView.h            |    5 +-
 .../shared_database/GTTestsSharedDatabase.cpp      |   93 +-
 .../smith_waterman_dialog/GTTestsSWDialog.cpp      |   12 +-
 .../start_page/GTTestsStartPage.cpp                |    8 +-
 .../toggle_view/GTTestsToggleView.cpp              |    4 +-
 .../GTTestsCommonScenariousTreeviewer.cpp          |  201 +-
 .../common_scenarios/undo_redo/GTTestsUndoRedo.cpp |  148 +-
 .../workflow_designer/GTTestsWorkflowDesigner.cpp  |  104 +-
 .../workflow_designer/GTTestsWorkflowDesigner.h    |    1 +
 .../estimating/GTTestsWorkflowEstimating.cpp       |    8 +-
 .../name_filter/GTTestsWorkflowNameFilter.cpp      |   10 +-
 .../GTTestsWorkflowParemeterValidation.cpp         |   84 +-
 .../scripting/GTTestsWorkflowScripting.cpp         |   20 +-
 .../shared_db/GTTestsSharedDbWd.cpp                |    2 +-
 .../GTTestsRegressionScenarios_1001_2000.cpp       |  766 +-
 .../GTTestsRegressionScenarios_1_1000.cpp          |  150 +-
 .../GTTestsRegressionScenarios_2001_3000.cpp       |  810 ++-
 .../GTTestsRegressionScenarios_3001_4000.cpp       |  682 +-
 .../GTTestsRegressionScenarios_4001_5000.cpp       |  382 +-
 .../GTTestsRegressionScenarios_4001_5000.h         |    2 +-
 .../GTTestsRegressionScenarios_5001_6000.cpp       |  528 +-
 .../GTTestsRegressionScenarios_5001_6000.h         |   23 +
 src/plugins/annotator/CMakeLists.txt               |    4 +
 src/plugins/annotator/annotator.pro                |    4 +-
 .../annotator/src/CollocationsDialogController.cpp |    2 +-
 .../annotator/src/CollocationsDialogController.h   |    2 +-
 .../annotator/src/CustomAutoAnnotationDialog.cpp   |    2 +-
 .../annotator/src/CustomAutoAnnotationDialog.h     |    2 +-
 .../annotator/src/CustomAutoAnnotationDialog.ui    |  135 +
 .../{ui => }/FindAnnotationCollocationsDialog.ui   |    0
 .../annotator/src/ui/CustomAutoAnnotationDialog.ui |  135 -
 src/plugins/annotator/transl/english.ts            |   40 +-
 src/plugins/annotator/transl/russian.ts            |   40 +-
 src/plugins/api_tests/CMakeLists.txt               |    8 +
 .../CInterfaceManualTests.cpp                      |   20 +-
 src/plugins/biostruct3d_view/CMakeLists.txt        |    5 +
 src/plugins/biostruct3d_view/biostruct3d_view.pro  |    8 +-
 .../biostruct3d_view/src/AnaglyphRenderer.cpp      |  117 +-
 .../src/BallAndStickGLRenderer.cpp                 |   69 +-
 .../biostruct3d_view/src/BallAndStickGLRenderer.h  |    2 +
 .../biostruct3d_view/src/BioStruct3DGLWidget.cpp   |   75 +-
 .../biostruct3d_view/src/BioStruct3DGLWidget.h     |    3 +
 .../biostruct3d_view/src/BioStruct3DSubsetEditor.h |    2 +-
 .../src/{ui => }/BioStruct3DSubsetEditor.ui        |    0
 .../biostruct3d_view/src/BioStruct3DViewPlugin.cpp |   11 +
 .../biostruct3d_view/src/GLFrameManager.cpp        |   19 +-
 src/plugins/biostruct3d_view/src/GraphicUtils.cpp  |  219 +-
 src/plugins/biostruct3d_view/src/GraphicUtils.h    |    3 +-
 .../src/MolecularSurfaceRenderer.cpp               |   36 +-
 .../biostruct3d_view/src/SelectModelsDialog.cpp    |    4 +-
 .../biostruct3d_view/src/SelectModelsDialog.h      |    2 +-
 .../src/{ui => }/SelectModelsDialog.ui             |    0
 .../biostruct3d_view/src/SettingsDialog.cpp        |    2 +-
 src/plugins/biostruct3d_view/src/SettingsDialog.h  |    2 +-
 .../src/{ui => }/SettingsDialog.ui                 |    0
 .../src/StructuralAlignmentDialog.cpp              |    2 +-
 .../src/StructuralAlignmentDialog.h                |    2 +-
 .../src/{ui => }/StructuralAlignmentDialog.ui      |    0
 .../biostruct3d_view/src/TubeGLRenderer.cpp        |    5 +-
 .../biostruct3d_view/src/VanDerWaalsGLRenderer.cpp |    9 +-
 .../biostruct3d_view/src/WormsGLRenderer.cpp       |   12 +-
 .../src/deprecated/BioStruct3DGLWidget.cpp         |    5 +
 .../src/deprecated/BioStruct3DGLWidget.h           |    3 +
 .../src/deprecated/BioStruct3DSubsetEditor.h       |    2 +-
 .../src/deprecated/BioStruct3DViewPlugin.cpp       |   11 +
 .../src/deprecated/SelectModelsDialog.cpp          |    4 +-
 .../src/deprecated/SelectModelsDialog.h            |    2 +-
 .../src/deprecated/SettingsDialog.cpp              |    2 +-
 .../src/deprecated/SettingsDialog.h                |    2 +-
 .../src/deprecated/StructuralAlignmentDialog.cpp   |    2 +-
 .../src/deprecated/StructuralAlignmentDialog.h     |    2 +-
 .../src/deprecated/WormsGLRenderer.cpp             |    3 +-
 src/plugins/biostruct3d_view/src/gl2ps/gl2ps.cpp   |    2 +-
 src/plugins/biostruct3d_view/transl/english.ts     |   42 +-
 src/plugins/biostruct3d_view/transl/russian.ts     |   42 +-
 src/plugins/browser_support/CMakeLists.txt         |    3 +
 .../browser_support/src/BrowserSupportPlugin.cpp   |    4 +-
 src/plugins/chroma_view/CMakeLists.txt             |    3 +
 src/plugins/chroma_view/src/ChromatogramView.cpp   |    1 +
 src/plugins/chroma_view/transl/english.ts          |    6 +-
 src/plugins/chroma_view/transl/russian.ts          |    6 +-
 src/plugins/circular_view/CMakeLists.txt           |    3 +
 src/plugins/circular_view/circular_view.pri        |    2 +-
 src/plugins/circular_view/circular_view.pro        |    4 +-
 src/plugins/circular_view/src/CircularView.cpp     |   98 +-
 src/plugins/circular_view/src/CircularView.h       |   20 +-
 .../circular_view/src/CircularViewSettingsWidget.h |    2 +-
 .../src/{ui => }/CircularViewSettingsWidget.ui     |    0
 .../src/CircularViewSettingsWidgetFactory.cpp      |    2 +-
 .../circular_view/src/SetSequenceOriginDialog.h    |    2 +-
 .../src/{ui => }/SetSequenceOriginDialog.ui        |    0
 src/plugins/circular_view/transl/english.ts        |   50 +-
 src/plugins/circular_view/transl/russian.ts        |   50 +-
 src/plugins/dbi_bam/CMakeLists.txt                 |    6 +
 src/plugins/dbi_bam/dbi_bam.pri                    |   11 +-
 src/plugins/dbi_bam/src/BAMFormat.cpp              |    9 +-
 src/plugins/dbi_bam/src/BgzfReader.h               |    7 +-
 src/plugins/dbi_bam/src/BgzfWriter.h               |    7 +-
 src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp  |   51 +-
 src/plugins/dbi_bam/src/ConvertToSQLiteDialog.h    |   23 +-
 src/plugins/dbi_bam/src/Dbi.cpp                    |    2 +-
 src/plugins/dna_export/CMakeLists.txt              |    3 +
 src/plugins/dna_export/dna_export.pro              |   22 +-
 .../dna_export/src/{ui => }/BaseContentDialog.ui   |    0
 .../src/CSVColumnConfigurationDialog.cpp           |    2 +-
 .../dna_export/src/CSVColumnConfigurationDialog.h  |    2 +-
 .../src/{ui => }/CSVColumnConfigurationDialog.ui   |    0
 .../dna_export/src/DNASequenceGenerator.cpp        |    2 +-
 src/plugins/dna_export/src/DNASequenceGenerator.h  |    7 +-
 .../dna_export/src/DNASequenceGeneratorDialog.cpp  |   50 +-
 .../dna_export/src/DNASequenceGeneratorDialog.h    |    9 +-
 .../src/{ui => }/DNASequenceGeneratorDialog.ui     |    0
 .../dna_export/src/ExportBlastResultDialog.cpp     |   63 +-
 .../dna_export/src/ExportBlastResultDialog.h       |   19 +-
 .../src/{ui => }/ExportBlastResultDialog.ui        |    0
 .../dna_export/src/ExportChromatogramDialog.cpp    |   50 +-
 .../dna_export/src/ExportChromatogramDialog.h      |   21 +-
 .../src/{ui => }/ExportChromatogramDialog.ui       |    0
 src/plugins/dna_export/src/ExportMSA2MSADialog.cpp |   67 +-
 src/plugins/dna_export/src/ExportMSA2MSADialog.h   |    8 +-
 .../dna_export/src/{ui => }/ExportMSA2MSADialog.ui |    0
 .../dna_export/src/ExportMSA2SequencesDialog.cpp   |   57 +-
 .../dna_export/src/ExportMSA2SequencesDialog.h     |   17 +-
 .../src/{ui => }/ExportMSA2SequencesDialog.ui      |    0
 .../dna_export/src/ExportProjectViewItems.cpp      |    2 +-
 .../dna_export/src/ExportSequenceViewItems.cpp     |    2 +-
 .../dna_export/src/ExportSequences2MSADialog.cpp   |   61 +-
 .../dna_export/src/ExportSequences2MSADialog.h     |   19 +-
 .../src/{ui => }/ExportSequences2MSADialog.ui      |    0
 .../dna_export/src/ExportSequencesDialog.cpp       |   65 +-
 src/plugins/dna_export/src/ExportSequencesDialog.h |   18 +-
 .../src/{ui => }/ExportSequencesDialog.ui          |    0
 .../dna_export/src/GetSequenceByIdDialog.cpp       |    2 +-
 src/plugins/dna_export/src/GetSequenceByIdDialog.h |    2 +-
 .../dna_export/src/GetSequenceByIdDialog.ui        |  143 +
 .../src/ImportAnnotationsFromCSVDialog.cpp         |   50 +-
 .../src/ImportAnnotationsFromCSVDialog.h           |   14 +-
 .../src/{ui => }/ImportAnnotationsFromCSVDialog.ui |    0
 .../src/ImportAnnotationsFromCSVTask.cpp           |    9 +-
 .../dna_export/src/ImportAnnotationsFromCSVTask.h  |    6 +-
 .../dna_export/src/ui/GetSequenceByIdDialog.ui     |  138 -
 src/plugins/dna_export/transl/english.ts           |  431 +-
 src/plugins/dna_export/transl/russian.ts           |  431 +-
 src/plugins/dna_flexibility/CMakeLists.txt         |    3 +
 src/plugins/dna_flexibility/dna_flexibility.pro    |    2 +-
 src/plugins/dna_flexibility/src/DNAFlexDialog.cpp  |    2 +-
 src/plugins/dna_flexibility/src/DNAFlexDialog.h    |    2 +-
 .../dna_flexibility/src/{ui => }/DNAFlexDialog.ui  |    0
 src/plugins/dna_flexibility/src/DNAFlexGraph.cpp   |    5 +-
 src/plugins/dna_flexibility/src/DNAFlexGraph.h     |    4 +-
 src/plugins/dna_flexibility/transl/english.ts      |   22 +-
 src/plugins/dna_flexibility/transl/russian.ts      |   22 +-
 src/plugins/dna_graphpack/CMakeLists.txt           |    3 +
 src/plugins/dna_stat/CMakeLists.txt                |    3 +
 src/plugins/dna_stat/dna_stat.pro                  |    4 +-
 .../dna_stat/src/DNAStatMSAProfileDialog.cpp       |  293 +-
 src/plugins/dna_stat/src/DNAStatMSAProfileDialog.h |   23 +-
 .../src/{ui => }/DNAStatMSAProfileDialog.ui        |    0
 .../src/DistanceMatrixMSAProfileDialog.cpp         |  269 +-
 .../dna_stat/src/DistanceMatrixMSAProfileDialog.h  |   27 +-
 .../src/{ui => }/DistanceMatrixMSAProfileDialog.ui |    0
 src/plugins/dna_stat/transl/english.ts             |  140 +-
 src/plugins/dna_stat/transl/russian.ts             |  140 +-
 src/plugins/dotplot/CMakeLists.txt                 |    3 +
 src/plugins/dotplot/dotplot.pro                    |    6 +-
 src/plugins/dotplot/src/DotPlotDialog.cpp          |    2 +-
 src/plugins/dotplot/src/DotPlotDialog.h            |    2 +-
 src/plugins/dotplot/src/{ui => }/DotPlotDialog.ui  |    0
 src/plugins/dotplot/src/DotPlotFilesDialog.cpp     |    2 +-
 src/plugins/dotplot/src/DotPlotFilesDialog.h       |    2 +-
 .../dotplot/src/{ui => }/DotPlotFilesDialog.ui     |    0
 src/plugins/dotplot/src/DotPlotFilterDialog.cpp    |    2 +-
 src/plugins/dotplot/src/DotPlotFilterDialog.h      |    2 +-
 .../dotplot/src/{ui => }/DotPlotFilterDialog.ui    |    0
 src/plugins/dotplot/src/DotPlotWidget.cpp          |    3 +-
 src/plugins/dotplot/transl/english.ts              |  170 +-
 src/plugins/dotplot/transl/russian.ts              |  170 +-
 src/plugins/enzymes/CMakeLists.txt                 |    3 +
 src/plugins/enzymes/enzymes.pro                    |   14 +-
 src/plugins/enzymes/src/CloningUtilTasks.cpp       |   23 +-
 .../enzymes/src/ConstructMoleculeDialog.cpp        |   59 +-
 src/plugins/enzymes/src/ConstructMoleculeDialog.h  |   11 +-
 src/plugins/enzymes/src/ConstructMoleculeDialog.ui |  374 +
 src/plugins/enzymes/src/CreateFragmentDialog.cpp   |    4 +-
 src/plugins/enzymes/src/CreateFragmentDialog.h     |    2 +-
 .../enzymes/src/{ui => }/CreateFragmentDialog.ui   |    0
 src/plugins/enzymes/src/DNAFragment.cpp            |   14 +-
 src/plugins/enzymes/src/DNAFragment.h              |    2 +-
 src/plugins/enzymes/src/DigestSequenceDialog.cpp   |    2 +-
 src/plugins/enzymes/src/DigestSequenceDialog.h     |    2 +-
 .../enzymes/src/{ui => }/DigestSequenceDialog.ui   |    0
 src/plugins/enzymes/src/EditFragmentDialog.cpp     |    2 +-
 src/plugins/enzymes/src/EditFragmentDialog.h       |    2 +-
 .../enzymes/src/{ui => }/EditFragmentDialog.ui     |    0
 src/plugins/enzymes/src/EnzymesQuery.cpp           |    2 +-
 src/plugins/enzymes/src/EnzymesQuery.h             |    2 +-
 .../enzymes/src/{ui => }/EnzymesSelectorDialog.ui  |    0
 .../enzymes/src/{ui => }/EnzymesSelectorWidget.ui  |    0
 src/plugins/enzymes/src/FindEnzymesDialog.cpp      |   88 +-
 src/plugins/enzymes/src/FindEnzymesDialog.h        |   17 +-
 src/plugins/enzymes/src/FindEnzymesDialog.ui       |  191 +
 src/plugins/enzymes/src/FindEnzymesTask.cpp        |   77 +-
 src/plugins/enzymes/src/FindEnzymesTask.h          |   14 +-
 .../enzymes/src/ui/ConstructMoleculeDialog.ui      |  374 -
 src/plugins/enzymes/src/ui/FindEnzymesDialog.ui    |  204 -
 src/plugins/enzymes/transl/english.ts              |  377 +-
 src/plugins/enzymes/transl/russian.ts              |  377 +-
 .../expert_discovery/expert_discovery.license      |  339 -
 src/plugins/expert_discovery/expert_discovery.pri  |    8 -
 src/plugins/expert_discovery/expert_discovery.pro  |   71 -
 src/plugins/expert_discovery/expert_discovery.qrc  |   31 -
 .../expert_discovery/images/ExpertDiscovery.ico    |  Bin 21630 -> 0 bytes
 .../expert_discovery/images/ExpertDiscoveryDoc.ico |  Bin 1078 -> 0 bytes
 .../expert_discovery/images/ExpertDiscoveryDoc.png |  Bin 3190 -> 0 bytes
 src/plugins/expert_discovery/images/control.ico    |  Bin 318 -> 0 bytes
 src/plugins/expert_discovery/images/control.png    |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/cs.ico         |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/cs.png         |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/csroot.ico     |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/csroot.png     |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/distance.ico   |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/distance.png   |  Bin 870 -> 0 bytes
 .../expert_discovery/images/extractSignals.ico     |  Bin 318 -> 0 bytes
 .../expert_discovery/images/extractSignals.png     |  Bin 870 -> 0 bytes
 .../expert_discovery/images/extractSignals2.ico    |  Bin 318 -> 0 bytes
 .../expert_discovery/images/extractSignals2.png    |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/filenew.png    |  Bin 674 -> 0 bytes
 src/plugins/expert_discovery/images/fileopen.png   |  Bin 518 -> 0 bytes
 src/plugins/expert_discovery/images/filesave.png   |  Bin 724 -> 0 bytes
 src/plugins/expert_discovery/images/folder.ico     |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/folder.png     |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/genRep.ico     |  Bin 318 -> 0 bytes
 src/plugins/expert_discovery/images/genRep.png     |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/icon1.ico      |  Bin 1078 -> 0 bytes
 src/plugins/expert_discovery/images/icon1.png      |  Bin 3190 -> 0 bytes
 src/plugins/expert_discovery/images/interval.ico   |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/interval.png   |  Bin 870 -> 0 bytes
 .../expert_discovery/images/loadControlsSeq.ico    |  Bin 318 -> 0 bytes
 .../expert_discovery/images/loadControlsSeq.png    |  Bin 870 -> 0 bytes
 .../images/loadControlsSeqAnnot.ico                |  Bin 318 -> 0 bytes
 .../images/loadControlsSeqAnnot.png                |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/loadMarkup.ico |  Bin 318 -> 0 bytes
 src/plugins/expert_discovery/images/loadMarkup.png |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/mrkroot.ico    |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/mrkroot.png    |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/negseq.ico     |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/negseq.png     |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/newDoc.ico     |  Bin 318 -> 0 bytes
 src/plugins/expert_discovery/images/newDoc.png     |  Bin 870 -> 0 bytes
 .../expert_discovery/images/optRecBound.ico        |  Bin 198 -> 0 bytes
 .../expert_discovery/images/optRecBound.png        |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/posseq.ico     |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/posseq.png     |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/repetition.ico |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/repetition.png |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/sequence.ico   |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/sequence.png   |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/sequences.ico  |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/sequences.png  |  Bin 870 -> 0 bytes
 .../expert_discovery/images/setRecBound.ico        |  Bin 318 -> 0 bytes
 .../expert_discovery/images/setRecBound.png        |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/ts.ico         |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/ts.png         |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/images/undefined.ico  |  Bin 1406 -> 0 bytes
 src/plugins/expert_discovery/images/undefined.png  |  Bin 870 -> 0 bytes
 src/plugins/expert_discovery/src/DDisc/Context.cpp |  268 -
 src/plugins/expert_discovery/src/DDisc/Context.h   |  239 -
 .../expert_discovery/src/DDisc/Definitions.cpp     |  164 -
 .../expert_discovery/src/DDisc/Extractor.cpp       |  653 --
 src/plugins/expert_discovery/src/DDisc/Extractor.h |  129 -
 .../expert_discovery/src/DDisc/MetaInfo.cpp        |  251 -
 src/plugins/expert_discovery/src/DDisc/MetaInfo.h  |  164 -
 .../expert_discovery/src/DDisc/Sequence.cpp        |  402 --
 src/plugins/expert_discovery/src/DDisc/Sequence.h  |  243 -
 src/plugins/expert_discovery/src/DDisc/Signal.cpp  |  749 --
 src/plugins/expert_discovery/src/DDisc/Signal.h    |  348 -
 .../expert_discovery/src/DDisc/definitions.h       |  225 -
 .../expert_discovery/src/DDisc/statmath.cpp        |   14 -
 src/plugins/expert_discovery/src/DDisc/statmath.h  |   89 -
 .../src/ExpertDiscoveryAdvSetDialog.cpp            |  151 -
 .../src/ExpertDiscoveryAdvSetDialog.h              |   66 -
 .../expert_discovery/src/ExpertDiscoveryCSUtil.cpp |  609 --
 .../expert_discovery/src/ExpertDiscoveryCSUtil.h   |  209 -
 .../src/ExpertDiscoveryControlDialog.cpp           |   77 -
 .../src/ExpertDiscoveryControlDialog.h             |   48 -
 .../src/ExpertDiscoveryControlMrkDialog.cpp        |   76 -
 .../src/ExpertDiscoveryControlMrkDialog.h          |   49 -
 .../expert_discovery/src/ExpertDiscoveryData.cpp   | 1061 ---
 .../expert_discovery/src/ExpertDiscoveryData.h     |  165 -
 .../src/ExpertDiscoveryExtSigWiz.cpp               |  739 --
 .../src/ExpertDiscoveryExtSigWiz.h                 |  237 -
 .../expert_discovery/src/ExpertDiscoveryGraphs.cpp |  310 -
 .../expert_discovery/src/ExpertDiscoveryGraphs.h   |  122 -
 .../src/ExpertDiscoveryPersistent.cpp              |  446 --
 .../src/ExpertDiscoveryPersistent.h                |  167 -
 .../expert_discovery/src/ExpertDiscoveryPlugin.cpp |  269 -
 .../expert_discovery/src/ExpertDiscoveryPlugin.h   |   54 -
 .../src/ExpertDiscoveryPosNegDialog.cpp            |  120 -
 .../src/ExpertDiscoveryPosNegDialog.h              |   59 -
 .../src/ExpertDiscoveryPosNegMrkDialog.cpp         |  147 -
 .../src/ExpertDiscoveryPosNegMrkDialog.h           |   63 -
 .../src/ExpertDiscoveryPropTable.cpp               |  275 -
 .../src/ExpertDiscoveryPropTable.h                 |   71 -
 .../src/ExpertDiscoverySearchDialogController.cpp  |  294 -
 .../src/ExpertDiscoverySearchDialogController.h    |  104 -
 .../expert_discovery/src/ExpertDiscoverySet.cpp    |   15 -
 .../expert_discovery/src/ExpertDiscoverySet.h      |  233 -
 .../src/ExpertDiscoverySetupRecBoundDialog.cpp     |  182 -
 .../src/ExpertDiscoverySetupRecBoundDialog.h       |   67 -
 .../expert_discovery/src/ExpertDiscoveryTask.cpp   | 1396 ----
 .../expert_discovery/src/ExpertDiscoveryTask.h     |  395 --
 .../src/ExpertDiscoveryTreeWidgets.cpp             | 1657 -----
 .../src/ExpertDiscoveryTreeWidgets.h               |  643 --
 .../src/ExpertDiscoveryTreeWidgetsCtrl.cpp         | 1223 ----
 .../src/ExpertDiscoveryTreeWidgetsCtrl.h           |  177 -
 .../expert_discovery/src/ExpertDiscoveryView.cpp   | 1122 ---
 .../expert_discovery/src/ExpertDiscoveryView.h     |  203 -
 .../src/ExpertDiscoveryViewCtx.cpp                 |   54 -
 .../expert_discovery/src/ExpertDiscoveryViewCtx.h  |   31 -
 .../src/ui/ExpertDiscoveryAdvSetDialog.ui          |  208 -
 .../src/ui/ExpertDiscoveryControlDialog.ui         |  142 -
 .../src/ui/ExpertDiscoveryControlMrkDialog.ui      |  115 -
 .../src/ui/ExpertDiscoveryPosNegDialog.ui          |  233 -
 .../src/ui/ExpertDiscoveryPosNegMrkDialog.ui       |  204 -
 .../src/ui/ExpertDiscoverySearchDialog.ui          |  183 -
 .../src/ui/ExpertDiscoverySetupRecBoundDialog.ui   |  390 --
 .../src/ui/ExpertDiscoverySigExtrWiz.ui            |  399 --
 src/plugins/expert_discovery/transl/english.ts     | 1156 ---
 src/plugins/expert_discovery/transl/russian.ts     | 1157 ---
 src/plugins/external_tool_support/CMakeLists.txt   |    3 +
 .../external_tool_support.pro                      |   40 +-
 .../src/{ui => }/ETSSettingsWidget.ui              |    0
 .../src/ExternalToolSupportSettingsController.cpp  |    2 +-
 .../src/ExternalToolSupportSettingsController.h    |    2 +-
 .../src/blast/BlastAllSupportRunDialog.h           |    1 -
 .../src/blast/FormatDBSupportRunDialog.cpp         |    2 +-
 .../src/blast/FormatDBSupportRunDialog.h           |    2 +-
 .../src/{ui => blast}/FormatDBSupportRunDialog.ui  |    0
 .../src/blast_plus/BlastDBCmdDialog.cpp            |   78 +-
 .../src/blast_plus/BlastDBCmdDialog.h              |   17 +-
 .../src/blast_plus/BlastDBCmdDialog.ui             |  170 +
 .../src/blast_plus/BlastPlusSupportRunDialog.h     |    1 -
 .../src/{ui => bowtie}/BowtieBuildSettings.ui      |    0
 .../src/{ui => bowtie}/BowtieSettings.ui           |    0
 .../src/bowtie/BowtieSettingsWidget.h              |    4 +-
 .../src/{ui => bowtie2}/Bowtie2Settings.ui         |    0
 .../src/bowtie2/Bowtie2SettingsWidget.h            |    2 +-
 .../src/bwa/BwaBuildSettings.ui                    |  104 +
 .../src/{ui => bwa}/BwaMemSettings.ui              |    0
 .../src/{ui => bwa}/BwaSettings.ui                 |    0
 .../src/bwa/BwaSettingsWidget.cpp                  |   46 +-
 .../src/bwa/BwaSettingsWidget.h                    |    8 +-
 .../src/{ui => bwa}/BwaSwSettings.ui               |    0
 .../external_tool_support/src/bwa/BwaTask.cpp      |  329 +-
 .../external_tool_support/src/bwa/BwaTask.h        |   17 +-
 .../src/cap3/CAP3SupportDialog.cpp                 |   61 +-
 .../src/cap3/CAP3SupportDialog.h                   |   19 +-
 .../src/cap3/CAP3SupportDialog.ui                  |  509 ++
 .../src/clustalo/ClustalOSupport.cpp               |    2 +-
 .../src/clustalo/ClustalOSupportRunDialog.cpp      |   94 +-
 .../src/clustalo/ClustalOSupportRunDialog.h        |   18 +-
 .../src/clustalo/ClustalOSupportRunDialog.ui       |  400 ++
 .../src/clustalw/ClustalWSupport.cpp               |    2 +-
 .../src/clustalw/ClustalWSupportRunDialog.cpp      |   97 +-
 .../src/clustalw/ClustalWSupportRunDialog.h        |   20 +-
 .../src/clustalw/ClustalWSupportRunDialog.ui       |  639 ++
 .../src/cufflinks/CuffdiffSupportTask.cpp          |    3 +
 .../src/cufflinks/CufflinksSupportTask.cpp         |    2 +
 .../external_tool_support/src/macs/MACSWorker.cpp  |   11 +-
 .../src/mafft/MAFFTSupportRunDialog.cpp            |   92 +-
 .../src/mafft/MAFFTSupportRunDialog.h              |   27 +-
 .../src/mafft/MAFFTSupportRunDialog.ui             |  314 +
 .../src/{ui => mrbayes}/MrBayesDialog.ui           |    0
 .../src/mrbayes/MrBayesDialogWidget.h              |    2 +-
 .../external_tool_support/src/phyml/PhyMLDialog.ui |  587 ++
 .../src/phyml/PhyMLDialogWidget.h                  |    2 +-
 .../src/snpeff/SnpEffSupport.cpp                   |   45 +-
 .../src/snpeff/SnpEffTask.cpp                      |   91 +-
 .../src/{ui => spades}/SpadesSettings.ui           |    0
 .../src/spades/SpadesSettingsWidget.h              |    2 +-
 .../src/tcoffee/TCoffeeSupportRunDialog.cpp        |   90 +-
 .../src/tcoffee/TCoffeeSupportRunDialog.h          |   24 +-
 .../src/tcoffee/TCoffeeSupportRunDialog.ui         |  284 +
 .../src/tophat/TopHatSettings.cpp                  |   25 +-
 .../src/tophat/TopHatSupportTask.cpp               |    4 +
 .../src/ui/BlastDBCmdDialog.ui                     |  137 -
 .../src/ui/BlastDBSelectorWidget.ui                |   81 -
 .../src/ui/BwaBuildSettings.ui                     |   90 -
 .../src/ui/CAP3SupportDialog.ui                    |  512 --
 .../src/ui/ClustalOSupportRunDialog.ui             |  368 -
 .../src/ui/ClustalWSupportRunDialog.ui             |  607 --
 .../src/ui/MAFFTSupportRunDialog.ui                |  282 -
 .../external_tool_support/src/ui/PhyMLDialog.ui    |  587 --
 .../src/ui/TCoffeeSupportRunDialog.ui              |  252 -
 .../src/utils/BaseShortReadsAlignerWorker.cpp      |   86 +-
 .../src/utils/BaseShortReadsAlignerWorker.h        |   11 +-
 .../src/{ui => utils}/BlastAllSupportDialog.ui     |    0
 .../src/utils/BlastDBSelectorWidget.ui             |   81 +
 .../src/utils/BlastDBSelectorWidgetController.h    |    2 +-
 .../src/utils/BlastRunCommonDialog.cpp             |    2 +-
 .../src/utils/BlastRunCommonDialog.h               |    2 +-
 .../src/utils/ExternalToolValidateTask.cpp         |    6 +-
 .../src/utils/ExternalToolValidateTask.h           |    2 +
 .../external_tool_support/transl/english.ts        | 1236 ++--
 .../external_tool_support/transl/russian.ts        | 1258 ++--
 src/plugins/genome_aligner/CMakeLists.txt          |    3 +
 src/plugins/genome_aligner/genome_aligner.pro      |    6 +-
 .../genome_aligner/src/BuildSArraySettingsWidget.h |    2 +-
 .../src/{ui => }/BuildSuffixArraySettings.ui       |    0
 .../src/{ui => }/GenomeAlignerSettings.ui          |    0
 .../src/GenomeAlignerSettingsController.cpp        |    2 +-
 .../src/GenomeAlignerSettingsController.h          |    2 +-
 .../src/GenomeAlignerSettingsWidget.h              |    2 +-
 .../src/{ui => }/GenomeAlignerSettingsWidget.ui    |    0
 src/plugins/genome_aligner/transl/english.ts       |   82 +-
 src/plugins/genome_aligner/transl/russian.ts       |   82 +-
 src/plugins/linkdata_support/CMakeLists.txt        |    3 +
 .../opencl_support/src/OpenCLSupportPlugin.cpp     |   22 +-
 .../opencl_support/src/OpenCLSupportPlugin.h       |    6 +-
 .../src/OpenCLSupportSettingsController.cpp        |    2 +-
 src/plugins/orf_marker/CMakeLists.txt              |    3 +
 src/plugins/orf_marker/orf_marker.pro              |    2 +-
 src/plugins/orf_marker/src/ORFDialog.cpp           |    4 +-
 src/plugins/orf_marker/src/ORFDialog.h             |    2 +-
 src/plugins/orf_marker/src/{ui => }/ORFDialogUI.ui |    0
 src/plugins/orf_marker/src/ORFMarkerTask.cpp       |    6 +-
 src/plugins/pcr/CMakeLists.txt                     |    3 +
 src/plugins/pcr/html/report.html                   |    1 +
 src/plugins/pcr/pcr.pro                            |   16 +-
 src/plugins/pcr/src/EditPrimerDialog.cpp           |    5 +-
 src/plugins/pcr/src/EditPrimerDialog.h             |    2 +-
 src/plugins/pcr/src/{ui => }/EditPrimerDialog.ui   |    0
 src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp |    2 +-
 .../pcr/src/InSilicoPcrOptionPanelWidget.cpp       |   10 +-
 src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.h |    2 +-
 .../src/{ui => }/InSilicoPcrOptionPanelWidget.ui   |    0
 src/plugins/pcr/src/InSilicoPcrProductsTable.cpp   |    7 +-
 src/plugins/pcr/src/InSilicoPcrTask.cpp            |   41 +-
 src/plugins/pcr/src/Primer.cpp                     |    2 +
 src/plugins/pcr/src/Primer.h                       |    2 +
 src/plugins/pcr/src/PrimerDimersFinder.cpp         |    3 +-
 src/plugins/pcr/src/PrimerGroupBox.cpp             |  134 +-
 src/plugins/pcr/src/PrimerGroupBox.h               |   23 +-
 src/plugins/pcr/src/{ui => }/PrimerGroupBox.ui     |    0
 src/plugins/pcr/src/PrimerLibrary.cpp              |   19 +-
 src/plugins/pcr/src/PrimerLibrary.h                |    1 +
 src/plugins/pcr/src/PrimerLibrarySelector.cpp      |    2 +-
 src/plugins/pcr/src/PrimerLibrarySelector.h        |    2 +-
 .../pcr/src/{ui => }/PrimerLibrarySelector.ui      |    0
 src/plugins/pcr/src/PrimerLibraryTable.cpp         |    4 +-
 src/plugins/pcr/src/PrimerLibraryWidget.cpp        |    4 +-
 src/plugins/pcr/src/PrimerLibraryWidget.h          |    2 +-
 .../pcr/src/{ui => }/PrimerLibraryWidget.ui        |    0
 src/plugins/pcr/src/PrimerLineEdit.cpp             |   16 +-
 src/plugins/pcr/src/PrimerLineEdit.h               |    2 +-
 src/plugins/pcr/src/PrimerStatistics.cpp           |   66 +-
 src/plugins/pcr/src/PrimerStatistics.h             |    9 +-
 src/plugins/pcr/src/PrimersDetailsDialog.cpp       |    2 +-
 src/plugins/pcr/src/PrimersDetailsDialog.h         |    2 +-
 .../pcr/src/{ui => }/PrimersDetailsDialog.ui       |    0
 src/plugins/pcr/src/export/ExportPrimersDialog.cpp |   90 +-
 src/plugins/pcr/src/export/ExportPrimersDialog.h   |    9 +-
 .../pcr/src/{ui => export}/ExportPrimersDialog.ui  |    0
 .../pcr/src/import/ImportPrimerFromObjectTask.cpp  |   10 +-
 .../pcr/src/import/ImportPrimerFromObjectTask.h    |    2 +
 src/plugins/pcr/src/import/ImportPrimersDialog.cpp |    4 +-
 src/plugins/pcr/src/import/ImportPrimersDialog.h   |    2 +-
 .../pcr/src/{ui => import}/ImportPrimersDialog.ui  |    0
 src/plugins/pcr/transl/english.ts                  |  197 +-
 src/plugins/pcr/transl/russian.ts                  |  197 +-
 src/plugins/perf_monitor/CMakeLists.txt            |    3 +
 src/plugins/query_designer/CMakeLists.txt          |    3 +
 src/plugins/query_designer/query_designer.pro      |    8 +-
 .../src/{ui => }/AddConstraintDialog.ui            |    0
 .../query_designer/src/{ui => }/QDDialog.ui        |    0
 src/plugins/query_designer/src/QDRunDialog.cpp     |   91 +-
 src/plugins/query_designer/src/QDRunDialog.h       |   22 +-
 .../src/{ui => }/QueryEditorWidget.ui              |    0
 .../query_designer/src/QueryViewController.cpp     |    2 +-
 .../query_designer/src/{ui => }/RunQueryDialog.ui  |    0
 src/plugins/query_designer/transl/english.ts       |   80 +-
 src/plugins/query_designer/transl/russian.ts       |   80 +-
 src/plugins/remote_blast/CMakeLists.txt            |    3 +
 src/plugins/remote_blast/remote_blast.pro          |    2 +-
 .../remote_blast/src/{ui => }/RemoteBLASTDialog.ui |    0
 .../remote_blast/src/SendSelectionDialog.cpp       |    2 +-
 src/plugins/remote_blast/src/SendSelectionDialog.h |    2 +-
 src/plugins/remote_blast/transl/english.ts         |  152 +-
 src/plugins/remote_blast/transl/russian.ts         |  152 +-
 src/plugins/remote_service/remote_service.license  |  339 -
 src/plugins/remote_service/remote_service.pri      |    7 -
 src/plugins/remote_service/remote_service.pro      |   29 -
 src/plugins/remote_service/src/Base64File.cpp      |  107 -
 src/plugins/remote_service/src/Base64File.h        |   58 -
 .../remote_service/src/BufferedDataReader.cpp      |  200 -
 .../remote_service/src/BufferedDataReader.h        |   60 -
 .../remote_service/src/RemoteServiceCommon.h       |   14 -
 .../remote_service/src/RemoteServiceMachine.cpp    |  627 --
 .../remote_service/src/RemoteServiceMachine.h      |  178 -
 .../remote_service/src/RemoteServicePingTask.cpp   |   78 -
 .../remote_service/src/RemoteServicePingTask.h     |   46 -
 .../remote_service/src/RemoteServicePlugin.cpp     |  117 -
 .../remote_service/src/RemoteServicePlugin.h       |   53 -
 .../remote_service/src/RemoteServiceSettingsUI.cpp |  118 -
 .../remote_service/src/RemoteServiceSettingsUI.h   |   49 -
 .../remote_service/src/RemoteServiceUtilTasks.cpp  |  123 -
 .../remote_service/src/RemoteServiceUtilTasks.h    |   75 -
 .../remote_service/src/RemoteTasksDialog.cpp       |  232 -
 src/plugins/remote_service/src/RemoteTasksDialog.h |   72 -
 .../remote_service/src/UctpRequestBuilders.cpp     |  172 -
 .../remote_service/src/UctpRequestBuilders.h       |  110 -
 .../remote_service/src/WebTransportProtocol.cpp    |  230 -
 .../remote_service/src/WebTransportProtocol.h      |  200 -
 src/plugins/remote_service/src/base64/cdecode.c    |  109 -
 src/plugins/remote_service/src/base64/cdecode.h    |   28 -
 src/plugins/remote_service/src/base64/cencode.c    |  130 -
 src/plugins/remote_service/src/base64/cencode.h    |   31 -
 .../src/ui/RemoteServiceSupportUI.ui               |  262 -
 .../remote_service/src/ui/TaskStatisticsDialog.ui  |  157 -
 src/plugins/remote_service/transl/english.ts       |  316 -
 src/plugins/remote_service/transl/russian.ts       |  316 -
 src/plugins/repeat_finder/CMakeLists.txt           |    3 +
 src/plugins/repeat_finder/repeat_finder.pri        |   13 -
 src/plugins/repeat_finder/repeat_finder.pro        |    4 +-
 .../repeat_finder/src/FindRepeatsDialog.cpp        |    2 +-
 src/plugins/repeat_finder/src/FindRepeatsDialog.h  |    2 +-
 .../src/{ui => }/FindRepeatsDialog.ui              |    0
 .../repeat_finder/src/FindTandemsDialog.cpp        |    2 +-
 src/plugins/repeat_finder/src/FindTandemsDialog.h  |    2 +-
 .../src/{ui => }/FindTandemsDialog.ui              |    0
 src/plugins/repeat_finder/src/RepeatTest.cpp       |   29 -
 src/plugins/repeat_finder/src/RepeatTest.h         |   25 -
 src/plugins/repeat_finder/transl/english.ts        |   92 +-
 src/plugins/repeat_finder/transl/russian.ts        |   92 +-
 src/plugins/smith_waterman/CMakeLists.txt          |    5 +
 src/plugins/smith_waterman/smith_waterman.pro      |    2 +-
 .../PairwiseAlignmentSmithWatermanGUIExtension.h   |    2 +-
 ...AlignmentSmithWatermanOptionsPanelMainWidget.ui |    0
 src/plugins/smith_waterman/src/SWAlgorithmTask.cpp |   25 +-
 .../smith_waterman/src/SmithWatermanTests.cpp      |    6 -
 src/plugins/smith_waterman/transl/english.ts       |   34 +-
 src/plugins/smith_waterman/transl/russian.ts       |   34 +-
 src/plugins/test_runner/CMakeLists.txt             |    5 +
 .../test_runner/src/ExcludeReasonDialog.cpp        |    2 +-
 src/plugins/test_runner/src/ExcludeReasonDialog.h  |    9 +-
 .../src/{ui => }/ExcludeReasonDialog.ui            |    0
 .../src/{ui => }/ExcludeResaonDialog.ui            |    0
 src/plugins/test_runner/src/{ui => }/Reporter.ui   |    0
 src/plugins/test_runner/src/{ui => }/TestView.ui   |    0
 src/plugins/test_runner/src/TestViewController.h   |    4 +-
 src/plugins/test_runner/src/TestViewReporter.h     |    4 +-
 src/plugins/test_runner/test_runner.pro            |    6 +-
 src/plugins/test_runner/transl/english.ts          |   18 +-
 src/plugins/test_runner/transl/russian.ts          |   18 +-
 src/plugins/weight_matrix/CMakeLists.txt           |    3 +
 .../src/{ui => }/MatrixAndLogoWidget.ui            |    0
 .../weight_matrix/src/{ui => }/PWMBuildDialog.ui   |    0
 .../weight_matrix/src/PWMBuildDialogController.cpp |  111 +-
 .../weight_matrix/src/PWMBuildDialogController.h   |   28 +-
 .../src/PWMJASPARDialogController.cpp              |    2 +-
 .../weight_matrix/src/PWMJASPARDialogController.h  |    2 +-
 .../weight_matrix/src/{ui => }/PWMSearchDialog.ui  |    0
 .../src/PWMSearchDialogController.cpp              |    2 +-
 .../weight_matrix/src/PWMSearchDialogController.h  |    2 +-
 .../src/{ui => }/SearchJASPARDatabase.ui           |    0
 .../src/{ui => }/SetDefaultParametersDialog.ui     |    0
 .../src/SetParametersDialogController.cpp          |    2 +-
 .../src/SetParametersDialogController.h            |    2 +-
 .../weight_matrix/src/{ui => }/ViewMatrixDialog.ui |    0
 .../src/ViewMatrixDialogController.cpp             |    2 +-
 .../weight_matrix/src/ViewMatrixDialogController.h |    4 +-
 src/plugins/weight_matrix/transl/english.ts        |  208 +-
 src/plugins/weight_matrix/transl/russian.ts        |  208 +-
 src/plugins/weight_matrix/weight_matrix.pro        |   12 +-
 src/plugins/workflow_designer/CMakeLists.txt       |    3 +
 .../workflow_designer/src/ChooseItemDialog.h       |    2 +-
 .../src/{ui => }/ChooseItemDialog.ui               |    0
 .../src/{ui => }/CreateScriptBlockDialog.ui        |    0
 .../workflow_designer/src/CreateScriptWorker.cpp   |    2 +-
 .../workflow_designer/src/CreateScriptWorker.h     |    2 +-
 .../src/DashboardsManagerDialog.cpp                |    2 +-
 .../src/DashboardsManagerDialog.h                  |    2 +-
 .../src/{ui => }/DashboardsManagerDialog.ui        |    0
 .../{ui => }/GalaxyConfigConfigurationDialog.ui    |    0
 .../src/GalaxyConfigConfigurationDialogImpl.h      |    2 +-
 .../workflow_designer/src/ImportSchemaDialog.cpp   |    2 +-
 .../workflow_designer/src/ImportSchemaDialog.h     |    2 +-
 .../src/{ui => }/ImportSchemaDialog.ui             |    0
 .../src/{ui => }/PaletteWidget.ui                  |    0
 .../src/PortAliasesConfigurationDialog.cpp         |    2 +-
 .../src/PortAliasesConfigurationDialog.h           |    2 +-
 .../src/{ui => }/PortAliasesConfigurationDialog.ui |    0
 .../{ui => }/SchemaAliasesConfigurationDialog.ui   |    0
 .../src/SchemaAliasesConfigurationDialogImpl.cpp   |    2 +-
 .../src/SchemaAliasesConfigurationDialogImpl.h     |    2 +-
 .../workflow_designer/src/StartupDialog.cpp        |    2 +-
 src/plugins/workflow_designer/src/StartupDialog.h  |    4 +-
 .../src/{ui => }/StartupDialog.ui                  |    0
 .../src/WorkflowDesignerPlugin.cpp                 |    7 +-
 .../workflow_designer/src/WorkflowDesignerPlugin.h |    2 -
 src/plugins/workflow_designer/src/WorkflowEditor.h |    2 +-
 .../src/{ui => }/WorkflowEditorWidget.ui           |    0
 .../workflow_designer/src/WorkflowMetaDialog.cpp   |   43 +-
 .../workflow_designer/src/WorkflowMetaDialog.h     |   12 +-
 .../src/{ui => }/WorkflowMetaDialog.ui             |    0
 .../workflow_designer/src/WorkflowPalette.cpp      |    4 +-
 .../workflow_designer/src/WorkflowPalette.h        |    2 +-
 .../src/WorkflowSettingsController.cpp             |    2 +-
 .../src/WorkflowSettingsController.h               |    2 +-
 .../src/{ui => }/WorkflowSettingsWidget.ui         |    0
 .../src/WorkflowViewController.cpp                 |   26 +-
 .../workflow_designer/src/WorkflowViewController.h |    1 -
 .../src/cmdline/WorkflowCMDLineTasks.cpp           |   31 -
 .../src/cmdline/WorkflowCMDLineTasks.h             |   13 -
 .../src/library/CreateExternalProcessDialog.cpp    |  202 +-
 .../src/library/CreateExternalProcessDialog.h      |    4 +-
 .../{ui => library}/ExternalProcessWorkerDialog.ui |    0
 .../src/library/ExtractAssemblyCoverageWorker.cpp  |   12 +-
 .../src/tasks/ReadAssemblyTask.cpp                 |    2 +-
 src/plugins/workflow_designer/transl/english.ts    |  564 +-
 src/plugins/workflow_designer/transl/russian.ts    |  854 +--
 .../workflow_designer/workflow_designer.pro        |   26 +-
 src/plugins_3rdparty/ball/CMakeLists.txt           |    6 +
 .../ball/src/source/COMMON/exception.cpp           |    6 +-
 src/plugins_3rdparty/gor4/CMakeLists.txt           |    3 +
 src/plugins_3rdparty/hmm2/CMakeLists.txt           |    3 +
 src/plugins_3rdparty/hmm2/hmm2.pro                 |    6 +-
 .../hmm2/src/u_build/{ui => }/HMMBuildDialog.ui    |    0
 .../hmm2/src/u_build/HMMBuildDialogController.cpp  |   48 +-
 .../hmm2/src/u_build/HMMBuildDialogController.h    |   18 +-
 .../src/u_calibrate/{ui => }/HMMCalibrateDialog.ui |    0
 .../u_calibrate/HMMCalibrateDialogController.cpp   |   48 +-
 .../src/u_calibrate/HMMCalibrateDialogController.h |   18 +-
 .../hmm2/src/u_search/{ui => }/HMMSearchDialog.ui  |    0
 .../src/u_search/HMMSearchDialogController.cpp     |    2 +-
 .../hmm2/src/u_search/HMMSearchDialogController.h  |    2 +-
 src/plugins_3rdparty/hmm2/transl/english.ts        |  234 +-
 src/plugins_3rdparty/hmm2/transl/russian.ts        |  234 +-
 src/plugins_3rdparty/hmm3/CMakeLists.txt           |    5 +
 src/plugins_3rdparty/hmm3/hmm3.pro                 |    8 +-
 .../hmm3/src/build/UHMM3BuildDialog.ui             |  898 +++
 .../hmm3/src/build/uHMM3BuildDialogImpl.cpp        |   45 +-
 .../hmm3/src/build/uHMM3BuildDialogImpl.h          |   14 +-
 .../hmm3/src/build/ui/UHMM3BuildDialog.ui          |  895 ---
 .../hmm3/src/hmmer3/easel/easel.cpp                |    8 +-
 .../hmm3/src/hmmer3/easel/esl_dirichlet.cpp        |    6 +-
 .../hmm3/src/hmmer3/hmmer3_funcs.cpp               |    2 +-
 .../hmm3/src/hmmer3/hmmer3_funcs.h                 |    1 +
 .../hmm3/src/hmmer3/impl_sse/decoding.cpp          |    4 +-
 .../hmm3/src/hmmer3/impl_sse/fwdback.cpp           |    8 +-
 .../hmm3/src/phmmer/{ui => }/UHMM3PhmmerDialog.ui  |    0
 .../hmm3/src/phmmer/uHMM3PhmmerDialogImpl.cpp      |    2 +-
 .../hmm3/src/phmmer/uHMM3PhmmerDialogImpl.h        |    2 +-
 .../hmm3/src/search/Hmmer3SearchWorkflowTask.cpp   |  134 +
 .../hmm3/src/search/Hmmer3SearchWorkflowTask.h     |   63 +
 .../hmm3/src/search/{ui => }/UHMM3SearchDialog.ui  |    0
 .../hmm3/src/search/uHMM3SearchDialogImpl.cpp      |    9 +-
 .../hmm3/src/search/uHMM3SearchDialogImpl.h        |    2 +-
 .../hmm3/src/search/uHMM3SearchTask.cpp            |  163 -
 .../hmm3/src/search/uHMM3SearchTask.h              |   36 -
 .../hmm3/src/workers/HMM3SearchWorker.cpp          |  127 +-
 .../hmm3/src/workers/HMM3SearchWorker.h            |   11 +-
 src/plugins_3rdparty/hmm3/transl/english.ts        |  463 +-
 src/plugins_3rdparty/hmm3/transl/russian.ts        |  463 +-
 src/plugins_3rdparty/kalign/CMakeLists.txt         |    3 +
 src/plugins_3rdparty/kalign/kalign.pro             |    5 +-
 .../kalign/src/{ui => }/KalignDialog.ui            |    0
 .../kalign/src/KalignDialogController.cpp          |   79 +-
 .../kalign/src/KalignDialogController.h            |   23 +-
 ...airwiseAlignmentHirschbergGUIExtensionFactory.h |    2 +-
 ...iseAlignmentHirschbergOptionsPanelMainWidget.ui |    0
 .../kalign/src/kalign2/kalign2_hirschberg_large.c  | 2508 -------
 .../kalign/src/kalign2/kalign2_hirschberg_large.h  |   71 -
 .../kalign/src/kalign2/kalign2_simple_gaps.c       |  869 ---
 .../kalign/src/kalign2/kalign2_upgma.c             |  283 -
 src/plugins_3rdparty/kalign/transl/english.ts      |   52 +-
 src/plugins_3rdparty/kalign/transl/russian.ts      |   52 +-
 src/plugins_3rdparty/phylip/CMakeLists.txt         |    3 +
 src/plugins_3rdparty/phylip/phylip.pro             |    6 +-
 .../phylip/src/NeighborJoinAdapter.cpp             |    3 +-
 .../phylip/src/NeighborJoinWidget.h                |    4 +-
 .../phylip/src/{ui => }/NeighborJoinWidget.ui      |    0
 .../phylip/src/PhylipCmdlineTask.cpp               |  120 +
 .../phylip/src/PhylipCmdlineTask.h                 |   68 +
 src/plugins_3rdparty/phylip/src/PhylipPlugin.cpp   |   95 +-
 src/plugins_3rdparty/phylip/src/PhylipPlugin.h     |    3 +-
 .../phylip/src/PhylipPluginTests.cpp               |    4 +
 src/plugins_3rdparty/phylip/src/PhylipTask.cpp     |   62 +
 src/plugins_3rdparty/phylip/src/PhylipTask.h       |   54 +
 src/plugins_3rdparty/phylip/transl/english.ts      |   49 +-
 src/plugins_3rdparty/phylip/transl/russian.ts      |   49 +-
 src/plugins_3rdparty/primer3/CMakeLists.txt        |    3 +
 src/plugins_3rdparty/primer3/primer3.pro           |    2 +-
 .../primer3/src/FindExonRegionsTask.cpp            |    2 +-
 src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp |    2 +-
 src/plugins_3rdparty/primer3/src/Primer3Dialog.h   |    2 +-
 .../primer3/src/{ui => }/Primer3Dialog.ui          |    0
 src/plugins_3rdparty/primer3/src/Primer3Task.cpp   |    4 +-
 src/plugins_3rdparty/primer3/src/Primer3Task.h     |    2 +-
 .../primer3/src/Primer3TaskSettings.cpp            |    2 +-
 .../primer3/src/Primer3TaskSettings.h              |    2 +-
 src/plugins_3rdparty/primer3/src/Primer3Tests.cpp  |    2 +-
 src/plugins_3rdparty/primer3/transl/english.ts     |  532 +-
 src/plugins_3rdparty/primer3/transl/russian.ts     |  532 +-
 src/plugins_3rdparty/psipred/CMakeLists.txt        |    3 +
 src/plugins_3rdparty/psipred/src/sspred_avpred.cpp |   12 +-
 src/plugins_3rdparty/psipred/src/sspred_avpred.h   |    2 +-
 src/plugins_3rdparty/ptools/CMakeLists.txt         |    3 +
 src/plugins_3rdparty/sitecon/CMakeLists.txt        |    3 +
 src/plugins_3rdparty/sitecon/sitecon.pro           |    2 +-
 .../sitecon/src/{ui => }/SiteconBuildDialog.ui     |    0
 .../sitecon/src/SiteconBuildDialogController.cpp   |   51 +-
 .../sitecon/src/SiteconBuildDialogController.h     |   14 +-
 .../sitecon/src/{ui => }/SiteconSearchDialog.ui    |    0
 .../sitecon/src/SiteconSearchDialogController.cpp  |    2 +-
 .../sitecon/src/SiteconSearchDialogController.h    |    2 +-
 src/plugins_3rdparty/sitecon/transl/english.ts     |  157 +-
 src/plugins_3rdparty/sitecon/transl/russian.ts     |  157 +-
 src/plugins_3rdparty/umuscle/CMakeLists.txt        |    6 +
 .../umuscle/src/{ui => }/MuscleAlignDialog.ui      |    0
 .../umuscle/src/MuscleAlignDialogController.cpp    |   79 +-
 .../umuscle/src/MuscleAlignDialogController.h      |   20 +-
 .../umuscle/src/MuscleParallel.cpp                 |    4 +-
 src/plugins_3rdparty/umuscle/src/MusclePlugin.cpp  |    4 +-
 src/plugins_3rdparty/umuscle/src/MuscleTask.cpp    |    2 +-
 .../umuscle/src/MuscleWorkPool.cpp                 |    6 +-
 src/plugins_3rdparty/umuscle/src/MuscleWorkPool.h  |    2 +-
 .../umuscle/src/muscle/diffpaths.cpp               |   20 +-
 src/plugins_3rdparty/umuscle/src/muscle/mhack.cpp  |    6 +-
 .../umuscle/src/muscle/muscle_context.h            |    6 +-
 src/plugins_3rdparty/umuscle/transl/english.ts     |  151 +-
 src/plugins_3rdparty/umuscle/transl/russian.ts     |  151 +-
 src/plugins_3rdparty/umuscle/umuscle.pro           |    2 +-
 src/plugins_3rdparty/variants/CMakeLists.txt       |    3 +
 .../variants/src/SamtoolMpileupWorker.cpp          |   92 +-
 .../variants/src/SamtoolMpileupWorker.h            |   10 +-
 src/plugins_3rdparty/variants/transl/english.ts    |  250 +-
 src/plugins_3rdparty/variants/transl/russian.ts    |  250 +-
 src/plugins_checker/plugins_checker.pri            |    6 +-
 src/plugins_checker/src/Main.cpp                   |    9 +-
 src/ugene_globals.pri                              |   18 +-
 src/ugene_plugin_common.pri                        |   24 +-
 src/ugene_plugin_descriptor.pri                    |   12 +-
 src/ugene_version.pri                              |    6 +-
 src/ugenecl/CMakeLists.txt                         |   25 +
 src/ugenecl/src/Main.cpp                           |   13 +-
 src/ugenecl/ugenecl.pri                            |    6 +-
 src/ugenem/src/DetectWin10.cpp                     |  103 +
 src/ugenem/src/DetectWin10.h                       |   92 +
 src/ugenem/src/SendReportDialog.cpp                |  132 +-
 src/ugenem/src/SendReportDialog.h                  |   10 +-
 src/ugenem/ugenem.pro                              |    8 +-
 src/ugeneui/CMakeLists.txt                         |   30 +
 src/ugeneui/html/version_news.html                 |  152 +-
 src/ugeneui/html/welcome_page.css                  |    2 +-
 src/ugeneui/html/welcome_page.html                 |   33 +-
 src/ugeneui/src/Main.cpp                           |   62 +-
 .../src/app_settings/{ui => }/AppSettingsDialog.ui |    0
 .../app_settings/AppSettingsDialogController.cpp   |    4 +
 .../src/app_settings/AppSettingsDialogController.h |    2 +-
 .../DirectoriesSettingsGUIController.cpp           |    2 +-
 .../DirectoriesSettingsGUIController.h             |    2 +-
 .../{ui => }/DirectoriesSettingsWidget.ui          |    0
 .../FormatSettingsGUIController.cpp                |    2 +-
 .../format_settings/FormatSettingsGUIController.h  |    2 +-
 .../{ui => }/FormatSettingsWidget.ui               |    0
 .../logview_settings/LogSettingsGUIController.cpp  |   54 +-
 .../logview_settings/LogSettingsGUIController.h    |   22 +-
 .../logview_settings/{ui => }/LogSettingsWidget.ui |    0
 .../NetworkSettingsGUIController.cpp               |    2 +-
 .../NetworkSettingsGUIController.h                 |    2 +-
 .../{ui => }/NetworkSettingsWidget.ui              |    0
 .../ResourceSettingsGUIController.cpp              |    3 +-
 .../ResourceSettingsGUIController.h                |    2 +-
 .../{ui => }/ResourceSettingsWidget.ui             |    0
 .../UserApplicationsSettingsGUIController.cpp      |    6 +-
 .../UserApplicationsSettingsGUIController.h        |    8 +-
 .../UserApplicationsSettingsWidget.ui              |  193 +
 .../ui/UserApplicationsSettingsWidget.ui           |  177 -
 .../src/main_window/{ui => }/AboutDialog.ui        |    0
 .../src/main_window/AboutDialogController.h        |    2 +-
 src/ugeneui/src/main_window/CheckUpdatesTask.cpp   |  130 +-
 src/ugeneui/src/main_window/CheckUpdatesTask.h     |   32 +-
 src/ugeneui/src/main_window/MainWindowImpl.cpp     |    3 +-
 .../src/main_window/{ui => }/TmpDirChangeDialog.ui |    0
 .../src/main_window/TmpDirChangeDialogController.h |    2 +-
 .../src/plugin_viewer/PluginViewerController.h     |    4 +-
 .../plugin_viewer/{ui => }/PluginViewerWidget.ui   |    0
 .../{ui => }/CreateNewProjectWidget.ui             |    0
 .../DocumentFormatSelectorController.cpp           |    2 +-
 .../DocumentFormatSelectorController.h             |    2 +-
 .../{ui => }/DocumentFormatSelectorDialog.ui       |    0
 .../DocumentProviderSelectorController.cpp         |    2 +-
 .../DocumentProviderSelectorController.h           |    2 +-
 .../{ui => }/DocumentProviderSelectorDialog.ui     |    0
 .../DocumentReadingModeSelectorController.cpp      |    4 +-
 .../{ui => }/ExportProjectDialog.ui                |    0
 .../ExportProjectDialogController.cpp              |    2 +-
 .../ExportProjectDialogController.h                |    2 +-
 ...tipleDocumentsReadingModeSelectorController.cpp |  134 +-
 ...ultipleDocumentsReadingModeSelectorController.h |   44 +-
 .../MultipleSequenceFilesReadingMode.ui            |  265 +
 .../src/project_support/ProjectLoaderImpl.cpp      |   10 +-
 .../src/project_support/ProjectLoaderImpl.h        |    8 +-
 .../src/project_support/ProjectTasksGui.cpp        |    2 +-
 .../project_support/{ui => }/SaveProjectDialog.ui  |    0
 .../{ui => }/SequenceReadingModeSelectorDialog.ui  |    0
 .../ui/MultipleSequenceFilesReadingMode.ui         |  281 -
 .../src/project_view/ProjectViewDocTree.cpp        |   43 -
 src/ugeneui/src/project_view/ProjectViewDocTree.h  |   41 -
 src/ugeneui/src/project_view/ProjectViewImpl.h     |    2 +-
 src/ugeneui/src/project_view/ProjectViewWidget.ui  |  154 +
 .../src/project_view/ui/ProjectViewWidget.ui       |  137 -
 src/ugeneui/src/shtirlitz/Shtirlitz.cpp            |   10 +-
 src/ugeneui/src/shtirlitz/StatisticalReport.ui     |   96 +
 .../src/shtirlitz/StatisticalReportController.cpp  |    6 +
 .../src/shtirlitz/StatisticalReportController.h    |    2 +-
 src/ugeneui/src/shtirlitz/ui/StatisticalReport.ui  |   96 -
 src/ugeneui/src/task_view/TaskViewController.cpp   |    8 +-
 src/ugeneui/src/update/UgeneUpdater.cpp            |  126 +
 src/ugeneui/src/update/UgeneUpdater.h              |   69 +
 src/ugeneui/src/utils/MultilingualHtmlView.cpp     |   14 +-
 src/ugeneui/src/welcome_page/WelcomePageWidget.cpp |    2 +-
 src/ugeneui/transl/english.ts                      |  537 +-
 src/ugeneui/transl/russian.ts                      |  537 +-
 src/ugeneui/ugeneui.pri                            |    6 +-
 src/ugeneui/ugeneui.pro                            |   42 +-
 ugene.pro                                          |   52 +-
 1609 files changed, 39114 insertions(+), 106077 deletions(-)

diff --git a/build.txt b/build.txt
index 830a53b..ee6f9fa 100644
--- a/build.txt
+++ b/build.txt
@@ -4,11 +4,16 @@ Prerequisites
 
 Make sure the Qt (>= 5.2.1) development libraries are installed:
 
-* In Ubuntu/Debian: `apt-get install qt5-default qttools5-dev-tools zlib1g-dev`
-* In Fedora:        `yum install qt-devel`
-* In Arch Linux:    `pacman -S qt`
-* In Mac OS X: download from Qt official site (http://www.qt.io/download/)
-* In Windows: download from Qt official site (http://www.qt.io/download/)
+* 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: 1. Download and install Qt 5.5.1: www.qt.io/download-open-source/
+                2. Set the system variable: export PATH=$PATH:~/Qt5.5.1/5.5/gcc_64/bin
+                3. `sudo apt-get install g++ libgl1-mesa-dev libproc-dev libglu1-mesa-dev`
+                4. `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:
@@ -31,19 +36,19 @@ To build with nmake.exe:
 ===================================
 For *nix users:
 ===================================
-0) installation paths may be corrected in ugene_globals.pri
+0) installation paths may be set up in ugene_globals.pri
 
-1) 
-   for 32 bit: qmake -r
-   for 64 bit: qmake CONFIG+=x64 -r
+1) qmake -r (Fedora: qmake-qt5 -r)
 
-2) make
+2) make -j 4
 
-3) make install
+3) sudo make install
 
-Note: usually, 'make' builds the release version of UGENE which is correctly installed with 'make install'.
-However, on certain platforms default target is the debug one. To ensure that release version will be built,
-use 'make release' or 'make all' targets.
+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.
 
diff --git a/data/DBXRefRegistry.txt b/data/DBXRefRegistry.txt
index d151e04..438cb3e 100644
--- a/data/DBXRefRegistry.txt
+++ b/data/DBXRefRegistry.txt
@@ -158,7 +158,7 @@ Pathema|||Pathema Genome Resource
 
 PBmice|||PiggyBac Mutagenesis Information Center
 
-PDB|http://www.rcsb.org/pdb/download/downloadFile.do?fileFormat=pdb&compression=NO&structureId=%1|http://www.rcsb.org/pdb/files/%1.pdb|Biological macromolecule three dimensional structure database
+PDB|http://www.rcsb.org/pdb/download/downloadFile.do?fileFormat=pdb&compression=NO&structureId=%1|http://files.rcsb.org/view/%1.pdb|Biological macromolecule three dimensional structure database
 
 PFAM|||Collection of protein families
 
diff --git a/data/cmdline/hmm3-search.uwl b/data/cmdline/hmm3-search.uwl
new file mode 100644
index 0000000..97e45cb
--- /dev/null
+++ b/data/cmdline/hmm3-search.uwl
@@ -0,0 +1,132 @@
+#@UGENE_WORKFLOW
+#The workflow searches for HMMER signals in a sequence.
+#The output is a file with signal annotations.
+
+
+
+workflow "HMMER 3 search"{
+
+    hmm3-search {
+        type:hmm3-search;
+        name:"HMM3 Search";
+    }
+    hmm3-read-profile {
+        type:hmm3-read-profile;
+        name:"Read HMM3 Profile";
+    }
+    read-sequence {
+        type:read-sequence;
+        name:"Read Sequence";
+        url-in {
+            dataset:"Dataset 1";
+        }
+    }
+    write-annotations {
+        type:write-annotations;
+        name:"Write Annotations";
+        write-mode:1;
+    }
+
+    .actor-bindings {
+        read-sequence.out-sequence->hmm3-search.in-sequence
+        hmm3-search.out-annotations->write-annotations.in-annotations
+        hmm3-read-profile.out-hmm3->hmm3-search.in-hmm3
+    }
+
+    hmm3-read-profile.hmm3-profile->hmm3-search.in-hmm3.hmm3-profile
+    read-sequence.sequence->hmm3-search.in-sequence.sequence
+    hmm3-search.annotations->write-annotations.in-annotations.annotations
+    read-sequence.annotations->write-annotations.in-annotations.annotations
+    read-sequence.sequence->write-annotations.in-annotations.sequence
+
+    .meta {
+        parameter-aliases {
+            hmm3-search.F1 {
+                alias:F1;
+            }
+            hmm3-search.F2 {
+                alias:F2;
+            }
+            hmm3-search.F3 {
+                alias:F3;
+            }
+            hmm3-search.domZ {
+                alias:domZ;
+            }
+            hmm3-search.e-val {
+                alias:domE;
+            }
+            hmm3-search.max {
+                alias:max;
+            }
+            hmm3-search.nobias {
+                alias:nobias;
+            }
+            hmm3-search.nonull2 {
+                alias:nonull2;
+            }
+            hmm3-search.result-name {
+                alias:annotation-name;
+            }
+            hmm3-search.score {
+                alias:domT;
+            }
+            hmm3-search.seed {
+                alias:seed;
+            }
+            hmm3-search.threshold-type {
+                alias:threshold-type;
+            }
+            hmm3-read-profile.url-in {
+                alias:hmm;
+            }
+            read-sequence.url-in {
+                alias:in;
+            }
+            write-annotations.document-format {
+                alias:format;
+            }
+            write-annotations.url-out {
+                alias:out;
+            }
+        }
+        visual {
+            hmm3-read-profile {
+                pos:"-960 -690";
+                style:ext;
+                bg-color-ext:"0 128 128 64";
+                out-hmm3.angle:360;
+            }
+            hmm3-search {
+                pos:"-720 -600";
+                style:ext;
+                bg-color-ext:"0 128 128 64";
+                in-hmm3.angle:150;
+                in-sequence.angle:210;
+                out-annotations.angle:360;
+            }
+            read-sequence {
+                pos:"-960 -540";
+                style:ext;
+                bg-color-ext:"0 128 128 64";
+                out-sequence.angle:360;
+            }
+            write-annotations {
+                pos:"-420 -600";
+                style:ext;
+                bg-color-ext:"0 128 128 64";
+                in-annotations.angle:180;
+            }
+            hmm3-read-profile.out-hmm3->hmm3-search.in-hmm3 {
+                text-pos:"-35 -24";
+            }
+            hmm3-search.out-annotations->write-annotations.in-annotations {
+                text-pos:"-45 -37";
+            }
+            read-sequence.out-sequence->hmm3-search.in-sequence {
+                text-pos:"-27.5 -24";
+            }
+        }
+    }
+}
+
diff --git a/installer/linux/fedora/ugene.spec b/installer/linux/fedora/ugene.spec
index c35fce2..20a9690 100644
--- a/installer/linux/fedora/ugene.spec
+++ b/installer/linux/fedora/ugene.spec
@@ -1,7 +1,7 @@
 Name:    ugene
 Summary: Integrated bioinformatics toolkit
-Version: 1.19.0
-Release: 1%{?dist}
+Version: 1.22.0
+Release: 5%{?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
@@ -10,10 +10,26 @@ Group:   Applications/Engineering
 URL:     http://ugene.unipro.ru
 Source0: http://ugene.unipro.ru/downloads/%{name}-%{version}.tar.gz
 
-BuildRequires: qt5-qtbase-devel qt5-qttools-devel qt5-qtsvg-devel qt5-qtquick1-devel qt5-qtscript-devel qt5-qtwebkit-devel qt5-qtsensors-devel qt5-qtmultimedia-devel qt5-qtwebchannel-devel qt5-qtxmlpatterns-devel zlib-devel desktop-file-utils procps-devel mesa-libGLU-devel qt5-qtbase-mysql
+BuildRequires: desktop-file-utils
+BuildRequires: mesa-libGLU-devel
+BuildRequires: procps-devel
+BuildRequires: qt5-qtbase-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
+BuildRequires: qt5-qttools-devel
+BuildRequires: qt5-qtwebchannel-devel
+BuildRequires: qt5-qtwebkit-devel
+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}}
+
 Provides: bundled(sqlite)
 Provides: bundled(samtools)
 ExclusiveArch: %{ix86} x86_64
@@ -29,7 +45,7 @@ is a designer for custom bioinformatics workflows.
 %setup -q
 
 %build
-%_bindir/qmake-qt5 -r -spec linux-g++ \
+%_bindir/qmake-qt5 -r -spec linux-g++\
         INSTALL_BINDIR=%{_bindir} \
         INSTALL_LIBDIR=%{_libdir} \
         INSTALL_DATADIR=%{_datadir} \
@@ -39,7 +55,13 @@ is a designer for custom bioinformatics workflows.
 %else
         UGENE_WITHOUT_NON_FREE=1 \
 %endif
-        UGENE_EXCLUDE_LIST_ENABLED=1
+        UGENE_EXCLUDE_LIST_ENABLED=1\
+        QMAKE_CFLAGS_RELEASE="${CFLAGS}"\
+        QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}"\
+        QMAKE_LFLAGS_RELEASE="${LDFLAGS}"\
+        QMAKE_STRIP=\
+        QMAKE_CFLAGS_ISYSTEM=\
+
 make %{?_smp_mflags}
 
 %install
@@ -47,6 +69,8 @@ make install INSTALL_ROOT=%{buildroot}
 desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
 
 %files
+%{!?_licensedir:%global license %%doc}
+%license COPYRIGHT LICENSE LICENSE.3rd_party
 %{_bindir}/*
 %{_libdir}/%{name}/
 %{_datadir}/applications/*
@@ -55,135 +79,17 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
 %{_datadir}/mime/*
 %{_datadir}/%{name}/
 %{_mandir}/man1/*
-%doc COPYRIGHT LICENSE LICENSE.3rd_party 
 
 %changelog
-* Mon Nov 9 2015 Yuliya Algaer <yalgaer at unipro.ru> - 1.19.0-1
-- New upstream version
-
-* Tue Sep 8 2015 Yuliya Algaer <yalgaer at unipro.ru> - 1.18.0-1
-- New upstream version
-
-* Wed Jul 8 2015 Yuliya Algaer <yalgaer at unipro.ru> - 1.17.0-1
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
-
-* Fri Jun 19 2015 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.16.2-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
-
-* Mon May 25 2015 Yuliya Algaer <yalgaer at unipro.ru> - 1.16.2-1
-- New upstream version
-
-* Sat May 02 2015 Kalev Lember <kalevlember at gmail.com> - 1.16.1-2
-- Rebuilt for GCC 5 C++11 ABI change
-
-* Sat Mar 21 2015 Yuliya Algaer <yalgaer at unipro.ru> - 1.16.1-1
-- New upstream version
-
-* Wed Feb 25 2015 Yuliya Algaer <yalgaer at unipro.ru> - 1.16.0-2
-- Minor fix
-
-* Wed Feb 25 2015 Yuliya Algaer <yalgaer at unipro.ru> - 1.16.0-1
-- New upstream version
-
-* Wed Jan 14 2015 Yuliya Algaer <yalgaer at unipro.ru> - 1.15.1-1
-- New upstream version
-
-* Tue Dec 2 2014 Yuliya Algaer <yalgaer at unipro.ru> - 1.15.0-1
-- New upstream version
-
-* Fri Oct 10 2014 Yuliya Algaer <yalgaer at unipro.ru> - 1.14.2-2
-- Minor fix of the spec file
-
-* Fri Oct 10 2014 Yuliya Algaer <yalgaer at unipro.ru> - 1.14.2-1
-- New upstream release
-
-* Thu Sep 11 2014 Yuliya Algaer <yalgaer at unipro.ru> - 1.14.1-1
-- New upstream release
-
-* Mon Aug 18 2014 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.14.0-5
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
-
-* Thu Aug 07 2014 Yuliya Algaer <yalgaer at unipro.ru> - 1.14.0-4
-- Minor fix
-
-* Tue Aug 05 2014 Yuliya Algaer <yalgaer at unipro.ru> - 1.14.0-3
-- Minor fix
-
-* Tue Aug 05 2014 Yuliya Algaer <yalgaer at unipro.ru> - 1.14.0-2
-- Minor fix
-
-* Sun Jun 08 2014 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.13.3-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
-
-* Tue Jun 03 2014 Yuliya Algaer <yalgaer at unipro.ru> 1.13.3-1
-- Upstream version change
-
-* Mon Apr 14 2014 Yuliya Algaer <yalgaer at unipro.ru> 1.13.2-1
-- Upstream version change
-
-* Sat Mar 08 2014 Kevin Kofler <Kevin at tigcc.ticalc.org> 1.13.1-2
-- Rebuild against fixed qt to fix -debuginfo (#1074041)
-
-* Thu Feb 20 2014 Yulia Algaer <yalgaer at unipro.ru> 1.13.1-1
-- Upstream version change
-
-* Wed Dec 11 2013 Yulia Algaer <yalgaer at unipro.ru> 1.13.0-1
-- Upstream version change
-
-* Wed Oct 09 2013 Yulia Algaer <yalgaer at unipro.ru> 1.12.3-1
-- Upstream version change
-
-* Mon Aug 19 2013 Yulia Algaer <yalgaer at unipro.ru> 1.12.2-1
-- Upstream version change
-
-* Wed Aug 07 2013 Yulia Algaer <yalgaer at unipro.ru> 1.12.1-1
-- Upstream version change
-
-* Sun Aug 04 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.12.0-3
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
-
-* Fri Jun 28 2013 Yulia Algaer <yalgaer at unipro.ru> 1.12.0-2
-- Minor fix
-
-* Fri Jun 28 2013 Yulia Algaer <yalgaer at unipro.ru> 1.12.0-1
-- Upstream version change
-
-* Tue Mar 12 2013 Yulia Algaer <yalgaer at unipro.ru> 1.11.5-2
-- Fix version typo
-
-* Tue Mar 12 2013 Yulia Algaer <yalgaer at unipro.ru> 1.11.5-1
-- Upstream version change
-
-* Tue Jan 22 2013 Yulia Algaer <yalgaer at unipro.ru> 1.11.4-1
-- Upstream version change
-
-* Tue Nov 27 2012 Rex Dieter <rdieter at fedoraproject.org> 1.11.3-2
-- fix/update qt-related dependencies
-
-* Fri Nov 2 2012 Yulia Algaer <yalgaer at unipro.ru> - 1.11.3-1 
-- Upstream version change
-
-* Wed Oct 3 2012 Yulia Algaer <yalgaer at unipro.ru> - 1.11.2-1 
-- Upstream version change
-
-* Mon Sep 21 2009 Ivan Efremov <iefremov at unipro.ru> - 1.5.2-1 
-- Upstream version change
-
-* 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
-
-* 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
-- desktop-file-utils added to dependencies
+* Mon May 30 2016 Yuliya Algaer <yalgaer at gmail.com> 1.22.0-5
+- Push latest version to F-24+ too
 
-* Tue Mar 24 2009 Ivan Efremov <iefremov at unipro.ru> - 1.4.1-1
-- Upstream version change
+* Mon May 30 2016 Yuliya Algaer <yalgaer at gmail.com> 1.22.0-4
+- Push latest version to F-24+ too
 
-* Fri Mar 06 2009 Ivan Efremov <iefremov at unipro.ru> - 1.4.0-1
-- Upstream version change
+* Mon May 30 2016 Yuliya Algaer <yalgaer at gmail.com> 1.22.0-3
+- Push latest version to F-24+ too
 
-* Mon Feb 02 2009 Ivan Efremov <iefremov at unipro.ru> - 1.3.3-1
-- Initial release of rpm
\ No newline at end of file
+* 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
diff --git a/installer/linux/ubuntu/debian/control b/installer/linux/ubuntu/debian/control
index 491dcde..530b363 100644
--- a/installer/linux/ubuntu/debian/control
+++ b/installer/linux/ubuntu/debian/control
@@ -3,7 +3,7 @@ Section: science
 Priority: optional
 Maintainer: Ubuntu Developers <ubuntu-devel-discuss at lists.ubuntu.com>
 XSBC-Original-Maintainer: Ivan Efremov <iefremov at unipro.ru>
-Build-Depends: qt5-default, qttools5-dev-tools, libqt5webkit5-dev, libqt5opengl5-dev, libqt5sql5-mysql, qtscript5-dev, libqt5svg5-dev, zlib1g-dev, libprocps3-dev, debhelper (>=5.0.38)
+Build-Depends: qt5-default, qttools5-dev-tools, libqt5webkit5-dev, libqt5opengl5-dev, libqt5sql5-mysql, qtscript5-dev, libqt5svg5-dev, zlib1g-dev, libprocps4-dev, debhelper (>=5.0.38)
 Standards-Version: 3.9.3
 Homepage: http://ugene.unipro.ru
 
diff --git a/installer/linux/ubuntu/debian/rules b/installer/linux/ubuntu/debian/rules
index b07f826..4873321 100644
--- a/installer/linux/ubuntu/debian/rules
+++ b/installer/linux/ubuntu/debian/rules
@@ -85,8 +85,6 @@ install-arch:
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/dotplot.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/enzymes.license
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/enzymes.plugin
-	rm debian/ugene-non-free/usr/lib/ugene/plugins/expert_discovery.license
-	rm debian/ugene-non-free/usr/lib/ugene/plugins/expert_discovery.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/external_tool_support.license
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/external_tool_support.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/genome_aligner.license
diff --git a/src/corelibs/U2Algorithm/CMakeLists.txt b/src/corelibs/U2Algorithm/CMakeLists.txt
new file mode 100644
index 0000000..7a48416
--- /dev/null
+++ b/src/corelibs/U2Algorithm/CMakeLists.txt
@@ -0,0 +1,26 @@
+cmake_minimum_required(VERSION 3.4)
+project(U2Algorithm)
+
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt5 REQUIRED Core Gui Widgets)
+
+add_definitions(-DBUILDING_U2ALGORITHM_DLL)
+
+include_directories(src)
+include_directories(../../include)
+include_directories(../../libs_3rdparty/samtools/src)
+include_directories(../../libs_3rdparty/samtools/src/samtools)
+
+file(GLOB_RECURSE SRCS src/*.cpp)
+file(GLOB_RECURSE HDRS src/*.h)
+qt5_add_resources(RCC_SRCS U2Algorithm.qrc)
+
+add_library(U2Algorithm SHARED ${HDRS} ${SRCS} ${RCC_SRCS})
+
+target_link_libraries(U2Algorithm
+        Qt5::Core Qt5::Gui Qt5::Widgets
+        samtools
+        U2Core)
+
diff --git a/src/corelibs/U2Algorithm/U2Algorithm.pro b/src/corelibs/U2Algorithm/U2Algorithm.pro
index 22419d7..9e5df46 100644
--- a/src/corelibs/U2Algorithm/U2Algorithm.pro
+++ b/src/corelibs/U2Algorithm/U2Algorithm.pro
@@ -82,7 +82,21 @@ HEADERS += src/misc/BinaryFindOpenCL.h \
            src/util_msa_distance/MSADistanceAlgorithmRegistry.h \
            src/util_msaedit/CreateSubalignmentTask.h \
            src/util_msaedit/MAlignmentUtilTasks.h \
-           src/util_msaedit/MSAColorScheme.h \
+           src/util_msaedit/color_schemes/ColorSchemeUtils.h \
+           src/util_msaedit/color_schemes/MsaColorScheme.h \
+           src/util_msaedit/color_schemes/MsaColorSchemeClustalX.h \
+           src/util_msaedit/color_schemes/MsaColorSchemeCustom.h \
+           src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.h \
+           src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.h \
+           src/util_msaedit/color_schemes/MsaColorSchemeStatic.h \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.h \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.h \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.h \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.h \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.h \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.h \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.h \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.h \
            src/util_orf/ORFAlgorithmTask.h \
            src/util_orf/ORFFinder.h \
            src/util_sarray/SArrayBasedFindTask.h \
@@ -96,7 +110,8 @@ HEADERS += src/misc/BinaryFindOpenCL.h \
            src/util_weight_matrix/PWMConversionAlgorithmNLG.h \
            src/util_weight_matrix/PWMConversionAlgorithmRegistry.h \
            src/util_gpu/opencl/OpenCLHelper.h \
-           src/util_gpu/opencl/OpenCLUtils.h 
+           src/util_gpu/opencl/OpenCLUtils.h
+
 SOURCES += src/misc/BinaryFindOpenCL.cpp \
            src/misc/BitsTable.cpp \
            src/misc/DnaAssemblyMultiTask.cpp \
@@ -166,7 +181,21 @@ SOURCES += src/misc/BinaryFindOpenCL.cpp \
            src/util_msa_distance/MSADistanceAlgorithmRegistry.cpp \
            src/util_msaedit/CreateSubalignmentTask.cpp \
            src/util_msaedit/MAlignmentUtilTasks.cpp \
-           src/util_msaedit/MSAColorScheme.cpp \
+           src/util_msaedit/color_schemes/ColorSchemeUtils.cpp \
+           src/util_msaedit/color_schemes/MsaColorScheme.cpp \
+           src/util_msaedit/color_schemes/MsaColorSchemeClustalX.cpp \
+           src/util_msaedit/color_schemes/MsaColorSchemeCustom.cpp \
+           src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.cpp \
+           src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.cpp \
+           src/util_msaedit/color_schemes/MsaColorSchemeStatic.cpp \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.cpp \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.cpp \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.cpp \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.cpp \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.cpp \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.cpp \
+           src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.cpp \
            src/util_orf/ORFAlgorithmTask.cpp \
            src/util_orf/ORFFinder.cpp \
            src/util_sarray/SArrayBasedFindTask.cpp \
@@ -180,7 +209,7 @@ SOURCES += src/misc/BinaryFindOpenCL.cpp \
            src/util_weight_matrix/PWMConversionAlgorithmNLG.cpp \
            src/util_weight_matrix/PWMConversionAlgorithmRegistry.cpp \
            src/util_gpu/opencl/OpenCLHelper.cpp \
-           src/util_gpu/opencl/OpenCLUtils.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/EnzymeModel.cpp b/src/corelibs/U2Algorithm/src/misc/EnzymeModel.cpp
index ecfebf7..036d678 100644
--- a/src/corelibs/U2Algorithm/src/misc/EnzymeModel.cpp
+++ b/src/corelibs/U2Algorithm/src/misc/EnzymeModel.cpp
@@ -8,7 +8,8 @@ const QString EnzymeSettings::LAST_SELECTION("plugin_enzymes/selection");
 const QString EnzymeSettings::ENABLE_HIT_COUNT("plugin_enzymes/enable_hit_count");
 const QString EnzymeSettings::MAX_HIT_VALUE("plugin_enzymes/max_hit_value");
 const QString EnzymeSettings::MIN_HIT_VALUE("plugin_enzymes/min_hit_value");
-const QString EnzymeSettings::NON_CUT_REGION("plugin_enzymes/non_cut_region");
+const QString EnzymeSettings::SEARCH_REGION("plugin_enzymes/search_region");
+const QString EnzymeSettings::EXCLUDED_REGION("plugin_enzymes/non_cut_region");
 const QString EnzymeSettings::MAX_RESULTS("plugin_enzymes/max_results");
 const QString EnzymeSettings::COMMON_ENZYMES( "ClaI,BamHI,BglII,DraI,EcoRI,EcoRV,HindIII,PstI,SalI,SmaI,XmaI");
 
diff --git a/src/corelibs/U2Algorithm/src/misc/EnzymeModel.h b/src/corelibs/U2Algorithm/src/misc/EnzymeModel.h
index 96638ec..dd85185 100644
--- a/src/corelibs/U2Algorithm/src/misc/EnzymeModel.h
+++ b/src/corelibs/U2Algorithm/src/misc/EnzymeModel.h
@@ -62,7 +62,8 @@ public:
     static const QString ENABLE_HIT_COUNT;
     static const QString MAX_HIT_VALUE;
     static const QString MIN_HIT_VALUE;
-    static const QString NON_CUT_REGION;
+    static const QString SEARCH_REGION;
+    static const QString EXCLUDED_REGION;
     static const QString MAX_RESULTS;
     static const QString COMMON_ENZYMES;
 };
diff --git a/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.cpp b/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.cpp
index c555522..ce596b7 100644
--- a/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.cpp
+++ b/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.cpp
@@ -406,7 +406,7 @@ static char* createAmbiguousBaseMap() {
 }
 
 
-inline bool cmpAmbiguous( char a, char b){
+bool FindAlgorithm::cmpAmbiguous( char a, char b) {
     static char* charMap = createAmbiguousBaseMap();
 
     SAFE_POINT( a >= 0 && b >= 0, "Invalid characters supplied!", false );
@@ -433,7 +433,7 @@ inline bool match_pattern_ambiguous(const char* seq, const char* p, int start, i
     bool match = true;
     curErr = 0;
     for ( int j = 0; j < patternLen; j++ ) {
-        if( !cmpAmbiguous(seq[start+j],p[j]) && ++curErr > maxErr ) {
+        if( !FindAlgorithm::cmpAmbiguous(seq[start+j],p[j]) && ++curErr > maxErr ) {
             match = false;
             break;
         }
diff --git a/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.h b/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.h
index 8a87d4a..8d5d57d 100644
--- a/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.h
+++ b/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.h
@@ -161,6 +161,8 @@ public:
 
     static int estimateRamUsageInMbytes(const FindAlgorithmPatternSettings patternSettings,
         const bool searchInAminoTT, const int patternLength, const int maxError);
+
+    static bool cmpAmbiguous( char a, char b);
 };
 
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/MSAColorScheme.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/MSAColorScheme.cpp
deleted file mode 100644
index d635a5f..0000000
--- a/src/corelibs/U2Algorithm/src/util_msaedit/MSAColorScheme.cpp
+++ /dev/null
@@ -1,1322 +0,0 @@
-/**
- * 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 "MSAColorScheme.h"
-
-#include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/UserApplicationsSettings.h>
-#include <U2Core/IOAdapter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/FeatureColors.h>
-#include <U2Core/Settings.h>
-#include <U2Algorithm/MSAConsensusUtils.h>
-
-#include <QDir>
-
-namespace U2 {
-
-
-#define SET_C(ch, cl) colorsPerChar[ch]=colorsPerChar[ch+('a'-'A')]=cl
-
-static QByteArray uniteAlphabetChars(const QByteArray& firstAlphabetChars, const QByteArray& secondAlphabetChars){
-    QByteArray unitedAlphabetChars = firstAlphabetChars;
-    for(int i = 0; i < secondAlphabetChars.size(); ++i){
-        if(!unitedAlphabetChars.contains(secondAlphabetChars[i])){
-            unitedAlphabetChars.append(secondAlphabetChars[i]);
-        }
-    }
-    qSort(unitedAlphabetChars.begin(), unitedAlphabetChars.end());
-    return unitedAlphabetChars;
-}
-
-static bool lineValid(const QStringList& properties, const QMap<char, QColor> & alphColors){
-    if(properties.size() != 2){return false;}
-    if(properties[0].size() != 1 || (!alphColors.contains(properties[0][0].toLatin1()))){return false;}
-    if(!QColor(properties[1]).isValid()){return false;}
-
-    return true;
-}
-
-static bool getSchemaColors(CustomColorSchema& customSchema){
-    QMap<char, QColor> & alphColors =  customSchema.alpColors;
-    const QString& file = customSchema.name + COLOR_SCHEME_NAME_FILTERS;
-    DNAAlphabetType& type = customSchema.type;
-    bool& defaultAlpType = customSchema.defaultAlpType = true;
-
-    QString dirPath = ColorSchemaSettingsUtils::getColorsDir();
-    QDir dir(dirPath);
-    if(!dir.exists()){
-        coreLog.info(QString("%1: no such directory").arg(dirPath));
-        return false;
-    }
-
-    IOAdapterFactory* factory = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(BaseIOAdapters::LOCAL_FILE);
-
-    QScopedPointer<IOAdapter> io(factory->createIOAdapter());
-    if(!io->open(dir.filePath(file), IOAdapterMode_Read)){
-        coreLog.info(QString("%1: no such scheme").arg(customSchema.name));
-        return false;
-    }
-    while(!io->isEof()){
-        const int max_size = 1024;
-
-        QByteArray byteLine(max_size + 1, 0);
-        int lineLength = io->readLine(byteLine.data(), max_size);
-        QString line(byteLine);
-        line.remove(lineLength, line.size() - lineLength);
-        if(line.isEmpty()){continue;}
-        if(line == COLOR_SCHEME_AMINO_KEYWORD){type = DNAAlphabet_AMINO;}
-        else if(line.contains(COLOR_SCHEME_NUCL_KEYWORD)){
-            type = DNAAlphabet_NUCL;
-            if(line == COLOR_SCHEME_NUCL_DEFAULT_KEYWORD){
-                defaultAlpType = true;
-            }
-            else if(line == COLOR_SCHEME_NUCL_EXTENDED_KEYWORD){
-                defaultAlpType = false;
-            }
-            else{
-                coreLog.info(QString("%1: mode of nucleic alphabet of scheme not defined, use default mode").arg(customSchema.name));
-            }
-        }
-        else{
-            coreLog.info(QString("%1: alphabet of scheme not defined").arg(customSchema.name));
-            return false;
-        }
-        alphColors = ColorSchemaSettingsUtils::getDefaultSchemaColors(type, defaultAlpType);
-        break;
-    }
-    QMap<char, QColor> tmpHelper;
-    while(!io->isEof()){
-        const int max_size = 1024;
-
-        QByteArray byteLine(max_size + 1, 0);
-        int lineLength = io->readLine(byteLine.data(), max_size);
-        QString line(byteLine);
-        line.remove(lineLength, line.size() - lineLength);
-        if(line.isEmpty()){continue;}
-        QStringList properties = line.split(QString("="), QString::SkipEmptyParts);
-
-        if(!lineValid(properties, alphColors )){
-            coreLog.info(QString("%1: scheme is not valid").arg(customSchema.name));
-            return false;
-        }
-        tmpHelper[properties.first().at(0).toLatin1()] = QColor(properties[1]);
-    }
-    QMapIterator<char, QColor> it(tmpHelper);
-    while(it.hasNext()){
-        it.next();
-        alphColors[it.key()] = it.value();
-    }
-    return true;
-}
-
-
-
-QList<CustomColorSchema> ColorSchemaSettingsUtils::getSchemas(){
-    QList<CustomColorSchema> customSchemas;
-
-    QDir dir(getColorsDir());
-    if(!dir.exists()){
-        return QList<CustomColorSchema>();
-    }
-    QStringList filters;
-    filters.append(QString("*%1").arg(COLOR_SCHEME_NAME_FILTERS));
-
-    QStringList schemaFiles = dir.entryList(filters);
-    foreach(const QString& schemaName, schemaFiles){
-        CustomColorSchema schema;
-        schema.name = schemaName.split(".").first();
-        bool ok = getSchemaColors(schema);
-        if(!ok){continue;}
-        customSchemas.append(schema);
-    }
-    return customSchemas;
-}
-
-QString ColorSchemaSettingsUtils::getColorsDir(){
-        QString settingsFile = AppContext::getSettings()->fileName();
-        QString settingsDir = QDir(QFileInfo(settingsFile).absolutePath()).filePath(COLOR_SCHEME_SETTINGS_SUB_DIRECTORY);
-
-        QString res = AppContext::getSettings()->getValue(COLOR_SCHEME_SETTINGS_ROOT + COLOR_SCHEME_COLOR_SCHEMA_DIR, settingsDir, true).toString();
-
-        return res;
-}
-
-void ColorSchemaSettingsUtils::getDefaultUgeneColors(DNAAlphabetType type, QMap<char, QColor>& alphColors){
-    if(type == DNAAlphabet_AMINO){
-        alphColors['I'] = "#ff0000";
-        alphColors['V'] = "#f60009";
-        alphColors['L'] = "#ea0015";
-        alphColors['F'] = "#cb0034";
-        alphColors['C'] = "#c2003d";
-        alphColors['M'] = "#b0004f";
-        alphColors['A'] = "#ad0052";
-        alphColors['G'] = "#6a0095";
-        alphColors['X'] = "#680097";
-        alphColors['T'] = "#61009e";
-        alphColors['S'] = "#5e00a1";
-        alphColors['W'] = "#5b00a4";
-        alphColors['Y'] = "#4f00b0";
-        alphColors['P'] = "#4600b9";
-        alphColors['H'] = "#1500ea";
-        alphColors['E'] = "#0c00f3";
-        alphColors['Z'] = "#0c00f3";
-        alphColors['Q'] = "#0c00f3";
-        alphColors['D'] = "#0c00f3";
-        alphColors['B'] = "#0c00f3";
-        alphColors['N'] = "#0c00f3";
-        alphColors['K'] = "#0000ff";
-        alphColors['R'] = "#0000ff";
-    }
-    else if(type == DNAAlphabet_NUCL){
-        alphColors['A'] = "#FCFF92"; // yellow
-        alphColors['C'] = "#70F970"; // green
-        alphColors['T'] = "#FF99B1"; // light red
-        alphColors['G'] = "#4EADE1"; // light blue
-        alphColors['U'] = alphColors['T'].lighter(120);
-        alphColors['N'] = "#FCFCFC";
-    }
-}
-
-QMap<char, QColor> ColorSchemaSettingsUtils::getDefaultSchemaColors(DNAAlphabetType type, bool defaultAlpType){
-    QList<const DNAAlphabet*> alphabets = AppContext::getDNAAlphabetRegistry()->getRegisteredAlphabets();
-    QMap<DNAAlphabetType, QByteArray > alphabetChars;
-    foreach(const DNAAlphabet* alphabet, alphabets){ // default initialization
-        if(defaultAlpType == alphabet->isDefault()){
-            alphabetChars[alphabet->getType()] = uniteAlphabetChars(alphabetChars.value(alphabet->getType()) ,alphabet->getAlphabetChars());
-        }
-    }
-    QMapIterator<DNAAlphabetType, QByteArray > it(alphabetChars);
-    QByteArray alphabet;
-    while(it.hasNext()){
-        it.next();
-        if(it.key() == type){
-            alphabet = it.value();
-            break;
-        }
-    }
-    QMap<char, QColor> alphColors;
-    for(int i = 0; i < alphabet.size(); ++i){
-        alphColors[alphabet[i]] = QColor(Qt::white);
-    }
-    getDefaultUgeneColors(type, alphColors);
-    return alphColors;
-}
-
-void ColorSchemaSettingsUtils::setColorsDir(const QString &colorsDir) {
-    QString settingsFile = AppContext::getSettings()->fileName();
-    QString settingsDir = QFileInfo(settingsFile).absolutePath();
-    if (settingsDir != colorsDir) {
-        AppContext::getSettings()->setValue(COLOR_SCHEME_SETTINGS_ROOT + COLOR_SCHEME_COLOR_SCHEMA_DIR, colorsDir, true);
-    }
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// factories
-
-MSAColorSchemeFactory::MSAColorSchemeFactory(QObject* p, const QString& _id, const QString& _name, DNAAlphabetType _at)
-: QObject(p), id(_id), name(_name), aType(_at)
-{
-}
-
-MSAColorSchemeStaticFactory::MSAColorSchemeStaticFactory(QObject* p, const QString& _id, const QString& _name,
-                                                         DNAAlphabetType _atype, const QVector<QColor>& _colorsPerChar)
-: MSAColorSchemeFactory(p, _id, _name, _atype), colorsPerChar(_colorsPerChar)
-{
-}
-
-MSAColorScheme* MSAColorSchemeStaticFactory::create(QObject* p, MAlignmentObject* o) {
-    return new MSAColorSchemeStatic(p, this, o, colorsPerChar);
-}
-
-MSAColorSchemeCustomSettingsFactory::MSAColorSchemeCustomSettingsFactory(QObject* p, const QString& _id, const QString& _name,
-                                                         DNAAlphabetType _atype, const QVector<QColor>& _colorsPerChar)
-                                                         : MSAColorSchemeFactory(p, _id, _name, _atype), colorsPerChar(_colorsPerChar)
-{
-}
-
-MSAColorScheme* MSAColorSchemeCustomSettingsFactory::create(QObject* p, MAlignmentObject* o) {
-    return new MSAColorSchemeStatic(p, this, o, colorsPerChar);
-}
-
-bool MSAColorSchemeCustomSettingsFactory::isEqualTo(const CustomColorSchema &schema) const {
-    bool result = true;
-    result &= getName()== schema.name;
-    result &= getAlphabetType() == schema.type;
-    result &= colorsPerChar == colorMapToColorVector(schema.alpColors);
-
-    return result;
-}
-
-static void fillEmptyCS(QVector<QColor> &colorsPerChar);
-QVector<QColor> MSAColorSchemeCustomSettingsFactory::colorMapToColorVector(const QMap<char, QColor> &map) {
-    QVector<QColor> colorsPerChar;
-    fillEmptyCS(colorsPerChar);
-    QMapIterator<char, QColor> it(map);
-    while(it.hasNext()){
-        it.next();
-        SET_C(it.key(), it.value());
-    }
-    return colorsPerChar;
-}
-
-
-
-MSAColorSchemePercIdentFactory::MSAColorSchemePercIdentFactory(QObject* p, const QString& _id, const QString& _name, DNAAlphabetType _atype)
-: MSAColorSchemeFactory(p, _id, _name, _atype)
-{
-}
-
-MSAColorScheme* MSAColorSchemePercIdentFactory::create(QObject* p, MAlignmentObject* o) {
-    return new MSAColorSchemePercIdent(p, this, o);
-}
-
-MSAColorSchemePercIdentGrayscaleFactory::MSAColorSchemePercIdentGrayscaleFactory(QObject* p, const QString& _id, const QString& _name, DNAAlphabetType _atype)
-: MSAColorSchemeFactory(p, _id, _name, _atype)
-{
-}
-
-MSAColorScheme* MSAColorSchemePercIdentGrayscaleFactory::create(QObject* p, MAlignmentObject* o) {
-    return new MSAColorSchemePercIdentGrayscale(p, this, o);
-}
-
-MSAColorSchemeClustalXFactory::MSAColorSchemeClustalXFactory(QObject* p, const QString& _id, const QString& _name, DNAAlphabetType _atype)
-: MSAColorSchemeFactory(p, _id, _name, _atype)
-{
-}
-
-MSAColorScheme* MSAColorSchemeClustalXFactory::create(QObject* p, MAlignmentObject* o) {
-    return new MSAColorSchemeClustalX(p, this, o);
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// schemes
-
-MSAColorScheme::MSAColorScheme(QObject* p, MSAColorSchemeFactory* f, MAlignmentObject* o) : QObject(p), factory(f), maObj(o) {
-}
-
-
-MSAColorSchemeStatic::MSAColorSchemeStatic(QObject* p, MSAColorSchemeFactory* f, MAlignmentObject* o, const QVector<QColor>& _cp)
-: MSAColorScheme(p, f, o), colorsPerChar(_cp)
-{
-}
-
-QColor MSAColorSchemeStatic::getColor(int /*seq*/, int /*pos*/, char c) {
-    return colorsPerChar[(quint8)c];
-}
-
-
-/// PERCENT
-MSAColorSchemePercIdent::MSAColorSchemePercIdent(QObject* p, MSAColorSchemeFactory* f, MAlignmentObject* o)
-: MSAColorScheme(p, f, o)
-{
-    cacheVersion = 0;
-    objVersion = 1;
-    mask4[0]=81;
-    mask4[1]=61;
-    mask4[2]=41;
-    mask4[3]=25;
-
-    colorsByRange[0] = QColor("#6464FF");
-    colorsByRange[1] = QColor("#9999FF");
-    colorsByRange[2] = QColor("#CCCCFF");
-    colorsByRange[3] = QColor();
-
-    connect(maObj, SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
-                  SLOT(sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)));
-}
-
-QColor MSAColorSchemePercIdent::getColor(int /*seq*/, int pos, char c) {
-    updateCache();
-    if (c == MAlignment_GapChar) {
-        return QColor();
-    }
-    quint32 packedVal = indentCache[pos];
-    MSAConsensusUtils::unpackConsensusCharsFromInt(packedVal, tmpChars, tmpRanges);
-    for (int i=0; i < 4; i++) {
-        if (c == tmpChars[i]) {
-            int range = tmpRanges[i];
-            return colorsByRange[range];
-        }
-    }
-    return QColor();
-}
-
-void MSAColorSchemePercIdent::updateCache() {
-    if (cacheVersion == objVersion) {
-        return;
-    }
-    const MAlignment& ma = maObj->getMAlignment();
-    int aliLen = ma.getLength();
-    indentCache.resize(aliLen);
-    for (int i=0; i < aliLen; i++) {
-        indentCache[i] = MSAConsensusUtils::packConsensusCharsToInt(ma, i, mask4, true);
-    }
-    cacheVersion = objVersion;
-}
-
-MSAColorSchemePercIdentGrayscale::MSAColorSchemePercIdentGrayscale( QObject* p, MSAColorSchemeFactory* f, MAlignmentObject* o ) :
-    MSAColorSchemePercIdent(p, f, o) {
-    colorsByRange[0] = QColor("#646464");
-    colorsByRange[1] = QColor("#999999");
-    colorsByRange[2] = QColor("#CCCCCC");
-}
-
-/// CLUSTAL
-MSAColorSchemeClustalX::MSAColorSchemeClustalX(QObject* p, MSAColorSchemeFactory* f, MAlignmentObject* maObj)
-: MSAColorScheme(p, f, maObj)
-{
-    objVersion = 1;
-    cacheVersion = 0;
-    aliLen = maObj->getLength();
-
-    colorByIdx[ClustalColor_BLUE]    = "#80a0f0";
-    colorByIdx[ClustalColor_RED]     = "#f01505";
-    colorByIdx[ClustalColor_GREEN]   = "#15c015";
-    colorByIdx[ClustalColor_PINK]    = "#f08080";
-    colorByIdx[ClustalColor_MAGENTA] = "#c048c0";
-    colorByIdx[ClustalColor_ORANGE]  = "#f09048";
-    colorByIdx[ClustalColor_CYAN]    = "#15a4a4";
-    colorByIdx[ClustalColor_YELLOW]  = "#c0c000";
-
-    connect(maObj, SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
-        SLOT(sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)));
-}
-
-QColor MSAColorSchemeClustalX::getColor(int seq, int pos, char) {
-    if (cacheVersion!=objVersion) {
-        updateCache();
-    }
-    int idx = getColorIdx(seq, pos);
-    assert(idx >=0 && idx < ClustalColor_NUM_COLORS);
-    return colorByIdx[idx];
-}
-
-int MSAColorSchemeClustalX::getColorIdx(int seq, int pos) {
-    bool low = false;
-    int cacheIdx = getCacheIdx(seq, pos, low);
-    quint8 val = colorsCache[cacheIdx];
-    int colorIdx = low ? val & 0x0F : (val & 0xF0) >> 4;
-    assert(colorIdx >=0 && colorIdx < ClustalColor_NUM_COLORS);
-    return colorIdx;
-}
-
-void MSAColorSchemeClustalX::setColorIdx(int seq, int pos, int colorIdx) {
-    assert(colorIdx >=0 && colorIdx < ClustalColor_NUM_COLORS);
-    bool low = false;
-    int cacheIdx = getCacheIdx(seq, pos, low);
-    quint8 val = colorsCache[cacheIdx];
-    if (low) {
-        val = (val & 0xF0) | colorIdx;
-    } else {
-        val = (val & 0x0F) | (colorIdx << 4);
-    }
-    colorsCache[cacheIdx] = val;
-}
-
-static int basesContent(const int* freqs, const char* str, int len) {
-    int res = 0;
-    for (int i=0; i < len; i++) {
-        uchar c = str[i];
-        res +=freqs[c];
-    }
-    return res;
-}
-
-void MSAColorSchemeClustalX::updateCache() {
-    if (cacheVersion == objVersion) {
-        return;
-    }
-    // compute colors for whole ali
-    // use 4 bits per color
-    const MAlignment& ma = maObj->getMAlignment();
-    int nSeq = ma.getNumRows();
-    aliLen = maObj->getLength();
-    cacheVersion = objVersion;
-
-    bool stub = false;
-    int cacheSize = getCacheIdx(nSeq, aliLen, stub) + 1;
-    colorsCache.resize(cacheSize);
-
-    /*  source: http://ekhidna.biocenter.helsinki.fi/pfam2/clustal_colours
-
-        BLUE
-            (W,L,V,I,M,F):  {50%, P}{60%, WLVIMAFCYHP}
-            (A):            {50%, P}{60%, WLVIMAFCYHP}{85%, T,S,G}
-            (C):            {50%, P}{60%, WLVIMAFCYHP}{85%, S}
-        RED
-            (K,R):          {60%, KR}{85%, Q}
-        GREEN
-            (T):            {50%, TS}{60%, WLVIMAFCYHP}
-            (S):            {50%, TS}{80%, WLVIMAFCYHP}
-            (N):            {50%, N}{85%, D}
-            (Q):            {50%, QE}{60%, KR}
-        PINK
-            (C):            {85%, C}
-        MAGENTA
-            (D):            {50%, DE,N}
-            (E):            {50%, DE,QE}
-        ORANGE
-            (G):            {ALWAYS}
-        CYAN
-            (H,Y):          {50%, P}{60%, WLVIMAFCYHP}
-        YELLOW
-            (P):            {ALWAYS}
-
-        WARN: do not count gaps in percents!
-    */
-
-
-    QVector<int> freqsByChar(256);
-    const int* freqs = freqsByChar.data();
-
-    for (int pos = 0; pos < aliLen; pos++) {
-        int nonGapChars = 0;
-        MSAConsensusUtils::getColumnFreqs(ma, 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);
-            int colorIdx = ClustalColor_NO_COLOR;
-            switch(c) {
-                case 'W': //(W,L,V,I,M,F): {50%, P}{60%, WLVIMAFCYHP} -> BLUE
-                case 'L':
-                case 'V':
-                case 'I':
-                case 'M':
-                case 'F':
-                    if (freqs['P'] > content50 || basesContent(freqs, "WLVIMAFCYHP", 11) > content60) {
-                        colorIdx = ClustalColor_BLUE;
-                    }
-                    break;
-                case 'A': // {50%, P}{60%, WLVIMAFCYHP}{85%, T,S,G} -> BLUE
-                    if (freqs['P'] > content50 || basesContent(freqs, "WLVIMAFCYHP", 11) > content60) {
-                        colorIdx = ClustalColor_BLUE;
-                    } else if (freqs['T'] > content85 || freqs['S'] > content85 || freqs['G']>85) {
-                        colorIdx = ClustalColor_BLUE;
-                    }
-                    break;
-
-                case 'K': //{60%, KR}{85%, Q} -> RED
-                case 'R':
-                    if ((freqs['K'] + freqs['R'] > content60) || freqs['Q'] > content85) {
-                        colorIdx = ClustalColor_RED;
-                    }
-                    break;
-
-                case 'T': // {50%, TS}{60%, WLVIMAFCYHP} -> GREEN
-                    if ((freqs['T'] + freqs['S'] > content50) || basesContent(freqs, "WLVIMAFCYHP", 11) > content60) {
-                        colorIdx = ClustalColor_GREEN;
-                    }
-                    break;
-
-                case 'S': // {50%, TS}{80%, WLVIMAFCYHP} -> GREEN
-                    if ((freqs['T'] + freqs['S'] > content50) || basesContent(freqs, "WLVIMAFCYHP", 11) > content80) {
-                        colorIdx = ClustalColor_GREEN;
-                    }
-                    break;
-
-                case 'N': // {50%, N}{85%, D} -> GREEN
-                    if (freqs['N'] > content50 || freqs['D'] > content85) {
-                        colorIdx = ClustalColor_GREEN;
-                    }
-                    break;
-
-                case 'Q': // {50%, QE}{60%, KR} -> GREEN
-                    if ((freqs['Q'] + freqs['E']) > content50 || (freqs['K'] + freqs['R']) > content60) {
-                        colorIdx = ClustalColor_GREEN;
-                    }
-                    break;
-
-                case 'C': //{85%, C} -> PINK
-                          //{50%, P}{60%, WLVIMAFCYHP}{85%, S} -> BLUE
-                    if (freqs['C'] > content85) {
-                        colorIdx = ClustalColor_PINK;
-                    } else if (freqs['P'] > content50 || basesContent(freqs, "WLVIMAFCYHP", 11) > content60 || freqs['S'] > content85) {
-                        colorIdx = ClustalColor_BLUE;
-                    }
-                    break;
-
-                case 'D': //{50%, DE,N} -> MAGENTA
-                    if ((freqs['D'] + freqs['E']) > content50 || freqs['N'] > content50) {
-                        colorIdx = ClustalColor_MAGENTA;
-                    }
-                    break;
-                case 'E': //{50%, DE,QE} -> MAGENTA
-                    if ((freqs['D'] + freqs['E']) > content50 || (freqs['Q'] + freqs['E']) > content50) {
-                        colorIdx = ClustalColor_MAGENTA;
-                    }
-                    break;
-                case 'G': //{ALWAYS} -> ORANGE
-                    colorIdx = ClustalColor_ORANGE;
-                    break;
-
-                case 'H': // {50%, P}{60%, WLVIMAFCYHP} -> CYAN
-                case 'Y':
-                    if (freqs['P'] > content50 || basesContent(freqs, "WLVIMAFCYHP", 11) > content60) {
-                        colorIdx = ClustalColor_CYAN;
-                    }
-                    break;
-
-                case 'P': //{ALWAYS} -> YELLOW
-                    colorIdx = ClustalColor_YELLOW;
-                    break;
-                default:
-                    break;
-
-            }
-            setColorIdx(seq, pos, colorIdx);
-        }
-    }
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// registry
-MSAColorSchemeRegistry::MSAColorSchemeRegistry() {
-    initBuiltInSchemes();
-    initCustomSchema();
-}
-
-MSAColorSchemeRegistry::~MSAColorSchemeRegistry(){
-    deleteOldCustomFactories();
-}
-
-void MSAColorSchemeRegistry::deleteOldCustomFactories(){
-    foreach(MSAColorSchemeFactory* f, customColorers){
-        delete f;
-    }
-    customColorers.clear();
-}
-
-
-QList<MSAColorSchemeFactory*> MSAColorSchemeRegistry::getMSAColorSchemes(DNAAlphabetType atype) const {
-    QList<MSAColorSchemeFactory*> res;
-    foreach(MSAColorSchemeFactory* f, colorers) {
-        if (f->getAlphabetType() == atype) {
-            res.append(f);
-        }
-    }
-    return res;
-}
-
-QList<MSAColorSchemeFactory*> MSAColorSchemeRegistry::getMSACustomColorSchemes(DNAAlphabetType atype) const{
-    QList<MSAColorSchemeFactory*> res;
-    foreach(MSAColorSchemeFactory* f, customColorers) {
-        if (f->getAlphabetType() == atype) {
-            res.append(f);
-        }
-    }
-    return res;
-}
-
-MSAColorSchemeFactory* MSAColorSchemeRegistry::getMSAColorSchemeFactoryById(const QString& id) const {
-    foreach(MSAColorSchemeFactory* csf, colorers) {
-        if(csf->getId() == id) {
-            return csf;
-        }
-    }
-    foreach(MSAColorSchemeFactory* csf, customColorers) {
-        if(csf->getId() == id) {
-            return csf;
-        }
-    }
-    return NULL;
-}
-
-static 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::addCustomSchema(const CustomColorSchema &schema) {
-    addMSACustomColorSchemeFactory(new MSAColorSchemeCustomSettingsFactory(NULL, schema.name, schema.name, schema.type,
-                                                                           MSAColorSchemeCustomSettingsFactory::colorMapToColorVector(schema.alpColors)));
-}
-
-void MSAColorSchemeRegistry::addMSAColorSchemeFactory(MSAColorSchemeFactory* csf) {
-    assert(getMSAColorSchemeFactoryById(csf->getId()) == NULL);
-    colorers.append(csf);
-    qStableSort(colorers.begin(), colorers.end(), compareNames);
-}
-
-void MSAColorSchemeRegistry::addMSACustomColorSchemeFactory(MSAColorSchemeFactory* csf){
-    assert(getMSAColorSchemeFactoryById(csf->getId()) == NULL);
-    customColorers.append(csf);
-    qStableSort(colorers.begin(), colorers.end(), compareNames);
-}
-
-static void fillEmptyCS(QVector<QColor>& colorsPerChar) {
-    colorsPerChar.fill(QColor(), 256);
-}
-
-static void fillLightColorsCS(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
-}
-
-
-static void addUGENEAmino(QVector<QColor>& colorsPerChar) {
-    //amino groups: "KRH", "GPST", "FWY", "ILM"
-    QColor krh("#FFEE00");
-    SET_C('K', krh);
-    SET_C('R', krh.darker(120));
-    SET_C('H', krh.lighter(120));
-
-    QColor gpst("#FF5082");
-    SET_C('G', gpst);
-    SET_C('P', gpst.darker(120));
-    SET_C('S', gpst.lighter(120));
-    SET_C('T', gpst.lighter(150));
-
-    QColor fwy("#3DF490");
-    SET_C('F', fwy);
-    SET_C('W', fwy.darker(120));
-    SET_C('Y', fwy.lighter(120));
-
-    QColor ilm("#00ABED");
-    SET_C('I', ilm);
-    SET_C('L', ilm.darker(120));
-    SET_C('M', ilm.lighter(120));
-
-    //fix some color overlaps:
-    //e looks like q by default
-    SET_C('E', "#C0BDBB"); //gray
-    SET_C('X', "#FCFCFC");
-}
-
-
-static void addUGENENucl(QVector<QColor>& colorsPerChar) {
-    SET_C('A', "#FCFF92"); // yellow
-    SET_C('C', "#70F970"); // green
-    SET_C('T', "#FF99B1"); // light red
-    SET_C('G', "#4EADE1"); // light blue
-    SET_C('U', colorsPerChar['T'].lighter(120));
-    SET_C('N', "#FCFCFC");
-}
-
-//TODO: check extended AMINO chars!!! (O/B/U?)
-
-static void addZappoAmino(QVector<QColor>& colorsPerChar) {
-    //Aliphatic/hydrophobic:    ILVAM       #ffafaf
-    SET_C('I', "#ffafaf");
-    SET_C('L', "#ffafaf");
-    SET_C('V', "#ffafaf");
-    SET_C('A', "#ffafaf");
-    SET_C('M', "#ffafaf");
-
-    //Aromatic:  FWY         #ffc800
-    SET_C('F', "#ffc800");
-    SET_C('W', "#ffc800");
-    SET_C('Y', "#ffc800");
-
-    //Positive   KRH         #6464ff
-    SET_C('K', "#6464ff");
-    SET_C('R', "#6464ff");
-    SET_C('H', "#6464ff");
-
-    //Negative   DE          #ff0000
-    SET_C('D', "#ff0000");
-    SET_C('E', "#ff0000");
-
-    //Hydrophil  STNQ        #00ff00
-    SET_C('S', "#00ff00");
-    SET_C('T', "#00ff00");
-    SET_C('N', "#00ff00");
-    SET_C('Q', "#00ff00");
-
-    //conformat  PG          #ff00ff
-    SET_C('P', "#ff00ff");
-    SET_C('G', "#ff00ff");
-
-    //Cysteine   C           #ffff00
-    SET_C('C', "#ffff00");
-}
-
-static void addTailorAmino(QVector<QColor>& colorsPerChar) {
-    SET_C('A', "#ccff00");
-    SET_C('V', "#99ff00");
-    SET_C('I', "#66ff00");
-    SET_C('L', "#33ff00");
-    SET_C('M', "#00ff00");
-    SET_C('F', "#00ff66");
-    SET_C('Y', "#00ffcc");
-    SET_C('W', "#00ccff");
-    SET_C('H', "#0066ff");
-    SET_C('R', "#0000ff");
-    SET_C('K', "#6600ff");
-    SET_C('N', "#cc00ff");
-    SET_C('Q', "#ff00cc");
-    SET_C('E', "#ff0066");
-    SET_C('D', "#ff0000");
-    SET_C('S', "#ff3300");
-    SET_C('T', "#ff6600");
-    SET_C('G', "#ff9900");
-    SET_C('P', "#ffcc00");
-    SET_C('C', "#ffff00");
-}
-
-static void addHydroAmino(QVector<QColor>& colorsPerChar) {
-//The most hydrophobic residues according to this table are colored red and the most hydrophilic ones are colored blue.
-    SET_C('I', "#ff0000");
-    SET_C('V', "#f60009");
-    SET_C('L', "#ea0015");
-    SET_C('F', "#cb0034");
-    SET_C('C', "#c2003d");
-    SET_C('M', "#b0004f");
-    SET_C('A', "#ad0052");
-    SET_C('G', "#6a0095");
-    SET_C('X', "#680097");
-    SET_C('T', "#61009e");
-    SET_C('S', "#5e00a1");
-    SET_C('W', "#5b00a4");
-    SET_C('Y', "#4f00b0");
-    SET_C('P', "#4600b9");
-    SET_C('H', "#1500ea");
-    SET_C('E', "#0c00f3");
-    SET_C('Z', "#0c00f3");
-    SET_C('Q', "#0c00f3");
-    SET_C('D', "#0c00f3");
-    SET_C('B', "#0c00f3");
-    SET_C('N', "#0c00f3");
-    SET_C('K', "#0000ff");
-    SET_C('R', "#0000ff");
-}
-
-static void addHelixAmino(QVector<QColor>& colorsPerChar) {
-    SET_C('E', "#ff00ff");
-    SET_C('M', "#ef10ef");
-    SET_C('A', "#e718e7");
-    SET_C('Z', "#c936c9");
-    SET_C('L', "#ae51ae");
-    SET_C('K', "#a05fa0");
-    SET_C('F', "#986798");
-    SET_C('Q', "#926d92");
-    SET_C('I', "#8a758a");
-    SET_C('W', "#8a758a");
-    SET_C('V', "#857a85");
-    SET_C('D', "#778877");
-    SET_C('X', "#758a75");
-    SET_C('H', "#758a75");
-    SET_C('R', "#6f906f");
-    SET_C('B', "#49b649");
-    SET_C('T', "#47b847");
-    SET_C('S', "#36c936");
-    SET_C('C', "#23dc23");
-    SET_C('Y', "#21de21");
-    SET_C('N', "#1be41b");
-    SET_C('G', "#00ff00");
-    SET_C('P', "#00ff00");
-}
-
-static void addStrandAmino(QVector<QColor>& colorsPerChar) {
-    SET_C('V', "#ffff00");
-    SET_C('I', "#ecec13");
-    SET_C('Y', "#d3d32c");
-    SET_C('F', "#c2c23d");
-    SET_C('W', "#c0c03f");
-    SET_C('L', "#b2b24d");
-    SET_C('T', "#9d9d62");
-    SET_C('C', "#9d9d62");
-    SET_C('Q', "#8c8c73");
-    SET_C('M', "#82827d");
-    SET_C('X', "#797986");
-    SET_C('R', "#6b6b94");
-    SET_C('N', "#64649b");
-    SET_C('H', "#60609f");
-    SET_C('A', "#5858a7");
-    SET_C('S', "#4949b6");
-    SET_C('G', "#4949b6");
-    SET_C('Z', "#4747b8");
-    SET_C('K', "#4747b8");
-    SET_C('B', "#4343bc");
-    SET_C('P', "#2323dc");
-    SET_C('D', "#2121de");
-    SET_C('E', "#0000ff");
-}
-
-static void addTurnAmino(QVector<QColor>& colorsPerChar) {
-    SET_C('N', "#ff0000");
-    SET_C('G', "#ff0000");
-    SET_C('P', "#f60909");
-    SET_C('B', "#f30c0c");
-    SET_C('D', "#e81717");
-    SET_C('S', "#e11e1e");
-    SET_C('C', "#a85757");
-    SET_C('Y', "#9d6262");
-    SET_C('K', "#7e8181");
-    SET_C('X', "#7c8383");
-    SET_C('Q', "#778888");
-    SET_C('W', "#738c8c");
-    SET_C('T', "#738c8c");
-    SET_C('R', "#708f8f");
-    SET_C('H', "#708f8f");
-    SET_C('Z', "#5ba4a4");
-    SET_C('E', "#3fc0c0");
-    SET_C('A', "#2cd3d3");
-    SET_C('F', "#1ee1e1");
-    SET_C('M', "#1ee1e1");
-    SET_C('L', "#1ce3e3");
-    SET_C('V', "#07f8f8");
-    SET_C('I', "#00ffff");
-}
-
-static void addBuriedAmino(QVector<QColor>& colorsPerChar) {
-    SET_C('C', "#0000ff");
-    SET_C('I', "#0054ab");
-    SET_C('V', "#005fa0");
-    SET_C('L', "#007b84");
-    SET_C('F', "#008778");
-    SET_C('M', "#009768");
-    SET_C('G', "#009d62");
-    SET_C('A', "#00a35c");
-    SET_C('W', "#00a857");
-    SET_C('X', "#00b649");
-    SET_C('S', "#00d52a");
-    SET_C('H', "#00d52a");
-    SET_C('T', "#00db24");
-    SET_C('P', "#00e01f");
-    SET_C('Y', "#00e619");
-    SET_C('N', "#00eb14");
-    SET_C('B', "#00eb14");
-    SET_C('D', "#00eb14");
-    SET_C('Q', "#00f10e");
-    SET_C('Z', "#00f10e");
-    SET_C('E', "#00f10e");
-    SET_C('R', "#00fc03");
-    SET_C('K', "#00ff00");
-}
-
-static void addJalviewNucl(QVector<QColor>& colorsPerChar) {
-    SET_C('A', "#64F73F");
-    SET_C('C', "#FFB340");
-    SET_C('G', "#EB413C");
-    SET_C('T', "#3C88EE");
-    SET_C('U', colorsPerChar['T'].lighter(105));
-}
-
-
-//SET_C('', "#");
-
-const QString MSAColorScheme::EMPTY_NUCL        = "COLOR_SCHEME_EMPTY_NUCL";
-const QString MSAColorScheme::UGENE_NUCL        = "COLOR_SCHEME_UGENE_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";
-const QString MSAColorScheme::HYDRO_AMINO       = "COLOR_SCHEME_HYDRO_AMINO";
-const QString MSAColorScheme::HELIX_AMINO       = "COLOR_SCHEME_HELIX_AMINO";
-const QString MSAColorScheme::STRAND_AMINO      = "COLOR_SCHEME_STRAND_AMINO";
-const QString MSAColorScheme::TURN_AMINO        = "COLOR_SCHEME_TURN_AMINO";
-const QString MSAColorScheme::BURIED_AMINO      = "COLOR_SCHEME_BURIED_AMINO";
-const QString MSAColorScheme::IDENTPERC_AMINO   = "COLOR_SCHEME_IDENTPERC_AMINO";
-const QString MSAColorScheme::IDENTPERC_AMINO_GRAY  = "COLOR_SCHEME_IDENTPERC_AMINO_GRAY";
-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";
-
-
-void MSAColorSchemeRegistry::initCustomSchema(){
-    foreach(const CustomColorSchema& schema, ColorSchemaSettingsUtils::getSchemas()){
-        addCustomSchema(schema);
-    }
-}
-
-void MSAColorSchemeRegistry::sl_onCustomSettingsChanged(){
-    QList<MSAColorSchemeFactory*> factoriesToRemove = customColorers;
-    foreach(const CustomColorSchema& schema, ColorSchemaSettingsUtils::getSchemas()){
-        bool factoryExist = false;
-        foreach (MSAColorSchemeFactory* factory, customColorers) {
-            MSAColorSchemeCustomSettingsFactory* customSchemaFactory = qobject_cast<MSAColorSchemeCustomSettingsFactory*>(factory);
-            SAFE_POINT(customSchemaFactory != NULL,
-                       "Failed to convert MSAColorSchemeFactory to MSAColorSchemeCustomSettingsFactory", );
-            if (customSchemaFactory->isEqualTo(schema)) {
-                factoryExist = true;
-                factoriesToRemove.removeOne(factory);
-                break;
-            }
-        }
-        if (factoryExist) {
-            // no need to delete the factory if it was not changed
-            continue;
-        }
-        else {
-            // new schema
-            addCustomSchema(schema);
-        }
-    }
-    foreach(MSAColorSchemeFactory* factory, factoriesToRemove) {
-        customColorers.removeOne(factory);
-        delete factory;
-    }
-
-    emit si_customSettingsChanged();
-}
-
-void MSAColorSchemeRegistry::initBuiltInSchemes() {
-    QVector<QColor> colorsPerChar;
-
-    //nucleic
-    fillEmptyCS(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::EMPTY_NUCL, tr("No colors"), DNAAlphabet_NUCL, colorsPerChar));
-
-    fillLightColorsCS(colorsPerChar);
-    addUGENENucl(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::UGENE_NUCL, U2_APP_TITLE, DNAAlphabet_NUCL, colorsPerChar));
-
-    fillEmptyCS(colorsPerChar);
-    addJalviewNucl(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::JALVIEW_NUCL, tr("Jalview"), DNAAlphabet_NUCL, colorsPerChar));
-
-    addMSAColorSchemeFactory(new MSAColorSchemePercIdentFactory(this, MSAColorScheme::IDENTPERC_NUCL,  tr("Percentage Identity"), DNAAlphabet_NUCL));
-    addMSAColorSchemeFactory(new MSAColorSchemePercIdentGrayscaleFactory(this, MSAColorScheme::IDENTPERC_NUCL_GRAY,  tr("Percentage Identity (gray)"), DNAAlphabet_NUCL));
-
-    //amino
-    fillEmptyCS(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::EMPTY_AMINO, tr("No colors"), DNAAlphabet_AMINO, colorsPerChar));
-
-    fillLightColorsCS(colorsPerChar);
-    addUGENEAmino(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::UGENE_AMINO, U2_APP_TITLE, DNAAlphabet_AMINO, colorsPerChar));
-
-    fillEmptyCS(colorsPerChar);
-    addZappoAmino(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::ZAPPO_AMINO, tr("Zappo"), DNAAlphabet_AMINO, colorsPerChar));
-
-    fillEmptyCS(colorsPerChar);
-    addTailorAmino(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::TAILOR_AMINO, tr("Tailor"), DNAAlphabet_AMINO, colorsPerChar));
-
-    fillEmptyCS(colorsPerChar);
-    addHydroAmino(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::HYDRO_AMINO, tr("Hydrophobicity"), DNAAlphabet_AMINO, colorsPerChar));
-
-    fillEmptyCS(colorsPerChar);
-    addHelixAmino(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::HELIX_AMINO, tr("Helix propensity"), DNAAlphabet_AMINO, colorsPerChar));
-
-    fillEmptyCS(colorsPerChar);
-    addStrandAmino(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::STRAND_AMINO, tr("Strand propensity"), DNAAlphabet_AMINO, colorsPerChar));
-
-    fillEmptyCS(colorsPerChar);
-    addTurnAmino(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::TURN_AMINO, tr("Turn propensity"), DNAAlphabet_AMINO, colorsPerChar));
-
-    fillEmptyCS(colorsPerChar);
-    addBuriedAmino(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::BURIED_AMINO, tr("Buried index"), DNAAlphabet_AMINO, colorsPerChar));
-
-    addMSAColorSchemeFactory(new MSAColorSchemePercIdentFactory(this, MSAColorScheme::IDENTPERC_AMINO, tr("Percentage Identity"), DNAAlphabet_AMINO));
-    addMSAColorSchemeFactory(new MSAColorSchemePercIdentGrayscaleFactory(this, MSAColorScheme::IDENTPERC_AMINO_GRAY, tr("Percentage Identity (gray)"), DNAAlphabet_AMINO));
-
-    addMSAColorSchemeFactory(new MSAColorSchemeClustalXFactory(this, MSAColorScheme::CLUSTALX_AMINO,  tr("Clustal X"), DNAAlphabet_AMINO));
-
-    //raw
-    fillEmptyCS(colorsPerChar);
-    addMSAColorSchemeFactory(new MSAColorSchemeStaticFactory(this, MSAColorScheme::EMPTY_RAW, tr("No colors"), DNAAlphabet_RAW, colorsPerChar));
-
-}
-////////////
-//SNP
-
-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));
-
-    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));
-
-    schemes.append(new MSAHighlightingSchemeTransitionsFactory(this, MSAHighlightingScheme::TRANSITIONS_NUCL, tr("Transitions"), DNAAlphabet_NUCL));
-    schemes.append(new MSAHighlightingSchemeTransversionsFactory(this, MSAHighlightingScheme::TRANSVERSIONS_NUCL, tr("Transversions"), DNAAlphabet_NUCL));
-}
-
-MSAHighlightingSchemeFactory* MSAHighlightingSchemeRegistry::getMSAHighlightingSchemeFactoryById( const QString& id ) const {
-    foreach(MSAHighlightingSchemeFactory* f, schemes) {
-        if(f->getId() == id) {
-            return f;
-        }
-    }
-    return NULL;
-}
-
-QList<MSAHighlightingSchemeFactory*> MSAHighlightingSchemeRegistry::getMSAHighlightingSchemes( DNAAlphabetType atype ){
-    QList<MSAHighlightingSchemeFactory*> res;
-    foreach(MSAHighlightingSchemeFactory* f, schemes) {
-        if (f->getAlphabetType() == atype) {
-            res.append(f);
-        }
-    }
-    return res;
-}
-
-//Factories
-MSAHighlightingScheme* MSAHighlightingSchemeNoColorsFactory::create( QObject* p, MAlignmentObject* obj ){
-    return new MSAHighlightingSchemeEmpty(p, this, obj);
-}
-
-MSAHighlightingScheme* MSAHighlightingSchemeAgreementsFactory::create( QObject* p, MAlignmentObject* obj ){
-    return new MSAHighlightingSchemeAgreements(p, this, obj);
-}
-
-MSAHighlightingScheme* MSAHighlightingSchemeDisagreementsFactory::create(QObject* p, MAlignmentObject* obj){
-    return new MSAHighlightingSchemeDisagreements(p, this, obj);
-}
-
-
-MSAHighlightingScheme* MSAHighlightingSchemeTransitionsFactory::create( QObject* p, MAlignmentObject* obj ){
-    return new MSAHighlightingSchemeTransitions(p, this, obj);
-}
-
-MSAHighlightingScheme* MSAHighlightingSchemeTransversionsFactory::create( QObject* p, MAlignmentObject* obj ){
-    return new MSAHighlightingSchemeTransversions(p, this, obj);
-}
-
-MSAHighlightingScheme* MSAHighlightingSchemeGapsFactory::create( QObject* p, MAlignmentObject* obj ){
-    return new MSAHighlightingSchemeGaps(p, this, obj);
-}
-
-MSAHighlightingScheme* MSAHighlightingSchemeConservationFactory::create(QObject* p, MAlignmentObject* obj){
-    return new MSAHighlightingSchemeConservation(p, this, obj);
-}
-
-//Schemes
-
-MSAHighlightingScheme::MSAHighlightingScheme( QObject* p, MSAHighlightingSchemeFactory* f, MAlignmentObject* o ):
-    QObject(p), factory(f), maObj(o), useDots(false){
-
-}
-
-void MSAHighlightingScheme::process(const char /*refChar*/, char &seqChar, bool &color, int /*refCharColumn*/, int /*refCharRow*/) {
-    if (useDots && !color){
-        seqChar = '.';
-    }
-}
-
-void MSAHighlightingScheme::applySettings(const QVariantMap &settings) {
-    Q_UNUSED(settings);
-}
-
-QVariantMap MSAHighlightingScheme::getSettings() const {
-    return QVariantMap();
-}
-
-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::THRESHOLD_PARAMETER_NAME   = "threshold";
-const QString MSAHighlightingScheme::LESS_THEN_THRESHOLD_PARAMETER_NAME = "less_then_threshold";
-
-void MSAHighlightingSchemeAgreements::process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow ){
-    if(refChar == seqChar){
-        color = true;
-    }else{
-        color = false;
-    }
-    MSAHighlightingScheme::process(refChar, seqChar, color, refCharColumn, refCharRow);
-}
-
-
-void MSAHighlightingSchemeDisagreements::process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow ){
-    if(refChar == seqChar){
-        color = false;
-    }else{
-        color = true;
-    }
-    MSAHighlightingScheme::process(refChar, seqChar, color, refCharColumn, refCharRow);
-}
-
-
-void MSAHighlightingSchemeTransitions::process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow ){
-    switch (refChar){
-        case 'N':
-            color = true;
-            break;
-        case 'A':
-            color = (seqChar == 'G');
-            break;
-        case 'C':
-            color = (seqChar == 'T');
-            break;
-        case 'G':
-            color = (seqChar == 'A');
-            break;
-        case 'T':
-            color = (seqChar == 'C');
-            break;
-        default:
-            color = false;
-            break;
-    }
-    MSAHighlightingScheme::process(refChar, seqChar, color, refCharColumn, refCharRow);
-}
-
-
-void MSAHighlightingSchemeTransversions::process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow ){
-    switch (refChar){
-        case 'N':
-            color = true;
-            break;
-        case 'A':
-            color = (seqChar == 'C' || seqChar == 'T');
-            break;
-        case 'C':
-            color = (seqChar == 'A' || seqChar == 'G');
-            break;
-        case 'G':
-            color = (seqChar == 'C' || seqChar == 'T');
-            break;
-        case 'T':
-            color = (seqChar == 'A' || seqChar == 'G');
-            break;
-        default:
-            color = false;
-            break;
-    }
-    MSAHighlightingScheme::process(refChar, seqChar, color, refCharColumn, refCharRow);
-}
-
-void MSAHighlightingSchemeGaps::process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow ){
-    if(seqChar == '-'){
-        color = true;
-    }else{
-        color = false;
-    }
-    MSAHighlightingScheme::process(refChar, seqChar, color, refCharColumn, refCharRow);
-}
-
-MSAHighlightingSchemeConservation::MSAHighlightingSchemeConservation( QObject* p, MSAHighlightingSchemeFactory* f, MAlignmentObject* o )
-:MSAHighlightingScheme(p, f, o), threshold(50), lessThenThreshold(false){
-    connect(maObj, SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)), SLOT(sl_resetMap()));
-}
-
-void MSAHighlightingSchemeConservation::process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow){
-    if (!msaCharCountMap.contains(refCharColumn)){
-            calculateStatisticForColumn(refCharColumn);
-    }
-
-    int neededThr = (int)((float)(threshold * maObj->getNumRows())/100.0 + 0.5);
-    if(lessThenThreshold) {
-        color = (msaCharCountMap[refCharColumn][seqChar] <= neededThr) ? true : false;
-    } else {
-        color = (msaCharCountMap[refCharColumn][seqChar] >= neededThr) ? true : false;
-    }
-    MSAHighlightingScheme::process(refChar, seqChar, color, refCharColumn, refCharRow);
-}
-
-void MSAHighlightingSchemeConservation::sl_resetMap(){
-    msaCharCountMap.clear();
-}
-
-void MSAHighlightingSchemeConservation::calculateStatisticForColumn(int refCharColumn){
-    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);
-        if(columnStatistic.contains(seqChar)){
-            columnStatistic[seqChar] += 1;
-        }else{
-            columnStatistic[seqChar] = 1;
-        }
-    }
-    msaCharCountMap[refCharColumn] = columnStatistic;
-}
-
-void MSAHighlightingSchemeConservation::applySettings(const QVariantMap &settings){
-    QVariant thresholdQVar = settings.value(THRESHOLD_PARAMETER_NAME);
-    if(!thresholdQVar.isNull()){
-        bool ok;
-        int  convertedThreshold = thresholdQVar.toInt(&ok);
-        CHECK(ok, );
-        threshold = convertedThreshold;
-    }
-    lessThenThreshold = settings.value(LESS_THEN_THRESHOLD_PARAMETER_NAME, lessThenThreshold).toBool();
-}
-
-QVariantMap MSAHighlightingSchemeConservation::getSettings() const {
-    QVariantMap settings;
-    settings.insert(THRESHOLD_PARAMETER_NAME, threshold);
-    settings.insert(LESS_THEN_THRESHOLD_PARAMETER_NAME, lessThenThreshold);
-    return settings;
-}
-
-void MSAHighlightingSchemeEmpty::process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow){
-    color = true;
-    MSAHighlightingScheme::process(refChar, seqChar, color, refCharColumn, refCharRow);
-}
-
-}//namespace
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/MSAColorScheme.h b/src/corelibs/U2Algorithm/src/util_msaedit/MSAColorScheme.h
deleted file mode 100644
index 366c522..0000000
--- a/src/corelibs/U2Algorithm/src/util_msaedit/MSAColorScheme.h
+++ /dev/null
@@ -1,475 +0,0 @@
-/**
- * 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_MSA_COLOR_SCHEME_H_
-#define _U2_MSA_COLOR_SCHEME_H_
-
-#include <QVector>
-#include <QColor>
-
-#include <U2Core/global.h>
-
-namespace U2 {
-
-
-class MAlignmentObject;
-class MSAColorScheme;
-class MAlignment;
-class MAlignmentModInfo;
-
-#define COLOR_SCHEME_SETTINGS_ROOT QString("/color_schema_settings/")
-#define COLOR_SCHEME_SETTINGS_SUB_DIRECTORY QString("MSA_schemes")
-#define COLOR_SCHEME_COLOR_SCHEMA_DIR QString("colors_scheme_dir")
-
-//WARNING if add more then one filter, change corresponding functions
-#define COLOR_SCHEME_NAME_FILTERS QString(".csmsa")
-#define COLOR_SCHEME_AMINO_KEYWORD QString("AMINO")
-#define COLOR_SCHEME_NUCL_KEYWORD QString("NUCL")
-#define COLOR_SCHEME_NUCL_DEFAULT_KEYWORD QString("NUCL_DEFAULT")
-#define COLOR_SCHEME_NUCL_EXTENDED_KEYWORD QString("NUCL_EXTENDED")
-
-class U2ALGORITHM_EXPORT CustomColorSchema{
-public:
-    QString name;
-    DNAAlphabetType type;
-    bool defaultAlpType;
-    QMap<char, QColor> alpColors;
-};
-
-class U2ALGORITHM_EXPORT ColorSchemaSettingsUtils {
-public:
-    static QList<CustomColorSchema> getSchemas();
-    static QString getColorsDir();
-    static void getDefaultUgeneColors(DNAAlphabetType type, QMap<char, QColor>& alphColors);
-    static QMap<char, QColor> getDefaultSchemaColors(DNAAlphabetType type, bool defaultAlpType);
-    static void setColorsDir(const QString &colorsDir);
-
-};
-
-
-
-//////////////////////////////////////////////////////////////////////////
-// factories
-
-class U2ALGORITHM_EXPORT MSAColorSchemeFactory : public QObject {
-    Q_OBJECT
-public:
-    MSAColorSchemeFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype);
-    virtual MSAColorScheme* create(QObject* p, MAlignmentObject* obj) = 0;
-
-    const QString& getId() const {return id;}
-    const QString& getName() const {return name;}
-    DNAAlphabetType getAlphabetType() const {return aType;}
-
-private:
-    QString         id;
-    QString         name;
-    DNAAlphabetType aType;
-};
-
-class U2ALGORITHM_EXPORT MSAColorSchemeStaticFactory : public MSAColorSchemeFactory {
-    Q_OBJECT
-public:
-    MSAColorSchemeStaticFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype, const QVector<QColor>& colorsPerChar);
-    virtual MSAColorScheme* create(QObject* p, MAlignmentObject* obj);
-private:
-    QVector<QColor> colorsPerChar;
-};
-
-class U2ALGORITHM_EXPORT MSAColorSchemeCustomSettingsFactory : public MSAColorSchemeFactory {
-    Q_OBJECT
-public:
-    MSAColorSchemeCustomSettingsFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype, const QVector<QColor>& colorsPerChar);
-    virtual MSAColorScheme* create(QObject* p, MAlignmentObject* obj);
-    bool isEqualTo(const CustomColorSchema& schema) const;
-    static QVector<QColor> colorMapToColorVector(const QMap<char, QColor> &map);
-private:
-    QVector<QColor> colorsPerChar;
-};
-
-class MSAColorSchemePercIdentFactory : public MSAColorSchemeFactory {
-    Q_OBJECT
-public:
-    MSAColorSchemePercIdentFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype);
-    virtual MSAColorScheme* create(QObject* p, MAlignmentObject* obj);
-};
-
-class MSAColorSchemePercIdentGrayscaleFactory : public MSAColorSchemeFactory {
-    Q_OBJECT
-public:
-    MSAColorSchemePercIdentGrayscaleFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype);
-    virtual MSAColorScheme* create(QObject* p, MAlignmentObject* obj);
-};
-
-class MSAColorSchemeClustalXFactory : public MSAColorSchemeFactory {
-    Q_OBJECT
-public:
-    MSAColorSchemeClustalXFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype);
-    virtual MSAColorScheme* create(QObject* p, MAlignmentObject* obj);
-};
-
-
-//////////////////////////////////////////////////////////////////////////
-// schemes
-
-class U2ALGORITHM_EXPORT MSAColorScheme : public QObject {
-    Q_OBJECT
-public:
-    MSAColorScheme(QObject* p, MSAColorSchemeFactory* f, MAlignmentObject* o);
-    //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) = 0;
-    MSAColorSchemeFactory* getFactory() const {return factory;}
-
-    static const QString EMPTY_NUCL;
-    static const QString UGENE_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;
-    static const QString HYDRO_AMINO;
-    static const QString HELIX_AMINO;
-    static const QString STRAND_AMINO;
-    static const QString TURN_AMINO;
-    static const QString BURIED_AMINO;
-    static const QString IDENTPERC_AMINO;
-    static const QString IDENTPERC_AMINO_GRAY;
-    static const QString CLUSTALX_AMINO;
-    static const QString CUSTOM_AMINO;
-
-    static const QString EMPTY_RAW;
-protected:
-    MSAColorSchemeFactory*  factory;
-    MAlignmentObject*       maObj;
-};
-
-class U2ALGORITHM_EXPORT MSAColorSchemeStatic : public MSAColorScheme {
-    Q_OBJECT
-public:
-    MSAColorSchemeStatic(QObject* p, MSAColorSchemeFactory* f, MAlignmentObject* o, const QVector<QColor>& colorsPerChar);
-    virtual QColor getColor(int seq, int pos, char c);
-private:
-
-    QVector<QColor> colorsPerChar;
-};
-
-
-//PERCENT
-class U2ALGORITHM_EXPORT MSAColorSchemePercIdent : public MSAColorScheme {
-    Q_OBJECT
-public:
-    MSAColorSchemePercIdent(QObject* p, MSAColorSchemeFactory* f, MAlignmentObject* o);
-    virtual QColor getColor(int seq, int pos, char c);
-
-private slots:
-    void sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&) {objVersion++;}
-
-protected:
-    void updateCache();
-
-    QVector<quint32>    indentCache;
-    int                 cacheVersion;
-    int                 objVersion;
-    QColor              colorsByRange[4];
-    int                 mask4[4];
-    char                tmpChars[4];
-    int                 tmpRanges[4];
-};
-
-class U2ALGORITHM_EXPORT MSAColorSchemePercIdentGrayscale : public MSAColorSchemePercIdent {
-public:
-    MSAColorSchemePercIdentGrayscale(QObject* p, MSAColorSchemeFactory* f, MAlignmentObject* o);
-};
-
-//CLUSTALX
-// 0.5 * alisize mem use, slow update
-class U2ALGORITHM_EXPORT MSAColorSchemeClustalX: public MSAColorScheme {
-    Q_OBJECT
-public:
-    MSAColorSchemeClustalX(QObject* p, MSAColorSchemeFactory* f, MAlignmentObject* o);
-    virtual QColor getColor(int seq, int pos, char c);
-private slots:
-    void sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&) {objVersion++;}
-
-protected:
-    void updateCache();
-    int getCacheIdx(int seq, int pos, bool& low) const {
-        assert(objVersion == cacheVersion);
-        int res = seq * aliLen + pos;
-        low = !(res & 0x1);
-        return res / 2;
-    }
-
-    int getColorIdx(int seq, int pos);
-    void setColorIdx(int seq, int pos, int cidx);
-
-    enum ClustalColor {
-        ClustalColor_NO_COLOR,
-        ClustalColor_BLUE,
-        ClustalColor_RED,
-        ClustalColor_GREEN,
-        ClustalColor_PINK,
-        ClustalColor_MAGENTA,
-        ClustalColor_ORANGE,
-        ClustalColor_CYAN,
-        ClustalColor_YELLOW,
-        ClustalColor_NUM_COLORS
-    };
-    int              objVersion;
-    int              cacheVersion;
-    int              aliLen;
-    QVector<quint8>  colorsCache;
-    QColor           colorByIdx[ClustalColor_NUM_COLORS];
-};
-
-//////////////////////////////////////////////////////////////////////////
-// registry
-class U2ALGORITHM_EXPORT MSAColorSchemeRegistry : public QObject {
-    Q_OBJECT
-public:
-    MSAColorSchemeRegistry();
-    ~MSAColorSchemeRegistry();
-
-    const QList<MSAColorSchemeFactory*>& getMSAColorSchemes() const {return colorers;}
-    const QList<MSAColorSchemeFactory*>& getCustomColorSchemes() const {return customColorers;}
-
-    QList<MSAColorSchemeFactory*> getMSAColorSchemes(DNAAlphabetType atype) const;
-    QList<MSAColorSchemeFactory*> getMSACustomColorSchemes(DNAAlphabetType atype) const;
-
-    MSAColorSchemeFactory* getMSAColorSchemeFactoryById(const QString& id) const;
-
-    void addCustomSchema(const CustomColorSchema& schema);
-    void addMSAColorSchemeFactory(MSAColorSchemeFactory* cs);
-    void addMSACustomColorSchemeFactory(MSAColorSchemeFactory* cs);
-signals:
-    void si_customSettingsChanged();
-private slots:
-    void sl_onCustomSettingsChanged();
-private:
-    void deleteOldCustomFactories();
-    void initBuiltInSchemes();
-    void initCustomSchema();
-
-    QList<MSAColorSchemeFactory*> colorers;
-    QList<MSAColorSchemeFactory*> customColorers;
-};
-
-
-//////////////////////////////////////////////////////////////////////////
-// SNP highitning
-
-class MSAHighlightingSchemeFactory;
-class MSAHighlightingScheme;
-class MSAHighlightingSchemeEmpty;
-class MSAHighlightingSchemeAgreements;
-class MSAHighlightingSchemeDisagreements;
-class MSAHighlightingSchemeTransitions;
-class MSAHighlightingSchemeTransversions;
-
-class U2ALGORITHM_EXPORT MSAHighlightingSchemeRegistry : public QObject {
-    Q_OBJECT
-public:
-    MSAHighlightingSchemeRegistry();
-
-    MSAHighlightingSchemeFactory* getMSAHighlightingSchemeFactoryById(const QString& id) const;
-    QList<MSAHighlightingSchemeFactory*> getMSAHighlightingSchemes(DNAAlphabetType atype);
-
-private:
-    QList<MSAHighlightingSchemeFactory*> schemes;
-};
-
-class U2ALGORITHM_EXPORT MSAHighlightingSchemeFactory : public QObject {
-    Q_OBJECT
-public:
-    MSAHighlightingSchemeFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype,
-        bool _refFree = false, bool _needThreshold = false )
-        :QObject(p), id(id), name(name), aType(atype), refFree(_refFree), needThreshold(_needThreshold){};
-    virtual MSAHighlightingScheme* create(QObject* p, MAlignmentObject* obj) = 0;
-
-    const QString& getId() const {return id;}
-    const QString& getName() const {return name;}
-    DNAAlphabetType getAlphabetType() const {return aType;}
-    bool isRefFree(){return refFree;};
-    bool isNeedThreshold(){return needThreshold;};
-
-private:
-    QString         id;
-    QString         name;
-    DNAAlphabetType aType;
-    bool            refFree;
-    bool            needThreshold;
-};
-
-class U2ALGORITHM_EXPORT MSAHighlightingSchemeNoColorsFactory : public MSAHighlightingSchemeFactory {
-public:
-    MSAHighlightingSchemeNoColorsFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype):
-        MSAHighlightingSchemeFactory(p, id, name, atype, true){};
-    virtual MSAHighlightingScheme* create(QObject* p, MAlignmentObject* obj);
-};
-
-class U2ALGORITHM_EXPORT MSAHighlightingSchemeAgreementsFactory : public MSAHighlightingSchemeFactory {
-public:
-    MSAHighlightingSchemeAgreementsFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype):
-        MSAHighlightingSchemeFactory(p, id, name, atype){};
-    virtual MSAHighlightingScheme* create(QObject* p, MAlignmentObject* obj);
-};
-
-class U2ALGORITHM_EXPORT MSAHighlightingSchemeDisagreementsFactory : public MSAHighlightingSchemeFactory {
-public:
-    MSAHighlightingSchemeDisagreementsFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype):
-        MSAHighlightingSchemeFactory(p, id, name, atype){};
-    virtual MSAHighlightingScheme* create(QObject* p, MAlignmentObject* obj);
-};
-
-class U2ALGORITHM_EXPORT MSAHighlightingSchemeTransitionsFactory : public MSAHighlightingSchemeFactory {
-public:
-    MSAHighlightingSchemeTransitionsFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype):
-      MSAHighlightingSchemeFactory(p, id, name, atype){};
-    virtual MSAHighlightingScheme* create(QObject* p, MAlignmentObject* obj);
-};
-
-class U2ALGORITHM_EXPORT MSAHighlightingSchemeTransversionsFactory : public MSAHighlightingSchemeFactory {
-public:
-    MSAHighlightingSchemeTransversionsFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype):
-      MSAHighlightingSchemeFactory(p, id, name, atype){};
-    virtual MSAHighlightingScheme* create(QObject* p, MAlignmentObject* obj);
-};
-
-class U2ALGORITHM_EXPORT MSAHighlightingSchemeGapsFactory : public MSAHighlightingSchemeFactory {
-public:
-    MSAHighlightingSchemeGapsFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype):
-      MSAHighlightingSchemeFactory(p, id, name, atype, true){};
-    virtual MSAHighlightingScheme* create(QObject* p, MAlignmentObject* obj);
-};
-
-class U2ALGORITHM_EXPORT MSAHighlightingSchemeConservationFactory : public MSAHighlightingSchemeFactory {
-public:
-    MSAHighlightingSchemeConservationFactory(QObject* p, const QString& id, const QString& name, DNAAlphabetType atype):
-      MSAHighlightingSchemeFactory(p, id, name, atype, true, true){};
-      virtual MSAHighlightingScheme* create(QObject* p, MAlignmentObject* obj);
-};
-
-class U2ALGORITHM_EXPORT MSAHighlightingScheme: public QObject {
-    Q_OBJECT
-public:
-    MSAHighlightingScheme(QObject* p, MSAHighlightingSchemeFactory* f, MAlignmentObject* o);
-    virtual void process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow);
-    MSAHighlightingSchemeFactory* getFactory() const {return factory;}
-    void setUseDots(bool b) { useDots = b; }
-    bool getUseDots() const { return useDots; }
-    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 THRESHOLD_PARAMETER_NAME;
-    static const QString LESS_THEN_THRESHOLD_PARAMETER_NAME;
-protected:
-    MSAHighlightingSchemeFactory*  factory;
-    MAlignmentObject*       maObj;
-    bool useDots;
-};
-
-class MSAHighlightingSchemeEmpty : public MSAHighlightingScheme{
-    Q_OBJECT
-public:
-    MSAHighlightingSchemeEmpty(QObject* p, MSAHighlightingSchemeFactory* f, MAlignmentObject* o):
-        MSAHighlightingScheme(p, f, o){}
-    virtual void process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow);
-};
-
-class MSAHighlightingSchemeAgreements : public MSAHighlightingScheme{
-    Q_OBJECT
-public:
-    MSAHighlightingSchemeAgreements(QObject* p, MSAHighlightingSchemeFactory* f, MAlignmentObject* o):
-        MSAHighlightingScheme(p, f, o){}
-    virtual void process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow);
-};
-
-class MSAHighlightingSchemeDisagreements : public MSAHighlightingScheme{
-    Q_OBJECT
-public:
-    MSAHighlightingSchemeDisagreements(QObject* p, MSAHighlightingSchemeFactory* f, MAlignmentObject* o)
-        :MSAHighlightingScheme(p, f, o){}
-    virtual void process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow);
-};
-
-class MSAHighlightingSchemeTransitions : public MSAHighlightingScheme{
-    Q_OBJECT
-public:
-    MSAHighlightingSchemeTransitions(QObject* p, MSAHighlightingSchemeFactory* f, MAlignmentObject* o)
-        :MSAHighlightingScheme(p, f, o){}
-    virtual void process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow);
-};
-
-class MSAHighlightingSchemeTransversions : public MSAHighlightingScheme{
-    Q_OBJECT
-public:
-    MSAHighlightingSchemeTransversions(QObject* p, MSAHighlightingSchemeFactory* f, MAlignmentObject* o)
-        :MSAHighlightingScheme(p, f, o){}
-    virtual void process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow);
-};
-
-class MSAHighlightingSchemeGaps : public MSAHighlightingScheme{
-    Q_OBJECT
-public:
-    MSAHighlightingSchemeGaps(QObject* p, MSAHighlightingSchemeFactory* f, MAlignmentObject* o)
-        :MSAHighlightingScheme(p, f, o){}
-    virtual void process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow);
-};
-
-typedef QMap<char, int> CharCountMap;
-
-class MSAHighlightingSchemeConservation : public MSAHighlightingScheme{
-    Q_OBJECT
-public:
-    MSAHighlightingSchemeConservation(QObject* p, MSAHighlightingSchemeFactory* f, MAlignmentObject* o);
-    virtual void process(const char refChar, char &seqChar, bool &color, int refCharColumn, int refCharRow);
-    virtual void applySettings(const QVariantMap &settings);
-    virtual QVariantMap getSettings() const;
-private slots:
-    void sl_resetMap();
-private:
-    void calculateStatisticForColumn(int refCharColumn);
-    QMap<int, CharCountMap> msaCharCountMap;
-    int threshold;
-    bool lessThenThreshold;
-};
-
-}//namespace
-#endif
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.cpp
new file mode 100644
index 0000000..420424c
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.cpp
@@ -0,0 +1,269 @@
+/**
+ * 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 <QColor>
+#include <QDir>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/IOAdapterUtils.h>
+#include <U2Core/Log.h>
+#include <U2Core/Settings.h>
+
+#include "ColorSchemeUtils.h"
+
+namespace U2 {
+
+const QString ColorSchemeUtils::COLOR_SCHEME_AMINO_KEYWORD = "AMINO";
+const QString ColorSchemeUtils::COLOR_SCHEME_NUCL_KEYWORD = "NUCL";
+const QString ColorSchemeUtils::COLOR_SCHEME_NUCL_DEFAULT_KEYWORD = "NUCL_DEFAULT";
+const QString ColorSchemeUtils::COLOR_SCHEME_NUCL_EXTENDED_KEYWORD = "NUCL_EXTENDED";
+
+const QString ColorSchemeUtils::COLOR_SCHEME_NAME_FILTERS = ".csmsa";
+const QString ColorSchemeUtils::COLOR_SCHEME_SETTINGS_ROOT = "/color_schema_settings/";
+const QString ColorSchemeUtils::COLOR_SCHEME_SETTINGS_SUB_DIRECTORY = "MSA_schemes";
+const QString ColorSchemeUtils::COLOR_SCHEME_COLOR_SCHEMA_DIR = "colors_scheme_dir";
+
+namespace {
+
+bool lineValid(const QStringList &properties, const QMap<char, QColor> &alphColors) {
+    if (properties.size() != 2) {
+        return false;
+    }
+
+    if (properties[0].size() != 1 || (!alphColors.contains(properties[0][0].toLatin1()))) {
+        return false;
+    }
+
+    if (!QColor(properties[1]).isValid()) {
+        return false;
+    }
+
+    return true;
+}
+
+QByteArray uniteAlphabetChars(const QByteArray &firstAlphabetChars, const QByteArray &secondAlphabetChars) {
+    QByteArray unitedAlphabetChars = firstAlphabetChars;
+    for (int i = 0; i < secondAlphabetChars.size(); ++i) {
+        if (!unitedAlphabetChars.contains(secondAlphabetChars[i])) {
+            unitedAlphabetChars.append(secondAlphabetChars[i]);
+        }
+    }
+    qSort(unitedAlphabetChars.begin(), unitedAlphabetChars.end());
+    return unitedAlphabetChars;
+}
+
+}
+
+bool ColorSchemeUtils::getSchemaColors(ColorSchemeData &customScheme) {
+    QMap<char, QColor> &alphColors = customScheme.alpColors;
+    const QString &file = customScheme.name + COLOR_SCHEME_NAME_FILTERS;
+    DNAAlphabetType &type = customScheme.type;
+    bool &defaultAlpType = customScheme.defaultAlpType = true;
+
+    QString dirPath = getColorsDir();
+    QDir dir(dirPath);
+    if (!dir.exists()) {
+        coreLog.info(QString("%1: no such directory").arg(dirPath));
+        return false;
+    }
+
+    IOAdapterFactory *factory = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(BaseIOAdapters::LOCAL_FILE);
+
+    QScopedPointer<IOAdapter> io(factory->createIOAdapter());
+    if (!io->open(dir.filePath(file), IOAdapterMode_Read)) {
+        coreLog.info(QString("%1: no such scheme").arg(customScheme.name));
+        return false;
+    }
+
+    while (!io->isEof()) {
+        const int max_size = 1024;
+
+        QByteArray byteLine(max_size + 1, 0);
+        int lineLength = io->readLine(byteLine.data(), max_size);
+        QString line(byteLine);
+        line.remove(lineLength, line.size() - lineLength);
+        if (line.isEmpty()) {
+            continue;
+
+        }
+
+        if (line == COLOR_SCHEME_AMINO_KEYWORD) {
+            type = DNAAlphabet_AMINO;
+        } else if (line.contains(COLOR_SCHEME_NUCL_KEYWORD)) {
+            type = DNAAlphabet_NUCL;
+            if (line == COLOR_SCHEME_NUCL_DEFAULT_KEYWORD) {
+                defaultAlpType = true;
+            } else if(line == COLOR_SCHEME_NUCL_EXTENDED_KEYWORD) {
+                defaultAlpType = false;
+            } else {
+                coreLog.info(QString("%1: mode of nucleic alphabet of scheme not defined, use default mode").arg(customScheme.name));
+            }
+        } else {
+            coreLog.info(QString("%1: alphabet of scheme not defined").arg(customScheme.name));
+            return false;
+        }
+
+        alphColors = getDefaultSchemaColors(type, defaultAlpType);
+        break;
+    }
+
+    QMap<char, QColor> tmpHelper;
+    while (!io->isEof()) {
+        const int max_size = 1024;
+
+        QByteArray byteLine(max_size + 1, 0);
+        int lineLength = io->readLine(byteLine.data(), max_size);
+        QString line(byteLine);
+        line.remove(lineLength, line.size() - lineLength);
+        if (line.isEmpty()) {
+            continue;
+
+        }
+        QStringList properties = line.split(QString("="), QString::SkipEmptyParts);
+
+        if (!lineValid(properties, alphColors)) {
+            coreLog.info(QString("%1: scheme is not valid").arg(customScheme.name));
+            return false;
+        }
+
+        tmpHelper[properties.first().at(0).toLatin1()] = QColor(properties[1]);
+    }
+
+    QMapIterator<char, QColor> it(tmpHelper);
+    while (it.hasNext()) {
+        it.next();
+        alphColors[it.key()] = it.value();
+    }
+
+    return true;
+}
+
+QList<ColorSchemeData> ColorSchemeUtils::getSchemas() {
+    QList<ColorSchemeData> customSchemas;
+
+    QDir dir(getColorsDir());
+    if (!dir.exists()) {
+        return QList<ColorSchemeData>();
+    }
+
+    QStringList filters;
+    filters.append(QString("*%1").arg(COLOR_SCHEME_NAME_FILTERS));
+
+    QStringList schemaFiles = dir.entryList(filters);
+    foreach (const QString &schemaName, schemaFiles) {
+        ColorSchemeData schema;
+        schema.name = schemaName.split(".").first();
+        bool ok = getSchemaColors(schema);
+        if (!ok) {
+            continue;
+        }
+        customSchemas.append(schema);
+    }
+    return customSchemas;
+}
+
+QString ColorSchemeUtils::getColorsDir() {
+    QString settingsFile = AppContext::getSettings()->fileName();
+    QString settingsDir = QDir(QFileInfo(settingsFile).absolutePath()).filePath(COLOR_SCHEME_SETTINGS_SUB_DIRECTORY);
+
+    QString res = AppContext::getSettings()->getValue(COLOR_SCHEME_SETTINGS_ROOT + COLOR_SCHEME_COLOR_SCHEMA_DIR, settingsDir, true).toString();
+
+    return res;
+}
+
+void ColorSchemeUtils::getDefaultUgeneColors(DNAAlphabetType type, QMap<char, QColor> &alphColors) {
+    if (type == DNAAlphabet_AMINO) {
+        alphColors['I'] = "#ff0000";
+        alphColors['V'] = "#f60009";
+        alphColors['L'] = "#ea0015";
+        alphColors['F'] = "#cb0034";
+        alphColors['C'] = "#c2003d";
+        alphColors['M'] = "#b0004f";
+        alphColors['A'] = "#ad0052";
+        alphColors['G'] = "#6a0095";
+        alphColors['X'] = "#680097";
+        alphColors['T'] = "#61009e";
+        alphColors['S'] = "#5e00a1";
+        alphColors['W'] = "#5b00a4";
+        alphColors['Y'] = "#4f00b0";
+        alphColors['P'] = "#4600b9";
+        alphColors['H'] = "#1500ea";
+        alphColors['E'] = "#0c00f3";
+        alphColors['Z'] = "#0c00f3";
+        alphColors['Q'] = "#0c00f3";
+        alphColors['D'] = "#0c00f3";
+        alphColors['B'] = "#0c00f3";
+        alphColors['N'] = "#0c00f3";
+        alphColors['K'] = "#0000ff";
+        alphColors['R'] = "#0000ff";
+    } else if (type == DNAAlphabet_NUCL) {
+        alphColors['A'] = "#FCFF92"; // yellow
+        alphColors['C'] = "#70F970"; // green
+        alphColors['T'] = "#FF99B1"; // light red
+        alphColors['G'] = "#4EADE1"; // light blue
+        alphColors['U'] = alphColors['T'].lighter(120);
+        alphColors['N'] = "#FCFCFC";
+    }
+}
+
+QMap<char, QColor> ColorSchemeUtils::getDefaultSchemaColors(DNAAlphabetType type, bool defaultAlpType) {
+    QList<const DNAAlphabet *> alphabets = AppContext::getDNAAlphabetRegistry()->getRegisteredAlphabets();
+    QMap<DNAAlphabetType, QByteArray > alphabetChars;
+    foreach (const DNAAlphabet* alphabet, alphabets){ // default initialization
+        if (defaultAlpType == alphabet->isDefault()) {
+            alphabetChars[alphabet->getType()] = uniteAlphabetChars(alphabetChars.value(alphabet->getType()) ,alphabet->getAlphabetChars());
+        }
+    }
+
+    QMapIterator<DNAAlphabetType, QByteArray> it(alphabetChars);
+    QByteArray alphabet;
+    while (it.hasNext()) {
+        it.next();
+        if (it.key() == type) {
+            alphabet = it.value();
+            break;
+        }
+    }
+
+    QMap<char, QColor> alphColors;
+    for (int i = 0; i < alphabet.size(); ++i) {
+        alphColors[alphabet[i]] = QColor(Qt::white);
+    }
+
+    getDefaultUgeneColors(type, alphColors);
+    return alphColors;
+}
+
+void ColorSchemeUtils::setColorsDir(const QString &colorsDir) {
+    QString settingsFile = AppContext::getSettings()->fileName();
+    QString settingsDir = QFileInfo(settingsFile).absolutePath();
+    if (settingsDir != colorsDir) {
+        AppContext::getSettings()->setValue(COLOR_SCHEME_SETTINGS_ROOT + COLOR_SCHEME_COLOR_SCHEMA_DIR, colorsDir, true);
+    }
+}
+
+void ColorSchemeUtils::fillEmptyColorScheme(QVector<QColor> &colorsPerChar) {
+    colorsPerChar.fill(QColor(), 256);
+}
+
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.h
new file mode 100644
index 0000000..a2356de
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.h
@@ -0,0 +1,54 @@
+/**
+ * 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_COLOR_SCHEME_UTILS_H_
+#define _U2_COLOR_SCHEME_UTILS_H_
+
+#include <U2Core/global.h>
+
+#include "MsaColorScheme.h"
+
+namespace U2 {
+
+class U2ALGORITHM_EXPORT ColorSchemeUtils {
+public:
+    static bool getSchemaColors(ColorSchemeData &customScheme);
+    static QList<ColorSchemeData> getSchemas();
+    static QString getColorsDir();
+    static void getDefaultUgeneColors(DNAAlphabetType type, QMap<char, QColor>& alphColors);
+    static QMap<char, QColor> getDefaultSchemaColors(DNAAlphabetType type, bool defaultAlpType);
+    static void setColorsDir(const QString &colorsDir);
+    static void fillEmptyColorScheme(QVector<QColor> &colorsPerChar);
+
+    static const QString COLOR_SCHEME_AMINO_KEYWORD;
+    static const QString COLOR_SCHEME_NUCL_KEYWORD;
+    static const QString COLOR_SCHEME_NUCL_DEFAULT_KEYWORD;
+    static const QString COLOR_SCHEME_NUCL_EXTENDED_KEYWORD;
+
+    static const QString COLOR_SCHEME_NAME_FILTERS;
+    static const QString COLOR_SCHEME_SETTINGS_ROOT;
+    static const QString COLOR_SCHEME_SETTINGS_SUB_DIRECTORY;
+    static const QString COLOR_SCHEME_COLOR_SCHEMA_DIR;
+};
+
+}   // namespace U2
+
+#endif // _U2_COLOR_SCHEME_UTILS_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.cpp
new file mode 100644
index 0000000..48253d8
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.cpp
@@ -0,0 +1,568 @@
+/**
+ * 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 <QColor>
+
+#include <U2Core/FeatureColors.h>
+#include <U2Core/MAlignment.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "ColorSchemeUtils.h"
+#include "MsaColorScheme.h"
+#include "MsaColorSchemeClustalX.h"
+#include "MsaColorSchemeCustom.h"
+#include "MsaColorSchemePercentageIdentity.h"
+#include "MsaColorSchemePercentageIdententityGrayscale.h"
+#include "MsaColorSchemeStatic.h"
+
+namespace U2 {
+
+const QString MsaColorScheme::EMPTY_NUCL            = "COLOR_SCHEME_EMPTY_NUCL";
+const QString MsaColorScheme::UGENE_NUCL            = "COLOR_SCHEME_UGENE_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";
+const QString MsaColorScheme::HYDRO_AMINO           = "COLOR_SCHEME_HYDRO_AMINO";
+const QString MsaColorScheme::HELIX_AMINO           = "COLOR_SCHEME_HELIX_AMINO";
+const QString MsaColorScheme::STRAND_AMINO          = "COLOR_SCHEME_STRAND_AMINO";
+const QString MsaColorScheme::TURN_AMINO            = "COLOR_SCHEME_TURN_AMINO";
+const QString MsaColorScheme::BURIED_AMINO          = "COLOR_SCHEME_BURIED_AMINO";
+const QString MsaColorScheme::IDENTPERC_AMINO       = "COLOR_SCHEME_IDENTPERC_AMINO";
+const QString MsaColorScheme::IDENTPERC_AMINO_GRAY  = "COLOR_SCHEME_IDENTPERC_AMINO_GRAY";
+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)
+    : QObject(parent),
+      factory(factory),
+      maObj(maObj) {
+
+}
+
+const MsaColorSchemeFactory * MsaColorScheme::getFactory() const {
+    return factory;
+}
+
+MsaColorSchemeFactory::MsaColorSchemeFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
+    : QObject(parent),
+      id(id),
+      name(name),
+      alphabetType(alphabetType) {
+
+}
+
+const QString & MsaColorSchemeFactory::getId() const {
+    return id;
+}
+
+const QString & MsaColorSchemeFactory::getName() const {
+    return name;
+}
+
+DNAAlphabetType MsaColorSchemeFactory::getAlphabetType() const {
+    return alphabetType;
+}
+
+MsaColorSchemeRegistry::MsaColorSchemeRegistry() {
+    initBuiltInSchemes();
+    initCustomSchema();
+}
+
+MsaColorSchemeRegistry::~MsaColorSchemeRegistry(){
+    deleteOldCustomFactories();
+}
+
+const QList<MsaColorSchemeFactory *> & MsaColorSchemeRegistry::getMsaColorSchemes() const {
+    return colorers;
+}
+
+const QList<MsaColorSchemeCustomFactory *> & MsaColorSchemeRegistry::getCustomColorSchemes() const {
+    return customColorers;
+}
+
+QList<MsaColorSchemeFactory *> MsaColorSchemeRegistry::getMsaColorSchemes(DNAAlphabetType alphabetType) const {
+    QList<MsaColorSchemeFactory *> res;
+    foreach (MsaColorSchemeFactory *factory, colorers) {
+        if (factory->getAlphabetType() == alphabetType) {
+            res.append(factory);
+        }
+    }
+    return res;
+}
+
+QList<MsaColorSchemeFactory *> MsaColorSchemeRegistry::getMsaCustomColorSchemes(DNAAlphabetType alphabetType) const {
+    QList<MsaColorSchemeFactory *> res;
+    foreach (MsaColorSchemeFactory *factory, customColorers) {
+        if (factory->getAlphabetType() == alphabetType) {
+            res.append(factory);
+        }
+    }
+    return res;
+}
+
+MsaColorSchemeCustomFactory * MsaColorSchemeRegistry::getMsaCustomColorSchemeFactoryById(const QString &id) const {
+    foreach (MsaColorSchemeCustomFactory *customFactory, customColorers) {
+        if (customFactory->getId() == id) {
+            return customFactory;
+        }
+    }
+
+    return NULL;
+}
+
+MsaColorSchemeFactory * MsaColorSchemeRegistry::getMsaColorSchemeFactoryById(const QString& id) const {
+    foreach (MsaColorSchemeFactory *commonFactory, colorers) {
+        if (commonFactory->getId() == id) {
+            return commonFactory;
+        }
+    }
+
+    return getMsaCustomColorSchemeFactoryById(id);
+}
+
+void MsaColorSchemeRegistry::addCustomScheme(const ColorSchemeData &scheme) {
+    addMsaCustomColorSchemeFactory(new MsaColorSchemeCustomFactory(NULL, 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);
+    colorers.append(commonFactory);
+    qStableSort(colorers.begin(), colorers.end(), compareNames);
+}
+
+void MsaColorSchemeRegistry::addMsaCustomColorSchemeFactory(MsaColorSchemeCustomFactory *customFactory) {
+    assert(getMsaColorSchemeFactoryById(customFactory->getId()) == NULL);
+    customColorers.append(customFactory);
+    qStableSort(colorers.begin(), colorers.end(), compareNames);
+}
+
+void MsaColorSchemeRegistry::sl_onCustomSettingsChanged() {
+    bool schemesListChanged = false;
+
+    QList<MsaColorSchemeCustomFactory *> factoriesToRemove = customColorers;
+    foreach (const ColorSchemeData &scheme, ColorSchemeUtils::getSchemas()) {
+        MsaColorSchemeCustomFactory *customSchemeFactory = getMsaCustomColorSchemeFactoryById(scheme.name);
+        if (NULL == customSchemeFactory) {
+            addCustomScheme(scheme);
+            schemesListChanged |= true;
+        } else {
+            customSchemeFactory->setScheme(scheme);
+            factoriesToRemove.removeOne(customSchemeFactory);
+        }
+    }
+
+    schemesListChanged |= !factoriesToRemove.isEmpty();
+    CHECK(schemesListChanged, );
+
+    foreach (MsaColorSchemeCustomFactory *factory, factoriesToRemove) {
+        customColorers.removeOne(factory);
+    }
+
+    emit si_customSettingsChanged();
+    qDeleteAll(factoriesToRemove);
+}
+
+void MsaColorSchemeRegistry::deleteOldCustomFactories() {
+    qDeleteAll(customColorers);
+    customColorers.clear();
+}
+
+namespace {
+
+#define SET_C(ch, cl) colorsPerChar[ch]=colorsPerChar[ch+('a'-'A')]=cl
+
+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
+}
+
+void addUgeneAmino(QVector<QColor> &colorsPerChar) {
+    Q_UNUSED(colorsPerChar);
+
+    //amino groups: "KRH", "GPST", "FWY", "ILM"
+    QColor krh("#FFEE00");
+    SET_C('K', krh);
+    SET_C('R', krh.darker(120));
+    SET_C('H', krh.lighter(120));
+
+    QColor gpst("#FF5082");
+    SET_C('G', gpst);
+    SET_C('P', gpst.darker(120));
+    SET_C('S', gpst.lighter(120));
+    SET_C('T', gpst.lighter(150));
+
+    QColor fwy("#3DF490");
+    SET_C('F', fwy);
+    SET_C('W', fwy.darker(120));
+    SET_C('Y', fwy.lighter(120));
+
+    QColor ilm("#00ABED");
+    SET_C('I', ilm);
+    SET_C('L', ilm.darker(120));
+    SET_C('M', ilm.lighter(120));
+
+    //fix some color overlaps:
+    //e looks like q by default
+    SET_C('E', "#C0BDBB"); //gray
+    SET_C('X', "#FCFCFC");
+}
+
+void addUgeneNucleotide(QVector<QColor> &colorsPerChar) {
+    Q_UNUSED(colorsPerChar);
+
+    SET_C('A', "#FCFF92"); // yellow
+    SET_C('C', "#70F970"); // green
+    SET_C('T', "#FF99B1"); // light red
+    SET_C('G', "#4EADE1"); // light blue
+    SET_C('U', colorsPerChar['T'].lighter(120));
+    SET_C('N', "#FCFCFC");
+}
+
+void addZappoAmino(QVector<QColor> &colorsPerChar) {
+    Q_UNUSED(colorsPerChar);
+
+    //Aliphatic/hydrophobic:    ILVAM       #ffafaf
+    SET_C('I', "#ffafaf");
+    SET_C('L', "#ffafaf");
+    SET_C('V', "#ffafaf");
+    SET_C('A', "#ffafaf");
+    SET_C('M', "#ffafaf");
+
+    //Aromatic:  FWY         #ffc800
+    SET_C('F', "#ffc800");
+    SET_C('W', "#ffc800");
+    SET_C('Y', "#ffc800");
+
+    //Positive   KRH         #6464ff
+    SET_C('K', "#6464ff");
+    SET_C('R', "#6464ff");
+    SET_C('H', "#6464ff");
+
+    //Negative   DE          #ff0000
+    SET_C('D', "#ff0000");
+    SET_C('E', "#ff0000");
+
+    //Hydrophil  STNQ        #00ff00
+    SET_C('S', "#00ff00");
+    SET_C('T', "#00ff00");
+    SET_C('N', "#00ff00");
+    SET_C('Q', "#00ff00");
+
+    //conformat  PG          #ff00ff
+    SET_C('P', "#ff00ff");
+    SET_C('G', "#ff00ff");
+
+    //Cysteine   C           #ffff00
+    SET_C('C', "#ffff00");
+}
+
+void addTailorAmino(QVector<QColor> &colorsPerChar) {
+    Q_UNUSED(colorsPerChar);
+
+    SET_C('A', "#ccff00");
+    SET_C('V', "#99ff00");
+    SET_C('I', "#66ff00");
+    SET_C('L', "#33ff00");
+    SET_C('M', "#00ff00");
+    SET_C('F', "#00ff66");
+    SET_C('Y', "#00ffcc");
+    SET_C('W', "#00ccff");
+    SET_C('H', "#0066ff");
+    SET_C('R', "#0000ff");
+    SET_C('K', "#6600ff");
+    SET_C('N', "#cc00ff");
+    SET_C('Q', "#ff00cc");
+    SET_C('E', "#ff0066");
+    SET_C('D', "#ff0000");
+    SET_C('S', "#ff3300");
+    SET_C('T', "#ff6600");
+    SET_C('G', "#ff9900");
+    SET_C('P', "#ffcc00");
+    SET_C('C', "#ffff00");
+}
+
+void addHydroAmino(QVector<QColor> &colorsPerChar) {
+    Q_UNUSED(colorsPerChar);
+
+//The most hydrophobic residues according to this table are colored red and the most hydrophilic ones are colored blue.
+    SET_C('I', "#ff0000");
+    SET_C('V', "#f60009");
+    SET_C('L', "#ea0015");
+    SET_C('F', "#cb0034");
+    SET_C('C', "#c2003d");
+    SET_C('M', "#b0004f");
+    SET_C('A', "#ad0052");
+    SET_C('G', "#6a0095");
+    SET_C('X', "#680097");
+    SET_C('T', "#61009e");
+    SET_C('S', "#5e00a1");
+    SET_C('W', "#5b00a4");
+    SET_C('Y', "#4f00b0");
+    SET_C('P', "#4600b9");
+    SET_C('H', "#1500ea");
+    SET_C('E', "#0c00f3");
+    SET_C('Z', "#0c00f3");
+    SET_C('Q', "#0c00f3");
+    SET_C('D', "#0c00f3");
+    SET_C('B', "#0c00f3");
+    SET_C('N', "#0c00f3");
+    SET_C('K', "#0000ff");
+    SET_C('R', "#0000ff");
+}
+
+void addHelixAmino(QVector<QColor> &colorsPerChar) {
+    Q_UNUSED(colorsPerChar);
+
+    SET_C('E', "#ff00ff");
+    SET_C('M', "#ef10ef");
+    SET_C('A', "#e718e7");
+    SET_C('Z', "#c936c9");
+    SET_C('L', "#ae51ae");
+    SET_C('K', "#a05fa0");
+    SET_C('F', "#986798");
+    SET_C('Q', "#926d92");
+    SET_C('I', "#8a758a");
+    SET_C('W', "#8a758a");
+    SET_C('V', "#857a85");
+    SET_C('D', "#778877");
+    SET_C('X', "#758a75");
+    SET_C('H', "#758a75");
+    SET_C('R', "#6f906f");
+    SET_C('B', "#49b649");
+    SET_C('T', "#47b847");
+    SET_C('S', "#36c936");
+    SET_C('C', "#23dc23");
+    SET_C('Y', "#21de21");
+    SET_C('N', "#1be41b");
+    SET_C('G', "#00ff00");
+    SET_C('P', "#00ff00");
+}
+
+void addStrandAmino(QVector<QColor> &colorsPerChar) {
+    Q_UNUSED(colorsPerChar);
+
+    SET_C('V', "#ffff00");
+    SET_C('I', "#ecec13");
+    SET_C('Y', "#d3d32c");
+    SET_C('F', "#c2c23d");
+    SET_C('W', "#c0c03f");
+    SET_C('L', "#b2b24d");
+    SET_C('T', "#9d9d62");
+    SET_C('C', "#9d9d62");
+    SET_C('Q', "#8c8c73");
+    SET_C('M', "#82827d");
+    SET_C('X', "#797986");
+    SET_C('R', "#6b6b94");
+    SET_C('N', "#64649b");
+    SET_C('H', "#60609f");
+    SET_C('A', "#5858a7");
+    SET_C('S', "#4949b6");
+    SET_C('G', "#4949b6");
+    SET_C('Z', "#4747b8");
+    SET_C('K', "#4747b8");
+    SET_C('B', "#4343bc");
+    SET_C('P', "#2323dc");
+    SET_C('D', "#2121de");
+    SET_C('E', "#0000ff");
+}
+
+void addTurnAmino(QVector<QColor> &colorsPerChar) {
+    Q_UNUSED(colorsPerChar);
+
+    SET_C('N', "#ff0000");
+    SET_C('G', "#ff0000");
+    SET_C('P', "#f60909");
+    SET_C('B', "#f30c0c");
+    SET_C('D', "#e81717");
+    SET_C('S', "#e11e1e");
+    SET_C('C', "#a85757");
+    SET_C('Y', "#9d6262");
+    SET_C('K', "#7e8181");
+    SET_C('X', "#7c8383");
+    SET_C('Q', "#778888");
+    SET_C('W', "#738c8c");
+    SET_C('T', "#738c8c");
+    SET_C('R', "#708f8f");
+    SET_C('H', "#708f8f");
+    SET_C('Z', "#5ba4a4");
+    SET_C('E', "#3fc0c0");
+    SET_C('A', "#2cd3d3");
+    SET_C('F', "#1ee1e1");
+    SET_C('M', "#1ee1e1");
+    SET_C('L', "#1ce3e3");
+    SET_C('V', "#07f8f8");
+    SET_C('I', "#00ffff");
+}
+
+void addBuriedAmino(QVector<QColor> &colorsPerChar) {
+    Q_UNUSED(colorsPerChar);
+
+    SET_C('C', "#0000ff");
+    SET_C('I', "#0054ab");
+    SET_C('V', "#005fa0");
+    SET_C('L', "#007b84");
+    SET_C('F', "#008778");
+    SET_C('M', "#009768");
+    SET_C('G', "#009d62");
+    SET_C('A', "#00a35c");
+    SET_C('W', "#00a857");
+    SET_C('X', "#00b649");
+    SET_C('S', "#00d52a");
+    SET_C('H', "#00d52a");
+    SET_C('T', "#00db24");
+    SET_C('P', "#00e01f");
+    SET_C('Y', "#00e619");
+    SET_C('N', "#00eb14");
+    SET_C('B', "#00eb14");
+    SET_C('D', "#00eb14");
+    SET_C('Q', "#00f10e");
+    SET_C('Z', "#00f10e");
+    SET_C('E', "#00f10e");
+    SET_C('R', "#00fc03");
+    SET_C('K', "#00ff00");
+}
+
+void addJalviewNucleotide(QVector<QColor> &colorsPerChar) {
+    Q_UNUSED(colorsPerChar);
+
+    SET_C('A', "#64F73F");
+    SET_C('C', "#FFB340");
+    SET_C('G', "#EB413C");
+    SET_C('T', "#3C88EE");
+    SET_C('U', colorsPerChar['T'].lighter(105));
+}
+
+}
+
+void MsaColorSchemeRegistry::initBuiltInSchemes() {
+    QVector<QColor> colorsPerChar;
+
+    //nucleic
+    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::EMPTY_NUCL, tr("No colors"), DNAAlphabet_NUCL, colorsPerChar));
+
+    fillLightColorsColorScheme(colorsPerChar);
+    addUgeneNucleotide(colorsPerChar);
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::UGENE_NUCL, U2_APP_TITLE, DNAAlphabet_NUCL, colorsPerChar));
+
+    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
+    addJalviewNucleotide(colorsPerChar);
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::JALVIEW_NUCL, tr("Jalview"), DNAAlphabet_NUCL, 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));
+
+    //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));
+
+    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
+    addZappoAmino(colorsPerChar);
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::ZAPPO_AMINO, tr("Zappo"), DNAAlphabet_AMINO, colorsPerChar));
+
+    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
+    addTailorAmino(colorsPerChar);
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::TAILOR_AMINO, tr("Tailor"), DNAAlphabet_AMINO, colorsPerChar));
+
+    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
+    addHydroAmino(colorsPerChar);
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::HYDRO_AMINO, tr("Hydrophobicity"), DNAAlphabet_AMINO, colorsPerChar));
+
+    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
+    addHelixAmino(colorsPerChar);
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::HELIX_AMINO, tr("Helix propensity"), DNAAlphabet_AMINO, colorsPerChar));
+
+    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
+    addStrandAmino(colorsPerChar);
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::STRAND_AMINO, tr("Strand propensity"), DNAAlphabet_AMINO, colorsPerChar));
+
+    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
+    addTurnAmino(colorsPerChar);
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::TURN_AMINO, tr("Turn propensity"), DNAAlphabet_AMINO, colorsPerChar));
+
+    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
+    addBuriedAmino(colorsPerChar);
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::BURIED_AMINO, tr("Buried index"), DNAAlphabet_AMINO, 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 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));
+}
+
+void MsaColorSchemeRegistry::initCustomSchema(){
+    foreach (const ColorSchemeData &schema, ColorSchemeUtils::getSchemas()) {
+        addCustomScheme(schema);
+    }
+}
+
+ColorSchemeData::ColorSchemeData() :
+    type(DNAAlphabet_RAW),
+    defaultAlpType(false)
+{
+
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.h
new file mode 100644
index 0000000..1f2a406
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.h
@@ -0,0 +1,137 @@
+/**
+ * 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_MSA_COLOR_SCHEME_H_
+#define _U2_MSA_COLOR_SCHEME_H_
+
+#include <QColor>
+#include <U2Core/global.h>
+
+namespace U2 {
+
+class MAlignmentObject;
+class MsaColorSchemeCustomFactory;
+class MsaColorSchemeFactory;
+
+class U2ALGORITHM_EXPORT ColorSchemeData {
+public:
+    ColorSchemeData();
+
+    QString name;
+    DNAAlphabetType type;
+    bool defaultAlpType;
+    QMap<char, QColor> alpColors;
+};
+
+class U2ALGORITHM_EXPORT MsaColorScheme : public QObject {
+    Q_OBJECT
+public:
+    MsaColorScheme(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *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 UGENE_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;
+    static const QString HYDRO_AMINO;
+    static const QString HELIX_AMINO;
+    static const QString STRAND_AMINO;
+    static const QString TURN_AMINO;
+    static const QString BURIED_AMINO;
+    static const QString IDENTPERC_AMINO;
+    static const QString IDENTPERC_AMINO_GRAY;
+    static const QString CLUSTALX_AMINO;
+    static const QString CUSTOM_AMINO;
+
+    static const QString EMPTY_RAW;
+
+protected:
+    const MsaColorSchemeFactory * factory;
+    MAlignmentObject *      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;
+
+    const QString & getId() const;
+    const QString & getName() const;
+    DNAAlphabetType getAlphabetType() const;
+
+signals:
+    void si_factoryChanged();
+
+protected:
+    QString         id;
+    QString         name;
+    DNAAlphabetType alphabetType;
+};
+
+class U2ALGORITHM_EXPORT MsaColorSchemeRegistry : public QObject {
+    Q_OBJECT
+public:
+    MsaColorSchemeRegistry();
+    ~MsaColorSchemeRegistry();
+
+    const QList<MsaColorSchemeFactory *> & getMsaColorSchemes() const;
+    const QList<MsaColorSchemeCustomFactory *> &getCustomColorSchemes() const;
+
+    QList<MsaColorSchemeFactory *> getMsaColorSchemes(DNAAlphabetType alphabetType) const;
+    QList<MsaColorSchemeFactory *> getMsaCustomColorSchemes(DNAAlphabetType alphabetType) const;
+
+    MsaColorSchemeCustomFactory * getMsaCustomColorSchemeFactoryById(const QString &id) const;
+    MsaColorSchemeFactory * getMsaColorSchemeFactoryById(const QString &id) const;
+
+signals:
+    void si_customSettingsChanged();
+
+private slots:
+    void sl_onCustomSettingsChanged();
+
+private:
+    void addCustomScheme(const ColorSchemeData& scheme);
+    void addMsaColorSchemeFactory(MsaColorSchemeFactory *commonFactory);
+    void addMsaCustomColorSchemeFactory(MsaColorSchemeCustomFactory *customFactory);
+
+    void deleteOldCustomFactories();
+    void initBuiltInSchemes();
+    void initCustomSchema();
+
+    QList<MsaColorSchemeFactory *> colorers;
+    QList<MsaColorSchemeCustomFactory *> customColorers;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_COLOR_SCHEME_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.cpp
new file mode 100644
index 0000000..11f8f30
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.cpp
@@ -0,0 +1,264 @@
+/**
+ * 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 <U2Algorithm/MSAConsensusUtils.h>
+
+#include <U2Core/MAlignmentObject.h>
+
+#include "MsaColorSchemeClustalX.h"
+
+namespace U2 {
+
+MsaColorSchemeClustalX::MsaColorSchemeClustalX(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj)
+    : MsaColorScheme(parent, factory, maObj),
+      objVersion(1),
+      cacheVersion(0),
+      aliLen(maObj->getLength())
+{
+    colorByIdx[ClustalColor_BLUE]    = "#80a0f0";
+    colorByIdx[ClustalColor_RED]     = "#f01505";
+    colorByIdx[ClustalColor_GREEN]   = "#15c015";
+    colorByIdx[ClustalColor_PINK]    = "#f08080";
+    colorByIdx[ClustalColor_MAGENTA] = "#c048c0";
+    colorByIdx[ClustalColor_ORANGE]  = "#f09048";
+    colorByIdx[ClustalColor_CYAN]    = "#15a4a4";
+    colorByIdx[ClustalColor_YELLOW]  = "#c0c000";
+
+    connect(maObj, SIGNAL(si_alignmentChanged(const MAlignment &, const MAlignmentModInfo &)), SLOT(sl_alignmentChanged()));
+}
+
+QColor MsaColorSchemeClustalX::getColor(int seq, int pos, char) const {
+    if (cacheVersion != objVersion) {
+        updateCache();
+    }
+
+    int idx = getColorIdx(seq, pos);
+    assert(idx >=0 && idx < ClustalColor_NUM_COLORS);
+    return colorByIdx[idx];
+}
+
+void MsaColorSchemeClustalX::sl_alignmentChanged() {
+    objVersion++;
+}
+
+namespace {
+
+int basesContent(const int *freqs, const char *str, int len) {
+    int res = 0;
+    for (int i = 0; i < len; i++) {
+        uchar c = str[i];
+        res += freqs[c];
+    }
+    return res;
+}
+
+}
+
+void MsaColorSchemeClustalX::updateCache() const {
+    if (cacheVersion == objVersion) {
+        return;
+    }
+
+    // compute colors for whole ali
+    // use 4 bits per color
+    const MAlignment &ma = maObj->getMAlignment();
+    int nSeq = ma.getNumRows();
+    aliLen = maObj->getLength();
+    cacheVersion = objVersion;
+
+    bool stub = false;
+    int cacheSize = getCacheIdx(nSeq, aliLen, stub) + 1;
+    colorsCache.resize(cacheSize);
+
+    /*  source: http://ekhidna.biocenter.helsinki.fi/pfam2/clustal_colours
+
+        BLUE
+            (W,L,V,I,M,F):  {50%, P}{60%, WLVIMAFCYHP}
+            (A):            {50%, P}{60%, WLVIMAFCYHP}{85%, T,S,G}
+            (C):            {50%, P}{60%, WLVIMAFCYHP}{85%, S}
+        RED
+            (K,R):          {60%, KR}{85%, Q}
+        GREEN
+            (T):            {50%, TS}{60%, WLVIMAFCYHP}
+            (S):            {50%, TS}{80%, WLVIMAFCYHP}
+            (N):            {50%, N}{85%, D}
+            (Q):            {50%, QE}{60%, KR}
+        PINK
+            (C):            {85%, C}
+        MAGENTA
+            (D):            {50%, DE,N}
+            (E):            {50%, DE,QE}
+        ORANGE
+            (G):            {ALWAYS}
+        CYAN
+            (H,Y):          {50%, P}{60%, WLVIMAFCYHP}
+        YELLOW
+            (P):            {ALWAYS}
+
+        WARN: do not count gaps in percents!
+    */
+
+    QVector<int> freqsByChar(256);
+    const int *freqs = freqsByChar.data();
+
+    for (int pos = 0; pos < aliLen; pos++) {
+        int nonGapChars = 0;
+        MSAConsensusUtils::getColumnFreqs(ma, 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);
+            int colorIdx = ClustalColor_NO_COLOR;
+            switch(c) {
+            case 'W': //(W,L,V,I,M,F): {50%, P}{60%, WLVIMAFCYHP} -> BLUE
+            case 'L':
+            case 'V':
+            case 'I':
+            case 'M':
+            case 'F':
+                if (freqs['P'] > content50 || basesContent(freqs, "WLVIMAFCYHP", 11) > content60) {
+                    colorIdx = ClustalColor_BLUE;
+                }
+                break;
+            case 'A': // {50%, P}{60%, WLVIMAFCYHP}{85%, T,S,G} -> BLUE
+                if (freqs['P'] > content50 || basesContent(freqs, "WLVIMAFCYHP", 11) > content60) {
+                    colorIdx = ClustalColor_BLUE;
+                } else if (freqs['T'] > content85 || freqs['S'] > content85 || freqs['G'] > 85) {
+                    colorIdx = ClustalColor_BLUE;
+                }
+                break;
+
+            case 'K': //{60%, KR}{85%, Q} -> RED
+            case 'R':
+                if ((freqs['K'] + freqs['R'] > content60) || freqs['Q'] > content85) {
+                    colorIdx = ClustalColor_RED;
+                }
+                break;
+
+            case 'T': // {50%, TS}{60%, WLVIMAFCYHP} -> GREEN
+                if ((freqs['T'] + freqs['S'] > content50) || basesContent(freqs, "WLVIMAFCYHP", 11) > content60) {
+                    colorIdx = ClustalColor_GREEN;
+                }
+                break;
+
+            case 'S': // {50%, TS}{80%, WLVIMAFCYHP} -> GREEN
+                if ((freqs['T'] + freqs['S'] > content50) || basesContent(freqs, "WLVIMAFCYHP", 11) > content80) {
+                    colorIdx = ClustalColor_GREEN;
+                }
+                break;
+
+            case 'N': // {50%, N}{85%, D} -> GREEN
+                if (freqs['N'] > content50 || freqs['D'] > content85) {
+                    colorIdx = ClustalColor_GREEN;
+                }
+                break;
+
+            case 'Q': // {50%, QE}{60%, KR} -> GREEN
+                if ((freqs['Q'] + freqs['E']) > content50 || (freqs['K'] + freqs['R']) > content60) {
+                    colorIdx = ClustalColor_GREEN;
+                }
+                break;
+
+            case 'C': //{85%, C} -> PINK
+                //{50%, P}{60%, WLVIMAFCYHP}{85%, S} -> BLUE
+                if (freqs['C'] > content85) {
+                    colorIdx = ClustalColor_PINK;
+                } else if (freqs['P'] > content50 || basesContent(freqs, "WLVIMAFCYHP", 11) > content60 || freqs['S'] > content85) {
+                    colorIdx = ClustalColor_BLUE;
+                }
+                break;
+
+            case 'D': //{50%, DE,N} -> MAGENTA
+                if ((freqs['D'] + freqs['E']) > content50 || freqs['N'] > content50) {
+                    colorIdx = ClustalColor_MAGENTA;
+                }
+                break;
+            case 'E': //{50%, DE,QE} -> MAGENTA
+                if ((freqs['D'] + freqs['E']) > content50 || (freqs['Q'] + freqs['E']) > content50) {
+                    colorIdx = ClustalColor_MAGENTA;
+                }
+                break;
+            case 'G': //{ALWAYS} -> ORANGE
+                colorIdx = ClustalColor_ORANGE;
+                break;
+
+            case 'H': // {50%, P}{60%, WLVIMAFCYHP} -> CYAN
+            case 'Y':
+                if (freqs['P'] > content50 || basesContent(freqs, "WLVIMAFCYHP", 11) > content60) {
+                    colorIdx = ClustalColor_CYAN;
+                }
+                break;
+
+            case 'P': //{ALWAYS} -> YELLOW
+                colorIdx = ClustalColor_YELLOW;
+                break;
+            default:
+                break;
+
+            }
+            setColorIdx(seq, pos, colorIdx);
+        }
+    }
+}
+
+int MsaColorSchemeClustalX::getCacheIdx(int seq, int pos, bool &low) const {
+    assert(objVersion == cacheVersion);
+    int res = seq * aliLen + pos;
+    low = !(res & 0x1);
+    return res / 2;
+}
+
+int MsaColorSchemeClustalX::getColorIdx(int seq, int pos) const {
+    bool low = false;
+    int cacheIdx = getCacheIdx(seq, pos, low);
+    quint8 val = colorsCache[cacheIdx];
+    int colorIdx = low ? val & 0x0F : (val & 0xF0) >> 4;
+    assert(colorIdx >=0 && colorIdx < ClustalColor_NUM_COLORS);
+    return colorIdx;
+}
+
+void MsaColorSchemeClustalX::setColorIdx(int seq, int pos, int colorIdx) const {
+    assert(colorIdx >= 0 && colorIdx < ClustalColor_NUM_COLORS);
+    bool low = false;
+    int cacheIdx = getCacheIdx(seq, pos, low);
+    quint8 val = colorsCache[cacheIdx];
+    if (low) {
+        val = (val & 0xF0) | colorIdx;
+    } else {
+        val = (val & 0x0F) | (colorIdx << 4);
+    }
+    colorsCache[cacheIdx] = val;
+}
+
+MsaColorSchemeClustalXFactory::MsaColorSchemeClustalXFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
+    : MsaColorSchemeFactory(parent, id, name, alphabetType)
+{
+
+}
+
+MsaColorScheme * MsaColorSchemeClustalXFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+    return new MsaColorSchemeClustalX(parent, this, maObj);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.h
new file mode 100644
index 0000000..9874966
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.h
@@ -0,0 +1,80 @@
+/**
+ * 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_MSA_COLOR_SCHEME_CLUSTAL_X_H_
+#define _U2_MSA_COLOR_SCHEME_CLUSTAL_X_H_
+
+#include <QColor>
+#include <QVector>
+
+#include "MsaColorScheme.h"
+
+namespace U2 {
+
+// 0.5 * alisize mem use, slow update
+class U2ALGORITHM_EXPORT MsaColorSchemeClustalX : public MsaColorScheme {
+    Q_OBJECT
+public:
+    MsaColorSchemeClustalX(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj);
+
+    QColor getColor(int seq, int pos, char c) const;
+
+private slots:
+    void sl_alignmentChanged();
+
+private:
+    void updateCache() const;
+    int getCacheIdx(int seq, int pos, bool &low) const;
+
+    int getColorIdx(int seq, int pos) const;
+    void setColorIdx(int seq, int pos, int cidx) const;
+
+    enum ClustalColor {
+        ClustalColor_NO_COLOR,
+        ClustalColor_BLUE,
+        ClustalColor_RED,
+        ClustalColor_GREEN,
+        ClustalColor_PINK,
+        ClustalColor_MAGENTA,
+        ClustalColor_ORANGE,
+        ClustalColor_CYAN,
+        ClustalColor_YELLOW,
+        ClustalColor_NUM_COLORS
+    };
+
+    int                     objVersion;
+    mutable int             cacheVersion;
+    mutable int             aliLen;
+    mutable QVector<quint8> colorsCache;
+    QColor                  colorByIdx[ClustalColor_NUM_COLORS];
+};
+
+class MsaColorSchemeClustalXFactory : public MsaColorSchemeFactory {
+    Q_OBJECT
+public:
+    MsaColorSchemeClustalXFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+
+    MsaColorScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_COLOR_SCHEME_CLUSTAL_X_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.cpp
new file mode 100644
index 0000000..e6989fc
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.cpp
@@ -0,0 +1,68 @@
+/**
+ * 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/U2SafePoints.h>
+
+#include "ColorSchemeUtils.h"
+#include "MsaColorSchemeCustom.h"
+#include "MsaColorSchemeStatic.h"
+
+namespace U2 {
+
+MsaColorSchemeCustomFactory::MsaColorSchemeCustomFactory(QObject *parent, const ColorSchemeData &scheme)
+    : MsaColorSchemeFactory(parent, scheme.name, scheme.name, scheme.type),
+      colorsPerChar(colorMapToColorVector(scheme.alpColors))
+{
+
+}
+
+MsaColorScheme * MsaColorSchemeCustomFactory::create(QObject *parent, MAlignmentObject *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 &= colorsPerChar == colorMapToColorVector(scheme.alpColors);
+    return result;
+}
+
+void MsaColorSchemeCustomFactory::setScheme(const ColorSchemeData &scheme) {
+    CHECK(!isEqualTo(scheme), );
+    name = scheme.name;
+    alphabetType = scheme.type;
+    colorsPerChar = colorMapToColorVector(scheme.alpColors);
+    emit si_factoryChanged();
+}
+
+QVector<QColor> MsaColorSchemeCustomFactory::colorMapToColorVector(const QMap<char, QColor> &map) {
+    QVector<QColor> colorsPerChar;
+    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
+    QMapIterator<char, QColor> it(map);
+    while (it.hasNext()) {
+        it.next();
+        colorsPerChar[it.key()] = colorsPerChar[it.key() + ('a'-'A')] = it.value();
+    }
+    return colorsPerChar;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.h
new file mode 100644
index 0000000..64fa8ff
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.h
@@ -0,0 +1,50 @@
+/**
+ * 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_MSA_COLOR_SCHEME_CUSTOM_H_
+#define _U2_MSA_COLOR_SCHEME_CUSTOM_H_
+
+#include <QColor>
+#include <QVector>
+
+#include "MsaColorScheme.h"
+
+namespace U2 {
+
+class U2ALGORITHM_EXPORT MsaColorSchemeCustomFactory : public MsaColorSchemeFactory {
+    Q_OBJECT
+public:
+    MsaColorSchemeCustomFactory(QObject *parent, const ColorSchemeData& scheme);
+
+    MsaColorScheme * create(QObject *p, MAlignmentObject *obj) const;
+    bool isEqualTo(const ColorSchemeData& scheme) const;
+
+    void setScheme(const ColorSchemeData& scheme);
+
+private:
+    static QVector<QColor> colorMapToColorVector(const QMap<char, QColor> &map);
+
+    QVector<QColor> colorsPerChar;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_COLOR_SCHEME_CUSTOM_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.cpp
new file mode 100644
index 0000000..79358b1
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.cpp
@@ -0,0 +1,44 @@
+/**
+ * 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 "MsaColorSchemePercentageIdententityGrayscale.h"
+
+namespace U2 {
+
+MsaColorSchemePercentageIdententityGrayscale::MsaColorSchemePercentageIdententityGrayscale(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj)
+    : MsaColorSchemePercentageIdentity(parent, factory, maObj)
+{
+    colorsByRange[0] = QColor("#646464");
+    colorsByRange[1] = QColor("#999999");
+    colorsByRange[2] = QColor("#CCCCCC");
+}
+
+MsaColorSchemePercentageIdententityGrayscaleFactory::MsaColorSchemePercentageIdententityGrayscaleFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
+    : MsaColorSchemeFactory(parent, id, name, alphabetType)
+{
+
+}
+
+MsaColorScheme * MsaColorSchemePercentageIdententityGrayscaleFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+    return new MsaColorSchemePercentageIdententityGrayscale(parent, this, maObj);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.h
new file mode 100644
index 0000000..27a53a3
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.h
@@ -0,0 +1,44 @@
+/**
+ * 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_MSA_COLOR_SCHEME_PERCENTAGE_IDENTENTITY_GRAYSCALE_H_
+#define _U2_MSA_COLOR_SCHEME_PERCENTAGE_IDENTENTITY_GRAYSCALE_H_
+
+#include "MsaColorSchemePercentageIdentity.h"
+
+namespace U2 {
+
+class U2ALGORITHM_EXPORT MsaColorSchemePercentageIdententityGrayscale : public MsaColorSchemePercentageIdentity {
+public:
+    MsaColorSchemePercentageIdententityGrayscale(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj);
+};
+
+class MsaColorSchemePercentageIdententityGrayscaleFactory : public MsaColorSchemeFactory {
+    Q_OBJECT
+public:
+    MsaColorSchemePercentageIdententityGrayscaleFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+
+    MsaColorScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_COLOR_SCHEME_PERCENTAGE_IDENTENTITY_GRAYSCALE_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.cpp
new file mode 100644
index 0000000..219c897
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.cpp
@@ -0,0 +1,94 @@
+/**
+ * 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 <QColor>
+
+#include <U2Algorithm/MSAConsensusUtils.h>
+
+#include <U2Core/MAlignment.h>
+#include <U2Core/MAlignmentObject.h>
+
+#include "MsaColorSchemePercentageIdentity.h"
+
+namespace U2 {
+
+MsaColorSchemePercentageIdentity::MsaColorSchemePercentageIdentity(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj)
+    : MsaColorScheme(parent, factory, maObj),
+      cacheVersion(0),
+      objVersion(1)
+{
+    mask4[0]=81;
+    mask4[1]=61;
+    mask4[2]=41;
+    mask4[3]=25;
+
+    colorsByRange[0] = QColor("#6464FF");
+    colorsByRange[1] = QColor("#9999FF");
+    colorsByRange[2] = QColor("#CCCCFF");
+    colorsByRange[3] = QColor();
+
+    connect(maObj, SIGNAL(si_alignmentChanged(const MAlignment &, const MAlignmentModInfo &)), SLOT(sl_alignmentChanged()));
+}
+
+QColor MsaColorSchemePercentageIdentity::getColor(int /*seq*/, int pos, char c) const {
+    updateCache();
+    if (c == MAlignment_GapChar) {
+        return QColor();
+    }
+    quint32 packedVal = indentCache[pos];
+    MSAConsensusUtils::unpackConsensusCharsFromInt(packedVal, tmpChars, tmpRanges);
+    for (int i=0; i < 4; i++) {
+        if (c == tmpChars[i]) {
+            int range = tmpRanges[i];
+            return colorsByRange[range];
+        }
+    }
+    return QColor();
+}
+
+void MsaColorSchemePercentageIdentity::sl_alignmentChanged() {
+    objVersion++;
+}
+
+void MsaColorSchemePercentageIdentity::updateCache() const {
+    if (cacheVersion == objVersion) {
+        return;
+    }
+    const MAlignment& ma = maObj->getMAlignment();
+    int aliLen = ma.getLength();
+    indentCache.resize(aliLen);
+    for (int i = 0; i < aliLen; i++) {
+        indentCache[i] = MSAConsensusUtils::packConsensusCharsToInt(ma, i, mask4, true);
+    }
+    cacheVersion = objVersion;
+}
+
+MsaColorSchemePercentageIdentityFactory::MsaColorSchemePercentageIdentityFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
+    : MsaColorSchemeFactory(parent, id, name, alphabetType)
+{
+
+}
+
+MsaColorScheme * MsaColorSchemePercentageIdentityFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+    return new MsaColorSchemePercentageIdentity(parent, this, maObj);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.h
new file mode 100644
index 0000000..90ca51c
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.h
@@ -0,0 +1,65 @@
+/**
+ * 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_MSA_COLOR_SCHEME_PERCENTAGE_IDENTITY_H_
+#define _U2_MSA_COLOR_SCHEME_PERCENTAGE_IDENTITY_H_
+
+#include <QColor>
+#include <QVector>
+
+#include "MsaColorScheme.h"
+
+namespace U2 {
+
+class U2ALGORITHM_EXPORT MsaColorSchemePercentageIdentity : public MsaColorScheme {
+    Q_OBJECT
+public:
+    MsaColorSchemePercentageIdentity(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj);
+
+    QColor getColor(int seq, int pos, char c) const;
+
+private slots:
+    void sl_alignmentChanged();
+
+protected:
+    void updateCache() const;
+
+    mutable QVector<quint32>    indentCache;
+    mutable int                 cacheVersion;
+    int                         objVersion;
+    QColor                      colorsByRange[4];
+    int                         mask4[4];
+    mutable char                tmpChars[4];
+    mutable int                 tmpRanges[4];
+};
+
+class MsaColorSchemePercentageIdentityFactory : public MsaColorSchemeFactory {
+    Q_OBJECT
+public:
+    MsaColorSchemePercentageIdentityFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+
+    MsaColorScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+};
+
+
+}   // namespace U2
+
+#endif // _U2_MSA_COLOR_SCHEME_PERCENTAGE_IDENTITY_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.cpp
new file mode 100644
index 0000000..5f5239d
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.cpp
@@ -0,0 +1,48 @@
+/**
+ * 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 "MsaColorSchemeStatic.h"
+
+namespace U2 {
+
+MsaColorSchemeStatic::MsaColorSchemeStatic(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj, const QVector<QColor> &colorsPerChar)
+    : MsaColorScheme(parent, factory, maObj),
+      colorsPerChar(colorsPerChar)
+{
+
+}
+
+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),
+      colorsPerChar(colorsPerChar)
+{
+
+}
+
+MsaColorScheme * MsaColorSchemeStaticFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+    return new MsaColorSchemeStatic(parent, this, maObj, colorsPerChar);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.h
new file mode 100644
index 0000000..d63023a
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.h
@@ -0,0 +1,56 @@
+/**
+ * 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_MSA_COLOR_SCHEME_STATIC_H_
+#define _U2_MSA_COLOR_SCHEME_STATIC_H_
+
+#include <QColor>
+#include <QVector>
+
+#include "MsaColorScheme.h"
+
+namespace U2 {
+
+class U2ALGORITHM_EXPORT MsaColorSchemeStatic : public MsaColorScheme {
+    Q_OBJECT
+public:
+    MsaColorSchemeStatic(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj, const QVector<QColor> &colorsPerChar);
+
+    QColor getColor(int seq, int pos, char c) const;
+
+private:
+    QVector<QColor> colorsPerChar;
+};
+
+class MsaColorSchemeStaticFactory : public MsaColorSchemeFactory {
+    Q_OBJECT
+public:
+    MsaColorSchemeStaticFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType, const QVector<QColor> &colorsPerChar);
+
+    MsaColorScheme * create(QObject* parent, MAlignmentObject * maObj) const;
+
+private:
+    QVector<QColor> colorsPerChar;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_COLOR_SCHEME_STATIC_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp
new file mode 100644
index 0000000..edd8679
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp
@@ -0,0 +1,164 @@
+/**
+ * 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 <QColor>
+
+#include "MsaHighlightingScheme.h"
+#include "MsaHighlightingSchemeAgreements.h"
+#include "MsaHighlightingSchemeConservation.h"
+#include "MsaHighlightingSchemeDisagreements.h"
+#include "MsaHighlightingSchemeGaps.h"
+#include "MsaHighlightingSchemeNoColors.h"
+#include "MsaHighlightingSchemeTransitions.h"
+#include "MsaHighlightingSchemeTransversions.h"
+
+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::THRESHOLD_PARAMETER_NAME           = "threshold";
+const QString MsaHighlightingScheme::LESS_THAN_THRESHOLD_PARAMETER_NAME = "less_than_threshold";
+
+MsaHighlightingScheme::MsaHighlightingScheme(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+    : QObject(parent),
+      factory(factory),
+      maObj(maObj),
+      useDots(false)
+{
+
+}
+
+void MsaHighlightingScheme::process(const char /*refChar*/, char &seqChar, QColor &/*color*/, bool &highlight, int /*refCharColumn*/, int /*refCharRow*/) const {
+    if (useDots && !highlight){
+        seqChar = '.';
+    }
+}
+
+const MsaHighlightingSchemeFactory * MsaHighlightingScheme::getFactory() const {
+    return factory;
+}
+
+void MsaHighlightingScheme::setUseDots(bool use) {
+    useDots = use;
+}
+
+bool MsaHighlightingScheme::getUseDots() const {
+    return useDots;
+}
+
+void MsaHighlightingScheme::applySettings(const QVariantMap &) {
+
+}
+
+QVariantMap MsaHighlightingScheme::getSettings() const {
+    return QVariantMap();
+}
+
+MsaHighlightingSchemeFactory::MsaHighlightingSchemeFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType, bool refFree, bool needThreshold)
+    : QObject(parent),
+      id(id),
+      name(name),
+      alphabetType(alphabetType),
+      refFree(refFree),
+      needThreshold(needThreshold)
+{
+
+}
+
+const QString & MsaHighlightingSchemeFactory::getId() const {
+    return id;
+}
+
+const QString & MsaHighlightingSchemeFactory::getName() const {
+    return name;
+}
+
+DNAAlphabetType MsaHighlightingSchemeFactory::getAlphabetType() const {
+    return alphabetType;
+}
+
+bool MsaHighlightingSchemeFactory::isRefFree() const {
+    return refFree;
+}
+
+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));
+
+    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));
+
+    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() {
+    qDeleteAll(schemes);
+}
+
+MsaHighlightingSchemeFactory * MsaHighlightingSchemeRegistry::getMsaHighlightingSchemeFactoryById(const QString& id) const {
+    foreach (MsaHighlightingSchemeFactory *factory, schemes) {
+        if (factory->getId() == id) {
+            return factory;
+        }
+    }
+    return NULL;
+}
+
+QList<MsaHighlightingSchemeFactory *> MsaHighlightingSchemeRegistry::getMsaHighlightingSchemes(DNAAlphabetType alphabetType) const {
+    QList<MsaHighlightingSchemeFactory *> res;
+    foreach (MsaHighlightingSchemeFactory *factory, schemes) {
+        if (factory->getAlphabetType() == alphabetType) {
+            res.append(factory);
+        }
+    }
+    return res;
+}
+
+}   // 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
new file mode 100644
index 0000000..edcc8c4
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.h
@@ -0,0 +1,109 @@
+/**
+ * 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_MSA_HIGHLIGHTING_SCHEME_H_
+#define _U2_MSA_HIGHLIGHTING_SCHEME_H_
+
+#include <U2Core/global.h>
+
+class QColor;
+
+namespace U2 {
+
+class MAlignmentObject;
+class MsaHighlightingSchemeFactory;
+
+class U2ALGORITHM_EXPORT MsaHighlightingScheme : public QObject {
+    Q_OBJECT
+public:
+    MsaHighlightingScheme(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+
+    virtual void process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const;
+    const MsaHighlightingSchemeFactory * getFactory() const;
+
+    void setUseDots(bool use);
+    bool getUseDots() const;
+
+    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 THRESHOLD_PARAMETER_NAME;
+    static const QString LESS_THAN_THRESHOLD_PARAMETER_NAME;
+
+protected:
+    const MsaHighlightingSchemeFactory *factory;
+    MAlignmentObject *maObj;
+    bool useDots;
+};
+
+class U2ALGORITHM_EXPORT MsaHighlightingSchemeFactory : public QObject {
+    Q_OBJECT
+public:
+    MsaHighlightingSchemeFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType,
+                                 bool refFree = false, bool needThreshold = false);
+
+    virtual MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const = 0;
+
+    const QString & getId() const;
+    const QString & getName() const;
+    DNAAlphabetType getAlphabetType() const;
+    bool isRefFree() const;
+    bool isNeedThreshold() const;
+
+private:
+    QString         id;
+    QString         name;
+    DNAAlphabetType alphabetType;
+    bool            refFree;
+    bool            needThreshold;
+};
+
+class U2ALGORITHM_EXPORT MsaHighlightingSchemeRegistry : public QObject {
+    Q_OBJECT
+public:
+    MsaHighlightingSchemeRegistry();
+    ~MsaHighlightingSchemeRegistry();
+
+    MsaHighlightingSchemeFactory * getMsaHighlightingSchemeFactoryById(const QString &id) const;
+    QList<MsaHighlightingSchemeFactory *> getMsaHighlightingSchemes(DNAAlphabetType alphabetType) const;
+
+private:
+    QList<MsaHighlightingSchemeFactory *> schemes;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_HIGHLIGHTING_SCHEME_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.cpp
new file mode 100644
index 0000000..f1967de
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.cpp
@@ -0,0 +1,52 @@
+/**
+ * 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 <QColor>
+
+#include "MsaHighlightingSchemeAgreements.h"
+
+namespace U2 {
+
+MsaHighlightingSchemeAgreements::MsaHighlightingSchemeAgreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+    : MsaHighlightingScheme(parent, factory, maObj)
+{
+
+}
+
+void MsaHighlightingSchemeAgreements::process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const {
+    highlight = (refChar == seqChar);
+    if (!highlight) {
+        color = QColor();
+    }
+    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)
+{
+
+}
+
+MsaHighlightingScheme * MsaHighlightingSchemeAgreementsFactory::create(QObject *parent, MAlignmentObject *maObj ) const {
+    return new MsaHighlightingSchemeAgreements(parent, this, maObj);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.h
new file mode 100644
index 0000000..8fa7444
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.h
@@ -0,0 +1,47 @@
+/**
+ * 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_MSA_HIGHLIGHTING_SCHEME_AGREEMENTS_H_
+#define _U2_MSA_HIGHLIGHTING_SCHEME_AGREEMENTS_H_
+
+#include "MsaHighlightingScheme.h"
+
+namespace U2 {
+
+class MsaHighlightingSchemeAgreements : public MsaHighlightingScheme{
+    Q_OBJECT
+public:
+    MsaHighlightingSchemeAgreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+
+    void process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const;
+};
+
+
+class U2ALGORITHM_EXPORT MsaHighlightingSchemeAgreementsFactory : public MsaHighlightingSchemeFactory {
+public:
+    MsaHighlightingSchemeAgreementsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+
+    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject * maObj) const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_HIGHLIGHTING_SCHEME_AGREEMENTS_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.cpp
new file mode 100644
index 0000000..3cd4d46
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.cpp
@@ -0,0 +1,101 @@
+/**
+ * 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/MAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "MsaHighlightingSchemeConservation.h"
+
+namespace U2 {
+
+MsaHighlightingSchemeConservation::MsaHighlightingSchemeConservation(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+    : MsaHighlightingScheme(parent, factory, maObj),
+      threshold(50),
+      lessThenThreshold(false)
+{
+    connect(maObj, SIGNAL(si_alignmentChanged(const MAlignment &, const MAlignmentModInfo &)), SLOT(sl_resetMap()));
+}
+
+void MsaHighlightingSchemeConservation::process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const {
+    if (!msaCharCountMap.contains(refCharColumn)) {
+        calculateStatisticForColumn(refCharColumn);
+    }
+
+    int neededThr = (int)((float)(threshold * maObj->getNumRows())/100.0 + 0.5);
+    if (lessThenThreshold) {
+        highlight = (msaCharCountMap[refCharColumn][seqChar] <= neededThr);
+    } else {
+        highlight = (msaCharCountMap[refCharColumn][seqChar] >= neededThr);
+    }
+    if (!highlight) {
+        color = QColor();
+    }
+    MsaHighlightingScheme::process(refChar, seqChar, color, highlight, refCharColumn, refCharRow);
+}
+
+void MsaHighlightingSchemeConservation::applySettings(const QVariantMap &settings){
+    QVariant thresholdQVar = settings.value(THRESHOLD_PARAMETER_NAME);
+    if (!thresholdQVar.isNull()) {
+        bool ok;
+        int  convertedThreshold = thresholdQVar.toInt(&ok);
+        CHECK(ok, );
+        threshold = convertedThreshold;
+    }
+    lessThenThreshold = settings.value(LESS_THAN_THRESHOLD_PARAMETER_NAME, lessThenThreshold).toBool();
+}
+
+QVariantMap MsaHighlightingSchemeConservation::getSettings() const {
+    QVariantMap settings;
+    settings.insert(THRESHOLD_PARAMETER_NAME, threshold);
+    settings.insert(LESS_THAN_THRESHOLD_PARAMETER_NAME, lessThenThreshold);
+    return settings;
+}
+
+void MsaHighlightingSchemeConservation::sl_resetMap() {
+    msaCharCountMap.clear();
+}
+
+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);
+        if (columnStatistic.contains(seqChar)) {
+            columnStatistic[seqChar] += 1;
+        } else {
+            columnStatistic[seqChar] = 1;
+        }
+    }
+    msaCharCountMap[refCharColumn] = columnStatistic;
+}
+
+MsaHighlightingSchemeConservationFactory::MsaHighlightingSchemeConservationFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
+    : MsaHighlightingSchemeFactory(parent, id, name, alphabetType, true, true)
+{
+
+}
+
+MsaHighlightingScheme * MsaHighlightingSchemeConservationFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+    return new MsaHighlightingSchemeConservation(parent, this, maObj);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.h
new file mode 100644
index 0000000..5126860
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.h
@@ -0,0 +1,60 @@
+/**
+ * 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_MSA_HIGHLIGHTING_SCHEME_CONSERVATION_H_
+#define _U2_MSA_HIGHLIGHTING_SCHEME_CONSERVATION_H_
+
+#include "MsaHighlightingScheme.h"
+
+namespace U2 {
+
+typedef QMap<char, int> CharCountMap;
+
+class MsaHighlightingSchemeConservation : public MsaHighlightingScheme {
+    Q_OBJECT
+public:
+    MsaHighlightingSchemeConservation(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+
+    void process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const;
+    void applySettings(const QVariantMap &settings);
+    QVariantMap getSettings() const;
+
+private slots:
+    void sl_resetMap();
+
+private:
+    void calculateStatisticForColumn(int refCharColumn) const;
+
+    mutable QMap<int, CharCountMap> msaCharCountMap;
+    int threshold;
+    bool lessThenThreshold;
+};
+
+class U2ALGORITHM_EXPORT MsaHighlightingSchemeConservationFactory : public MsaHighlightingSchemeFactory {
+public:
+    MsaHighlightingSchemeConservationFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+
+    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_HIGHLIGHTING_SCHEME_CONSERVATION_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.cpp
new file mode 100644
index 0000000..1c1ab52
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.cpp
@@ -0,0 +1,53 @@
+/**
+ * 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 <QColor>
+
+#include "MsaHighlightingSchemeDisagreements.h"
+
+namespace U2 {
+
+MsaHighlightingSchemeDisagreements::MsaHighlightingSchemeDisagreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+    : MsaHighlightingScheme(parent, factory, maObj)
+{
+
+}
+
+void MsaHighlightingSchemeDisagreements::process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const {
+    highlight = (refChar != seqChar);
+    if (!highlight) {
+        color = QColor();
+    }
+    MsaHighlightingScheme::process(refChar, seqChar, color, highlight, refCharColumn, refCharRow);
+}
+
+
+MsaHighlightingSchemeDisagreementsFactory::MsaHighlightingSchemeDisagreementsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
+    : MsaHighlightingSchemeFactory(parent, id, name, alphabetType)
+{
+
+}
+
+MsaHighlightingScheme * MsaHighlightingSchemeDisagreementsFactory::create(QObject *parent, MAlignmentObject *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
new file mode 100644
index 0000000..850457c
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.h
@@ -0,0 +1,46 @@
+/**
+ * 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_MSA_HIGHLIGHTING_SCHEME_DISAGREEMENTS_H_
+#define _U2_MSA_HIGHLIGHTING_SCHEME_DISAGREEMENTS_H_
+
+#include "MsaHighlightingScheme.h"
+
+namespace U2 {
+
+class MsaHighlightingSchemeDisagreements : public MsaHighlightingScheme{
+    Q_OBJECT
+public:
+    MsaHighlightingSchemeDisagreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *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);
+
+    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+};
+
+}   // nmaespace U2
+
+#endif // _U2_MSA_HIGHLIGHTING_SCHEME_DISAGREEMENTS_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.cpp
new file mode 100644
index 0000000..c506c15
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.cpp
@@ -0,0 +1,59 @@
+/**
+ * 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 <QColor>
+
+#include <U2Core/MAlignment.h>
+
+#include "MsaHighlightingSchemeGaps.h"
+
+namespace U2 {
+
+const QColor MsaHighlightingSchemeGaps::gapColor = QColor(192, 192, 192);
+
+MsaHighlightingSchemeGaps::MsaHighlightingSchemeGaps(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *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) {
+        color = gapColor;
+        highlight = true;
+    } else {
+        color = QColor();
+        highlight = false;
+    }
+    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)
+{
+
+}
+
+MsaHighlightingScheme * MsaHighlightingSchemeGapsFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+    return new MsaHighlightingSchemeGaps(parent, this, maObj);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.h
new file mode 100644
index 0000000..bf3671e
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.h
@@ -0,0 +1,48 @@
+/**
+ * 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_MSA_HIGHLIGHTING_SCHEME_GAPS_H_
+#define _U2_MSA_HIGHLIGHTING_SCHEME_GAPS_H_
+
+#include "MsaHighlightingScheme.h"
+
+namespace U2 {
+
+class MsaHighlightingSchemeGaps : public MsaHighlightingScheme {
+    Q_OBJECT
+public:
+    MsaHighlightingSchemeGaps(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+
+    void process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const;
+
+    static const QColor gapColor;
+};
+
+class U2ALGORITHM_EXPORT MsaHighlightingSchemeGapsFactory : public MsaHighlightingSchemeFactory {
+public:
+    MsaHighlightingSchemeGapsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+
+    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_HIGHLIGHTING_SCHEME_GAPS_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.cpp
new file mode 100644
index 0000000..93c67f6
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.cpp
@@ -0,0 +1,48 @@
+/**
+ * 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 "MsaHighlightingSchemeNoColors.h"
+
+namespace U2 {
+
+MsaHighlightingSchemeNoColors::MsaHighlightingSchemeNoColors(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+    : MsaHighlightingScheme(parent, factory, maObj)
+{
+
+}
+
+void MsaHighlightingSchemeNoColors::process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const {
+    highlight = true;
+    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)
+{
+
+}
+
+MsaHighlightingScheme * MsaHighlightingSchemeNoColorsFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+    return new MsaHighlightingSchemeNoColors(parent, this, maObj);
+}
+
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.h
new file mode 100644
index 0000000..d0f93b0
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.h
@@ -0,0 +1,46 @@
+/**
+ * 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_MSA_HIGHLIGHTING_SCHEME_NO_COLORS_H_
+#define _U2_MSA_HIGHLIGHTING_SCHEME_NO_COLORS_H_
+
+#include "MsaHighlightingScheme.h"
+
+namespace U2 {
+
+class MsaHighlightingSchemeNoColors : public MsaHighlightingScheme {
+    Q_OBJECT
+public:
+    MsaHighlightingSchemeNoColors(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *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);
+
+    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_HIGHLIGHTING_SCHEME_NO_COLORS_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.cpp
new file mode 100644
index 0000000..4f5a7be
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.cpp
@@ -0,0 +1,73 @@
+/**
+ * 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 <QColor>
+
+#include "MsaHighlightingSchemeTransitions.h"
+
+namespace U2 {
+
+MsaHighlightingSchemeTransitions::MsaHighlightingSchemeTransitions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+    : MsaHighlightingScheme(parent, factory, maObj)
+{
+
+}
+
+void MsaHighlightingSchemeTransitions::process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const {
+    switch (refChar) {
+    case 'N':
+        highlight = true;
+        break;
+    case 'A':
+        highlight = (seqChar == 'G');
+        break;
+    case 'C':
+        highlight = (seqChar == 'T');
+        break;
+    case 'G':
+        highlight = (seqChar == 'A');
+        break;
+    case 'T':
+        highlight = (seqChar == 'C');
+        break;
+    default:
+        highlight = false;
+        break;
+    }
+
+    if (!highlight) {
+        color = QColor();
+    }
+
+    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)
+{
+
+}
+
+MsaHighlightingScheme * MsaHighlightingSchemeTransitionsFactory::create(QObject *parent, MAlignmentObject *maObj ) const {
+    return new MsaHighlightingSchemeTransitions(parent, this, maObj);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.h
new file mode 100644
index 0000000..c2fad37
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.h
@@ -0,0 +1,46 @@
+/**
+ * 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_MSA_HIGHLIGHTING_SCHEME_TRANSITIONS_H_
+#define _U2_MSA_HIGHLIGHTING_SCHEME_TRANSITIONS_H_
+
+#include "MsaHighlightingScheme.h"
+
+namespace U2 {
+
+class MsaHighlightingSchemeTransitions : public MsaHighlightingScheme {
+    Q_OBJECT
+public:
+    MsaHighlightingSchemeTransitions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *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);
+
+    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_HIGHLIGHTING_SCHEME_TRANSITIONS_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.cpp
new file mode 100644
index 0000000..3e61fd3
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.cpp
@@ -0,0 +1,73 @@
+/**
+ * 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 <QColor>
+
+#include "MsaHighlightingSchemeTransversions.h"
+
+namespace U2 {
+
+MsaHighlightingSchemeTransversions::MsaHighlightingSchemeTransversions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+    : MsaHighlightingScheme(parent, factory, maObj)
+{
+
+}
+
+void MsaHighlightingSchemeTransversions::process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const {
+    switch (refChar) {
+    case 'N':
+        highlight = true;
+        break;
+    case 'A':
+        highlight = (seqChar == 'C' || seqChar == 'T');
+        break;
+    case 'C':
+        highlight = (seqChar == 'A' || seqChar == 'G');
+        break;
+    case 'G':
+        highlight = (seqChar == 'C' || seqChar == 'T');
+        break;
+    case 'T':
+        highlight = (seqChar == 'A' || seqChar == 'G');
+        break;
+    default:
+        highlight = false;
+        break;
+    }
+
+    if (!highlight) {
+        color = QColor();
+    }
+
+    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)
+{
+
+}
+
+MsaHighlightingScheme * MsaHighlightingSchemeTransversionsFactory::create(QObject *parent, MAlignmentObject *maObj ) const {
+    return new MsaHighlightingSchemeTransversions(parent, this, maObj);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.h
new file mode 100644
index 0000000..6674982
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.h
@@ -0,0 +1,47 @@
+/**
+ * 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_MSA_HIGHLIGHTING_SCHEME_TRANSVERSIONS_H_
+#define _U2_MSA_HIGHLIGHTING_SCHEME_TRANSVERSIONS_H_
+
+#include "MsaHighlightingScheme.h"
+
+namespace U2 {
+
+class MsaHighlightingSchemeTransversions : public MsaHighlightingScheme {
+    Q_OBJECT
+public:
+    MsaHighlightingSchemeTransversions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *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);
+
+    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+};
+
+
+}   // namespace U2
+
+#endif // _U2_MSA_HIGHLIGHTING_SCHEME_TRANSVERSIONS_H_
diff --git a/src/corelibs/U2Algorithm/transl/english.ts b/src/corelibs/U2Algorithm/transl/english.ts
index d30b951..799fb0a 100644
--- a/src/corelibs/U2Algorithm/transl/english.ts
+++ b/src/corelibs/U2Algorithm/transl/english.ts
@@ -247,68 +247,52 @@
 <context>
     <name>U2::MSAColorSchemeRegistry</name>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1011"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1026"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1067"/>
         <source>No colors</source>
-        <translation>No colors</translation>
+        <translation type="vanished">No colors</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1019"/>
         <source>Jalview</source>
-        <translation>Jalview</translation>
+        <translation type="vanished">Jalview</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1021"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1060"/>
         <source>Percentage Identity</source>
-        <translation>Percentage Identity</translation>
+        <translation type="vanished">Percentage Identity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1022"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1061"/>
         <source>Percentage Identity (gray)</source>
-        <translation>Percentage Identity (gray)</translation>
+        <translation type="vanished">Percentage Identity (gray)</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1034"/>
         <source>Zappo</source>
-        <translation>Zappo</translation>
+        <translation type="vanished">Zappo</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1038"/>
         <source>Tailor</source>
-        <translation>Tailor</translation>
+        <translation type="vanished">Tailor</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1042"/>
         <source>Hydrophobicity</source>
-        <translation>Hydrophobicity</translation>
+        <translation type="vanished">Hydrophobicity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1046"/>
         <source>Helix propensity</source>
-        <translation>Helix propensity</translation>
+        <translation type="vanished">Helix propensity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1050"/>
         <source>Strand propensity</source>
-        <translation>Strand propensity</translation>
+        <translation type="vanished">Strand propensity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1054"/>
         <source>Turn propensity</source>
-        <translation>Turn propensity</translation>
+        <translation type="vanished">Turn propensity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1058"/>
         <source>Buried index</source>
-        <translation>Buried index</translation>
+        <translation type="vanished">Buried index</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1063"/>
         <source>Clustal X</source>
-        <translation>Clustal X</translation>
+        <translation type="vanished">Clustal X</translation>
     </message>
 </context>
 <context>
@@ -423,46 +407,32 @@ For every column selects the most rare symbol in the whole alignment with percen
 <context>
     <name>U2::MSAHighlightingSchemeRegistry</name>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1074"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1075"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1076"/>
         <source>No highlighting</source>
-        <translation>No highlighting</translation>
+        <translation type="vanished">No highlighting</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1078"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1079"/>
         <source>Agreements</source>
-        <translation>Agreements</translation>
+        <translation type="vanished">Agreements</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1081"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1082"/>
         <source>Disagreements</source>
-        <translation>Disagreements</translation>
+        <translation type="vanished">Disagreements</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1084"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1085"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1086"/>
         <source>Gaps</source>
-        <translation>Gaps</translation>
+        <translation type="vanished">Gaps</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1088"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1089"/>
         <source>Conservation level</source>
-        <translation>Conservation level</translation>
+        <translation type="vanished">Conservation level</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1091"/>
         <source>Transitions</source>
-        <translation>Transitions</translation>
+        <translation type="vanished">Transitions</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1092"/>
         <source>Transversions</source>
-        <translation>Transversions</translation>
+        <translation type="vanished">Transversions</translation>
     </message>
 </context>
 <context>
@@ -474,6 +444,118 @@ For every column selects the most rare symbol in the whole alignment with percen
     </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"/>
+        <source>No colors</source>
+        <translation type="unfinished">No colors</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="504"/>
+        <source>Jalview</source>
+        <translation type="unfinished">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"/>
+        <source>Percentage Identity</source>
+        <translation type="unfinished">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"/>
+        <source>Percentage Identity (gray)</source>
+        <translation type="unfinished">Percentage Identity (gray)</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="519"/>
+        <source>Zappo</source>
+        <translation type="unfinished">Zappo</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="523"/>
+        <source>Tailor</source>
+        <translation type="unfinished">Tailor</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="527"/>
+        <source>Hydrophobicity</source>
+        <translation type="unfinished">Hydrophobicity</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="531"/>
+        <source>Helix propensity</source>
+        <translation type="unfinished">Helix propensity</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="535"/>
+        <source>Strand propensity</source>
+        <translation type="unfinished">Strand propensity</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="539"/>
+        <source>Turn propensity</source>
+        <translation type="unfinished">Turn propensity</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="543"/>
+        <source>Buried index</source>
+        <translation type="unfinished">Buried index</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="548"/>
+        <source>Clustal X</source>
+        <translation type="unfinished">Clustal X</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"/>
+        <source>No highlighting</source>
+        <translation type="unfinished">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"/>
+        <source>Agreements</source>
+        <translation type="unfinished">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"/>
+        <source>Disagreements</source>
+        <translation type="unfinished">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"/>
+        <source>Gaps</source>
+        <translation type="unfinished">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"/>
+        <source>Conservation level</source>
+        <translation type="unfinished">Conservation level</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="137"/>
+        <source>Transitions</source>
+        <translation type="unfinished">Transitions</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="138"/>
+        <source>Transversions</source>
+        <translation type="unfinished">Transversions</translation>
+    </message>
+</context>
+<context>
     <name>U2::ORFFindTask</name>
     <message>
         <location filename="../src/util_orf/ORFAlgorithmTask.cpp" line="31"/>
diff --git a/src/corelibs/U2Algorithm/transl/russian.ts b/src/corelibs/U2Algorithm/transl/russian.ts
index cbfa856..c01f07e 100644
--- a/src/corelibs/U2Algorithm/transl/russian.ts
+++ b/src/corelibs/U2Algorithm/transl/russian.ts
@@ -247,68 +247,52 @@
 <context>
     <name>U2::MSAColorSchemeRegistry</name>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1011"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1026"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1067"/>
         <source>No colors</source>
-        <translation>Без цвета</translation>
+        <translation type="vanished">Без цвета</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1019"/>
         <source>Jalview</source>
-        <translation>Раскраска Jalview</translation>
+        <translation type="vanished">Раскраска Jalview</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1021"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1060"/>
         <source>Percentage Identity</source>
-        <translation>По процентному соотношению</translation>
+        <translation type="vanished">По процентному соотношению</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1022"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1061"/>
         <source>Percentage Identity (gray)</source>
-        <translation>По процентному соотношению (серый)</translation>
+        <translation type="vanished">По процентному соотношению (серый)</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1034"/>
         <source>Zappo</source>
-        <translation>Zappo</translation>
+        <translation type="vanished">Zappo</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1038"/>
         <source>Tailor</source>
-        <translation>Tailor</translation>
+        <translation type="vanished">Tailor</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1042"/>
         <source>Hydrophobicity</source>
-        <translation>Гидрофобность</translation>
+        <translation type="vanished">Гидрофобность</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1046"/>
         <source>Helix propensity</source>
-        <translation>Склонность к спиральности</translation>
+        <translation type="vanished">Склонность к спиральности</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1050"/>
         <source>Strand propensity</source>
-        <translation>Склонность к линейности</translation>
+        <translation type="vanished">Склонность к линейности</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1054"/>
         <source>Turn propensity</source>
-        <translation>Склонность к сворачиванию</translation>
+        <translation type="vanished">Склонность к сворачиванию</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1058"/>
         <source>Buried index</source>
-        <translation>Индекс</translation>
+        <translation type="vanished">Индекс</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1063"/>
         <source>Clustal X</source>
-        <translation>Clustal X</translation>
+        <translation type="vanished">Clustal X</translation>
     </message>
 </context>
 <context>
@@ -425,46 +409,32 @@ For every column selects the most rare symbol in the whole alignment with percen
 <context>
     <name>U2::MSAHighlightingSchemeRegistry</name>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1074"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1075"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1076"/>
         <source>No highlighting</source>
-        <translation>Без выделения</translation>
+        <translation type="vanished">Без выделения</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1078"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1079"/>
         <source>Agreements</source>
-        <translation>Совпадающие нуклеотиды</translation>
+        <translation type="vanished">Совпадающие нуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1081"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1082"/>
         <source>Disagreements</source>
-        <translation>Различающиеся нуклеотиды</translation>
+        <translation type="vanished">Различающиеся нуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1084"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1085"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1086"/>
         <source>Gaps</source>
-        <translation>Пробелы</translation>
+        <translation type="vanished">Пробелы</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1088"/>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1089"/>
         <source>Conservation level</source>
-        <translation>Уровень сохранения</translation>
+        <translation type="vanished">Уровень сохранения</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1091"/>
         <source>Transitions</source>
-        <translation>Транзиции</translation>
+        <translation type="vanished">Транзиции</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MSAColorScheme.cpp" line="1092"/>
         <source>Transversions</source>
-        <translation>Трансверсии</translation>
+        <translation type="vanished">Трансверсии</translation>
     </message>
 </context>
 <context>
@@ -476,6 +446,118 @@ For every column selects the most rare symbol in the whole alignment with percen
     </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"/>
+        <source>No colors</source>
+        <translation type="unfinished">Без цвета</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="504"/>
+        <source>Jalview</source>
+        <translation type="unfinished">Раскраска 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"/>
+        <source>Percentage Identity</source>
+        <translation type="unfinished">По процентному соотношению</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"/>
+        <source>Percentage Identity (gray)</source>
+        <translation type="unfinished">По процентному соотношению (серый)</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="519"/>
+        <source>Zappo</source>
+        <translation type="unfinished">Zappo</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="523"/>
+        <source>Tailor</source>
+        <translation type="unfinished">Tailor</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="527"/>
+        <source>Hydrophobicity</source>
+        <translation type="unfinished">Гидрофобность</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="531"/>
+        <source>Helix propensity</source>
+        <translation type="unfinished">Склонность к спиральности</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="535"/>
+        <source>Strand propensity</source>
+        <translation type="unfinished">Склонность к линейности</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="539"/>
+        <source>Turn propensity</source>
+        <translation type="unfinished">Склонность к сворачиванию</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="543"/>
+        <source>Buried index</source>
+        <translation type="unfinished">Индекс</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="548"/>
+        <source>Clustal X</source>
+        <translation type="unfinished">Clustal X</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"/>
+        <source>No highlighting</source>
+        <translation type="unfinished">Без выделения</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"/>
+        <source>Agreements</source>
+        <translation type="unfinished">Совпадающие нуклеотиды</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"/>
+        <source>Disagreements</source>
+        <translation type="unfinished">Различающиеся нуклеотиды</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"/>
+        <source>Gaps</source>
+        <translation type="unfinished">Пробелы</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"/>
+        <source>Conservation level</source>
+        <translation type="unfinished">Уровень сохранения</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="137"/>
+        <source>Transitions</source>
+        <translation type="unfinished">Транзиции</translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="138"/>
+        <source>Transversions</source>
+        <translation type="unfinished">Трансверсии</translation>
+    </message>
+</context>
+<context>
     <name>U2::ORFFindTask</name>
     <message>
         <location filename="../src/util_orf/ORFAlgorithmTask.cpp" line="31"/>
diff --git a/src/corelibs/U2Core/CMakeLists.txt b/src/corelibs/U2Core/CMakeLists.txt
new file mode 100644
index 0000000..95cba93
--- /dev/null
+++ b/src/corelibs/U2Core/CMakeLists.txt
@@ -0,0 +1,33 @@
+cmake_minimum_required(VERSION 3.4)
+project(U2Core)
+
+set(CMAKE_AUTOMOC ON)
+
+if (APPLE)
+    find_package(Qt5 REQUIRED Core Gui Widgets Script Network Xml)
+else()
+    find_package(Qt5 REQUIRED Core Gui Widgets)
+endif ()
+
+add_definitions(
+        -DBUILDING_U2CORE_DLL
+        -DUGENE_MIN_VERSION_SQLITE=${UGENE_MIN_VERSION_SQLITE}
+        -DUGENE_MIN_VERSION_MYSQL=${UGENE_MIN_VERSION_MYSQL}
+)
+
+include_directories(src)
+include_directories(../../include)
+
+file(GLOB_RECURSE SRCS src/*.cpp)
+file(GLOB_RECURSE HDRS src/*.h)
+
+add_library(U2Core SHARED ${HDRS} ${SRCS})
+
+target_link_libraries(U2Core
+        proc
+        Qt5::Core Qt5::Gui Qt5::Widgets
+        ugenedb zlib)
+
+if (APPLE)
+    target_link_libraries(U2Core Qt5::Script Qt5::Network Qt5::Xml)
+endif ()
diff --git a/src/corelibs/U2Core/U2Core.pri b/src/corelibs/U2Core/U2Core.pri
index 218ee0a..8aa5b58 100644
--- a/src/corelibs/U2Core/U2Core.pri
+++ b/src/corelibs/U2Core/U2Core.pri
@@ -8,9 +8,11 @@ UGENE_RELATIVE_DESTDIR = ''
 QT += network xml
 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 
-DEFINES+= QT_FATAL_ASSERT BUILDING_U2CORE_DLL
+DEFINES+=UGENE_MIN_VERSION_SQLITE=$${UGENE_MIN_VERSION_SQLITE}
+DEFINES+=UGENE_MIN_VERSION_MYSQL=$${UGENE_MIN_VERSION_MYSQL}
+DEFINES+=QT_FATAL_ASSERT BUILDING_U2CORE_DLL
+
 use_bundled_zlib() {
-    INCLUDEPATH += ../../libs_3rdparty/zlib/src
     LIBS += -lzlib
 } else {
     LIBS += -lz
@@ -21,8 +23,6 @@ unix: QMAKE_CXXFLAGS += -Wno-char-subscripts
 LIBS += -L../../_release
 LIBS += -lugenedb
 
-INCLUDEPATH += ../../libs_3rdparty/sqlite3/src
-
 !debug_and_release|build_pass {
 
     CONFIG(debug, debug|release) {
@@ -63,5 +63,3 @@ unix_not_mac(){
         }
     }
 }
-
-HEADERS += ../../include/U2Core/U2*.h
diff --git a/src/corelibs/U2Core/U2Core.pro b/src/corelibs/U2Core/U2Core.pro
index eaeee23..ac7cb98 100644
--- a/src/corelibs/U2Core/U2Core.pro
+++ b/src/corelibs/U2Core/U2Core.pro
@@ -168,6 +168,8 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/tasks/BackgroundTaskRunner.h \
            src/tasks/CleanupFileStorageTask.h \
            src/tasks/CloneObjectTask.h \
+           src/tasks/CmdlineInOutTaskRunner.h \
+           src/tasks/CmdlineTaskRunner.h \
            src/tasks/ConnectSharedDatabaseTask.h \
            src/tasks/ConsoleShutdownTask.h \
            src/tasks/CopyDataTask.h \
@@ -220,6 +222,7 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/util/QObjectScopedPointer.h \
            src/util/QVariantUtils.h \
            src/util/SequenceUtils.h \
+           src/util/SyncHttp.h \
            src/util/TextUtils.h \
            src/util/TaskWatchdog.h \
            src/util/U1AnnotationUtils.h \
@@ -364,6 +367,8 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/tasks/BackgroundTaskRunner.cpp \
            src/tasks/CleanupFileStorageTask.cpp \
            src/tasks/CloneObjectTask.cpp \
+           src/tasks/CmdlineInOutTaskRunner.cpp \
+           src/tasks/CmdlineTaskRunner.cpp \
            src/tasks/ConnectSharedDatabaseTask.cpp \
            src/tasks/ConsoleShutdownTask.cpp \
            src/tasks/CopyDataTask.cpp \
@@ -413,6 +418,7 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/util/MSAUtils.cpp \
            src/util/QVariantUtils.cpp \
            src/util/SequenceUtils.cpp \
+           src/util/SyncHttp.cpp \
            src/util/TextUtils.cpp \
            src/util/TaskWatchdog.cpp \
            src/util/U1AnnotationUtils.cpp \
diff --git a/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.cpp b/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.cpp
index a08c8d5..be51f4e 100644
--- a/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.cpp
+++ b/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.cpp
@@ -28,6 +28,8 @@ namespace U2 {
 /***************************************************
  * CMDLineRegistry
  ***************************************************/
+const QString CMDLineRegistry::PLUGINS_ARG = "plugins";
+const QString CMDLineRegistry::VERIFY_ARG = "verify";
 
 const QString SINGLE_DASH   = "-";
 const QString DOUBLE_DASH   = "--";
diff --git a/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.h b/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.h
index c56a664..3024a84 100644
--- a/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.h
+++ b/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.h
@@ -41,6 +41,9 @@ class CMDLineHelpProvider;
 class U2CORE_EXPORT CMDLineRegistry : public QObject {
     Q_OBJECT
 public:
+    static const QString PLUGINS_ARG;
+    static const QString VERIFY_ARG;
+
     CMDLineRegistry(const QStringList& arguments);
     virtual ~CMDLineRegistry();
 
diff --git a/src/corelibs/U2Core/src/cmdline/CMDLineUtils.cpp b/src/corelibs/U2Core/src/cmdline/CMDLineUtils.cpp
index 9eaf405..f4f8fbd 100644
--- a/src/corelibs/U2Core/src/cmdline/CMDLineUtils.cpp
+++ b/src/corelibs/U2Core/src/cmdline/CMDLineUtils.cpp
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <QFile>
 #include <U2Core/AppContext.h>
 #include "CMDLineUtils.h"
 #include "CMDLineCoreOptions.h"
@@ -85,6 +86,35 @@ QStringList CMDLineRegistryUtils::getPureValues( int startWithIdx ) {
     return res;
 }
 
+namespace {
+    QStringList generateCandidatesWithExt(const QString &path) {
+        QStringList res;
+        res << path;
+        res << path + ".exe";
+        return res;
+    }
+
+    QStringList generateCandidates(const QString &prefix) {
+        QStringList res;
+        res << generateCandidatesWithExt(prefix + "/" + "ugene");
+        res << generateCandidatesWithExt(prefix + "/" + "ugened");
+        res << generateCandidatesWithExt(prefix + "/" + "ugenecl");
+        res << generateCandidatesWithExt(prefix + "/" + "ugenecld");
+        return res;
+    }
+}
+
+QString CMDLineRegistryUtils::getCmdlineUgenePath() {
+    QString executableDir = AppContext::getWorkingDirectoryPath();
+    QStringList candidates(generateCandidates(executableDir));
+    foreach(const QString & candidate, candidates) {
+        if (QFile::exists(candidate)) {
+            return candidate;
+        }
+    }
+    return "";
+}
+
 void CMDLineRegistryUtils::setCMDLineParams( QList<StringPair> & to ) {
     CMDLineRegistry * cmdlineRegistry = AppContext::getCMDLineRegistry();
     if( cmdlineRegistry != NULL ) {
diff --git a/src/corelibs/U2Core/src/cmdline/CMDLineUtils.h b/src/corelibs/U2Core/src/cmdline/CMDLineUtils.h
index ebf818d..aa41c0d 100644
--- a/src/corelibs/U2Core/src/cmdline/CMDLineUtils.h
+++ b/src/corelibs/U2Core/src/cmdline/CMDLineUtils.h
@@ -41,6 +41,8 @@ public:
     // search starts at startWithIdx, stops at first (paramKey, paramValue) pair
     // by default, search starts at 1 because at params[0] is usually ("", programName) pair
     static QStringList getPureValues( int startWithIdx = 1 );
+    // Returns the path to the UGENE command line executable
+    static QString getCmdlineUgenePath();
 
 private:
     static void setCMDLineParams( QList<StringPair> & to );
diff --git a/src/corelibs/U2Core/src/datatype/Annotation.cpp b/src/corelibs/U2Core/src/datatype/Annotation.cpp
index a003332..f0feb38 100644
--- a/src/corelibs/U2Core/src/datatype/Annotation.cpp
+++ b/src/corelibs/U2Core/src/datatype/Annotation.cpp
@@ -83,6 +83,20 @@ void Annotation::setName(const QString &name) {
     parentObject->emit_onAnnotationModified(md);
 }
 
+void Annotation::setType(U2FeatureType type) {
+    CHECK(type != data->type, );
+
+    U2OpStatusImpl os;
+    U2FeatureUtils::updateFeatureType(id, type, parentObject->getEntityRef().dbiRef, os);
+    SAFE_POINT_OP(os,);
+
+    data->type = type;
+
+    parentObject->setModified(true);
+    AnnotationModification md(AnnotationModification_TypeChanged, this);
+    parentObject->emit_onAnnotationModified(md);
+}
+
 bool Annotation::isOrder() const {
     return data->isOrder();
 }
diff --git a/src/corelibs/U2Core/src/datatype/Annotation.h b/src/corelibs/U2Core/src/datatype/Annotation.h
index dc40827..8f360b4 100644
--- a/src/corelibs/U2Core/src/datatype/Annotation.h
+++ b/src/corelibs/U2Core/src/datatype/Annotation.h
@@ -50,6 +50,8 @@ public:
 
     void                            setName(const QString &name);
 
+    void                            setType(U2FeatureType type);
+
     bool                            isOrder() const;
 
     bool                            isJoin() const;
diff --git a/src/corelibs/U2Core/src/datatype/AnnotationModification.h b/src/corelibs/U2Core/src/datatype/AnnotationModification.h
index ab8f4f8..307158b 100644
--- a/src/corelibs/U2Core/src/datatype/AnnotationModification.h
+++ b/src/corelibs/U2Core/src/datatype/AnnotationModification.h
@@ -32,7 +32,8 @@ enum AnnotationModificationType {
     AnnotationModification_AddedToGroup, // Emitted when annotation is added to a group.
                                          // Note that first time annotation added to the object it automatically
                                          // has a group assigned and this signal is not emitted
-    AnnotationModification_RemovedFromGroup
+    AnnotationModification_RemovedFromGroup,
+    AnnotationModification_TypeChanged
 };
 
 class U2CORE_EXPORT AnnotationModification {
diff --git a/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp b/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp
index e21eb1e..ca9c386 100644
--- a/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp
+++ b/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp
@@ -25,6 +25,7 @@
 #include <U2Core/L10n.h>
 #include <U2Core/Log.h>
 #include <U2Core/TextUtils.h>
+#include <U2Core/U2AlphabetUtils.h>
 #include <U2Core/U2SafePoints.h>
 
 #include "DNASequenceUtils.h"
@@ -100,7 +101,7 @@ QByteArray DNASequenceUtils::reverse(const QByteArray &sequence) {
 }
 
 QByteArray DNASequenceUtils::complement(const QByteArray &sequence) {
-    const DNAAlphabet *alphabet = AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
+    const DNAAlphabet *alphabet = U2AlphabetUtils::findBestAlphabet(sequence.data(), sequence.length());
     SAFE_POINT(NULL != alphabet, L10N::nullPointerError("DNA Alphabet"), "");
 
     DNATranslation *translator = AppContext::getDNATranslationRegistry()->lookupComplementTranslation(alphabet);
diff --git a/src/corelibs/U2Core/src/datatype/U2CoreAttributes.cpp b/src/corelibs/U2Core/src/datatype/U2CoreAttributes.cpp
index e3deb09..17dd65a 100644
--- a/src/corelibs/U2Core/src/datatype/U2CoreAttributes.cpp
+++ b/src/corelibs/U2Core/src/datatype/U2CoreAttributes.cpp
@@ -34,4 +34,12 @@ const QString U2BaseAttributeName::max_prow("max_prow_attribute");
 const QString U2BaseAttributeName::count_reads("count_reads_attribute");
 const QString U2BaseAttributeName::coverage_statistics("coverageStat");
 
+const QStringList U2BaseAttributeName::getReadsRelatedAttributes() {
+    QStringList result;
+    result.append(count_reads);
+    result.append(coverage_statistics);
+    result.append(max_prow);
+    return result;
+}
+
 } // U2
diff --git a/src/corelibs/U2Core/src/datatype/U2CoreAttributes.h b/src/corelibs/U2Core/src/datatype/U2CoreAttributes.h
index 9f629db..8b94759 100644
--- a/src/corelibs/U2Core/src/datatype/U2CoreAttributes.h
+++ b/src/corelibs/U2Core/src/datatype/U2CoreAttributes.h
@@ -83,6 +83,8 @@ public:
     /** Coverage statistics */
     static const QString coverage_statistics;
 
+    static const QStringList getReadsRelatedAttributes();
+
 };
 
 } // U2
diff --git a/src/corelibs/U2Core/src/datatype/U2FeatureType.cpp b/src/corelibs/U2Core/src/datatype/U2FeatureType.cpp
index b253448..a7b32c1 100644
--- a/src/corelibs/U2Core/src/datatype/U2FeatureType.cpp
+++ b/src/corelibs/U2Core/src/datatype/U2FeatureType.cpp
@@ -301,8 +301,8 @@ QList<U2FeatureTypes::U2FeatureTypeInfo> U2FeatureTypes::initFeatureTypes() {
     typeInfoIndexByType[Primer] = infoCounter++;
     featureTypeInfos << U2FeatureTypeInfo(PrimerBindingSite, "Primer Binding Site", Alphabet_Nucleic);
     typeInfoIndexByType[PrimerBindingSite] = infoCounter++;
-    featureTypeInfos << U2FeatureTypeInfo(PrimeryTranscript, "Primery Transcript", Alphabet_Nucleic);
-    typeInfoIndexByType[PrimeryTranscript] = infoCounter++;
+    featureTypeInfos << U2FeatureTypeInfo(PrimaryTranscript, "Primary Transcript", Alphabet_Nucleic);
+    typeInfoIndexByType[PrimaryTranscript] = infoCounter++;
     featureTypeInfos << U2FeatureTypeInfo(ProcessedActivePeptide, "Processed active peptide", Alphabet_Amino);
     typeInfoIndexByType[ProcessedActivePeptide] = infoCounter++;
     featureTypeInfos << U2FeatureTypeInfo(Promoter, "Promoter", Alphabet_Nucleic);
@@ -423,6 +423,8 @@ QList<U2FeatureTypes::U2FeatureTypeInfo> U2FeatureTypes::initFeatureTypes() {
     typeInfoIndexByType[ZincFinger] = infoCounter++;
     featureTypeInfos << U2FeatureTypeInfo(ZincFingerDomain, "Zinc Finger Domain", Alphabet_Nucleic);
     typeInfoIndexByType[ZincFingerDomain] = infoCounter++;
+    featureTypeInfos << U2FeatureTypeInfo(RestrictionSite, "Restriction Site", Alphabet_Nucleic);
+    typeInfoIndexByType[RestrictionSite] = infoCounter++;
 
     return featureTypeInfos;
 }
diff --git a/src/corelibs/U2Core/src/datatype/U2FeatureType.h b/src/corelibs/U2Core/src/datatype/U2FeatureType.h
index 18f93df..6215fd6 100644
--- a/src/corelibs/U2Core/src/datatype/U2FeatureType.h
+++ b/src/corelibs/U2Core/src/datatype/U2FeatureType.h
@@ -152,7 +152,7 @@ public:
         PrecursorRna                = 120,
         Primer                      = 121,
         PrimerBindingSite           = 122,
-        PrimeryTranscript           = 123,
+        PrimaryTranscript           = 123,
         ProcessedActivePeptide      = 124,
         Promoter                    = 125,
         PromoterEukaryotic          = 126,
@@ -213,8 +213,7 @@ public:
         Virion                      = 181,
         ZincFinger                  = 182,
         ZincFingerDomain            = 183,
-        FIRST_FEATURE_TYPE          = AaRich,
-        LAST_FEATURE_TYPE           = ZincFingerDomain
+        RestrictionSite             = 184
     };
 
     enum Alphabet {
diff --git a/src/corelibs/U2Core/src/dbi/U2AbstractDbi.h b/src/corelibs/U2Core/src/dbi/U2AbstractDbi.h
index 631b0b0..f0e1df0 100644
--- a/src/corelibs/U2Core/src/dbi/U2AbstractDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2AbstractDbi.h
@@ -135,6 +135,11 @@ public:
         U2DbiUtils::logNotSupported(U2DbiFeature_RemoveObjects, getRootDbi(), os);
     }
 
+    virtual U2DataId getObject(qint64 objectId, U2OpStatus& os) {
+        U2DbiUtils::logNotSupported(U2DbiFeature_RemoveObjects, getRootDbi(), os);
+        return U2DataId();
+    }
+
     virtual QHash<U2Object, QString> getObjectFolders(U2OpStatus &os) {
         U2DbiUtils::logNotSupported(U2DbiFeature_RemoveObjects, getRootDbi(), os);
         return QHash<U2Object, QString>();
diff --git a/src/corelibs/U2Core/src/dbi/U2ObjectDbi.h b/src/corelibs/U2Core/src/dbi/U2ObjectDbi.h
index b98e361..fa0d3e7 100644
--- a/src/corelibs/U2Core/src/dbi/U2ObjectDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2ObjectDbi.h
@@ -60,6 +60,11 @@ public:
     */
     virtual void getObject(U2Object& object, const U2DataId& id, U2OpStatus& os) = 0;
 
+    /**
+    Retrieves database object by objectId.
+    */
+    virtual U2DataId getObject(qint64 objectId, U2OpStatus& os) = 0;
+
     /** Lists database top-level objects, starts with 'offset' and limits by 'count'.
     The 'offset' and 'count' can be arbitrarily large but should not be negative. Also, 'count' can have special value 'DBI_NO_LIMIT'. */
     virtual QList<U2DataId> getObjects(qint64 offset, qint64 count, U2OpStatus& os) = 0;
diff --git a/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.cpp b/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.cpp
index 5b0b543..e88c472 100644
--- a/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.cpp
+++ b/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.cpp
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <sqlite3.h>
+#include <3rdparty/sqlite3/sqlite3.h>
 
 #include <U2Core/Log.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/corelibs/U2Core/src/dbi/U2SqlHelpers.cpp b/src/corelibs/U2Core/src/dbi/U2SqlHelpers.cpp
index 20b4564..bcdec38 100644
--- a/src/corelibs/U2Core/src/dbi/U2SqlHelpers.cpp
+++ b/src/corelibs/U2Core/src/dbi/U2SqlHelpers.cpp
@@ -25,7 +25,7 @@
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <sqlite3.h>
+#include <3rdparty/sqlite3/sqlite3.h>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/AppContext.h b/src/corelibs/U2Core/src/globals/AppContext.h
index 40524cf..37956be 100644
--- a/src/corelibs/U2Core/src/globals/AppContext.h
+++ b/src/corelibs/U2Core/src/globals/AppContext.h
@@ -53,8 +53,8 @@ class SmithWatermanTaskFactoryRegistry;
 class SWMulAlignResultNamesTagsRegistry;
 class MolecularSurfaceFactoryRegistry;
 class SWResultFilterRegistry;
-class MSAColorSchemeRegistry;
-class MSAHighlightingSchemeRegistry;
+class MsaColorSchemeRegistry;
+class MsaHighlightingSchemeRegistry;
 class SecStructPredictAlgRegistry;
 class CudaGpuRegistry;
 class OpenCLGpuRegistry;
@@ -160,9 +160,9 @@ public:
 
     static SWResultFilterRegistry* getSWResultFilterRegistry() {return getInstance()->_getSWResultFilterRegistry();}
 
-    static MSAColorSchemeRegistry* getMSAColorSchemeRegistry() { return getInstance()->_getMSAColorSchemeRegistry();}
+    static MsaColorSchemeRegistry* getMsaColorSchemeRegistry() { return getInstance()->_getMsaColorSchemeRegistry();}
 
-    static MSAHighlightingSchemeRegistry* getMSAHighlightingSchemeRegistry() { return getInstance()->_getMSAHighlightingSchemeRegistry();}
+    static MsaHighlightingSchemeRegistry* getMsaHighlightingSchemeRegistry() { return getInstance()->_getMsaHighlightingSchemeRegistry();}
 
     static SecStructPredictAlgRegistry* getSecStructPredictAlgRegistry() { return getInstance()->_getSecStructPredictAlgRegistry(); }
 
@@ -287,8 +287,8 @@ protected:
     virtual MolecularSurfaceFactoryRegistry* _getMolecularSurfaceFactoryRegistry()const = 0;
     virtual SWMulAlignResultNamesTagsRegistry * _getSWMulAlignResultNamesTagsRegistry() const = 0;
     virtual SWResultFilterRegistry*     _getSWResultFilterRegistry() const = 0;
-    virtual MSAColorSchemeRegistry*     _getMSAColorSchemeRegistry() const = 0;
-    virtual MSAHighlightingSchemeRegistry* _getMSAHighlightingSchemeRegistry() const = 0;
+    virtual MsaColorSchemeRegistry*     _getMsaColorSchemeRegistry() const = 0;
+    virtual MsaHighlightingSchemeRegistry* _getMsaHighlightingSchemeRegistry() const = 0;
     virtual SecStructPredictAlgRegistry* _getSecStructPredictAlgRegistry() const = 0;
     virtual CudaGpuRegistry *           _getCudaGpuRegistry() const = 0;
     virtual OpenCLGpuRegistry *          _getOpenCLGpuRegistry() const = 0;
diff --git a/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.cpp b/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.cpp
index 506a38c..a5381bc 100644
--- a/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.cpp
+++ b/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.cpp
@@ -33,14 +33,16 @@
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
+#include <U2View/ADVSequenceObjectContext.h>
+
 #include "AutoAnnotationsSupport.h"
 
 namespace U2 {
 
 const QString AutoAnnotationObject::AUTO_ANNOTATION_HINT( "auto-annotation object" );
 
-AutoAnnotationsUpdater::AutoAnnotationsUpdater( const QString &nm, const QString &gName, bool alwaysOff )
-    : groupName( gName ), name( nm ), alwaysOffByDefault(alwaysOff)
+AutoAnnotationsUpdater::AutoAnnotationsUpdater(const QString &nm, const QString &gName, bool alwaysOff, bool translationDependent)
+    : groupName(gName), name(nm), alwaysOffByDefault(alwaysOff), translationDependent(translationDependent)
 {
     checkedByDefault = alwaysOffByDefault ? false : AppContext::getSettings( )
         ->getValue( AUTO_ANNOTATION_SETTINGS + groupName, false, true ).toBool( );
@@ -50,7 +52,11 @@ AutoAnnotationsUpdater::~AutoAnnotationsUpdater( ) {
     AppContext::getSettings( )->setValue( AUTO_ANNOTATION_SETTINGS + groupName, checkedByDefault, true );
 }
 
-QList<AutoAnnotationsUpdater *> AutoAnnotationsSupport::getAutoAnnotationUpdaters( ) {
+bool AutoAnnotationsUpdater::isTranslationDependent() {
+    return translationDependent;
+}
+
+QList<AutoAnnotationsUpdater *> AutoAnnotationsSupport::getAutoAnnotationUpdaters() {
     return aaUpdaters;
 }
 
@@ -98,8 +104,8 @@ bool AutoAnnotationsSupport::isAutoAnnotation( const GObject* obj ) {
 
 //////////////////////////////////////////////////////////////////////////
 
-AutoAnnotationObject::AutoAnnotationObject( U2SequenceObject *obj, QObject *parent )
-    : QObject( parent ), dnaObj( obj )
+AutoAnnotationObject::AutoAnnotationObject(U2SequenceObject *obj, DNATranslation *aminoTT, QObject *parent)
+    : QObject(parent), dnaObj(obj), aminoTT(aminoTT)
 {
     QVariantMap hints;
     hints.insert(AUTO_ANNOTATION_HINT, true);
@@ -126,11 +132,22 @@ AutoAnnotationObject::~AutoAnnotationObject( ) {
     SAFE_POINT_OP( os, );
 }
 
-void AutoAnnotationObject::update( ) {
+void AutoAnnotationObject::updateAll( ) {
     QList<AutoAnnotationsUpdater *> aaUpdaters = aaSupport->getAutoAnnotationUpdaters( );
     handleUpdate( aaUpdaters );
 }
 
+void AutoAnnotationObject::updateTranslationDependent(DNATranslation *newAminoTT) {
+    aminoTT = newAminoTT;
+    QList<AutoAnnotationsUpdater *> aaUpdaters;
+    foreach(AutoAnnotationsUpdater *updater, aaSupport->getAutoAnnotationUpdaters()) {
+        if (updater->isTranslationDependent()) {
+            aaUpdaters.append(updater);
+        }
+    }
+    handleUpdate(aaUpdaters);
+}
+
 void AutoAnnotationObject::updateGroup( const QString &groupName ) {
     AutoAnnotationsUpdater *updater = aaSupport->findUpdaterByGroupName( groupName );
     if ( NULL != updater ) {
@@ -256,7 +273,11 @@ void AutoAnnotationObject::emitStateChange( bool started ) {
     }
 }
 
-AutoAnnotationConstraints::AutoAnnotationConstraints( )
+DNATranslation* AutoAnnotationObject::getAminoTT() const {
+    return aminoTT;
+}
+
+AutoAnnotationConstraints::AutoAnnotationConstraints()
     : alphabet( NULL ), hints( NULL )
 {
 
diff --git a/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.h b/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.h
index b36d517..81bfe97 100644
--- a/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.h
+++ b/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.h
@@ -30,6 +30,7 @@
 
 namespace U2 {
 
+class ADVSequenceObjectContext;
 class GObject;
 class GHints;
 class U2SequenceObject;
@@ -49,14 +50,16 @@ class U2CORE_EXPORT AutoAnnotationObject : public QObject
 {
     Q_OBJECT
 public:
-                                AutoAnnotationObject( U2SequenceObject *obj, QObject *parent );
-                                ~AutoAnnotationObject( );
+    AutoAnnotationObject(U2SequenceObject *obj, DNATranslation *aminoTT, QObject *parent);
+    ~AutoAnnotationObject();
     AnnotationTableObject *     getAnnotationObject( ) const { return aobj; }
     U2SequenceObject *          getSeqObject( ) const { return dnaObj; }
     void                        setGroupEnabled( const QString &groupName, bool enabled );
-    void                        update( );
+    void                        updateAll( );
+    void                        updateTranslationDependent(DNATranslation *newAminoTT);
     void                        updateGroup( const QString &groupName );
     void                        emitStateChange( bool started );
+    DNATranslation*             getAminoTT() const;
 
     static const QString        AUTO_ANNOTATION_HINT;
 
@@ -74,6 +77,7 @@ private:
     bool                        cancelRunningUpdateTasks(AutoAnnotationsUpdater *updater);
 
     U2SequenceObject *          dnaObj;
+    DNATranslation              *aminoTT;
     AnnotationTableObject *     aobj;
     AutoAnnotationsSupport *    aaSupport;
     QSet<QString>               enabledGroups;
@@ -94,11 +98,12 @@ struct U2CORE_EXPORT AutoAnnotationConstraints {
 class U2CORE_EXPORT AutoAnnotationsUpdater : public QObject {
     Q_OBJECT
 public:
-    AutoAnnotationsUpdater( const QString &nm, const QString &gName, bool offByDefault = false );
+    AutoAnnotationsUpdater(const QString &nm, const QString &gName, bool offByDefault = false, bool translationDependant = false);
     virtual             ~AutoAnnotationsUpdater( );
     const QString &     getGroupName( ) { return groupName; }
     const QString &     getName( ) { return name; }
     bool                isCheckedByDefault( ) { return checkedByDefault; }
+    bool                isTranslationDependent();
     void                setCheckedByDefault( bool checked )  { checkedByDefault = alwaysOffByDefault ? false : checked; }
     virtual bool        checkConstraints( const AutoAnnotationConstraints &constraints ) = 0;
     virtual Task *      createAutoAnnotationsUpdateTask( const AutoAnnotationObject *aa ) = 0;
@@ -108,6 +113,7 @@ private:
     QString             name;
     bool                checkedByDefault;
     bool                alwaysOffByDefault;
+    bool                translationDependent;
 };
 
 class U2CORE_EXPORT AutoAnnotationsSupport : public QObject {
diff --git a/src/corelibs/U2Core/src/globals/BaseDocumentFormats.cpp b/src/corelibs/U2Core/src/globals/BaseDocumentFormats.cpp
index 67dc01f..6a2289b 100644
--- a/src/corelibs/U2Core/src/globals/BaseDocumentFormats.cpp
+++ b/src/corelibs/U2Core/src/globals/BaseDocumentFormats.cpp
@@ -59,7 +59,7 @@ 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_SEQUENCE("Vector NTI sequence");
+const DocumentFormatId BaseDocumentFormats::VECTOR_NTI_SEQUENCE("vector_nti_sequence");
 
 DocumentFormat* BaseDocumentFormats::get(const DocumentFormatId& formatId) {
     return AppContext::getDocumentFormatRegistry()->getFormatById(formatId);
diff --git a/src/corelibs/U2Core/src/globals/ClipboardController.cpp b/src/corelibs/U2Core/src/globals/ClipboardController.cpp
index 92fd6d8..a0c69ee 100644
--- a/src/corelibs/U2Core/src/globals/ClipboardController.cpp
+++ b/src/corelibs/U2Core/src/globals/ClipboardController.cpp
@@ -38,6 +38,10 @@ PasteTask::PasteTask()
     :Task(tr("Paste data"), TaskFlag_None){
 }
 
+void PasteTask::processDocument(Document *) {
+
+}
+
 ///////////////////
 ///PasteUtils
 QList<DNASequence> PasteUtils::getSequences(const QList<Document*>& docs, U2OpStatus& os){
diff --git a/src/corelibs/U2Core/src/globals/ClipboardController.h b/src/corelibs/U2Core/src/globals/ClipboardController.h
index 7189778..6bc1b20 100644
--- a/src/corelibs/U2Core/src/globals/ClipboardController.h
+++ b/src/corelibs/U2Core/src/globals/ClipboardController.h
@@ -38,7 +38,7 @@ public:
     virtual QList<GUrl> getUrls() const = 0;
     virtual QList<Document*> getDocuments() const = 0;
 protected:
-   virtual void processDocument(Document* doc){}
+   virtual void processDocument(Document* doc);
 };
 
 class U2CORE_EXPORT PasteFactory : public QObject {
diff --git a/src/corelibs/U2Core/src/globals/Log.h b/src/corelibs/U2Core/src/globals/Log.h
index 58c6ea3..e8386a5 100644
--- a/src/corelibs/U2Core/src/globals/Log.h
+++ b/src/corelibs/U2Core/src/globals/Log.h
@@ -119,8 +119,6 @@ private:
 #define ULOG_CAT_CORE_SERVICES      "Core Services"
 // Log category for IO events
 #define ULOG_CAT_IO                 "Input/Output"
-// Log category for remote service messages
-#define ULOG_CAT_REMOTE_SERVICE     "Remote Service"
 // Log category for performance tracking
 #define ULOG_CAT_PERFORMANCE        "Performance"
 // Log category for scripting related logs
@@ -137,7 +135,6 @@ static Logger algoLog(ULOG_CAT_ALGORITHM);
 static Logger cmdLog(ULOG_CAT_CONSOLE);
 static Logger coreLog(ULOG_CAT_CORE_SERVICES);
 static Logger ioLog(ULOG_CAT_IO);
-static Logger rsLog(ULOG_CAT_REMOTE_SERVICE);
 static Logger perfLog(ULOG_CAT_PERFORMANCE);
 static Logger scriptLog(ULOG_CAT_SCRIPTS);
 static Logger taskLog(ULOG_CAT_TASKS);
diff --git a/src/corelibs/U2Core/src/globals/PluginModel.h b/src/corelibs/U2Core/src/globals/PluginModel.h
index 1fe3452..1406b24 100644
--- a/src/corelibs/U2Core/src/globals/PluginModel.h
+++ b/src/corelibs/U2Core/src/globals/PluginModel.h
@@ -40,7 +40,15 @@ class Task;
 #define U2_PLUGIN_INIT_FUNC ugene_plugin_init
 #define U2_PLUGIN_INIT_FUNC_NAME "ugene_plugin_init"
 
-typedef Plugin*(*PLUG_INIT_FUNC) ();
+#define U2_PLUGIN_VERIFY_FUNC ugene_plugin_verify
+#define U2_PLUGIN_VERIFY_NAME "ugene_plugin_verify"
+
+#define U2_PLUGIN_FAIL_MASSAGE_FUNC ugene_plugin_fail_message
+#define U2_PLUGIN_FAIL_MASSAGE_NAME "ugene_plugin_fail_message"
+
+typedef Plugin* (*PLUG_INIT_FUNC) ();
+typedef bool (*PLUG_VERIFY_FUNC) ();
+typedef QString * (*PLUG_FAIL_MESSAGE_FUNC) ();
 
 enum PluginState {
     PluginState_Loaded,
diff --git a/src/corelibs/U2Core/src/globals/Task.h b/src/corelibs/U2Core/src/globals/Task.h
index cd98e5b..db0041e 100644
--- a/src/corelibs/U2Core/src/globals/Task.h
+++ b/src/corelibs/U2Core/src/globals/Task.h
@@ -52,6 +52,8 @@ struct U2CORE_EXPORT TaskResourceUsage {
     int resourceUse;
     bool prepareStageLock;
     bool locked;
+    /* Leave it empty for default message */
+    QString errorMessage;
 };
 
 class TaskScheduler;
diff --git a/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp b/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp
index 7a73435..437cdf3 100644
--- a/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp
+++ b/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp
@@ -48,41 +48,39 @@ bool UserActionsWriter::eventFilter(QObject *obj, QEvent *event) {
     QMutexLocker locker(&guard);
     Q_UNUSED(locker);
 
-    k = dynamic_cast<QKeyEvent *>(event);
-    m = dynamic_cast<QMouseEvent *>(event);
-
-    appendDialogInfo();
-
-    if (NULL != m &&
-            (event->type() == QEvent::MouseButtonPress ||
-             event->type() == QEvent::MouseButtonRelease ||
-             event->type() == QEvent::MouseButtonDblClick)) {
-        message.clear();
-        generateMouseMeassage();
+    if (event->type() == QEvent::MouseButtonPress ||
+         event->type() == QEvent::MouseButtonRelease ||
+         event->type() == QEvent::MouseButtonDblClick) {
+        QMouseEvent* m = dynamic_cast<QMouseEvent *>(event);
+        generateMouseMessage(m);
         return false;
-    } else if (NULL != k) {
-        message.clear();
-        generateKeyMessage();
+    } else if (event->type() == QEvent::KeyPress ||
+               event->type() == QEvent::KeyRelease) {
+        QKeyEvent* k = dynamic_cast<QKeyEvent *>(event);
+        generateKeyMessage(k);
         return false;
     } else {
         return QObject::eventFilter(obj, event);
     }
 }
 
-void UserActionsWriter::generateMouseMeassage(){
+void UserActionsWriter::generateMouseMessage(QMouseEvent* m){
     CHECK_EXT(m, userActLog.error(QString("MouseEvent is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
 
+    QString message("");
+    message.append(getDialogInfo());
+    message.prepend(typeMap.value(m->type()) + QString(" "));
     //button type
-    appendMouseButtonInfo();
+    message.append(getMouseButtonInfo(m));
 
     QMainWindow* mainWindow = AppContext::getMainWindow()->getQMainWindow();
     CHECK_EXT(mainWindow, userActLog.error(QString("Main window is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
 
     //window size info
     QPoint p = mainWindow->mapFromGlobal(mainWindow->geometry().bottomRight());
-    if (p != windowSize) {
-        windowSize = p;
-        userActLog.trace(QString("WINDOW SIZE: %1x%2").arg(windowSize.x()).arg(windowSize.y()));
+    if (p != prevWindowSize) {
+        prevWindowSize = p;
+        userActLog.trace(QString("WINDOW SIZE: %1x%2").arg(prevWindowSize.x()).arg(prevWindowSize.y()));
     }
 
     //coordinates
@@ -99,7 +97,7 @@ void UserActionsWriter::generateMouseMeassage(){
         if (className == "QWidget") {
             QWidget* parent = qobject_cast<QWidget*>(w->parent());
             if (parent) {
-                appendTreeWidgetInfo(parent);
+                message.append(getTreeWidgetInfo(m, parent));
                 w = parent;
             }
         } else {
@@ -108,35 +106,36 @@ void UserActionsWriter::generateMouseMeassage(){
         message.append(" ");
 
         //additional information
-        appendAdditionalWidgetInfo(w);
+        message.append(getAdditionalWidgetInfo(m, w));
 
     } else {
         message.append("Widget under corsor is NULL");
     }
-    filterMessages();
+    filterMouseMessages(message);
 }
 
-void UserActionsWriter::appendMouseButtonInfo(){
-    CHECK_EXT(m, userActLog.error(QString("MouseEvent is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
+QString UserActionsWriter::getMouseButtonInfo(QMouseEvent* m){
+    CHECK_EXT(m, userActLog.error(QString("MouseEvent is NULL %1:%2").arg(__FILE__).arg(__LINE__)), "");
     switch (m->button()) {
     case Qt::RightButton: {
-        message.append("Right_button ");
+        return QString("Right_button ");
         break;
     }
     case Qt::LeftButton: {
-        message.append("Left_button ");
+        return QString("Left_button ");
         break;
     }
     default: {
-       message.append("Other_button ");
+       return QString("Other_button ");
     }
     }
 }
 
-void UserActionsWriter::appendTreeWidgetInfo(QWidget *parent){
-    CHECK_EXT(m, userActLog.error(QString("MouseEvent is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
-    CHECK_EXT(parent, userActLog.error(QString("argument is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
+QString UserActionsWriter::getTreeWidgetInfo(QMouseEvent* m, QWidget *parent){
+    CHECK_EXT(m, userActLog.error(QString("MouseEvent is NULL %1:%2").arg(__FILE__).arg(__LINE__)), "");
+    CHECK_EXT(parent, userActLog.error(QString("Widget is NULL %1:%2").arg(__FILE__).arg(__LINE__)), "");
 
+    QString message("");
     message.append("CLASS_NAME: ").append(parent->metaObject()->className());
     QTreeWidget* tree = qobject_cast<QTreeWidget*>(parent);
     if (tree) {
@@ -153,15 +152,17 @@ void UserActionsWriter::appendTreeWidgetInfo(QWidget *parent){
             message.append(" LIST_ITEM: " + item->text());
         }
     }
+    return message;
 }
 
-void UserActionsWriter::appendAdditionalWidgetInfo(QWidget *w){
-    CHECK_EXT(m, userActLog.error(QString("MouseEvent is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
-    CHECK_EXT(w, userActLog.error(QString("argument is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
+QString UserActionsWriter::getAdditionalWidgetInfo(QMouseEvent* m, QWidget *w){
+    CHECK_EXT(m, userActLog.error(QString("MouseEvent is NULL %1:%2").arg(__FILE__).arg(__LINE__)), "");
+    CHECK_EXT(w, userActLog.error(QString("Widget is NULL %1:%2").arg(__FILE__).arg(__LINE__)), "");
 
-    QString text = getWidgetText(w);
+    QString text = getWidgetText(m, w);
     QString objectName = w->objectName();
     QString tooltip = w->toolTip();
+    QString message("");
 
     if (!text.isEmpty() && (text != "...")) {
         message.append("TEXT: " + text);
@@ -174,10 +175,12 @@ void UserActionsWriter::appendAdditionalWidgetInfo(QWidget *w){
     if (spin) {
         message.append(" " + spin->text());
     }
+    return message;
 }
 
-QString UserActionsWriter::getWidgetText(QWidget* w){
-    CHECK_EXT(w, userActLog.error(QString("argument is NULL %1:%2").arg(__FILE__).arg(__LINE__)), "Widget is NULL");
+QString UserActionsWriter::getWidgetText(QMouseEvent* m, QWidget* w){
+    CHECK_EXT(m, userActLog.error(QString("MouseEvent is NULL %1:%2").arg(__FILE__).arg(__LINE__)), "");
+    CHECK_EXT(w, userActLog.error(QString("Widget is NULL %1:%2").arg(__FILE__).arg(__LINE__)), "");
 
     QString text("");
 
@@ -215,13 +218,15 @@ QString UserActionsWriter::getWidgetText(QWidget* w){
     return text;
 }
 
-void UserActionsWriter::generateKeyMessage() {
+void UserActionsWriter::generateKeyMessage(QKeyEvent *k) {
     CHECK_EXT(NULL != k, userActLog.error(QString("key event is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
 
     QString text = k->text();
     QString s = keys.value(Qt::Key(k->key()));
 
-    appendModifiersInfo();
+    QString message("");
+    message.append(getDialogInfo());
+    message.append(getKeyModifiersInfo(k));
 
     if (!s.isEmpty()) {
         message.append(QString("%1").arg(s));
@@ -231,21 +236,11 @@ void UserActionsWriter::generateKeyMessage() {
         message.append(QString("Undefined key, code: %1").arg(k->key()));
     }
 
-    filterMessages();
+    filterKeyboardMessages(k, message);
 }
 
-void UserActionsWriter::filterMessages() {
-    if (NULL != m) {
-        filterMouseMessages();
-    } else if (NULL != k) {
-        filterKeyboardMessages();
-    }
-}
-
-void UserActionsWriter::filterMouseMessages() {
-    CHECK_EXT(NULL != m, userActLog.error(QString("mouse event is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
+void UserActionsWriter::filterMouseMessages(QString message) {
 
-    message.prepend(typeMap.value(m->type()) + QString(" "));
     if (message != prevMessage) {
         if (!buffer.isEmpty()) {
             userActLog.trace(QString("Typed string. Length=%1").arg(buffer.length()));
@@ -273,7 +268,7 @@ void UserActionsWriter::filterMouseMessages() {
     }
 }
 
-void UserActionsWriter::filterKeyboardMessages() {
+void UserActionsWriter::filterKeyboardMessages(QKeyEvent *k, QString message) {
     CHECK_EXT(NULL != k, userActLog.error(QString("key event is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
 
     message.prepend(typeMap.value(k->type()) + QString(" "));
@@ -315,7 +310,8 @@ void UserActionsWriter::filterKeyboardMessages() {
     }
 }
 
-void UserActionsWriter::appendDialogInfo() {
+QString UserActionsWriter::getDialogInfo() {
+    QString message("");
     QDialog *dialog = qobject_cast<QDialog *>(QApplication::activeModalWidget());
     if (NULL != dialog) {
         message.append(QString("DIALOG: \"%1\" ").arg(dialog->windowTitle()));
@@ -324,31 +320,33 @@ void UserActionsWriter::appendDialogInfo() {
             message.append("MESSAGEBOX_TEXT: ").append(messageBox->text()).append(" ");
         }
     }
+    return message;
 }
 
-void UserActionsWriter::appendModifiersInfo() {
-    CHECK_EXT(NULL != k, userActLog.error(QString("key event is NULL %1:%2").arg(__FILE__).arg(__LINE__)), );
+QString UserActionsWriter::getKeyModifiersInfo(QKeyEvent *k) {
+    CHECK_EXT(NULL != k, userActLog.error(QString("key event is NULL %1:%2").arg(__FILE__).arg(__LINE__)), "");
 
     Qt::KeyboardModifiers m = k->modifiers();
     if (m.testFlag(Qt::ShiftModifier) && k->key() != Qt::Key_Shift) {
-        message.append(QString("shift + "));
+        return QString("shift + ");
     }
     if (m.testFlag(Qt::AltModifier)&& k->key() != Qt::Key_Alt) {
-        message.append(QString("alt + "));
+        return QString("alt + ");
     }
     if (m.testFlag(Qt::ControlModifier) && k->key() != Qt::Key_Control) {
-        message.append(QString("ctrl + "));
+        return QString("ctrl + ");
     }
     if (m.testFlag(Qt::MetaModifier) && k->key() != Qt::Key_Meta) {
-        message.append(QString("meta + "));
+        return QString("meta + ");
     }
     if (m.testFlag(Qt::GroupSwitchModifier) && k->key() != Qt::Key_Mode_switch) {
-        message.append(QString("switch + "));
+        return QString("switch + ");
     }
+    return QString("");
 }
 
 UserActionsWriter::UserActionsWriter() {
-    windowSize = QPoint(0, 0);
+    prevWindowSize = QPoint(0, 0);
     counter = 0;
     buffer = "";
 
@@ -358,10 +356,6 @@ UserActionsWriter::UserActionsWriter() {
     typeMap.insert(QEvent::KeyPress, "press");
     typeMap.insert(QEvent::KeyRelease, "release");
 
-    modMap.insert(Qt::ShiftModifier, "Shift");
-    modMap.insert(Qt::ControlModifier, "Ctrl");
-    modMap.insert(Qt::AltModifier, "Alt");
-
     keys.insert(Qt::Key_Return, "enter");
     keys.insert(Qt::Key_Escape, "esc");
     keys.insert(Qt::Key_Tab, "tab");
diff --git a/src/corelibs/U2Core/src/globals/UserActionsWriter.h b/src/corelibs/U2Core/src/globals/UserActionsWriter.h
index 5ae3853..f40ce04 100644
--- a/src/corelibs/U2Core/src/globals/UserActionsWriter.h
+++ b/src/corelibs/U2Core/src/globals/UserActionsWriter.h
@@ -42,31 +42,26 @@ protected:
     bool eventFilter(QObject *obj, QEvent *event);
 
 private:
-    void generateMouseMeassage();
-    void appendTreeWidgetInfo(QWidget* parent);
-    void appendAdditionalWidgetInfo(QWidget* w);
-    void appendMouseButtonInfo();
-    QString getWidgetText(QWidget* w);
+    void generateMouseMessage(QMouseEvent* m);
+    QString getTreeWidgetInfo(QMouseEvent* m, QWidget* parent);
+    QString getAdditionalWidgetInfo(QMouseEvent* m, QWidget* w);
+    QString getMouseButtonInfo(QMouseEvent* m);
+    QString getWidgetText(QMouseEvent* m, QWidget* w);
 
-    void generateKeyMessage();
-    void appendModifiersInfo();
+    void generateKeyMessage(QKeyEvent *k);
+    QString getKeyModifiersInfo(QKeyEvent *k);
 
-    void appendDialogInfo();
-    void filterMessages();
-    void filterMouseMessages();
-    void filterKeyboardMessages();
+    QString getDialogInfo();
+    void filterMouseMessages(QString message);
+    void filterKeyboardMessages(QKeyEvent *k, QString message);
 
     QMutex guard;
     QMap<QEvent::Type, QString> typeMap;
-    QMap<Qt::KeyboardModifier, QString> modMap;
     QMap<Qt::Key, QString> keys;
-    QMouseEvent* m;
-    QKeyEvent* k;
-    QString message;
     QString prevMessage;
     QString buffer;
     int counter;
-    QPoint windowSize;
+    QPoint prevWindowSize;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Core/src/globals/UserApplicationsSettings.cpp b/src/corelibs/U2Core/src/globals/UserApplicationsSettings.cpp
index 3f032df..14da0e6 100644
--- a/src/corelibs/U2Core/src/globals/UserApplicationsSettings.cpp
+++ b/src/corelibs/U2Core/src/globals/UserApplicationsSettings.cpp
@@ -63,6 +63,8 @@ namespace U2 {
 #define WINDOW_LAYOUT  QString("tabbed_windows")
 #define RESET_SETTINGS_FLAG QString("reset_settings")
 #define FILE_STORAGE_DIR    QString("file_storage_dir")
+#define UPDATES_ENABLED     QString("check_updates")
+#define SKIP_UPDATE_PREFIX  QString("skip_update_")
 
 //TODO: create a special ENV header to keep all env-vars ugene depends
 #define UGENE_SKIP_TMP_DIR_CLEANUP "UGENE_SKIP_TMP_DIR_CLEANUP"
@@ -266,4 +268,20 @@ void UserAppsSettings::setFileStorageDir(const QString &newPath) {
     AppContext::getSettings()->setValue(SETTINGS_ROOT + FILE_STORAGE_DIR, newPath);
 }
 
+bool UserAppsSettings::updatesEnabled() const {
+    return AppContext::getSettings()->getValue(SETTINGS_ROOT + UPDATES_ENABLED, true).toBool();
+}
+
+void UserAppsSettings::setUpdatesEnabled(bool value) {
+    AppContext::getSettings()->setValue(SETTINGS_ROOT + UPDATES_ENABLED, value);
+}
+
+bool UserAppsSettings::isUpdateSkipped(const QString &versionString) const {
+    return AppContext::getSettings()->getValue(SETTINGS_ROOT + SKIP_UPDATE_PREFIX + versionString, false).toBool();
+}
+
+void UserAppsSettings::skipUpdate(const QString &versionString) {
+    AppContext::getSettings()->setValue(SETTINGS_ROOT + SKIP_UPDATE_PREFIX + versionString, true);
+}
+
 }//namespace
diff --git a/src/corelibs/U2Core/src/globals/UserApplicationsSettings.h b/src/corelibs/U2Core/src/globals/UserApplicationsSettings.h
index 23d9014..9ff818d 100644
--- a/src/corelibs/U2Core/src/globals/UserApplicationsSettings.h
+++ b/src/corelibs/U2Core/src/globals/UserApplicationsSettings.h
@@ -87,6 +87,12 @@ public:
     QString getFileStorageDir() const;
     void setFileStorageDir(const QString &newPath);
 
+    bool updatesEnabled() const;
+    void setUpdatesEnabled(bool value);
+
+    bool isUpdateSkipped(const QString &versionString) const;
+    void skipUpdate(const QString &versionString);
+
 signals:
     void si_temporaryPathChanged();
     void si_windowLayoutChanged();
diff --git a/src/corelibs/U2Core/src/globals/global.h b/src/corelibs/U2Core/src/globals/global.h
index ea384cc..13cc96b 100644
--- a/src/corelibs/U2Core/src/globals/global.h
+++ b/src/corelibs/U2Core/src/globals/global.h
@@ -43,6 +43,7 @@
 #define U2_ORGANIZATION_NAME    "Unipro"
 #define U2_USER_INI             "UGENE_USER_INI"
 #define U2_SYSTEM_INI           "UGENE_SYSTEM_INI"
+#define U2_PRINT_TO_FILE        "UGENE_PRINT_TO_FILE"
 
 #define U2_VFS_URL_PREFIX       "VFS"
 #define U2_VFS_FILE_SEPARATOR   "!@#$"
@@ -73,11 +74,6 @@
 #else
 #   define U2LANG_EXPORT Q_DECL_IMPORT
 #endif
-#ifdef BUILDING_U2REMOTE_DLL
-#   define U2REMOTE_EXPORT Q_DECL_EXPORT
-#else
-#   define U2REMOTE_EXPORT Q_DECL_IMPORT
-#endif
 #ifdef BUILDING_U2GUI_DLL
 #   define U2GUI_EXPORT Q_DECL_EXPORT
 #else
@@ -109,10 +105,12 @@
 //global
 #define GLOBAL_SETTINGS QString("global/")
 
-#define ENV_USE_CRASHHANDLER "USE_CRASH_HANDLER"
-#define ENV_TEST_CRASH_HANDLER "TEST_CRASH_HANDLER"
+#define ENV_USE_CRASH_HANDLER "UGENE_USE_CRASH_HANDLER"
+#define ENV_TEST_CRASH_HANDLER "UGENE_TEST_CRASH_HANDLER"
+#define ENV_SEND_CRASH_REPORTS "UGENE_SEND_CRASH_REPORTS"
 #define ENV_UGENE_DEV "UGENE_DEV"
 #define ENV_GUI_TEST "UGENE_GUI_TEST"
+#define ENV_USE_NATIVE_DIALOGS "UGENE_USE_NATIVE_DIALOGS"
 
 #ifdef __GNUC__
   #define ATTR_UNUSED __attribute__((unused))
diff --git a/src/corelibs/U2Core/src/gobjects/AssemblyObject.cpp b/src/corelibs/U2Core/src/gobjects/AssemblyObject.cpp
index 90f7444..f2fa5ba 100644
--- a/src/corelibs/U2Core/src/gobjects/AssemblyObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/AssemblyObject.cpp
@@ -25,6 +25,7 @@
 #include <U2Core/U2AssemblyDbi.h>
 #include <U2Core/U2AttributeDbi.h>
 #include <U2Core/U2AttributeUtils.h>
+#include <U2Core/U2CoreAttributes.h>
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/U2ObjectDbi.h>
 #include <U2Core/U2OpStatus.h>
@@ -77,7 +78,67 @@ private:
     qint64 chunkSize;
 };
 
-U2EntityRef AssemblyObject::dbi2dbiClone(const AssemblyObject *const srcObj, const U2DbiRef &dstDbiRef, U2OpStatus &os, const QVariantMap &hints) {
+void copyReadsUnrelatedAttributes(const U2DataId &srcObjId, const U2DataId &dstObjId, U2AttributeDbi *srcAttributeDbi, U2AttributeDbi *dstAttributeDbi, U2OpStatus &os) {
+    CHECK_EXT(NULL != srcAttributeDbi, os.setError("NULL source attribute dbi"), );
+    CHECK_EXT(NULL != dstAttributeDbi, os.setError("NULL destination attribute dbi"), );
+
+    U2Dbi *dstDbi = dstAttributeDbi->getRootDbi();
+    U2Dbi *srcDbi = srcAttributeDbi->getRootDbi();
+    CHECK_EXT(NULL != srcDbi, os.setError("NULL source root dbi"), );
+    CHECK_EXT(NULL != dstDbi, os.setError("NULL destination root dbi"), );
+
+    if (!dstDbi->getFeatures().contains(U2DbiFeature_WriteAttributes)) {
+        os.setError("Destination dbi does not support writing");
+        return;
+    }
+
+    const QStringList attributesNotToCopy = U2BaseAttributeName::getReadsRelatedAttributes();
+
+    QList<U2DataId> attrIds = srcAttributeDbi->getObjectAttributes(srcObjId, "", os);
+    CHECK_OP(os, );
+
+    foreach(const U2DataId &attrId, attrIds) {
+        U2DataType attrType = srcDbi->getEntityTypeById(attrId);
+        if (U2Type::AttributeInteger == attrType) {
+            U2IntegerAttribute attr = srcAttributeDbi->getIntegerAttribute(attrId, os);
+            CHECK_OP(os, );
+            if (attributesNotToCopy.contains(attr.name)) {
+                continue;
+            }
+            attr.objectId = dstObjId;
+            dstAttributeDbi->createIntegerAttribute(attr, os);
+        } else if (U2Type::AttributeReal == attrType) {
+            U2RealAttribute attr = srcAttributeDbi->getRealAttribute(attrId, os);
+            CHECK_OP(os, );
+            if (attributesNotToCopy.contains(attr.name)) {
+                continue;
+            }
+            attr.objectId = dstObjId;
+            dstAttributeDbi->createRealAttribute(attr, os);
+        } else if (U2Type::AttributeString == attrType) {
+            U2StringAttribute attr = srcAttributeDbi->getStringAttribute(attrId, os);
+            CHECK_OP(os, );
+            if (attributesNotToCopy.contains(attr.name)) {
+                continue;
+            }
+            attr.objectId = dstObjId;
+            dstAttributeDbi->createStringAttribute(attr, os);
+        } else if (U2Type::AttributeByteArray == attrType) {
+            U2ByteArrayAttribute attr = srcAttributeDbi->getByteArrayAttribute(attrId, os);
+            CHECK_OP(os, );
+            if (attributesNotToCopy.contains(attr.name)) {
+                continue;
+            }
+            attr.objectId = dstObjId;
+            dstAttributeDbi->createByteArrayAttribute(attr, os);
+        }
+        CHECK_OP(os, );
+    }
+}
+
+U2EntityRef AssemblyObject::dbi2dbiExtractRegion(const AssemblyObject *const srcObj, const U2DbiRef &dstDbiRef, U2OpStatus &os,
+    const U2Region &desiredRegion, const QVariantMap &hints)
+{
     U2DbiRef srcDbiRef = srcObj->getEntityRef().dbiRef;
     U2DataId srcObjId = srcObj->getEntityRef().entityId;
     const QString dstFolder = hints.value(DocumentFormat::DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
@@ -99,9 +160,9 @@ U2EntityRef AssemblyObject::dbi2dbiClone(const AssemblyObject *const srcObj, con
 
     // prepare reads
     CHECK_OP(os, U2EntityRef());
-    qint64 readsCount = srcAssemblyDbi->countReads(srcObjId, U2_REGION_MAX, os);
+    qint64 readsCount = srcAssemblyDbi->countReads(srcObjId, desiredRegion, os);
     CHECK_OP(os, U2EntityRef());
-    U2DbiIterator<U2AssemblyRead> *iter = srcAssemblyDbi->getReads(srcObjId, U2_REGION_MAX, os, true);
+    U2DbiIterator<U2AssemblyRead> *iter = srcAssemblyDbi->getReads(srcObjId, desiredRegion, os, true);
     QScopedPointer< U2DbiIterator<U2AssemblyRead> > iterPtr(iter);
     CHECK_OP(os, U2EntityRef());
     Q_UNUSED(iterPtr);
@@ -118,11 +179,22 @@ U2EntityRef AssemblyObject::dbi2dbiClone(const AssemblyObject *const srcObj, con
     // copy attributes
     U2AttributeDbi *srcAttributeDbi = srcCon.dbi->getAttributeDbi();
     U2AttributeDbi *dstAttributeDbi = dstCon.dbi->getAttributeDbi();
-    U2AttributeUtils::copyObjectAttributes(srcObjId, assembly.id, srcAttributeDbi, dstAttributeDbi, os);
+    if (desiredRegion == U2_REGION_MAX) {
+        U2AttributeUtils::copyObjectAttributes(srcObjId, assembly.id, srcAttributeDbi, dstAttributeDbi, os);
+    } else {
+        copyReadsUnrelatedAttributes(srcObjId, assembly.id, srcAttributeDbi, dstAttributeDbi, os);
+    }
     CHECK_OP(os, U2EntityRef());
 
     U2EntityRef dstEntityRef(dstDbiRef, assembly.id);
+
     return dstEntityRef;
 }
 
+U2EntityRef AssemblyObject::dbi2dbiClone(const AssemblyObject *const srcObj, const U2DbiRef &dstDbiRef, U2OpStatus &os, const QVariantMap &hints) {
+    return dbi2dbiExtractRegion(srcObj, dstDbiRef, os, U2_REGION_MAX, hints);
+}
+
+
+
 }//namespace
diff --git a/src/corelibs/U2Core/src/gobjects/AssemblyObject.h b/src/corelibs/U2Core/src/gobjects/AssemblyObject.h
index d570b96..9468c74 100644
--- a/src/corelibs/U2Core/src/gobjects/AssemblyObject.h
+++ b/src/corelibs/U2Core/src/gobjects/AssemblyObject.h
@@ -25,6 +25,7 @@
 #include <U2Core/GObject.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/U2Type.h>
+#include <U2Core/U2Region.h>
 
 namespace U2 {
 
@@ -36,6 +37,8 @@ public:
     GObject *clone(const U2DbiRef &dstDbiRef, U2OpStatus &os, const QVariantMap &hints = QVariantMap()) const;
 
     static U2EntityRef dbi2dbiClone(const AssemblyObject *const srcObj, const U2DbiRef &dstDbiRef, U2OpStatus &os, const QVariantMap &hints = QVariantMap());
+    static U2EntityRef dbi2dbiExtractRegion(const AssemblyObject *const srcObj, const U2DbiRef &dstDbiRef, U2OpStatus &os,
+        const U2Region &desiredRegion = U2_REGION_MAX, const QVariantMap &hints = QVariantMap());
 };
 
 }//namespace
diff --git a/src/corelibs/U2Core/src/io/ZlibAdapter.cpp b/src/corelibs/U2Core/src/io/ZlibAdapter.cpp
index 84f5e4a..361437f 100644
--- a/src/corelibs/U2Core/src/io/ZlibAdapter.cpp
+++ b/src/corelibs/U2Core/src/io/ZlibAdapter.cpp
@@ -25,12 +25,7 @@
 
 #include "ZlibAdapter.h"
 
-//using 3rd-party zlib (not included in ugene bundle) on *nix
-#if defined(Q_OS_UNIX)
-#include <zlib.h>
-#else
-#include "zlib.h"
-#endif
+#include <3rdparty/zlib/zlib.h>
 
 #include <assert.h>
 
diff --git a/src/corelibs/U2Core/src/models/DocumentModel.cpp b/src/corelibs/U2Core/src/models/DocumentModel.cpp
index 73c0fd7..4f06d55 100644
--- a/src/corelibs/U2Core/src/models/DocumentModel.cpp
+++ b/src/corelibs/U2Core/src/models/DocumentModel.cpp
@@ -164,6 +164,10 @@ bool DocumentFormat::checkConstraints(const DocumentFormatConstraints& c) const
         return false; // filtered by exclude flags
     }
 
+    if (c.formatsToExclude.contains(getFormatId())) {
+        return false; // format is explicetely excluded
+    }
+
     if (c.checkRawData && checkRawData(c.rawData).score < c.minDataCheckResult) {
         return false; //raw data is not matched
     }
diff --git a/src/corelibs/U2Core/src/models/DocumentModel.h b/src/corelibs/U2Core/src/models/DocumentModel.h
index cf3c744..5619ab2 100644
--- a/src/corelibs/U2Core/src/models/DocumentModel.h
+++ b/src/corelibs/U2Core/src/models/DocumentModel.h
@@ -111,6 +111,7 @@ typedef QFlags<DocumentFormatFlag> DocumentFormatFlags;
 #define DocumentReadingMode_SequenceAsSeparateHint          "sequences-separate-mode"
 #define DocumentReadingMode_MaxObjectsInDoc                 "max-objects-in-doc"
 #define DocumentReadingMode_DontMakeUniqueNames             "no-unique-names"
+#define DocumentReadingMode_LoadAsModified                  "load-as-modified"
 
 /** Set of hints that can be processed during document storing */
 #define DocumentWritingMode_SimpleNames                     "simple-names"
@@ -258,6 +259,7 @@ public:
         rawData.clear();
         minDataCheckResult = FormatDetection_VeryLowSimilarity;
         allowPartialTypeMapping = false;
+        formatsToExclude.clear();
     }
     void addFlagToSupport(DocumentFormatFlag f) {flagsToSupport |= f;}
     void addFlagToExclude(DocumentFormatFlag f) {flagsToExclude |= f;}
@@ -271,6 +273,7 @@ public:
     QByteArray              rawData;
     FormatDetectionScore    minDataCheckResult;
     bool                    allowPartialTypeMapping;
+    QSet<DocumentFormatId>  formatsToExclude;
 };
 
 class DocumentImportersRegistry;
diff --git a/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.cpp b/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.cpp
new file mode 100644
index 0000000..62d3422
--- /dev/null
+++ b/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.cpp
@@ -0,0 +1,128 @@
+/**
+* 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/DbiConnection.h>
+#include <U2Core/GObject.h>
+#include <U2Core/U2DbiUtils.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "CmdlineInOutTaskRunner.h"
+
+namespace U2 {
+
+const QString CmdlineInOutTaskRunner::IN_DB_ARG = "input-db";
+const QString CmdlineInOutTaskRunner::IN_ID_ARG = "input-id";
+const QString CmdlineInOutTaskRunner::OUT_DB_ARG = "output-db";
+
+CmdlineInOutTaskConfig::CmdlineInOutTaskConfig()
+: CmdlineTaskConfig(), emptyOutputPossible(false)
+{
+}
+
+namespace {
+    CmdlineTaskConfig prepareConfig(const CmdlineInOutTaskConfig &config) {
+        CmdlineTaskConfig result = config;
+
+        QStringList dbList;
+        QStringList idList;
+        foreach (GObject *object, config.inputObjects) {
+            U2EntityRef entityRef = object->getEntityRef();
+            dbList << CmdlineInOutTaskRunner::toString(entityRef.dbiRef);
+            idList << QString::number(U2DbiUtils::toDbiId(entityRef.entityId));
+        }
+
+        QString argString = "--%1=\"%2\"";
+        result.arguments << argString.arg(CmdlineInOutTaskRunner::IN_DB_ARG).arg(dbList.join(";"));
+        result.arguments << argString.arg(CmdlineInOutTaskRunner::IN_ID_ARG).arg(idList.join(";"));
+        result.arguments << argString.arg(CmdlineInOutTaskRunner::OUT_DB_ARG).arg(CmdlineInOutTaskRunner::toString(config.outDbiRef));
+        return result;
+    }
+}
+
+CmdlineInOutTaskRunner::CmdlineInOutTaskRunner(const CmdlineInOutTaskConfig &config)
+: CmdlineTaskRunner(prepareConfig(config)), config(config)
+{
+}
+
+Task::ReportResult CmdlineInOutTaskRunner::report() {
+    ReportResult result = CmdlineTaskRunner::report();
+    CHECK_OP(stateInfo, result);
+
+    if (ReportResult_Finished == result) {
+        if (outputObjects.isEmpty() && !config.emptyOutputPossible) {
+            setError(tr("An error occurred during the task. See the log for details."));
+        }
+    }
+    return result;
+}
+
+const QList<U2DataId> & CmdlineInOutTaskRunner::getOutputObjects() const {
+    return outputObjects;
+}
+
+QString CmdlineInOutTaskRunner::toString(const U2DbiRef &dbiRef) {
+    return dbiRef.dbiFactoryId + ">" + dbiRef.dbiId;
+}
+
+U2DbiRef CmdlineInOutTaskRunner::parseDbiRef(const QString &string, U2OpStatus &os) {
+    QStringList dbTokens = string.split(">");
+    if (1 == dbTokens.size()) {
+        return U2DbiRef(DEFAULT_DBI_ID, string);
+    }
+    if (2 != dbTokens.size()) {
+        os.setError(tr("Wrong database string: ") + string);
+        return U2DbiRef();
+    }
+    return U2DbiRef(dbTokens[0], dbTokens[1]);
+}
+
+U2DataId CmdlineInOutTaskRunner::parseDataId(const QString &string, const U2DbiRef &dbiRef, U2OpStatus &os) {
+    DbiConnection con(dbiRef, os);
+    CHECK_OP(os, U2DataId());
+    return con.dbi->getObjectDbi()->getObject(string.toLongLong(), os);
+}
+
+namespace {
+    const QString OUTPUT_OBJECT_TAG = "ugene-output-object-id=";
+}
+
+void CmdlineInOutTaskRunner::logOutputObject(const U2DataId &id) {
+    coreLog.info(OUTPUT_OBJECT_TAG + QString::number(U2DbiUtils::toDbiId(id)));
+}
+
+bool CmdlineInOutTaskRunner::isCommandLogLine(const QString &logLine) const {
+    return logLine.startsWith(OUTPUT_OBJECT_TAG);
+}
+
+bool CmdlineInOutTaskRunner::parseCommandLogWord(const QString &logWord) {
+    if (logWord.startsWith(OUTPUT_OBJECT_TAG)) {
+        QString idString = logWord.mid(OUTPUT_OBJECT_TAG.size());
+        U2DataId objectId = parseDataId(idString, config.outDbiRef, stateInfo);
+        CHECK_OP(stateInfo, true);
+        outputObjects << objectId;
+        return true;
+    }
+    return false;
+}
+
+} // U2
diff --git a/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.h b/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.h
new file mode 100644
index 0000000..79d3e37
--- /dev/null
+++ b/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.h
@@ -0,0 +1,71 @@
+/**
+ * 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_CMDLINE_IO_OUT_TASK_RUNNER_H_
+#define _U2_CMDLINE_IO_OUT_TASK_RUNNER_H_
+
+#include <U2Core/U2Type.h>
+#include <U2Core/CmdlineTaskRunner.h>
+
+namespace U2 {
+
+class GObject;
+
+class U2CORE_EXPORT CmdlineInOutTaskConfig : public CmdlineTaskConfig {
+public:
+    CmdlineInOutTaskConfig();
+
+    QList<GObject*>     inputObjects;
+    U2DbiRef            outDbiRef;
+    bool                emptyOutputPossible;
+};
+
+class U2CORE_EXPORT CmdlineInOutTaskRunner : public CmdlineTaskRunner {
+    Q_OBJECT
+public:
+    CmdlineInOutTaskRunner(const CmdlineInOutTaskConfig &config);
+
+    ReportResult report();
+
+    const QList<U2DataId> & getOutputObjects() const;
+
+    static QString toString(const U2DbiRef &dbiRef);
+    static U2DbiRef parseDbiRef(const QString &string, U2OpStatus &os);
+    static QString toString(const U2DataId &id);
+    static U2DataId parseDataId(const QString &string, const U2DbiRef &dbiRef, U2OpStatus &os);
+    static void logOutputObject(const U2DataId &id);
+    static const QString IN_DB_ARG;
+    static const QString IN_ID_ARG;
+    static const QString OUT_DB_ARG;
+
+private:
+    // CmdlineTaskRunner
+    bool isCommandLogLine(const QString &logLine) const;
+    bool parseCommandLogWord(const QString &logWord);
+
+private:
+    CmdlineInOutTaskConfig config;
+    QList<U2DataId> outputObjects;
+};
+
+} // U2
+
+#endif // _U2_CMDLINE_IO_OUT_TASK_RUNNER_H_
diff --git a/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.cpp b/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.cpp
new file mode 100644
index 0000000..96b057a
--- /dev/null
+++ b/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.cpp
@@ -0,0 +1,311 @@
+/**
+* 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 <QTextCodec>
+#include <QTimer>
+#include <U2Core/AppContext.h>
+#include <U2Core/CMDLineRegistry.h>
+#include <U2Core/CMDLineUtils.h>
+#include <U2Core/ExternalToolRunTask.h>
+#include <U2Core/Settings.h>
+#include <U2Core/U2SafePoints.h>
+
+#if (defined(Q_OS_WIN32) || defined(Q_OS_WINCE))
+#include <Windows.h>
+#endif
+
+#include "CmdlineTaskRunner.h"
+
+namespace U2 {
+
+
+CmdlineTaskConfig::CmdlineTaskConfig()
+: logLevel(LogLevel_DETAILS), withPluginList(false)
+{
+}
+
+/************************************************************************/
+/* CmdlineTaskRunner */
+/************************************************************************/
+namespace {
+    const QString OUTPUT_ERROR_ARG = "ugene-output-error";
+    const QString OUTPUT_PROGRESS_ARG = "ugene-output-progress-state";
+    const QString OUTPUT_PROGRESS_TAG = "task-progress=";
+    const QString ERROR_KEYWORD = "#%*ugene-finished-with-error#%*";
+
+    inline int getLogNameCandidate(const QString &line, QString &nameCandidate) {
+        if ("" == line) {
+            return -1;
+        }
+
+        if (!line.startsWith("[")) {
+            return -1;
+        }
+
+        // maybe, @line is "[time][loglevel] log"
+        int openPos = line.indexOf("[", 1); // 1 because it is needed to skip first [time] substring
+        if (-1 == openPos) {
+            return -1;
+        }
+        int closePos = line.indexOf("]", openPos);
+        if (-1 == closePos) {
+            return -1;
+        }
+        nameCandidate = line.mid(openPos + 1, closePos - openPos - 1);
+        return closePos;
+    }
+
+    QString getLogLevelName(LogLevel l) {
+        switch (l) {
+        case LogLevel_TRACE: return "TRACE";
+        case LogLevel_DETAILS: return "DETAILS";
+        case LogLevel_INFO: return "INFO";
+        case LogLevel_ERROR: return "ERROR";
+        default: assert(0);
+        }
+        return "";
+    }
+
+    bool containsPrefix(const QStringList &args, const QString &prefix) {
+        foreach(const QString &arg, args) {
+            if (arg.startsWith(prefix)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
+
+CmdlineTaskRunner::CmdlineTaskRunner(const CmdlineTaskConfig &config)
+: Task(tr("Run UGENE command line: %1").arg(config.command), TaskFlag_NoRun), config(config), process(NULL)
+{
+    tpm = Progress_Manual;
+}
+
+void CmdlineTaskRunner::prepare() {
+    QStringList args;
+    args << config.command;
+    args << "--log-no-task-progress";
+    args << QString("--%1").arg(OUTPUT_PROGRESS_ARG);
+    args << QString("--%1").arg(OUTPUT_ERROR_ARG);
+    args << QString("--ini-file=\"%1\"").arg(AppContext::getSettings()->fileName());
+    args << config.arguments;
+    if (config.withPluginList) {
+        args << QString("--%1=\"%2\"").arg(CMDLineRegistry::PLUGINS_ARG).arg(config.pluginList.join(";"));
+    }
+
+    if (!containsPrefix(args, "--log-level")) {
+        QString logLevel = getLogLevelName(config.logLevel).toLower();
+        args << ("--log-level-" + logLevel);
+    }
+
+    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
+    env.insert(ENV_SEND_CRASH_REPORTS, "0");
+
+    process = new QProcess(this);
+    process->setProcessEnvironment(env);
+    connect(process, SIGNAL(error(QProcess::ProcessError)), SLOT(sl_onError(QProcess::ProcessError)));
+    connect(process, SIGNAL(readyReadStandardOutput()), SLOT(sl_onReadStandardOutput()));
+    connect(process, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), this, &CmdlineTaskRunner::sl_onFinish);
+
+    QString cmdlineUgenePath(CMDLineRegistryUtils::getCmdlineUgenePath());
+    coreLog.details("Starting UGENE command line: " + cmdlineUgenePath + " " + args.join(" "));
+    process->start(cmdlineUgenePath, args);
+#if (defined(Q_OS_WIN32) || defined(Q_OS_WINCE))
+    QString processId = NULL != process->pid() ? QString::number(process->pid()->dwProcessId) : "unknown";
+    processLogPrefix = QString("process:%1>").arg(processId);
+#else
+    processLogPrefix = QString("process:%1>").arg(process->pid());
+#endif
+    bool startedSuccessfully = process->waitForStarted();
+    CHECK_EXT(startedSuccessfully, setError(tr("Cannot start process '%1'").arg(cmdlineUgenePath)), );
+}
+
+Task::ReportResult CmdlineTaskRunner::report() {
+    CHECK(NULL != process, ReportResult_Finished);
+    if (hasError()) {
+        return ReportResult_Finished;
+    }
+    if (isCanceled()) {
+        ExternalToolRunTask::killProcess(process);
+        return ReportResult_Finished;
+    }
+    QProcess::ProcessState state = process->state();
+    if (state == QProcess::Running) {
+        return ReportResult_CallMeAgain;
+    }
+    return ReportResult_Finished;
+}
+
+bool CmdlineTaskRunner::isCommandLogLine(const QString &/*logLine*/) const {
+    return false;
+}
+
+bool CmdlineTaskRunner::parseCommandLogWord(const QString &/*logWord*/) {
+    return false;
+}
+
+void CmdlineTaskRunner::writeLog(QStringList &lines) {
+    QStringList::Iterator it = lines.begin();
+    for (; it != lines.end(); it++) {
+        QString &line = *it;
+        line = line.trimmed();
+        QString nameCandidate;
+        int closePos = getLogNameCandidate(line, nameCandidate);
+        if (-1 == closePos) {
+            continue;
+        }
+
+        for (int i=config.logLevel; i<LogLevel_NumLevels; i++) {
+            QString logLevelName = getLogLevelName((LogLevel)i);
+            if (logLevelName != nameCandidate) {
+                continue;
+            }
+
+            QString logLine = line.mid(closePos + 1);
+            logLine = logLine.trimmed();
+            bool commandToken = logLine.startsWith(OUTPUT_PROGRESS_TAG) || logLine.startsWith(ERROR_KEYWORD) || isCommandLogLine(logLine);
+            if (commandToken)  {
+                continue;
+            }
+            taskLog.message((LogLevel)i, processLogPrefix + logLine);
+        }
+    }
+}
+
+QString CmdlineTaskRunner::readStdout() {
+    QByteArray charSet;
+#ifdef Q_OS_WIN32
+    charSet = "CP866";
+#else
+    charSet = "UTF-8";
+#endif
+    QTextCodec *codec = QTextCodec::codecForName(charSet);
+    return codec->toUnicode(process->readAllStandardOutput());
+}
+
+void CmdlineTaskRunner::sl_onError(QProcess::ProcessError error) {
+    QString msg;
+    switch (error) {
+    case QProcess::FailedToStart:
+        msg = tr("The process '%1' failed to start. Either the invoked program is missing, "
+            "or you may have insufficient permissions to invoke the program").arg(CMDLineRegistryUtils::getCmdlineUgenePath());
+        break;
+    case QProcess::Crashed:
+        msg = tr("The process '%1' crashed some time after starting successfully").arg(CMDLineRegistryUtils::getCmdlineUgenePath());
+        break;
+    case QProcess::WriteError:
+    case QProcess::ReadError:
+        msg = tr("Error occurred while reading from or writing to channel");
+        break;
+    default:
+        msg = tr("Unknown error occurred");
+    }
+    setError(msg);
+}
+
+void CmdlineTaskRunner::sl_onReadStandardOutput() {
+    QString data = readStdout();
+    QStringList lines = data.split(QChar('\n'));
+    writeLog(lines);
+
+    int errInd = data.indexOf(ERROR_KEYWORD);
+    if (errInd >= 0) {
+        int errIndEnd = data.indexOf(ERROR_KEYWORD, errInd + 1);
+        if (errIndEnd > errInd) {
+            setError(data.mid(errInd + ERROR_KEYWORD.size(), errIndEnd - errInd - ERROR_KEYWORD.size()));
+        } else {
+            setError(data.mid(errInd + ERROR_KEYWORD.size() + 1));
+        }
+        return;
+    }
+
+    foreach(const QString &line, lines) {
+        QStringList words = line.split(QRegExp("\\s+"), QString::SkipEmptyParts);
+        foreach (const QString &word, words) {
+            if (word.startsWith(OUTPUT_PROGRESS_TAG)) {
+                QString numStr = word.mid(OUTPUT_PROGRESS_TAG.size());
+                bool ok = false;
+                int num = numStr.toInt(&ok);
+                if (ok && num >= 0) {
+                    stateInfo.progress = qMin(num, 100);
+                }
+                break;
+            } else if (parseCommandLogWord(word)) {
+                break;
+            }
+        }
+    }
+}
+
+void CmdlineTaskRunner::sl_onFinish(int exitCode, QProcess::ExitStatus exitStatus) {
+    CHECK(!hasError(), ); // !do not overwrite previous error!
+
+    // On Windows, if the process was terminated with TerminateProcess() from another application,
+    // this function will still return NormalExit unless the exit code is less than 0.
+    if (exitStatus != QProcess::NormalExit || exitCode != 0) {
+        setError(tr("An error occurred. Process is not finished successfully."));
+    }
+}
+
+/************************************************************************/
+/* CmdlineTask */
+/************************************************************************/
+namespace {
+    const int UPDATE_PROGRESS_INTERVAL = 500;
+
+    void logError(const QString &error) {
+        coreLog.info(QString("%1%2%1").arg(ERROR_KEYWORD).arg(error));
+    }
+}
+
+CmdlineTask::CmdlineTask(const QString &name, TaskFlags flags)
+: Task(name, flags)
+{
+    if (AppContext::getCMDLineRegistry()->hasParameter(OUTPUT_PROGRESS_ARG)) {
+        QTimer *timer = new QTimer(this);
+        connect(timer, SIGNAL(timeout()), SLOT(sl_outputProgressAndState()));
+        timer->start(UPDATE_PROGRESS_INTERVAL);
+    }
+}
+
+Task::ReportResult CmdlineTask::report() {
+    if (AppContext::getCMDLineRegistry()->hasParameter(OUTPUT_ERROR_ARG)) {
+        QString error = getTaskError();
+        if (!error.isEmpty()) {
+            logError(error);
+        }
+    }
+    if (AppContext::getCMDLineRegistry()->hasParameter(OUTPUT_PROGRESS_ARG)) {
+        sl_outputProgressAndState();
+    }
+    return ReportResult_Finished;
+}
+
+QString CmdlineTask::getTaskError() const {
+    return getError();
+}
+
+void CmdlineTask::sl_outputProgressAndState() {
+    coreLog.info(QString("%1%2").arg(OUTPUT_PROGRESS_TAG).arg(getProgress()));
+}
+
+} // U2
diff --git a/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.h b/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.h
new file mode 100644
index 0000000..4d46ba3
--- /dev/null
+++ b/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.h
@@ -0,0 +1,83 @@
+/**
+ * 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_CMDLINE_TASK_RUNNER_H_
+#define _U2_CMDLINE_TASK_RUNNER_H_
+
+#include <QProcess>
+#include <U2Core/Task.h>
+
+namespace U2 {
+
+class U2CORE_EXPORT CmdlineTaskConfig {
+public:
+    CmdlineTaskConfig();
+
+    QString             command;
+    QStringList         arguments;
+    LogLevel            logLevel;
+    bool                withPluginList;
+    QStringList         pluginList;
+};
+
+class U2CORE_EXPORT CmdlineTaskRunner : public Task {
+    Q_OBJECT
+public:
+    CmdlineTaskRunner(const CmdlineTaskConfig &config);
+
+    void prepare();
+    ReportResult report();
+
+protected:
+    virtual bool isCommandLogLine(const QString &logLine) const;
+    virtual bool parseCommandLogWord(const QString &logWord);
+
+private:
+    void writeLog(QStringList &lines);
+    QString readStdout();
+
+private slots:
+    void sl_onError(QProcess::ProcessError);
+    void sl_onReadStandardOutput();
+    void sl_onFinish(int exitCode, QProcess::ExitStatus exitStatus);
+
+private:
+    CmdlineTaskConfig       config;
+    QProcess*               process;
+    QString                 processLogPrefix;
+};
+
+class U2CORE_EXPORT CmdlineTask : public Task {
+    Q_OBJECT
+public:
+    CmdlineTask(const QString &name, TaskFlags flags);
+    ReportResult report();
+
+protected:
+    virtual QString getTaskError() const;
+
+private slots:
+    void sl_outputProgressAndState();
+};
+
+} // U2
+
+#endif // _U2_CMDLINE_TASK_RUNNER_H_
diff --git a/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp b/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp
index 5506e6a..8f5f898 100644
--- a/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp
@@ -1,23 +1,23 @@
 /**
-* 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.
-*/
+ * 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 "ExternalToolRunTask.h"
 
@@ -54,30 +54,31 @@ namespace U2 {
 #define START_WAIT_MSEC 3000
 
 ExternalToolRunTask::ExternalToolRunTask(const QString &_toolName, const QStringList &_arguments,
-    ExternalToolLogParser *_logParser, const QString &_workingDirectory, const QStringList &_additionalPaths,
-    const QString &_additionalProcessToKill, bool parseOutputFile)
-    : Task(_toolName + tr(" tool"), TaskFlag_None),
-    arguments(_arguments),
-    logParser(_logParser),
-    toolName(_toolName),
-    workingDirectory(_workingDirectory),
-    additionalPaths(_additionalPaths),
-    externalToolProcess(NULL),
-    helper(NULL),
-    listener(NULL),
-    additionalProcessToKill(_additionalProcessToKill),
-    parseOutputFile(parseOutputFile) {
+ExternalToolLogParser *_logParser, const QString &_workingDirectory, const QStringList &_additionalPaths,
+const QString &_additionalProcessToKill, bool parseOutputFile)
+: Task(_toolName + tr(" tool"), TaskFlag_None),
+  arguments(_arguments),
+  logParser(_logParser),
+  toolName(_toolName),
+  workingDirectory(_workingDirectory),
+  additionalPaths(_additionalPaths),
+  externalToolProcess(NULL),
+  helper(NULL),
+  listener(NULL),
+  additionalProcessToKill(_additionalProcessToKill),
+  parseOutputFile(parseOutputFile)
+{
     coreLog.trace("Creating run task for: " + toolName);
     if (NULL != logParser) {
         logParser->setParent(this);
     }
 }
 
-ExternalToolRunTask::~ExternalToolRunTask() {
+ExternalToolRunTask::~ExternalToolRunTask(){
     delete externalToolProcess;
 }
 
-void ExternalToolRunTask::run() {
+void ExternalToolRunTask::run(){
     if (hasError() || isCanceled()) {
         return;
     }
@@ -94,34 +95,34 @@ void ExternalToolRunTask::run() {
     }
     if (!additionalEnvVariables.isEmpty()) {
         QProcessEnvironment processEnvironment = externalToolProcess->processEnvironment();
-        foreach(const QString& envVarName, additionalEnvVariables.keys()) {
+        foreach (const QString& envVarName, additionalEnvVariables.keys()) {
             processEnvironment.insert(envVarName, additionalEnvVariables.value(envVarName));
         }
         externalToolProcess->setProcessEnvironment(processEnvironment);
     }
 
     helper.reset(new ExternalToolRunTaskHelper(this));
-    if (NULL != listener) {
+    if(NULL != listener) {
         helper->addOutputListener(listener);
     }
 
     externalToolProcess->start(pRun.program, pRun.arguments);
     bool started = externalToolProcess->waitForStarted(START_WAIT_MSEC);
 
-    if (!started) {
+    if (!started){
         ExternalTool* tool = AppContext::getExternalToolRegistry()->getByName(toolName);
-        if (tool->isValid()) {
+        if (tool->isValid()){
             stateInfo.setError(tr("Can not run %1 tool.").arg(toolName));
         } else {
             stateInfo.setError(tr("Can not run %1 tool. May be tool path '%2' not valid?")
-                .arg(toolName)
-                .arg(AppContext::getExternalToolRegistry()->getByName(toolName)->getPath()));
+                               .arg(toolName)
+                               .arg(AppContext::getExternalToolRegistry()->getByName(toolName)->getPath()));
         }
         return;
     }
-    while (!externalToolProcess->waitForFinished(1000)) {
+    while(!externalToolProcess->waitForFinished(1000)){
         if (isCanceled()) {
-            killProcess();
+            killProcess(externalToolProcess, additionalProcessToKill);
             algoLog.details(tr("Tool %1 is cancelled").arg(toolName));
             return;
         }
@@ -129,7 +130,7 @@ void ExternalToolRunTask::run() {
 
     {
         int exitCode = externalToolProcess->exitCode();
-        if (exitCode != EXIT_SUCCESS && !hasError()) {
+        if(exitCode != EXIT_SUCCESS && !hasError()) {
             QString error;
             if (parseOutputFile) {
                 parseStandartOutputFile(outputFile);
@@ -142,32 +143,32 @@ void ExternalToolRunTask::run() {
     }
 }
 
-void ExternalToolRunTask::killProcess() const {
+void ExternalToolRunTask::killProcess(QProcess *process, QString childProcesses) {
 #if (!defined(Q_OS_WIN32) && !defined(Q_OS_WINCE)) || defined(qdoc)
-    long numPid = externalToolProcess->pid();
-    Q_UNUSED(numPid);
+            long numPid = process->pid();
+            Q_UNUSED(numPid);
 #else
-    Q_PID pid = externalToolProcess->pid();
-    long numPid = pid->dwProcessId;
-    Q_UNUSED(numPid);
+            Q_PID pid = process->pid();
+            long numPid = pid->dwProcessId;
+            Q_UNUSED(numPid);
 #endif
 #ifdef Q_OS_WIN
-    QProcess::execute(QString("taskkill /PID %1 /T /F").arg(numPid));
-    if (!additionalProcessToKill.isEmpty()) {
-        QProcess::execute(QString("taskkill /IM %1 /T /F").arg(additionalProcessToKill));
-    }
+            QProcess::execute(QString("taskkill /PID %1 /T /F").arg(numPid));
+            if (!childProcesses.isEmpty()) {
+                QProcess::execute(QString("taskkill /IM %1 /T /F").arg(childProcesses));
+            }
 #endif
 #ifdef Q_OS_UNIX
-    QList<long> pids = getChildPidsRecursive(numPid);
-    pids << numPid;
-    foreach(const long pid, pids) {
-        taskLog.trace(QString("Kill process: %1").arg(pid));
-        kill(pid, SIGTERM);
-    }
+            QList<long> pids = getChildPidsRecursive(numPid);
+            pids << numPid;
+            foreach (const long pid, pids) {
+                taskLog.trace(QString("Kill process: %1").arg(pid));
+                kill(pid, SIGTERM);
+            }
 #endif
 }
 
-QList<long> ExternalToolRunTask::getChildPidsRecursive(long parentPid) const {
+QList<long> ExternalToolRunTask::getChildPidsRecursive(long parentPid) {
     QList<long> res;
 
     QProcess p;
@@ -176,7 +177,7 @@ QList<long> ExternalToolRunTask::getChildPidsRecursive(long parentPid) const {
     const QStringList lines = QString(p.readAllStandardOutput()).split('\n');
     p.close();
 
-    foreach(const QString& line, lines) {
+    foreach (const QString& line, lines) {
         CHECK_OPERATION(line.contains(QString::number(parentPid)), continue);
 
         const QStringList pidStrings = line.split(QRegExp("\\s"), QString::SkipEmptyParts);
@@ -186,8 +187,8 @@ QList<long> ExternalToolRunTask::getChildPidsRecursive(long parentPid) const {
         bool ok = false;
         long pid = pidStrings.first().toLong(&ok);
         CHECK_OPERATIONS(ok,
-            taskLog.trace(QString("Fail to convert process' PID to number: '%1'").arg(pidStrings.first())),
-            continue);
+                         taskLog.trace(QString("Fail to convert process' PID to number: '%1'").arg(pidStrings.first())),
+                         continue);
 
         res << getChildPidsRecursive(pid);
         res << pid;
@@ -197,7 +198,7 @@ QList<long> ExternalToolRunTask::getChildPidsRecursive(long parentPid) const {
 }
 
 void ExternalToolRunTask::addOutputListener(ExternalToolListener* outputListener) {
-    if (helper) {
+    if(helper) {
         helper->addOutputListener(outputListener);
     }
     listener = outputListener;
@@ -236,20 +237,22 @@ ExternalToolListener* ExternalToolSupportTask::getListener(int listenerNumber) {
 ////////////////////////////////////////
 //ExternalToolRunTaskHelper
 ExternalToolRunTaskHelper::ExternalToolRunTaskHelper(ExternalToolRunTask* t)
-    : process(t->externalToolProcess), logParser(t->logParser), os(t->stateInfo), listener(NULL) {
+: process(t->externalToolProcess), logParser(t->logParser), os(t->stateInfo), listener(NULL)
+{
     logData.resize(1000);
     connect(process, SIGNAL(readyReadStandardOutput()), SLOT(sl_onReadyToReadLog()));
     connect(process, SIGNAL(readyReadStandardError()), SLOT(sl_onReadyToReadErrLog()));
 }
 
 ExternalToolRunTaskHelper::ExternalToolRunTaskHelper(QProcess *_process, ExternalToolLogParser *_logParser, U2OpStatus &_os)
-    : process(_process), logParser(_logParser), os(_os), listener(NULL) {
+: process(_process), logParser(_logParser), os(_os), listener(NULL)
+{
     logData.resize(1000);
     connect(process, SIGNAL(readyReadStandardOutput()), SLOT(sl_onReadyToReadLog()));
     connect(process, SIGNAL(readyReadStandardError()), SLOT(sl_onReadyToReadErrLog()));
 }
 
-void ExternalToolRunTaskHelper::sl_onReadyToReadLog() {
+void ExternalToolRunTaskHelper::sl_onReadyToReadLog(){
     QMutexLocker locker(&logMutex);
 
     CHECK(NULL != process, );
@@ -257,11 +260,11 @@ void ExternalToolRunTaskHelper::sl_onReadyToReadLog() {
         process->setReadChannel(QProcess::StandardOutput);
     }
     int numberReadChars = process->read(logData.data(), logData.size());
-    while (numberReadChars > 0) {
+    while(numberReadChars > 0){
         //call log parser
         QString line = QString::fromLocal8Bit(logData.constData(), numberReadChars);
         logParser->parseOutput(line);
-        if (NULL != listener) {
+        if(NULL != listener) {
             listener->addNewLogMessage(line, OUTPUT_LOG);
         }
         numberReadChars = process->read(logData.data(), logData.size());
@@ -269,7 +272,7 @@ void ExternalToolRunTaskHelper::sl_onReadyToReadLog() {
     os.setProgress(logParser->getProgress());
 }
 
-void ExternalToolRunTaskHelper::sl_onReadyToReadErrLog() {
+void ExternalToolRunTaskHelper::sl_onReadyToReadErrLog(){
     QMutexLocker locker(&logMutex);
 
     CHECK(NULL != process, );
@@ -277,11 +280,11 @@ void ExternalToolRunTaskHelper::sl_onReadyToReadErrLog() {
         process->setReadChannel(QProcess::StandardError);
     }
     int numberReadChars = process->read(logData.data(), logData.size());
-    while (numberReadChars > 0) {
+    while(numberReadChars > 0){
         //call log parser
         QString line = QString::fromLocal8Bit(logData.constData(), numberReadChars);
         logParser->parseErrOutput(line);
-        if (NULL != listener) {
+        if(NULL != listener) {
             listener->addNewLogMessage(line, ERROR_LOG);
         }
         numberReadChars = process->read(logData.data(), logData.size());
@@ -300,32 +303,32 @@ void ExternalToolRunTaskHelper::addOutputListener(ExternalToolListener* _listene
 ////////////////////////////////////////
 //ExternalToolLogParser
 ExternalToolLogParser::ExternalToolLogParser() {
-    progress = -1;
-    lastLine = "";
-    lastErrLine = "";
-    lastError = "";
-}
-void ExternalToolLogParser::parseOutput(const QString& partOfLog) {
-    lastPartOfLog = partOfLog.split(QChar('\n'));
-    lastPartOfLog.first() = lastLine + lastPartOfLog.first();
-    lastLine = lastPartOfLog.takeLast();
-    foreach(QString buf, lastPartOfLog) {
-        if (buf.contains("error", Qt::CaseInsensitive)) {
+    progress=-1;
+    lastLine="";
+    lastErrLine="";
+    lastError="";
+}
+void ExternalToolLogParser::parseOutput(const QString& partOfLog){
+    lastPartOfLog=partOfLog.split(QChar('\n'));
+    lastPartOfLog.first()=lastLine+lastPartOfLog.first();
+    lastLine=lastPartOfLog.takeLast();
+    foreach(QString buf, lastPartOfLog){
+        if(buf.contains("error",Qt::CaseInsensitive)){
             setLastError(buf);
-        } else {
+        }else{
             ioLog.trace(buf);
         }
     }
 }
 
-void ExternalToolLogParser::parseErrOutput(const QString& partOfLog) {
-    lastPartOfLog = partOfLog.split(QChar('\n'));
-    lastPartOfLog.first() = lastErrLine + lastPartOfLog.first();
-    lastErrLine = lastPartOfLog.takeLast();
-    foreach(const QString& buf, lastPartOfLog) {
-        if (buf.contains("error", Qt::CaseInsensitive)) {
+void ExternalToolLogParser::parseErrOutput(const QString& partOfLog){
+    lastPartOfLog=partOfLog.split(QChar('\n'));
+    lastPartOfLog.first()=lastErrLine+lastPartOfLog.first();
+    lastErrLine=lastPartOfLog.takeLast();
+    foreach(const QString& buf, lastPartOfLog){
+        if(buf.contains("error",Qt::CaseInsensitive)){
             setLastError(buf);
-        } else {
+        }else{
             ioLog.trace(buf);
         }
     }
@@ -340,19 +343,19 @@ void ExternalToolLogParser::setLastError(const QString &value) {
 
 ////////////////////////////////////////
 //ExternalToolSupportUtils
-void ExternalToolSupportUtils::removeTmpDir(const QString& tmpDirUrl, U2OpStatus& os) {
+void ExternalToolSupportUtils::removeTmpDir( const QString& tmpDirUrl, U2OpStatus& os) {
     if (tmpDirUrl.isEmpty()) {
         os.setError(tr("Can not remove temporary directory: path is empty."));
         return;
     }
     QDir tmpDir(tmpDirUrl);
-    foreach(const QString& file, tmpDir.entryList(QDir::NoDotAndDotDot | QDir::AllEntries)) {
+    foreach(const QString& file, tmpDir.entryList(QDir::NoDotAndDotDot | QDir::AllEntries)){
         if (!tmpDir.remove(file)) {
             os.setError(tr("Can not remove files from temporary directory."));
             return;
         }
     }
-    if (!tmpDir.rmdir(tmpDir.absolutePath())) {
+    if (!tmpDir.rmdir(tmpDir.absolutePath())){
         os.setError(tr("Can not remove directory for temporary files."));
     }
 }
@@ -391,9 +394,9 @@ bool ExternalToolSupportUtils::startExternalProcess(QProcess *process, const QSt
     bool started = process->waitForStarted(START_WAIT_MSEC);
 
 #ifdef Q_OS_WIN32
-    if (!started) {
+    if(!started) {
         QString execStr = WIN_LAUNCH_CMD_COMMAND + program;
-        foreach(const QString arg, arguments) {
+        foreach (const QString arg, arguments) {
             execStr += " " + arg;
         }
         process->start(execStr);
@@ -424,17 +427,17 @@ ProcessRun ExternalToolSupportUtils::prepareProcess(const QString &toolName, con
     QString toolRunnerProgram = tool->getToolRunnerProgram();
     QString listenerProgramMessage = result.program;
 
-    if (!toolRunnerProgram.isEmpty()) {
+    if (!toolRunnerProgram.isEmpty()){
         ScriptingToolRegistry *stregister = AppContext::getScriptingToolRegistry();
         SAFE_POINT_EXT(NULL != stregister, os.setError("No scripting tool registry"), result);
         ScriptingTool *stool = stregister->getByName(toolRunnerProgram);
-        if (NULL == stool || stool->getPath().isEmpty()) {
+        if (NULL == stool || stool->getPath().isEmpty()){
             os.setError(QString("The tool %1 that runs %2 is not installed. Please set the path of the tool in the External Tools settings").arg(toolRunnerProgram).arg(toolName));
             return result;
         }
         result.arguments.prepend(result.program);
 
-        for (int i = stool->getRunParameters().size() - 1; i >= 0; i--) {
+        for (int i = stool->getRunParameters().size() - 1; i >= 0; i--){
             result.arguments.prepend(stool->getRunParameters().at(i));
         }
         foreach(const QString &param, tool->getToolRunnerAdditionalOptions()) {
@@ -459,7 +462,7 @@ ProcessRun ExternalToolSupportUtils::prepareProcess(const QString &toolName, con
 
     result.process = new QProcess();
     result.process->setProcessEnvironment(processEnvironment);
-    if (!workingDirectory.isEmpty()) {
+    if (!workingDirectory.isEmpty()){
         result.process->setWorkingDirectory(workingDirectory);
         algoLog.details(tr("Working directory is \"%1\"").arg(result.process->workingDirectory()));
     }
@@ -467,12 +470,12 @@ ProcessRun ExternalToolSupportUtils::prepareProcess(const QString &toolName, con
     // QProcess wraps arguments that contain spaces in quotes automatically.
     // But launched line should look correctly in the log.
     QStringList argumentListForDisplay;
-    foreach(const QString& arg, result.arguments) {
+    foreach (const QString& arg, result.arguments) {
         argumentListForDisplay << GUrlUtils::getQuotedString(arg);
     }
     algoLog.details(tr("Launching %1 tool: %2 %3").arg(toolName).arg(result.program).arg(argumentListForDisplay.join(" ")));
 
-    if (NULL != listener) {
+    if(NULL != listener) {
         listener->setToolName(toolName);
         listener->addNewLogMessage(listenerProgramMessage, PROGRAM_PATH);
         QString argumentsLine = ExternalToolSupportUtils::prepareArgumentsForCmdLine(arguments);
@@ -568,7 +571,8 @@ ExternalToolLogProcessor::~ExternalToolLogProcessor() {
 }
 
 ExternalToolListener::ExternalToolListener(ExternalToolLogProcessor *logProcessor) :
-logProcessor(logProcessor) {
+    logProcessor(logProcessor)
+{
 
 }
 
diff --git a/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.h b/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.h
index dd10bb8..50578bb 100644
--- a/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.h
+++ b/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.h
@@ -1,23 +1,23 @@
 /**
-* 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.
-*/
+ * 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_EXTERNAL_TOOL_RUN_TASK_H
 #define _U2_EXTERNAL_TOOL_RUN_TASK_H
@@ -37,7 +37,7 @@ class ExternalToolListener;
 
 //using namespace Workflow;
 
-enum LogType { ERROR_LOG, OUTPUT_LOG, PROGRAM_PATH, ARGUMENTS };
+enum LogType {ERROR_LOG, OUTPUT_LOG, PROGRAM_PATH, ARGUMENTS};
 
 class U2CORE_EXPORT ProcessRun {
 public:
@@ -46,16 +46,16 @@ public:
     QStringList arguments;
 };
 
-class U2CORE_EXPORT ExternalToolRunTask : public Task {
+class U2CORE_EXPORT ExternalToolRunTask: public Task {
     Q_OBJECT
-        Q_DISABLE_COPY(ExternalToolRunTask)
-        friend class ExternalToolRunTaskHelper;
+    Q_DISABLE_COPY(ExternalToolRunTask)
+    friend class ExternalToolRunTaskHelper;
 public:
     /**
-    * Don't delete logParser, it will be deleted automatically.
-    */
+     * Don't delete logParser, it will be deleted automatically.
+     */
     ExternalToolRunTask(const QString& toolName, const QStringList& arguments, ExternalToolLogParser* logParser,
-        const QString& workingDirectory = "", const QStringList& additionalPaths = QStringList(),
+        const QString& workingDirectory = "", const QStringList& additionalPaths = QStringList(), 
         const QString &additionalProcessToKill = QString(), bool parseOutputFile = false);
     ~ExternalToolRunTask();
 
@@ -65,11 +65,12 @@ public:
 
     void setStandartInputFile(const QString& file) { inputFile = file; }
     void setStandartOutputFile(const QString& file) { outputFile = file; }
-    void setAdditionalEnvVariables(const  QMap<QString, QString> &envVariable) { additionalEnvVariables = envVariable; }
+    void setAdditionalEnvVariables(const  QMap<QString, QString> &envVariable) {additionalEnvVariables = envVariable; }
+
+    static void killProcess(QProcess *process, QString childProcesses = "");
 
 private:
-    void killProcess() const;
-    QList<long> getChildPidsRecursive(long parentPid) const;
+    static QList<long> getChildPidsRecursive(long parentPid);
     void parseStandartOutputFile(QString &filepath);
 
     QStringList             arguments;
@@ -87,14 +88,14 @@ private:
     bool                    parseOutputFile;
 };
 
-class U2CORE_EXPORT ExternalToolSupportTask : public Task {
+class U2CORE_EXPORT ExternalToolSupportTask: public Task{
 public:
     ExternalToolSupportTask(const QString& _name, TaskFlags f)
         : Task(_name, f) {}
-    virtual ~ExternalToolSupportTask() {}
+    virtual ~ExternalToolSupportTask(){}
 
-    void addListeners(const QList<ExternalToolListener*>& _listeners) { listeners.append(_listeners); }
-    const QList<ExternalToolListener*>& getListeners() const { return listeners; }
+    void addListeners(const QList<ExternalToolListener*>& _listeners){listeners.append(_listeners);}
+    const QList<ExternalToolListener*>& getListeners() const{return listeners;}
 
     ExternalToolListener* getListener(int listenerNumber);
 protected:
@@ -114,7 +115,7 @@ public:
 
     void addOutputListener(ExternalToolListener* listener);
 
-    public slots:
+public slots:
     void sl_onReadyToReadLog();
     void sl_onReadyToReadErrLog();
 
@@ -133,8 +134,8 @@ 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 directory: prePath/domain/tmp_dir_name
+     */
     static QString createTmpDir(const QString &prePath, const QString &domain, U2OpStatus &os);
     static void appendExistingFile(const QString &path, QStringList &files);
     static bool startExternalProcess(QProcess *process, const QString &program, const QStringList &arguments);
@@ -148,10 +149,10 @@ class U2CORE_EXPORT ExternalToolLogParser : public QObject {
     Q_OBJECT
 public:
     ExternalToolLogParser();
-    virtual int getProgress() { return progress; }
+    virtual int getProgress(){ return progress; }
     virtual void parseOutput(const QString& partOfLog);
     virtual void parseErrOutput(const QString& partOfLog);
-    QString getLastError() const { return lastError; }
+    QString getLastError() const {return lastError;}
 
 protected:
     void setLastError(const QString &value);
@@ -171,10 +172,10 @@ protected:
 };
 
 /**
-* @brief The ExternalToolLogProcessor class
-* Log processor is supposed to do some additional action
-* on every new output line.
-*/
+ * @brief The ExternalToolLogProcessor class
+ * Log processor is supposed to do some additional action
+ * on every new output line.
+ */
 
 class U2CORE_EXPORT ExternalToolLogProcessor {
 public:
diff --git a/src/corelibs/U2Core/src/tasks/LoadDocumentTask.cpp b/src/corelibs/U2Core/src/tasks/LoadDocumentTask.cpp
index 85c52fb..ba194b7 100644
--- a/src/corelibs/U2Core/src/tasks/LoadDocumentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/LoadDocumentTask.cpp
@@ -166,6 +166,9 @@ Task::ReportResult LoadUnloadedDocumentTask::report() {
             unloadedDoc->loadFrom(sourceDoc); // get all data from source doc;
             assert(!unloadedDoc->isTreeItemModified());
             assert(unloadedDoc->isLoaded());
+            if (sourceDoc->getGHintsMap().value(DocumentReadingMode_LoadAsModified, false).toBool()) {
+                unloadedDoc->setModified(true);
+            }
         }
     }
     if (res == ReportResult_Finished) {
diff --git a/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp b/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp
index 7aff44d..54b6ded 100644
--- a/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp
@@ -277,7 +277,7 @@ GUrl SaveMultipleDocuments::chooseAnotherUrl(Document* doc) {
             QWidget *activeWindow = qobject_cast<QWidget*>(QApplication::activeWindow());
             QFileDialog::Options options;
 #if defined(Q_OS_MAC) | defined(Q_OS_WIN)
-            if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+            if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
                 options = QFileDialog::DontUseNativeDialog;
             }else {
                 options = 0;
diff --git a/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.cpp b/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.cpp
index 81f1775..4eb32ca 100644
--- a/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.cpp
@@ -44,15 +44,20 @@ SequenceDbiWalkerTask::SequenceDbiWalkerTask(const SequenceDbiWalkerConfig& c, S
 QList<SequenceDbiWalkerSubtask*> SequenceDbiWalkerTask::prepareSubtasks() {
     QList<SequenceDbiWalkerSubtask*> res;
 
+    U2SequenceObject sequenceObject("sequence", config.seqRef);
+
     if (config.range.isEmpty()) {
-        return res; // error
+        config.range = U2Region(0, sequenceObject.getSequenceLength());
+    } else {
+        U2Region wholeSeqReg(0, sequenceObject.getSequenceLength());
+        if (!config.walkCircular) {
+            assert(wholeSeqReg.contains(config.range));
+        }
     }
 
-    U2SequenceObject sequenceObject("sequence", config.seqRef);
-
-    U2Region wholeSeqReg(0, sequenceObject.getSequenceLength());
-    assert(wholeSeqReg.contains(config.range));
-    config.range = wholeSeqReg.intersect(config.range);
+    if (config.walkCircular && static_cast<quint64>(config.range.length) == sequenceObject.getSequenceLength()) {
+        config.range.length += config.walkCircularDistance * (config.aminoTrans == NULL ? 1 : 3);
+    }
 
     if (config.aminoTrans == NULL ) {
         //try walk direct and complement strands
diff --git a/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.cpp b/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.cpp
index 3cc4bd8..6af8d7e 100644
--- a/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.cpp
+++ b/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.cpp
@@ -29,6 +29,8 @@ static const QString OUTPUT_SUBDIR = "run";
 
 namespace U2 {
 
+int FileAndDirectoryUtils::minLengthToWrite = 32768;
+
 QString FileAndDirectoryUtils::getFormatId(const FormatDetectionResult &r) {
     if (NULL != r.format) {
         return r.format->getFormatId();
@@ -104,5 +106,12 @@ bool FileAndDirectoryUtils::isFileEmpty(const QString& url){
    return false;
 }
 
+void FileAndDirectoryUtils::dumpStringToFile(QFile *f, QString &str) {
+    if (Q_LIKELY(f == NULL || str.length() <= minLengthToWrite)) {
+        return;
+    }
+    f->write(str.toLocal8Bit());
+    str.clear();
+}
 
 } // U2
diff --git a/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.h b/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.h
index b214265..a1b4e5d 100644
--- a/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.h
+++ b/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.h
@@ -40,9 +40,12 @@ public:
     static QString createWorkingDir(const QString& fileUrl, int dirMode, const QString& customDir, const QString& workingDir);
     static QString detectFormat(const QString &url);
     static bool isFileEmpty(const QString& url);
+    static void dumpStringToFile(QFile *f, QString &str); //Be aware: string will be cleared after dumping
 
 private:
     static QString getFormatId(const FormatDetectionResult &r);
+
+    static int minLengthToWrite;
 };
 
 } // U2
diff --git a/src/corelibs/U2Core/src/util/FormatUtils.cpp b/src/corelibs/U2Core/src/util/FormatUtils.cpp
index 43d1971..d036d32 100644
--- a/src/corelibs/U2Core/src/util/FormatUtils.cpp
+++ b/src/corelibs/U2Core/src/util/FormatUtils.cpp
@@ -120,8 +120,20 @@ QString FormatUtils::getShortMonthName( int num )
 }
 
 static QString getAllFilesFilter() {
-    // UGENE-1248
-    return "*";
+    return QObject::tr("All files") + " ( * )";
+}
+
+QString FormatUtils::prepareFileFilter(const QMap<QString, QStringList> &formatNamesWithExtensions, bool allowAnyFiles, const QStringList &extraExtensions) {
+    QStringList filters;
+    foreach (const QString &formatName, formatNamesWithExtensions.keys()) {
+        filters << prepareFileFilter(formatName, formatNamesWithExtensions[formatName], false, extraExtensions);
+    }
+
+    if (allowAnyFiles) {
+        filters << getAllFilesFilter();
+    }
+
+    return filters.join(";;");
 }
 
 QString FormatUtils::prepareFileFilter(const QString& name, const QStringList& exts, bool any, const QStringList& extra) {
@@ -136,7 +148,7 @@ QString FormatUtils::prepareFileFilter(const QString& name, const QStringList& e
     }
     line+=" )";
     if (any) {
-        line += ";;" + QObject::tr("All files") + " ( "+getAllFilesFilter()+" )";
+        line += ";;" + getAllFilesFilter();
     }
     return line;
 }
@@ -175,7 +187,7 @@ QString FormatUtils::prepareDocumentsFileFilter(bool any, const QStringList& ext
 
     result.sort();
     if (any) {
-        result.prepend(QObject::tr("All files") + " ( " + getAllFilesFilter() + " )");
+        result.prepend(getAllFilesFilter());
     }
     return result.join(";;");
 }
@@ -194,7 +206,7 @@ QString FormatUtils::prepareDocumentsFileFilter(const DocumentFormatConstraints&
     }
     result.sort();
     if (any) {
-        result.prepend(QObject::tr("All files") + " (" + getAllFilesFilter() + " )");
+        result.prepend(getAllFilesFilter());
     }
     return result.join(";;");
 }
diff --git a/src/corelibs/U2Core/src/util/FormatUtils.h b/src/corelibs/U2Core/src/util/FormatUtils.h
index 0d1d7b4..4ef4eb8 100644
--- a/src/corelibs/U2Core/src/util/FormatUtils.h
+++ b/src/corelibs/U2Core/src/util/FormatUtils.h
@@ -44,6 +44,7 @@ public:
     // for correct date formatting
     static QString getShortMonthName(int num);
 
+    static QString prepareFileFilter(const QMap<QString, QStringList>& formatNamesWithExtensions, bool allowAnyFiles = true, const QStringList& extraExtensions = QStringList(".gz"));
     static QString prepareFileFilter(const QString& name, const QStringList& exts, bool any = true, const QStringList& extraExts = QStringList(".gz"));
     static QString prepareDocumentsFileFilter(const DocumentFormatId &fid, bool any, const QStringList &extra = QStringList(".gz"));
     //returns filter for all formats supported. All-docs filter is returned first if any==true
diff --git a/src/corelibs/U2Core/src/util/GUrlUtils.cpp b/src/corelibs/U2Core/src/util/GUrlUtils.cpp
index 120c310..0937c00 100644
--- a/src/corelibs/U2Core/src/util/GUrlUtils.cpp
+++ b/src/corelibs/U2Core/src/util/GUrlUtils.cpp
@@ -40,7 +40,7 @@ QString GUrlUtils::getUncompressedExtension(const GUrl& url) {
     if (ext == "gz") {
         QString completeSuffix = url.completeFileSuffix();
         QStringList suffixList = completeSuffix.split(".");
-        ext = suffixList.empty() ? QString() :  suffixList.first();
+        ext = (suffixList.size() < 2) ? QString() : suffixList[suffixList.size() - 2];
     }
     return ext;
 }
diff --git a/src/corelibs/U2Core/src/util/GenbankFeatures.cpp b/src/corelibs/U2Core/src/util/GenbankFeatures.cpp
index a442d93..186ffec 100644
--- a/src/corelibs/U2Core/src/util/GenbankFeatures.cpp
+++ b/src/corelibs/U2Core/src/util/GenbankFeatures.cpp
@@ -115,7 +115,7 @@ const QVector<GBFeatureKeyInfo>& GBFeatureUtils::allKeys() {
     FK(GBFeatureKey_polyA_signal,     U2FeatureTypes::PolyASignal,          "polyA_signal",     cl("000000"), false, QObject::tr("Signal for cleavage & polyadenylation"));
     FK(GBFeatureKey_polyA_site,       U2FeatureTypes::PolyASite,            "polyA_site",       cl("000000"), false, QObject::tr("Site at which polyadenine is added to mRNA"));
     FK(GBFeatureKey_precursor_RNA,    U2FeatureTypes::PrecursorRna,         "precursor_RNA",    cl("000000"), false, QObject::tr("Any RNA species that is not yet the mature RNA product"));
-    FK(GBFeatureKey_prim_transcript,  U2FeatureTypes::PrimeryTranscript,    "prim_transcript",  cl("000000"), false, QObject::tr("Primary (unprocessed) transcript"));
+    FK(GBFeatureKey_prim_transcript,  U2FeatureTypes::PrimaryTranscript,    "prim_transcript",  cl("000000"), false, QObject::tr("Primary (unprocessed) transcript"));
     FK(GBFeatureKey_primer,           U2FeatureTypes::Primer,               "primer",           cl("000000"), false, QObject::tr("Primer binding region used with PCR"));
     FK(GBFeatureKey_primer_bind,      U2FeatureTypes::PrimerBindingSite,    "primer_bind",      cl("000000"), false, QObject::tr("Non-covalent primer binding site"));
     FK(GBFeatureKey_promoter,         U2FeatureTypes::Promoter,             "promoter",         cl("000000"), false, QObject::tr("A region involved in transcription initiation"));
diff --git a/src/corelibs/U2Core/src/util/SNPTablesUtils.cpp b/src/corelibs/U2Core/src/util/SNPTablesUtils.cpp
deleted file mode 100644
index 8e2522b..0000000
--- a/src/corelibs/U2Core/src/util/SNPTablesUtils.cpp
+++ /dev/null
@@ -1,358 +0,0 @@
-/**
- * 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/AppContext.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/FeaturesQueryCache.h>
-#include <U2Core/U2AttributeDbi.h>
-#include <U2Core/U2AttributeUtils.h>
-#include <U2Core/U2DbiUtils.h>
-#include <U2Core/U2FeatureKeys.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/VariationPropertiesUtils.h>
-
-#include "SNPTablesUtils.h"
-
-namespace U2 {
-
-QList<Gene> SNPTablesUtils::findGenes(const QList<U2Feature> &features, U2FeatureDbi* dbi, U2OpStatus &opStatus){
-    QList<Gene> result;
-    {
-        foreach(const U2Feature& f, features){
-            Gene gene = findGenesStep(f, dbi, opStatus);
-            if(opStatus.isCoR()) {
-                return QList<Gene>();
-            }
-            result.append(gene);
-
-        }
-    }
-    return result;
-}
-
-QList<Gene> SNPTablesUtils::findGenes(const U2DataId& seqId, const U2Region &region, U2FeatureDbi* dbi, U2OpStatus &opStatus, const QList<int>& excludeList) {
-    //qint64 nTime = GTimer::currentTimeMicros();
-    QList<Gene> result;
-    {
-        QScopedPointer<U2DbiIterator<U2Feature> > featureIterator(dbi->getFeaturesByRegion(region, U2DataId( ), U2FeatureGeneName, seqId, opStatus));
-        if(opStatus.isCoR()) {
-            return QList<Gene>();
-        }
-        while(featureIterator->hasNext()) {
-
-            U2Feature parentFeature = featureIterator->next();
-             Gene gene = findGenesStep(parentFeature, dbi, opStatus, excludeList);
-             if(opStatus.isCoR()){
-                 return QList<Gene>();
-             }
-
-             result.append(gene);
-
-        }
-     }
-    //perfLog.trace(QString("Find genes time (millis)= %1").arg(GTimer::millisBetween(nTime, GTimer::currentTimeMicros())));
-    return result;
-}
-
-Gene SNPTablesUtils::findGenesStep( const U2Feature &parentFeature, U2FeatureDbi* dbi, U2OpStatus &opStatus, const QList<int>& excludeList ){
-
-    QVector<U2Region> exons;
-    U2Region cdsRegion;
-
-    bool excludeExons = excludeList.contains(SNPTablesUtils::ExcludeSubfeatures);
-    bool excludeCDS = excludeList.contains(SNPTablesUtils::ExcludeCDS);
-    if(!excludeCDS || !excludeExons){
-        QScopedPointer<U2DbiIterator<U2Feature> > subFeatureIterator(dbi->getFeaturesByParent(parentFeature.id, QString( ), parentFeature.sequenceId, opStatus));
-        while(subFeatureIterator->hasNext()){
-            U2Feature subFeature = subFeatureIterator->next();
-            if(subFeature.name == U2FeatureExonName && !excludeExons){
-                exons.append(subFeature.location.region);
-            }else if(subFeature.name == U2FeatureCDSName && !excludeCDS){
-                cdsRegion = subFeature.location.region;
-            }
-
-        }
-        qStableSort(exons.begin(), exons.end());
-    }
-
-    U2Region geneRegion = parentFeature.location.region;
-    bool complemented =  parentFeature.location.strand != U2Strand::Direct;
-    QString name;
-    QString accession;
-    QString note;
-    QString altname;
-    QString disease;
-    QString type;
-    if(!excludeList.contains(SNPTablesUtils::ExcludeNames)){
-        QList<U2FeatureKey> keys = dbi->getFeatureKeys(parentFeature.id, opStatus);
-        foreach(const U2FeatureKey &key, keys) {
-            if(key.name == U2FeatureKey_Name) {
-                name = key.value;
-            } else if(key.name == U2FeatureKey_Accession) {
-                accession = key.value;
-            } else if(key.name == U2FeatureKey_Note) {
-                note = key.value;
-            }else if(key.name == U2FeatureKey_AltName) {
-                altname = key.value;
-            } else if(key.name == U2FeatureKey_Disease){
-                disease = key.value;
-            } else if(key.name == U2FeatureKey_KnownType){
-                type = key.value;
-            }
-        }
-    }
-    Gene gene = Gene(parentFeature.id, name, accession, altname, note, geneRegion, cdsRegion, exons, complemented);
-    gene.setDisease(disease);
-    gene.setType(type);
-
-    return gene;
-}
-
-static QList<Gene> getGenesAround( const U2DataId& seqId, const U2Region &region, U2FeatureDbi* dbi, U2OpStatus &opStatus, ComparisonOp cOp, const QList<int>& excludeList){
-    QList<Gene> res;
-
-    FeatureQuery query;
-    query.sequenceId = seqId;
-    query.intersectRegion = region;
-    query.featureName = U2FeatureGeneName;
-    query.closestFeature = cOp;
-    if (cOp == ComparisonOp_GT || cOp == ComparisonOp_GET){
-        if (excludeList.contains(SNPTablesUtils::ExlcudeNonPromotersAround)){
-            query.strandQuery = Strand_Direct;
-        }
-        query.startPosOrderOp = OrderOp_Asc;
-    }else if (cOp == ComparisonOp_LT || cOp == ComparisonOp_LET){
-        if (excludeList.contains(SNPTablesUtils::ExlcudeNonPromotersAround)){
-            query.strandQuery = Strand_Compl;
-        }
-        query.startPosOrderOp = OrderOp_Desc;
-    }
-
-    QScopedPointer<U2DbiIterator<U2Feature> > featureIterator(dbi->getFeatures(query, opStatus));
-    if(opStatus.isCoR()) {
-        return QList<Gene>();
-    }
-    while(featureIterator->hasNext()) {
-        U2Feature parentFeature = featureIterator->next();
-        Gene gene = SNPTablesUtils::findGenesStep(parentFeature, dbi, opStatus, excludeList);
-        if(opStatus.isCoR()){
-            return QList<Gene>();
-        }
-
-        res.append(gene);
-    }
-
-    return res;
-}
-
-QList<Gene> SNPTablesUtils::findGenesAround( const U2DataId& seqId, const U2Region &region, U2FeatureDbi* dbi, U2OpStatus &opStatus, const QList<int>& excludeList ){
-    QList<Gene> res;
-
-    SAFE_POINT(dbi!= NULL, "feature dbi is null", res);
-    SAFE_POINT(!seqId.isEmpty(), "seq id is empty", res);
-
-    res.append(getGenesAround(seqId, region, dbi, opStatus, ComparisonOp_LT, excludeList));
-    res.append(getGenesAround(seqId, region, dbi, opStatus, ComparisonOp_GT, excludeList));
-
-    return res;
-}
-
-QList<DamageEffect> SNPTablesUtils::getDamageEffectForVariant( const U2Variant& var, const U2DataId& seqId, U2Dbi* dbiDatabase, U2Dbi* dbiSession, DNATranslation* complTransl, DNATranslation* aaTransl, U2OpStatus& os ){
-    QList<DamageEffect> result;
-
-    SAFE_POINT(dbiSession!= NULL, "dbiSession is null", result);
-    SAFE_POINT(dbiDatabase!= NULL, "dbiDatabase is null", result);
-
-    //check if effect calculated
-    if(0!=dbiSession->getSNPTableDbi()->checkNotAnnotated(var.id, os)){
-        CHECK_OP(os, result);
-
-        //calculate SIFT effect
-        QScopedPointer< U2DbiIterator<DamageEffect> >  deIt (dbiSession->getSNPTableDbi()->getDamageEffectsForVariant(var.id, os));
-        QList<DamageEffect> calculatedEffect = U2DbiUtils::toList(deIt.data());
-        CHECK_OP(os, result);
-        result.append(calculatedEffect);
-
-        QList<Gene> genes = SNPTablesUtils::findGenes(seqId, VARIATION_REGION(var), dbiDatabase->getFeatureDbi(), os);
-
-        foreach(const Gene& gene, genes){
-            float curEffect = damageEffectVal(var, seqId, gene, dbiDatabase, complTransl, aaTransl, os);
-            if (curEffect == DAMAGE_EFFECT_UNDEFINED_SCORE){
-                continue;
-            }
-            DamageEffect effect;
-            effect.variant = var.id;
-            effect.affectedGeneName = gene.getName();
-            effect.siftEffectValue = curEffect;
-            result.append(effect);
-
-            dbiSession->getSNPTableDbi()->createDamageEffect(effect, os);
-            CHECK_OP(os, result);
-        }
-
-        //mark as annotated
-        dbiSession->getSNPTableDbi()->markAnnotated(var.id, os);
-        CHECK_OP(os, result);
-    }else{
-        QScopedPointer< U2DbiIterator<DamageEffect> >  deIt (dbiSession->getSNPTableDbi()->getDamageEffectsForVariant(var.id, os));
-        QList<DamageEffect> calculatedEffect = U2DbiUtils::toList(deIt.data());
-        CHECK_OP(os, result);
-        result.append(calculatedEffect);
-    }
-
-    return result;
-}
-
-float SNPTablesUtils::damageEffectVal( const U2Variant& var, const U2DataId& seqId, const Gene& gene, U2Dbi* dbiDatabase, DNATranslation* complTransl, DNATranslation* aaTransl, U2OpStatus& os, SequenceQueryCache* seqCache){
-    float res = DAMAGE_EFFECT_UNDEFINED_SCORE;
-
-    SAFE_POINT(dbiDatabase != NULL, "Database is null", res);
-
-    U2AttributeDbi* attributeDbi = dbiDatabase->getAttributeDbi();
-    SAFE_POINT(attributeDbi != NULL, "Attribute Dbi is null", res);
-
-    U2SequenceDbi* sequenceDbi = dbiDatabase->getSequenceDbi();
-    SAFE_POINT(sequenceDbi != NULL, "sequence Dbi is null", res);
-
-    SAFE_POINT(complTransl != NULL, "No Compl Translations", res);
-    SAFE_POINT(aaTransl != NULL, "No AA Translations",res);
-
-    if(!gene.isCoding()){ //no damage effect for non-protein coding genes
-        return res;
-    }
-    if(!VariationPropertiesUtils::isDamageProtein(var, gene)){
-        return res;
-    }
-    int nuclPos = 0;
-    int aaPos = 0;
-    int codonPos = -1;
-    if(!VariationPropertiesUtils::getFrameStartPositionsForCoding(&nuclPos, &aaPos, &codonPos, var, gene)){
-        return res;
-    }
-
-    QByteArray referenceTriplet;
-    if (seqCache == NULL){
-        referenceTriplet = VariationPropertiesUtils::getDamagedTriplet(gene, nuclPos, seqId, sequenceDbi, os);
-    }else{
-        referenceTriplet = VariationPropertiesUtils::getDamagedTripletBufferedSeq(gene, nuclPos, *seqCache, os);
-    }
-
-    QByteArray observedTriplet = referenceTriplet;
-    if (gene.isComplemented()){
-        complTransl->translate(referenceTriplet.data(), referenceTriplet.size());
-        complTransl->translate(observedTriplet.data(), observedTriplet.size());
-        observedTriplet = VariationPropertiesUtils::varyTriplet(observedTriplet, var, codonPos, complTransl);
-    }else{
-        observedTriplet = VariationPropertiesUtils::varyTriplet(observedTriplet, var, codonPos);
-    }
-    if(observedTriplet.size() != 3){
-        return res;
-    }
-    char damagedAA = aaTransl->translate3to1(observedTriplet[0], observedTriplet[1], observedTriplet[2]);
-
-    U2IntegerAttribute deLenAttribute = U2AttributeUtils::findIntegerAttribute(attributeDbi, gene.getFeatureId(), DAMAGE_EFFECT_LEN_ATTRIBUTE_NAME, os);
-    CHECK_OP(os, res);
-    if(deLenAttribute.hasValidId()) {
-        int matrixLen = deLenAttribute.value;
-        SAFE_POINT(matrixLen >= 0, QString("Damage effect matrix length < 0. Gene: %1").arg(gene.getName()), res);
-
-        U2ByteArrayAttribute deAttribute = U2AttributeUtils::findByteArrayAttribute(attributeDbi, gene.getFeatureId(), DAMAGE_EFFECT_ATTRIBUTE_NAME, os);
-        CHECK_OP(os, res);
-        if(!deAttribute.hasValidId()) {
-            return res;
-        }
-        QByteArray matrixArray = deAttribute.value;
-        res = VariationPropertiesUtils::getDEffectValue(damagedAA, aaPos, matrixArray, matrixLen);
-    }
-
-    return res;
-}
-
-void SNPTablesUtils::calcDamageEffectForTrack( const U2VariantTrack& track, U2Dbi* dbiDatabase, U2Dbi* dbiSession, DNATranslation* complTransl, DNATranslation* aaTransl, U2OpStatus& os ){
-    SAFE_POINT(dbiSession!= NULL, "dbiSession is null", );
-    SAFE_POINT(dbiDatabase!= NULL, "dbiDatabase is null", );
-
-    U2SequenceDbi* sequenceDbi = dbiDatabase->getSequenceDbi();
-    SAFE_POINT(sequenceDbi != NULL, "sequence Dbi is null", );
-
-    U2FeatureDbi* featureDbi = dbiDatabase->getFeatureDbi();
-    SAFE_POINT(featureDbi != NULL, "feature Dbi is null", );
-
-    U2VariantDbi* variantDbi = dbiDatabase->getVariantDbi();
-    SAFE_POINT(variantDbi != NULL, "U2VariantDbi is null", );
-
-    SequenceQueryCache seqCache(sequenceDbi, track.sequence);
-    GeneQueryCache geneCache(featureDbi);
-
-
-    QScopedPointer<U2DbiIterator<U2Variant> >  variantIt(variantDbi->getVariants(track.id, U2_REGION_MAX, os));
-    CHECK_OP(os, );
-    while (variantIt->hasNext()) {
-        U2Variant var = variantIt->next();
-
-        if(0!=dbiSession->getSNPTableDbi()->checkNotAnnotated(var.id, os)){
-            QList<Gene> genes = geneCache.overlappedGenes(VARIATION_REGION(var), track.sequence);
-
-            foreach(const Gene& gene, genes){
-                float curEffect = damageEffectVal(var, track.sequence, gene, dbiDatabase, complTransl, aaTransl, os, &seqCache);
-                if (curEffect == DAMAGE_EFFECT_UNDEFINED_SCORE){
-                    continue;
-                }
-                DamageEffect effect;
-                effect.variant = var.id;
-                effect.affectedGeneName = gene.getName();
-                effect.siftEffectValue = curEffect;
-
-                dbiSession->getSNPTableDbi()->createDamageEffect(effect, os);
-                CHECK_OP(os, );
-            }
-
-            //mark as annotated
-            dbiSession->getSNPTableDbi()->markAnnotated(var.id, os);
-            CHECK_OP(os, );
-        }
-
-    }
-}
-
-QList<Gene> SNPTablesUtils::findRegulatedGenes( const U2DataId& seqId, const U2Region &region, U2FeatureDbi* dbi, U2OpStatus &opStatus, const QList<int>& /*excludeList*/  ){
-    QList<Gene> genes;
-    QList<Gene> curGenes;
-
-    //+ strand
-    curGenes = SNPTablesUtils::findGenes(seqId, U2Region(region.startPos, PROMOTER_LEN), dbi, opStatus);
-    foreach(const Gene& gene, curGenes){
-        if (!gene.isComplemented() && !gene.getRegion().intersects(region)){
-            genes.append(gene);
-        }
-    }
-
-    //- strand
-    curGenes = SNPTablesUtils::findGenes(seqId, U2Region(qMax((qint64)0, region.startPos-PROMOTER_LEN), PROMOTER_LEN), dbi, opStatus);
-    foreach(const Gene& gene, curGenes){
-        if (gene.isComplemented() && !gene.getRegion().intersects(region)){
-            genes.append(gene);
-        }
-    }
-    return genes;
-}
-
-}//namespace
diff --git a/src/corelibs/U2Core/src/util/SyncHttp.cpp b/src/corelibs/U2Core/src/util/SyncHttp.cpp
new file mode 100644
index 0000000..4948929
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/SyncHttp.cpp
@@ -0,0 +1,96 @@
+/**
+ * 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 "util/SyncHttp.h"
+#include <U2Core/U2SafePoints.h>
+#include <QtNetwork/QNetworkRequest>
+#include <QtCore/QTimer>
+
+namespace U2 {
+
+SyncHttp::SyncHttp(U2OpStatus &os, QObject* parent)
+    : QNetworkAccessManager(parent)
+    , loop(NULL)
+    , errString(""),
+    os(os) {
+    connect(this, SIGNAL(finished(QNetworkReply*)), SLOT(finished(QNetworkReply*)));
+}
+
+QString SyncHttp::syncGet(const QUrl& url) {
+    connect(this, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
+    QNetworkRequest request(url);
+    QNetworkReply *reply = get(request);
+    SAFE_POINT(reply != NULL, "SyncHttp::syncGet no reply is created", "");
+    runTimer();
+    if (loop == NULL) {
+        loop = new QEventLoop();
+    }
+    CHECK_OP(os, QString());
+    loop->exec();
+    err = reply->error();
+    errString = reply->errorString();
+    return QString(reply->readAll());
+}
+
+QString SyncHttp::syncPost(const QUrl & url, QIODevice * data) {
+    connect(this, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
+    QNetworkRequest request(url);
+    QNetworkReply *reply = post(request, data);
+    SAFE_POINT(reply != NULL, "SyncHttp::syncGet no reply is created", "");
+    runTimer();
+    if (loop == NULL) {
+        loop = new QEventLoop();
+    }
+    CHECK_OP(os, QString());
+    loop->exec();
+    err = reply->error();
+    errString = reply->errorString();
+    return QString(reply->readAll());
+}
+
+void SyncHttp::finished(QNetworkReply*) {
+    SAFE_POINT(loop != NULL, "SyncHttp::finished no event loop", );
+    loop->exit();
+}
+
+void SyncHttp::onProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth) {
+    auth->setUser(proxy.user());
+    auth->setPassword(proxy.password());
+    disconnect(this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
+}
+
+SyncHttp::~SyncHttp() {
+    delete loop;
+    loop = NULL;
+}
+void SyncHttp::runTimer() {
+    QTimer *timer = new QTimer(this);
+    connect(timer, SIGNAL(timeout()), this, SLOT(sl_taskCancellingCheck()));
+    timer->start(500);
+}
+
+void SyncHttp::sl_taskCancellingCheck() {
+    if (loop != NULL && os.isCanceled()) {
+        loop->exit();
+    }
+}
+
+}  // U2
diff --git a/src/corelibs/U2Core/src/util/SyncHttp.h b/src/corelibs/U2Core/src/util/SyncHttp.h
new file mode 100644
index 0000000..2385298
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/SyncHttp.h
@@ -0,0 +1,61 @@
+/**
+ * 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 __SYNC_HTTP_H__
+#define __SYNC_HTTP_H__
+
+#include <QtNetwork/QNetworkAccessManager>
+#include <QtNetwork/QNetworkReply>
+#include <QtNetwork/QNetworkProxy>
+#include <QtNetwork/QAuthenticator>
+#include <QtCore/QEventLoop>
+
+#include <U2Core/global.h>
+#include <U2Core/U2OpStatus.h>
+
+namespace U2 {
+
+class U2CORE_EXPORT SyncHttp : public QNetworkAccessManager {
+    Q_OBJECT
+public:
+    SyncHttp(U2OpStatus &os, QObject* parent = 0);
+    ~SyncHttp();
+    QString syncGet(const QUrl& url);
+    QString syncPost(const QUrl & url, QIODevice * data);
+    QNetworkReply::NetworkError error() { return err; }
+    QString errorString() { return errString; }
+    protected slots:
+    virtual void finished(QNetworkReply*);
+    virtual void onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*);
+    void sl_taskCancellingCheck();
+
+private:
+    void    runTimer();
+
+    QEventLoop* loop;
+    QNetworkReply::NetworkError err;
+    QString errString;
+    U2OpStatus &os;
+};
+
+} // U2
+
+#endif
diff --git a/src/corelibs/U2Core/src/util/U2SequenceUtils.cpp b/src/corelibs/U2Core/src/util/U2SequenceUtils.cpp
index c2d185c..6621787 100644
--- a/src/corelibs/U2Core/src/util/U2SequenceUtils.cpp
+++ b/src/corelibs/U2Core/src/util/U2SequenceUtils.cpp
@@ -529,7 +529,7 @@ qint64 U2SequenceImporter::getCurrentLength() const {
 }
 
 void U2MemorySequenceImporter::addBlock(const char* data, qint64 len, U2OpStatus& os) {
-    if (qstrlen(data) > len) {
+    if (qstrlen(data) < len) {
         os.setError("Wrong data length in addBlock");
         return;
     }
diff --git a/src/corelibs/U2Core/transl/english.ts b/src/corelibs/U2Core/transl/english.ts
index 5e483ce..c29f4a2 100644
--- a/src/corelibs/U2Core/transl/english.ts
+++ b/src/corelibs/U2Core/transl/english.ts
@@ -2,119 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="en_US">
 <context>
-    <name>GObject</name>
-    <message>
-        <source>Unknown</source>
-        <translation type="vanished">Unknown</translation>
-    </message>
-    <message>
-        <source>Unloaded</source>
-        <translation type="vanished">Unloaded</translation>
-    </message>
-    <message>
-        <source>Text</source>
-        <translation type="vanished">Text</translation>
-    </message>
-    <message>
-        <source>Sequence</source>
-        <translation type="vanished">Sequence</translation>
-    </message>
-    <message>
-        <source>Sequences</source>
-        <translation type="vanished">Sequences</translation>
-    </message>
-    <message>
-        <source>Annotation</source>
-        <translation type="vanished">Annotation</translation>
-    </message>
-    <message>
-        <source>Annotations</source>
-        <translation type="vanished">Annotations</translation>
-    </message>
-    <message>
-        <source>Variation</source>
-        <translation type="vanished">Variation</translation>
-    </message>
-    <message>
-        <source>Variations</source>
-        <translation type="vanished">Variations</translation>
-    </message>
-    <message>
-        <source>Chromatogram</source>
-        <translation type="vanished">Chromatogram</translation>
-    </message>
-    <message>
-        <source>Chromatograms</source>
-        <translation type="vanished">Chromatograms</translation>
-    </message>
-    <message>
-        <source>Alignment</source>
-        <translation type="vanished">Alignment</translation>
-    </message>
-    <message>
-        <source>Alignments</source>
-        <translation type="vanished">Alignments</translation>
-    </message>
-    <message>
-        <source>Tree</source>
-        <translation type="vanished">Tree</translation>
-    </message>
-    <message>
-        <source>Trees</source>
-        <translation type="vanished">Trees</translation>
-    </message>
-    <message>
-        <source>3D model</source>
-        <translation type="vanished">3D model</translation>
-    </message>
-    <message>
-        <source>3D models</source>
-        <translation type="vanished">3D models</translation>
-    </message>
-    <message>
-        <source>Assembly</source>
-        <translation type="vanished">Assembly</translation>
-    </message>
-    <message>
-        <source>Assemblies</source>
-        <translation type="vanished">Assemblies</translation>
-    </message>
-</context>
-<context>
-    <name>L10N</name>
-    <message>
-        <source>Failed to detect IO adapter for %1</source>
-        <translation type="vanished">Failed to detect IO adapter for %1</translation>
-    </message>
-</context>
-<context>
-    <name>MAlignmentObject</name>
-    <message>
-        <source>Unexpected gap start</source>
-        <translation type="vanished">Unexpected gap start</translation>
-    </message>
-    <message>
-        <source>Unexpected gap start (too small)</source>
-        <translation type="vanished">Unexpected gap start (too small)</translation>
-    </message>
-    <message>
-        <source>Unexpected gap start (too big)</source>
-        <translation type="vanished">Unexpected gap start (too big)</translation>
-    </message>
-    <message>
-        <source> Incorrect gap splitting</source>
-        <translation type="vanished"> Incorrect gap splitting</translation>
-    </message>
-    <message>
-        <source> Alignment walker is ended</source>
-        <translation type="vanished"> Alignment walker is ended</translation>
-    </message>
-    <message>
-        <source> Alignment changed</source>
-        <translation type="vanished"> Alignment changed</translation>
-    </message>
-</context>
-<context>
     <name>QObject</name>
     <message>
         <location filename="../src/tasks/LoadRemoteDocumentTask.cpp" line="525"/>
@@ -167,9 +54,7 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/util/FormatUtils.cpp" line="139"/>
-        <location filename="../src/util/FormatUtils.cpp" line="178"/>
-        <location filename="../src/util/FormatUtils.cpp" line="197"/>
+        <location filename="../src/util/FormatUtils.cpp" line="123"/>
         <source>All files</source>
         <translation>All files</translation>
     </message>
@@ -179,14 +64,14 @@
         <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="593"/>
-        <location filename="../src/datatype/Annotation.cpp" line="596"/>
+        <location filename="../src/datatype/Annotation.cpp" line="607"/>
+        <location filename="../src/datatype/Annotation.cpp" line="610"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/datatype/Annotation.cpp" line="604"/>
-        <location filename="../src/datatype/Annotation.cpp" line="607"/>
+        <location filename="../src/datatype/Annotation.cpp" line="618"/>
+        <location filename="../src/datatype/Annotation.cpp" line="621"/>
         <source>Translation</source>
         <translation>Translation</translation>
     </message>
@@ -740,25 +625,6 @@
     </message>
 </context>
 <context>
-    <name>U2::AddSequencesToAlignmentTask</name>
-    <message>
-        <source>Object is empty.</source>
-        <translation type="vanished">Object is empty.</translation>
-    </message>
-    <message>
-        <source>Object is locked for modifications.</source>
-        <translation type="vanished">Object is locked for modifications.</translation>
-    </message>
-    <message>
-        <source>Some sequences have wrong alphabet: </source>
-        <translation type="vanished">Some sequences have wrong alphabet: </translation>
-    </message>
-    <message>
-        <source> and others</source>
-        <translation type="vanished"> and others</translation>
-    </message>
-</context>
-<context>
     <name>U2::AppResourcePool</name>
     <message>
         <location filename="../src/globals/AppResources.cpp" line="56"/>
@@ -784,7 +650,7 @@
 <context>
     <name>U2::AutoAnnotationsSupport</name>
     <message>
-        <location filename="../src/globals/AutoAnnotationsSupport.cpp" line="106"/>
+        <location filename="../src/globals/AutoAnnotationsSupport.cpp" line="112"/>
         <source>Auto-annotations [%1 | %2]</source>
         <translation>Auto-annotations [%1 | %2]</translation>
     </message>
@@ -792,7 +658,7 @@
 <context>
     <name>U2::AutoAnnotationsUpdateTask</name>
     <message>
-        <location filename="../src/globals/AutoAnnotationsSupport.cpp" line="284"/>
+        <location filename="../src/globals/AutoAnnotationsSupport.cpp" line="305"/>
         <source>Empty auto-annotation object</source>
         <translation>Empty auto-annotation object</translation>
     </message>
@@ -913,6 +779,52 @@ The session database file is removed after closing of UGENE.</translation>
     </message>
 </context>
 <context>
+    <name>U2::CmdlineInOutTaskRunner</name>
+    <message>
+        <location filename="../src/tasks/CmdlineInOutTaskRunner.cpp" line="73"/>
+        <source>An error occurred during the task. See the log for details.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineInOutTaskRunner.cpp" line="93"/>
+        <source>Wrong database string: </source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::CmdlineTaskRunner</name>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="99"/>
+        <source>Run UGENE command line: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="135"/>
+        <source>Cannot start process '%1'</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="205"/>
+        <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="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="209"/>
+        <source>The process '%1' crashed some time after starting successfully</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="213"/>
+        <source>Error occurred while reading from or writing to channel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="216"/>
+        <source>Unknown error occurred</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::ComplementSequenceTask</name>
     <message>
         <location filename="../src/tasks/ReverseSequenceTask.cpp" line="142"/>
@@ -957,36 +869,6 @@ The session database file is removed after closing of UGENE.</translation>
     </message>
 </context>
 <context>
-    <name>U2::ConvertDasIdTask</name>
-    <message>
-        <source>Convert resource id: %1</source>
-        <translation type="vanished">Convert resource id: %1</translation>
-    </message>
-    <message>
-        <source>undefined error (code %1)</source>
-        <translation type="vanished">undefined error (code %1)</translation>
-    </message>
-    <message>
-        <source>Remote server does not respond</source>
-        <translation type="vanished">Remote server does not respond</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ConvertIdAndLoadDasFeaturesTask</name>
-    <message>
-        <source>Convert ID and load DAS features for: %1</source>
-        <translation type="vanished">Convert ID and load DAS features for: %1</translation>
-    </message>
-    <message>
-        <source>Convert IDs task</source>
-        <translation type="vanished">Convert IDs task</translation>
-    </message>
-    <message>
-        <source>"%1" was converted into "%2"</source>
-        <translation type="vanished">"%1" was converted into "%2"</translation>
-    </message>
-</context>
-<context>
     <name>U2::CopyDataTask</name>
     <message>
         <location filename="../src/tasks/CopyDataTask.cpp" line="33"/>
@@ -1026,103 +908,6 @@ The session database file is removed after closing of UGENE.</translation>
     </message>
 </context>
 <context>
-    <name>U2::DASSourceRegistry</name>
-    <message>
-        <source>UniProt (DAS)</source>
-        <translation type="vanished">UniProt (DAS)</translation>
-    </message>
-    <message>
-        <source>http://www.ebi.ac.uk/das-srv/uniprot/das/uniprot/</source>
-        <translation type="vanished">http://www.ebi.ac.uk/das-srv/uniprot/das/uniprot/</translation>
-    </message>
-    <message>
-        <source>Use Swiss-Prot, TrEMBL, UniProt, IPI or UniParc accession number. For example: %1</source>
-        <translation type="vanished">Use Swiss-Prot, TrEMBL, UniProt, IPI or UniParc accession number. For example: %1</translation>
-    </message>
-    <message>
-        <source>UniProt database of protein sequences and features.</source>
-        <translation type="vanished">UniProt database of protein sequences and features.</translation>
-    </message>
-    <message>
-        <source>UniProt</source>
-        <translation type="vanished">UniProt</translation>
-    </message>
-    <message>
-        <source>DAS 1 reference server for sequence and features from UniProt.
-UniProt (Universal Protein Resource) is the worlds most comprehensive catalog of information on proteins.
-It is a central repository of protein sequence and function created by joining the information contained
-in Swiss-Prot, TrEMBL, and PIR.</source>
-        <translation type="vanished">DAS 1 reference server for sequence and features from UniProt.
-UniProt (Universal Protein Resource) is the worlds most comprehensive catalog of information on proteins.
-It is a central repository of protein sequence and function created by joining the information contained
-in Swiss-Prot, TrEMBL, and PIR.</translation>
-    </message>
-    <message>
-        <source>Pride DAS 1.6</source>
-        <translation type="vanished">Pride DAS 1.6</translation>
-    </message>
-    <message>
-        <source>http://www.ebi.ac.uk/pride-das/das/PrideDataSource/</source>
-        <translation type="vanished">http://www.ebi.ac.uk/pride-das/das/PrideDataSource/</translation>
-    </message>
-    <message>
-        <source>The PRIDE database is a centralized, public data repository for proteomics data. 
-It has been developed to provide the proteomics community with a public repository 
-for protein and peptide identifications together with the evidence supporting these 
-identifications. In addition to identifications, PRIDE is able to capture details of 
-post-translational modifications coordinated relative to the peptides in which they have been found.</source>
-        <translation type="vanished">The PRIDE database is a centralized, public data repository for proteomics data. 
-It has been developed to provide the proteomics community with a public repository 
-for protein and peptide identifications together with the evidence supporting these 
-identifications. In addition to identifications, PRIDE is able to capture details of 
-post-translational modifications coordinated relative to the peptides in which they have been found.</translation>
-    </message>
-    <message>
-        <source>cbs_sort</source>
-        <translation type="vanished">cbs_sort</translation>
-    </message>
-    <message>
-        <source>http://das.cbs.dtu.dk:9000/das/cbs_sort/</source>
-        <translation type="vanished">http://das.cbs.dtu.dk:9000/das/cbs_sort/</translation>
-    </message>
-    <message>
-        <source>The combined result of the signalp, secretomep, targetp, netnes & lipop server for the given id.</source>
-        <translation type="vanished">The combined result of the signalp, secretomep, targetp, netnes & lipop server for the given id.</translation>
-    </message>
-    <message>
-        <source>signalp</source>
-        <translation type="vanished">signalp</translation>
-    </message>
-    <message>
-        <source>http://das.cbs.dtu.dk:9000/das/signalp/</source>
-        <translation type="vanished">http://das.cbs.dtu.dk:9000/das/signalp/</translation>
-    </message>
-    <message>
-        <source>SignalP (http://www.cbs.dtu.dk/services/SignalP) predictions for UniProt.</source>
-        <translation type="vanished">SignalP (http://www.cbs.dtu.dk/services/SignalP) predictions for UniProt.</translation>
-    </message>
-    <message>
-        <source>InterPro-Matches-Overview</source>
-        <translation type="vanished">InterPro-Matches-Overview</translation>
-    </message>
-    <message>
-        <source>http://www.ebi.ac.uk/das-srv/interpro/das/InterPro-matches-overview/</source>
-        <translation type="vanished">http://www.ebi.ac.uk/das-srv/interpro/das/InterPro-matches-overview/</translation>
-    </message>
-    <message>
-        <source>Shows the maximum extent of the matches from all signatures that are 
-integrated into a single InterPro entry against UniProtKB protein sequences 
-(i.e. if an InterPro entry contains 2 signatures, A and B, and both of 
-these match a protein, A between residue 3 and 125 and B between residue 
-5 and 127, the overview supermatch of these signatures is between 3 and 127).</source>
-        <translation type="vanished">Shows the maximum extent of the matches from all signatures that are 
-integrated into a single InterPro entry against UniProtKB protein sequences 
-(i.e. if an InterPro entry contains 2 signatures, A and B, and both of 
-these match a protein, A between residue 3 and 125 and B between residue 
-5 and 127, the overview supermatch of these signatures is between 3 and 127).</translation>
-    </message>
-</context>
-<context>
     <name>U2::DBXRefRegistry</name>
     <message>
         <location filename="../src/globals/DBXRefRegistry.cpp" line="42"/>
@@ -1138,13 +923,9 @@ these match a protein, A between residue 3 and 125 and B between residue
 <context>
     <name>U2::DNAAlphabetRegistryImpl</name>
     <message>
-        <source>All symbols</source>
-        <translation type="vanished">All symbols</translation>
-    </message>
-    <message>
         <location filename="../src/datatype/BaseAlphabets.cpp" line="63"/>
         <source>Raw</source>
-        <translation type="unfinished"></translation>
+        <translation>Raw</translation>
     </message>
     <message>
         <location filename="../src/datatype/BaseAlphabets.cpp" line="71"/>
@@ -1169,20 +950,12 @@ these match a protein, A between residue 3 and 125 and B between residue
     <message>
         <location filename="../src/datatype/BaseAlphabets.cpp" line="114"/>
         <source>Standard amino acid</source>
-        <translation type="unfinished"></translation>
+        <translation>Standard amino acid</translation>
     </message>
     <message>
         <location filename="../src/datatype/BaseAlphabets.cpp" line="133"/>
         <source>Extended amino acid</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Standard amino</source>
-        <translation type="vanished">Standard amino</translation>
-    </message>
-    <message>
-        <source>Extended amino</source>
-        <translation type="vanished">Extended amino</translation>
+        <translation>Extended amino acid</translation>
     </message>
     <message>
         <location filename="../src/datatype/BaseTranslations.cpp" line="270"/>
@@ -1491,27 +1264,27 @@ these match a protein, A between residue 3 and 125 and B between residue
 <context>
     <name>U2::Document</name>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="546"/>
+        <location filename="../src/models/DocumentModel.cpp" line="550"/>
         <source>Document is not loaded</source>
         <translation>Document is not loaded</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="559"/>
+        <location filename="../src/models/DocumentModel.cpp" line="563"/>
         <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="565"/>
+        <location filename="../src/models/DocumentModel.cpp" line="569"/>
         <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="635"/>
+        <location filename="../src/models/DocumentModel.cpp" line="639"/>
         <source>Locked by user</source>
         <translation>Locked by user</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="659"/>
+        <location filename="../src/models/DocumentModel.cpp" line="663"/>
         <source>Lock is NULL</source>
         <translation>Lock is NULL</translation>
     </message>
@@ -1554,27 +1327,27 @@ these match a protein, A between residue 3 and 125 and B between residue
         <translation> tool</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="114"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="115"/>
         <source>Can not run %1 tool.</source>
         <translation>Can not run %1 tool.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="116"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="117"/>
         <source>Can not run %1 tool. May be tool path '%2' not valid?</source>
         <translation>Can not run %1 tool. May be tool path '%2' not valid?</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="125"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="126"/>
         <source>Tool %1 is cancelled</source>
-        <translation type="unfinished"></translation>
+        <translation>Tool %1 is cancelled</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="133"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="139"/>
         <source>%1 tool exited with code %2</source>
         <translation>%1 tool exited with code %2</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="135"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="141"/>
         <source>Tool %1 finished successfully</source>
         <translation>Tool %1 finished successfully</translation>
     </message>
@@ -1582,47 +1355,47 @@ these match a protein, A between residue 3 and 125 and B between residue
 <context>
     <name>U2::ExternalToolSupportUtils</name>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="329"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="348"/>
         <source>Can not remove temporary directory: path is empty.</source>
         <translation>Can not remove temporary directory: path is empty.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="335"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="354"/>
         <source>Can not remove files from temporary directory.</source>
         <translation>Can not remove files from temporary directory.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="340"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="359"/>
         <source>Can not remove directory for temporary files.</source>
         <translation>Can not remove directory for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="353"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="372"/>
         <source>Can not create directory for temporary files: %1</source>
         <translation>Can not create directory for temporary files: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="384"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="403"/>
         <source>Can't run an executable file "%1" as it is. Try to run it as a cmd line command: "%2"</source>
         <translation>Can't run an executable file "%1" as it is. Try to run it as a cmd line command: "%2"</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="400"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="419"/>
         <source>Undefined tool: '%1'</source>
         <translation>Undefined tool: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="404"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="423"/>
         <source>Path for '%1' tool not set</source>
         <translation>Path for '%1' tool not set</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="448"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="467"/>
         <source>Working directory is "%1"</source>
         <translation>Working directory is "%1"</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="457"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="476"/>
         <source>Launching %1 tool: %2 %3</source>
         <translation>Launching %1 tool: %2 %3</translation>
     </message>
@@ -1805,17 +1578,6 @@ these match a protein, A between residue 3 and 125 and B between residue
     </message>
 </context>
 <context>
-    <name>U2::GetDasIdsBySequenceTask</name>
-    <message>
-        <source>Get an ID for the sequence</source>
-        <translation type="vanished">Get an ID for the sequence</translation>
-    </message>
-    <message>
-        <source>undefined error (code %1)</source>
-        <translation type="vanished">undefined error (code %1)</translation>
-    </message>
-</context>
-<context>
     <name>U2::GzippedHttpFileAdapterFactory</name>
     <message>
         <location filename="../src/io/HttpFileAdapter.cpp" line="52"/>
@@ -2190,59 +1952,6 @@ these match a protein, A between residue 3 and 125 and B between residue
     </message>
 </context>
 <context>
-    <name>U2::LoadDasDocumentTask</name>
-    <message>
-        <source>Cannot load cached document: %1</source>
-        <translation type="vanished">Cannot load cached document: %1</translation>
-    </message>
-    <message>
-        <source>Cannot save document: %1</source>
-        <translation type="vanished">Cannot save document: %1</translation>
-    </message>
-    <message>
-        <source>Cannot find DAS reference sequence: %1</source>
-        <translation type="vanished">Cannot find DAS reference sequence: %1</translation>
-    </message>
-    <message>
-        <source>Cannot find DAS features for '%1' on %2</source>
-        <translation type="vanished">Cannot find DAS features for '%1' on %2</translation>
-    </message>
-</context>
-<context>
-    <name>U2::LoadDasFeaturesTask</name>
-    <message>
-        <source>Load DAS annotations for current sequence</source>
-        <translation type="vanished">Load DAS annotations for current sequence</translation>
-    </message>
-    <message>
-        <source>Can not receive response from the server "</source>
-        <translation type="vanished">Can not receive response from the server</translation>
-    </message>
-    <message>
-        <source><font size="5" color="green">Received %1 annotations from the server "%2"</font><br></source>
-        <translation type="vanished"><font size="5" color="green">Received %1 annotations from the server "%2"</font><br></translation>
-    </message>
-</context>
-<context>
-    <name>U2::LoadDasObjectTask</name>
-    <message>
-        <source>Load DAS data for '%1' from %2</source>
-        <translation type="vanished">Load DAS data for '%1' from %2</translation>
-    </message>
-    <message>
-        <source>Sequence with ID=%1 is not found.</source>
-        <translation type="vanished">Sequence with ID=%1 is not found.</translation>
-    </message>
-    <message>
-        <source>undefined error (code %1)</source>
-        <translation type="vanished">undefined error (code %1)</translation>
-    </message>
-    <message>
-        <source>Remote server does not respond</source>
-        <translation type="vanished">Remote server does not respond</translation>
-    </message>
-</context>
-<context>
     <name>U2::LoadDataFromEntrezTask</name>
     <message>
         <location filename="../src/tasks/LoadRemoteDocumentTask.cpp" line="424"/>
@@ -2253,43 +1962,43 @@ these match a protein, A between residue 3 and 125 and B between residue
 <context>
     <name>U2::LoadDocumentTask</name>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="227"/>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="242"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="230"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="245"/>
         <source>Read document: '%1'</source>
         <translation>Read document: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="263"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="266"/>
         <source>Document format is NULL!</source>
         <translation>Document format is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="264"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="267"/>
         <source>IO adapter factory is NULL!</source>
         <translation>IO adapter factory is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="444"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="447"/>
         <source>Document not found %1</source>
         <translation>Document not found %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="464"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="467"/>
         <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="480"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="483"/>
         <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="510"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="513"/>
         <source>Object not found: %1</source>
         <translation>Object not found: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="517"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="520"/>
         <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>
@@ -2335,12 +2044,12 @@ these match a protein, A between residue 3 and 125 and B between residue
         <translation>Document is locked</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="179"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="182"/>
         <source>Project Document:</source>
         <translation>Project Document:</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="197"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="200"/>
         <source>Annotation object not found</source>
         <translation>Annotation object not found</translation>
     </message>
@@ -2496,7 +2205,7 @@ these match a protein, A between residue 3 and 125 and B between residue
     <message>
         <location filename="../src/globals/ClipboardController.cpp" line="38"/>
         <source>Paste data</source>
-        <translation type="unfinished"></translation>
+        <translation>Paste data</translation>
     </message>
 </context>
 <context>
@@ -2544,29 +2253,6 @@ these match a protein, A between residue 3 and 125 and B between residue
     </message>
 </context>
 <context>
-    <name>U2::ReplyHandler</name>
-    <message>
-        <source>Can't receive result from the server: nothing to download</source>
-        <translation type="vanished">Can't receive result from the server: nothing to download</translation>
-    </message>
-    <message>
-        <source>Unexpected server response</source>
-        <translation type="vanished">Unexpected server response</translation>
-    </message>
-    <message>
-        <source>undefined error (code %1)</source>
-        <translation type="vanished">undefined error (code %1)</translation>
-    </message>
-    <message>
-        <source>Network error: %1</source>
-        <translation type="vanished">Network error: %1</translation>
-    </message>
-    <message>
-        <source>Remote server doesn't respond</source>
-        <translation type="vanished">Remote server doesn't respond</translation>
-    </message>
-</context>
-<context>
     <name>U2::ResourceTracker</name>
     <message>
         <location filename="../src/globals/ResourceTracker.cpp" line="39"/>
@@ -2728,7 +2414,7 @@ UGENE contains unsaved modifications.</translation>
 <context>
     <name>U2::SequenceDbiWalkerSubtask</name>
     <message>
-        <location filename="../src/tasks/SequenceDbiWalkerTask.cpp" line="135"/>
+        <location filename="../src/tasks/SequenceDbiWalkerTask.cpp" line="140"/>
         <source>Sequence walker subtask</source>
         <translation>Sequence walker subtask</translation>
     </message>
@@ -2941,39 +2627,9 @@ UGENE contains unsaved modifications.</translation>
     </message>
 </context>
 <context>
-    <name>U2::UniprotBlastAndLoadDASAnnotations</name>
-    <message>
-        <source>BLAST IDs and DAS annotations</source>
-        <translation type="vanished">BLAST IDs and DAS annotations</translation>
-    </message>
-    <message>
-        <source>Server "%1" is not available!</source>
-        <translation type="vanished">Server "%1" is not available!</translation>
-    </message>
-</context>
-<context>
-    <name>U2::UniprotBlastTask</name>
-    <message>
-        <source>Get an ID for the sequence</source>
-        <translation type="vanished">Get an ID for the sequence</translation>
-    </message>
-    <message>
-        <source>Reply from the BLAST server is empty. Similar sequences not found</source>
-        <translation type="vanished">Reply from the BLAST server is empty. Similar sequences not found</translation>
-    </message>
-    <message>
-        <source>An empty sequence is searched</source>
-        <translation type="vanished">An empty sequence is searched</translation>
-    </message>
-    <message>
-        <source>Settings are invalid</source>
-        <translation type="vanished">Settings are invalid</translation>
-    </message>
-</context>
-<context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/globals/UserApplicationsSettings.cpp" line="79"/>
+        <location filename="../src/globals/UserApplicationsSettings.cpp" line="81"/>
         <source>Cleaning temp dir: %1</source>
         <translation>Cleaning temp dir: %1</translation>
     </message>
diff --git a/src/corelibs/U2Core/transl/russian.ts b/src/corelibs/U2Core/transl/russian.ts
index 2e48e90..3df1eed 100644
--- a/src/corelibs/U2Core/transl/russian.ts
+++ b/src/corelibs/U2Core/transl/russian.ts
@@ -2,119 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="ru">
 <context>
-    <name>GObject</name>
-    <message>
-        <source>Unknown</source>
-        <translation type="vanished">Неизвестный тип</translation>
-    </message>
-    <message>
-        <source>Unloaded</source>
-        <translation type="vanished">Не загруженный</translation>
-    </message>
-    <message>
-        <source>Text</source>
-        <translation type="vanished">Текст</translation>
-    </message>
-    <message>
-        <source>Sequence</source>
-        <translation type="vanished">Последовательность</translation>
-    </message>
-    <message>
-        <source>Sequences</source>
-        <translation type="vanished">Последовательности</translation>
-    </message>
-    <message>
-        <source>Annotation</source>
-        <translation type="vanished">Аннотация</translation>
-    </message>
-    <message>
-        <source>Annotations</source>
-        <translation type="vanished">Аннотации</translation>
-    </message>
-    <message>
-        <source>Variation</source>
-        <translation type="vanished">Вариация</translation>
-    </message>
-    <message>
-        <source>Variations</source>
-        <translation type="vanished">Вариации</translation>
-    </message>
-    <message>
-        <source>Chromatogram</source>
-        <translation type="vanished">Хроматограмма</translation>
-    </message>
-    <message>
-        <source>Chromatograms</source>
-        <translation type="vanished">Хроматограммы</translation>
-    </message>
-    <message>
-        <source>Alignment</source>
-        <translation type="vanished">Выравнивание</translation>
-    </message>
-    <message>
-        <source>Alignments</source>
-        <translation type="vanished">Выравнивания</translation>
-    </message>
-    <message>
-        <source>Tree</source>
-        <translation type="vanished">Дерево</translation>
-    </message>
-    <message>
-        <source>Trees</source>
-        <translation type="vanished">Деревья</translation>
-    </message>
-    <message>
-        <source>3D model</source>
-        <translation type="vanished">3D модель</translation>
-    </message>
-    <message>
-        <source>3D models</source>
-        <translation type="vanished">3D модели</translation>
-    </message>
-    <message>
-        <source>Assembly</source>
-        <translation type="vanished">Сборка</translation>
-    </message>
-    <message>
-        <source>Assemblies</source>
-        <translation type="vanished">Сборки</translation>
-    </message>
-</context>
-<context>
-    <name>L10N</name>
-    <message>
-        <source>Failed to detect IO adapter for %1</source>
-        <translation type="vanished">Невозможно определить IO адаптер для %1</translation>
-    </message>
-</context>
-<context>
-    <name>MAlignmentObject</name>
-    <message>
-        <source>Unexpected gap start</source>
-        <translation type="vanished">Unexpected gap start</translation>
-    </message>
-    <message>
-        <source>Unexpected gap start (too small)</source>
-        <translation type="vanished">Unexpected gap start (too small)</translation>
-    </message>
-    <message>
-        <source>Unexpected gap start (too big)</source>
-        <translation type="vanished">Unexpected gap start (too big)</translation>
-    </message>
-    <message>
-        <source> Incorrect gap splitting</source>
-        <translation type="vanished"> Incorrect gap splitting</translation>
-    </message>
-    <message>
-        <source> Alignment walker is ended</source>
-        <translation type="vanished"> Alignment walker is ended</translation>
-    </message>
-    <message>
-        <source> Alignment changed</source>
-        <translation type="vanished"> Alignment changed</translation>
-    </message>
-</context>
-<context>
     <name>QObject</name>
     <message>
         <location filename="../src/tasks/LoadRemoteDocumentTask.cpp" line="525"/>
@@ -167,9 +54,7 @@
         <translation>Исплользуйте уникальный идентификатор %1.</translation>
     </message>
     <message>
-        <location filename="../src/util/FormatUtils.cpp" line="139"/>
-        <location filename="../src/util/FormatUtils.cpp" line="178"/>
-        <location filename="../src/util/FormatUtils.cpp" line="197"/>
+        <location filename="../src/util/FormatUtils.cpp" line="123"/>
         <source>All files</source>
         <translation>Все файлы</translation>
     </message>
@@ -179,14 +64,14 @@
         <translation>Загруженные последовательности имеют разные алфавиты. Поэтому создано несколько объектов типа последовательность для каждого алфавита. Все последовательности одного объекта имеют одинаковый афлфавит и последовательности из разных объектов имеют разные алфавиты.</translation>
     </message>
     <message>
-        <location filename="../src/datatype/Annotation.cpp" line="593"/>
-        <location filename="../src/datatype/Annotation.cpp" line="596"/>
+        <location filename="../src/datatype/Annotation.cpp" line="607"/>
+        <location filename="../src/datatype/Annotation.cpp" line="610"/>
         <source>Sequence</source>
         <translation>Последовательность</translation>
     </message>
     <message>
-        <location filename="../src/datatype/Annotation.cpp" line="604"/>
-        <location filename="../src/datatype/Annotation.cpp" line="607"/>
+        <location filename="../src/datatype/Annotation.cpp" line="618"/>
+        <location filename="../src/datatype/Annotation.cpp" line="621"/>
         <source>Translation</source>
         <translation>Трансляция</translation>
     </message>
@@ -740,25 +625,6 @@
     </message>
 </context>
 <context>
-    <name>U2::AddSequencesToAlignmentTask</name>
-    <message>
-        <source>Object is empty.</source>
-        <translation type="vanished">Объект пуст.</translation>
-    </message>
-    <message>
-        <source>Object is locked for modifications.</source>
-        <translation type="vanished">Объект заблокирован для редактирования.</translation>
-    </message>
-    <message>
-        <source>Some sequences have wrong alphabet: </source>
-        <translation type="vanished">Некоторые последовательности имеют неправильный алфавит: </translation>
-    </message>
-    <message>
-        <source> and others</source>
-        <translation type="vanished"> и другие</translation>
-    </message>
-</context>
-<context>
     <name>U2::AppResourcePool</name>
     <message>
         <location filename="../src/globals/AppResources.cpp" line="56"/>
@@ -784,7 +650,7 @@
 <context>
     <name>U2::AutoAnnotationsSupport</name>
     <message>
-        <location filename="../src/globals/AutoAnnotationsSupport.cpp" line="106"/>
+        <location filename="../src/globals/AutoAnnotationsSupport.cpp" line="112"/>
         <source>Auto-annotations [%1 | %2]</source>
         <translation>Автоаннотации [%1 | %2]</translation>
     </message>
@@ -792,7 +658,7 @@
 <context>
     <name>U2::AutoAnnotationsUpdateTask</name>
     <message>
-        <location filename="../src/globals/AutoAnnotationsSupport.cpp" line="284"/>
+        <location filename="../src/globals/AutoAnnotationsSupport.cpp" line="305"/>
         <source>Empty auto-annotation object</source>
         <translation>Объект автоаннотации пуст</translation>
     </message>
@@ -913,6 +779,52 @@ The session database file is removed after closing of UGENE.</source>
     </message>
 </context>
 <context>
+    <name>U2::CmdlineInOutTaskRunner</name>
+    <message>
+        <location filename="../src/tasks/CmdlineInOutTaskRunner.cpp" line="73"/>
+        <source>An error occurred during the task. See the log for details.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineInOutTaskRunner.cpp" line="93"/>
+        <source>Wrong database string: </source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::CmdlineTaskRunner</name>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="99"/>
+        <source>Run UGENE command line: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="135"/>
+        <source>Cannot start process '%1'</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="205"/>
+        <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="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="209"/>
+        <source>The process '%1' crashed some time after starting successfully</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="213"/>
+        <source>Error occurred while reading from or writing to channel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="216"/>
+        <source>Unknown error occurred</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::ComplementSequenceTask</name>
     <message>
         <location filename="../src/tasks/ReverseSequenceTask.cpp" line="142"/>
@@ -957,36 +869,6 @@ The session database file is removed after closing of UGENE.</source>
     </message>
 </context>
 <context>
-    <name>U2::ConvertDasIdTask</name>
-    <message>
-        <source>Convert resource id: %1</source>
-        <translation type="vanished">Способ конвертации: %1</translation>
-    </message>
-    <message>
-        <source>undefined error (code %1)</source>
-        <translation type="vanished">undefined error (code %1)</translation>
-    </message>
-    <message>
-        <source>Remote server does not respond</source>
-        <translation type="vanished">Удаленный сервер не отвечает</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ConvertIdAndLoadDasFeaturesTask</name>
-    <message>
-        <source>Convert ID and load DAS features for: %1</source>
-        <translation type="vanished">Convert ID and load DAS features for: %1</translation>
-    </message>
-    <message>
-        <source>Convert IDs task</source>
-        <translation type="vanished">Convert IDs task</translation>
-    </message>
-    <message>
-        <source>"%1" was converted into "%2"</source>
-        <translation type="vanished">"%1" was converted into "%2"</translation>
-    </message>
-</context>
-<context>
     <name>U2::CopyDataTask</name>
     <message>
         <location filename="../src/tasks/CopyDataTask.cpp" line="33"/>
@@ -1026,104 +908,6 @@ The session database file is removed after closing of UGENE.</source>
     </message>
 </context>
 <context>
-    <name>U2::DASSourceRegistry</name>
-    <message>
-        <source>UniProt (DAS)</source>
-        <translation type="vanished">UniProt (DAS)</translation>
-    </message>
-    <message>
-        <source>http://www.ebi.ac.uk/das-srv/uniprot/das/uniprot/</source>
-        <translation type="vanished">http://www.ebi.ac.uk/das-srv/uniprot/das/uniprot/</translation>
-    </message>
-    <message>
-        <source>Use Swiss-Prot, TrEMBL, UniProt, IPI or UniParc accession number. For example: %1</source>
-        <translation type="vanished">Используйте Swiss-Prot, TrEMBL, UniProt, IPI или UniParc Accession Number. Например: %1</translation>
-    </message>
-    <message>
-        <source>UniProt database of protein sequences and features.</source>
-        <translation type="vanished">База данных UniProt белковых последовательностей и их функций.</translation>
-    </message>
-    <message>
-        <source>UniProt</source>
-        <translation type="vanished">UniProt</translation>
-    </message>
-    <message>
-        <source>DAS 1 reference server for sequence and features from UniProt.
-UniProt (Universal Protein Resource) is the worlds most comprehensive catalog of information on proteins.
-It is a central repository of protein sequence and function created by joining the information contained
-in Swiss-Prot, TrEMBL, and PIR.</source>
-        <translation type="vanished">DAS 1 референсный сервер для последовательностей и аннотаций из UniProt.
-UniProt (Universal Protein Resource) это наиболее полный каталог информации о белках.
-Он является центральным хранилищем последовательностей и аннотаций, 
-созданный путем соединения информации содержащейся в Swiss-Prot, TrEMBL, и PIR.
-</translation>
-    </message>
-    <message>
-        <source>Pride DAS 1.6</source>
-        <translation type="vanished">Pride DAS 1.6</translation>
-    </message>
-    <message>
-        <source>http://www.ebi.ac.uk/pride-das/das/PrideDataSource/</source>
-        <translation type="vanished">http://www.ebi.ac.uk/pride-das/das/PrideDataSource/</translation>
-    </message>
-    <message>
-        <source>The PRIDE database is a centralized, public data repository for proteomics data. 
-It has been developed to provide the proteomics community with a public repository 
-for protein and peptide identifications together with the evidence supporting these 
-identifications. In addition to identifications, PRIDE is able to capture details of 
-post-translational modifications coordinated relative to the peptides in which they have been found.</source>
-        <translation type="vanished">База данных PRIDE database это централизованное публичное хранилище данных для данных протеомики. 
-Она была разработана чтобы обеспечить пользователей публичным хранилищем 
-для протеиновых и пептидных идентификаторов совместно с поддержкой этих идентификаторов. 
-Кроме этого PRIDE предоставояет детали о пост-трансляционных модификациях согласованных 
-по отношению к пептидам, в которых они были найдены.</translation>
-    </message>
-    <message>
-        <source>cbs_sort</source>
-        <translation type="vanished">cbs_sort</translation>
-    </message>
-    <message>
-        <source>http://das.cbs.dtu.dk:9000/das/cbs_sort/</source>
-        <translation type="vanished">http://das.cbs.dtu.dk:9000/das/cbs_sort/</translation>
-    </message>
-    <message>
-        <source>The combined result of the signalp, secretomep, targetp, netnes & lipop server for the given id.</source>
-        <translation type="vanished">Совокупный результат из signalp, secretomep, targetp, netnes и lipop сервера для данного id.</translation>
-    </message>
-    <message>
-        <source>signalp</source>
-        <translation type="vanished">signalp</translation>
-    </message>
-    <message>
-        <source>http://das.cbs.dtu.dk:9000/das/signalp/</source>
-        <translation type="vanished">http://das.cbs.dtu.dk:9000/das/signalp/</translation>
-    </message>
-    <message>
-        <source>SignalP (http://www.cbs.dtu.dk/services/SignalP) predictions for UniProt.</source>
-        <translation type="vanished">SignalP (http://www.cbs.dtu.dk/services/SignalP) опреления для UniProt.</translation>
-    </message>
-    <message>
-        <source>InterPro-Matches-Overview</source>
-        <translation type="vanished">InterPro-Matches-Overview</translation>
-    </message>
-    <message>
-        <source>http://www.ebi.ac.uk/das-srv/interpro/das/InterPro-matches-overview/</source>
-        <translation type="vanished">http://www.ebi.ac.uk/das-srv/interpro/das/InterPro-matches-overview/</translation>
-    </message>
-    <message>
-        <source>Shows the maximum extent of the matches from all signatures that are 
-integrated into a single InterPro entry against UniProtKB protein sequences 
-(i.e. if an InterPro entry contains 2 signatures, A and B, and both of 
-these match a protein, A between residue 3 and 125 and B between residue 
-5 and 127, the overview supermatch of these signatures is between 3 and 127).</source>
-        <translation type="vanished">Показывает максимальную степень совпадения от всех подписей, которые
-интегрированы в единую запись InterPro для белковых последовательностей UniProtKB 
-(т.е. если запись InterPro содержит 2 подписи, A и B, и они обе соотвествуют белку, 
-A между остатком 3 и 125 и B между остатком 5 and 127, 
-то суммарное совпадение этих подписей будет между 3 и 127).</translation>
-    </message>
-</context>
-<context>
     <name>U2::DBXRefRegistry</name>
     <message>
         <location filename="../src/globals/DBXRefRegistry.cpp" line="42"/>
@@ -1139,13 +923,9 @@ A между остатком 3 и 125 и B между остатком 5 and 12
 <context>
     <name>U2::DNAAlphabetRegistryImpl</name>
     <message>
-        <source>All symbols</source>
-        <translation type="vanished">Любые символы</translation>
-    </message>
-    <message>
         <location filename="../src/datatype/BaseAlphabets.cpp" line="63"/>
         <source>Raw</source>
-        <translation type="unfinished"></translation>
+        <translation>Необработанный</translation>
     </message>
     <message>
         <location filename="../src/datatype/BaseAlphabets.cpp" line="71"/>
@@ -1170,20 +950,12 @@ A между остатком 3 и 125 и B между остатком 5 and 12
     <message>
         <location filename="../src/datatype/BaseAlphabets.cpp" line="114"/>
         <source>Standard amino acid</source>
-        <translation type="unfinished"></translation>
+        <translation>Стандартный амино</translation>
     </message>
     <message>
         <location filename="../src/datatype/BaseAlphabets.cpp" line="133"/>
         <source>Extended amino acid</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Standard amino</source>
-        <translation type="vanished">Стандартный амино</translation>
-    </message>
-    <message>
-        <source>Extended amino</source>
-        <translation type="vanished">Расширенный амино</translation>
+        <translation>Расширенный амино</translation>
     </message>
     <message>
         <location filename="../src/datatype/BaseTranslations.cpp" line="270"/>
@@ -1494,27 +1266,27 @@ A между остатком 3 и 125 и B между остатком 5 and 12
 <context>
     <name>U2::Document</name>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="546"/>
+        <location filename="../src/models/DocumentModel.cpp" line="550"/>
         <source>Document is not loaded</source>
         <translation>Документ не загружен</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="559"/>
+        <location filename="../src/models/DocumentModel.cpp" line="563"/>
         <source>IO adapter does not support write operation</source>
         <translation>Адаптер ввода/вывода не поддерживает запись</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="565"/>
+        <location filename="../src/models/DocumentModel.cpp" line="569"/>
         <source>No write support for document format</source>
         <translation>Запись для данного формата не поддерживается</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="635"/>
+        <location filename="../src/models/DocumentModel.cpp" line="639"/>
         <source>Locked by user</source>
         <translation>Заблокирован пользователем</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="659"/>
+        <location filename="../src/models/DocumentModel.cpp" line="663"/>
         <source>Lock is NULL</source>
         <translation>Lock is NULL</translation>
     </message>
@@ -1557,27 +1329,27 @@ A между остатком 3 и 125 и B между остатком 5 and 12
         <translation> tool</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="114"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="115"/>
         <source>Can not run %1 tool.</source>
         <translation>Невозможно запустить %1 инструмент.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="116"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="117"/>
         <source>Can not run %1 tool. May be tool path '%2' not valid?</source>
         <translation>Невозможно запустить %1 инструмент. Возможно путь до инструмента '%2' указан неверно?</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="125"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="126"/>
         <source>Tool %1 is cancelled</source>
-        <translation type="unfinished"></translation>
+        <translation>Tool %1 is cancelled</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="133"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="139"/>
         <source>%1 tool exited with code %2</source>
         <translation>%1 инструмент завершил работу с кодом %2</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="135"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="141"/>
         <source>Tool %1 finished successfully</source>
         <translation>Инструмент %1 завершил работу корректно</translation>
     </message>
@@ -1585,47 +1357,47 @@ A между остатком 3 и 125 и B между остатком 5 and 12
 <context>
     <name>U2::ExternalToolSupportUtils</name>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="329"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="348"/>
         <source>Can not remove temporary directory: path is empty.</source>
         <translation>Невозможно удалить временную директорию: пустой путь.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="335"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="354"/>
         <source>Can not remove files from temporary directory.</source>
         <translation>Невозможно удалить файлы из временной директории.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="340"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="359"/>
         <source>Can not remove directory for temporary files.</source>
         <translation>Невозможно удалить директорию для временных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="353"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="372"/>
         <source>Can not create directory for temporary files: %1</source>
         <translation>Невозможно создать директорию для временных файлов: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="384"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="403"/>
         <source>Can't run an executable file "%1" as it is. Try to run it as a cmd line command: "%2"</source>
         <translation>Невозможно запустить исполняемый файл "%1". Попробуйте запустить его из командной строки: "%2"</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="400"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="419"/>
         <source>Undefined tool: '%1'</source>
         <translation>Неопределенный инструмент: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="404"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="423"/>
         <source>Path for '%1' tool not set</source>
         <translation>Путь до инструмента '%1' не установлен</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="448"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="467"/>
         <source>Working directory is "%1"</source>
         <translation>Рабочая директория "%1"</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="457"/>
+        <location filename="../src/tasks/ExternalToolRunTask.cpp" line="476"/>
         <source>Launching %1 tool: %2 %3</source>
         <translation>Запуск инструмента %1: %2 %3</translation>
     </message>
@@ -1808,17 +1580,6 @@ A между остатком 3 и 125 и B между остатком 5 and 12
     </message>
 </context>
 <context>
-    <name>U2::GetDasIdsBySequenceTask</name>
-    <message>
-        <source>Get an ID for the sequence</source>
-        <translation type="vanished">Получить идентификатор для последовательности</translation>
-    </message>
-    <message>
-        <source>undefined error (code %1)</source>
-        <translation type="vanished">undefined error (code %1)</translation>
-    </message>
-</context>
-<context>
     <name>U2::GzippedHttpFileAdapterFactory</name>
     <message>
         <location filename="../src/io/HttpFileAdapter.cpp" line="52"/>
@@ -2194,59 +1955,6 @@ A между остатком 3 и 125 и B между остатком 5 and 12
     </message>
 </context>
 <context>
-    <name>U2::LoadDasDocumentTask</name>
-    <message>
-        <source>Cannot load cached document: %1</source>
-        <translation type="vanished">Невозможно загрузить кэшированный документ: %1</translation>
-    </message>
-    <message>
-        <source>Cannot save document: %1</source>
-        <translation type="vanished">Невозможно сохранить документ: %1</translation>
-    </message>
-    <message>
-        <source>Cannot find DAS reference sequence: %1</source>
-        <translation type="vanished">Невозможно найти референсную последовательность DAS: %1</translation>
-    </message>
-    <message>
-        <source>Cannot find DAS features for '%1' on %2</source>
-        <translation type="vanished">Невозможно найти аннотации DAS для '%1' в %2</translation>
-    </message>
-</context>
-<context>
-    <name>U2::LoadDasFeaturesTask</name>
-    <message>
-        <source>Load DAS annotations for current sequence</source>
-        <translation type="vanished">Загрузка DAS аннотаций для текущей последовательности</translation>
-    </message>
-    <message>
-        <source>Can not receive response from the server "</source>
-        <translation type="vanished">Невозможно получить ответ от сервера</translation>
-    </message>
-    <message>
-        <source><font size="5" color="green">Received %1 annotations from the server "%2"</font><br></source>
-        <translation type="vanished"><font size="5" color="green">Поступили %1 аннотации от сервера "%2"</font><br></translation>
-    </message>
-</context>
-<context>
-    <name>U2::LoadDasObjectTask</name>
-    <message>
-        <source>Load DAS data for '%1' from %2</source>
-        <translation type="vanished">Загрузка данных DAS для '%1' из %2</translation>
-    </message>
-    <message>
-        <source>Sequence with ID=%1 is not found.</source>
-        <translation type="vanished">Последовательность с идентификатором=%1 не найдена.</translation>
-    </message>
-    <message>
-        <source>undefined error (code %1)</source>
-        <translation type="vanished">undefined error (code %1)</translation>
-    </message>
-    <message>
-        <source>Remote server does not respond</source>
-        <translation type="vanished">Удаленный сервер не отвечает</translation>
-    </message>
-</context>
-<context>
     <name>U2::LoadDataFromEntrezTask</name>
     <message>
         <location filename="../src/tasks/LoadRemoteDocumentTask.cpp" line="424"/>
@@ -2257,43 +1965,43 @@ A между остатком 3 и 125 и B между остатком 5 and 12
 <context>
     <name>U2::LoadDocumentTask</name>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="227"/>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="242"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="230"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="245"/>
         <source>Read document: '%1'</source>
         <translation>Чтение документа: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="263"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="266"/>
         <source>Document format is NULL!</source>
         <translation>Формат документа NULL!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="264"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="267"/>
         <source>IO adapter factory is NULL!</source>
         <translation>IO адаптер NULL!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="444"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="447"/>
         <source>Document not found %1</source>
         <translation>Документ не найден: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="464"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="467"/>
         <source>Not enough memory to load document %1</source>
         <translation>Недостаточно памяти для загрузки документа %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="480"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="483"/>
         <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="510"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="513"/>
         <source>Object not found: %1</source>
         <translation>Объект не найден: "%1"</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="517"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="520"/>
         <source>Can't add object. Document format constraints check failed: %1</source>
         <translation>Невозможно добавить объект. Проверка ограничений формата завершилась неудачно: %1</translation>
     </message>
@@ -2319,7 +2027,7 @@ A между остатком 3 и 125 и B между остатком 5 and 12
         <translation>Документ был удалён</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="179"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="182"/>
         <source>Project Document:</source>
         <translation>Документ проекта:</translation>
     </message>
@@ -2344,7 +2052,7 @@ A между остатком 3 и 125 и B между остатком 5 and 12
         <translation>Документ не найден</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="197"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="200"/>
         <source>Annotation object not found</source>
         <translation>Не найдена таблица аннотаций</translation>
     </message>
@@ -2500,7 +2208,7 @@ A между остатком 3 и 125 и B между остатком 5 and 12
     <message>
         <location filename="../src/globals/ClipboardController.cpp" line="38"/>
         <source>Paste data</source>
-        <translation type="unfinished"></translation>
+        <translation>Paste data</translation>
     </message>
 </context>
 <context>
@@ -2548,29 +2256,6 @@ A между остатком 3 и 125 и B между остатком 5 and 12
     </message>
 </context>
 <context>
-    <name>U2::ReplyHandler</name>
-    <message>
-        <source>Can't receive result from the server: nothing to download</source>
-        <translation type="vanished">Невозможно получить результат с сервера: ничего не скачано</translation>
-    </message>
-    <message>
-        <source>Unexpected server response</source>
-        <translation type="vanished">Неожиданный ответ сервера</translation>
-    </message>
-    <message>
-        <source>undefined error (code %1)</source>
-        <translation type="vanished">undefined error (code %1)</translation>
-    </message>
-    <message>
-        <source>Network error: %1</source>
-        <translation type="vanished">Network error: %1</translation>
-    </message>
-    <message>
-        <source>Remote server doesn't respond</source>
-        <translation type="vanished">Удаленный сервер не отвечает</translation>
-    </message>
-</context>
-<context>
     <name>U2::ResourceTracker</name>
     <message>
         <location filename="../src/globals/ResourceTracker.cpp" line="39"/>
@@ -2732,7 +2417,7 @@ UGENE содержит несохраненные изменения.</translati
 <context>
     <name>U2::SequenceDbiWalkerSubtask</name>
     <message>
-        <location filename="../src/tasks/SequenceDbiWalkerTask.cpp" line="135"/>
+        <location filename="../src/tasks/SequenceDbiWalkerTask.cpp" line="140"/>
         <source>Sequence walker subtask</source>
         <translation>Обход части последовательности</translation>
     </message>
@@ -2945,39 +2630,9 @@ UGENE содержит несохраненные изменения.</translati
     </message>
 </context>
 <context>
-    <name>U2::UniprotBlastAndLoadDASAnnotations</name>
-    <message>
-        <source>BLAST IDs and DAS annotations</source>
-        <translation type="vanished">BLAST идентификаторы и DAS аннотации</translation>
-    </message>
-    <message>
-        <source>Server "%1" is not available!</source>
-        <translation type="vanished">Сервер "%1" недоступен!</translation>
-    </message>
-</context>
-<context>
-    <name>U2::UniprotBlastTask</name>
-    <message>
-        <source>Get an ID for the sequence</source>
-        <translation type="vanished">Получить идентификатор для последовательности</translation>
-    </message>
-    <message>
-        <source>Reply from the BLAST server is empty. Similar sequences not found</source>
-        <translation type="vanished">Не поступило ответа от сервера BLAST. Похожие последовательности не найдены</translation>
-    </message>
-    <message>
-        <source>An empty sequence is searched</source>
-        <translation type="vanished">Найдена пустая последовательность</translation>
-    </message>
-    <message>
-        <source>Settings are invalid</source>
-        <translation type="vanished">Неверные настройки</translation>
-    </message>
-</context>
-<context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/globals/UserApplicationsSettings.cpp" line="79"/>
+        <location filename="../src/globals/UserApplicationsSettings.cpp" line="81"/>
         <source>Cleaning temp dir: %1</source>
         <translation>Очистка временной директории: %1</translation>
     </message>
diff --git a/src/corelibs/U2Designer/CMakeLists.txt b/src/corelibs/U2Designer/CMakeLists.txt
new file mode 100644
index 0000000..fb2420f
--- /dev/null
+++ b/src/corelibs/U2Designer/CMakeLists.txt
@@ -0,0 +1,27 @@
+cmake_minimum_required(VERSION 3.4)
+project(U2Designer)
+
+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 Svg Script WebKit WebKitWidgets)
+
+add_definitions(-DBUILDING_U2DESIGNER_DLL)
+
+include_directories(src)
+include_directories(../../include)
+
+file(GLOB_RECURSE SRCS src/*.cpp)
+file(GLOB_RECURSE HDRS src/*.h)
+
+qt5_add_resources(RCC_SRCS U2Designer.qrc)
+
+add_library(U2Designer SHARED ${HDRS} ${SRCS} ${RCC_SRCS})
+
+target_link_libraries(U2Designer
+        Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml Qt5::Svg Qt5::Script Qt5::WebKit Qt5::WebKitWidgets
+        U2Core U2Algorithm U2Gui)
+
diff --git a/src/corelibs/U2Designer/U2Designer.pro b/src/corelibs/U2Designer/U2Designer.pro
index ad9f2da..f3e96b6 100644
--- a/src/corelibs/U2Designer/U2Designer.pro
+++ b/src/corelibs/U2Designer/U2Designer.pro
@@ -48,26 +48,26 @@ HEADERS += src/BreakpointHitCountDialog.h \
            src/wizard/WidgetController.h \
            src/wizard/WizardController.h \
            src/wizard/WizardPageController.h
-FORMS += src/ui/AnnsActionDialog.ui \
-         src/ui/BreakpointHitCountDialog.ui \
-         src/ui/CreateDirectoryDialog.ui \
-         src/ui/DatasetWidget.ui \
-         src/ui/DbFolderOptions.ui \
-         src/ui/DirectoryOptions.ui \
-         src/ui/EditBreakpointLabelsDialog.ui \
-         src/ui/EditFloatMarkerWidget.ui \
-         src/ui/EditIntegerMarkerWidget.ui \
-         src/ui/EditMarkerDialog.ui \
-         src/ui/EditMarkerGroupDialog.ui \
-         src/ui/EditStringMarkerWidget.ui \
-         src/ui/GrouperEditorWidget.ui \
-         src/ui/MarkerEditorWidget.ui \
-         src/ui/MsaActionDialog.ui \
-         src/ui/NewBreakpointDialog.ui \
-         src/ui/NewGrouperSlotDialog.ui \
-         src/ui/OutputFileDialog.ui \
-         src/ui/SequenceActionDialog.ui \
-         src/ui/StringActionDialog.ui
+FORMS += src/AnnsActionDialog.ui \
+         src/BreakpointHitCountDialog.ui \
+         src/CreateDirectoryDialog.ui \
+         src/DatasetWidget.ui \
+         src/DbFolderOptions.ui \
+         src/DirectoryOptions.ui \
+         src/EditBreakpointLabelsDialog.ui \
+         src/EditFloatMarkerWidget.ui \
+         src/EditIntegerMarkerWidget.ui \
+         src/EditMarkerDialog.ui \
+         src/EditMarkerGroupDialog.ui \
+         src/EditStringMarkerWidget.ui \
+         src/GrouperEditorWidget.ui \
+         src/MarkerEditorWidget.ui \
+         src/MsaActionDialog.ui \
+         src/NewBreakpointDialog.ui \
+         src/NewGrouperSlotDialog.ui \
+         src/OutputFileDialog.ui \
+         src/SequenceActionDialog.ui \
+         src/StringActionDialog.ui
 SOURCES += src/BreakpointHitCountDialog.cpp \
            src/DatasetsController.cpp \
            src/DatasetsListWidget.cpp \
diff --git a/src/corelibs/U2Designer/html/Dashboard.html b/src/corelibs/U2Designer/html/Dashboard.html
index 33d5151..22d1d15 100644
--- a/src/corelibs/U2Designer/html/Dashboard.html
+++ b/src/corelibs/U2Designer/html/Dashboard.html
@@ -21,6 +21,7 @@
 <!DOCTYPE html>
 <html>
 <head>
+    <meta charset="utf-8">
     <title>Dashboard</title>
     <link rel="stylesheet" type="text/css" href="qrc:javascript/bootstrap/css/bootstrap.min.css"/>
     <link rel="stylesheet" type="text/css" href="qrc:U2Designer/html/Dashboard.css"/>
diff --git a/src/corelibs/U2Designer/html/EstimationReport.html b/src/corelibs/U2Designer/html/EstimationReport.html
index 61e789b..0fc9eb6 100644
--- a/src/corelibs/U2Designer/html/EstimationReport.html
+++ b/src/corelibs/U2Designer/html/EstimationReport.html
@@ -21,6 +21,7 @@
 <!DOCTYPE html>
 <html>
 <head>
+    <meta charset="utf-8">
     <title>Estimation report</title>
     <link rel="stylesheet" type="text/css" href="qrc:javascript/bootstrap/css/bootstrap.css"/>
     <link rel="stylesheet" type="text/css" href="qrc:U2Designer/html/EstimationReport.css"/>
diff --git a/src/corelibs/U2Designer/src/ui/AnnsActionDialog.ui b/src/corelibs/U2Designer/src/AnnsActionDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/AnnsActionDialog.ui
rename to src/corelibs/U2Designer/src/AnnsActionDialog.ui
diff --git a/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp b/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp
index b1acdb9..e349e58 100644
--- a/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp
+++ b/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp
@@ -30,7 +30,7 @@
 #endif
 #include <QtGui/QIntValidator>
 
-#include "ui/ui_BreakpointHitCountDialog.h"
+#include "ui_BreakpointHitCountDialog.h"
 #include "BreakpointHitCountDialog.h"
 #include <U2Gui/HelpButton.h>
 
@@ -57,7 +57,7 @@ BreakpointHitCountDialog::BreakpointHitCountDialog(const QStringList &hitCountCo
 {
     ui = new Ui_BreakpointHitCountDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17468146");
+    new HelpButton(this, ui->buttonBox, "17471051");
 
     ui->hitConditionCombo->addItems(hitCountConditions);
     ui->hitConditionCombo->setCurrentIndex(hitCountConditions.indexOf(conditionOnLaunch));
diff --git a/src/corelibs/U2Designer/src/ui/BreakpointHitCountDialog.ui b/src/corelibs/U2Designer/src/BreakpointHitCountDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/BreakpointHitCountDialog.ui
rename to src/corelibs/U2Designer/src/BreakpointHitCountDialog.ui
diff --git a/src/corelibs/U2Designer/src/ui/CreateDirectoryDialog.ui b/src/corelibs/U2Designer/src/CreateDirectoryDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/CreateDirectoryDialog.ui
rename to src/corelibs/U2Designer/src/CreateDirectoryDialog.ui
diff --git a/src/corelibs/U2Designer/src/DatasetWidget.cpp b/src/corelibs/U2Designer/src/DatasetWidget.cpp
index 7d2f0aa..425c370 100644
--- a/src/corelibs/U2Designer/src/DatasetWidget.cpp
+++ b/src/corelibs/U2Designer/src/DatasetWidget.cpp
@@ -111,7 +111,7 @@ void URLListWidget::sl_addFileButton() {
     LastUsedDirHelper lod;
     QStringList files;
 #if defined(Q_OS_MAC) || (QT_VERSION >= 0x050000)
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    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
diff --git a/src/corelibs/U2Designer/src/DatasetWidget.h b/src/corelibs/U2Designer/src/DatasetWidget.h
index 703305b..b43afac 100644
--- a/src/corelibs/U2Designer/src/DatasetWidget.h
+++ b/src/corelibs/U2Designer/src/DatasetWidget.h
@@ -38,7 +38,7 @@ namespace U2 {
 class OptionsPopup;
 class URLListController;
 
-class URLListWidget : public QWidget, public Ui::DatasetWidget {
+class URLListWidget : public QWidget, public Ui_DatasetWidget {
     Q_OBJECT
 public:
     URLListWidget(URLListController *ctrl);
diff --git a/src/corelibs/U2Designer/src/ui/DatasetWidget.ui b/src/corelibs/U2Designer/src/DatasetWidget.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/DatasetWidget.ui
rename to src/corelibs/U2Designer/src/DatasetWidget.ui
diff --git a/src/corelibs/U2Designer/src/DbFolderItem.cpp b/src/corelibs/U2Designer/src/DbFolderItem.cpp
index 41abb3b..34fe07e 100644
--- a/src/corelibs/U2Designer/src/DbFolderItem.cpp
+++ b/src/corelibs/U2Designer/src/DbFolderItem.cpp
@@ -24,7 +24,7 @@
 
 #include <U2Lang/SharedDbUrlUtils.h>
 
-#include "ui/ui_DbFolderOptions.h"
+#include "ui_DbFolderOptions.h"
 #include "DbFolderItem.h"
 
 namespace U2 {
@@ -73,7 +73,7 @@ bool DbFolderItem::isRecursive() const {
 /* DbFolderOptions */
 /************************************************************************/
 DbFolderOptions::DbFolderOptions(QWidget *parent)
-    : QWidget(parent), ui(new Ui::DbFolderOptions)
+    : QWidget(parent), ui(new Ui_DbFolderOptions)
 {
     ui->setupUi(this);
     connect(ui->recursiveBox, SIGNAL(clicked(bool)), SIGNAL(si_dataChanged()));
diff --git a/src/corelibs/U2Designer/src/DbFolderItem.h b/src/corelibs/U2Designer/src/DbFolderItem.h
index 8615811..6ba8372 100644
--- a/src/corelibs/U2Designer/src/DbFolderItem.h
+++ b/src/corelibs/U2Designer/src/DbFolderItem.h
@@ -24,11 +24,7 @@
 
 #include "UrlItem.h"
 
-namespace Ui {
-
-class DbFolderOptions;
-
-}
+class Ui_DbFolderOptions;
 
 namespace U2 {
 
@@ -63,7 +59,7 @@ signals:
     void si_dataChanged();
 
 private:
-    Ui::DbFolderOptions *ui;
+    Ui_DbFolderOptions *ui;
 };
 
 } // namespace U2
diff --git a/src/corelibs/U2Designer/src/ui/DbFolderOptions.ui b/src/corelibs/U2Designer/src/DbFolderOptions.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/DbFolderOptions.ui
rename to src/corelibs/U2Designer/src/DbFolderOptions.ui
diff --git a/src/corelibs/U2Designer/src/DirectoryItem.h b/src/corelibs/U2Designer/src/DirectoryItem.h
index 2afbf09..cab6f18 100644
--- a/src/corelibs/U2Designer/src/DirectoryItem.h
+++ b/src/corelibs/U2Designer/src/DirectoryItem.h
@@ -51,7 +51,7 @@ private:
     DirectoryOptions *options;
 };
 
-class DirectoryOptions : public QWidget, public Ui::DirectoryOptions {
+class DirectoryOptions : public QWidget, public Ui_DirectoryOptions {
     Q_OBJECT
 public:
     DirectoryOptions(QWidget *parent = NULL);
diff --git a/src/corelibs/U2Designer/src/ui/DirectoryOptions.ui b/src/corelibs/U2Designer/src/DirectoryOptions.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/DirectoryOptions.ui
rename to src/corelibs/U2Designer/src/DirectoryOptions.ui
diff --git a/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp b/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp
index 4d6abf3..0f7324c 100644
--- a/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp
+++ b/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp
@@ -27,7 +27,7 @@
 #endif
 #include <QtGui/QKeyEvent>
 
-#include "ui/ui_EditBreakpointLabelsDialog.h"
+#include "ui_EditBreakpointLabelsDialog.h"
 #include "EditBreakpointLabelsDialog.h"
 #include <U2Gui/HelpButton.h>
 
@@ -41,10 +41,13 @@ EditBreakpointLabelsDialog::EditBreakpointLabelsDialog(const QStringList &existi
       applienceControlsForLabels(),
       callingBreakpointLabels(initCallingBreakpointLabels),
       newLabelsAdded(),
-      ui(new Ui::EditBreakpointLabelsDialog())
+      ui(new Ui_EditBreakpointLabelsDialog())
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17468146");
+    new HelpButton(this, ui->buttonBox, "17471051");
+
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     ui->addLabelButton->setEnabled(false);
     initExistingLabelsList(existingLabels);
diff --git a/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.h b/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.h
index ea61ab0..632d8fa 100644
--- a/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.h
+++ b/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.h
@@ -23,21 +23,11 @@
 #define _EDIT_BREAKPOINT_LABELS_DIALOG_H_
 
 #include <U2Core/global.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
 #include <QtWidgets/QDialog>
-#endif
 
 
 class QKeyEvent;
-
-namespace Ui {
-
-class EditBreakpointLabelsDialog;
-
-}
+class Ui_EditBreakpointLabelsDialog;
 
 namespace U2 {
 
@@ -71,7 +61,7 @@ private:
 
     QStringList callingBreakpointLabels;
     QStringList newLabelsAdded;
-    Ui::EditBreakpointLabelsDialog *ui;
+    Ui_EditBreakpointLabelsDialog *ui;
 };
 
 } // namespace U2
diff --git a/src/corelibs/U2Designer/src/ui/EditBreakpointLabelsDialog.ui b/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/EditBreakpointLabelsDialog.ui
rename to src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.ui
diff --git a/src/corelibs/U2Designer/src/ui/EditFloatMarkerWidget.ui b/src/corelibs/U2Designer/src/EditFloatMarkerWidget.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/EditFloatMarkerWidget.ui
rename to src/corelibs/U2Designer/src/EditFloatMarkerWidget.ui
diff --git a/src/corelibs/U2Designer/src/ui/EditIntegerMarkerWidget.ui b/src/corelibs/U2Designer/src/EditIntegerMarkerWidget.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/EditIntegerMarkerWidget.ui
rename to src/corelibs/U2Designer/src/EditIntegerMarkerWidget.ui
diff --git a/src/corelibs/U2Designer/src/ui/EditMarkerDialog.ui b/src/corelibs/U2Designer/src/EditMarkerDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/EditMarkerDialog.ui
rename to src/corelibs/U2Designer/src/EditMarkerDialog.ui
diff --git a/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp b/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp
index bbde160..123cc7d 100644
--- a/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp
+++ b/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp
@@ -42,7 +42,7 @@ EditMarkerGroupDialog::EditMarkerGroupDialog(bool isNew, Marker *marker, Workflo
 : QDialog(parent), isNew(isNew), marker(NULL), allModel(_allModel)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17468029");
+    new HelpButton(this, buttonBox, "17470946");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     {
@@ -397,7 +397,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, "17468029");
+    new HelpButton(this, buttonBox, "17470946");
     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 33b55f9..a32ec06 100644
--- a/src/corelibs/U2Designer/src/EditMarkerGroupDialog.h
+++ b/src/corelibs/U2Designer/src/EditMarkerGroupDialog.h
@@ -39,7 +39,7 @@ class MarkerListCfgModel;
 /************************************************************************/
 /* EditMarkerGroupDialog */
 /************************************************************************/
-class EditMarkerGroupDialog : public QDialog, public Ui::EditMarkerGroupDialog {
+class EditMarkerGroupDialog : public QDialog, public Ui_EditMarkerGroupDialog {
     Q_OBJECT
 public:
     EditMarkerGroupDialog(bool isNew, Marker *marker, Workflow::MarkerGroupListCfgModel *allModel, QWidget *parent);
@@ -99,7 +99,7 @@ private:
 /************************************************************************/
 class EditTypedMarkerWidget;
 
-class EditMarkerDialog : public QDialog, public Ui::EditMarkerDialog {
+class EditMarkerDialog : public QDialog, public Ui_EditMarkerDialog {
     Q_OBJECT
 public:
     EditMarkerDialog(bool isNew, const QString &type, const QString &name, const QVariantList &values, QWidget *parent);
@@ -129,7 +129,7 @@ protected:
     QVariantList values;
 };
 
-class EditIntegerMarkerWidget: public EditTypedMarkerWidget, public Ui::EditIntegerMarkerWidget {
+class EditIntegerMarkerWidget: public EditTypedMarkerWidget, public Ui_EditIntegerMarkerWidget {
     Q_OBJECT
 public:
     EditIntegerMarkerWidget(bool isNew, const QVariantList &values, QWidget *parent);
@@ -137,7 +137,7 @@ public:
     virtual QVariantList getValues();
 };
 
-class EditFloatMarkerWidget: public EditTypedMarkerWidget, public Ui::EditFloatMarkerWidget {
+class EditFloatMarkerWidget: public EditTypedMarkerWidget, public Ui_EditFloatMarkerWidget {
     Q_OBJECT
 public:
     EditFloatMarkerWidget(bool isNew, const QVariantList &values, QWidget *parent);
@@ -145,7 +145,7 @@ public:
     virtual QVariantList getValues();
 };
 
-class EditStringMarkerWidget: public EditTypedMarkerWidget, public Ui::EditStringMarkerWidget {
+class EditStringMarkerWidget: public EditTypedMarkerWidget, public Ui_EditStringMarkerWidget {
     Q_OBJECT
 public:
     EditStringMarkerWidget(bool isNew, const QVariantList &values, QWidget *parent);
diff --git a/src/corelibs/U2Designer/src/ui/EditMarkerGroupDialog.ui b/src/corelibs/U2Designer/src/EditMarkerGroupDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/EditMarkerGroupDialog.ui
rename to src/corelibs/U2Designer/src/EditMarkerGroupDialog.ui
diff --git a/src/corelibs/U2Designer/src/ui/EditStringMarkerWidget.ui b/src/corelibs/U2Designer/src/EditStringMarkerWidget.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/EditStringMarkerWidget.ui
rename to src/corelibs/U2Designer/src/EditStringMarkerWidget.ui
diff --git a/src/corelibs/U2Designer/src/GrouperEditorWidget.h b/src/corelibs/U2Designer/src/GrouperEditorWidget.h
index 21116e8..b6ef4e7 100644
--- a/src/corelibs/U2Designer/src/GrouperEditorWidget.h
+++ b/src/corelibs/U2Designer/src/GrouperEditorWidget.h
@@ -31,7 +31,7 @@ namespace U2 {
 
 class GrouperSlotsCfgModel;
 
-class GrouperEditorWidget: public QWidget, public Ui::GrouperEditorWidget {
+class GrouperEditorWidget: public QWidget, public Ui_GrouperEditorWidget {
     Q_OBJECT
 public:
     GrouperEditorWidget(GrouperSlotsCfgModel *gouperModel, Workflow::Actor *grouper, QWidget *parent = NULL);
diff --git a/src/corelibs/U2Designer/src/ui/GrouperEditorWidget.ui b/src/corelibs/U2Designer/src/GrouperEditorWidget.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/GrouperEditorWidget.ui
rename to src/corelibs/U2Designer/src/GrouperEditorWidget.ui
diff --git a/src/corelibs/U2Designer/src/MarkerEditorWidget.h b/src/corelibs/U2Designer/src/MarkerEditorWidget.h
index c3faca2..3e937ed 100644
--- a/src/corelibs/U2Designer/src/MarkerEditorWidget.h
+++ b/src/corelibs/U2Designer/src/MarkerEditorWidget.h
@@ -30,7 +30,7 @@ namespace U2 {
 
 class Marker;
 
-class MarkerEditorWidget: public QWidget, public Ui::MarkerEditorWidget {
+class MarkerEditorWidget: public QWidget, public Ui_MarkerEditorWidget {
     Q_OBJECT
 public:
     MarkerEditorWidget(QAbstractTableModel *markerModel, QWidget *parent = NULL);
diff --git a/src/corelibs/U2Designer/src/ui/MarkerEditorWidget.ui b/src/corelibs/U2Designer/src/MarkerEditorWidget.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/MarkerEditorWidget.ui
rename to src/corelibs/U2Designer/src/MarkerEditorWidget.ui
diff --git a/src/corelibs/U2Designer/src/ui/MsaActionDialog.ui b/src/corelibs/U2Designer/src/MsaActionDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/MsaActionDialog.ui
rename to src/corelibs/U2Designer/src/MsaActionDialog.ui
diff --git a/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp b/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp
index d8e408f..c0ffc4c 100644
--- a/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp
+++ b/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp
@@ -19,22 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#include "ui/ui_NewBreakpointDialog.h"
+#include "ui_NewBreakpointDialog.h"
 #include "NewBreakpointDialog.h"
 #include <U2Gui/HelpButton.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#else
 #include <QtWidgets/QPushButton>
-#endif
 
 namespace U2 {
 
 NewBreakpointDialog::NewBreakpointDialog(const QStringList &elementsNames, QWidget *parent,
-    Qt::WindowFlags f) : QDialog(parent, f), ui(new Ui::NewBreakpointDialog())
+    Qt::WindowFlags f) : QDialog(parent, f), ui(new Ui_NewBreakpointDialog())
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17468145");
+    new HelpButton(this, ui->buttonBox, "17471050");
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     ui->elementCombo->addItems(elementsNames);
 
     QPushButton *okButton = ui->buttonBox->button(QDialogButtonBox::Ok);
diff --git a/src/corelibs/U2Designer/src/NewBreakpointDialog.h b/src/corelibs/U2Designer/src/NewBreakpointDialog.h
index fc7e596..b05cb74 100644
--- a/src/corelibs/U2Designer/src/NewBreakpointDialog.h
+++ b/src/corelibs/U2Designer/src/NewBreakpointDialog.h
@@ -23,18 +23,9 @@
 #define _NEW_BREAKPOINT_DIALOG_H_
 
 #include <U2Core/global.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
 #include <QtWidgets/QDialog>
-#endif
-
-namespace Ui {
-
-class NewBreakpointDialog;
 
-}
+class Ui_NewBreakpointDialog;
 
 namespace U2 {
 
@@ -52,7 +43,7 @@ private slots:
     void sl_announceNewBreakpoint();
 
 private:
-    Ui::NewBreakpointDialog *ui;
+    Ui_NewBreakpointDialog *ui;
 };
 
 } // namespace U2
diff --git a/src/corelibs/U2Designer/src/ui/NewBreakpointDialog.ui b/src/corelibs/U2Designer/src/NewBreakpointDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/NewBreakpointDialog.ui
rename to src/corelibs/U2Designer/src/NewBreakpointDialog.ui
diff --git a/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp b/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp
index 9dbf6ef..dcedadc 100644
--- a/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp
+++ b/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp
@@ -35,7 +35,7 @@ NewGrouperSlotDialog::NewGrouperSlotDialog(QWidget *parent, QList<Descriptor> &i
 : QDialog(parent), inSlots(inSlots), names(names)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17468027");
+    new HelpButton(this, buttonBox, "17470944");
     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, "17468027");
+    new HelpButton(this, buttonBox, "17470944");
     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, "17468027");
+    new HelpButton(this, buttonBox, "17470944");
     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, "17468027");
+    new HelpButton(this, buttonBox, "17470944");
     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, "17468027");
+    new HelpButton(this, buttonBox, "17470944");
     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 523ab24..5f9533f 100644
--- a/src/corelibs/U2Designer/src/NewGrouperSlotDialog.h
+++ b/src/corelibs/U2Designer/src/NewGrouperSlotDialog.h
@@ -33,7 +33,7 @@
 
 namespace U2 {
 
-class NewGrouperSlotDialog : public QDialog, public Ui::NewGrouperSlotDialog {
+class NewGrouperSlotDialog : public QDialog, public Ui_NewGrouperSlotDialog {
     Q_OBJECT
 public:
     NewGrouperSlotDialog(QWidget *parent, QList<Descriptor> &inSlots, QStringList &names);
@@ -59,28 +59,28 @@ public:
 /************************************************************************/
 /* Action dialogs */
 /************************************************************************/
-class AnnsActionDialog : public ActionDialog, public Ui::AnnsActionDialog {
+class AnnsActionDialog : public ActionDialog, public Ui_AnnsActionDialog {
     Q_OBJECT
 public:
     AnnsActionDialog(QWidget *parent, GrouperSlotAction *action, QStringList mergeSeqSlots);
     virtual GrouperSlotAction getAction() const;
 };
 
-class SequeceActionDialog : public ActionDialog, public Ui::SequeceActionDialog {
+class SequeceActionDialog : public ActionDialog, public Ui_SequeceActionDialog {
     Q_OBJECT
 public:
     SequeceActionDialog(QWidget *parent, GrouperSlotAction *action);
     virtual GrouperSlotAction getAction() const;
 };
 
-class MsaActionDialog : public ActionDialog, public Ui::MsaActionDialog {
+class MsaActionDialog : public ActionDialog, public Ui_MsaActionDialog {
     Q_OBJECT
 public:
     MsaActionDialog(QWidget *parent, GrouperSlotAction *action);
     virtual GrouperSlotAction getAction() const;
 };
 
-class StringActionDialog : public ActionDialog, public Ui::StringActionDialog {
+class StringActionDialog : public ActionDialog, public Ui_StringActionDialog {
     Q_OBJECT
 public:
     StringActionDialog(QWidget *parent, GrouperSlotAction *action);
diff --git a/src/corelibs/U2Designer/src/ui/NewGrouperSlotDialog.ui b/src/corelibs/U2Designer/src/NewGrouperSlotDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/NewGrouperSlotDialog.ui
rename to src/corelibs/U2Designer/src/NewGrouperSlotDialog.ui
diff --git a/src/corelibs/U2Designer/src/OutputFileDialog.h b/src/corelibs/U2Designer/src/OutputFileDialog.h
index 068e3e9..68c972c 100644
--- a/src/corelibs/U2Designer/src/OutputFileDialog.h
+++ b/src/corelibs/U2Designer/src/OutputFileDialog.h
@@ -22,8 +22,8 @@
 #ifndef _U2_OUTPUTFILEDIALOG_H_
 #define _U2_OUTPUTFILEDIALOG_H_
 
-#include <ui/ui_CreateDirectoryDialog.h>
-#include <ui/ui_OutputFileDialog.h>
+#include "ui_CreateDirectoryDialog.h"
+#include "ui_OutputFileDialog.h"
 
 namespace U2 {
 
@@ -32,7 +32,7 @@ class FSItem;
 class RFSTreeModel;
 class RunFileSystem;
 
-class OutputFileDialog : public QDialog, public Ui::OutputFileDialog {
+class OutputFileDialog : public QDialog, public Ui_OutputFileDialog {
     Q_OBJECT
 public:
     OutputFileDialog(RunFileSystem *rfs, bool saveDir, CompletionFiller *filler, QWidget *parent);
@@ -82,7 +82,7 @@ private:
     bool saveDir;
 };
 
-class CreateDirectoryDialog : public QDialog, public Ui::CreateDirectoryDialog {
+class CreateDirectoryDialog : public QDialog, public Ui_CreateDirectoryDialog {
     Q_OBJECT
 public:
     CreateDirectoryDialog(RunFileSystem *rfs, const QString &parentDir, QWidget *parent);
diff --git a/src/corelibs/U2Designer/src/ui/OutputFileDialog.ui b/src/corelibs/U2Designer/src/OutputFileDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/OutputFileDialog.ui
rename to src/corelibs/U2Designer/src/OutputFileDialog.ui
diff --git a/src/corelibs/U2Designer/src/ui/SequenceActionDialog.ui b/src/corelibs/U2Designer/src/SequenceActionDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/SequenceActionDialog.ui
rename to src/corelibs/U2Designer/src/SequenceActionDialog.ui
diff --git a/src/corelibs/U2Designer/src/ui/StringActionDialog.ui b/src/corelibs/U2Designer/src/StringActionDialog.ui
similarity index 100%
rename from src/corelibs/U2Designer/src/ui/StringActionDialog.ui
rename to src/corelibs/U2Designer/src/StringActionDialog.ui
diff --git a/src/corelibs/U2Designer/src/support/URLLineEdit.cpp b/src/corelibs/U2Designer/src/support/URLLineEdit.cpp
index 4887628..5ea0daf 100644
--- a/src/corelibs/U2Designer/src/support/URLLineEdit.cpp
+++ b/src/corelibs/U2Designer/src/support/URLLineEdit.cpp
@@ -202,7 +202,7 @@ void URLLineEdit::browse(bool addFiles) {
             this->checkExtension(name);
         } else {
             #ifdef Q_OS_MAC
-                if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+                if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
                     lod.url = name = U2FileDialog::getOpenFileName(NULL, tr("Select a file"), lastDir, FileFilter, 0, QFileDialog::DontUseNativeDialog );
                 } else
             #endif
diff --git a/src/corelibs/U2Designer/transl/english.ts b/src/corelibs/U2Designer/transl/english.ts
index 5b206ad..ddf0fd1 100644
--- a/src/corelibs/U2Designer/transl/english.ts
+++ b/src/corelibs/U2Designer/transl/english.ts
@@ -4,24 +4,24 @@
 <context>
     <name>AnnsActionDialog</name>
     <message>
-        <location filename="../src/ui/AnnsActionDialog.ui" line="14"/>
+        <location filename="../src/AnnsActionDialog.ui" line="14"/>
         <source>New Annotations Action</source>
         <translation>New Annotations Action</translation>
     </message>
     <message>
-        <location filename="../src/ui/AnnsActionDialog.ui" line="34"/>
+        <location filename="../src/AnnsActionDialog.ui" line="34"/>
         <source>Merge into one annotation table</source>
         <translation>Merge into one annotation table</translation>
     </message>
     <message>
-        <location filename="../src/ui/AnnsActionDialog.ui" line="53"/>
+        <location filename="../src/AnnsActionDialog.ui" line="53"/>
         <source>Shift annotations using
 this merge sequence slot:</source>
         <translation>Shift annotations using
 this merge sequence slot:</translation>
     </message>
     <message>
-        <location filename="../src/ui/AnnsActionDialog.ui" line="64"/>
+        <location filename="../src/AnnsActionDialog.ui" line="64"/>
         <source>Filter duplicated annotations</source>
         <translation>Filter duplicated annotations</translation>
     </message>
@@ -29,27 +29,27 @@ this merge sequence slot:</translation>
 <context>
     <name>BreakpointHitCountDialog</name>
     <message>
-        <location filename="../src/ui/BreakpointHitCountDialog.ui" line="26"/>
+        <location filename="../src/BreakpointHitCountDialog.ui" line="26"/>
         <source>Breakpoint Hit Count</source>
         <translation>Breakpoint Hit Count</translation>
     </message>
     <message>
-        <location filename="../src/ui/BreakpointHitCountDialog.ui" line="50"/>
+        <location filename="../src/BreakpointHitCountDialog.ui" line="50"/>
         <source>When the breakpoint is h&it:</source>
         <translation>When the breakpoint is h&it:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BreakpointHitCountDialog.ui" line="89"/>
+        <location filename="../src/BreakpointHitCountDialog.ui" line="89"/>
         <source>Current hit count:</source>
         <translation>Current hit count:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BreakpointHitCountDialog.ui" line="96"/>
+        <location filename="../src/BreakpointHitCountDialog.ui" line="96"/>
         <source>0</source>
         <translation>0</translation>
     </message>
     <message>
-        <location filename="../src/ui/BreakpointHitCountDialog.ui" line="43"/>
+        <location filename="../src/BreakpointHitCountDialog.ui" line="43"/>
         <source>A breakpoint is hit when the breakpoint location is reached and the condition is<br>satisfied. The hit count is the number of times the breakpoint has been hit.</source>
         <translation>A breakpoint is hit when the breakpoint location is reached and the condition is<br>satisfied. The hit count is the number of times the breakpoint has been hit.</translation>
     </message>
@@ -57,17 +57,17 @@ this merge sequence slot:</translation>
 <context>
     <name>CreateDirectoryDialog</name>
     <message>
-        <location filename="../src/ui/CreateDirectoryDialog.ui" line="14"/>
+        <location filename="../src/CreateDirectoryDialog.ui" line="14"/>
         <source>Create a directory</source>
         <translation>Create a directory</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateDirectoryDialog.ui" line="43"/>
+        <location filename="../src/CreateDirectoryDialog.ui" line="43"/>
         <source>Parent directory:</source>
         <translation>Parent directory:</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateDirectoryDialog.ui" line="63"/>
+        <location filename="../src/CreateDirectoryDialog.ui" line="63"/>
         <source>Name:</source>
         <translation>Name:</translation>
     </message>
@@ -75,37 +75,37 @@ this merge sequence slot:</translation>
 <context>
     <name>DatasetWidget</name>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="20"/>
+        <location filename="../src/DatasetWidget.ui" line="20"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="40"/>
+        <location filename="../src/DatasetWidget.ui" line="40"/>
         <source>Add file(s)</source>
         <translation>Add file(s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="62"/>
+        <location filename="../src/DatasetWidget.ui" line="62"/>
         <source>Add directory</source>
         <translation>Add directory</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="84"/>
+        <location filename="../src/DatasetWidget.ui" line="84"/>
         <source>Add data from shared databases</source>
         <translation>Add data from shared databases</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="116"/>
+        <location filename="../src/DatasetWidget.ui" line="116"/>
         <source>Up url(s)</source>
         <translation>Up url(s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="141"/>
+        <location filename="../src/DatasetWidget.ui" line="141"/>
         <source>Down url(s)</source>
         <translation>Down url(s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="166"/>
+        <location filename="../src/DatasetWidget.ui" line="166"/>
         <source>Delete urls(s)</source>
         <translation>Delete urls(s)</translation>
     </message>
@@ -113,12 +113,12 @@ this merge sequence slot:</translation>
 <context>
     <name>DbFolderOptions</name>
     <message>
-        <location filename="../src/ui/DbFolderOptions.ui" line="32"/>
+        <location filename="../src/DbFolderOptions.ui" line="32"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/DbFolderOptions.ui" line="50"/>
+        <location filename="../src/DbFolderOptions.ui" line="50"/>
         <source>Recursive</source>
         <translation>Recursive</translation>
     </message>
@@ -126,22 +126,22 @@ this merge sequence slot:</translation>
 <context>
     <name>DirectoryOptions</name>
     <message>
-        <location filename="../src/ui/DirectoryOptions.ui" line="32"/>
+        <location filename="../src/DirectoryOptions.ui" line="32"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/DirectoryOptions.ui" line="46"/>
+        <location filename="../src/DirectoryOptions.ui" line="46"/>
         <source>Exclude mask</source>
         <translation>Exclude mask</translation>
     </message>
     <message>
-        <location filename="../src/ui/DirectoryOptions.ui" line="75"/>
+        <location filename="../src/DirectoryOptions.ui" line="75"/>
         <source>Inсlude mask</source>
         <translation>Inсlude mask</translation>
     </message>
     <message>
-        <location filename="../src/ui/DirectoryOptions.ui" line="112"/>
+        <location filename="../src/DirectoryOptions.ui" line="112"/>
         <source>Recursive</source>
         <translation>Recursive</translation>
     </message>
@@ -149,22 +149,22 @@ this merge sequence slot:</translation>
 <context>
     <name>EditBreakpointLabelsDialog</name>
     <message>
-        <location filename="../src/ui/EditBreakpointLabelsDialog.ui" line="60"/>
+        <location filename="../src/EditBreakpointLabelsDialog.ui" line="60"/>
         <source>O&r choose among existing labels</source>
         <translation>O&r choose among existing labels</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditBreakpointLabelsDialog.ui" line="53"/>
+        <location filename="../src/EditBreakpointLabelsDialog.ui" line="53"/>
         <source>&Add</source>
         <translation>&Add</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditBreakpointLabelsDialog.ui" line="26"/>
+        <location filename="../src/EditBreakpointLabelsDialog.ui" line="26"/>
         <source>Edit Breakpoint Labels</source>
         <translation>Edit Breakpoint Labels</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditBreakpointLabelsDialog.ui" line="34"/>
+        <location filename="../src/EditBreakpointLabelsDialog.ui" line="34"/>
         <source>T&ype a new label</source>
         <translation>T&ype a new label</translation>
     </message>
@@ -172,27 +172,27 @@ this merge sequence slot:</translation>
 <context>
     <name>EditFloatMarkerWidget</name>
     <message>
-        <location filename="../src/ui/EditFloatMarkerWidget.ui" line="14"/>
+        <location filename="../src/EditFloatMarkerWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFloatMarkerWidget.ui" line="20"/>
+        <location filename="../src/EditFloatMarkerWidget.ui" line="20"/>
         <source>Interval:</source>
         <translation>Interval:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFloatMarkerWidget.ui" line="42"/>
+        <location filename="../src/EditFloatMarkerWidget.ui" line="42"/>
         <source>..</source>
         <translation>..</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFloatMarkerWidget.ui" line="64"/>
+        <location filename="../src/EditFloatMarkerWidget.ui" line="64"/>
         <source>Less than:</source>
         <translation>Less than:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFloatMarkerWidget.ui" line="94"/>
+        <location filename="../src/EditFloatMarkerWidget.ui" line="94"/>
         <source>Greater than:</source>
         <translation>Greater than:</translation>
     </message>
@@ -200,29 +200,29 @@ this merge sequence slot:</translation>
 <context>
     <name>EditIntegerMarkerWidget</name>
     <message>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="20"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="20"/>
         <source>Interval:</source>
         <translation>Interval:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="26"/>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="67"/>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="97"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="26"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="67"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="97"/>
         <source>radioButtonsGroup</source>
         <translation>radioButtonsGroup</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="45"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="45"/>
         <source>..</source>
         <translation>..</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="64"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="64"/>
         <source>Less than:</source>
         <translation>Less than:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="94"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="94"/>
         <source>Greater than:</source>
         <translation>Greater than:</translation>
     </message>
@@ -230,17 +230,17 @@ this merge sequence slot:</translation>
 <context>
     <name>EditMarkerDialog</name>
     <message>
-        <location filename="../src/ui/EditMarkerDialog.ui" line="14"/>
+        <location filename="../src/EditMarkerDialog.ui" line="14"/>
         <source>Edit Marker</source>
         <translation>Edit Marker</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerDialog.ui" line="28"/>
+        <location filename="../src/EditMarkerDialog.ui" line="28"/>
         <source>Marker name:</source>
         <translation>Marker name:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerDialog.ui" line="35"/>
+        <location filename="../src/EditMarkerDialog.ui" line="35"/>
         <source>NewMarker</source>
         <translation>NewMarker</translation>
     </message>
@@ -248,42 +248,42 @@ this merge sequence slot:</translation>
 <context>
     <name>EditMarkerGroupDialog</name>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="14"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="14"/>
         <source>Edit Marker Group</source>
         <translation>Edit Marker Group</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="22"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="22"/>
         <source>Marker group name:</source>
         <translation>Marker group name:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="29"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="29"/>
         <source>NewMarkerGroup</source>
         <translation>NewMarkerGroup</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="36"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="36"/>
         <source>Marker group type:</source>
         <translation>Marker group type:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="46"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="46"/>
         <source>Parameter:</source>
         <translation>Parameter:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="60"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="60"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="80"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="80"/>
         <source>Edit</source>
         <translation>Edit</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="87"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="87"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
@@ -291,35 +291,35 @@ this merge sequence slot:</translation>
 <context>
     <name>EditStringMarkerWidget</name>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="14"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="20"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="20"/>
         <source>Starts with</source>
         <translation>Starts with</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="26"/>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="39"/>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="52"/>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="65"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="26"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="39"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="52"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="65"/>
         <source>buttonGroup</source>
         <translation>buttonGroup</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="36"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="36"/>
         <source>Ends with</source>
         <translation>Ends with</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="49"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="49"/>
         <source>Contains</source>
         <translation>Contains</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="62"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="62"/>
         <source>Regular expression</source>
         <translation>Regular expression</translation>
     </message>
@@ -327,32 +327,32 @@ this merge sequence slot:</translation>
 <context>
     <name>GrouperEditorWidget</name>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="14"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="22"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="22"/>
         <source>Group slot</source>
         <translation>Group slot</translation>
     </message>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="39"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="39"/>
         <source>Group operation</source>
         <translation>Group operation</translation>
     </message>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="60"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="60"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="80"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="80"/>
         <source>Edit</source>
         <translation>Edit</translation>
     </message>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="87"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="87"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
@@ -360,22 +360,22 @@ this merge sequence slot:</translation>
 <context>
     <name>MarkerEditorWidget</name>
     <message>
-        <location filename="../src/ui/MarkerEditorWidget.ui" line="14"/>
+        <location filename="../src/MarkerEditorWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/MarkerEditorWidget.ui" line="22"/>
+        <location filename="../src/MarkerEditorWidget.ui" line="22"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/ui/MarkerEditorWidget.ui" line="42"/>
+        <location filename="../src/MarkerEditorWidget.ui" line="42"/>
         <source>Edit</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/ui/MarkerEditorWidget.ui" line="49"/>
+        <location filename="../src/MarkerEditorWidget.ui" line="49"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
@@ -383,22 +383,22 @@ this merge sequence slot:</translation>
 <context>
     <name>MsaActionDialog</name>
     <message>
-        <location filename="../src/ui/MsaActionDialog.ui" line="26"/>
+        <location filename="../src/MsaActionDialog.ui" line="26"/>
         <source>New Alignment Action</source>
         <translation>New Alignment Action</translation>
     </message>
     <message>
-        <location filename="../src/ui/MsaActionDialog.ui" line="34"/>
+        <location filename="../src/MsaActionDialog.ui" line="34"/>
         <source>Merge into one alignment</source>
         <translation>Merge into one alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/MsaActionDialog.ui" line="50"/>
+        <location filename="../src/MsaActionDialog.ui" line="50"/>
         <source>Alignment name</source>
         <translation>Alignment name</translation>
     </message>
     <message>
-        <location filename="../src/ui/MsaActionDialog.ui" line="60"/>
+        <location filename="../src/MsaActionDialog.ui" line="60"/>
         <source>Filter duplicated rows</source>
         <translation>Filter duplicated rows</translation>
     </message>
@@ -406,17 +406,17 @@ this merge sequence slot:</translation>
 <context>
     <name>NewBreakpointDialog</name>
     <message>
-        <location filename="../src/ui/NewBreakpointDialog.ui" line="20"/>
+        <location filename="../src/NewBreakpointDialog.ui" line="20"/>
         <source>New Breakpoint</source>
         <translation>New Breakpoint</translation>
     </message>
     <message>
-        <location filename="../src/ui/NewBreakpointDialog.ui" line="28"/>
+        <location filename="../src/NewBreakpointDialog.ui" line="28"/>
         <source>Break execution when it reaches this element in the workflow</source>
         <translation>Break execution when it reaches this element in the workflow</translation>
     </message>
     <message>
-        <location filename="../src/ui/NewBreakpointDialog.ui" line="35"/>
+        <location filename="../src/NewBreakpointDialog.ui" line="35"/>
         <source>&Element: </source>
         <translation>&Element: </translation>
     </message>
@@ -424,17 +424,17 @@ this merge sequence slot:</translation>
 <context>
     <name>NewGrouperSlotDialog</name>
     <message>
-        <location filename="../src/ui/NewGrouperSlotDialog.ui" line="32"/>
+        <location filename="../src/NewGrouperSlotDialog.ui" line="32"/>
         <source>Setup New Data Merge Action</source>
         <translation>Setup New Data Merge Action</translation>
     </message>
     <message>
-        <location filename="../src/ui/NewGrouperSlotDialog.ui" line="43"/>
+        <location filename="../src/NewGrouperSlotDialog.ui" line="43"/>
         <source>Source data slot</source>
         <translation>Source data slot</translation>
     </message>
     <message>
-        <location filename="../src/ui/NewGrouperSlotDialog.ui" line="60"/>
+        <location filename="../src/NewGrouperSlotDialog.ui" line="60"/>
         <source>Name of new slot with merged data</source>
         <translation>Name of new slot with merged data</translation>
     </message>
@@ -442,28 +442,28 @@ this merge sequence slot:</translation>
 <context>
     <name>OutputFileDialog</name>
     <message>
-        <location filename="../src/ui/OutputFileDialog.ui" line="14"/>
+        <location filename="../src/OutputFileDialog.ui" line="14"/>
         <source>Save file/directory</source>
         <translation>Save file/directory</translation>
     </message>
     <message>
-        <location filename="../src/ui/OutputFileDialog.ui" line="31"/>
+        <location filename="../src/OutputFileDialog.ui" line="31"/>
         <source>Create directory</source>
         <translation>Create directory</translation>
     </message>
     <message>
-        <location filename="../src/ui/OutputFileDialog.ui" line="63"/>
-        <location filename="../src/ui/OutputFileDialog.ui" line="82"/>
+        <location filename="../src/OutputFileDialog.ui" line="63"/>
+        <location filename="../src/OutputFileDialog.ui" line="82"/>
         <source>Save to file system</source>
         <translation>Save to file system</translation>
     </message>
     <message>
-        <location filename="../src/ui/OutputFileDialog.ui" line="126"/>
+        <location filename="../src/OutputFileDialog.ui" line="126"/>
         <source>Directory:</source>
         <translation>Directory:</translation>
     </message>
     <message>
-        <location filename="../src/ui/OutputFileDialog.ui" line="146"/>
+        <location filename="../src/OutputFileDialog.ui" line="146"/>
         <source>File name:</source>
         <translation>File name:</translation>
     </message>
@@ -573,43 +573,43 @@ Set up the directory:</translation>
 <context>
     <name>SequeceActionDialog</name>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="32"/>
+        <location filename="../src/SequenceActionDialog.ui" line="32"/>
         <source>New Sequence Action</source>
         <translation>New Sequence Action</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="40"/>
+        <location filename="../src/SequenceActionDialog.ui" line="40"/>
         <source>Merge into one sequence</source>
         <translation>Merge into one sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="46"/>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="102"/>
+        <location filename="../src/SequenceActionDialog.ui" line="46"/>
+        <location filename="../src/SequenceActionDialog.ui" line="102"/>
         <source>buttonGroup</source>
         <translation>buttonGroup</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="62"/>
+        <location filename="../src/SequenceActionDialog.ui" line="62"/>
         <source>Merged sequence name</source>
         <translation>Merged sequence name</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="72"/>
+        <location filename="../src/SequenceActionDialog.ui" line="72"/>
         <source>Gap size</source>
         <translation>Gap size</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="99"/>
+        <location filename="../src/SequenceActionDialog.ui" line="99"/>
         <source>Merge into alignment</source>
         <translation>Merge into alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="118"/>
+        <location filename="../src/SequenceActionDialog.ui" line="118"/>
         <source>Alignment name</source>
         <translation>Alignment name</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="128"/>
+        <location filename="../src/SequenceActionDialog.ui" line="128"/>
         <source>Filter duplicated sequences</source>
         <translation>Filter duplicated sequences</translation>
     </message>
@@ -617,17 +617,17 @@ Set up the directory:</translation>
 <context>
     <name>StringActionDialog</name>
     <message>
-        <location filename="../src/ui/StringActionDialog.ui" line="26"/>
+        <location filename="../src/StringActionDialog.ui" line="26"/>
         <source>New String Action</source>
         <translation>New String Action</translation>
     </message>
     <message>
-        <location filename="../src/ui/StringActionDialog.ui" line="37"/>
+        <location filename="../src/StringActionDialog.ui" line="37"/>
         <source>Merge strings into one string</source>
         <translation>Merge strings into one string</translation>
     </message>
     <message>
-        <location filename="../src/ui/StringActionDialog.ui" line="53"/>
+        <location filename="../src/StringActionDialog.ui" line="53"/>
         <source>Separator</source>
         <translation>Separator</translation>
     </message>
@@ -825,16 +825,29 @@ bowtie index file</translation>
     </message>
 </context>
 <context>
+    <name>U2::EditBreakpointLabelsDialog</name>
+    <message>
+        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="49"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="50"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+</context>
+<context>
     <name>U2::EditMarkerDialog</name>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="401"/>
         <source>OK</source>
-        <translation type="unfinished">OK</translation>
+        <translation>OK</translation>
     </message>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="402"/>
         <source>Cancel</source>
-        <translation type="unfinished">Cancel</translation>
+        <translation>Cancel</translation>
     </message>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="410"/>
@@ -853,12 +866,12 @@ bowtie index file</translation>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="46"/>
         <source>OK</source>
-        <translation type="unfinished">OK</translation>
+        <translation>OK</translation>
     </message>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="47"/>
         <source>Cancel</source>
-        <translation type="unfinished">Cancel</translation>
+        <translation>Cancel</translation>
     </message>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="84"/>
@@ -1025,6 +1038,19 @@ bowtie index file</translation>
     </message>
 </context>
 <context>
+    <name>U2::NewBreakpointDialog</name>
+    <message>
+        <location filename="../src/NewBreakpointDialog.cpp" line="34"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/NewBreakpointDialog.cpp" line="35"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+</context>
+<context>
     <name>U2::NewGrouperSlotDialog</name>
     <message>
         <location filename="../src/NewGrouperSlotDialog.cpp" line="39"/>
@@ -1491,11 +1517,4 @@ bowtie index file</translation>
         <translation>UGENE workflow documents</translation>
     </message>
 </context>
-<context>
-    <name>WorkflowUtils</name>
-    <message>
-        <source>UGENE workflow documents</source>
-        <translation type="vanished">UGENE workflow documents</translation>
-    </message>
-</context>
 </TS>
diff --git a/src/corelibs/U2Designer/transl/russian.ts b/src/corelibs/U2Designer/transl/russian.ts
index bf760c9..251fb2c 100644
--- a/src/corelibs/U2Designer/transl/russian.ts
+++ b/src/corelibs/U2Designer/transl/russian.ts
@@ -4,24 +4,24 @@
 <context>
     <name>AnnsActionDialog</name>
     <message>
-        <location filename="../src/ui/AnnsActionDialog.ui" line="14"/>
+        <location filename="../src/AnnsActionDialog.ui" line="14"/>
         <source>New Annotations Action</source>
         <translation>Новые аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ui/AnnsActionDialog.ui" line="34"/>
+        <location filename="../src/AnnsActionDialog.ui" line="34"/>
         <source>Merge into one annotation table</source>
         <translation>Соединить в одну таблицу</translation>
     </message>
     <message>
-        <location filename="../src/ui/AnnsActionDialog.ui" line="53"/>
+        <location filename="../src/AnnsActionDialog.ui" line="53"/>
         <source>Shift annotations using
 this merge sequence slot:</source>
         <translation>Сдвинуть аннотации
 используя слот:</translation>
     </message>
     <message>
-        <location filename="../src/ui/AnnsActionDialog.ui" line="64"/>
+        <location filename="../src/AnnsActionDialog.ui" line="64"/>
         <source>Filter duplicated annotations</source>
         <translation>Отфильтровать повторы</translation>
     </message>
@@ -29,27 +29,27 @@ this merge sequence slot:</source>
 <context>
     <name>BreakpointHitCountDialog</name>
     <message>
-        <location filename="../src/ui/BreakpointHitCountDialog.ui" line="26"/>
+        <location filename="../src/BreakpointHitCountDialog.ui" line="26"/>
         <source>Breakpoint Hit Count</source>
         <translation>Счетчик точек остановки</translation>
     </message>
     <message>
-        <location filename="../src/ui/BreakpointHitCountDialog.ui" line="50"/>
+        <location filename="../src/BreakpointHitCountDialog.ui" line="50"/>
         <source>When the breakpoint is h&it:</source>
         <translation>Условие о&становки:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BreakpointHitCountDialog.ui" line="89"/>
+        <location filename="../src/BreakpointHitCountDialog.ui" line="89"/>
         <source>Current hit count:</source>
         <translation>Текущее значение:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BreakpointHitCountDialog.ui" line="96"/>
+        <location filename="../src/BreakpointHitCountDialog.ui" line="96"/>
         <source>0</source>
         <translation>0</translation>
     </message>
     <message>
-        <location filename="../src/ui/BreakpointHitCountDialog.ui" line="43"/>
+        <location filename="../src/BreakpointHitCountDialog.ui" line="43"/>
         <source>A breakpoint is hit when the breakpoint location is reached and the condition is<br>satisfied. The hit count is the number of times the breakpoint has been hit.</source>
         <translation>Остановкапроизойдет когда текущее состояние достигнет критической точки и условия <br>будут выполнены. Количество совпадений это сколько раз сработала точка остановки.</translation>
     </message>
@@ -57,17 +57,17 @@ this merge sequence slot:</source>
 <context>
     <name>CreateDirectoryDialog</name>
     <message>
-        <location filename="../src/ui/CreateDirectoryDialog.ui" line="14"/>
+        <location filename="../src/CreateDirectoryDialog.ui" line="14"/>
         <source>Create a directory</source>
         <translation>Создание директории</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateDirectoryDialog.ui" line="43"/>
+        <location filename="../src/CreateDirectoryDialog.ui" line="43"/>
         <source>Parent directory:</source>
         <translation>Родительская директория:</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateDirectoryDialog.ui" line="63"/>
+        <location filename="../src/CreateDirectoryDialog.ui" line="63"/>
         <source>Name:</source>
         <translation>Имя:</translation>
     </message>
@@ -75,37 +75,37 @@ this merge sequence slot:</source>
 <context>
     <name>DatasetWidget</name>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="20"/>
+        <location filename="../src/DatasetWidget.ui" line="20"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="40"/>
+        <location filename="../src/DatasetWidget.ui" line="40"/>
         <source>Add file(s)</source>
         <translation>Добавить файл(ы)</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="62"/>
+        <location filename="../src/DatasetWidget.ui" line="62"/>
         <source>Add directory</source>
         <translation>Добавить директорию</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="84"/>
+        <location filename="../src/DatasetWidget.ui" line="84"/>
         <source>Add data from shared databases</source>
         <translation>Добавить данные из удаленной базы данных</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="116"/>
+        <location filename="../src/DatasetWidget.ui" line="116"/>
         <source>Up url(s)</source>
         <translation>Переместить путь(и) выше</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="141"/>
+        <location filename="../src/DatasetWidget.ui" line="141"/>
         <source>Down url(s)</source>
         <translation>Переместить путь(и) ниже</translation>
     </message>
     <message>
-        <location filename="../src/ui/DatasetWidget.ui" line="166"/>
+        <location filename="../src/DatasetWidget.ui" line="166"/>
         <source>Delete urls(s)</source>
         <translation>Удалить путь(и)</translation>
     </message>
@@ -113,12 +113,12 @@ this merge sequence slot:</source>
 <context>
     <name>DbFolderOptions</name>
     <message>
-        <location filename="../src/ui/DbFolderOptions.ui" line="32"/>
+        <location filename="../src/DbFolderOptions.ui" line="32"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/DbFolderOptions.ui" line="50"/>
+        <location filename="../src/DbFolderOptions.ui" line="50"/>
         <source>Recursive</source>
         <translation>Рекурсивно</translation>
     </message>
@@ -126,22 +126,22 @@ this merge sequence slot:</source>
 <context>
     <name>DirectoryOptions</name>
     <message>
-        <location filename="../src/ui/DirectoryOptions.ui" line="32"/>
+        <location filename="../src/DirectoryOptions.ui" line="32"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/DirectoryOptions.ui" line="46"/>
+        <location filename="../src/DirectoryOptions.ui" line="46"/>
         <source>Exclude mask</source>
         <translation>Исключить маску</translation>
     </message>
     <message>
-        <location filename="../src/ui/DirectoryOptions.ui" line="75"/>
+        <location filename="../src/DirectoryOptions.ui" line="75"/>
         <source>Inсlude mask</source>
         <translation>Включить маску</translation>
     </message>
     <message>
-        <location filename="../src/ui/DirectoryOptions.ui" line="112"/>
+        <location filename="../src/DirectoryOptions.ui" line="112"/>
         <source>Recursive</source>
         <translation>Рекурсивно</translation>
     </message>
@@ -149,22 +149,22 @@ this merge sequence slot:</source>
 <context>
     <name>EditBreakpointLabelsDialog</name>
     <message>
-        <location filename="../src/ui/EditBreakpointLabelsDialog.ui" line="60"/>
+        <location filename="../src/EditBreakpointLabelsDialog.ui" line="60"/>
         <source>O&r choose among existing labels</source>
         <translation>И&ли выберите среди существующих ярлыков</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditBreakpointLabelsDialog.ui" line="53"/>
+        <location filename="../src/EditBreakpointLabelsDialog.ui" line="53"/>
         <source>&Add</source>
         <translation>&Добавить</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditBreakpointLabelsDialog.ui" line="26"/>
+        <location filename="../src/EditBreakpointLabelsDialog.ui" line="26"/>
         <source>Edit Breakpoint Labels</source>
         <translation>Редактирование ярлыков точек остановки</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditBreakpointLabelsDialog.ui" line="34"/>
+        <location filename="../src/EditBreakpointLabelsDialog.ui" line="34"/>
         <source>T&ype a new label</source>
         <translation>Т&ип нового ярлыка</translation>
     </message>
@@ -172,27 +172,27 @@ this merge sequence slot:</source>
 <context>
     <name>EditFloatMarkerWidget</name>
     <message>
-        <location filename="../src/ui/EditFloatMarkerWidget.ui" line="14"/>
+        <location filename="../src/EditFloatMarkerWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFloatMarkerWidget.ui" line="20"/>
+        <location filename="../src/EditFloatMarkerWidget.ui" line="20"/>
         <source>Interval:</source>
         <translation>Интервал:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFloatMarkerWidget.ui" line="42"/>
+        <location filename="../src/EditFloatMarkerWidget.ui" line="42"/>
         <source>..</source>
         <translation>..</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFloatMarkerWidget.ui" line="64"/>
+        <location filename="../src/EditFloatMarkerWidget.ui" line="64"/>
         <source>Less than:</source>
         <translation>Меньше чем:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFloatMarkerWidget.ui" line="94"/>
+        <location filename="../src/EditFloatMarkerWidget.ui" line="94"/>
         <source>Greater than:</source>
         <translation>Больше чем:</translation>
     </message>
@@ -200,29 +200,29 @@ this merge sequence slot:</source>
 <context>
     <name>EditIntegerMarkerWidget</name>
     <message>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="20"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="20"/>
         <source>Interval:</source>
         <translation>Интервал:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="26"/>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="67"/>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="97"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="26"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="67"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="97"/>
         <source>radioButtonsGroup</source>
         <translation>radioButtonsGroup</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="45"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="45"/>
         <source>..</source>
         <translation>..</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="64"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="64"/>
         <source>Less than:</source>
         <translation>Меньше чем:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditIntegerMarkerWidget.ui" line="94"/>
+        <location filename="../src/EditIntegerMarkerWidget.ui" line="94"/>
         <source>Greater than:</source>
         <translation>Больше чем:</translation>
     </message>
@@ -230,17 +230,17 @@ this merge sequence slot:</source>
 <context>
     <name>EditMarkerDialog</name>
     <message>
-        <location filename="../src/ui/EditMarkerDialog.ui" line="14"/>
+        <location filename="../src/EditMarkerDialog.ui" line="14"/>
         <source>Edit Marker</source>
         <translation>Свойства маркера</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerDialog.ui" line="28"/>
+        <location filename="../src/EditMarkerDialog.ui" line="28"/>
         <source>Marker name:</source>
         <translation>Имя маркера:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerDialog.ui" line="35"/>
+        <location filename="../src/EditMarkerDialog.ui" line="35"/>
         <source>NewMarker</source>
         <translation>NewMarker</translation>
     </message>
@@ -248,42 +248,42 @@ this merge sequence slot:</source>
 <context>
     <name>EditMarkerGroupDialog</name>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="14"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="14"/>
         <source>Edit Marker Group</source>
         <translation>Свойства группы маркеров</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="22"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="22"/>
         <source>Marker group name:</source>
         <translation>Имя группы маркеров:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="29"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="29"/>
         <source>NewMarkerGroup</source>
         <translation>NewMarkerGroup</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="36"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="36"/>
         <source>Marker group type:</source>
         <translation>Тип группы маркеров:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="46"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="46"/>
         <source>Parameter:</source>
         <translation>Параметр:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="60"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="60"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="80"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="80"/>
         <source>Edit</source>
         <translation>Свойства</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditMarkerGroupDialog.ui" line="87"/>
+        <location filename="../src/EditMarkerGroupDialog.ui" line="87"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
@@ -291,68 +291,68 @@ this merge sequence slot:</source>
 <context>
     <name>EditStringMarkerWidget</name>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="14"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="20"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="20"/>
         <source>Starts with</source>
         <translation>Начиная с</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="26"/>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="39"/>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="52"/>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="65"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="26"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="39"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="52"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="65"/>
         <source>buttonGroup</source>
         <translation>buttonGroup</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="36"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="36"/>
         <source>Ends with</source>
         <translation>Заканчивая</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="49"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="49"/>
         <source>Contains</source>
         <translation>Содержит</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditStringMarkerWidget.ui" line="62"/>
+        <location filename="../src/EditStringMarkerWidget.ui" line="62"/>
         <source>Regular expression</source>
-        <translation>Регулярные выражения</translation>
+        <translation>Регулярное выражение</translation>
     </message>
 </context>
 <context>
     <name>GrouperEditorWidget</name>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="14"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="22"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="22"/>
         <source>Group slot</source>
         <translation>Слот</translation>
     </message>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="39"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="39"/>
         <source>Group operation</source>
         <translation>Операция</translation>
     </message>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="60"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="60"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="80"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="80"/>
         <source>Edit</source>
         <translation>Редактивароть</translation>
     </message>
     <message>
-        <location filename="../src/ui/GrouperEditorWidget.ui" line="87"/>
+        <location filename="../src/GrouperEditorWidget.ui" line="87"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
@@ -360,22 +360,22 @@ this merge sequence slot:</source>
 <context>
     <name>MarkerEditorWidget</name>
     <message>
-        <location filename="../src/ui/MarkerEditorWidget.ui" line="14"/>
+        <location filename="../src/MarkerEditorWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/MarkerEditorWidget.ui" line="22"/>
+        <location filename="../src/MarkerEditorWidget.ui" line="22"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/ui/MarkerEditorWidget.ui" line="42"/>
+        <location filename="../src/MarkerEditorWidget.ui" line="42"/>
         <source>Edit</source>
         <translation>Редактировать</translation>
     </message>
     <message>
-        <location filename="../src/ui/MarkerEditorWidget.ui" line="49"/>
+        <location filename="../src/MarkerEditorWidget.ui" line="49"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
@@ -383,22 +383,22 @@ this merge sequence slot:</source>
 <context>
     <name>MsaActionDialog</name>
     <message>
-        <location filename="../src/ui/MsaActionDialog.ui" line="26"/>
+        <location filename="../src/MsaActionDialog.ui" line="26"/>
         <source>New Alignment Action</source>
         <translation>Новое выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ui/MsaActionDialog.ui" line="34"/>
+        <location filename="../src/MsaActionDialog.ui" line="34"/>
         <source>Merge into one alignment</source>
         <translation>Соединить в одно выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ui/MsaActionDialog.ui" line="50"/>
+        <location filename="../src/MsaActionDialog.ui" line="50"/>
         <source>Alignment name</source>
         <translation>Имя выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ui/MsaActionDialog.ui" line="60"/>
+        <location filename="../src/MsaActionDialog.ui" line="60"/>
         <source>Filter duplicated rows</source>
         <translation>Отфильтровать повторяющиеся строки</translation>
     </message>
@@ -406,17 +406,17 @@ this merge sequence slot:</source>
 <context>
     <name>NewBreakpointDialog</name>
     <message>
-        <location filename="../src/ui/NewBreakpointDialog.ui" line="20"/>
+        <location filename="../src/NewBreakpointDialog.ui" line="20"/>
         <source>New Breakpoint</source>
         <translation>Новая точка остановки</translation>
     </message>
     <message>
-        <location filename="../src/ui/NewBreakpointDialog.ui" line="28"/>
+        <location filename="../src/NewBreakpointDialog.ui" line="28"/>
         <source>Break execution when it reaches this element in the workflow</source>
         <translation>Выполнение остановится, когда выполнение схемы дойдет до данного элемента</translation>
     </message>
     <message>
-        <location filename="../src/ui/NewBreakpointDialog.ui" line="35"/>
+        <location filename="../src/NewBreakpointDialog.ui" line="35"/>
         <source>&Element: </source>
         <translation>&Элемент: </translation>
     </message>
@@ -424,17 +424,17 @@ this merge sequence slot:</source>
 <context>
     <name>NewGrouperSlotDialog</name>
     <message>
-        <location filename="../src/ui/NewGrouperSlotDialog.ui" line="32"/>
+        <location filename="../src/NewGrouperSlotDialog.ui" line="32"/>
         <source>Setup New Data Merge Action</source>
         <translation>Объединение данных</translation>
     </message>
     <message>
-        <location filename="../src/ui/NewGrouperSlotDialog.ui" line="43"/>
+        <location filename="../src/NewGrouperSlotDialog.ui" line="43"/>
         <source>Source data slot</source>
         <translation>Слот с данными</translation>
     </message>
     <message>
-        <location filename="../src/ui/NewGrouperSlotDialog.ui" line="60"/>
+        <location filename="../src/NewGrouperSlotDialog.ui" line="60"/>
         <source>Name of new slot with merged data</source>
         <translation>Имя нового слота с объединенными данными</translation>
     </message>
@@ -442,28 +442,28 @@ this merge sequence slot:</source>
 <context>
     <name>OutputFileDialog</name>
     <message>
-        <location filename="../src/ui/OutputFileDialog.ui" line="14"/>
+        <location filename="../src/OutputFileDialog.ui" line="14"/>
         <source>Save file/directory</source>
         <translation>Сохранить файл/директорию</translation>
     </message>
     <message>
-        <location filename="../src/ui/OutputFileDialog.ui" line="31"/>
+        <location filename="../src/OutputFileDialog.ui" line="31"/>
         <source>Create directory</source>
         <translation>Создать директорию</translation>
     </message>
     <message>
-        <location filename="../src/ui/OutputFileDialog.ui" line="63"/>
-        <location filename="../src/ui/OutputFileDialog.ui" line="82"/>
+        <location filename="../src/OutputFileDialog.ui" line="63"/>
+        <location filename="../src/OutputFileDialog.ui" line="82"/>
         <source>Save to file system</source>
         <translation>Сохранить в файловую систему</translation>
     </message>
     <message>
-        <location filename="../src/ui/OutputFileDialog.ui" line="126"/>
+        <location filename="../src/OutputFileDialog.ui" line="126"/>
         <source>Directory:</source>
         <translation>Директория:</translation>
     </message>
     <message>
-        <location filename="../src/ui/OutputFileDialog.ui" line="146"/>
+        <location filename="../src/OutputFileDialog.ui" line="146"/>
         <source>File name:</source>
         <translation>Имя файла:</translation>
     </message>
@@ -573,43 +573,43 @@ Set up the directory:</source>
 <context>
     <name>SequeceActionDialog</name>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="32"/>
+        <location filename="../src/SequenceActionDialog.ui" line="32"/>
         <source>New Sequence Action</source>
         <translation>Новая последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="40"/>
+        <location filename="../src/SequenceActionDialog.ui" line="40"/>
         <source>Merge into one sequence</source>
         <translation>Соединить в одну последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="46"/>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="102"/>
+        <location filename="../src/SequenceActionDialog.ui" line="46"/>
+        <location filename="../src/SequenceActionDialog.ui" line="102"/>
         <source>buttonGroup</source>
         <translation>buttonGroup</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="62"/>
+        <location filename="../src/SequenceActionDialog.ui" line="62"/>
         <source>Merged sequence name</source>
         <translation>Имя общей последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="72"/>
+        <location filename="../src/SequenceActionDialog.ui" line="72"/>
         <source>Gap size</source>
         <translation>Размер пробела</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="99"/>
+        <location filename="../src/SequenceActionDialog.ui" line="99"/>
         <source>Merge into alignment</source>
         <translation>Соединить в выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="118"/>
+        <location filename="../src/SequenceActionDialog.ui" line="118"/>
         <source>Alignment name</source>
         <translation>Имя выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ui/SequenceActionDialog.ui" line="128"/>
+        <location filename="../src/SequenceActionDialog.ui" line="128"/>
         <source>Filter duplicated sequences</source>
         <translation>Отфильтровать повторяющиеся последовательности</translation>
     </message>
@@ -617,17 +617,17 @@ Set up the directory:</source>
 <context>
     <name>StringActionDialog</name>
     <message>
-        <location filename="../src/ui/StringActionDialog.ui" line="26"/>
+        <location filename="../src/StringActionDialog.ui" line="26"/>
         <source>New String Action</source>
         <translation>Новая строка</translation>
     </message>
     <message>
-        <location filename="../src/ui/StringActionDialog.ui" line="37"/>
+        <location filename="../src/StringActionDialog.ui" line="37"/>
         <source>Merge strings into one string</source>
         <translation>Соединить в одну строку</translation>
     </message>
     <message>
-        <location filename="../src/ui/StringActionDialog.ui" line="53"/>
+        <location filename="../src/StringActionDialog.ui" line="53"/>
         <source>Separator</source>
         <translation>Разделитель</translation>
     </message>
@@ -825,16 +825,29 @@ bowtie index file</source>
     </message>
 </context>
 <context>
+    <name>U2::EditBreakpointLabelsDialog</name>
+    <message>
+        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="49"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="50"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+</context>
+<context>
     <name>U2::EditMarkerDialog</name>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="401"/>
         <source>OK</source>
-        <translation type="unfinished">OK</translation>
+        <translation>OK</translation>
     </message>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="402"/>
         <source>Cancel</source>
-        <translation type="unfinished">Отмена</translation>
+        <translation>Отмена</translation>
     </message>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="410"/>
@@ -853,12 +866,12 @@ bowtie index file</source>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="46"/>
         <source>OK</source>
-        <translation type="unfinished">OK</translation>
+        <translation>OK</translation>
     </message>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="47"/>
         <source>Cancel</source>
-        <translation type="unfinished">Отмена</translation>
+        <translation>Отмена</translation>
     </message>
     <message>
         <location filename="../src/EditMarkerGroupDialog.cpp" line="84"/>
@@ -1025,6 +1038,19 @@ bowtie index file</source>
     </message>
 </context>
 <context>
+    <name>U2::NewBreakpointDialog</name>
+    <message>
+        <location filename="../src/NewBreakpointDialog.cpp" line="34"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/NewBreakpointDialog.cpp" line="35"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+</context>
+<context>
     <name>U2::NewGrouperSlotDialog</name>
     <message>
         <location filename="../src/NewGrouperSlotDialog.cpp" line="39"/>
@@ -1461,7 +1487,7 @@ bowtie index file</source>
     <message>
         <location filename="../src/MarkerEditor.cpp" line="181"/>
         <source>Marker Group</source>
-        <translation>Группа маркеров</translation>
+        <translation>Группа маркера</translation>
     </message>
     <message>
         <location filename="../src/MarkerEditor.cpp" line="183"/>
@@ -1492,11 +1518,4 @@ bowtie index file</source>
         <translation>Вычислительные схемы UGENE</translation>
     </message>
 </context>
-<context>
-    <name>WorkflowUtils</name>
-    <message>
-        <source>UGENE workflow documents</source>
-        <translation type="vanished">Вычислительные схемы UGENE</translation>
-    </message>
-</context>
 </TS>
diff --git a/src/corelibs/U2Formats/CMakeLists.txt b/src/corelibs/U2Formats/CMakeLists.txt
new file mode 100644
index 0000000..7b32cb0
--- /dev/null
+++ b/src/corelibs/U2Formats/CMakeLists.txt
@@ -0,0 +1,26 @@
+cmake_minimum_required(VERSION 3.4)
+project(U2Formats)
+
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt5 REQUIRED Core Gui Widgets Sql)
+
+add_definitions(-DBUILDING_U2FORMATS_DLL)
+
+include_directories(src)
+include_directories(../../include)
+include_directories(../../libs_3rdparty/samtools/src)
+include_directories(../../libs_3rdparty/samtools/src/samtools)
+
+file(GLOB_RECURSE SRCS src/*.cpp)
+file(GLOB_RECURSE HDRS src/*.h)
+qt5_add_resources(RCC_SRCS U2Formats.qrc)
+
+add_library(U2Formats SHARED ${HDRS} ${SRCS} ${RCC_SRCS})
+
+target_link_libraries(U2Formats
+        Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Sql
+        samtools ugenedb
+        U2Core U2Algorithm)
+
diff --git a/src/corelibs/U2Formats/U2Formats.pri b/src/corelibs/U2Formats/U2Formats.pri
index 7314a78..2bf6e08 100644
--- a/src/corelibs/U2Formats/U2Formats.pri
+++ b/src/corelibs/U2Formats/U2Formats.pri
@@ -4,12 +4,14 @@ MODULE_ID=U2Formats
 include( ../../ugene_lib_common.pri )
 
 use_bundled_zlib() {
-    INCLUDEPATH += ../../libs_3rdparty/zlib/src
+    macx: LIBS += -lzlib
+} else {
+    macx: LIBS += -lz
 }
 
 UGENE_RELATIVE_DESTDIR = ''
 
-DEFINES+= QT_FATAL_ASSERT BUILDING_U2FORMATS_DLL
+DEFINES += QT_FATAL_ASSERT BUILDING_U2FORMATS_DLL
 
 LIBS += -L../../_release -lU2Core -lU2Algorithm
 LIBS += -lugenedb -lsamtools
@@ -44,6 +46,13 @@ INCLUDEPATH += ../../libs_3rdparty/sqlite3/src
             LIBS += -lzlibd
         }
 
+        macx {
+            use_bundled_zlib() {
+                LIBS -= -lzlib
+                LIBS += -lzlibd
+            }
+        }
+
         unix:POST_TARGETDEPS -= ../../_release/libsamtools.a
         unix:POST_TARGETDEPS += ../../_debug/libsamtoolsd.a
     }
diff --git a/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp b/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp
index deb9ad1..aa99860 100644
--- a/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp
+++ b/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp
@@ -69,7 +69,7 @@ namespace {
         QByteArray result;
         bool terminatorFound = false;
         do {
-            qint64 length = io->readLine(buffer, LOCAL_READ_BUFF_SIZE, &terminatorFound);
+            qint64 length = io->readLine(buffer, bufferSize, &terminatorFound);
             CHECK(-1 != length, result);
             result += QByteArray(buffer, length);
         } while (!terminatorFound && !io->isEof());
diff --git a/src/corelibs/U2Formats/src/BAMUtils.cpp b/src/corelibs/U2Formats/src/BAMUtils.cpp
index e2a0e11..3b8a8e0 100644
--- a/src/corelibs/U2Formats/src/BAMUtils.cpp
+++ b/src/corelibs/U2Formats/src/BAMUtils.cpp
@@ -555,7 +555,7 @@ static QMap<QString, int> getNumMap(const QList<GObject*> &objects, U2OpStatus &
     return result;
 }
 
-static void writeObjectsWithSamtools(samfile_t *out, const QList<GObject*> &objects, U2OpStatus &os) {
+static void writeObjectsWithSamtools(samfile_t *out, const QList<GObject*> &objects, U2OpStatus &os, const U2Region &desiredRegion) {
     foreach (GObject *obj, objects) {
         AssemblyObject *assemblyObj = dynamic_cast<AssemblyObject*>(obj);
         SAFE_POINT_EXT(NULL != assemblyObj, os.setError("NULL assembly object"), );
@@ -568,8 +568,11 @@ static void writeObjectsWithSamtools(samfile_t *out, const QList<GObject*> &obje
 
         U2DataId assemblyId = assemblyObj->getEntityRef().entityId;
         qint64 maxPos = dbi->getMaxEndPos(assemblyId, os);
-        U2Region wholeAssembly(0, maxPos + 1);
-        QScopedPointer< U2DbiIterator<U2AssemblyRead> > reads(dbi->getReads(assemblyId, wholeAssembly, os, true));
+        U2Region region(0, maxPos + 1);
+        if (desiredRegion != U2_REGION_MAX) {
+            region = desiredRegion;
+        }
+        QScopedPointer< U2DbiIterator<U2AssemblyRead> > reads(dbi->getReads(assemblyId, region, os, true));
         CHECK_OP(os, );
 
         ReadsContext ctx(assemblyObj->getGObjectName(), getNumMap(objects, os));
@@ -593,7 +596,7 @@ void BAMUtils::writeDocument(Document *doc, U2OpStatus &os) {
         os);
 }
 
-void BAMUtils::writeObjects(const QList<GObject*> &objects, const GUrl &urlStr, const DocumentFormatId &formatId, U2OpStatus &os) {
+void BAMUtils::writeObjects(const QList<GObject*> &objects, const GUrl &urlStr, const DocumentFormatId &formatId, U2OpStatus &os, const U2Region &desiredRegion) {
     CHECK_EXT(!objects.isEmpty(), os.setError("No assembly objects"), );
 
     QByteArray url = urlStr.getURLString().toLocal8Bit();
@@ -620,7 +623,7 @@ void BAMUtils::writeObjects(const QList<GObject*> &objects, const GUrl &urlStr,
     bam_header_destroy(header);
     CHECK_EXT(NULL != out, os.setError(QString("Can not open file for writing: %1").arg(url.constData())), );
 
-    writeObjectsWithSamtools(out, objects, os);
+    writeObjectsWithSamtools(out, objects, os, desiredRegion);
     samclose(out);
 }
 
diff --git a/src/corelibs/U2Formats/src/BAMUtils.h b/src/corelibs/U2Formats/src/BAMUtils.h
index 1409927..2effc64 100644
--- a/src/corelibs/U2Formats/src/BAMUtils.h
+++ b/src/corelibs/U2Formats/src/BAMUtils.h
@@ -25,11 +25,14 @@
 #include <U2Core/GUrl.h>
 #include <U2Core/U2OpStatus.h>
 #include <U2Core/DNASequence.h>
+#include <U2Core/U2Region.h>
+#include <U2Core/DocumentModel.h>
 
 namespace U2 {
 
 class Document;
 class GObject;
+class AssemblyObject;
 
 class U2FORMATS_EXPORT BAMUtils : public QObject {
     Q_OBJECT
@@ -68,7 +71,7 @@ public:
 
     static void writeDocument(Document *doc, U2OpStatus &os);
 
-    static void writeObjects(const QList<GObject*> &objects, const GUrl &url, const DocumentFormatId &formatId, U2OpStatus &os);
+    static void writeObjects(const QList<GObject*> &objects, const GUrl &url, const DocumentFormatId &formatId, U2OpStatus &os, const U2Region &desiredRegion = U2_REGION_MAX);
 
     static bool isEqualByLength(const GUrl &fileUrl1, const GUrl &fileUrl2, U2OpStatus &os, bool isBAM = false );
 
diff --git a/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp b/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp
index 9c15047..849f970 100644
--- a/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp
+++ b/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp
@@ -19,8 +19,6 @@
  * MA 02110-1301, USA.
  */
 
-#include "DocumentFormatUtils.h"
-
 #include <U2Core/AnnotationSettings.h>
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
@@ -31,6 +29,7 @@
 #include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GenbankFeatures.h>
+#include <U2Core/L10n.h>
 #include <U2Core/MAlignment.h>
 #include <U2Core/MAlignmentObject.h>
 #include <U2Core/TextUtils.h>
@@ -41,6 +40,8 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2SequenceUtils.h>
 
+#include "DocumentFormatUtils.h"
+
 namespace U2 {
 
 static int getIntSettings(const QVariantMap& fs, const char* sName, int defVal) {
@@ -315,5 +316,12 @@ U2SequenceObject* DocumentFormatUtils::addMergedSequenceObjectDeprecated(const U
     return so;
 }
 
+QString DocumentFormatUtils::getFormatNameById(const DocumentFormatId &formatId) {
+    DocumentFormatRegistry *registry = AppContext::getDocumentFormatRegistry();
+    SAFE_POINT(NULL != registry, L10N::nullPointerError("document format registry"), "");
+    DocumentFormat *format = registry->getFormatById(formatId);
+    SAFE_POINT(NULL != format, QString("Document format '%1' is not registered").arg(formatId), "");
+    return format->getFormatName();
+}
 
 } //namespace
diff --git a/src/corelibs/U2Formats/src/DocumentFormatUtils.h b/src/corelibs/U2Formats/src/DocumentFormatUtils.h
index 7748edb..4a59c1e 100644
--- a/src/corelibs/U2Formats/src/DocumentFormatUtils.h
+++ b/src/corelibs/U2Formats/src/DocumentFormatUtils.h
@@ -22,11 +22,11 @@
 #ifndef _U2_DOCUMENT_FORMAT_UTILS_H_
 #define _U2_DOCUMENT_FORMAT_UTILS_H_
 
+#include <QStringList>
+
 #include <U2Core/DocumentModel.h>
 #include <U2Core/U2Region.h>
 
-#include <QtCore/QStringList>
-
 namespace U2 {
 
 class AnnotationSettings;
@@ -84,6 +84,8 @@ public:
                                                                QByteArray& mergedSequence,
                                                                const QVector<U2Region>& mergedMapping,
                                                                U2OpStatus& os);
+
+    static QString getFormatNameById(const DocumentFormatId &formatId);
 };
 
 }//namespace
diff --git a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp
index 87805a0..fde2e32 100644
--- a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp
+++ b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp
@@ -22,6 +22,7 @@
 #include <limits.h>
 
 #include <QBuffer>
+#include <QCoreApplication>
 #include <QScopedPointer>
 
 #include <U2Core/AnnotationTableObject.h>
@@ -52,8 +53,10 @@ namespace U2 {
 
 const int ParserState::LOCAL_READ_BUFFER_SIZE = 40000;
 
-/* TRANSLATOR U2::EMBLGenbankAbstractDocument */
-//TODO: local8bit or ascii??
+const QString EMBLGenbankAbstractDocument::REMOTE_ENTRY_WARNING_MESSAGE = QCoreApplication::translate("EMBLGenbankAbstractDocument", "The file contains features of another remote GenBank file. These features have been skipped.");
+const QString EMBLGenbankAbstractDocument::JOIN_COMPLEMENT_WARNING_MESSAGE = QCoreApplication::translate("EMBLGenbankAbstractDocument", "The file contains joined annotations with regions, located on different strands. All such joined parts will be stored on the same strand.");
+const QString EMBLGenbankAbstractDocument::LOCATION_PARSING_ERROR_MESSAGE = QCoreApplication::translate("EMBLGenbankAbstractDocument", "Location parsing error.");
+const QString EMBLGenbankAbstractDocument::SEQ_LEN_WARNING_MESSAGE = QCoreApplication::translate("EMBLGenbankAbstractDocument", "The number of valid sequence characters does not coincide with the declared size in the sequence header.");
 
 EMBLGenbankAbstractDocument::EMBLGenbankAbstractDocument(const DocumentFormatId& _id, const QString& _formatName, int mls,
                                                          DocumentFormatFlags flags, QObject* p)
@@ -76,6 +79,7 @@ Document* EMBLGenbankAbstractDocument::loadDocument(IOAdapter* io, const U2DbiRe
     CHECK_OP_EXT(os, qDeleteAll(objects), NULL);
 
     DocumentFormatUtils::updateFormatHints(objects, fs);
+    fs[DocumentReadingMode_LoadAsModified] = os.hasWarnings() && checkFlags(DocumentFormatFlag_SupportWriting);
     Document* doc = new Document(this, io->getFactory(), io->getURL(), dbiRef, objects, fs, writeLockReason);
     return doc;
 }
@@ -526,6 +530,45 @@ static void checkQuotes(const char* str, int len, bool& outerQuotes, bool& doubl
         }
     }
 }
+namespace {
+
+enum AnnotationProcessStatus {
+    ProcessAnnotation,
+    SkipAnnotation
+};
+
+void addUniqueWarning(U2OpStatus &si, const QString &warning) {
+    const QStringList warnings = si.getWarnings();
+    if (!warnings.contains(warning)) {
+        si.addWarning(warning);
+    }
+}
+
+AnnotationProcessStatus processParsingResult(const U2Location &location, Genbank::LocationParser::ParsingResult parsingResult, const QStringList &parsingMessages, U2OpStatus &si) {
+    switch (parsingResult) {
+    case Genbank::LocationParser::Success:
+        return ProcessAnnotation;
+    case Genbank::LocationParser::ParsedWithWarnings:
+        foreach (const QString &message, parsingMessages) {
+            if (message.contains(Genbank::LocationParser::REMOTE_ENTRY_WARNING)) {
+                addUniqueWarning(si, EMBLGenbankAbstractDocument::REMOTE_ENTRY_WARNING_MESSAGE);
+            } else if (message.contains(Genbank::LocationParser::JOIN_COMPLEMENT_WARNING)) {
+                addUniqueWarning(si, EMBLGenbankAbstractDocument::JOIN_COMPLEMENT_WARNING_MESSAGE);
+            } else {
+                si.addWarning(message);
+            }
+        }
+        return location->isEmpty() ? SkipAnnotation : ProcessAnnotation;
+    case Genbank::LocationParser::Failure:
+        si.setError(parsingMessages.isEmpty() ? EMBLGenbankAbstractDocument::LOCATION_PARSING_ERROR_MESSAGE : parsingMessages.last());
+        return SkipAnnotation;
+    default:
+        assert(false);
+        return ProcessAnnotation;
+    }
+}
+
+}
 
 SharedAnnotationData EMBLGenbankAbstractDocument::readAnnotation(IOAdapter* io, char* cbuff, int len,
                                                                  int READ_BUFF_SIZE, U2OpStatus& si, int offset, int seqLen)
@@ -547,15 +590,13 @@ SharedAnnotationData EMBLGenbankAbstractDocument::readAnnotation(IOAdapter* io,
         return SharedAnnotationData();
     }
 
-    QString errorReport = Genbank::LocationParser::parseLocation(cbuff+21, qlen-21, a->location, seqLen);
-    if (a->location->isEmpty()) {
-        si.setError(errorReport);
+    QStringList messages;
+    Genbank::LocationParser::ParsingResult parsingResult = Genbank::LocationParser::parseLocation(cbuff + 21, qlen - 21, a->location, messages, seqLen);
+    if (SkipAnnotation == processParsingResult(a->location, parsingResult, messages, si)) {
+        skipInvalidAnnotation(len, io, cbuff, READ_BUFF_SIZE);
         return SharedAnnotationData();
     }
-    // omit sorting because of splitted annotations
-    /*if (a->location->isMultiRegion()) {
-        qSort(a->location->regions);
-    }*/
+
     if (offset>0) {
         U2Region::shift(offset, a->location->regions);
     }
@@ -626,18 +667,14 @@ bool EMBLGenbankAbstractDocument::readSequence(ParserState* st, U2SequenceImport
     IOAdapter* io = st->io;
     U2OpStatus& si = st->si;
     si.setDescription(tr("Reading sequence %1").arg(st->entry->name));
-    //res.reserve(res.size() + headerSeqLen);
     QByteArray readBuffer(DocumentFormat::READ_BUFF_SIZE, '\0');
     char* buff  = readBuffer.data();
 
     //reading sequence
-    QBuffer writer(&res);
-    writer.open( QIODevice::WriteOnly);
-    bool ok = true;
     int len;
-    int dataOffset = 0;
-    bool numIsPrefix = isNcbiLikeFormat();
-    while (ok && (len = io->readLine(buff, DocumentFormat::READ_BUFF_SIZE)) > 0) {
+    sequenceLen = 0;
+    fullSequenceLen = 0;
+    while ((len = io->readLine(buff, DocumentFormat::READ_BUFF_SIZE)) > 0) {
         if (si.isCoR()) {
             res.clear();
             break;
@@ -652,61 +689,20 @@ bool EMBLGenbankAbstractDocument::readSequence(ParserState* st, U2SequenceImport
             break;
         }
 
-        //compute data offset
-        bool foundNum = false;
-        bool foundSpaceAfterNum = false;
-        for(dataOffset = 0 ; dataOffset < len; dataOffset++) {
-            char c = numIsPrefix ? buff[dataOffset] : buff[len - dataOffset - 1];
-            bool isNum = c >= '0' && c <= '9';
-            bool isSpace = c == ' ' || c == '\t';
-            if (!isSpace && (!isNum || foundSpaceAfterNum)) {
-                if (!foundSpaceAfterNum) {
-                    //unknown character -> stop iteration
-                    dataOffset = len;
-                }
-                break;
-            }
-            foundNum = foundNum || isNum;
-            foundSpaceAfterNum = foundSpaceAfterNum || (isSpace && foundNum);
-        }
-
-        if (dataOffset == len) {
-            si.setError(tr("Error reading sequence: invalid sequence format"));
-            break;
-        }
-
-        bool isSeek = writer.seek(0);
-                assert(isSeek);Q_UNUSED(isSeek);
+        len = TextUtils::remove(buff, len, TextUtils::WHITES | TextUtils::NUMS);
+        seqImporter.addBlock(buff, len, os);
 
-        //add buffer to result
-        for (int i= (numIsPrefix ? dataOffset : 0), n = (numIsPrefix ? len : len -  dataOffset) ; i < n; i++) {
-            char c = buff[i];
-            if (c != ' ' && c != '\t') {
-                ok = writer.putChar(c);
-                if (!ok) {
-                    break;
-                }
-            }
-        }
-        if (!ok) {
-            si.setError(tr("Error reading sequence: memory allocation failed"));
-            break;
-        }
-
-        seqImporter.addBlock(res.data(),res.size(),os);
         if(os.isCoR()){
             break;
         }
-        sequenceLen += res.size();
-        fullSequenceLen += res.size();
-        res.clear();
+        sequenceLen += len;
+        fullSequenceLen += len;
 
         si.setProgress(io->getProgress());
     }
     if (!si.isCoR() && buff[0] != '/') {
         si.setError(tr("Sequence is truncated"));
     }
-    writer.close();
     return true; //FIXME
 }
 
@@ -731,6 +727,9 @@ void EMBLGenbankAbstractDocument::readAnnotations(ParserState* st, int offset) {
         }
         //parsing feature;
         SharedAnnotationData f = readAnnotation(st->io, st->buff, st->len, ParserState::LOCAL_READ_BUFFER_SIZE, st->si, offset, st->entry->seqLen);
+        if (f == NULL) {
+            continue;
+        }
         st->entry->features.push_back(f);
     } while (st->readNextLine());
 }
@@ -759,6 +758,28 @@ bool EMBLGenbankAbstractDocument::breakQualifierOnSpaceOnly(const QString & /*qu
     return true;
 }
 
+void EMBLGenbankAbstractDocument::skipInvalidAnnotation(int len, IOAdapter* io, char* cbuff, int READ_BUFF_SIZE) {
+    bool lineOk = true;
+    bool isQuotesOpened = false;
+    while ((len = io->readUntil(cbuff, READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk)) > 0) {
+        QByteArray line(cbuff, len);
+        bool isOpenedOnThisLine = line.count('"') % 2 == 1;
+        if (isQuotesOpened || isOpenedOnThisLine) {
+            if (isQuotesOpened && isOpenedOnThisLine) {
+                isQuotesOpened = false;
+            } else {
+                isQuotesOpened = true;
+            }
+            continue;
+        }
+        if (len == 0 || len < QN_COL + 1 || cbuff[K_COL] != ' ' || cbuff[A_COL] != '/' || cbuff[0] != fPrefix[0] || cbuff[1] != fPrefix[1]) {
+            io->skip(-len);
+            break;
+        }
+    }
+    return;
+}
+
 bool ParserState::hasKey( const char* key, int slen ) const {
     assert(slen <= valOffset);
     if (slen <= len && TextUtils::equals(key, buff, slen)) {
diff --git a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h
index 8f43b9d..a09a1be 100644
--- a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h
+++ b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h
@@ -54,6 +54,11 @@ public:
     static const QString LOCUS_TAG_CIRCULAR;
     static const QString LOCUS_TAG_LINEAR;
 
+    static const QString REMOTE_ENTRY_WARNING_MESSAGE;
+    static const QString JOIN_COMPLEMENT_WARNING_MESSAGE;
+    static const QString LOCATION_PARSING_ERROR_MESSAGE;
+    static const QString SEQ_LEN_WARNING_MESSAGE;
+
     // move to utils??
     static QString genObjectName(QSet<QString>& usedNames, const QString& name, const QVariantMap& info, int n, const GObjectType& t);
 
@@ -64,7 +69,10 @@ protected:
 
     virtual int     readMultilineQualifier(IOAdapter* io, char* cbuff, int maxSize, bool prevLineHasMaxSize, int lenFirstQualLine, U2OpStatus& os);
     virtual SharedAnnotationData readAnnotation(IOAdapter* io, char* cbuff, int contentLen, int bufSize, U2OpStatus& si, int offset, int seqLen = -1);
-    virtual bool    readSequence(ParserState*, U2SequenceImporter& , int&, int&, U2OpStatus&);
+
+    void skipInvalidAnnotation(int len, IOAdapter* io, char* cbuff, int READ_BUFF_SIZE);
+
+    virtual bool    readSequence(ParserState*, U2SequenceImporter&, int&, int&, U2OpStatus&);
 
     virtual bool readEntry(ParserState*, U2SequenceImporter& ,int& seqSize,int& fullSeqSize,bool merge, int gapSize,U2OpStatus&) = 0;
     virtual void readAnnotations(ParserState*, int offset);
@@ -111,12 +119,14 @@ class ParserState {
 public:
     ParserState(int off, IOAdapter* io, EMBLGenbankDataEntry* e, U2OpStatus& si)
         : valOffset(off), entry(e), io(io), buff(NULL), len(0), si(si) {}
+
     const int valOffset;
     EMBLGenbankDataEntry* entry;
     IOAdapter* io;
     char* buff;
     int len;
     U2OpStatus& si;
+
     QString value() const;
     QString key () const;
     bool hasKey(const char*, int slen) const;
@@ -125,6 +135,7 @@ public:
     bool hasValue() const {return len > valOffset;}
     bool readNextLine(bool emptyOK = false);
     bool isNull() const {return entry->name.isNull();}
+
     static const int LOCAL_READ_BUFFER_SIZE;
 };
 
diff --git a/src/corelibs/U2Formats/src/EMBLPlainTextFormat.cpp b/src/corelibs/U2Formats/src/EMBLPlainTextFormat.cpp
index 8a503a5..308c25a 100644
--- a/src/corelibs/U2Formats/src/EMBLPlainTextFormat.cpp
+++ b/src/corelibs/U2Formats/src/EMBLPlainTextFormat.cpp
@@ -206,6 +206,9 @@ bool EMBLPlainTextFormat::readEntry(ParserState* st,U2SequenceImporter& seqImpor
                 CHECK_OP(os,false);
             }
             readSequence(st,seqImporter,sequenceLen,fullSequenceLen,os);
+            if (fullSequenceLen != st->entry->seqLen && !si.getWarnings().contains(EMBLGenbankAbstractDocument::SEQ_LEN_WARNING_MESSAGE)) {
+                si.addWarning(EMBLGenbankAbstractDocument::SEQ_LEN_WARNING_MESSAGE);
+            }
             return true;
         }
 
diff --git a/src/corelibs/U2Formats/src/FastqFormat.cpp b/src/corelibs/U2Formats/src/FastqFormat.cpp
index a4002ef..66bcd1b 100644
--- a/src/corelibs/U2Formats/src/FastqFormat.cpp
+++ b/src/corelibs/U2Formats/src/FastqFormat.cpp
@@ -34,6 +34,7 @@
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/U2ObjectDbi.h>
 #include <U2Core/U2OpStatus.h>
+#include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2SequenceUtils.h>
 
@@ -211,11 +212,22 @@ static void readQuality(U2OpStatus& os, IOAdapter *io, QByteArray &sequence, int
     }
 }
 
+#define SKIPPED_LINES_ERRORS_LIMIT 50
+static bool errorLoggingBreak(U2OpStatus& os, QMap<QString, QString>& skippedLines, const QString& seqName){
+    if (os.isCoR()){
+        if (skippedLines.size() < SKIPPED_LINES_ERRORS_LIMIT){
+            skippedLines.insert(seqName, os.getError());
+        }
+        return true;
+    }
+    return false;
+}
+
 /**
  * FASTQ format specification: http://maq.sourceforge.net/fastq.shtml
  */
 static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& hints, const GUrl& docUrl, QList<GObject*>& objects, U2OpStatus& os,
-                 int gapSize, int predictedSize, QString& writeLockReason) {
+                 int gapSize, int predictedSize, QString& writeLockReason, QMap<QString, QString>& skippedLines) {
     DbiOperationsBlock opBlock(dbiRef, os);
     CHECK_OP(os, );
     Q_UNUSED(opBlock);
@@ -241,17 +253,22 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& hints
     int seqNumber = 0;
     int progressUpNum = 0;
 
+
     const int objectsCountLimit = hints.contains(DocumentReadingMode_MaxObjectsInDoc) ? hints[DocumentReadingMode_MaxObjectsInDoc].toInt() : -1;
     const bool settingsMakeUniqueName = !hints.value(DocumentReadingMode_DontMakeUniqueNames, false).toBool();
     while (!os.isCoR()) {
+        U2OpStatus2Log warningOs;
+
         //read header
-        QString sequenceName = readSequenceName(os, io, '@');
+        QString sequenceName = readSequenceName(warningOs, io, '@');
         // check for eof while trying to read another FASTQ block
         if (io->isEof()) {
             break;
         }
 
-        CHECK_OP_BREAK(os);
+        if(errorLoggingBreak(warningOs, skippedLines, sequenceName)){
+            continue;
+        }
 
         if(sequenceName.isEmpty()){
             sequenceName = "Sequence";
@@ -264,41 +281,76 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& hints
                 objName.squeeze();
                 uniqueNames.insert(objName);
             }
-            seqImporter.startSequence(dbiRef, folder, objName, false, os);
-            CHECK_OP_BREAK(os);
+            seqImporter.startSequence(dbiRef, folder, objName, false, warningOs);
+            if(errorLoggingBreak(warningOs, skippedLines, sequenceName)){
+                U2OpStatusImpl seqOs;
+                U2Sequence u2seq = seqImporter.finalizeSequenceAndValidate(seqOs);
+                continue;
+            }
         }
 
         //read sequence
         if (merge && sequence.length() > 0) {
-            seqImporter.addDefaultSymbolsBlock(gapSize,os);
+            seqImporter.addDefaultSymbolsBlock(gapSize, warningOs);
             sequenceStart += sequence.length();
             sequenceStart+=gapSize;
-            CHECK_OP_BREAK(os);
+            if(errorLoggingBreak(warningOs, skippedLines, sequenceName)){
+                U2OpStatusImpl seqOs;
+                U2Sequence u2seq = seqImporter.finalizeSequenceAndValidate(seqOs);
+                continue;
+            }
         }
 
         sequence.clear();
-        readSequence(os, io, sequence);
+        readSequence(warningOs, io, sequence);
+        if(errorLoggingBreak(warningOs, skippedLines, sequenceName)){
+            U2OpStatusImpl seqOs;
+            U2Sequence u2seq = seqImporter.finalizeSequenceAndValidate(seqOs);
+            continue;
+        }
         MemoryLocker lSequence(os, qCeil(sequence.size()/(1000*1000)));
         CHECK_OP_BREAK(os);
         Q_UNUSED(lSequence);
 
-        seqImporter.addBlock(sequence.data(),sequence.length(),os);
-        CHECK_OP_BREAK(os);
+        seqImporter.addBlock(sequence.data(),sequence.length(), warningOs);
+        if(errorLoggingBreak(warningOs, skippedLines, sequenceName)){
+            U2OpStatusImpl seqOs;
+            U2Sequence u2seq = seqImporter.finalizeSequenceAndValidate(seqOs);
+            continue;
+        }
 
-        QString qualSequenceName = readSequenceName(os, io, '+');
+        QString qualSequenceName = readSequenceName(warningOs, io, '+');
         if (!qualSequenceName.isEmpty()) {
-            static const QString err = U2::FastqFormat::tr("Not a valid FASTQ file: %1, sequence name differs from quality scores name: %2 and %3");
-            CHECK_EXT_BREAK(sequenceName == qualSequenceName,
-                os.setError(err.arg(docUrl.getURLString()).arg(sequenceName).arg(qualSequenceName)));
+            static const QString err = U2::FastqFormat::tr("Sequence name differs from quality scores name: %1 and %2");
+            if (sequenceName != qualSequenceName){
+                warningOs.setError(err.arg(sequenceName).arg(qualSequenceName));
+            }
+            if(errorLoggingBreak(warningOs, skippedLines, sequenceName)){
+                U2OpStatusImpl seqOs;
+                U2Sequence u2seq = seqImporter.finalizeSequenceAndValidate(seqOs);
+                continue;
+            }
         }
 
         // read qualities
         qualityScores.clear();
-        readQuality(os, io, qualityScores, sequence.size());
-        CHECK_OP_BREAK(os);
+        readQuality(warningOs, io, qualityScores, sequence.size());
+        if(errorLoggingBreak(warningOs, skippedLines, sequenceName)){
+            U2OpStatusImpl seqOs;
+            U2Sequence u2seq = seqImporter.finalizeSequenceAndValidate(seqOs);
+            continue;
+        }
+
+        static const QString err = U2::FastqFormat::tr("Bad quality scores: inconsistent size.");
+        if(sequence.length() != qualityScores.length()){
+            warningOs.setError(err);
+        }
+        if(errorLoggingBreak(warningOs, skippedLines, sequenceName)){
+            U2OpStatusImpl seqOs;
+            U2Sequence u2seq = seqImporter.finalizeSequenceAndValidate(seqOs);
+            continue;
+        }
 
-        static const QString err = U2::FastqFormat::tr("Not a valid FASTQ file: %1. Bad quality scores: inconsistent size.").arg(docUrl.getURLString());
-        CHECK_EXT_BREAK(sequence.length() == qualityScores.length(), os.setError(err));
 
         seqNumber++;
         progressUpNum++;
@@ -315,8 +367,10 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& hints
                 break;
             }
 
-            U2Sequence u2seq = seqImporter.finalizeSequenceAndValidate(os);
-            CHECK_OP_BREAK(os);
+            U2Sequence u2seq = seqImporter.finalizeSequenceAndValidate(warningOs);
+            if(errorLoggingBreak(warningOs, skippedLines, sequenceName)){
+                continue;
+            }
             sequenceRef = GObjectReference(io->getURL().getURLString(), u2seq.visualName, GObjectTypes::SEQUENCE, U2EntityRef(dbiRef, u2seq.id));
 
             U2SequenceObject* seqObj = new U2SequenceObject(u2seq.visualName, U2EntityRef(dbiRef, u2seq.id));
@@ -342,7 +396,6 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& hints
     }
     U2Sequence u2seq = seqImporter.finalizeSequenceAndValidate(os);
     CHECK_OP(os,);
-
     sequenceRef = GObjectReference(io->getURL().getURLString(), u2seq.visualName, GObjectTypes::SEQUENCE, U2EntityRef(dbiRef, u2seq.id));
 
     U1AnnotationUtils::addAnnotations(objects, seqImporter.getCaseAnnotations(), sequenceRef, NULL, hints);
@@ -357,16 +410,33 @@ Document* FastqFormat::loadDocument(IOAdapter* io, const U2DbiRef& dbiRef, const
     CHECK_EXT(io != NULL && io->isOpen(), os.setError(L10N::badArgument("IO adapter")), NULL);
     QVariantMap hints = _hints;
     QList<GObject*> objects;
+    QMap<QString, QString> skippedLines;
 
     int gapSize = qBound(-1, DocumentFormatUtils::getMergeGap(_hints), 1000*1000);
     int predictedSize = qMax(100*1000, DocumentFormatUtils::getMergedSize(hints, gapSize==-1 ? 0 : io->left()));
 
     QString lockReason;
-    load(io, dbiRef, _hints, io->getURL(), objects, os, gapSize, predictedSize, lockReason);
+    load(io, dbiRef, _hints, io->getURL(), objects, os, gapSize, predictedSize, lockReason, skippedLines);
+    if (skippedLines.size() > 0){
+        QMapIterator<QString, QString> i(skippedLines);
+        QStringList errors;
+        while (i.hasNext()) {
+            i.next();
+            QString msg = i.key() + ": " + i.value();
+            if (objects.length() > 0){
+                os.addWarning(msg);
+            }else{
+                errors.append(msg);
+            }
+        }
+        if (errors.length() > 0){
+            os.setError(errors.join("\n"));
+        }
+    }
 
     CHECK_OP_EXT(os, qDeleteAll(objects), NULL);
     DocumentFormatUtils::updateFormatHints(objects, hints);
-    Document* doc = new Document(this, io->getFactory(), io->getURL(), dbiRef, objects, hints, lockReason );
+    Document* doc = new Document(this, io->getFactory(), io->getURL(), dbiRef, objects, hints, lockReason);
 
     return doc;
 }
@@ -465,7 +535,7 @@ void FastqFormat::storeEntry(IOAdapter *io, const QMap< GObjectType, QList<GObje
 
 DNASequence *FastqFormat::loadSequence(IOAdapter* io, U2OpStatus& os) {
     CHECK_EXT((io != NULL) && (io->isOpen() == true), os.setError(L10N::badArgument("IO adapter")), NULL);
-
+    U2OpStatus2Log logOs;
     QByteArray readBuff;
     QByteArray sequence;
     QByteArray qualityScores;
@@ -478,30 +548,30 @@ DNASequence *FastqFormat::loadSequence(IOAdapter* io, U2OpStatus& os) {
     QString sequenceName = readSequenceName(os, io, '@');
     // check for eof while trying to read another FASTQ block
     CHECK_EXT(!io->isEof(), , NULL);
-    CHECK_OP(os, NULL);
+    CHECK_OP(os, new DNASequence());
 
     sequence.clear();
-    readSequence(os, io, sequence);
-    CHECK_OP(os, NULL);
+    readSequence(logOs, io, sequence);
+    CHECK_OP(logOs, new DNASequence());
 
-    QString qualSequenceName = readSequenceName(os, io, '+');
+    QString qualSequenceName = readSequenceName(logOs, io, '+');
     if (!qualSequenceName.isEmpty()) {
         static const QString err = U2::FastqFormat::tr("Not a valid FASTQ file, sequence name differs from quality scores name");
-        CHECK_EXT(sequenceName == qualSequenceName, os.setError(err), NULL);
+        CHECK_EXT(sequenceName == qualSequenceName, logOs.setError(err), new DNASequence());
     }
 
     // read qualities
     qualityScores.clear();
-    readQuality(os, io, qualityScores, sequence.size());
-    CHECK_OP(os, NULL);
+    readQuality(logOs, io, qualityScores, sequence.size());
+    CHECK_OP(logOs, new DNASequence());
 
     static const QString err = U2::FastqFormat::tr("Not a valid FASTQ file. Bad quality scores: inconsistent size.");
-    CHECK_EXT(sequence.length() == qualityScores.length(), os.setError(err), NULL);
+    CHECK_EXT(sequence.length() == qualityScores.length(), logOs.setError(err), new DNASequence());
 
     DNASequence *seq = new DNASequence(sequenceName, sequence);
     seq->quality = DNAQuality(qualityScores);
     seq->alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_EXTENDED());
-    SAFE_POINT(seq->alphabet != NULL, "FastqFormat::loadSequence alphabet is NULL", NULL);
+    SAFE_POINT(seq->alphabet != NULL, "FastqFormat::loadSequence alphabet is NULL", new DNASequence());
 
     if (!seq->alphabet->isCaseSensitive()) {
         TextUtils::translate(TextUtils::UPPER_CASE_MAP, const_cast<char*>(seq->seq.constData()), seq->seq.length());
diff --git a/src/corelibs/U2Formats/src/GFFFormat.cpp b/src/corelibs/U2Formats/src/GFFFormat.cpp
index 493a969..d226a2a 100644
--- a/src/corelibs/U2Formats/src/GFFFormat.cpp
+++ b/src/corelibs/U2Formats/src/GFFFormat.cpp
@@ -55,13 +55,17 @@ GFFFormat::GFFFormat(QObject* p):DocumentFormat(p, DocumentFormatFlag_SupportWri
 }
 
 
-Document* GFFFormat::loadDocument(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, U2OpStatus& os) {
+Document* GFFFormat::loadDocument(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& _fs, U2OpStatus& os) {
     CHECK_EXT(io != NULL && io->isOpen(), os.setError(L10N::badArgument("IO adapter")), NULL);
+    QVariantMap fs = _fs;
     QList<GObject*> objects;
 
     load(io, dbiRef, objects, fs, os);
 
     CHECK_OP_EXT(os, qDeleteAll(objects), NULL);
+    
+    DocumentFormatUtils::updateFormatHints(objects, fs);
+    fs[DocumentReadingMode_LoadAsModified] = os.hasWarnings();
 
     Document* doc = new Document(this, io->getFactory(), io->getURL(), dbiRef, objects, fs);
     return doc;
@@ -246,6 +250,8 @@ void GFFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
     QMap<AnnotationData *, QString> annotationGroups;
     QMap<AnnotationData *, AnnotationTableObject *> annotationTables;
     bool fastaSectionStarts = false;
+    bool anyNamelessSequence = false;
+    bool isNameModified = false;
     QString fastaHeaderName(DEFAULT_EMPTY_FASTA_SEQUENCE_NAME), objName;
     QByteArray seq;
     QSet<QString> names;
@@ -272,8 +278,13 @@ void GFFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
 
         //retrieving annotations from  document
         if (fastaSectionStarts) {
-            if (words[0].startsWith(">") && fastaHeaderName == DEFAULT_EMPTY_FASTA_SEQUENCE_NAME) {
-                objName = extractSeqObjectName(fastaHeaderName, words, names);
+            bool firstFasta = fastaHeaderName == DEFAULT_EMPTY_FASTA_SEQUENCE_NAME;
+            if (firstFasta) {
+                objName = extractSeqObjectName(fastaHeaderName, words, names, isNameModified);
+                anyNamelessSequence = isNameModified || anyNamelessSequence;
+                if (isNameModified && firstFasta) {
+                    seq.append(words[0]);
+                }
             } else if(words[0].startsWith(">")) {
                 CHECK_OBJECT_COUNT();
                 DNASequence sequence(objName, seq);
@@ -283,9 +294,11 @@ void GFFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
 
                 SAFE_POINT(seqObj != NULL, "DocumentFormatUtils::addSequenceObject returned NULL but didn't set error",);
                 dbiObjects.objects << seqObj->getSequenceRef().entityId;
+
                 seqMap.insert(objName, seqObj);
                 addAnnotations(seqImporter.getCaseAnnotations(), objects, atoSet, fastaHeaderName, dbiRef, hints);
-                objName = extractSeqObjectName(fastaHeaderName, words, names);
+                objName = extractSeqObjectName(fastaHeaderName, words, names, isNameModified);
+                anyNamelessSequence = isNameModified || anyNamelessSequence;
                 seq = "";
             } else {
                 if(words.size() > 1){
@@ -446,6 +459,10 @@ void GFFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
 
     //handling last fasta sequence
     if(fastaSectionStarts){
+        if (fastaHeaderName == DEFAULT_EMPTY_FASTA_SEQUENCE_NAME) {
+            objName = extractSeqObjectName(fastaHeaderName, words, names, isNameModified);
+            anyNamelessSequence = isNameModified || anyNamelessSequence;
+        }
         DNASequence sequence(objName, seq);
         sequence.info.insert(DNAInfo::FASTA_HDR, objName);
         sequence.info.insert(DNAInfo::ID, objName);
@@ -472,6 +489,10 @@ void GFFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
             ob->addObjectRelation(GObjectRelation(sequenceRef, ObjectRole_Sequence));
         }
     }
+
+    if (anyNamelessSequence) {
+        os.addWarning(tr("One or more sequences in this file don't have names. Their names are generated automatically."));
+    }
 }
 
 FormatCheckResult GFFFormat::checkRawData(const QByteArray& rawData, const GUrl&) const {
@@ -678,17 +699,21 @@ void GFFFormat::storeDocument(Document* doc, IOAdapter* io, U2OpStatus& os) {
     }
 }
 
-QString GFFFormat::extractSeqObjectName(QString &fastaHeaderName, const QStringList &words, QSet<QString> &names){
+QString GFFFormat::extractSeqObjectName(QString &fastaHeaderName, const QStringList &words, QSet<QString> &names, bool &isNameModified){
     fastaHeaderName = words.join(" ").remove(">");
     bool addSeqTag = true;
-    if(fastaHeaderName.isEmpty()){
+    bool notFastaHeaderMark = !words[0].startsWith(">");
+    if (fastaHeaderName.isEmpty() || notFastaHeaderMark) {
         fastaHeaderName = "Sequence";
         addSeqTag = false;
+        isNameModified = true;
+    } else {
+        isNameModified = false;
     }
     fastaHeaderName = TextUtils::variate(fastaHeaderName, "_", names);
     names.insert(fastaHeaderName);
-    if (addSeqTag){
-        return fastaHeaderName + SEQUENCE_TAG;
+    if (addSeqTag) {
+        fastaHeaderName += SEQUENCE_TAG;
     }
     return fastaHeaderName;
 }
diff --git a/src/corelibs/U2Formats/src/GFFFormat.h b/src/corelibs/U2Formats/src/GFFFormat.h
index a2a49bd..5ab5ea9 100644
--- a/src/corelibs/U2Formats/src/GFFFormat.h
+++ b/src/corelibs/U2Formats/src/GFFFormat.h
@@ -48,7 +48,7 @@ protected:
 private:
     void load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& objects, const QVariantMap& hints, U2OpStatus& si);
 
-    static QString extractSeqObjectName( QString &fastaHeaderName, const QStringList &words, QSet<QString> &names);
+    static QString extractSeqObjectName( QString &fastaHeaderName, const QStringList &words, QSet<QString> &names, bool &isNameModified);
 
     QStringList parseLine(const QString& line) const;
 
diff --git a/src/corelibs/U2Formats/src/GenbankLocationParser.cpp b/src/corelibs/U2Formats/src/GenbankLocationParser.cpp
index 4568b78..f36ec02 100644
--- a/src/corelibs/U2Formats/src/GenbankLocationParser.cpp
+++ b/src/corelibs/U2Formats/src/GenbankLocationParser.cpp
@@ -19,9 +19,12 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Core/U2Location.h>
+#include <QCoreApplication>
+
 #include <U2Core/Log.h>
 #include <U2Core/TextUtils.h>
+#include <U2Core/U2Location.h>
+#include <U2Core/U2SafePoints.h>
 #include <U2Core/U2Type.h>
 
 #include "GenbankLocationParser.h"
@@ -168,56 +171,56 @@ private:
         case ',':
             return Token(QByteArray(1, input.next()), Token::COMMA);
         case '.':
-            {
-                QByteArray tokenString(1, input.next());
-                if('.' == input.peek()) {
+        {
+            QByteArray tokenString(1, input.next());
+            if('.' == input.peek()) {
+                tokenString.append(input.next());
+                return Token(tokenString, Token::DOUBLE_PERIOD);
+            }
+            return Token(tokenString, Token::PERIOD);
+        }
+        default:
+        {
+            const QBitArray& NUMS = TextUtils::NUMS;
+            QByteArray tokenString;
+            if(NUMS.testBit(input.peek()) || '-' == input.peek()) {
+                if('-' == input.peek()) {
+                    tokenString.append(input.next());
+                }
+                while(NUMS.testBit(input.peek())) {
                     tokenString.append(input.next());
-                    return Token(tokenString, Token::DOUBLE_PERIOD);
                 }
-                return Token(tokenString, Token::PERIOD);
+                if("-" == QString(tokenString)) {
+                    tokenString = "";
+                    input.prev();
+                }
+                else if(!isNameCharacter(input.peek())) {
+                    return Token(tokenString, Token::NUMBER);
+                }
             }
-        default:
-            {
-                const QBitArray& NUMS = TextUtils::NUMS;
-                QByteArray tokenString;
-                if(NUMS.testBit(input.peek()) || '-' == input.peek()) {
-                    if('-' == input.peek()) {
-                        tokenString.append(input.next());
-                    }
-                    while(NUMS.testBit(input.peek())) {
-                        tokenString.append(input.next());
-                    }
-                    if("-" == QString(tokenString)) {
-                        tokenString = "";
-                        input.prev();
-                    }
-                    else if(!isNameCharacter(input.peek())) {
-                        return Token(tokenString, Token::NUMBER);
-                    }
+            if(isNameCharacter(input.peek())) {
+                while(isNameCharacter(input.peek())) {
+                    tokenString.append(input.next());
+                }
+                if("join" == tokenString) {
+                    return Token(tokenString, Token::JOIN);
+                }
+                if("order" == tokenString) {
+                    return Token(tokenString, Token::ORDER);
+                }
+                if("complement" == tokenString) {
+                    return Token(tokenString, Token::COMPLEMENT);
                 }
-                if(isNameCharacter(input.peek())) {
-                    while(isNameCharacter(input.peek())) {
-                        tokenString.append(input.next());
-                    }
-                    if("join" == tokenString) {
-                        return Token(tokenString, Token::JOIN);
-                    }
-                    if("order" == tokenString) {
-                        return Token(tokenString, Token::ORDER);
-                    }
-                    if("complement" == tokenString) {
-                        return Token(tokenString, Token::COMPLEMENT);
-                    }
-                    if("bond" == tokenString) {
-                        return Token(tokenString, Token::BOND);
-                    }
-                    return Token(tokenString, Token::NAME);
+                if("bond" == tokenString) {
+                    return Token(tokenString, Token::BOND);
                 }
-                ioLog.trace(QString("GENBANK LOCATION PARSER: Invalid token (ascii code): %1, next token (ascii)").arg(static_cast<int>(input.peek())));
-                char nextChar = input.next();
-                ioLog.trace(QString("GENBANK LOCATION PARSER: Next token after invalid (ascii code)").arg(static_cast<int>(nextChar)));
-                return Token(QByteArray(1, nextChar), Token::INVALID);
+                return Token(tokenString, Token::NAME);
             }
+            ioLog.trace(QString("GENBANK LOCATION PARSER: Invalid token (ascii code): %1, next token (ascii)").arg(static_cast<int>(input.peek())));
+            char nextChar = input.next();
+            ioLog.trace(QString("GENBANK LOCATION PARSER: Next token after invalid (ascii code)").arg(static_cast<int>(nextChar)));
+            return Token(QByteArray(1, nextChar), Token::INVALID);
+        }
         }
     }
 
@@ -245,17 +248,10 @@ public:
         seqLenForCircular = -1;
     }
 
-    bool parse(U2Location &result, QString &errorReport) {
+    LocationParser::ParsingResult parse(U2Location &result, QStringList &messages) {
         result->regions.clear();
         result->strand = U2Strand::Direct;
-        if(!parseLocation(result, errorReport)) {
-            return false;
-        }
-        // this causes the genbank parser to fail on some files
-//        if(!match(Token::END_OF_INPUT)) {
-//            return false;
-//        }
-        return true;
+        return parseLocation(result, messages);
     }
 
     void setSeqLenForCircular(qint64 val) { seqLenForCircular = val; }
@@ -283,290 +279,340 @@ private:
         return true;
     }
 
-    bool parseLocationDescriptor(U2Location &location, QString& errorReport) {
+    static LocationParser::ParsingResult mergeParsingResults(LocationParser::ParsingResult first, LocationParser::ParsingResult second) {
+        if (LocationParser::Failure == first || LocationParser::Failure == second) {
+            return LocationParser::Failure;
+        }
+
+        if (LocationParser::ParsedWithWarnings == first || LocationParser::ParsedWithWarnings == second) {
+            return LocationParser::ParsedWithWarnings;
+        }
+
+        if (LocationParser::Success == first || LocationParser::Success == second) {
+            return LocationParser::Success;
+        }
+
+        FAIL("An unexpected parsing result", LocationParser::Failure);
+    }
+
+    LocationParser::ParsingResult parseLocationDescriptor(U2Location &location, QStringList& messages) {
+        LocationParser::ParsingResult parsingResult = LocationParser::Success;
         bool remoteEntry = false;
-        if(lexer.peek().getType() == Token::NAME) { // remote entries
+        Token token = lexer.peek();
+        if (token.getType() == Token::NAME) { // remote entries
             remoteEntry = true;
             QByteArray accession = lexer.next().getString();
-            QString data = accession;
-            if(!match(Token::PERIOD)) {
-                errorReport = QString("GENBANK LOCATION PARSER: Must be PERIOD instead of %1").arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
+            if (!match(Token::PERIOD)) {
+                messages << QString("GENBANK LOCATION PARSER: Must be PERIOD instead of %1").arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
             }
             qint64 version = 0;
-            if(!parseNumber(version)) {
-                errorReport = QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
-            }
-            if(!match(Token::COLON)) {
-                errorReport = QString("GENBANK LOCATION PARSER: Must be COLON instead of %1").arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
-            }
-            ioLog.info(LocationParser::tr("Ignoring remote entry: %1.%2").arg(QString(accession)).arg(version));
+            if (!parseNumber(version)) {
+                messages << QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
+            }
+            if (!match(Token::COLON)) {
+                messages << QString("GENBANK LOCATION PARSER: Must be COLON instead of %1").arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
+            }
+            messages <<  LocationParser::REMOTE_ENTRY_WARNING + ": " + QString(accession) + "." + QString::number(version);
+            parsingResult =  LocationParser::ParsedWithWarnings;
         }
+
+        if (token.getType() == Token::COMPLEMENT) {
+            lexer.next();
+            return mergeParsingResults(parsingResult, parseComplement(location, messages));
+        }
+
         qint64 firstBase = 0;
         bool firstBaseIsFromRange = false;
-        if(match(Token::LEFT_PARENTHESIS)) { // cases like (1.2)..
+        if (match(Token::LEFT_PARENTHESIS)) { // cases like (1.2)..
             firstBaseIsFromRange = true;
-            if(!parseNumber(firstBase)) { // use the first number as a region boundary
-                errorReport = QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
-            }
-            else if(firstBase < 0) {
-                errorReport = QString("GENBANK LOCATION PARSER: region boundary can not be less then zero. Token: %1%2").arg(firstBase).arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
-            }
-            if(!match(Token::PERIOD)) {
-                errorReport = QString("GENBANK LOCATION PARSER: Must be PERIOD instead of %1").arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
-            }
-            if(!match(Token::NUMBER)) { // ignore the second number
-                errorReport = QString("GENBANK LOCATION PARSER: Must be NUMBER instead of %1").arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
-            }
-            if(!match(Token::RIGHT_PARENTHESIS)) {
-                errorReport = QString("GENBANK LOCATION PARSER: Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
+            if (!parseNumber(firstBase)) { // use the first number as a region boundary
+                messages << QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
+            }
+            else if (firstBase < 0) {
+                messages << QString("GENBANK LOCATION PARSER: region boundary can not be less then zero. Token: %1%2").arg(firstBase).arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
+            }
+            if (!match(Token::PERIOD)) {
+                messages << QString("GENBANK LOCATION PARSER: Must be PERIOD instead of %1").arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
+            }
+            if (!match(Token::NUMBER)) { // ignore the second number
+                messages << QString("GENBANK LOCATION PARSER: Must be NUMBER instead of %1").arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
+            }
+            if (!match(Token::RIGHT_PARENTHESIS)) {
+                messages << QString("GENBANK LOCATION PARSER: Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
             }
             ioLog.info(LocationParser::tr("'a single base from a range' in combination with 'sequence span' is not supported"));
         } else {
-            if(match(Token::LESS)) {
+            if (match(Token::LESS)) {
                 ioLog.info(LocationParser::tr("Ignoring '<' at start position"));
             }
-            if(!parseNumber(firstBase)) {
-                errorReport = QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
+            if (!parseNumber(firstBase)) {
+                messages << QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
             }
-            else if(firstBase < 0) {
-                errorReport = QString("Region boundary can not be less then zero: %1%2").arg(firstBase).arg(lexer.peek().getString().data());
-                ioLog.trace("GENBANK LOCATION PARSER:" + errorReport);
-                return false;
+            else if (firstBase < 0) {
+                messages << QString("Region boundary can not be less then zero: %1%2").arg(firstBase).arg(lexer.peek().getString().data());
+                ioLog.trace("GENBANK LOCATION PARSER:" + messages.last());
+                return LocationParser::Failure;
             }
         }
-        if(match(Token::PERIOD)) {
-            if(firstBaseIsFromRange) { // ranges are only allowed in spans
-                errorReport = QString("GENBANK LOCATION PARSER: ranges are only allowed in spans. Token: %1").arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
+        if (match(Token::PERIOD)) {
+            if (firstBaseIsFromRange) { // ranges are only allowed in spans
+                messages << QString("GENBANK LOCATION PARSER: ranges are only allowed in spans. Token: %1").arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
             }
             qint64 secondNumber = 0;
-            if(!parseNumber(secondNumber)) {
-                errorReport = QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
-            }
-            else if(secondNumber < 0) {
-                errorReport = QString("Region boundary can not be less then zero: %1%2").arg(secondNumber).arg(lexer.peek().getString().data());
-                ioLog.trace("GENBANK LOCATION PARSER:" + errorReport);
-                return false;
-            }
-            if(!location->isEmpty()) {
-                errorReport = QString("GENBANK LOCATION PARSER: location is not empty. Token: %1").arg(lexer.peek().getString().data());
-                ioLog.trace(errorReport);
-                return false;
-            }
-            if(!remoteEntry) { // ignore remote entries
+            if (!parseNumber(secondNumber)) {
+                messages << QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
+            }
+            else if (secondNumber < 0) {
+                messages << QString("Region boundary can not be less then zero: %1%2").arg(secondNumber).arg(lexer.peek().getString().data());
+                ioLog.trace("GENBANK LOCATION PARSER:" + messages.last());
+                return LocationParser::Failure;
+            }
+            if (!location->isEmpty()) {
+                messages << QString("GENBANK LOCATION PARSER: location is not empty. Token: %1").arg(lexer.peek().getString().data());
+                ioLog.trace(messages.last());
+                return LocationParser::Failure;
+            }
+            if (!remoteEntry) { // ignore remote entries
                 location->regions.append(toRegion(firstBase, secondNumber));
                 location->regionType = U2LocationRegionType_SingleBase;
+                messages << QString("GENBANK LOCATION PARSER: remote entries are not supported").arg(lexer.peek().getString().data());
+                parsingResult = mergeParsingResults(parsingResult, LocationParser::ParsedWithWarnings);
             }
-        } else if(match(Token::DOUBLE_PERIOD)) {
+        } else if (match(Token::DOUBLE_PERIOD)) {
             qint64 secondNumber = 0;
-            if(match(Token::LEFT_PARENTHESIS)) { // cases like ..(1.2)
-                if(!match(Token::NUMBER)) { // ignore the first number
-                    errorReport = QString("GENBANK LOCATION PARSER: Must be NUMBER instead of %1").arg(lexer.peek().getString().data());
-                    ioLog.trace(errorReport);
-                    return false;
+            if (match(Token::LEFT_PARENTHESIS)) { // cases like ..(1.2)
+                if (!match(Token::NUMBER)) { // ignore the first number
+                    messages << QString("GENBANK LOCATION PARSER: Must be NUMBER instead of %1").arg(lexer.peek().getString().data());
+                    ioLog.trace(messages.last());
+                    return LocationParser::Failure;
                 }
-                if(!match(Token::PERIOD)) {
-                    errorReport = QString("GENBANK LOCATION PARSER: Must be PERIOD instead of %1").arg(lexer.peek().getString().data());
-                    ioLog.trace(errorReport);
-                    return false;
+                if (!match(Token::PERIOD)) {
+                    messages << QString("GENBANK LOCATION PARSER: Must be PERIOD instead of %1").arg(lexer.peek().getString().data());
+                    ioLog.trace(messages.last());
+                    return LocationParser::Failure;
                 }
                 if(!parseNumber(secondNumber)) { // use the second number as a region boudary
-                    errorReport = QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
-                    ioLog.trace(errorReport);
-                    return false;
+                    messages << QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
+                    ioLog.trace(messages.last());
+                    return LocationParser::Failure;
                 }
-                else if(secondNumber < 0) {
-                    errorReport = QString("Region boundary can not be less then zero: %1%2").arg(secondNumber).arg(lexer.peek().getString().data());
-                    ioLog.trace("GENBANK LOCATION PARSER:" + errorReport);
-                    return false;
+                else if (secondNumber < 0) {
+                    messages << QString("Region boundary can not be less then zero: %1%2").arg(secondNumber).arg(lexer.peek().getString().data());
+                    ioLog.trace("GENBANK LOCATION PARSER:" + messages.last());
+                    return LocationParser::Failure;
                 }
-                if(!match(Token::RIGHT_PARENTHESIS)) {
-                    errorReport = QString("GENBANK LOCATION PARSER: Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
-                    ioLog.trace(errorReport);
-                    return false;
+                if (!match(Token::RIGHT_PARENTHESIS)) {
+                    messages << QString("GENBANK LOCATION PARSER: Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
+                    ioLog.trace(messages.last());
+                    return LocationParser::Failure;
                 }
                 ioLog.info(LocationParser::tr("'a single base from a range' in combination with 'sequence span' is not supported"));
             } else {
-                if(match(Token::GREATER)) {
+                if (match(Token::GREATER)) {
                     ioLog.info(LocationParser::tr("Ignoring '>' at end position"));
                 }
-                if(!parseNumber(secondNumber)) {
-                    errorReport = QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
-                    ioLog.trace(errorReport);
-                    return false;
+                if (!parseNumber(secondNumber)) {
+                    messages << QString("GENBANK LOCATION PARSER: can't parse Number. Token: %1").arg(lexer.peek().getString().data());
+                    ioLog.trace(messages.last());
+                    return LocationParser::Failure;
                 }
-                else if(secondNumber < 0) {
-                    errorReport = QString("Region boundary can not be less then zero: %1%2").arg(secondNumber).arg(lexer.peek().getString().data());
-                    ioLog.trace("GENBANK LOCATION PARSER:" + errorReport);
-                    return false;
+                else if (secondNumber < 0) {
+                    messages << QString("Region boundary can not be less then zero: %1%2").arg(secondNumber).arg(lexer.peek().getString().data());
+                    ioLog.trace("GENBANK LOCATION PARSER:" + messages.last());
+                    return LocationParser::Failure;
                 }
             }
-            if(!remoteEntry) { // ignore remote entries
-                if(seqLenForCircular != -1 && firstBase > secondNumber){
+
+            if (!remoteEntry) { // ignore remote entries
+                if (seqLenForCircular != -1 && firstBase > secondNumber) {
                     location->regions.append(toRegion(1, secondNumber));
                     location->regions.append(toRegion(firstBase, seqLenForCircular));
                     location->regionType = U2LocationRegionType_Default;
                     location->op = U2LocationOperator_Join;
-                }else{
+                } else {
                     location->regions.append(toRegion(firstBase, secondNumber));
                     location->regionType = U2LocationRegionType_Default;
                 }
             }
-        } else if(match(Token::CARET)) {
-            if(firstBaseIsFromRange) { // ranges are only allowed in spans
-                return false;
+        } else if (match(Token::CARET)) {
+            if (firstBaseIsFromRange) { // ranges are only allowed in spans
+                return LocationParser::Failure;
             }
             qint64 secondBase = 0;
-            if(!parseNumber(secondBase)) {
-                return false;
+            if (!parseNumber(secondBase)) {
+                return LocationParser::Failure;
             }
-            if(!location->isEmpty()) {
-                return false;
+            if (!location->isEmpty()) {
+                return LocationParser::Failure;
             }
-            if(!remoteEntry) { // ignore remote entries
-                if(seqLenForCircular != -1 && firstBase > secondBase){
+            if (!remoteEntry) { // ignore remote entries
+                if (seqLenForCircular != -1 && firstBase > secondBase) {
                     location->regions.append(toRegion(1, secondBase));
                     location->regions.append(toRegion(firstBase, seqLenForCircular));
                     location->regionType = U2LocationRegionType_Default;
                     location->op = U2LocationOperator_Join;
-                }else{
+                } else {
                     location->regions.append(toRegion(firstBase, secondBase));
                     location->regionType = U2LocationRegionType_Site;
                 }
             }
         } else {
-            if(firstBaseIsFromRange) { // ranges are only allowed in spans
-                return false;
+            if (firstBaseIsFromRange) { // ranges are only allowed in spans
+                return LocationParser::Failure;
             }
-            if(!remoteEntry) { // ignore remote entries
+            if (!remoteEntry) { // ignore remote entries
                 location->regions.append(toRegion(firstBase, firstBase));
                 location->regionType = U2LocationRegionType_Default;
             }
         }
-        return true;
+        return parsingResult;
     }
 
-    bool parseLocation(U2Location &location, QString &errorReport) {
-        if(match(Token::JOIN)) {
-            if(!match(Token::LEFT_PARENTHESIS)) {
+    LocationParser::ParsingResult parseLocation(U2Location &location, QStringList &messages) {
+        LocationParser::ParsingResult parsingResult = LocationParser::Success;
+        if (match(Token::JOIN)) {
+            if (!match(Token::LEFT_PARENTHESIS)) {
                 ioLog.trace(QString("GENBANK LOCATION PARSER: Wrong token after JOIN %1").arg(lexer.peek().getString().data()));
-                errorReport = LocationParser::tr("Wrong token after JOIN %1").arg(lexer.peek().getString().data());
-                return false;
+                messages << LocationParser::tr("Wrong token after JOIN %1").arg(lexer.peek().getString().data());
+                return LocationParser::Failure;
             }
-            if(order) {
+            if (order) {
                 ioLog.trace(QString("GENBANK LOCATION PARSER: Wrong token after JOIN  - order %1").arg(lexer.peek().getString().data()));
-                errorReport = LocationParser::tr("Wrong token after JOIN  - order %1").arg(lexer.peek().getString().data());
-                return false;
+                messages << LocationParser::tr("Wrong token after JOIN  - order %1").arg(lexer.peek().getString().data());
+                return LocationParser::Failure;
             }
             join = true;
             location->op = U2LocationOperator_Join;
             do {
-                if(!parseLocation(location, errorReport)) {
+                parsingResult = mergeParsingResults(parsingResult, parseLocation(location, messages));
+                if (LocationParser::Failure == parsingResult) {
                     ioLog.trace(QString("GENBANK LOCATION PARSER: Can't parse location on JOIN"));
-                    errorReport = LocationParser::tr("Can't parse location on JOIN");
-                    return false;
+                    messages << LocationParser::tr("Can't parse location on JOIN");
+                    return LocationParser::Failure;
                 }
             } while (match(Token::COMMA));
-            if(!match(Token::RIGHT_PARENTHESIS)) {
+            if (!match(Token::RIGHT_PARENTHESIS)) {
                 ioLog.trace(QString("GENBANK LOCATION PARSER: Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data()));
-                errorReport = LocationParser::tr("Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
-                return false;
+                messages << LocationParser::tr("Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
+                return LocationParser::Failure;
             }
-        } else if(match(Token::ORDER)) {
-            if(!match(Token::LEFT_PARENTHESIS)) {
+        } else if (match(Token::ORDER)) {
+            if (!match(Token::LEFT_PARENTHESIS)) {
                 ioLog.trace(QString("GENBANK LOCATION PARSER: Wrong token after ORDER %1").arg(lexer.peek().getString().data()));
-                errorReport = LocationParser::tr("Wrong token after ORDER %1").arg(lexer.peek().getString().data());
-                return false;
+                messages << LocationParser::tr("Wrong token after ORDER %1").arg(lexer.peek().getString().data());
+                return LocationParser::Failure;
             }
-            if(join) {
+            if (join) {
                 ioLog.trace(QString("GENBANK LOCATION PARSER: Wrong token after ORDER - join %1").arg(lexer.peek().getString().data()));
-                return false;
+                messages << LocationParser::tr("Wrong token after ORDER - join %1").arg(lexer.peek().getString().data());
+                return LocationParser::Failure;
             }
             order = true;
             location->op = U2LocationOperator_Order;
             do {
-                if(!parseLocation(location, errorReport)) {
+                parsingResult = mergeParsingResults(parsingResult, parseLocation(location, messages));
+                if (LocationParser::Failure == parsingResult) {
                     ioLog.trace(QString("GENBANK LOCATION PARSER: Can't parse location on ORDER"));
-                    errorReport = LocationParser::tr("Can't parse location on ORDER");
-                    return false;
+                    messages << LocationParser::tr("Can't parse location on ORDER");
+                    return LocationParser::Failure;
                 }
             } while (match(Token::COMMA));
-            if(!match(Token::RIGHT_PARENTHESIS)) {
+            if (!match(Token::RIGHT_PARENTHESIS)) {
                 ioLog.trace(QString("GENBANK LOCATION PARSER: Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data()));
-                errorReport = LocationParser::tr("Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
-                return false;
+                messages << LocationParser::tr("Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
+                return LocationParser::Failure;
             }
         } else if (match(Token::BOND)) {
-            if(!match(Token::LEFT_PARENTHESIS)) {
+            if (!match(Token::LEFT_PARENTHESIS)) {
                 ioLog.trace(QString("GENBANK LOCATION PARSER: Wrong token after BOND %1").arg(lexer.peek().getString().data()));
-                errorReport = LocationParser::tr("Wrong token after BOND %1").arg(lexer.peek().getString().data());
-                return false;
+                messages << LocationParser::tr("Wrong token after BOND %1").arg(lexer.peek().getString().data());
+                return LocationParser::Failure;
             }
             bond = true;
             location->op = U2LocationOperator_Bond;
             do {
-                if(!parseLocation(location, errorReport)) {
+                parsingResult = mergeParsingResults(parsingResult, parseLocation(location, messages));
+                if (LocationParser::Failure == parsingResult) {
                     ioLog.trace(QString("GENBANK LOCATION PARSER: Can't parse location on BOND"));
-                    errorReport = LocationParser::tr("Can't parse location on BONDs");
-                    return false;
+                    messages << LocationParser::tr("Can't parse location on BONDs");
+                    return LocationParser::Failure;
                 }
             } while (match(Token::COMMA));
-            if(!match(Token::RIGHT_PARENTHESIS)) {
+            if (!match(Token::RIGHT_PARENTHESIS)) {
                 ioLog.trace(QString("GENBANK LOCATION PARSER: Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data()));
-                errorReport = LocationParser::tr("Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
-                return false;
+                messages << LocationParser::tr("Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
+                return LocationParser::Failure;
             }
 
-        }else if(match(Token::COMPLEMENT)) {
-            if(!match(Token::LEFT_PARENTHESIS)) {
-                ioLog.trace(QString("GENBANK LOCATION PARSER: Must be LEFT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data()));
-                errorReport = LocationParser::tr("Must be LEFT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
-                return false;
-            }
-            location->strand = U2Strand::Complementary;
-            // the following doesn't match the specification
-            do {
-                if(!parseLocation(location, errorReport)) {
-                    ioLog.trace(QString("GENBANK LOCATION PARSER: Can't parse location on COMPLEMENT"));
-                    errorReport = LocationParser::tr("Can't parse location on COMPLEMENT");
-                    return false;
-                }
-            } while (match(Token::COMMA));
-            if(!match(Token::RIGHT_PARENTHESIS)) {
-                ioLog.trace(QString("GENBANK LOCATION PARSER: Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data()));
-                errorReport = LocationParser::tr("Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
-                return false;
-            }
+        } else if (match(Token::COMPLEMENT)) {
+            return mergeParsingResults(parsingResult, parseComplement(location, messages));
         } else {
             do {
-                if(!parseLocationDescriptor(location, errorReport)) {
+                parsingResult = mergeParsingResults(parsingResult, parseLocationDescriptor(location, messages));
+                if (LocationParser::Failure == parsingResult) {
                     ioLog.trace(QString("GENBANK LOCATION PARSER: Can't parse location descriptor"));
-                    return false;
+                    return LocationParser::Failure;
                 }
             } while (match(Token::COMMA));
         }
-        return true;
+        return parsingResult;
+    }
+
+    LocationParser::ParsingResult parseComplement(U2Location &location, QStringList &messages) {
+        LocationParser::ParsingResult parsingResult = LocationParser::Success;
+        if (!match(Token::LEFT_PARENTHESIS)) {
+            ioLog.trace(QString("GENBANK LOCATION PARSER: Must be LEFT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data()));
+            messages << LocationParser::tr("Must be LEFT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
+            return LocationParser::Failure;
+        }
+
+        if (location->regions.isEmpty()) {
+            location->strand = U2Strand::Complementary;
+        } else {
+            ioLog.trace(QString("GENBANK LOCATION PARSER: Locations on different strands are not supported"));
+            messages << LocationParser::JOIN_COMPLEMENT_WARNING;
+            parsingResult = mergeParsingResults(parsingResult, LocationParser::ParsedWithWarnings);
+        }
+
+        // the following doesn't match the specification
+        do {
+            parsingResult = mergeParsingResults(parsingResult, parseLocation(location, messages));
+            if (LocationParser::Failure == parsingResult) {
+                ioLog.trace(QString("GENBANK LOCATION PARSER: Can't parse location on COMPLEMENT"));
+                messages << LocationParser::tr("Can't parse location on COMPLEMENT");
+                return LocationParser::Failure;
+            }
+        } while (match(Token::COMMA));
+
+        if (!match(Token::RIGHT_PARENTHESIS)) {
+            ioLog.trace(QString("GENBANK LOCATION PARSER: Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data()));
+            messages << LocationParser::tr("Must be RIGHT_PARENTHESIS instead of %1").arg(lexer.peek().getString().data());
+            return LocationParser::Failure;
+        }
+
+        return parsingResult;
     }
 
     bool match(Token::Type type) {
@@ -586,15 +632,23 @@ private:
 
 }
 
-QString LocationParser::parseLocation( const char* _str, int _len, U2Location& location, qint64 seqlenForCircular )
-{
-    Parser parser(QByteArray(_str, _len));
-    QString errorReport;
+const QString LocationParser::REMOTE_ENTRY_WARNING = QCoreApplication::translate("LocationParser", "Ignoring remote entry");
+const QString LocationParser::JOIN_COMPLEMENT_WARNING = QCoreApplication::translate("LocationParser", "Ignoring different strands in JOIN");
+
+LocationParser::ParsingResult LocationParser::parseLocation(const char *str, int len, U2Location &location, qint64 seqlenForCircular) {
+    QStringList messages;
+    return parseLocation(str, len,location, messages, seqlenForCircular);
+}
+
+LocationParser::ParsingResult LocationParser::parseLocation(const char* str, int len, U2Location& location, QStringList &messages, qint64 seqlenForCircular) {
+    Parser parser(QByteArray(str, len));
     parser.setSeqLenForCircular(seqlenForCircular);
-    if(!parser.parse(location, errorReport)) {
+
+    LocationParser::ParsingResult parsingResult = parser.parse(location, messages);
+    if (LocationParser::Failure == parsingResult) {
         location->regions.clear();
     }
-    return errorReport;
+    return parsingResult;
 }
 
 }
diff --git a/src/corelibs/U2Formats/src/GenbankLocationParser.h b/src/corelibs/U2Formats/src/GenbankLocationParser.h
index b58678f..bab6af6 100644
--- a/src/corelibs/U2Formats/src/GenbankLocationParser.h
+++ b/src/corelibs/U2Formats/src/GenbankLocationParser.h
@@ -33,7 +33,17 @@ namespace Genbank {
 class U2FORMATS_EXPORT LocationParser : public QObject {
     Q_OBJECT
 public:
-    static QString parseLocation(const char* str, int len, U2Location& location, qint64 seqlenForCircular = -1);
+    enum ParsingResult {
+        Success,
+        ParsedWithWarnings,
+        Failure
+    };
+
+    static const QString REMOTE_ENTRY_WARNING;
+    static const QString JOIN_COMPLEMENT_WARNING;
+
+    static ParsingResult parseLocation(const char* str, int len, U2Location& location, qint64 seqlenForCircular = -1);
+    static ParsingResult parseLocation(const char* str, int len, U2Location& location, QStringList &messages, qint64 seqlenForCircular = -1);
 };
 
 
diff --git a/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp b/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp
index 6eefb41..3413a21 100644
--- a/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp
+++ b/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp
@@ -236,6 +236,9 @@ bool GenbankPlainTextFormat::readEntry(ParserState* st, U2SequenceImporter& seqI
                     CHECK_OP(os,false);
                 }
                 readSequence(st,seqImporter,sequenceLen,fullSequenceLen,os);
+                if (fullSequenceLen != st->entry->seqLen && !si.getWarnings().contains(EMBLGenbankAbstractDocument::SEQ_LEN_WARNING_MESSAGE)) {
+                    si.addWarning(EMBLGenbankAbstractDocument::SEQ_LEN_WARNING_MESSAGE);
+                }
             }
             return true;
         }
diff --git a/src/corelibs/U2Formats/src/PDBFormat.cpp b/src/corelibs/U2Formats/src/PDBFormat.cpp
index f00e0b1..d1ca0a7 100644
--- a/src/corelibs/U2Formats/src/PDBFormat.cpp
+++ b/src/corelibs/U2Formats/src/PDBFormat.cpp
@@ -261,7 +261,7 @@ const QString MOLECULE_TAG = "MOLECULE";
 const QString CHAIN_TAG = "CHAIN";
 }
 
-void PDBFormat::PDBParser::parseMacromolecularContent(bool firstCompndLine, U2OpStatus& ti) {
+void PDBFormat::PDBParser::parseMacromolecularContent(bool firstCompndLine, U2OpStatus&) {
     /*
     Record Format
     COLUMNS       DATA TYPE       FIELD         DEFINITION
diff --git a/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp b/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp
index 8ea8404..7fa9b15 100644
--- a/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp
+++ b/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp
@@ -186,6 +186,9 @@ bool SwissProtPlainTextFormat::readEntry(ParserState* st, U2SequenceImporter& se
         else if (st->hasKey("SQ", 2)) {
             //reading sequence
             readSequence(st,seqImporter,sequenceLen,fullSequenceLen,os);
+            if (fullSequenceLen != st->entry->seqLen && !si.getWarnings().contains(EMBLGenbankAbstractDocument::SEQ_LEN_WARNING_MESSAGE)) {
+                si.addWarning(EMBLGenbankAbstractDocument::SEQ_LEN_WARNING_MESSAGE);
+            }
             CHECK_OP(os,false);
             return true;
         }
diff --git a/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp b/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp
index a150348..aaa08cb 100644
--- a/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp
+++ b/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp
@@ -147,8 +147,8 @@ void VectorNtiSequenceFormat::storeEntry(IOAdapter *io, const QMap<GObjectType,
         CHECK_OP(os, );
     }
 
-    QList<U2Region> lowerCaseRegs = U1AnnotationUtils::getRelatedLowerCaseRegions(seq, anns);
-    writeSequence(io, seq, lowerCaseRegs, os);
+    QList<U2Region> lowerCaseRegs = U1AnnotationUtils::getRelatedLowerCaseRegions(seq, anns);
+    writeSequence(io, seq, lowerCaseRegs, os);
     CHECK_OP(os, );
 
     // write last line marker
@@ -481,7 +481,7 @@ QMap<U2FeatureType, VectorNtiSequenceFormat::VntiDnaFeatureTypes> VectorNtiSeque
     dnaFeatureTypesMap.insert(U2FeatureTypes::PrecursorRna,         DnaPrecursorRna);
     dnaFeatureTypesMap.insert(U2FeatureTypes::Primer,               DnaPrimer);
     dnaFeatureTypesMap.insert(U2FeatureTypes::PrimerBindingSite,    DnaPrimerBindingSite);
-    dnaFeatureTypesMap.insert(U2FeatureTypes::PrimeryTranscript,    DnaPrimerTranscript);
+    dnaFeatureTypesMap.insert(U2FeatureTypes::PrimaryTranscript,    DnaPrimerTranscript);
     dnaFeatureTypesMap.insert(U2FeatureTypes::PromoterEukaryotic,   DnaPromoterEukaryotic);
     dnaFeatureTypesMap.insert(U2FeatureTypes::PromoterProkaryotic,  DnaPromoterProkaryotic);
     dnaFeatureTypesMap.insert(U2FeatureTypes::ProteinBindingSite,   DnaProteinBindingSite);
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.cpp
index ef41c65..db9b6a4 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.cpp
@@ -792,6 +792,19 @@ void MysqlObjectDbi::getObject(U2Object& object, const U2DataId& id, U2OpStatus&
     }
 }
 
+U2DataId MysqlObjectDbi::getObject(qint64 objectId, U2OpStatus& os) {
+    U2SqlQuery q("SELECT id, type FROM Object WHERE id = :id", db, os);
+    q.bindInt64(":id", objectId);
+    if (q.step()) {
+        U2DataId result = q.getDataIdExt(0);
+        q.ensureDone();
+        return result;
+    } else if (!os.hasError()) {
+        os.setError(U2DbiL10n::tr("Object not found."));
+    }
+    return U2DataId();
+}
+
 QHash<U2DataId, QString> MysqlObjectDbi::getObjectNames(qint64 offset, qint64 count, U2OpStatus &os) {
     QHash<U2DataId, QString> result;
 
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.h
index 5cb5ad4..5febfd3 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.h
@@ -46,6 +46,11 @@ public:
     */
     virtual void getObject(U2Object& object, const U2DataId& id, U2OpStatus& os);
 
+    /**
+    Retrieves database object by objectId.
+    */
+    virtual U2DataId getObject(qint64 objectId, U2OpStatus& os);
+
     virtual QHash<U2DataId, QString> getObjectNames(qint64 offset, qint64 count, U2OpStatus& os);
 
     /** Lists database top-level objects, starts with 'offset' and limits by 'count' */
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.cpp
index d249fb3..19f01a9 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.cpp
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <sqlite3.h>
+#include <3rdparty/sqlite3/sqlite3.h>
 
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.cpp
index fffb8c3..fc88cff 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.cpp
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <sqlite3.h>
+#include <3rdparty/sqlite3/sqlite3.h>
 
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UdrSchema.h>
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.cpp
index f1f017c..c7e2ead 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.cpp
@@ -40,7 +40,7 @@
 
 #include <QtCore/QFile>
 
-#include <sqlite3.h>
+#include <3rdparty/sqlite3/sqlite3.h>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.cpp
index 50d5352..0368aae 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.cpp
@@ -919,6 +919,19 @@ 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);
+    q.bindInt64(1, objectId);
+    if (q.step()) {
+        U2DataId result = q.getDataIdExt(0);
+        q.ensureDone();
+        return result;
+    } else if (!os.hasError()) {
+        os.setError(U2DbiL10n::tr("Object not found."));
+    }
+    return U2DataId();
+}
+
 QHash<U2DataId, QString> SQLiteObjectDbi::getObjectNames(qint64 offset, qint64 count, U2OpStatus &os) {
     QHash<U2DataId, QString> result;
 
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.h
index 2581ed2..558a01e 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.h
@@ -44,6 +44,11 @@ public:
     */
     virtual void getObject(U2Object& object, const U2DataId& id, U2OpStatus& os);
 
+    /**
+    Retrieves database object by objectId.
+    */
+    virtual U2DataId getObject(qint64 objectId, U2OpStatus& os);
+
     virtual QHash<U2DataId, QString> getObjectNames(qint64 offset, qint64 count, U2OpStatus& os);
 
     /** Lists database top-level objects, starts with 'offset' and limits by 'count' */
diff --git a/src/corelibs/U2Formats/src/tasks/MergeBamTask.cpp b/src/corelibs/U2Formats/src/tasks/MergeBamTask.cpp
index 25fa440..f3d32d4 100644
--- a/src/corelibs/U2Formats/src/tasks/MergeBamTask.cpp
+++ b/src/corelibs/U2Formats/src/tasks/MergeBamTask.cpp
@@ -19,10 +19,15 @@
  * MA 02110-1301, USA.
  */
 
+#include <QDir>
+#include <QFileInfo>
+
 #include <U2Core/AppContext.h>
+#include <U2Core/AppSettings.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapterUtils.h>
+#include <U2Core/UserApplicationsSettings.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Core/BaseDocumentFormats.h>
@@ -36,12 +41,13 @@ namespace U2 {
 
 //////////////////////////////////////////////////////////////////////////
 //MergeBamTask
-MergeBamTask::MergeBamTask(const QStringList& urls, const QString &dir, const QString & outName)
+MergeBamTask::MergeBamTask(const QStringList& urls, const QString &dir, const QString & outName, bool sortInputBams)
 : Task(DocumentFormatUtils::tr("Merge BAM files with SAMTools merge"), TaskFlags_FOSCOE)
 , outputName(outName)
 , workingDir(dir)
 , targetUrl("")
 , bamUrls(urls)
+, sortInputBams(sortInputBams)
 {
     if (!workingDir.endsWith("/") && !workingDir.endsWith("\\")) {
         this->workingDir += "/";
@@ -55,20 +61,47 @@ QString MergeBamTask::getResult() const {
     return targetUrl;
 }
 
+void cleanupTempDir(const QStringList &tempDirFiles) {
+    foreach(const QString& url, tempDirFiles) {
+        QFile toDelete(url);
+        if (toDelete.exists(url)) {
+            toDelete.remove(url);
+        }
+    }
+}
+
 void MergeBamTask::run(){
     if(bamUrls.isEmpty()){
         stateInfo.setError("No BAM files to merge");
         return;
     }
-
-    BAMUtils::mergeBam(bamUrls, workingDir + outputName, stateInfo);
-    CHECK_OP(stateInfo, );
-
     targetUrl = workingDir + outputName;
+    QString tmpDirPath = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath();
+    if (sortInputBams) {
+        QStringList sortedNamesList;
+        foreach(const QString& url, bamUrls) {
+            QFileInfo fi(url);
+            QString sortedName = tmpDirPath + "/" + fi.completeBaseName() + "_sorted.bam";
+            sortedNamesList.append(sortedName);
+            BAMUtils::sortBam(url, sortedName, stateInfo);
+            if (stateInfo.isCoR()) {
+                cleanupTempDir(sortedNamesList);
+                return;
+            }
+        }
+        BAMUtils::mergeBam(sortedNamesList, targetUrl, stateInfo);
+        cleanupTempDir(sortedNamesList);
+    } else {
+        BAMUtils::mergeBam(bamUrls, targetUrl, stateInfo);
+    }
 
-    //TODO: bam merge assumes that a BAM files is sorted. Otherwise the sorting step can be added here
+    CHECK_OP(stateInfo, );
+    if (stateInfo.isCoR()) {
+        return;
+    }
 
     BAMUtils::createBamIndex(targetUrl, stateInfo);
 
 }
+
 } // U2
diff --git a/src/corelibs/U2Formats/src/tasks/MergeBamTask.h b/src/corelibs/U2Formats/src/tasks/MergeBamTask.h
index 4690336..29f597f 100644
--- a/src/corelibs/U2Formats/src/tasks/MergeBamTask.h
+++ b/src/corelibs/U2Formats/src/tasks/MergeBamTask.h
@@ -29,7 +29,7 @@ namespace U2 {
 
 class U2FORMATS_EXPORT MergeBamTask : public Task {
 public:
-    MergeBamTask(const QStringList& urls, const QString &dir, const QString &outName);
+    MergeBamTask(const QStringList& urls, const QString &dir, const QString &outName, bool sortInputBams = false);
 
     QString getResult() const;
     void run();
@@ -38,6 +38,7 @@ protected:
     QString workingDir;
     QString targetUrl;
     QStringList bamUrls;
+    bool sortInputBams;
 };// MergeBamTask
 
 } // U2
diff --git a/src/corelibs/U2Formats/transl/english.ts b/src/corelibs/U2Formats/transl/english.ts
index dad8ef7..39b57ce 100644
--- a/src/corelibs/U2Formats/transl/english.ts
+++ b/src/corelibs/U2Formats/transl/english.ts
@@ -2,40 +2,39 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="en_US">
 <context>
-    <name>Document</name>
+    <name>EMBLGenbankAbstractDocument</name>
     <message>
-        <source>Document is empty.</source>
-        <translation type="vanished">Document is empty.</translation>
-    </message>
-</context>
-<context>
-    <name>DocumentFormat</name>
-    <message>
-        <source>DatabaseConnection</source>
-        <translation type="vanished">DatabaseConnection</translation>
+        <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>
     </message>
     <message>
-        <source>A fake format that was added to implement shared database connection within existing document model.</source>
-        <translation type="vanished">A fake format that was added to implement shared database connection within existing document model.</translation>
+        <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>
     </message>
     <message>
-        <source>You have no permissions to modify the content of this database</source>
-        <translation type="vanished">You have no permissions to modify the content of this database</translation>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="58"/>
+        <source>Location parsing error.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Empty object name</source>
-        <translation type="vanished">Empty object name</translation>
+        <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>
+    <name>LocationParser</name>
     <message>
-        <source>Line is too long</source>
-        <translation type="vanished">Line is too long</translation>
+        <location filename="../src/GenbankLocationParser.cpp" line="635"/>
+        <source>Ignoring remote entry</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Incorrect number of columns in the file</source>
-        <translation type="vanished">Incorrect number of columns in the file</translation>
+        <location filename="../src/GenbankLocationParser.cpp" line="636"/>
+        <source>Ignoring different strands in JOIN</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -104,7 +103,7 @@
 <context>
     <name>U2</name>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="215"/>
+        <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>
@@ -376,7 +375,7 @@
         <translation>Build index for bam file: "%1"</translation>
     </message>
     <message>
-        <location filename="../src/BAMUtils.cpp" line="712"/>
+        <location filename="../src/BAMUtils.cpp" line="715"/>
         <source>Wrong line in a SAM file.</source>
         <translation>Wrong line in a SAM file.</translation>
     </message>
@@ -406,7 +405,7 @@
     <message>
         <location filename="../src/BedFormat.cpp" line="729"/>
         <source>The file does not contain valid annotations!</source>
-        <translation type="unfinished"></translation>
+        <translation>The file does not contain valid annotations!</translation>
     </message>
     <message>
         <location filename="../src/BedFormat.cpp" line="976"/>
@@ -772,9 +771,9 @@
 <context>
     <name>U2::Document</name>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="260"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="264"/>
         <location filename="../src/FastaFormat.cpp" line="272"/>
-        <location filename="../src/FastqFormat.cpp" line="337"/>
+        <location filename="../src/FastqFormat.cpp" line="391"/>
         <location filename="../src/PDWFormat.cpp" line="154"/>
         <source>Document is empty.</source>
         <translation>Document is empty.</translation>
@@ -806,7 +805,7 @@
 <context>
     <name>U2::DocumentFormatUtils</name>
     <message>
-        <location filename="../src/DocumentFormatUtils.cpp" line="231"/>
+        <location filename="../src/DocumentFormatUtils.cpp" line="232"/>
         <source>Undefined sequence alphabet</source>
         <translation>Undefined sequence alphabet</translation>
     </message>
@@ -975,7 +974,7 @@
         <translation>Conversion file from %1 to %2</translation>
     </message>
     <message>
-        <location filename="../src/tasks/MergeBamTask.cpp" line="40"/>
+        <location filename="../src/tasks/MergeBamTask.cpp" line="45"/>
         <source>Merge BAM files with SAMTools merge</source>
         <translation>Merge BAM files with SAMTools merge</translation>
     </message>
@@ -983,107 +982,105 @@
 <context>
     <name>U2::EMBLGenbankAbstractDocument</name>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="124"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="128"/>
         <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/EMBLGenbankAbstractDocument.cpp" line="141"/>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="310"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="145"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="314"/>
         <source>Reading entry header</source>
         <translation>Reading entry header</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="215"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="219"/>
         <source>Merge error: found annotations without sequence</source>
         <translation>Merge error: found annotations without sequence</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="466"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="470"/>
         <source>The file contains an incorrect data that describes a qualifier value. </source>
         <translation>The file contains an incorrect data that describes a qualifier value. </translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="467"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="471"/>
         <source>The value cannot contain a single quote character. The qualifier is '%1'</source>
         <translation>The value cannot contain a single quote character. The qualifier is '%1'</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="537"/>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="315"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="580"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="318"/>
         <source>Annotation name is empty</source>
         <translation>Annotation name is empty</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="546"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="589"/>
         <source>Error parsing location</source>
         <translation>Error parsing location</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="574"/>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="369"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="615"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="372"/>
         <source>Unexpected line format</source>
         <translation>Unexpected line format</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="628"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="669"/>
         <source>Reading sequence %1</source>
         <translation>Reading sequence %1</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="647"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="684"/>
         <source>Error parsing sequence: unexpected empty line</source>
         <translation>Error parsing sequence: unexpected empty line</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="674"/>
         <source>Error reading sequence: invalid sequence format</source>
-        <translation>Error reading sequence: invalid sequence format</translation>
+        <translation type="vanished">Error reading sequence: invalid sequence format</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="692"/>
         <source>Error reading sequence: memory allocation failed</source>
-        <translation>Error reading sequence: memory allocation failed</translation>
+        <translation type="vanished">Error reading sequence: memory allocation failed</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="707"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="704"/>
         <source>Sequence is truncated</source>
         <translation>Sequence is truncated</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="714"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="710"/>
         <source>Reading annotations %1</source>
         <translation>Reading annotations %1</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="724"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="720"/>
         <source>Invalid format of feature table</source>
         <translation>Invalid format of feature table</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="787"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="808"/>
         <source>Line is too long.</source>
         <translation>Line is too long.</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="789"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="810"/>
         <source>IO error.</source>
         <translation>IO error.</translation>
     </message>
     <message>
-        <location filename="../src/EMBLPlainTextFormat.cpp" line="226"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="253"/>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="207"/>
+        <location filename="../src/EMBLPlainTextFormat.cpp" line="229"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="256"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="210"/>
         <source>Record is truncated.</source>
         <translation>Record is truncated.</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="324"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="327"/>
         <source>Annotation start position is empty</source>
         <translation>Annotation start position is empty</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="329"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="332"/>
         <source>Annotation end position is empty</source>
         <translation>Annotation end position is empty</translation>
     </message>
@@ -1176,50 +1173,58 @@ The following sequences are empty:</translation>
 <context>
     <name>U2::FastqFormat</name>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="50"/>
+        <location filename="../src/FastqFormat.cpp" line="51"/>
         <source>FASTQ</source>
         <translation>FASTQ</translation>
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="53"/>
+        <location filename="../src/FastqFormat.cpp" line="54"/>
         <source>FASTQ format is a text-based format for storing both a biological sequence (usually nucleotide sequence) and its corresponding quality scores.         Both the sequence letter and quality score are encoded with a single ASCII character for brevity.         It was originally developed at the Wellcome Trust Sanger Institute to bundle a FASTA sequence and its quality data,         but has recently become the de facto standard for storing the output of high throughput sequenc [...]
         <translation>FASTQ format is a text-based format for storing both a biological sequence (usually nucleotide sequence) and its corresponding quality scores.         Both the sequence letter and quality score are encoded with a single ASCII character for brevity.         It was originally developed at the Wellcome Trust Sanger Institute to bundle a FASTA sequence and its quality data,         but has recently become the de facto standard for storing the output of high throughput se [...]
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="134"/>
+        <location filename="../src/FastqFormat.cpp" line="135"/>
         <source>Error while trying to find sequence name start</source>
         <translation>Error while trying to find sequence name start</translation>
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="172"/>
-        <location filename="../src/FastqFormat.cpp" line="198"/>
+        <location filename="../src/FastqFormat.cpp" line="173"/>
+        <location filename="../src/FastqFormat.cpp" line="199"/>
         <source>Error while reading sequence</source>
         <translation>Error while reading sequence</translation>
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="290"/>
+        <location filename="../src/FastqFormat.cpp" line="324"/>
+        <source>Sequence name differs from quality scores name: %1 and %2</source>
+        <translation type="unfinished"></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>Not a valid FASTQ file: %1, sequence name differs from quality scores name: %2 and %3</translation>
+        <translation type="vanished">Not a valid FASTQ file: %1, sequence name differs from quality scores name: %2 and %3</translation>
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="311"/>
+        <location filename="../src/FastqFormat.cpp" line="363"/>
         <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/FastqFormat.cpp" line="489"/>
+        <location filename="../src/FastqFormat.cpp" line="559"/>
         <source>Not a valid FASTQ file, sequence name differs from quality scores name</source>
         <translation>Not a valid FASTQ file, sequence name differs from quality scores name</translation>
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="498"/>
+        <location filename="../src/FastqFormat.cpp" line="568"/>
         <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>
-        <location filename="../src/FastqFormat.cpp" line="300"/>
         <source>Not a valid FASTQ file: %1. Bad quality scores: inconsistent size.</source>
-        <translation>Not a valid FASTQ file: %1. Bad quality scores: inconsistent size.</translation>
+        <translation type="vanished">Not a valid FASTQ file: %1. Bad quality scores: inconsistent size.</translation>
     </message>
 </context>
 <context>
@@ -1308,82 +1313,87 @@ The following sequences are empty:</translation>
         <translation>GFF is a format used for storing features and annotations</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="87"/>
+        <location filename="../src/GFFFormat.cpp" line="91"/>
         <source>Parsing error: invalid header</source>
         <translation>Parsing error: invalid header</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="91"/>
+        <location filename="../src/GFFFormat.cpp" line="95"/>
         <source>Parsing error: file does not contain version header</source>
         <translation>Parsing error: file does not contain version header</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="95"/>
+        <location filename="../src/GFFFormat.cpp" line="99"/>
         <source>Parsing error: format version is not an integer</source>
         <translation>Parsing error: format version is not an integer</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="99"/>
+        <location filename="../src/GFFFormat.cpp" line="103"/>
         <source>Parsing error: GFF version %1 is not supported</source>
         <translation>Parsing error: GFF version %1 is not supported</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="259"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="292"/>
+        <location filename="../src/GFFFormat.cpp" line="305"/>
         <source>Parsing error: sequence in FASTA sequence has whitespaces at line %1</source>
         <translation>Parsing error: sequence in FASTA sequence has whitespaces at line %1</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="299"/>
+        <location filename="../src/GFFFormat.cpp" line="312"/>
         <source>Parsing error: too few fields at line %1</source>
         <translation>Parsing error: too few fields at line %1</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="305"/>
+        <location filename="../src/GFFFormat.cpp" line="318"/>
         <source>Parsing error: start position at line %1 is not integer</source>
         <translation>Parsing error: start position at line %1 is not integer</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="311"/>
+        <location filename="../src/GFFFormat.cpp" line="324"/>
         <source>Parsing error: end position at line %1 is not integer</source>
         <translation>Parsing error: end position at line %1 is not integer</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="316"/>
+        <location filename="../src/GFFFormat.cpp" line="329"/>
         <source>Parsing error: incorrect annotation region at line %1</source>
         <translation>Parsing error: incorrect annotation region at line %1</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="367"/>
+        <location filename="../src/GFFFormat.cpp" line="380"/>
         <source>Parsing error: incorrect attributes field %1 at line %2</source>
         <translation>Parsing error: incorrect attributes field %1 at line %2</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="406"/>
+        <location filename="../src/GFFFormat.cpp" line="419"/>
         <source>Parsing error: incorrect score parameter at line %1. Score can be a float number or '.' symbol</source>
         <translation>Parsing error: incorrect score parameter at line %1. Score can be a float number or '.' symbol</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="416"/>
+        <location filename="../src/GFFFormat.cpp" line="429"/>
         <source>Parsing error: incorrect frame parameter at line %1. Frame can be a number between 0-2 or '.' symbol</source>
         <translation>Parsing error: incorrect frame parameter at line %1. Frame can be a number between 0-2 or '.' symbol</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="426"/>
+        <location filename="../src/GFFFormat.cpp" line="439"/>
         <source>Parsing error: incorrect strand patameter at line %1. Strand can be '+','-' or '.'</source>
         <translation>Parsing error: incorrect strand patameter at line %1. Strand can be '+','-' or '.'</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="592"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/GFFFormat.cpp" line="613"/>
         <source>Can not detect chromosome name. 'Chr' name will be used.</source>
         <translation>Can not detect chromosome name. 'Chr' name will be used.</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="357"/>
+        <location filename="../src/GFFFormat.cpp" line="370"/>
         <source>Wrong location for joined annotation at line %1. Line was skipped.</source>
         <translation>Wrong location for joined annotation at line %1. Line was skipped.</translation>
     </message>
@@ -1467,76 +1477,80 @@ The following sequences are empty:</translation>
 <context>
     <name>U2::Genbank::LocationParser</name>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="308"/>
         <source>Ignoring remote entry: %1.%2</source>
-        <translation>Ignoring remote entry: %1.%2</translation>
+        <translation type="vanished">Ignoring remote entry: %1.%2</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="339"/>
-        <location filename="../src/GenbankLocationParser.cpp" line="409"/>
+        <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>
         <translation>'a single base from a range' in combination with 'sequence span' is not supported</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="342"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="362"/>
         <source>Ignoring '<' at start position</source>
         <translation>Ignoring '<' at start position</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="412"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="434"/>
         <source>Ignoring '>' at end position</source>
         <translation>Ignoring '>' at end position</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="474"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="498"/>
         <source>Wrong token after JOIN %1</source>
         <translation>Wrong token after JOIN %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="479"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="503"/>
         <source>Wrong token after JOIN  - order %1</source>
         <translation>Wrong token after JOIN  - order %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="487"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="512"/>
         <source>Can't parse location on JOIN</source>
         <translation>Can't parse location on JOIN</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="493"/>
-        <location filename="../src/GenbankLocationParser.cpp" line="517"/>
-        <location filename="../src/GenbankLocationParser.cpp" line="537"/>
-        <location filename="../src/GenbankLocationParser.cpp" line="558"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="518"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="544"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="565"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="611"/>
         <source>Must be RIGHT_PARENTHESIS instead of %1</source>
         <translation>Must be RIGHT_PARENTHESIS instead of %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="499"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="524"/>
         <source>Wrong token after ORDER %1</source>
         <translation>Wrong token after ORDER %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="511"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="529"/>
+        <source>Wrong token after ORDER - join %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/GenbankLocationParser.cpp" line="538"/>
         <source>Can't parse location on ORDER</source>
         <translation>Can't parse location on ORDER</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="523"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="550"/>
         <source>Wrong token after BOND %1</source>
         <translation>Wrong token after BOND %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="531"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="559"/>
         <source>Can't parse location on BONDs</source>
         <translation>Can't parse location on BONDs</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="544"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="587"/>
         <source>Must be LEFT_PARENTHESIS instead of %1</source>
         <translation>Must be LEFT_PARENTHESIS instead of %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="552"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="604"/>
         <source>Can't parse location on COMPLEMENT</source>
         <translation>Can't parse location on COMPLEMENT</translation>
     </message>
@@ -1569,35 +1583,35 @@ The following sequences are empty:</translation>
         <translation>incomplete SOURCE record</translation>
     </message>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="396"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="629"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="634"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="640"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="787"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="816"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="823"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="830"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="840"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="399"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="632"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="637"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="643"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="790"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="819"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="826"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="833"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="843"/>
         <source>Error writing document</source>
         <translation>Error writing document</translation>
     </message>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="527"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="530"/>
         <source>There is no IOAdapter registry yet</source>
         <translation>There is no IOAdapter registry yet</translation>
     </message>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="529"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="532"/>
         <source>IOAdapterFactory is NULL</source>
         <translation>IOAdapterFactory is NULL</translation>
     </message>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="531"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="534"/>
         <source>IOAdapter is NULL</source>
         <translation>IOAdapter is NULL</translation>
     </message>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="799"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="802"/>
         <source>Invalid annotation table!</source>
         <translation>Invalid annotation table!</translation>
     </message>
@@ -2013,14 +2027,10 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/RawDNASequenceFormat.cpp" line="49"/>
         <source>Raw sequence file - a whole content of the file is treated either as a single/multiple nucleotide or peptide sequence(s). UGENE will remove all non-alphabetic chars from the result sequence. By default the characters in the file are considered a single sequence.</source>
-        <translation type="unfinished"></translation>
+        <translation>Raw sequence file - a whole content of the file is treated either as a single/multiple nucleotide or peptide sequence(s). UGENE will remove all non-alphabetic chars from the result sequence. By default the characters in the file are considered a single sequence.</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">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</translation>
-    </message>
-    <message>
-        <location filename="../src/RawDNASequenceFormat.cpp" line="131"/>
+        <location filename="../src/RawDNASequenceFormat.cpp" line="132"/>
         <source>Sequence is empty</source>
         <translation>Sequence is empty</translation>
     </message>
@@ -2149,32 +2159,32 @@ The following sequences are empty:</translation>
         <translation>Error parsing ID line. Not found sequence length</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="217"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="220"/>
         <source>Reading sequence %1</source>
         <translation>Reading sequence %1</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="236"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="239"/>
         <source>Error parsing sequence: unexpected empty line</source>
         <translation>Error parsing sequence: unexpected empty line</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="259"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="262"/>
         <source>Error reading sequence: memory allocation failed</source>
         <translation>Error reading sequence: memory allocation failed</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="274"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="277"/>
         <source>Sequence is truncated</source>
         <translation>Sequence is truncated</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="281"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="284"/>
         <source>Reading annotations %1</source>
         <translation>Reading annotations %1</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="288"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="291"/>
         <source>Invalid format of feature table</source>
         <translation>Invalid format of feature table</translation>
     </message>
@@ -2310,8 +2320,8 @@ The following sequences are empty:</translation>
     <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="1100"/>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1109"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1113"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1122"/>
         <source>Unexpected modification type '%1'</source>
         <translation>Unexpected modification type '%1'</translation>
     </message>
@@ -2392,43 +2402,43 @@ The following sequences are empty:</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="791"/>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="883"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="896"/>
         <source>Object not found</source>
         <translation>Object not found</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="832"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="845"/>
         <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="1013"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1026"/>
         <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="1036"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1049"/>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="289"/>
         <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="1078"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1091"/>
         <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="1091"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1104"/>
         <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="1122"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1135"/>
         <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="1140"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1153"/>
         <source>An error occurred during updating an object name!</source>
         <translation>An error occurred during updating an object name!</translation>
     </message>
@@ -2655,12 +2665,14 @@ The following sequences are empty:</translation>
         <translation>Object not found!</translation>
     </message>
     <message>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="803"/>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="918"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="930"/>
         <source>Object not found.</source>
         <translation>Object not found.</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="954"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="967"/>
         <source>Folder not found: %1</source>
         <translation>Folder not found: %1</translation>
     </message>
@@ -2703,375 +2715,4 @@ The following sequences are empty:</translation>
         <translation>Error writing document</translation>
     </message>
 </context>
-<context>
-    <name>U2DbiL10n</name>
-    <message>
-        <source>There is no assembly object with the specified id.</source>
-        <translation type="vanished">There is no assembly object with the specified id.</translation>
-    </message>
-    <message>
-        <source>Unsupported attribute type: %1</source>
-        <translation type="vanished">Unsupported attribute type: %1</translation>
-    </message>
-    <message>
-        <source>Required attribute is not found</source>
-        <translation type="vanished">Required attribute is not found</translation>
-    </message>
-    <message>
-        <source>Database url is incorrect</source>
-        <translation type="vanished">Database url is incorrect</translation>
-    </message>
-    <message>
-        <source>User login is not specified</source>
-        <translation type="vanished">User login is not specified</translation>
-    </message>
-    <message>
-        <source>Host is not specified</source>
-        <translation type="vanished">Host is not specified</translation>
-    </message>
-    <message>
-        <source>Database name is not specified</source>
-        <translation type="vanished">Database name is not specified</translation>
-    </message>
-    <message>
-        <source>Error opening MySQL database: %1</source>
-        <translation type="vanished">Error opening MySQL database: %1</translation>
-    </message>
-    <message>
-        <source>Not a %1 MySQL database: %2, %3</source>
-        <translation type="vanished">Not a %1 MySQL database: %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">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>
-        <source>Illegal database state: %1</source>
-        <translation type="vanished">Illegal database state: %1</translation>
-    </message>
-    <message>
-        <source>Can't synchronize database state</source>
-        <translation type="vanished">Can't synchronize database state</translation>
-    </message>
-    <message>
-        <source>Annotation table object is not found.</source>
-        <translation type="vanished">Annotation table object is not found.</translation>
-    </message>
-    <message>
-        <source>Feature is not found.</source>
-        <translation type="vanished">Feature is 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>Failed to find user step ID</source>
-        <translation type="vanished">Failed to find user step ID</translation>
-    </message>
-    <message>
-        <source>Not main thread</source>
-        <translation type="vanished">Not main thread</translation>
-    </message>
-    <message>
-        <source>Can't create a common user modifications step, previous one is not complete</source>
-        <translation type="vanished">Can't create a common user modifications step, previous one is not complete</translation>
-    </message>
-    <message>
-        <source>Can't create a common multiple modifications step, previous one is not complete</source>
-        <translation type="vanished">Can't create a common multiple modifications step, previous one is not complete</translation>
-    </message>
-    <message>
-        <source>Failed to create a common user modifications step</source>
-        <translation type="vanished">Failed to create a common user modifications step</translation>
-    </message>
-    <message>
-        <source>Failed to create a common multiple modifications step</source>
-        <translation type="vanished">Failed to create a common multiple modifications step</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>Unexpected modification type '%1'</source>
-        <translation type="vanished">Unexpected modification type '%1'</translation>
-    </message>
-    <message>
-        <source>Invalid row position: %1</source>
-        <translation type="vanished">Invalid row position: %1</translation>
-    </message>
-    <message>
-        <source>An error occurred during updating an alignment alphabet</source>
-        <translation type="vanished">An error occurred during updating an alignment alphabet</translation>
-    </message>
-    <message>
-        <source>An error occurred during reverting adding of rows</source>
-        <translation type="vanished">An error occurred during reverting adding of rows</translation>
-    </message>
-    <message>
-        <source>An error occurred during reverting addition of a row</source>
-        <translation type="vanished">An error occurred during reverting addition of a row</translation>
-    </message>
-    <message>
-        <source>An error occurred during reverting removing of rows</source>
-        <translation type="vanished">An error occurred during reverting removing of rows</translation>
-    </message>
-    <message>
-        <source>An error occurred during reverting removing of a row</source>
-        <translation type="vanished">An error occurred during reverting removing of a row</translation>
-    </message>
-    <message>
-        <source>An error occurred during updating an alignment gaps</source>
-        <translation type="vanished">An error occurred during updating an alignment gaps</translation>
-    </message>
-    <message>
-        <source>An error occurred during updating an alignment row order</source>
-        <translation type="vanished">An error occurred during updating an alignment row order</translation>
-    </message>
-    <message>
-        <source>An error occurred during updating a row info</source>
-        <translation type="vanished">An error occurred during updating a row info</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">An error occurred during addition of a row</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>Folder not found: %1 (canonical: %2)</source>
-        <translation type="vanished">Folder not found: %1 (canonical: %2)</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>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">Sequence object not found</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">Bound values: </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">Database is already opened!</translation>
-    </message>
-    <message>
-        <source>URL is not specified</source>
-        <translation type="vanished">URL is not specified</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">Database is already closed!</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/U2Formats/transl/russian.ts b/src/corelibs/U2Formats/transl/russian.ts
index 301d6b2..d9f39b8 100644
--- a/src/corelibs/U2Formats/transl/russian.ts
+++ b/src/corelibs/U2Formats/transl/russian.ts
@@ -28,6 +28,29 @@
     </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>
+    </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>
+    </message>
+    <message>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="58"/>
+        <source>Location parsing error.</source>
+        <translation type="unfinished"></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>
@@ -39,6 +62,19 @@
     </message>
 </context>
 <context>
+    <name>LocationParser</name>
+    <message>
+        <location filename="../src/GenbankLocationParser.cpp" line="635"/>
+        <source>Ignoring remote entry</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/GenbankLocationParser.cpp" line="636"/>
+        <source>Ignoring different strands in JOIN</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QObject</name>
     <message>
         <location filename="../src/BAMUtils.cpp" line="99"/>
@@ -104,7 +140,7 @@
 <context>
     <name>U2</name>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="215"/>
+        <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>
@@ -376,7 +412,7 @@
         <translation>Построение индекса для bam файла: "%1"</translation>
     </message>
     <message>
-        <location filename="../src/BAMUtils.cpp" line="712"/>
+        <location filename="../src/BAMUtils.cpp" line="715"/>
         <source>Wrong line in a SAM file.</source>
         <translation>Wrong line in a SAM file.</translation>
     </message>
@@ -406,7 +442,7 @@
     <message>
         <location filename="../src/BedFormat.cpp" line="729"/>
         <source>The file does not contain valid annotations!</source>
-        <translation type="unfinished"></translation>
+        <translation>Файл не содержит корректных аннотаций!</translation>
     </message>
     <message>
         <location filename="../src/BedFormat.cpp" line="976"/>
@@ -772,9 +808,9 @@
 <context>
     <name>U2::Document</name>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="260"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="264"/>
         <location filename="../src/FastaFormat.cpp" line="272"/>
-        <location filename="../src/FastqFormat.cpp" line="337"/>
+        <location filename="../src/FastqFormat.cpp" line="391"/>
         <location filename="../src/PDWFormat.cpp" line="154"/>
         <source>Document is empty.</source>
         <translation>Документ не содержит данных.</translation>
@@ -806,7 +842,7 @@
 <context>
     <name>U2::DocumentFormatUtils</name>
     <message>
-        <location filename="../src/DocumentFormatUtils.cpp" line="231"/>
+        <location filename="../src/DocumentFormatUtils.cpp" line="232"/>
         <source>Undefined sequence alphabet</source>
         <translation>Неизвестный алфавит</translation>
     </message>
@@ -972,10 +1008,10 @@
     <message>
         <location filename="../src/tasks/ConvertFileTask.cpp" line="56"/>
         <source>Conversion file from %1 to %2</source>
-        <translation>Преоьразование файла %1 в %2</translation>
+        <translation>Преобразование файла %1 в %2</translation>
     </message>
     <message>
-        <location filename="../src/tasks/MergeBamTask.cpp" line="40"/>
+        <location filename="../src/tasks/MergeBamTask.cpp" line="45"/>
         <source>Merge BAM files with SAMTools merge</source>
         <translation>Слияние BAM файлов с SAMTools</translation>
     </message>
@@ -983,107 +1019,105 @@
 <context>
     <name>U2::EMBLGenbankAbstractDocument</name>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="537"/>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="315"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="580"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="318"/>
         <source>Annotation name is empty</source>
         <translation>Не указано имя аннотации</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="546"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="589"/>
         <source>Error parsing location</source>
         <translation>Не указан регион аннотации</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="647"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="684"/>
         <source>Error parsing sequence: unexpected empty line</source>
         <translation>Ошибка чтения последовательности: пустая строка</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="674"/>
         <source>Error reading sequence: invalid sequence format</source>
-        <translation>Ошибка чтения последовательности: неверный формат</translation>
+        <translation type="vanished">Ошибка чтения последовательности: неверный формат</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="692"/>
         <source>Error reading sequence: memory allocation failed</source>
-        <translation>Ошибка чтения последовательности: не удалось выделить память</translation>
+        <translation type="vanished">Ошибка чтения последовательности: не удалось выделить память</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="574"/>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="369"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="615"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="372"/>
         <source>Unexpected line format</source>
         <translation>Слишком длинная строка или неожиданный конец файла</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="124"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="128"/>
         <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/EMBLGenbankAbstractDocument.cpp" line="141"/>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="310"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="145"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="314"/>
         <source>Reading entry header</source>
         <translation>Чтение заголовка</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="215"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="219"/>
         <source>Merge error: found annotations without sequence</source>
         <translation>Ошибка слияния: обнаружена таблица аннотаций без соотв последовательности</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="466"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="470"/>
         <source>The file contains an incorrect data that describes a qualifier value. </source>
         <translation>Файл содержит некорректные данные, которые описываются value. </translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="467"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="471"/>
         <source>The value cannot contain a single quote character. The qualifier is '%1'</source>
         <translation>Значение не может содержать одиночные кавычки. Квалификатор '%1'</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="628"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="669"/>
         <source>Reading sequence %1</source>
         <translation>Чтение последовательности: %1</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="707"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="704"/>
         <source>Sequence is truncated</source>
         <translation>Последовательность повреждена</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="714"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="710"/>
         <source>Reading annotations %1</source>
         <translation>Чтение аннотаций: %1</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="724"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="720"/>
         <source>Invalid format of feature table</source>
         <translation>Таблица аннотаций повреждена</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="787"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="808"/>
         <source>Line is too long.</source>
         <translation>Слишком длинная строка.</translation>
     </message>
     <message>
-        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="789"/>
+        <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="810"/>
         <source>IO error.</source>
         <translation>Ошибка чтения.</translation>
     </message>
     <message>
-        <location filename="../src/EMBLPlainTextFormat.cpp" line="226"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="253"/>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="207"/>
+        <location filename="../src/EMBLPlainTextFormat.cpp" line="229"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="256"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="210"/>
         <source>Record is truncated.</source>
         <translation>Данные повреждены.</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="324"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="327"/>
         <source>Annotation start position is empty</source>
         <translation>Не указано начало аннотации</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="329"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="332"/>
         <source>Annotation end position is empty</source>
         <translation>Не указан конец аннотации</translation>
     </message>
@@ -1176,50 +1210,58 @@ The following sequences are empty:</translation>
 <context>
     <name>U2::FastqFormat</name>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="50"/>
+        <location filename="../src/FastqFormat.cpp" line="51"/>
         <source>FASTQ</source>
         <translation>FASTQ</translation>
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="53"/>
+        <location filename="../src/FastqFormat.cpp" line="54"/>
         <source>FASTQ format is a text-based format for storing both a biological sequence (usually nucleotide sequence) and its corresponding quality scores.         Both the sequence letter and quality score are encoded with a single ASCII character for brevity.         It was originally developed at the Wellcome Trust Sanger Institute to bundle a FASTA sequence and its quality data,         but has recently become the de facto standard for storing the output of high throughput sequenc [...]
         <translation>Формат FASTQ является текстовым форматом для хранения биологических последовательностей (обычно нуклеотидных) и соответствующих им показателей качества. Последовательность и показатель качества кодируются при помощи одного символа ASCII для краткости. Изначально он был разработан в Wellcome Trust Sanger Institute для связи последовательности в формате FASTA и их данных качества, но в последнее время стал стандартом  для хранения выходных данных инструментов секвениро [...]
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="134"/>
+        <location filename="../src/FastqFormat.cpp" line="135"/>
         <source>Error while trying to find sequence name start</source>
         <translation>Не удалось найти начало имени последовательности</translation>
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="172"/>
-        <location filename="../src/FastqFormat.cpp" line="198"/>
+        <location filename="../src/FastqFormat.cpp" line="173"/>
+        <location filename="../src/FastqFormat.cpp" line="199"/>
         <source>Error while reading sequence</source>
         <translation>Ошибка чтения последовательности</translation>
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="290"/>
+        <location filename="../src/FastqFormat.cpp" line="324"/>
+        <source>Sequence name differs from quality scores name: %1 and %2</source>
+        <translation type="unfinished"></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>Некорректный FASTQ файл: %1, имя последовательности отличается от имени показателей качества: %2 и %3</translation>
+        <translation type="vanished">Некорректный FASTQ файл: %1, имя последовательности отличается от имени показателей качества: %2 и %3</translation>
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="311"/>
+        <location filename="../src/FastqFormat.cpp" line="363"/>
         <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/FastqFormat.cpp" line="489"/>
+        <location filename="../src/FastqFormat.cpp" line="559"/>
         <source>Not a valid FASTQ file, sequence name differs from quality scores name</source>
         <translation>Некорректный FASTQ файл, имя последовательности отличается от имени показателей качества</translation>
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="498"/>
+        <location filename="../src/FastqFormat.cpp" line="568"/>
         <source>Not a valid FASTQ file. Bad quality scores: inconsistent size.</source>
         <translation>Некорректный FASTQ файл. Плохие показатели качества: несовместимый размер.</translation>
     </message>
     <message>
-        <location filename="../src/FastqFormat.cpp" line="300"/>
         <source>Not a valid FASTQ file: %1. Bad quality scores: inconsistent size.</source>
-        <translation>Некорректный FASTQ файл: %1. Ошибка вычисления оценки точности: некорректный размер.</translation>
+        <translation type="vanished">Некорректный FASTQ файл: %1. Ошибка вычисления оценки точности: некорректный размер.</translation>
     </message>
 </context>
 <context>
@@ -1308,82 +1350,87 @@ The following sequences are empty:</translation>
         <translation>GFF это формат используемый для хранения аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="87"/>
+        <location filename="../src/GFFFormat.cpp" line="91"/>
         <source>Parsing error: invalid header</source>
         <translation>Parsing error: invalid header</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="91"/>
+        <location filename="../src/GFFFormat.cpp" line="95"/>
         <source>Parsing error: file does not contain version header</source>
         <translation>Parsing error: file does not contain version header</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="95"/>
+        <location filename="../src/GFFFormat.cpp" line="99"/>
         <source>Parsing error: format version is not an integer</source>
         <translation>Parsing error: format version is not an integer</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="99"/>
+        <location filename="../src/GFFFormat.cpp" line="103"/>
         <source>Parsing error: GFF version %1 is not supported</source>
         <translation>Parsing error: GFF version %1 is not supported</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="259"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="292"/>
+        <location filename="../src/GFFFormat.cpp" line="305"/>
         <source>Parsing error: sequence in FASTA sequence has whitespaces at line %1</source>
         <translation>Parsing error: sequence in FASTA sequence has whitespaces at line %1</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="299"/>
+        <location filename="../src/GFFFormat.cpp" line="312"/>
         <source>Parsing error: too few fields at line %1</source>
         <translation>Parsing error: too few fields at line %1</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="305"/>
+        <location filename="../src/GFFFormat.cpp" line="318"/>
         <source>Parsing error: start position at line %1 is not integer</source>
         <translation>Parsing error: start position at line %1 is not integer</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="311"/>
+        <location filename="../src/GFFFormat.cpp" line="324"/>
         <source>Parsing error: end position at line %1 is not integer</source>
         <translation>Parsing error: end position at line %1 is not integer</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="316"/>
+        <location filename="../src/GFFFormat.cpp" line="329"/>
         <source>Parsing error: incorrect annotation region at line %1</source>
         <translation>Parsing error: incorrect annotation region at line %1</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="367"/>
+        <location filename="../src/GFFFormat.cpp" line="380"/>
         <source>Parsing error: incorrect attributes field %1 at line %2</source>
         <translation>Parsing error: incorrect attributes field %1 at line %2</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="406"/>
+        <location filename="../src/GFFFormat.cpp" line="419"/>
         <source>Parsing error: incorrect score parameter at line %1. Score can be a float number or '.' symbol</source>
         <translation>Parsing error: incorrect score parameter at line %1. Score can be a float number or '.' symbol</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="416"/>
+        <location filename="../src/GFFFormat.cpp" line="429"/>
         <source>Parsing error: incorrect frame parameter at line %1. Frame can be a number between 0-2 or '.' symbol</source>
         <translation>Parsing error: incorrect frame parameter at line %1. Frame can be a number between 0-2 or '.' symbol</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="426"/>
+        <location filename="../src/GFFFormat.cpp" line="439"/>
         <source>Parsing error: incorrect strand patameter at line %1. Strand can be '+','-' or '.'</source>
         <translation>Parsing error: incorrect strand patameter at line %1. Strand can be '+','-' or '.'</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="592"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/GFFFormat.cpp" line="613"/>
         <source>Can not detect chromosome name. 'Chr' name will be used.</source>
         <translation>Can not detect chromosome name. 'Chr' name will be used.</translation>
     </message>
     <message>
-        <location filename="../src/GFFFormat.cpp" line="357"/>
+        <location filename="../src/GFFFormat.cpp" line="370"/>
         <source>Wrong location for joined annotation at line %1. Line was skipped.</source>
         <translation>Wrong location for joined annotation at line %1. Line was skipped.</translation>
     </message>
@@ -1467,76 +1514,80 @@ The following sequences are empty:</translation>
 <context>
     <name>U2::Genbank::LocationParser</name>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="308"/>
         <source>Ignoring remote entry: %1.%2</source>
-        <translation>Ignoring remote entry: %1.%2</translation>
+        <translation type="vanished">Ignoring remote entry: %1.%2</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="339"/>
-        <location filename="../src/GenbankLocationParser.cpp" line="409"/>
+        <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>
         <translation>'a single base from a range' in combination with 'sequence span' is not supported</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="342"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="362"/>
         <source>Ignoring '<' at start position</source>
         <translation>Ignoring '<' at start position</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="412"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="434"/>
         <source>Ignoring '>' at end position</source>
         <translation>Ignoring '>' at end position</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="474"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="498"/>
         <source>Wrong token after JOIN %1</source>
         <translation>Wrong token after JOIN %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="479"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="503"/>
         <source>Wrong token after JOIN  - order %1</source>
         <translation>Wrong token after JOIN  - order %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="487"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="512"/>
         <source>Can't parse location on JOIN</source>
         <translation>Can't parse location on JOIN</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="493"/>
-        <location filename="../src/GenbankLocationParser.cpp" line="517"/>
-        <location filename="../src/GenbankLocationParser.cpp" line="537"/>
-        <location filename="../src/GenbankLocationParser.cpp" line="558"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="518"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="544"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="565"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="611"/>
         <source>Must be RIGHT_PARENTHESIS instead of %1</source>
         <translation>Must be RIGHT_PARENTHESIS instead of %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="499"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="524"/>
         <source>Wrong token after ORDER %1</source>
         <translation>Wrong token after ORDER %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="511"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="529"/>
+        <source>Wrong token after ORDER - join %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/GenbankLocationParser.cpp" line="538"/>
         <source>Can't parse location on ORDER</source>
         <translation>Can't parse location on ORDER</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="523"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="550"/>
         <source>Wrong token after BOND %1</source>
         <translation>Wrong token after BOND %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="531"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="559"/>
         <source>Can't parse location on BONDs</source>
         <translation>Can't parse location on BONDs</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="544"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="587"/>
         <source>Must be LEFT_PARENTHESIS instead of %1</source>
         <translation>Must be LEFT_PARENTHESIS instead of %1</translation>
     </message>
     <message>
-        <location filename="../src/GenbankLocationParser.cpp" line="552"/>
+        <location filename="../src/GenbankLocationParser.cpp" line="604"/>
         <source>Can't parse location on COMPLEMENT</source>
         <translation>Can't parse location on COMPLEMENT</translation>
     </message>
@@ -1544,15 +1595,15 @@ The following sequences are empty:</translation>
 <context>
     <name>U2::GenbankPlainTextFormat</name>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="396"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="629"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="634"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="640"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="787"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="816"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="823"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="830"/>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="840"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="399"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="632"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="637"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="643"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="790"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="819"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="826"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="833"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="843"/>
         <source>Error writing document</source>
         <translation>Ошибка записи</translation>
     </message>
@@ -1582,22 +1633,22 @@ The following sequences are empty:</translation>
         <translation>Данные повреждены: запись SOURCE</translation>
     </message>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="527"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="530"/>
         <source>There is no IOAdapter registry yet</source>
         <translation>There is no IOAdapter registry yet</translation>
     </message>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="529"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="532"/>
         <source>IOAdapterFactory is NULL</source>
         <translation>IOAdapterFactory is NULL</translation>
     </message>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="531"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="534"/>
         <source>IOAdapter is NULL</source>
         <translation>IOAdapter is NULL</translation>
     </message>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="799"/>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="802"/>
         <source>Invalid annotation table!</source>
         <translation>Invalid annotation table!</translation>
     </message>
@@ -2013,14 +2064,14 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/RawDNASequenceFormat.cpp" line="49"/>
         <source>Raw sequence file - a whole content of the file is treated either as a single/multiple nucleotide or peptide sequence(s). UGENE will remove all non-alphabetic chars from the result sequence. By default the characters in the file are considered a single sequence.</source>
-        <translation type="unfinished"></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="131"/>
+        <location filename="../src/RawDNASequenceFormat.cpp" line="132"/>
         <source>Sequence is empty</source>
         <translation>Последовательность пуста</translation>
     </message>
@@ -2149,32 +2200,32 @@ The following sequences are empty:</translation>
         <translation>Ошибка распознавания ID строки. Не найдена длина последовательности</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="217"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="220"/>
         <source>Reading sequence %1</source>
         <translation>Чтение последовательности: %1</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="236"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="239"/>
         <source>Error parsing sequence: unexpected empty line</source>
         <translation>Ошибка чтения последовательности: пустая строка</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="259"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="262"/>
         <source>Error reading sequence: memory allocation failed</source>
         <translation>Ошибка чтения последовательности: не удалось выделить память</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="274"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="277"/>
         <source>Sequence is truncated</source>
         <translation>Последовательность повреждена</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="281"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="284"/>
         <source>Reading annotations %1</source>
         <translation>Чтение аннотаций: %1</translation>
     </message>
     <message>
-        <location filename="../src/SwissProtPlainTextFormat.cpp" line="288"/>
+        <location filename="../src/SwissProtPlainTextFormat.cpp" line="291"/>
         <source>Invalid format of feature table</source>
         <translation>Таблица аннотаций повреждена</translation>
     </message>
@@ -2310,8 +2361,8 @@ The following sequences are empty:</translation>
     <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="1100"/>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1109"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1113"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1122"/>
         <source>Unexpected modification type '%1'</source>
         <translation>Неожиданный тип модификации '%1'</translation>
     </message>
@@ -2392,43 +2443,43 @@ The following sequences are empty:</translation>
     </message>
     <message>
         <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="791"/>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="883"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="896"/>
         <source>Object not found</source>
         <translation>Объект не найден</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="832"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="845"/>
         <source>Folder not found: %1 (canonical: %2)</source>
         <translation>Папка не найдена: %1 (каноническое: %2)</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1013"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1026"/>
         <source>Not an object, id: %1, type: %2</source>
         <translation>Не является объектом, id: %1, тип: %2</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1036"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1049"/>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="289"/>
         <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="1078"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1091"/>
         <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="1091"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1104"/>
         <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="1122"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1135"/>
         <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="1140"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1153"/>
         <source>An error occurred during updating an object name!</source>
         <translation>An error occurred during updating an object name!</translation>
     </message>
@@ -2655,12 +2706,14 @@ The following sequences are empty:</translation>
         <translation>Object not found!</translation>
     </message>
     <message>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="803"/>
         <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="918"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="930"/>
         <source>Object not found.</source>
         <translation>Object not found.</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="954"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="967"/>
         <source>Folder not found: %1</source>
         <translation>Folder not found: %1</translation>
     </message>
diff --git a/src/corelibs/U2Gui/CMakeLists.txt b/src/corelibs/U2Gui/CMakeLists.txt
new file mode 100644
index 0000000..6299285
--- /dev/null
+++ b/src/corelibs/U2Gui/CMakeLists.txt
@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.4)
+project(U2Gui)
+
+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 Svg)
+
+add_definitions(-DBUILDING_U2GUI_DLL)
+
+include_directories(src)
+include_directories(../../include)
+include_directories(../U2Private/src)
+
+file(GLOB_RECURSE SRCS src/*.cpp)
+file(GLOB_RECURSE HDRS src/*.h)
+
+qt5_add_resources(RCC_SRCS U2Gui.qrc)
+
+add_library(U2Gui SHARED ${HDRS} ${SRCS} ${RCC_SRCS})
+
+target_link_libraries(U2Gui
+        Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml Qt5::Network Qt5::PrintSupport Qt5::Svg
+        U2Core U2Algorithm U2Formats U2Private)
+
diff --git a/src/corelibs/U2Gui/U2Gui.pro b/src/corelibs/U2Gui/U2Gui.pro
index 5f2de2d..f7b262d 100644
--- a/src/corelibs/U2Gui/U2Gui.pro
+++ b/src/corelibs/U2Gui/U2Gui.pro
@@ -64,6 +64,7 @@ HEADERS += src/AppSettingsGUI.h \
            src/util/LabelClickTransmitter.h \
            src/util/LastUsedDirHelper.h \
            src/util/LocalToolbar.h \
+           src/util/MultiClickMenu.h \
            src/util/ObjectViewTreeController.h \
            src/util/OrderedToolbar.h \
            src/util/PositionSelector.h \
@@ -72,8 +73,10 @@ HEADERS += src/AppSettingsGUI.h \
            src/util/ProjectTreeItemSelectorDialogImpl.h \
            src/util/RangeSelector.h \
            src/util/RegionSelector.h \
+           src/util/RegionSelectorController.h \
+           src/util/RegionSelectorWithExcludedRegion.h \
            src/util/RemovePartFromSequenceDialogController.h \
-           src/util/SaveDocumentGroupController.h \
+           src/util/SaveDocumentController.h \
            src/util/ScaleBar.h \
            src/util/ScriptEditorDelegate.h \
            src/util/ScriptEditorDialog.h \
@@ -99,6 +102,7 @@ HEADERS += src/AppSettingsGUI.h \
            src/util/project/filter_tasks/TextContentFilterTask.h \
            src/util/project/ConnectionHelper.h \
            src/util/project/DocumentFolders.h \
+           src/util/project/EditableTreeView.h \
            src/util/project/FilteredProjectItemDelegate.h \
            src/util/project/FilteredProjectGroup.h \
            src/util/project/FolderNameDialog.h \
@@ -117,43 +121,45 @@ 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/ui/AddNewDocumentDialog.ui \
-         src/util/ui/AuthenticationDialog.ui \
-         src/util/ui/AuthenticationWidget.ui \
-         src/util/ui/BreakpointConditionEditDialog.ui \
-         src/util/ui/CreateAnnotationDialog.ui \
-         src/util/ui/CreateAnnotationFullWidget.ui \
-         src/util/ui/CreateAnnotationNormalWidget.ui \
-         src/util/ui/CreateAnnotationOptionsPanelWidget.ui \
-         src/util/ui/CreateDocumentFromTextDialog.ui \
-         src/util/ui/CreateObjectRelationDialog.ui \
-         src/util/ui/DownloadRemoteFileDialog.ui \
-         src/util/ui/EditQualifierDialog.ui \
-         src/util/ui/EditSequenceDialog.ui \
-         src/util/ui/ExportAnnotationsDialog.ui \
-         src/util/ui/ExportDocumentDialog.ui \
-         src/util/ui/ExportImageDialog.ui \
-         src/util/ui/FolderNameDialog.ui \
-         src/util/ui/MultipartDocFormatConfiguratorWidget.ui \
-         src/util/ui/ProjectTreeItemSelectorDialogBase.ui \
-         src/util/ui/RangeSelectionDialog.ui \
-         src/util/ui/RemovePartFromSequenceDialog.ui \
-         src/util/ui/ScriptEditorDialog.ui \
-         src/util/ui/SearchGenbankSequenceDialog.ui \
-         src/util/ui/SeqPasterWidget.ui \
-         src/util/ImportDialogs/ui/AceImportDialog.ui \
-         src/util/shared_db/ui/CommonImportOptionsDialog.ui \
-         src/util/shared_db/ui/EditConnectionDialog.ui \
-         src/util/shared_db/ui/ImportOptionsWidget.ui \
-         src/util/shared_db/ui/ImportToDatabaseDialog.ui \
-         src/util/shared_db/ui/ItemToImportEditDialog.ui \
-         src/util/shared_db/ui/SharedConnectionsDialog.ui
+FORMS += src/util/AddNewDocumentDialog.ui \
+         src/util/AuthenticationDialog.ui \
+         src/util/AuthenticationWidget.ui \
+         src/util/BreakpointConditionEditDialog.ui \
+         src/util/CreateAnnotationDialog.ui \
+         src/util/CreateAnnotationFullWidget.ui \
+         src/util/CreateAnnotationNormalWidget.ui \
+         src/util/CreateAnnotationOptionsPanelWidget.ui \
+         src/util/CreateDocumentFromTextDialog.ui \
+         src/util/CreateObjectRelationDialog.ui \
+         src/util/DownloadRemoteFileDialog.ui \
+         src/util/EditQualifierDialog.ui \
+         src/util/EditSequenceDialog.ui \
+         src/util/ExportAnnotationsDialog.ui \
+         src/util/ExportDocumentDialog.ui \
+         src/util/ExportImageDialog.ui \
+         src/util/project/FolderNameDialog.ui \
+         src/util/MultipartDocFormatConfiguratorWidget.ui \
+         src/util/ProjectTreeItemSelectorDialogBase.ui \
+         src/util/RangeSelectionDialog.ui \
+         src/util/RegionSelectorWithExcludedRegion.ui \
+         src/util/RemovePartFromSequenceDialog.ui \
+         src/util/ScriptEditorDialog.ui \
+         src/util/SearchGenbankSequenceDialog.ui \
+         src/util/SeqPasterWidget.ui \
+         src/util/ImportDialogs/AceImportDialog.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 \
            src/ObjectViewModel.cpp \
            src/ObjectViewTasks.cpp \
            src/OpenViewTask.cpp \
+           src/PasteController.cpp \
            src/ProjectParsing.cpp \
            src/ToolsMenu.cpp \
            src/UnloadDocumentTask.cpp \
@@ -205,16 +211,18 @@ SOURCES += src/MainWindow.cpp \
            src/util/LabelClickTransmitter.cpp \
            src/util/LastUsedDirHelper.cpp \
            src/util/LocalToolbar.cpp \
+           src/util/MultiClickMenu.cpp \
            src/util/ObjectViewTreeController.cpp \
            src/util/OrderedToolbar.cpp \
-           src/PasteController.cpp \
            src/util/PositionSelector.cpp \
            src/util/ProjectDocumentComboBoxController.cpp \
            src/util/ProjectTreeItemSelectorDialog.cpp \
            src/util/RangeSelector.cpp \
            src/util/RegionSelector.cpp \
+           src/util/RegionSelectorController.cpp \
+           src/util/RegionSelectorWithExcludedRegion.cpp \
            src/util/RemovePartFromSequenceDialogController.cpp \
-           src/util/SaveDocumentGroupController.cpp \
+           src/util/SaveDocumentController.cpp \
            src/util/ScaleBar.cpp \
            src/util/ScriptEditorDelegate.cpp \
            src/util/ScriptEditorDialog.cpp \
@@ -240,6 +248,7 @@ SOURCES += src/MainWindow.cpp \
            src/util/project/filter_tasks/TextContentFilterTask.cpp \
            src/util/project/ConnectionHelper.cpp \
            src/util/project/DocumentFolders.cpp \
+           src/util/project/EditableTreeView.cpp \
            src/util/project/FilteredProjectItemDelegate.cpp \
            src/util/project/FilteredProjectGroup.cpp \
            src/util/project/FolderNameDialog.cpp \
diff --git a/src/corelibs/U2Gui/U2Gui.qrc b/src/corelibs/U2Gui/U2Gui.qrc
index b0d5355..0b298fd 100644
--- a/src/corelibs/U2Gui/U2Gui.qrc
+++ b/src/corelibs/U2Gui/U2Gui.qrc
@@ -24,6 +24,7 @@
         <file>images/ro_document.png</file>
         <file>images/gobject.png</file>
         <file>images/graphs.png</file>
+        <file>images/codon_table.png</file>
         <file>images/copy_sequence.png</file>
         <file>images/copy_complement_sequence.png</file>
         <file>images/copy_translation.png</file>
@@ -177,5 +178,6 @@
         <file>images/hide_all_views.png</file>
         <file>images/show_all_views.png</file>
         <file>images/wrap_sequence.png</file>
+        <file>images/extract_assembly_region.png</file>
     </qresource>
 </RCC>
diff --git a/src/corelibs/U2Gui/images/codon_table.png b/src/corelibs/U2Gui/images/codon_table.png
new file mode 100644
index 0000000..ce6b831
Binary files /dev/null and b/src/corelibs/U2Gui/images/codon_table.png differ
diff --git a/src/corelibs/U2Gui/images/extract_assembly_region.png b/src/corelibs/U2Gui/images/extract_assembly_region.png
new file mode 100644
index 0000000..574db6c
Binary files /dev/null and b/src/corelibs/U2Gui/images/extract_assembly_region.png differ
diff --git a/src/corelibs/U2Gui/src/MainWindow.h b/src/corelibs/U2Gui/src/MainWindow.h
index 0c45da8..5e3113c 100644
--- a/src/corelibs/U2Gui/src/MainWindow.h
+++ b/src/corelibs/U2Gui/src/MainWindow.h
@@ -90,8 +90,7 @@ class QMainWindow;
 #define ACTION_PROJECT__CREATE_FOLDER               "action_project__create_folder"
 #define ACTION_PROJECT__SAVE_DOCUMENT               "action_prpject__save_document"
 
-#define ACTION_PROJECT__EDIT_MENU                   "action_project__edit_menu"
-
+#define PROJECT_MENU_SEPARATOR_1                    "project_menu_separator_1"
 #define ACTION_DOCUMENT__LOCK                       "action_document_lock"
 #define ACTION_DOCUMENT__UNLOCK                     "action_document_unlock"
 
diff --git a/src/corelibs/U2Gui/src/OpenViewTask.cpp b/src/corelibs/U2Gui/src/OpenViewTask.cpp
index d922abc..c21d819 100644
--- a/src/corelibs/U2Gui/src/OpenViewTask.cpp
+++ b/src/corelibs/U2Gui/src/OpenViewTask.cpp
@@ -55,6 +55,7 @@ namespace U2 {
 
 /* TRANSLATOR U2::LoadUnloadedDocumentTask */
 
+const int OpenViewTask::MAX_DOC_NUMBER_TO_OPEN_VIEWS = 5;
 
 //////////////////////////////////////////////////////////////////////////
 // LoadUnloadedDocumentAndOpenViewTask
@@ -219,28 +220,28 @@ void OpenViewTask::prepare()
 
 //////////////////////////////////////////////////////////////////////////
 
-LoadRemoteDocumentAndOpenViewTask::LoadRemoteDocumentAndOpenViewTask(const QString &accId, const QString &dbName)
-    : Task(tr("Load remote document and open view"), TaskFlags_NR_FOSCOE | TaskFlag_MinimizeSubtaskErrorText), loadRemoteDocTask(NULL)
+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)
 {
     accNumber = accId;
     databaseName = dbName;
 }
 
-LoadRemoteDocumentAndOpenViewTask::LoadRemoteDocumentAndOpenViewTask(const GUrl &url)
-    : Task(tr("Load remote document and open view"), TaskFlags_NR_FOSCOE | TaskFlag_MinimizeSubtaskErrorText), loadRemoteDocTask(NULL)
+LoadRemoteDocumentAndAddToProjectTask::LoadRemoteDocumentAndAddToProjectTask(const GUrl &url)
+    : Task(tr("Load remote document and add to project"), TaskFlags_NR_FOSCOE | TaskFlag_MinimizeSubtaskErrorText), openView(true), loadRemoteDocTask(NULL)
 {
     docUrl = url;
 }
 
-LoadRemoteDocumentAndOpenViewTask::LoadRemoteDocumentAndOpenViewTask(const QString& accId, const QString& dbName,
-    const QString &fp, const QString &format, const QVariantMap &hints)
-    : Task(tr("Load remote document and open view"), TaskFlags_NR_FOSCOE | TaskFlag_MinimizeSubtaskErrorText),
-    accNumber(accId), databaseName(dbName), fileFormat(format), fullpath(fp), hints(hints), loadRemoteDocTask(NULL)
+LoadRemoteDocumentAndAddToProjectTask::LoadRemoteDocumentAndAddToProjectTask(const QString& accId, const QString& dbName,
+    const QString &fp, const QString &format, const QVariantMap &hints, bool openView)
+    : 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)
 {
 
 }
 
-void LoadRemoteDocumentAndOpenViewTask::prepare()
+void LoadRemoteDocumentAndAddToProjectTask::prepare()
 {
     if (docUrl.isEmpty()) {
         loadRemoteDocTask = new LoadRemoteDocumentTask(accNumber, databaseName, fullpath, fileFormat, hints);
@@ -250,7 +251,22 @@ void LoadRemoteDocumentAndOpenViewTask::prepare()
     addSubTask(loadRemoteDocTask);
 }
 
-QList<Task*> LoadRemoteDocumentAndOpenViewTask::onSubTaskFinished( Task* subTask) {
+namespace {
+    Task * createLoadedDocTask(Document *loadedDoc, bool openView) {
+        if (loadedDoc->isLoaded() && openView) {
+            return new OpenViewTask(loadedDoc);
+        }
+        if (!loadedDoc->isLoaded() && openView) {
+            return new LoadUnloadedDocumentAndOpenViewTask(loadedDoc);
+        }
+        if (!loadedDoc->isLoaded() && !openView) {
+            return new LoadUnloadedDocumentTask(loadedDoc);
+        }
+        return NULL;
+    }
+}
+
+QList<Task*> LoadRemoteDocumentAndAddToProjectTask::onSubTaskFinished( Task* subTask) {
     QList<Task*> subTasks;
     if (subTask->hasError()) {
         return subTasks;
@@ -278,7 +294,9 @@ QList<Task*> LoadRemoteDocumentAndOpenViewTask::onSubTaskFinished( Task* subTask
         QString fullPath = loadRemoteDocTask->getLocalUrl();
         Project* proj = AppContext::getProject();
         if (proj == NULL) {
-            Task* openWithProjectTask = AppContext::getProjectLoader()->openWithProjectTask(fullPath);
+            QVariantMap hints;
+            hints[ProjectLoaderHint_LoadWithoutView] = !openView;
+            Task* openWithProjectTask = AppContext::getProjectLoader()->openWithProjectTask(fullPath, hints);
             if (openWithProjectTask != NULL) {
                 subTasks.append(openWithProjectTask);
             }
@@ -288,17 +306,20 @@ QList<Task*> LoadRemoteDocumentAndOpenViewTask::onSubTaskFinished( Task* subTask
             QString url = doc->getURLString();
             Document* loadedDoc = proj->findDocumentByURL(url);
             if (loadedDoc != NULL){
-                if (loadedDoc->isLoaded()) {
-                    subTasks.append(new OpenViewTask(loadedDoc));
-                } else {
-                    subTasks.append(new LoadUnloadedDocumentAndOpenViewTask(loadedDoc));
+                Task *task = createLoadedDocTask(loadedDoc, openView);
+                if (NULL != task) {
+                    subTasks.append(task);
                 }
             } else {
                 // Add document to project
                 doc = loadRemoteDocTask->takeDocument();
                 SAFE_POINT(doc != NULL, "loadRemoteDocTask->takeDocument() returns NULL!", subTasks);
                 subTasks.append(new AddDocumentTask(doc));
-                subTasks.append(new LoadUnloadedDocumentAndOpenViewTask(doc));
+                if (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 2e1aefb..07c82a8 100644
--- a/src/corelibs/U2Gui/src/OpenViewTask.h
+++ b/src/corelibs/U2Gui/src/OpenViewTask.h
@@ -48,16 +48,17 @@ private:
     LoadUnloadedDocumentTask* loadUnloadedTask;
 };
 
-class U2GUI_EXPORT LoadRemoteDocumentAndOpenViewTask : public Task {
+class U2GUI_EXPORT LoadRemoteDocumentAndAddToProjectTask : public Task {
     Q_OBJECT
 public:
-    LoadRemoteDocumentAndOpenViewTask(const QString& accId, const QString& dbName);
-    LoadRemoteDocumentAndOpenViewTask(const QString& accId,
+    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());
-    LoadRemoteDocumentAndOpenViewTask(const GUrl& url);
+                                      const QVariantMap& hints = QVariantMap(),
+                                      bool openView = true);
+    LoadRemoteDocumentAndAddToProjectTask(const GUrl& url);
     virtual void prepare();
 protected:
     QList<Task*> onSubTaskFinished(Task* subTask);
@@ -68,6 +69,7 @@ private:
     QString     fullpath;
     GUrl        docUrl;
     QVariantMap hints;
+    bool        openView;
     LoadRemoteDocumentTask* loadRemoteDocTask;
 };
 
@@ -75,6 +77,8 @@ class U2GUI_EXPORT OpenViewTask : public Task {
     Q_OBJECT
 public:
     OpenViewTask(Document* d);
+
+    static const int MAX_DOC_NUMBER_TO_OPEN_VIEWS;
 protected:
     void prepare();
 private:
diff --git a/src/corelibs/U2Gui/src/ToolsMenu.cpp b/src/corelibs/U2Gui/src/ToolsMenu.cpp
index fa90c8b..8dd7c8b 100644
--- a/src/corelibs/U2Gui/src/ToolsMenu.cpp
+++ b/src/corelibs/U2Gui/src/ToolsMenu.cpp
@@ -94,7 +94,6 @@ const QString ToolsMenu::HMMER_SEARCH2 = "HMMER_SEARCH2";
 
 const QString ToolsMenu::DOTPLOT = "DOTPLOT";
 const QString ToolsMenu::GENERATE_SEQUENCE = "GENERATE_SEQUENCE";
-const QString ToolsMenu::EXPERT_DISCOVERY = "EXPERT_DISCOVERY";
 const QString ToolsMenu::QUERY_DESIGNER = "QUERY_DESIGNER";
 const QString ToolsMenu::WORKFLOW_DESIGNER = "WORKFLOW_DESIGNER";
 
@@ -207,7 +206,6 @@ void ToolsMenu::init() {
     subMenuAction[TOOLS] << DOTPLOT;
     subMenuAction[TOOLS] << GENERATE_SEQUENCE;
     subMenuAction[TOOLS] << LINE;
-    subMenuAction[TOOLS] << EXPERT_DISCOVERY;
     subMenuAction[TOOLS] << QUERY_DESIGNER;
     subMenuAction[TOOLS] << WORKFLOW_DESIGNER;
     subMenuAction[TOOLS] << GUI_TEST_RUNNER;
diff --git a/src/corelibs/U2Gui/src/ToolsMenu.h b/src/corelibs/U2Gui/src/ToolsMenu.h
index 33d4456..a479481 100644
--- a/src/corelibs/U2Gui/src/ToolsMenu.h
+++ b/src/corelibs/U2Gui/src/ToolsMenu.h
@@ -102,7 +102,6 @@ public:
 
     static const QString DOTPLOT;
     static const QString GENERATE_SEQUENCE;
-    static const QString EXPERT_DISCOVERY;
     static const QString QUERY_DESIGNER;
     static const QString WORKFLOW_DESIGNER;
     static const QString GUI_TEST_RUNNER;
diff --git a/src/corelibs/U2Gui/src/UnloadDocumentTask.cpp b/src/corelibs/U2Gui/src/UnloadDocumentTask.cpp
index 16a0d9f..286d0da 100644
--- a/src/corelibs/U2Gui/src/UnloadDocumentTask.cpp
+++ b/src/corelibs/U2Gui/src/UnloadDocumentTask.cpp
@@ -24,6 +24,7 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/Counter.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/GObjectUtils.h>
@@ -51,6 +52,7 @@ UnloadDocumentTask::UnloadDocumentTask(Document* _doc, bool save)
       saveTask(NULL),
       lock(NULL)
 {
+    GCOUNTER(cvar, tvar, "UnloadDocumentTask");
     lock = new StateLock(Document::UNLOAD_LOCK_NAME, StateLockFlag_LiveLock);
     lock->setParent(this);
     doc->lockState(lock);
@@ -185,7 +187,7 @@ ReloadDocumentTask::ReloadDocumentTask( Document *d )
     : Task( "Reloading given document", TaskFlags_NR_FOSE_COSC ), doc( d ), url( d->getURL( ) ),
     removeDocTask( NULL ), openDocTask( NULL )
 {
-
+    GCOUNTER(cvar, tvar, "ReloadDocumentTask");
 }
 
 void ReloadDocumentTask::prepare( ) {
diff --git a/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.h b/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.h
index 40702ec..b9b60b7 100644
--- a/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.h
+++ b/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.h
@@ -53,7 +53,7 @@ private:
     QVBoxLayout*        mainLayout;
 
     static const int TITLE_HEIGHT = 30;
-    static const int MIN_WIDGET_WIDTH = 220;
+    static const int MIN_WIDGET_WIDTH = 240;
     static const int MAX_WIDGET_WIDTH = 500;
 };
 
diff --git a/src/corelibs/U2Gui/src/util/AddNewDocumentDialog.ui b/src/corelibs/U2Gui/src/util/AddNewDocumentDialog.ui
new file mode 100644
index 0000000..e9219e4
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/AddNewDocumentDialog.ui
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AddNewDocumentDialog</class>
+ <widget class="QDialog" name="AddNewDocumentDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>389</width>
+    <height>147</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>389</width>
+    <height>120</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Add New Document</string>
+  </property>
+  <property name="modal">
+   <bool>false</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="sizeConstraint">
+    <enum>QLayout::SetMinAndMaxSize</enum>
+   </property>
+   <item>
+    <layout class="QGridLayout" name="gridLayout_3">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetMinAndMaxSize</enum>
+     </property>
+     <item row="0" column="0">
+      <layout class="QGridLayout" name="gridLayout">
+       <item row="0" column="0">
+        <widget class="QLabel" name="documentTypeLabel">
+         <property name="text">
+          <string>Document format</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QLabel" name="documentLocationLabel">
+         <property name="text">
+          <string>Document location</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QLineEdit" name="documentURLEdit"/>
+       </item>
+       <item row="1" column="2">
+        <widget class="QToolButton" name="documentURLButton">
+         <property name="text">
+          <string>...</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1" colspan="2">
+        <widget class="QComboBox" name="documentTypeCombo"/>
+       </item>
+      </layout>
+     </item>
+     <item row="1" column="0">
+      <widget class="QCheckBox" name="gzipCheckBox">
+       <property name="layoutDirection">
+        <enum>Qt::LeftToRight</enum>
+       </property>
+       <property name="text">
+        <string>Compress file</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </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>AddNewDocumentDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>306</x>
+     <y>272</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>306</x>
+     <y>146</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>AddNewDocumentDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>194</x>
+     <y>126</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>194</x>
+     <y>73</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp
index 551838d..20bf5b7 100644
--- a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp
+++ b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp
@@ -26,13 +26,14 @@
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
 #include <U2Core/ProjectModel.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/GUIUtils.h>
 #include <U2Gui/HelpButton.h>
-#include <U2Core/QObjectScopedPointer.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "AddNewDocumentDialogImpl.h"
 #include "DocumentFormatComboboxController.h"
@@ -45,29 +46,48 @@ namespace U2 {
 #define SETTINGS_LASTDIR        "add_new_document/last_dir"
 
 AddNewDocumentDialogImpl::AddNewDocumentDialogImpl(QWidget* p, AddNewDocumentDialogModel& m, const DocumentFormatConstraints& c) 
-: QDialog(p), model(m)
+    : QDialog(p),
+      model(m)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467599");
+    new HelpButton(this, buttonBox, "17470528");
     if (model.format.isEmpty()) {
         model.format = AppContext::getSettings()->getValue(SETTINGS_LASTFORMAT, QString("")).toString();
     }
     
-    documentURLEdit->setText(model.url);
     formatController = new DocumentFormatComboboxController(this, documentTypeCombo, c, model.format);
     model.successful = false;
     
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    connect(documentURLButton, SIGNAL(clicked()), SLOT(sl_documentURLButtonClicked()));
-    QPushButton *createButton = buttonBox->button(QDialogButtonBox::Ok);
-    connect(createButton, SIGNAL(clicked()), SLOT(sl_createButtonClicked()));
-    connect(documentURLEdit, SIGNAL(editingFinished()), SLOT(sl_documentURLEdited()));
-    connect(documentTypeCombo, SIGNAL(currentIndexChanged(int)), SLOT(sl_typeComboCurrentChanged(int)));
-    connect(gzipCheckBox, SIGNAL(toggled(bool)), SLOT(sl_gzipChecked(bool)));
+    SaveDocumentControllerConfig conf;
+    conf.defaultFileName = model.url;
+    conf.defaultFormatId = model.format;
+    conf.fileDialogButton = documentURLButton;
+    conf.fileNameEdit = documentURLEdit;
+    conf.formatCombo = documentTypeCombo;
+    conf.parentWidget = this;
+    conf.saveTitle = tr("Save File");
+    conf.defaultDomain = SETTINGS_LASTDIR;
+    conf.compressCheckbox = gzipCheckBox;
+
+    saveController = new SaveDocumentController(conf, formatController->getFormatsInCombo(), this);
+}
 
-    updateState();
+void AddNewDocumentDialogImpl::accept() {
+    model.format = saveController->getFormatIdToSave();
+    model.url = saveController->getSaveFileName();
+    if (model.url.isEmpty()) {
+        QMessageBox::critical(this, tr("Invalid Document Location"), tr("Document location is empty"));
+        documentURLEdit->setFocus();
+        return;
+    }
+    model.io = gzipCheckBox->isChecked() ? BaseIOAdapters::GZIPPED_LOCAL_FILE : BaseIOAdapters::LOCAL_FILE;
+    model.successful = true;
+    AppContext::getSettings()->setValue(SETTINGS_LASTFORMAT, model.format);
+    AppContext::getSettings()->setValue(SETTINGS_LASTDIR, QFileInfo(model.url).absoluteDir().absolutePath());
+    QDialog::accept();
 }
 
 void AddNewDocumentDialogController::run(QWidget* p, AddNewDocumentDialogModel& m, const DocumentFormatConstraints& c) {
@@ -86,106 +106,4 @@ void AddNewDocumentDialogController::run(QWidget* p, AddNewDocumentDialogModel&
     assert(proj->findDocumentByURL(m.url) == NULL);
 }
 
-void AddNewDocumentDialogImpl::updateState() {
-    bool ready = formatController->hasSelectedFormat();
-    
-    if (ready) {
-        const QString& url = currentURL();
-        ready = !url.isEmpty() && QFileInfo(url).absoluteDir().exists();
-        if (ready) {
-            Project* p = AppContext::getProject();
-            ready = p->findDocumentByURL(url) == NULL;
-        }
-    }
-    
-    //createButton->setDisabled(!ready);
-}
-
-
-QString AddNewDocumentDialogImpl::currentURL() {
-	QString url = documentURLEdit->text();
-	if (url.isEmpty()) {
-		return url;
-	}
-	bool extOk = false;
-	QString extraExt = ".gz";
-	if (url.endsWith(extraExt)) {
-		url.chop(extraExt.size());
-	}
-
-	DocumentFormatId fid = formatController->getActiveFormatId();
-	DocumentFormat* df = AppContext::getDocumentFormatRegistry()->getFormatById(fid);
-	if (df) {
-		foreach(QString ext, df->getSupportedDocumentFileExtensions()) {
-			if (url.endsWith(ext)) {
-				extOk = true;
-				break;
-			}
-		}
-		if (!extOk) {
-			url+="."+df->getSupportedDocumentFileExtensions().first();
-		}
-	}
-	if (gzipCheckBox->isChecked()) {
-		url += extraExt;
-	}
-	documentURLEdit->setText(url);
-	
-	QFileInfo fi(url);
-	return fi.absoluteFilePath();
-}
-
-void AddNewDocumentDialogImpl::sl_documentURLButtonClicked() {
-	QString url = currentURL();
-    if (url.isEmpty()) {
-		url = AppContext::getSettings()->getValue(SETTINGS_LASTDIR, QString("")).toString();
-    }
-    QString filter = DialogUtils::prepareDocumentsFileFilter(formatController->getActiveFormatId(), false);
-	QString name = U2FileDialog::getSaveFileName(this, tr("Save file"), url, filter);
-	if (!name.isEmpty()) {
-		documentURLEdit->setText(name);	
-		AppContext::getSettings()->setValue(SETTINGS_LASTDIR, QFileInfo(name).absoluteDir().absolutePath());
-		updateState();
-	}
-}
-
-void AddNewDocumentDialogImpl::sl_createButtonClicked() {
-	model.format = formatController->getActiveFormatId();
-	assert(!model.format.isEmpty());
-	model.url = currentURL();
-	model.io = gzipCheckBox->isChecked() ? BaseIOAdapters::GZIPPED_LOCAL_FILE : BaseIOAdapters::LOCAL_FILE;
-	model.successful = true;
-	AppContext::getSettings()->setValue(SETTINGS_LASTFORMAT, model.format);
-	accept();
-}
-
-
-
-void AddNewDocumentDialogImpl::sl_documentURLEdited() {
-	updateState();
-}
-
-void AddNewDocumentDialogImpl::sl_typeComboCurrentChanged(int i) {
-    Q_UNUSED(i);
-	QString url = documentURLEdit->text();
-	if (!url.isEmpty()) {
-		/* chop obsolete extensions */
-		if (gzipCheckBox->isChecked() && url.endsWith(".gz")) {
-			url.chop(3);
-		}
-		int dot = url.lastIndexOf('.');
-		if (dot > 0) {
-			url.chop(url.size() - dot);
-		}
-		documentURLEdit->setText(url);
-	}
-
-	updateState();
-}
-
-void AddNewDocumentDialogImpl::sl_gzipChecked(bool on) {
-    Q_UNUSED(on);
-	updateState();
-}
-
-}//namespace
+}   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.h b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.h
index 38a83af..86c790f 100644
--- a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.h
+++ b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.h
@@ -23,29 +23,23 @@
 #define _U2_ADD_NEW_DOCUMENT_DIALOG_IMPL_H_
 
 #include "AddNewDocumentDialogController.h"
-#include <ui/ui_AddNewDocumentDialog.h>
+#include "ui_AddNewDocumentDialog.h"
 
 namespace U2 {
 
 class DocumentFormatComboboxController;
+class SaveDocumentController;
 
-class AddNewDocumentDialogImpl : public QDialog, public Ui::AddNewDocumentDialog {
+class AddNewDocumentDialogImpl : public QDialog, public Ui_AddNewDocumentDialog {
     Q_OBJECT
     AddNewDocumentDialogImpl(QWidget* p, AddNewDocumentDialogModel& m, const DocumentFormatConstraints& c);
     friend class AddNewDocumentDialogController;
 
-private slots:
-    void sl_documentURLButtonClicked();
-    void sl_createButtonClicked();
-    void sl_documentURLEdited();
-    void sl_typeComboCurrentChanged(int i);
-    void sl_gzipChecked(bool state);
+public slots:
+    void accept();
 
 private:
-    void updateState();
-    QString currentURL();
-    
-
+    SaveDocumentController * saveController;
     AddNewDocumentDialogModel model;
     DocumentFormatComboboxController* formatController;
 };
diff --git a/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp b/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp
index 4d1ac4a..2c3ae6d 100644
--- a/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp
@@ -29,7 +29,7 @@
 #include <U2Gui/HelpButton.h>
 #include "AuthenticationDialog.h"
 #include "AuthenticationWidget.h"
-#include "ui/ui_AuthenticationDialog.h"
+#include "ui_AuthenticationDialog.h"
 
 namespace U2 {
 
@@ -39,7 +39,7 @@ AuthenticationDialog::AuthenticationDialog(const QString &text, QWidget* parent)
     authenticationWidget(new AuthenticationWidget)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467872");
+    new HelpButton(this, ui->buttonBox, "17470798");
     ui->mainLayout->insertWidget(1, authenticationWidget);
 
     if (text.isEmpty()) {
diff --git a/src/corelibs/U2Gui/src/util/ui/AuthenticationDialog.ui b/src/corelibs/U2Gui/src/util/AuthenticationDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/AuthenticationDialog.ui
rename to src/corelibs/U2Gui/src/util/AuthenticationDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/AuthenticationWidget.h b/src/corelibs/U2Gui/src/util/AuthenticationWidget.h
index f0e4073..1db8143 100644
--- a/src/corelibs/U2Gui/src/util/AuthenticationWidget.h
+++ b/src/corelibs/U2Gui/src/util/AuthenticationWidget.h
@@ -30,7 +30,7 @@
 #endif
 
 #include <U2Core/global.h>
-#include "ui/ui_AuthenticationWidget.h"
+#include "ui_AuthenticationWidget.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/util/ui/AuthenticationWidget.ui b/src/corelibs/U2Gui/src/util/AuthenticationWidget.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/AuthenticationWidget.ui
rename to src/corelibs/U2Gui/src/util/AuthenticationWidget.ui
diff --git a/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp b/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp
index f43852a..b4cc5d9 100644
--- a/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp
@@ -21,10 +21,10 @@
 
 #include "ScriptEditorWidget.h"
 
-#include "ui/ui_BreakpointConditionEditDialog.h"
+#include "ui_BreakpointConditionEditDialog.h"
 #include "BreakpointConditionEditDialog.h"
 #include <U2Gui/HelpButton.h>
-
+#include <QPushButton>
 
 namespace U2 {
 
@@ -35,7 +35,9 @@ BreakpointConditionEditDialog::BreakpointConditionEditDialog(QWidget *parent,
 {
     ui = new Ui_BreakpointConditionEditDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17468146");
+    new HelpButton(this, ui->buttonBox, "17471051");
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     scriptEdit = new ScriptEditorWidget(this);
     scriptEdit->setVariablesText(variablesText);
diff --git a/src/corelibs/U2Gui/src/util/ui/BreakpointConditionEditDialog.ui b/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/BreakpointConditionEditDialog.ui
rename to src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp
index 7fd8d44..0e082ff 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp
@@ -28,36 +28,29 @@
 #include <U2Core/ProjectModel.h>
 #include <U2Core/GObjectRelationRoles.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QMessageBox>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#endif
+#include <QPushButton>
+#include <QMessageBox>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
 
 #include <U2Gui/HelpButton.h>
-#include "ui/ui_CreateAnnotationDialog.h"
+#include "ui_CreateAnnotationDialog.h"
 
 namespace U2 {
 
 CreateAnnotationDialog::CreateAnnotationDialog(QWidget* p, CreateAnnotationModel& m) :
     QDialog(p),
     model(m),
-    ui(new Ui::CreateAnnotationDialog)
+    ui(new Ui_CreateAnnotationDialog)
 {
     ui->setupUi(this);
     annWidgetController = new CreateAnnotationWidgetController(m, this, CreateAnnotationWidgetController::Full);
-    
-    new HelpButton(this, ui->buttonBox, "17467566");
+
+    helpButton = new HelpButton(this, ui->buttonBox, "17470494");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
 
     ui->mainLayout->insertWidget(0, annWidgetController->getWidget());
-    
+
     annWidgetController->setFocusToAnnotationType();
 }
 
@@ -65,12 +58,18 @@ CreateAnnotationDialog::~CreateAnnotationDialog() {
     delete ui;
 }
 
+void CreateAnnotationDialog::updateAppearance(const QString &newTitle, const QString &newHelpPage, const QString &newOkButtonName) {
+    setWindowTitle(newTitle);
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(newOkButtonName);
+    helpButton->updatePageId(newHelpPage);
+}
+
 void CreateAnnotationDialog::accept() {
     QString err = annWidgetController->validate();
     if (!err.isEmpty()) {
         QMessageBox::warning(this, tr("Error"), err);
         return;
-    } 
+    }
     bool objectPrepared = annWidgetController->prepareAnnotationObject();
     if (!objectPrepared){
         QMessageBox::warning(this, tr("Error"), tr("Cannot create an annotation object. Please check settings"));
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.h b/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.h
index 567fd8d..2e74db1 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.h
@@ -26,29 +26,30 @@
 
 #include <U2Core/global.h>
 
-namespace Ui {
-class CreateAnnotationDialog;
-}
+class Ui_CreateAnnotationDialog;
 
 namespace U2 {
 
 class CreateAnnotationWidgetController;
 class CreateAnnotationModel;
+class HelpButton;
 
 class U2GUI_EXPORT CreateAnnotationDialog : public QDialog {
-Q_OBJECT
+    Q_OBJECT
 public:
     //saves the results to the provided model
     CreateAnnotationDialog(QWidget* p, CreateAnnotationModel& m);
     ~CreateAnnotationDialog();
-    
+
+    void updateAppearance(const QString& newTitle, const QString& newHelpPage, const QString& newOkButtonName);
 private slots:
     void accept();
 
 private:
-    CreateAnnotationModel& model;
-    CreateAnnotationWidgetController* annWidgetController;
-    Ui::CreateAnnotationDialog *ui;
+    CreateAnnotationModel&              model;
+    CreateAnnotationWidgetController*   annWidgetController;
+    Ui_CreateAnnotationDialog*          ui;
+    HelpButton*                         helpButton;
 };
 
 } // namespace
diff --git a/src/corelibs/U2Gui/src/util/ui/CreateAnnotationDialog.ui b/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/CreateAnnotationDialog.ui
rename to src/corelibs/U2Gui/src/util/CreateAnnotationDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.cpp
index 22a0016..996ca23 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.cpp
@@ -26,6 +26,7 @@
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/GObjectComboBoxController.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2LongLongValidator.h>
 
 #include "CreateAnnotationFullWidget.h"
@@ -46,6 +47,12 @@ CreateAnnotationFullWidget::~CreateAnnotationFullWidget() {
     countDescriptionUsage();
 }
 
+void CreateAnnotationFullWidget::setGroupNameVisible(bool visible) {
+    lblGroupName->setVisible(visible);
+    leGroupName->setVisible(visible);
+    tbSelectGroupName->setVisible(visible);
+}
+
 void CreateAnnotationFullWidget::setLocationVisible(bool visible) {
     gbLocation->setVisible(visible);
 
@@ -123,6 +130,10 @@ void CreateAnnotationFullWidget::setUsePatternNamesVisible(bool visible) {
     chbUsePatternNames->setVisible(visible);
 }
 
+void CreateAnnotationFullWidget::setAnnotationTableOptionVisible(bool visible) {
+    saveAnnotationsInnerWidget->setVisible(visible);
+}
+
 void CreateAnnotationFullWidget::setAnnotationNameEnabled(bool enable) {
     leAnnotationName->setEnabled(enable);
 }
@@ -199,10 +210,14 @@ void CreateAnnotationFullWidget::setLocation(const U2Location &location) {
     leRegionEnd->setText(endString);
     chbComplement->setChecked(location->strand.isCompementary());
     leLocation->setText(getGenbankLocationString(location));
+
+    if (location->isMultiRegion()) {
+        rbGenbankFormat->setChecked(true);
+    }
 }
 
-QString CreateAnnotationFullWidget::getNewTablePath() const {
-    return leNewTablePath->text();
+void CreateAnnotationFullWidget::setDescription(const QString &description) {
+    leDescription->setText(description);
 }
 
 QString CreateAnnotationFullWidget::getAnnotationTypeString() const {
@@ -299,7 +314,6 @@ void CreateAnnotationFullWidget::init() {
 
 void CreateAnnotationFullWidget::connectSignals() {
     connect(tbBrowseExistingTable, SIGNAL(clicked()), SLOT(sl_selectExistingTableRequest()));
-    connect(tbBrowseNewTable, SIGNAL(clicked()), SLOT(sl_selectNewTableRequest()));
     connect(leGroupName, SIGNAL(textEdited(const QString &)), SLOT(sl_groupNameEdited()));
     connect(leGroupName, SIGNAL(textChanged(const QString &)), SLOT(sl_groupNameEdited()));
     connect(leAnnotationName, SIGNAL(textEdited(const QString &)), SLOT(sl_annotationNameEdited()));
@@ -322,4 +336,9 @@ void CreateAnnotationFullWidget::countDescriptionUsage() const {
     }
 }
 
+void CreateAnnotationFullWidget::fillSaveDocumentControllerConfig(SaveDocumentControllerConfig &config) const {
+    config.fileNameEdit = leNewTablePath;
+    config.fileDialogButton = tbBrowseNewTable;
+}
+
 }   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.h b/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.h
index 8f52fab..a4f2521 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.h
@@ -23,16 +23,17 @@
 #define _U2_CREATE_ANNOTATION_FULL_WIDGET_H_
 
 #include "CreateAnnotationWidget.h"
-#include "ui/ui_CreateAnnotationFullWidget.h"
+#include "ui_CreateAnnotationFullWidget.h"
 
 namespace U2 {
 
-class CreateAnnotationFullWidget : public CreateAnnotationWidget, private Ui::CreateAnnotationFullWidget {
+class CreateAnnotationFullWidget : public CreateAnnotationWidget, private Ui_CreateAnnotationFullWidget {
     Q_OBJECT
 public:
     CreateAnnotationFullWidget(QWidget *parent = NULL);
     ~CreateAnnotationFullWidget();
 
+    void setGroupNameVisible(bool visible);
     void setLocationVisible(bool visible);
     void setAnnotationParametersVisible(bool visible);
     void setAnnotationTypeVisible(bool visible);
@@ -40,6 +41,7 @@ public:
     void setAutoTableOptionVisible(bool visible);
     void setDescriptionVisible(bool visible);
     void setUsePatternNamesVisible(bool visible);
+    void setAnnotationTableOptionVisible(bool visible);
 
     void setAnnotationNameEnabled(bool enable);
 
@@ -55,8 +57,8 @@ public:
     void setAnnotationType(U2FeatureType type);
     void setAnnotationName(const QString &name);
     void setLocation(const U2Location &location);
+    void setDescription(const QString &description);
 
-    QString getNewTablePath() const;
     QString getAnnotationTypeString() const;
     QString getGroupName() const;
     QString getAnnotationName() const;
@@ -79,6 +81,7 @@ public:
     GObjectComboBoxController * createGObjectComboBoxController(const GObjectComboBoxControllerConstraints &constraints);
 
     void countDescriptionUsage() const;
+    void fillSaveDocumentControllerConfig(SaveDocumentControllerConfig &config) const;
 
 private slots:
     void sl_regionChanged();
diff --git a/src/corelibs/U2Gui/src/util/ui/CreateAnnotationFullWidget.ui b/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/CreateAnnotationFullWidget.ui
rename to src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.ui
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.cpp
index 4ab8f9d..42de605 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.cpp
@@ -24,6 +24,7 @@
 #include <U2Core/Counter.h>
 
 #include <U2Gui/GObjectComboBoxController.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/ShowHideSubgroupWidget.h>
 
 #include "CreateAnnotationNormalWidget.h"
@@ -43,6 +44,12 @@ CreateAnnotationNormalWidget::~CreateAnnotationNormalWidget() {
     countDescriptionUsage();
 }
 
+void CreateAnnotationNormalWidget::setGroupNameVisible(bool visible) {
+    lblGroupName->setVisible(visible);
+    leGroupName->setVisible(visible);
+    tbSelectGroupName->setVisible(visible);
+}
+
 void CreateAnnotationNormalWidget::setLocationVisible(bool visible) {
     lblLocation->setVisible(visible);
     leLocation->setVisible(visible);
@@ -76,6 +83,10 @@ void CreateAnnotationNormalWidget::setUsePatternNamesVisible(bool visible) {
     chbUsePatternNames->setVisible(visible);
 }
 
+void CreateAnnotationNormalWidget::setAnnotationTableOptionVisible(bool visible) {
+    saveAnnotationsInnerWidget->setVisible(visible);
+}
+
 void CreateAnnotationNormalWidget::setAnnotationNameEnabled(bool enable) {
     leAnnotationName->setEnabled(enable);
 }
@@ -128,8 +139,8 @@ void CreateAnnotationNormalWidget::setLocation(const U2Location &location) {
     leLocation->setText(getGenbankLocationString(location));
 }
 
-QString CreateAnnotationNormalWidget::getNewTablePath() const {
-    return leNewTablePath->text();
+void CreateAnnotationNormalWidget::setDescription(const QString &description) {
+    leDescription->setText(description);
 }
 
 QString CreateAnnotationNormalWidget::getAnnotationTypeString() const {
@@ -202,6 +213,11 @@ void CreateAnnotationNormalWidget::countDescriptionUsage() const {
     }
 }
 
+void CreateAnnotationNormalWidget::fillSaveDocumentControllerConfig(SaveDocumentControllerConfig &config) const {
+    config.fileNameEdit = leNewTablePath;
+    config.fileDialogButton = tbBrowseNewTable;
+}
+
 void CreateAnnotationNormalWidget::initLayout() {
     ShowHideSubgroupWidget *saveShowHideWidget = new ShowHideSubgroupWidget("save_params", tr("Save annotation(s) to"), saveAnnotationsInnerWidget, true);
     saveShowHideWidget->setPermanentlyOpen(true);
@@ -218,7 +234,6 @@ void CreateAnnotationNormalWidget::init() {
 
 void CreateAnnotationNormalWidget::connectSignals() {
     connect(tbBrowseExistingTable, SIGNAL(clicked()), SIGNAL(si_selectExistingTableRequest()));
-    connect(tbBrowseNewTable, SIGNAL(clicked()), SIGNAL(si_selectNewTableRequest()));
     connect(tbSelectGroupName, SIGNAL(clicked()), SIGNAL(si_selectGroupNameMenuRequest()));
     connect(tbDoComplement, SIGNAL(clicked()), SLOT(sl_complementLocation()));
     connect(leGroupName, SIGNAL(textEdited(const QString &)), SIGNAL(si_groupNameEdited()));
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.h b/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.h
index 6f9d026..8ddc579 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.h
@@ -23,18 +23,19 @@
 #define _U2_CREATE_ANNOTATION_NORMAL_WIDGET_H_
 
 #include "CreateAnnotationWidget.h"
-#include "ui/ui_CreateAnnotationNormalWidget.h"
+#include "ui_CreateAnnotationNormalWidget.h"
 
 namespace U2 {
 
 class ShowHideSubgroupWidget;
 
-class CreateAnnotationNormalWidget : public CreateAnnotationWidget, private Ui::CreateAnnotationNormalWidget {
+class CreateAnnotationNormalWidget : public CreateAnnotationWidget, private Ui_CreateAnnotationNormalWidget {
     Q_OBJECT
 public:
     CreateAnnotationNormalWidget(QWidget *parent = NULL);
     ~CreateAnnotationNormalWidget();
 
+    void setGroupNameVisible(bool visible);
     void setLocationVisible(bool visible);
     void setAnnotationParametersVisible(bool visible);
     void setAnnotationTypeVisible(bool visible);
@@ -42,6 +43,7 @@ public:
     void setAutoTableOptionVisible(bool visible);
     void setDescriptionVisible(bool visible);
     void setUsePatternNamesVisible(bool visible);
+    void setAnnotationTableOptionVisible(bool visible);
 
     void setAnnotationNameEnabled(bool enable);
 
@@ -57,8 +59,8 @@ public:
     void setAnnotationType(U2FeatureType type);
     void setAnnotationName(const QString &name);
     void setLocation(const U2Location &location);
+    void setDescription(const QString &description);
 
-    QString getNewTablePath() const;
     QString getAnnotationTypeString() const;
     QString getGroupName() const;
     QString getAnnotationName() const;
@@ -81,6 +83,7 @@ public:
     GObjectComboBoxController * createGObjectComboBoxController(const GObjectComboBoxControllerConstraints &constraints);
 
     void countDescriptionUsage() const;
+    void fillSaveDocumentControllerConfig(SaveDocumentControllerConfig &config) const;
 
 private:
     void initLayout();
diff --git a/src/corelibs/U2Gui/src/util/ui/CreateAnnotationNormalWidget.ui b/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/CreateAnnotationNormalWidget.ui
rename to src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.ui
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.cpp
index 62e641a..50f88c9 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.cpp
@@ -24,6 +24,7 @@
 #include <U2Core/Counter.h>
 
 #include <U2Gui/GObjectComboBoxController.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/ShowHideSubgroupWidget.h>
 
 #include "CreateAnnotationOptionsPanelWidget.h"
@@ -39,6 +40,12 @@ CreateAnnotationOptionsPanelWidget::CreateAnnotationOptionsPanelWidget(QWidget *
     connectSignals();
 }
 
+void CreateAnnotationOptionsPanelWidget::setGroupNameVisible(bool visible) {
+    lblGroupName->setVisible(visible);
+    leGroupName->setVisible(visible);
+    tbSelectGroupName->setVisible(visible);
+}
+
 void CreateAnnotationOptionsPanelWidget::setLocationVisible(bool visible) {
     lblLocation->setVisible(visible);
     leLocation->setVisible(visible);
@@ -72,6 +79,10 @@ void CreateAnnotationOptionsPanelWidget::setUsePatternNamesVisible(bool visible)
     chbUsePatternNames->setVisible(visible);
 }
 
+void CreateAnnotationOptionsPanelWidget::setAnnotationTableOptionVisible(bool visible) {
+    annotationParametersWidget->setVisible(visible);
+}
+
 void CreateAnnotationOptionsPanelWidget::setAnnotationNameEnabled(bool enable) {
     leAnnotationName->setEnabled(enable);
 }
@@ -124,8 +135,8 @@ void CreateAnnotationOptionsPanelWidget::setLocation(const U2Location &location)
     leLocation->setText(getGenbankLocationString(location));
 }
 
-QString CreateAnnotationOptionsPanelWidget::getNewTablePath() const {
-    return leNewTablePath->text();
+void CreateAnnotationOptionsPanelWidget::setDescription(const QString &description) {
+    leDescription->setText(description);
 }
 
 QString CreateAnnotationOptionsPanelWidget::getAnnotationTypeString() const {
@@ -198,6 +209,11 @@ void CreateAnnotationOptionsPanelWidget::countDescriptionUsage() const {
     }
 }
 
+void CreateAnnotationOptionsPanelWidget::fillSaveDocumentControllerConfig(SaveDocumentControllerConfig &config) const {
+    config.fileNameEdit = leNewTablePath;
+    config.fileDialogButton = tbBrowseNewTable;
+}
+
 void CreateAnnotationOptionsPanelWidget::initLayout() {
     ShowHideSubgroupWidget *saveShowHideWidget = new ShowHideSubgroupWidget("save_params", tr("Save annotation(s) to"), saveAnnotationsInnerWidget, false);
     mainLayout->insertWidget(0, saveShowHideWidget);
@@ -212,7 +228,6 @@ void CreateAnnotationOptionsPanelWidget::init() {
 
 void CreateAnnotationOptionsPanelWidget::connectSignals() {
     connect(tbBrowseExistingTable, SIGNAL(clicked()), SIGNAL(si_selectExistingTableRequest()));
-    connect(tbBrowseNewTable, SIGNAL(clicked()), SIGNAL(si_selectNewTableRequest()));
     connect(tbSelectGroupName, SIGNAL(clicked()), SIGNAL(si_selectGroupNameMenuRequest()));
     connect(tbDoComplement, SIGNAL(clicked()), SLOT(sl_complementLocation()));
     connect(leGroupName, SIGNAL(textEdited(const QString &)), SIGNAL(si_groupNameEdited()));
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.h b/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.h
index 17a9e74..d5f3d77 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.h
@@ -23,17 +23,18 @@
 #define _U2_CREATE_ANNOTATION_OPTIONS_PANEL_WIDGET_H_
 
 #include "CreateAnnotationWidget.h"
-#include "ui/ui_CreateAnnotationOptionsPanelWidget.h"
+#include "ui_CreateAnnotationOptionsPanelWidget.h"
 
 namespace U2 {
 
 class ShowHideSubgroupWidget;
 
-class CreateAnnotationOptionsPanelWidget : public CreateAnnotationWidget, private Ui::CreateAnnotationOptionsPanelWidget {
+class CreateAnnotationOptionsPanelWidget : public CreateAnnotationWidget, private Ui_CreateAnnotationOptionsPanelWidget {
     Q_OBJECT
 public:
     CreateAnnotationOptionsPanelWidget(QWidget *parent = NULL);
 
+    void setGroupNameVisible(bool visible);
     void setLocationVisible(bool visible);
     void setAnnotationParametersVisible(bool visible);
     void setAnnotationTypeVisible(bool visible);
@@ -41,6 +42,7 @@ public:
     void setAutoTableOptionVisible(bool visible);
     void setDescriptionVisible(bool visible);
     void setUsePatternNamesVisible(bool visible);
+    void setAnnotationTableOptionVisible(bool visible);
 
     void setAnnotationNameEnabled(bool enable);
 
@@ -56,8 +58,8 @@ public:
     void setAnnotationType(U2FeatureType type);
     void setAnnotationName(const QString &name);
     void setLocation(const U2Location &location);
+    void setDescription(const QString &description);
 
-    QString getNewTablePath() const;
     QString getAnnotationTypeString() const;
     QString getGroupName() const;
     QString getAnnotationName() const;
@@ -80,6 +82,7 @@ public:
     GObjectComboBoxController * createGObjectComboBoxController(const GObjectComboBoxControllerConstraints &constraints);
 
     void countDescriptionUsage() const;
+    void fillSaveDocumentControllerConfig(SaveDocumentControllerConfig &config) const;
 
 private:
     void initLayout();
diff --git a/src/corelibs/U2Gui/src/util/ui/CreateAnnotationOptionsPanelWidget.ui b/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/CreateAnnotationOptionsPanelWidget.ui
rename to src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.ui
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.cpp
index 412d0ab..97edb34 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.cpp
@@ -46,10 +46,6 @@ void CreateAnnotationWidget::sl_selectExistingTableRequest() {
     emit si_selectExistingTableRequest();
 }
 
-void CreateAnnotationWidget::sl_selectNewTableRequest() {
-    emit si_selectNewTableRequest();
-}
-
 void CreateAnnotationWidget::sl_selectGroupNameMenuRequest() {
     emit si_selectGroupNameMenuRequest();
 }
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.h b/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.h
index fe52ed9..921c49b 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.h
@@ -27,13 +27,14 @@
 #include <U2Gui/ShowHideSubgroupWidget.h>
 
 #include "CreateAnnotationWidgetController.h"
-#include "ui/ui_CreateAnnotationFullWidget.h"
-#include "ui/ui_CreateAnnotationNormalWidget.h"
-#include "ui/ui_CreateAnnotationOptionsPanelWidget.h"
+#include "ui_CreateAnnotationFullWidget.h"
+#include "ui_CreateAnnotationNormalWidget.h"
+#include "ui_CreateAnnotationOptionsPanelWidget.h"
 
 namespace U2 {
 
 class GObjectComboBoxControllerConstraints;
+class SaveDocumentControllerConfig;
 class ShowHideSubgroupWidget;
 
 class CreateAnnotationWidget : public QWidget {
@@ -42,6 +43,7 @@ class CreateAnnotationWidget : public QWidget {
 public:
     CreateAnnotationWidget(QWidget *parent = NULL);
 
+    virtual void setGroupNameVisible(bool visible) = 0;
     virtual void setLocationVisible(bool visible) = 0;
     virtual void setAnnotationParametersVisible(bool visible) = 0;
     virtual void setAnnotationTypeVisible(bool visible) = 0;
@@ -49,6 +51,7 @@ public:
     virtual void setAutoTableOptionVisible(bool visible) = 0;
     virtual void setDescriptionVisible(bool visible) = 0;
     virtual void setUsePatternNamesVisible(bool visible) = 0;
+    virtual void setAnnotationTableOptionVisible(bool visible) = 0;
 
     virtual void setAnnotationNameEnabled(bool enable) = 0;
 
@@ -64,8 +67,8 @@ public:
     virtual void setAnnotationType(U2FeatureType featureType) = 0;
     virtual void setAnnotationName(const QString &name) = 0;
     virtual void setLocation(const U2Location &location) = 0;
+    virtual void setDescription(const QString &description) = 0;
 
-    virtual QString getNewTablePath() const = 0;
     virtual QString getAnnotationTypeString() const = 0;
     virtual QString getGroupName() const = 0;
     virtual QString getAnnotationName() const = 0;
@@ -89,10 +92,10 @@ public:
     virtual GObjectComboBoxController * createGObjectComboBoxController(const GObjectComboBoxControllerConstraints &constraints) = 0;
 
     virtual void countDescriptionUsage() const = 0;
+    virtual void fillSaveDocumentControllerConfig(SaveDocumentControllerConfig &config) const = 0;
 
 signals:
     void si_selectExistingTableRequest();
-    void si_selectNewTableRequest();
     void si_selectGroupNameMenuRequest();
     void si_groupNameEdited();
     void si_annotationNameEdited();
@@ -100,7 +103,6 @@ signals:
 
 protected slots:
     void sl_selectExistingTableRequest();
-    void sl_selectNewTableRequest();
     void sl_selectGroupNameMenuRequest();
     void sl_groupNameEdited();
     void sl_annotationNameEdited();
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.cpp
index 0471539..c4f21e7 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.cpp
@@ -58,6 +58,7 @@
 #include <U2Gui/MainWindow.h>
 #include <U2Gui/ProjectTreeController.h>
 #include <U2Gui/ProjectTreeItemSelectorDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/ShowHideSubgroupWidget.h>
 
 #include "CreateAnnotationFullWidget.h"
@@ -66,23 +67,22 @@
 #include "CreateAnnotationWidgetController.h"
 #include "GObjectComboBoxController.h"
 
-#define SETTINGS_LASTDIR "create_annotation/last_dir"
-
 namespace U2 {
-/* TRANSLATOR U2::CreateAnnotationWidgetController */
 
 CreateAnnotationModel::CreateAnnotationModel()
     : defaultIsNewDoc(false),
-    hideLocation(false),
-    hideAnnotationType(false),
-    hideAnnotationName(false),
-    hideDescription(false),
-    hideUsePatternNames(true),
-    useUnloadedObjects(false),
-    useAminoAnnotationTypes(false),
-    data(new AnnotationData),
-    hideAutoAnnotationsOption(true),
-    hideAnnotationParameters(false)
+      hideGroupName(false),
+      hideLocation(false),
+      hideAnnotationType(false),
+      hideAnnotationName(false),
+      hideDescription(false),
+      hideUsePatternNames(true),
+      useUnloadedObjects(false),
+      useAminoAnnotationTypes(false),
+      data(new AnnotationData),
+      hideAnnotationTableOption(false),
+      hideAutoAnnotationsOption(true),
+      hideAnnotationParameters(false)
 {
 
 }
@@ -96,12 +96,14 @@ AnnotationTableObject * CreateAnnotationModel::getAnnotationObject() const {
 
 const QString CreateAnnotationWidgetController::GROUP_NAME_AUTO = QObject::tr("<auto>");
 const QString CreateAnnotationWidgetController::DESCRIPTION_QUALIFIER_KEY = "note";
+const QString CreateAnnotationWidgetController::SETTINGS_LASTDIR = "create_annotation/last_dir";
 
 CreateAnnotationWidgetController::CreateAnnotationWidgetController(const CreateAnnotationModel& m,
                                                                    QObject* p,
                                                                    AnnotationWidgetMode layoutMode) :
     QObject(p),
-    model(m)
+    model(m),
+    saveController(NULL)
 {
     this->setObjectName("CreateAnnotationWidgetController");
     assert(AppContext::getProject()!=NULL);
@@ -120,7 +122,6 @@ CreateAnnotationWidgetController::CreateAnnotationWidgetController(const CreateA
 
     commonWidgetUpdate(model);
 
-    connect(w, SIGNAL(si_selectNewTableRequest()), SLOT(sl_onNewDocClicked()));
     connect(w, SIGNAL(si_selectExistingTableRequest()), SLOT(sl_onLoadObjectsClicked()));
     connect(w, SIGNAL(si_selectGroupNameMenuRequest()), SLOT(sl_groupName()));
     connect(w, SIGNAL(si_groupNameEdited()), SLOT(sl_groupNameEdited()));
@@ -154,36 +155,17 @@ void CreateAnnotationWidgetController::commonWidgetUpdate(const CreateAnnotation
     w->setLocationVisible(!model.hideLocation);
     w->setAnnotationNameVisible(!model.hideAnnotationName);
 
-    QString dir = AppContext::getSettings()->getValue(SETTINGS_LASTDIR, QString(""), true).toString();
-    if (dir.isEmpty() || !QDir(dir).exists()) {
-        dir = QDir::homePath();
-        Project* prj = AppContext::getProject();
-        if (prj != NULL) {
-            const QString& prjUrl = prj->getProjectURL();
-            if (!prjUrl.isEmpty()) {
-                QFileInfo fi(prjUrl);
-                const QDir& prjDir = fi.absoluteDir();
-                dir = prjDir.absolutePath();
-            }
-        }
-    }
-    dir += "/";
-    QString baseName = "MyDocument";
-    QString ext = ".gb";
-    QString url = dir + baseName + ext;
-    for (int i=1; QFileInfo(url).exists() || AppContext::getProject()->findDocumentByURL(url)!= NULL; i++) {
-        url = dir + baseName +"_"+QString::number(i) + ext;
-    }
-    w->setNewTablePath(url);
+    initSaveController();
 
     if (model.annotationObjectRef.isValid()) {
         occ->setSelectedObject(model.annotationObjectRef);
-    } 
+    }
 
     //default field values
 
     w->setAnnotationName(model.data->name);
     w->setGroupName(model.groupName.isEmpty() ? GROUP_NAME_AUTO : model.groupName);
+    w->setDescription(model.description);
 
     if (!model.data->location->isEmpty()) {
         w->setLocation(model.data->location);
@@ -197,11 +179,13 @@ void CreateAnnotationWidgetController::commonWidgetUpdate(const CreateAnnotation
         w->setExistingTableOptionEnable(true);
     }
 
+    w->setAnnotationTableOptionVisible(!model.hideAnnotationTableOption);
     w->setAutoTableOptionVisible(!model.hideAutoAnnotationsOption);
     if (!model.hideAutoAnnotationsOption) {
         w->selectAutoTableOption();
     }
 
+    w->setGroupNameVisible(!model.hideGroupName);
     w->setDescriptionVisible(!model.hideDescription);
     w->setAnnotationTypeVisible(!model.hideAnnotationType);
     w->setAnnotationParametersVisible(!model.hideAnnotationParameters);
@@ -213,15 +197,6 @@ void CreateAnnotationWidgetController::commonWidgetUpdate(const CreateAnnotation
     }
 }
 
-void CreateAnnotationWidgetController::sl_onNewDocClicked() {
-    QString openUrl = QFileInfo(w->getNewTablePath()).absoluteDir().absolutePath();
-    QString filter = DialogUtils::prepareDocumentsFileFilter(BaseDocumentFormats::PLAIN_GENBANK, false);
-    QString name = U2FileDialog::getSaveFileName(NULL, tr("Save file"), openUrl, filter);
-    if (!name.isEmpty()) {
-        w->setNewTablePath(name);
-        AppContext::getSettings()->setValue(SETTINGS_LASTDIR, QFileInfo(name).absoluteDir().absolutePath(), true);
-    }
-}
 class PTCAnnotationObjectFilter: public PTCObjectRelationFilter {
 public:
     PTCAnnotationObjectFilter(const GObjectRelation& _rel, bool _allowUnloaded, QObject* p = NULL)
@@ -266,14 +241,14 @@ QString CreateAnnotationWidgetController::validate() {
         if (AppContext::getProject()->findDocumentByURL(model.newDocUrl)!=NULL) {
             return tr("Document is already added to the project: '%1'").arg(model.newDocUrl);
         }
-        QString dirUrl = QFileInfo(w->getNewTablePath()).absoluteDir().absolutePath();
+        QString dirUrl = QFileInfo(saveController->getSaveFileName()).absoluteDir().absolutePath();
         QDir dir(dirUrl);
         if (!dir.exists()) {
             return tr("Illegal folder: %1").arg(dirUrl);
         }
     }
 
-    if (!w->isUsePatternNamesChecked() && !model.hideAnnotationName && model.data->name.isEmpty()) {
+    if (!w->isUsePatternNamesChecked() && !model.hideAnnotationName && !Annotation::isValidAnnotationName(model.data->name)) {
         return tr("Illegal annotation name");
     }
 
@@ -281,9 +256,9 @@ QString CreateAnnotationWidgetController::validate() {
         w->focusGroupName();
         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;
@@ -313,7 +288,7 @@ void CreateAnnotationWidgetController::updateModel(bool forValidation) {
     }
 
     model.data->location->reset();
-    
+
     if (!model.hideLocation) {
         QByteArray locEditText = w->getLocationString().toLatin1();
         Genbank::LocationParser::parseLocation(locEditText.constData(),
@@ -332,7 +307,7 @@ void CreateAnnotationWidgetController::updateModel(bool forValidation) {
         if (!forValidation){
             model.annotationObjectRef = GObjectReference();
         }
-        model.newDocUrl = w->getNewTablePath();
+        model.newDocUrl = saveController->getSaveFileName();
     }
 }
 
@@ -353,6 +328,40 @@ void CreateAnnotationWidgetController::createWidget(CreateAnnotationWidgetContro
     }
 }
 
+QString CreateAnnotationWidgetController::defaultDir() {
+    QString dir = AppContext::getSettings()->getValue(SETTINGS_LASTDIR, QString(""), true).toString();
+    if (dir.isEmpty() || !QDir(dir).exists()) {
+        dir = QDir::homePath();
+        Project* prj = AppContext::getProject();
+        if (prj != NULL) {
+            const QString& prjUrl = prj->getProjectURL();
+            if (!prjUrl.isEmpty()) {
+                QFileInfo fi(prjUrl);
+                const QDir& prjDir = fi.absoluteDir();
+                dir = prjDir.absolutePath();
+            }
+        }
+    }
+    return dir;
+}
+
+void CreateAnnotationWidgetController::initSaveController() {
+    SaveDocumentControllerConfig conf;
+    conf.defaultFormatId = BaseDocumentFormats::PLAIN_GENBANK;
+    conf.defaultDomain = SETTINGS_LASTDIR;
+    conf.defaultFileName = defaultDir() + "/MyDocument.gb";
+    conf.parentWidget = w;
+    conf.saveTitle = tr("Save File");
+    conf.rollOutProjectUrls = true;
+    w->fillSaveDocumentControllerConfig(conf);
+
+    QList<DocumentFormatId> formats;
+    formats << BaseDocumentFormats::PLAIN_GENBANK;
+
+    delete saveController;
+    saveController = new SaveDocumentController(conf, formats, this);
+}
+
 bool CreateAnnotationWidgetController::prepareAnnotationObject() {
     updateModel(false);
     QString v = validate();
@@ -379,7 +388,7 @@ bool CreateAnnotationWidgetController::prepareAnnotationObject() {
 
 void CreateAnnotationWidgetController::sl_groupName() {
     GObject* obj = occ->getSelectedObject();
-    QStringList groupNames; 
+    QStringList groupNames;
     groupNames << GROUP_NAME_AUTO;
     if (NULL != obj && !obj->isUnloaded()) {
         AnnotationTableObject* ao = qobject_cast<AnnotationTableObject *>(obj);
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.h b/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.h
index 4a34272..b7306dc 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.h
@@ -38,6 +38,7 @@ namespace U2 {
 class AnnotationTableObject;
 class CreateAnnotationWidget;
 class GObjectComboBoxController;
+class SaveDocumentController;
 class ShowHideSubgroupWidget;
 
 class U2GUI_EXPORT CreateAnnotationModel {
@@ -47,6 +48,7 @@ public:
     GObjectReference        sequenceObjectRef;  // this object is selected by default
     bool                    defaultIsNewDoc;    //new doc field is selected by default
 
+    bool                    hideGroupName;      // hides annotation group name field
     bool                    hideLocation;       // hides location field and does not check it in validate()
     bool                    hideAnnotationType; // hides annotation type field
     bool                    hideAnnotationName; // hides annotation name field
@@ -63,6 +65,7 @@ public:
     QString                 newDocUrl;        // the URL of new document with annotation table to be created
     qint64                  sequenceLen;        //length of target sequence for validation purposes
 
+    bool                    hideAnnotationTableOption;  // hides all options of annotation table object location
     bool                    hideAutoAnnotationsOption; // show automated highlighting for new annotation if possible
     bool                    hideAnnotationParameters;   // hides annotation parameters groupbox
 
@@ -77,16 +80,16 @@ public:
         Normal,
         OptionsPanel
     };
-    
+
     // useCompact defines the layout of the widget (normal or compact for the Options Panel)
     CreateAnnotationWidgetController(const CreateAnnotationModel& m, QObject* p, AnnotationWidgetMode layoutMode = Normal);
-    
+
     // returns error message or empty string if no error found;
     // does not create any new objects
-    QString validate(); 
+    QString validate();
 
     // Ensures that annotationObeject is valid
-    // for a validated model creates new document (newDocUrl), adds annotation table object 
+    // for a validated model creates new document (newDocUrl), adds annotation table object
     // to the document created and stores the reference to the object to annotationObject
     // Does nothing if annotationObject is not NULL
     // returns true if annotation object is prepared
@@ -122,7 +125,6 @@ signals:
     void si_usePatternNamesStateChanged();
 
 private slots:
-    void sl_onNewDocClicked();
     void sl_onLoadObjectsClicked();
     void sl_groupName();
     void sl_setPredefinedGroupName();
@@ -137,13 +139,17 @@ private slots:
 private:
     void updateModel(bool forValidation);
     void createWidget(AnnotationWidgetMode layoutMode);
+    static QString defaultDir();
+    void initSaveController();
 
     CreateAnnotationModel       model;
     GObjectComboBoxController * occ;
     CreateAnnotationWidget *    w;
+    SaveDocumentController *    saveController;
     
     static const QString GROUP_NAME_AUTO;
     static const QString DESCRIPTION_QUALIFIER_KEY;
+    static const QString SETTINGS_LASTDIR;
 };
 
 } // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ui/CreateDocumentFromTextDialog.ui b/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/CreateDocumentFromTextDialog.ui
rename to src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp b/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp
index 581fb64..d7f5aea 100644
--- a/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <QFileInfo>
 #include <QMessageBox>
 #include <QPushButton>
 
@@ -34,65 +35,55 @@
 #include <U2Formats/GenbankPlainTextFormat.h>
 
 #include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/MainWindow.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "CreateDocumentFromTextDialogController.h"
 #include "CreateSequenceFromTextAndOpenViewTask.h"
-#include "ui/ui_CreateDocumentFromTextDialog.h"
+#include "ui_CreateDocumentFromTextDialog.h"
 
 namespace U2{
 
-CreateDocumentFromTextDialogController::CreateDocumentFromTextDialogController(QWidget* p): QDialog(p) {
+CreateDocumentFromTextDialogController::CreateDocumentFromTextDialogController(QWidget* p)
+    : QDialog(p),
+      saveController(NULL) {
     ui = new Ui_CreateDocumentFromTextDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467502");
+    new HelpButton(this, ui->buttonBox, "17470429");
 
-    //TODO: use format name here 
-    ui->formatBox->addItem("FASTA", BaseDocumentFormats::FASTA);
-    ui->formatBox->addItem("Genbank", BaseDocumentFormats::PLAIN_GENBANK);
+    initSaveController();
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    connect(ui->browseButton, SIGNAL(clicked()), SLOT(sl_browseButtonClicked()));
-    connect(ui->formatBox, SIGNAL(currentIndexChanged(int)), this, SLOT(sl_indexChanged(int)));
-    connect(ui->filepathEdit, SIGNAL(textChanged ( const QString &)), this, SLOT(sl_filepathTextChanged(const QString &)));
+    connect(ui->filepathEdit, SIGNAL(textChanged(QString)), SLOT(sl_filepathTextChanged()));
     ui->nameEdit->setText("Sequence");
 
-    sl_indexChanged(0);
-
     addSeqPasterWidget();
 }
 
-void CreateDocumentFromTextDialogController::sl_browseButtonClicked(){
-    LastUsedDirHelper h;
-    h.url = U2FileDialog::getSaveFileName(this, tr("Select file to save..."), h.dir, filter);
-    ui->filepathEdit->setText(QDir::toNativeSeparators(h.url));
-    sl_indexChanged(ui->formatBox->currentIndex());   
-}
-
-void CreateDocumentFromTextDialogController::accept(){
+void CreateDocumentFromTextDialogController::accept() {
     QString validationError = w->validate();
     if(!validationError.isEmpty()){
         QMessageBox::critical(this, this->windowTitle(), validationError);
         return;
     }
-    QFileInfo fi(ui->filepathEdit->text());
+
+    const QString url = saveController->getSaveFileName();
+    QFileInfo fi(url);
 
     if(fi.baseName().isEmpty()){
         QMessageBox::critical(this, this->windowTitle(), tr("Filename is empty"));
         return;
     }
 
-    if(ui->filepathEdit->text().isEmpty()){
+    if(url.isEmpty()){
         QMessageBox::critical(this, this->windowTitle(), tr("No path specified"));
         return;
     }
 
     U2OpStatus2Log os;
-    QString fullPath = GUrlUtils::prepareFileLocation(ui->filepathEdit->text(), os);
+    QString fullPath = GUrlUtils::prepareFileLocation(url, os);
 
     if (fullPath.isEmpty()) {
         QMessageBox::critical(this, L10N::errorTitle(), os.getError());
@@ -105,18 +96,12 @@ void CreateDocumentFromTextDialogController::accept(){
     }    
 
     CHECK_OP(os, );
-    GUrl url(fullPath);
 
-    Task *task = new CreateSequenceFromTextAndOpenViewTask(prepareSequences(), ui->formatBox->currentData().toString(), url, ui->saveImmediatelyBox->isChecked());
+    Task *task = new CreateSequenceFromTextAndOpenViewTask(prepareSequences(), saveController->getFormatIdToSave(), GUrl(fullPath), ui->saveImmediatelyBox->isChecked());
     AppContext::getTaskScheduler()->registerTopLevelTask(task);
     QDialog::accept();
 }
 
-void CreateDocumentFromTextDialogController::reject(){
-    QDialog::reject();
-    this->close();
-}
-
 void CreateDocumentFromTextDialogController::addSeqPasterWidget(){
     w = new SeqPasterWidgetController(this);
     w->allowFastaFormat(true);
@@ -133,34 +118,30 @@ QList<DNASequence> CreateDocumentFromTextDialogController::prepareSequences() co
     return sequences;
 }
 
-void CreateDocumentFromTextDialogController::sl_indexChanged( int index ){
-    DocumentFormatId currentId = (ui->formatBox->itemData(index)).toString();
-    filter = DialogUtils::prepareDocumentsFileFilter(currentId, false);
-    DocumentFormat *df = AppContext::getDocumentFormatRegistry()->getFormatById(currentId);
-    QString newExt = df->getSupportedDocumentFileExtensions().first();
-    QString filepath = ui->filepathEdit->text();
-    if (filepath.isEmpty()){
-        return;
-    }
-    QFileInfo fi(filepath);
-    QString abspath = fi.absoluteDir().absolutePath();
-    if(abspath.at(abspath.size()-1) == QChar('/')){
-        ui->filepathEdit->setText(abspath + fi.baseName() + "." + newExt);
-    }else{
-        ui->filepathEdit->setText(abspath + "/" + fi.baseName() + "." + newExt);
-    }
+void CreateDocumentFromTextDialogController::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::FASTA;
+    config.fileDialogButton = ui->browseButton;
+    config.fileNameEdit = ui->filepathEdit;
+    config.formatCombo = ui->formatBox;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file to save...");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::FASTA
+                                                                      << BaseDocumentFormats::PLAIN_GENBANK;
+
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
-CreateDocumentFromTextDialogController::~CreateDocumentFromTextDialogController()
-{
+CreateDocumentFromTextDialogController::~CreateDocumentFromTextDialogController() {
     delete ui;
 }
 
-void CreateDocumentFromTextDialogController::sl_filepathTextChanged( const QString &text ){
-    QFileInfo newFile(text);
-    if(ui->nameEdit->text() != newFile.baseName()){
+void CreateDocumentFromTextDialogController::sl_filepathTextChanged() {
+    QFileInfo newFile(saveController->getSaveFileName());
+    if (ui->nameEdit->text() != newFile.baseName()) {
         newFile.baseName().isEmpty() ? ui->nameEdit->setText("Sequence") : ui->nameEdit->setText(newFile.baseName());
     }
 }
 
-}//ns
+}   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.h b/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.h
index b3663b9..0dbd2e2 100644
--- a/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.h
+++ b/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.h
@@ -22,15 +22,12 @@
 #ifndef _U2_CREATE_DOCUMENT_FROM_TEXT_DIALOG_CONTROLLER_H_
 #define _U2_CREATE_DOCUMENT_FROM_TEXT_DIALOG_CONTROLLER_H_
 
-#include <U2Core/global.h>
+#include <QDialog>
+
 #include <U2Core/DocumentModel.h>
-#include <U2Gui/DialogUtils.h>
+#include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <U2Gui/DialogUtils.h>
 
 #include "SeqPasterWidgetController.h"
 
@@ -38,25 +35,26 @@ class Ui_CreateDocumentFromTextDialog;
 
 namespace U2 {
 
+class SaveDocumentController;
+
 class U2GUI_EXPORT CreateDocumentFromTextDialogController : public QDialog {
     Q_OBJECT
 public:
     CreateDocumentFromTextDialogController(QWidget* p = NULL);
     ~CreateDocumentFromTextDialogController();
 
-    virtual void accept();
-    virtual void reject();
+    void accept();
 
 private slots:
-    void sl_browseButtonClicked();
-    void sl_indexChanged(int index);
-    void sl_filepathTextChanged(const QString &text);
+    void sl_filepathTextChanged();
     
 private:
     void addSeqPasterWidget();
     QList<DNASequence> prepareSequences() const;
+    void initSaveController();
     
     SeqPasterWidgetController *w;
+    SaveDocumentController *saveController;
     QString filter;
     Ui_CreateDocumentFromTextDialog* ui;
 };
diff --git a/src/corelibs/U2Gui/src/util/ui/CreateObjectRelationDialog.ui b/src/corelibs/U2Gui/src/util/CreateObjectRelationDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/CreateObjectRelationDialog.ui
rename to src/corelibs/U2Gui/src/util/CreateObjectRelationDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.cpp b/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.cpp
index 3efaa25..8909f3c 100644
--- a/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.cpp
@@ -20,7 +20,7 @@
  */
 
 #include "CreateObjectRelationDialogController.h"
-#include <ui/ui_CreateObjectRelationDialog.h>
+#include <ui_CreateObjectRelationDialog.h>
 
 #include <U2Core/AnnotationTableObjectConstraints.h>
 #include <U2Core/DNASequenceObject.h>
@@ -36,6 +36,7 @@
 #endif
 
 #include <U2Gui/HelpButton.h>
+#include <QPushButton>
 
 namespace U2 {
 
@@ -48,7 +49,8 @@ CreateObjectRelationDialogController::CreateObjectRelationDialogController(GObje
     ui = new Ui_CreateObjectRelationDialog;
 
     ui->setupUi(this);
-
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     QIcon objectIcon(":/core/images/gobject.png");
     foreach(GObject* obj, objects) {
         ui->listWidget->addItem(new QListWidgetItem(objectIcon, obj->getGObjectName()));
diff --git a/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.h b/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.h
index 1812960..a93afb3 100644
--- a/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.h
+++ b/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.h
@@ -47,7 +47,7 @@ private:
     const QList<DNASequence> sequences;
     DocumentFormat *format;
     const GUrl saveToPath;
-    bool saveImmediately;
+    const bool saveImmediately;
     Task *openProjectTask;
     QList<Task *> importTasks;
     int importedSequences;
diff --git a/src/corelibs/U2Gui/src/util/DialogUtils.cpp b/src/corelibs/U2Gui/src/util/DialogUtils.cpp
index 22a3164..add01d7 100644
--- a/src/corelibs/U2Gui/src/util/DialogUtils.cpp
+++ b/src/corelibs/U2Gui/src/util/DialogUtils.cpp
@@ -62,18 +62,6 @@ QString DialogUtils::prepareDocumentsFileFilterByObjType(const GObjectType& t, b
     return FormatUtils::prepareDocumentsFileFilterByObjType(t, any);
 }
 
-QPair<QString, QString> DialogUtils::selectFileForScreenShot(QWidget * parent) {
-    QMap<QString, QString> filters;
-    filters[ "PNG - Portable Network Graphics (*.png)" ] = "png";
-    filters[ "JPG/JPEG format (*.jpg)" ] = "jpg";
-    filters[ "TIF - Tagged Image File format (*.tiff)" ] = "tiff";
-
-    LastUsedDirHelper lod("image");
-    QString selectedFilter;
-    lod.url = U2FileDialog::getSaveFileName(parent, tr("Export alignment image"), lod.dir, QStringList(filters.keys()).join(";;"), &selectedFilter);
-    return QPair<QString, QString>(lod.url, filters.value(selectedFilter));
-}
-
 void DialogUtils::setWizardMinimumSize(QWizard *wizard) {
     QSize bestSize;
     foreach (int pageId, wizard->pageIds()) {
@@ -93,7 +81,7 @@ void FileLineEdit::sl_onBrowse() {
 
     QFileDialog::Options options = 0;
 #if defined(Q_OS_MAC) || (QT_VERSION >= 0x050000)
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         options |= QFileDialog::DontUseNativeDialog;
     }
 #endif
diff --git a/src/corelibs/U2Gui/src/util/DialogUtils.h b/src/corelibs/U2Gui/src/util/DialogUtils.h
index 0a53869..7bde0be 100644
--- a/src/corelibs/U2Gui/src/util/DialogUtils.h
+++ b/src/corelibs/U2Gui/src/util/DialogUtils.h
@@ -51,8 +51,6 @@ public:
 
     static QString prepareDocumentsFileFilterByObjType(const GObjectType& t, bool any);
 
-    static QPair<QString, QString> selectFileForScreenShot(QWidget * parent);
-
     static void setWizardMinimumSize(QWizard *wizard);
 };
 
diff --git a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp
index b8c6ff3..c27508f 100644
--- a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp
@@ -42,12 +42,13 @@
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/HelpButton.h>
+#include <QPushButton>
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "DownloadRemoteFileDialog.h"
 #include "OpenViewTask.h"
-#include "ui/ui_DownloadRemoteFileDialog.h"
+#include "ui_DownloadRemoteFileDialog.h"
 
 static const QString SAVE_DIR("downloadremotefiledialog/savedir");
 static const QString HINT_STYLE_SHEET = "color:green; font:bold";
@@ -59,7 +60,9 @@ QString DownloadRemoteFileDialog::defaultDB("");
 DownloadRemoteFileDialog::DownloadRemoteFileDialog(QWidget *p):QDialog(p), isQueryDB(false) {
     ui = new Ui_DownloadRemoteFileDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467516");
+    new HelpButton(this, ui->buttonBox, "17470443");
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     ui->formatBox->hide();
     ui->formatLabel->hide();
@@ -94,7 +97,7 @@ DownloadRemoteFileDialog::DownloadRemoteFileDialog( const QString& id, const QSt
 {
     ui = new Ui_DownloadRemoteFileDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467529");
+    new HelpButton(this, ui->buttonBox, "17470456");
 
     ui->formatBox->addItem(GENBANK_FORMAT);
     ui->formatBox->addItem(FASTA_FORMAT);
@@ -194,8 +197,10 @@ void DownloadRemoteFileDialog::accept()
     QVariantMap hints;
     hints.insert(FORCE_DOWNLOAD_SEQUENCE_HINT, ui->chbForceDownloadSequence->isVisible() && ui->chbForceDownloadSequence->isChecked());
 
+    int taskCount = 0;
     foreach (const QString &resId, resIds) {
-        tasks.append(new LoadRemoteDocumentAndOpenViewTask(resId, dbId, fullPath, fileFormat, hints));
+        tasks.append(new LoadRemoteDocumentAndAddToProjectTask(resId, dbId, fullPath, fileFormat, hints, taskCount < OpenViewTask::MAX_DOC_NUMBER_TO_OPEN_VIEWS));
+        taskCount++;
     }
 
     AppContext::getTaskScheduler()->registerTopLevelTask(new MultiTask(tr("Download remote documents"), tasks));
diff --git a/src/corelibs/U2Gui/src/util/ui/DownloadRemoteFileDialog.ui b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/DownloadRemoteFileDialog.ui
rename to src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp b/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp
index 8ae2077..3f2a5be 100644
--- a/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp
@@ -31,7 +31,7 @@
 #include <U2Gui/HelpButton.h>
 #include <QPushButton>
 
-#include <ui/ui_EditQualifierDialog.h>
+#include <ui_EditQualifierDialog.h>
 #include "EditQualifierDialog.h"
 
 namespace U2 {
@@ -41,7 +41,7 @@ EditQualifierDialog::EditQualifierDialog(QWidget* p, const U2Qualifier& q, bool
 {
     ui = new Ui_EditQualifierDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467573");
+    new HelpButton(this, ui->buttonBox, "17470501");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     
diff --git a/src/corelibs/U2Gui/src/util/ui/EditQualifierDialog.ui b/src/corelibs/U2Gui/src/util/EditQualifierDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/EditQualifierDialog.ui
rename to src/corelibs/U2Gui/src/util/EditQualifierDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/ui/EditSequenceDialog.ui b/src/corelibs/U2Gui/src/util/EditSequenceDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/EditSequenceDialog.ui
rename to src/corelibs/U2Gui/src/util/EditSequenceDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp b/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp
index d0ec77d..1ad4be1 100644
--- a/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp
@@ -19,29 +19,24 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-
-#include <QtGui/QKeyEvent>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QDir>
+#include <QKeyEvent>
+#include <QMessageBox>
+#include <QPushButton>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/U2SafePoints.h>
 
+#include <U2Formats/DocumentFormatUtils.h>
 #include <U2Formats/GenbankLocationParser.h>
 
 #include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "EditSequenceDialogController.h"
-#include "ui/ui_EditSequenceDialog.h"
+#include "ui_EditSequenceDialog.h"
 
 namespace U2{
 
@@ -66,13 +61,18 @@ SeqPasterEventFilter::SeqPasterEventFilter( QObject* parent )
 //////////////////////////////////////////////////////////////////////////
 //EditSequenceDialogController
 EditSequenceDialogController::EditSequenceDialogController(const EditSequencDialogConfig &cfg, QWidget *p)
-    : QDialog(p), filter(""), pos(1), config(cfg)
+    : QDialog(p),
+      filter(""),
+      pos(1),
+      saveController(NULL),
+      config(cfg)
 {
     ui = new Ui_EditSequenceDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467556");
+    new HelpButton(this, ui->buttonBox, "17470484");
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    connect(ui->browseButton, SIGNAL(clicked()), SLOT(sl_browseButtonClicked()));
     addSeqpasterWidget();
     w->disableCustomSettings();
     w->setPreferredAlphabet(cfg.alphabet);
@@ -104,18 +104,13 @@ EditSequenceDialogController::EditSequenceDialogController(const EditSequencDial
         setWindowTitle(tr("Replace sequence"));
         ui->splitRB->setEnabled(false);
         ui->split_separateRB->setEnabled(false);
-        //ui->insertPositionSpin->setEnabled(false);
         ui->insertPositionBox->setEnabled(false);
         w->selectText();
     }
 
-    connect(ui->formatBox, SIGNAL(currentIndexChanged(int)), this, SLOT(sl_indexChanged(int)));
-
-    ui->formatBox->addItem("FASTA", BaseDocumentFormats::FASTA);
-    ui->formatBox->addItem("Genbank", BaseDocumentFormats::PLAIN_GENBANK);
-    connect(ui->mergeAnnotationsBox, SIGNAL(toggled(bool)), this, SLOT(sl_mergeAnnotationsToggled(bool)));
-    sl_indexChanged(0);
+    initSaveController();
 
+    connect(ui->mergeAnnotationsBox, SIGNAL(toggled(bool)), this, SLOT(sl_mergeAnnotationsToggled()));
     connect(ui->startPosToolButton, SIGNAL(clicked()), this, SLOT(sl_startPositionliClicked()));
     connect(ui->endPosToolButton, SIGNAL(clicked()), this, SLOT(sl_endPositionliClicked()));
 
@@ -139,13 +134,14 @@ void EditSequenceDialogController::accept(){
     }
 
     if(!modifyCurrentDocument()){
-        QFileInfo fi(ui->filepathEdit->text());
+        const QString url = saveController->getSaveFileName();
+        QFileInfo fi(url);
         QDir dirToSave(fi.dir());
         if (!dirToSave.exists()){
             QMessageBox::critical(this, this->windowTitle(), tr("Directory to save is not exists"));
             return;
         }
-        if(ui->filepathEdit->text().isEmpty()){
+        if(url.isEmpty()){
             QMessageBox::critical(this, this->windowTitle(), tr("Entered path is empty"));
             return;
         }
@@ -165,14 +161,6 @@ void EditSequenceDialogController::addSeqpasterWidget(){
 
 }
 
-void EditSequenceDialogController::sl_browseButtonClicked(){
-    LastUsedDirHelper h;
-
-    h.url = U2FileDialog::getSaveFileName(this, tr("Select file to save..."), h.dir, filter);
-    ui->filepathEdit->setText(h.url);
-    sl_indexChanged(ui->formatBox->currentIndex());
-}
-
 int EditSequenceDialogController::getPosToInsert() const {
     return pos;
 }
@@ -190,27 +178,16 @@ U1AnnotationUtils::AnnotationStrategyForResize EditSequenceDialogController::get
     }
 }
 
-void EditSequenceDialogController::sl_indexChanged( int index){
-    DocumentFormatId currentId = (ui->formatBox->itemData(index)).toString();
-    filter = DialogUtils::prepareDocumentsFileFilter(currentId, false);
-    DocumentFormat *df = AppContext::getDocumentFormatRegistry()->getFormatById(currentId);
-    QString newExt = df->getSupportedDocumentFileExtensions().first();
-    QString filepath = ui->filepathEdit->text();
-    if (filepath.isEmpty()){
-        return;
-    }
-    QFileInfo fi(filepath);
-    ui->filepathEdit->setText(fi.absoluteDir().absolutePath() + "/" + fi.baseName() + "." + newExt);
-}
+void EditSequenceDialogController::sl_mergeAnnotationsToggled() {
+    const QString fastaFormatName = DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::FASTA);
+    CHECK(!fastaFormatName.isEmpty(), );
 
-void EditSequenceDialogController::sl_mergeAnnotationsToggled( bool state){
-    Q_UNUSED(state);
-    if(ui->mergeAnnotationsBox->isChecked()){
-        ui->formatBox->removeItem(ui->formatBox->findText("FASTA"));
-    }else{
-        ui->formatBox->addItem("FASTA", BaseDocumentFormats::FASTA);
+    if (ui->mergeAnnotationsBox->isChecked()) {
+        ui->formatBox->removeItem(ui->formatBox->findText(fastaFormatName));
+    } else {
+        ui->formatBox->addItem(fastaFormatName);
     }
-    sl_indexChanged(ui->formatBox->findText("Genbank"));
+    ui->formatBox->model()->sort(0);
 }
 
 DNASequence EditSequenceDialogController::getNewSequence() const {
@@ -221,12 +198,11 @@ GUrl EditSequenceDialogController::getDocumentPath() const {
     if (modifyCurrentDocument()) {
         return GUrl();
     } else {
-        return GUrl(ui->filepathEdit->text());
+        return GUrl(saveController->getSaveFileName());
     }
 }
 
-EditSequenceDialogController::~EditSequenceDialogController()
-{
+EditSequenceDialogController::~EditSequenceDialogController() {
     delete ui;
 }
 
@@ -238,14 +214,29 @@ bool EditSequenceDialogController::recalculateQualifiers() const {
     return ui->recalculateQualsCheckBox->isChecked();
 }
 
-U2::DocumentFormatId EditSequenceDialogController::getDocumentFormatId() const {
-    return ui->formatBox->itemData(ui->formatBox->currentIndex()).toString();
+DocumentFormatId EditSequenceDialogController::getDocumentFormatId() const {
+    return saveController->getFormatIdToSave();
 }
 
 bool EditSequenceDialogController::modifyCurrentDocument() const {
     return !ui->saveToAnotherBox->isChecked();
 }
 
+void EditSequenceDialogController::initSaveController() {
+    SaveDocumentControllerConfig conf;
+    conf.defaultFormatId = BaseDocumentFormats::FASTA;
+    conf.fileDialogButton = ui->browseButton;
+    conf.fileNameEdit = ui->filepathEdit;
+    conf.formatCombo = ui->formatBox;
+    conf.parentWidget = this;
+    conf.saveTitle = tr("Select file to save...");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::FASTA
+                                                                      << BaseDocumentFormats::PLAIN_GENBANK;
+
+    saveController = new SaveDocumentController(conf, formats, this);
+}
+
 void EditSequenceDialogController::sl_startPositionliClicked(){
     ui->insertPositionSpin->setValue(1);
 }
@@ -257,19 +248,17 @@ void EditSequenceDialogController::sl_endPositionliClicked(){
 void EditSequenceDialogController::sl_beforeSlectionClicked(){
     SAFE_POINT(!config.selectionRegions.isEmpty(), "No selection", );
     U2Region containingregion = U2Region::containingRegion(config.selectionRegions);
-    ui->insertPositionSpin->setValue(containingregion.startPos+1);
+    ui->insertPositionSpin->setValue(containingregion.startPos + 1);
 }
 
 void EditSequenceDialogController::sl_afterSlectionClicked(){
     SAFE_POINT(!config.selectionRegions.isEmpty(), "No selection", );
     U2Region containingregion = U2Region::containingRegion(config.selectionRegions);
-    ui->insertPositionSpin->setValue(containingregion.endPos()+1);
+    ui->insertPositionSpin->setValue(containingregion.endPos() + 1);
 }
 
 void EditSequenceDialogController::sl_enterPressed(){
     accept();
 }
 
-
 } // U2
-
diff --git a/src/corelibs/U2Gui/src/util/EditSequenceDialogController.h b/src/corelibs/U2Gui/src/util/EditSequenceDialogController.h
index d7a7301..1b6449e 100644
--- a/src/corelibs/U2Gui/src/util/EditSequenceDialogController.h
+++ b/src/corelibs/U2Gui/src/util/EditSequenceDialogController.h
@@ -27,6 +27,7 @@
 #include <U2Core/U2Region.h>
 #include <U2Core/U1AnnotationUtils.h>
 #include <U2Core/GUrl.h>
+
 #include <U2Gui/SeqPasterWidgetController.h>
 #include <U2Gui/DialogUtils.h>
 
@@ -34,6 +35,8 @@ class Ui_EditSequenceDialog;
 
 namespace U2 {
 
+class SaveDocumentController;
+
 enum EditSequenceDialogMode {
     EditSequenceMode_Replace,
     EditSequenceMode_Insert
@@ -70,6 +73,7 @@ class U2GUI_EXPORT EditSequenceDialogController : public QDialog {
 public:
     EditSequenceDialogController(const EditSequencDialogConfig &cfg, QWidget *p = NULL);
     ~EditSequenceDialogController();
+
     void accept();
 
     DNASequence getNewSequence() const;
@@ -81,9 +85,7 @@ public:
     DocumentFormatId getDocumentFormatId() const;
 
 private slots:
-    void sl_browseButtonClicked();
-    void sl_indexChanged(int);
-    void sl_mergeAnnotationsToggled(bool);
+    void sl_mergeAnnotationsToggled();
     void sl_startPositionliClicked();
     void sl_endPositionliClicked();
     void sl_beforeSlectionClicked();
@@ -93,10 +95,12 @@ private slots:
 private:
     void addSeqpasterWidget();
     bool modifyCurrentDocument() const;
+    void initSaveController();
 
     QString filter;
     int pos;
     SeqPasterWidgetController *w;
+    SaveDocumentController *saveController;
     EditSequencDialogConfig config;
     Ui_EditSequenceDialog* ui;
 
diff --git a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp
index e68c12e..5c9f4dd 100644
--- a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp
@@ -19,7 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QList>
+#include <QList>
+#include <QPushButton>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
@@ -27,11 +28,9 @@
 #include <U2Core/FormatUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/global.h>
-#include <QPushButton>
 
 #include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "ExportAnnotationsDialog.h"
 #include "ui_ExportAnnotationsDialog.h"
@@ -41,40 +40,15 @@ namespace U2 {
 const QString ExportAnnotationsDialog::CSV_FORMAT_ID( "csv" );
 
 ExportAnnotationsDialog::ExportAnnotationsDialog( const QString &filename, QWidget *parent )
-    : QDialog( parent ), ui( new Ui::ExportAnnotationsDialog( ) )
+    : QDialog( parent ), ui( new Ui_ExportAnnotationsDialog( ) )
 {
     ui->setupUi( this );
-    new HelpButton(this, ui->buttonBox, "17467578");    
-    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    new HelpButton(this, ui->buttonBox, "17470506");    
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    ui->fileNameEdit->setText( filename );
-    connect( ui->chooseFileButton, SIGNAL( clicked( ) ), SLOT( sl_onChooseFileButtonClicked( ) ) );
-
-    DocumentFormatConstraints constr;
-    QList<DocumentFormatId> supportedFormats;
-    constr.supportedObjectTypes.insert( GObjectTypes::ANNOTATION_TABLE );
-    constr.addFlagToSupport( DocumentFormatFlag_SupportWriting );
-    constr.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
-    DocumentFormatRegistry *formatRegistry = AppContext::getDocumentFormatRegistry( );
-    SAFE_POINT( NULL != formatRegistry, "Invalid document format registry!", );
-    supportedFormats = formatRegistry->selectFormats( constr );
-    supportedFormats.append( CSV_FORMAT_ID );
-    supportedFormats.removeOne(BaseDocumentFormats::VECTOR_NTI_SEQUENCE);
-    supportedFormatsExts.append( CSV_FORMAT_ID );
-
-    foreach ( const DocumentFormatId &fid, supportedFormats ) {
-        ui->formatsBox->addItem( fid );
-        if ( CSV_FORMAT_ID != fid ) {
-            DocumentFormat *df = AppContext::getDocumentFormatRegistry( )->getFormatById( fid );
-            SAFE_POINT( NULL != df, "Invalid document format detected!", );
-            supportedFormatsExts.append( df->getSupportedDocumentFileExtensions( ).first( ) );
-        }
-    }
-    ui->formatsBox->setCurrentIndex( ui->formatsBox->findText( supportedFormats.first( ) ) );
-    connect( ui->formatsBox, SIGNAL( currentIndexChanged( const QString & ) ),
-        SLOT( sl_onFormatChanged( const QString & ) ) );
-    sl_onFormatChanged( ui->formatsBox->currentText( ) );
+    initSaveController(filename);
+    sl_formatChanged(saveController->getFormatIdToSave());
 
     window()->resize(window()->width(), 0);
 }
@@ -83,28 +57,31 @@ ExportAnnotationsDialog::~ExportAnnotationsDialog( ) {
     delete ui;
 }
 
-void ExportAnnotationsDialog::sl_onFormatChanged( const QString &newFormat ) {
-    const bool isNewFormatCsv = ( newFormat == CSV_FORMAT_ID );
-    ui->exportSequenceCheck->setEnabled( isNewFormatCsv );
-    ui->exportSequenceNameCheck->setEnabled( isNewFormatCsv );
-    QString ext( "." );
-    if ( isNewFormatCsv ) {
-        ext.append( CSV_FORMAT_ID );
-    } else {
-        DocumentFormatRegistry *formatRegistry = AppContext::getDocumentFormatRegistry( );
-        SAFE_POINT( NULL != formatRegistry, "Invalid document format registry!", );
-        DocumentFormat *df = formatRegistry->getFormatById( newFormat );
-        SAFE_POINT( NULL != df, "Invalid document format detected!", );
-        ext.append( df->getSupportedDocumentFileExtensions( ).first( ) );
-    }
-    SAFE_POINT( 1 != ext.size( ), "Invalid file extension detected!", );
-    QFileInfo fi( ui->fileNameEdit->text( ) );
-    ui->fileNameEdit->setText( QDir::cleanPath( fi.absoluteDir( ).absolutePath( ) + "/"
-        + fi.completeBaseName( ) + ext ) );
+void ExportAnnotationsDialog::initSaveController(const QString &filename) {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = "ExportAnnotationsDialogHelperDomain";
+    config.defaultFileName = filename;
+    config.defaultFormatId = BaseDocumentFormats::PLAIN_GENBANK;
+    config.fileDialogButton = ui->chooseFileButton;
+    config.fileNameEdit = ui->fileNameEdit;
+    config.formatCombo = ui->formatsBox;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file to save annotations");
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes.insert(GObjectTypes::ANNOTATION_TABLE);
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+    formatConstraints.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
+    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 &)));
 }
 
 QString ExportAnnotationsDialog::filePath( ) const {
-    return ui->fileNameEdit->text( );
+    return saveController->getSaveFileName();
 }
 
 bool ExportAnnotationsDialog::exportSequence( ) const {
@@ -115,47 +92,20 @@ bool ExportAnnotationsDialog::exportSequenceNames( ) const {
     return ui->exportSequenceNameCheck->isChecked( );
 }
 
-void ExportAnnotationsDialog::sl_onChooseFileButtonClicked( ) {
-    QString curFormatExt;
-
-    const QString curFormat = ui->formatsBox->currentText( );
-    const bool isCurrentFormatCsv = ( curFormat == CSV_FORMAT_ID );
-    if ( isCurrentFormatCsv ) {
-        curFormatExt = CSV_FORMAT_ID;
-    } else {
-        DocumentFormatRegistry *documentReg = AppContext::getDocumentFormatRegistry( );
-        SAFE_POINT( NULL != documentReg, "Invalid document format registry!", );
-        DocumentFormat *df = documentReg->getFormatById( curFormat );
-        SAFE_POINT( NULL != df, "Invalid document format detected!", );
-        curFormatExt = df->getSupportedDocumentFileExtensions( ).first( );
-    }
-
-    QStringList formats( supportedFormatsExts );
-    formats.removeAll( curFormatExt );
-    formats.prepend( curFormatExt );
-    QString fileFormats;
-    foreach ( const QString &formatName, formats ) {
-        fileFormats += formatName.toUpper( ) + " format (*." + formatName + ");;";
-    }
-    fileFormats.append( "All files (*)" );
-
-    LastUsedDirHelper helper( "ExportAnnotationsDialogHelperDomain" );
-    helper.url = U2FileDialog::getSaveFileName( this, tr( "Select file to save annotations" ),
-        helper.dir, fileFormats, NULL, QFileDialog::DontConfirmOverwrite );
-    if ( !helper.url.isEmpty( ) ) {
-        ui->fileNameEdit->setText( helper.url );
-        sl_onFormatChanged( ui->formatsBox->currentText( ) );
-    }
-}
-
 void ExportAnnotationsDialog::setExportSequenceVisible( bool value ) {
     ui->exportSequenceCheck->setVisible( value );
     ui->exportSequenceNameCheck->setVisible( value );
     window()->resize(window()->width(), 0);
 }
 
+void ExportAnnotationsDialog::sl_formatChanged(const QString &newFormatId) {
+    const bool isCsvFormat = (CSV_FORMAT_ID == newFormatId);
+    ui->exportSequenceCheck->setEnabled(isCsvFormat);
+    ui->exportSequenceNameCheck->setEnabled(isCsvFormat);
+}
+
 QString ExportAnnotationsDialog::fileFormat( ) const {
-    return ui->formatsBox->currentText( );
+    return saveController->getFormatIdToSave();
 }
 
 } // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.h b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.h
index bf0eaad..457745c 100644
--- a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.h
+++ b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.h
@@ -22,21 +22,16 @@
 #ifndef _U2_EXPORT_ANNOTATIONS_DIALOG_H_
 #define _U2_EXPORT_ANNOTATIONS_DIALOG_H_
 
-#include <U2Core/global.h>
+#include <QDialog>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <U2Core/global.h>
 
 namespace U2 {
 
-namespace Ui {
+class Ui_ExportAnnotationsDialog;
 
-class ExportAnnotationsDialog;
 
-}
+class SaveDocumentController;
 
 class U2GUI_EXPORT ExportAnnotationsDialog : public QDialog {
     Q_OBJECT
@@ -52,16 +47,17 @@ public:
     bool                            exportSequenceNames( ) const;
     void                            setExportSequenceVisible( bool value );
 
-private slots:
-    void                            sl_onChooseFileButtonClicked( );
-    void                            sl_onFormatChanged( const QString & );
-
-public:
     static const QString            CSV_FORMAT_ID;
 
+private slots:
+    void sl_formatChanged(const QString &newFormatId);
+
 private:
+    void                            initSaveController(const QString &filename);
+
     QList<QString>                  supportedFormatsExts;
-    Ui::ExportAnnotationsDialog *   ui;
+    SaveDocumentController *        saveController;
+    Ui_ExportAnnotationsDialog *    ui;
 };
 
 } // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ui/ExportAnnotationsDialog.ui b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/ExportAnnotationsDialog.ui
rename to src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/ui/ExportDocumentDialog.ui b/src/corelibs/U2Gui/src/util/ExportDocumentDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/ExportDocumentDialog.ui
rename to src/corelibs/U2Gui/src/util/ExportDocumentDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp b/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp
index a36b48d..157c968 100644
--- a/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp
@@ -19,38 +19,36 @@
  * MA 02110-1301, USA.
  */
 
-#include "ExportDocumentDialogController.h"
-#include "SaveDocumentGroupController.h"
-#include "ui/ui_ExportDocumentDialog.h"
-
-#include "U2Gui/DialogUtils.h"
+#include <QDir>
+#include <QPushButton>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/DocumentUtils.h>
 #include <U2Core/GObject.h>
 #include <U2Core/GUrlUtils.h>
-#include <U2Core/DocumentUtils.h>
 
-#include <QtCore/QDir>
+#include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#endif
+
+#include "ExportDocumentDialogController.h"
+#include "SaveDocumentController.h"
+#include "ui_ExportDocumentDialog.h"
 
 namespace U2{
 
 ExportDocumentDialogController::ExportDocumentDialogController(Document* d, QWidget *p)
-    : QDialog(p), sourceDoc(d), sourceObject(NULL)
+    : QDialog(p),
+      saveController(NULL),
+      sourceDoc(d),
+      sourceObject(NULL)
 {
     ui = new Ui_ExportDocumentDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467503");
+    new HelpButton(this, ui->buttonBox, "17470430");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     initSaveController(sourceDoc->getObjects(), sourceDoc->getURLString());
-    ui->fileNameEdit->setText(saveController->getDefaultFileName());
 }
 
 ExportDocumentDialogController::ExportDocumentDialogController(GObject *object, QWidget *parent, const QString &initUrl) :
@@ -60,49 +58,53 @@ ExportDocumentDialogController::ExportDocumentDialogController(GObject *object,
     sourceObject(object)
 {
     ui->setupUi(this);
-    QList<GObject *> objectList;
-    objectList.append(sourceObject);
+
+    QList<GObject *> objectList = QList<GObject *>() << sourceObject;
     initSaveController(objectList, initUrl);
-    QString fileName = saveController->getDefaultFileName();
-    if(-1 == fileName.lastIndexOf(".")) {
-        fileName.append("." + saveController->getFormatToSave()
-            ->getSupportedDocumentFileExtensions().first());
-    }
-    ui->fileNameEdit->setText(fileName);
-    new HelpButton(this, ui->buttonBox, "17467503");
+
+    new HelpButton(this, ui->buttonBox, "17470430");
 }
 
-void ExportDocumentDialogController::initSaveController(const QList<GObject *> &objects,
-    const QString &fileUrl)
-{
-    SaveDocumentGroupControllerConfig conf;
-    //UGENE-1458
+void ExportDocumentDialogController::initSaveController(const QList<GObject *> &objects, const QString &fileUrl) {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = fileUrl;
+    config.fileDialogButton = ui->browseButton;
+    config.fileNameEdit = ui->fileNameEdit;
+    config.formatCombo = ui->formatCombo;
+    config.compressCheckbox= ui->compressCheck;
+    config.parentWidget = this;
+    config.rollOutProjectUrls = true;
+    config.rollSuffix = "_copy";
+
+    const DocumentFormatConstraints formatConstraints = getAcceptableConstraints(objects);
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
+
+DocumentFormatConstraints ExportDocumentDialogController::getAcceptableConstraints(const QList<GObject *> &objects) {
+    DocumentFormatConstraints formatConstraints;
+
     QMap<GObjectType, int> objPerTypeMap;
     foreach (GObject* obj, objects) {
-        GObjectType tp = obj->getGObjectType();
-        conf.dfc.supportedObjectTypes += tp;
-        if(objPerTypeMap.contains(tp)){
-            objPerTypeMap[tp] += 1;
-        }else{
-            objPerTypeMap.insert(tp, 1);
+        GObjectType objectType = obj->getGObjectType();
+        formatConstraints.supportedObjectTypes += objectType;
+        if (objPerTypeMap.contains(objectType)) {
+            objPerTypeMap[objectType] += 1;
+        } else {
+            objPerTypeMap.insert(objectType, 1);
         }
     }
+
     int maxObjs = 1;
-    foreach(int val, objPerTypeMap){ 
+    foreach (int val, objPerTypeMap){
         maxObjs = qMax(maxObjs, val);
     }
-    if (maxObjs > 1){
-        conf.dfc.addFlagToExclude(DocumentFormatFlag_OnlyOneObject);
+
+    if (maxObjs > 1) {
+        formatConstraints.addFlagToExclude(DocumentFormatFlag_OnlyOneObject);
     }
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.fileDialogButton = ui->browseButton;
-    conf.fileNameEdit = ui->fileNameEdit;
-    conf.formatCombo = ui->formatCombo;
-    conf.parentWidget = this; 
-    const QString fileName = GUrlUtils::rollFileName(fileUrl, "_copy",
-        DocumentUtils::getNewDocFileNameExcludesHint());
-    conf.defaultFileName = fileName;
-    saveController = new SaveDocumentGroupController(conf, this);
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+
+    return formatConstraints;
 }
 
 QString ExportDocumentDialogController::getDocumentURL() const {
diff --git a/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.h b/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.h
index dcf0249..1b716a7 100644
--- a/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.h
+++ b/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.h
@@ -22,20 +22,16 @@
 #ifndef _U2_EXPORT_DOCUMENT_DIALOG_CONTROLLER_H_
 #define _U2_EXPORT_DOCUMENT_DIALOG_CONTROLLER_H_
 
+#include <QDialog>
+
 #include <U2Core/global.h>
 #include <U2Core/DocumentModel.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-
 class Ui_ExportDocumentDialog;
 
 namespace U2 {
 
-class SaveDocumentGroupController;
+class SaveDocumentController;
 
 class U2GUI_EXPORT ExportDocumentDialogController : public QDialog {
     Q_OBJECT
@@ -57,8 +53,9 @@ public:
 
 private:
     void initSaveController(const QList<GObject *> &objects, const QString &fileUrl);
+    static DocumentFormatConstraints getAcceptableConstraints(const QList<GObject *> &objects);
 
-    SaveDocumentGroupController* saveController;
+    SaveDocumentController* saveController;
     Ui_ExportDocumentDialog* ui;
     // the following fields are used to determine whether the object was used for
     // creating a Document from single GObeject or another Document
diff --git a/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp b/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp
index 950b2d3..9473d4e 100644
--- a/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp
@@ -19,15 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtGui/QImageWriter>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QImageWriter>
+#include <QMessageBox>
+#include <QPushButton>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/GUrlUtils.h>
@@ -35,11 +29,12 @@
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/HelpButton.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "ExportImageDialog.h"
 #include "imageExport/WidgetScreenshotExportTask.h"
-#include "ui/ui_ExportImageDialog.h"
+#include "ui_ExportImageDialog.h"
 
 static const QString IMAGE_DIR = "image";
 static const char *DIALOG_ACCEPT_ERROR_TITLE = "Unable to save file";
@@ -54,7 +49,6 @@ ExportImageDialog::ExportImageDialog(QWidget *screenShotWidget,
       scalingPolicy(scalingPolicy),
       filename(file),
       origFilename(file),
-      lod(IMAGE_DIR, QDir::homePath()),
       source(invoSource)
 {
     exportController = new WidgetScreenshotImageExportController(screenShotWidget);
@@ -70,7 +64,6 @@ ExportImageDialog::ExportImageDialog(ImageExportController *factory,
       scalingPolicy(scalingPolicy),
       filename(file),
       origFilename(file),
-      lod(IMAGE_DIR, QDir::homePath()),
       source(invoSource)
 {
     SAFE_POINT( exportController != NULL, tr("Image export task factory is NULL"), );
@@ -98,7 +91,7 @@ int ExportImageDialog::getQuality() const {
 }
 
 void ExportImageDialog::accept() {
-    filename = ui->fileNameEdit->text();
+    filename = saveController->getSaveFileName();
     if (filename.isEmpty()) {
         QMessageBox::warning(this, tr(DIALOG_ACCEPT_ERROR_TITLE), tr("The image file path is empty."));
         return;
@@ -109,17 +102,9 @@ void ExportImageDialog::accept() {
         return;
     }
 
-    format = ui->formatsBox->currentText();
-    if (QFile::exists(filename)) {
-        int res = QMessageBox::warning(this,
-                                       tr("Overwrite file?"),
-                                       tr("The file \"%1\" already exists. Do you wish to overwrite it?").arg(filename),
-                                       QMessageBox::Yes, QMessageBox::No);
-        if (res == QMessageBox::No) {
-            return;
-        }
-    }
+    format = saveController->getFormatIdToSave();
 
+    LastUsedDirHelper lod(IMAGE_DIR);
     lod.url = filename;
     ioLog.info(tr("Saving image to '%1'...").arg(filename));
 
@@ -133,59 +118,7 @@ void ExportImageDialog::accept() {
     QDialog::accept();
 }
 
-void ExportImageDialog::sl_onBrowseButtonClick() {
-    QString curFormat = ui->formatsBox->currentText();
-    assert(supportedFormats.contains(curFormat));
-    QList<QString> formats(supportedFormats);
-    formats.removeAll(curFormat);
-    formats.prepend(curFormat);
-    QString fileFormats;
-    for(int i = 0; i < formats.size(); ++i) {
-        QString formatName = formats.at(i);
-        fileFormats += formatName.toUpper() + " format (*." + formatName + ");;";
-    }
-
-    QString fileName = ui->fileNameEdit->text();
-    LastUsedDirHelper lod(IMAGE_DIR);
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Save Image As"), fileName, fileFormats, 0, QFileDialog::DontConfirmOverwrite);
-    if (lod.url.isEmpty()) {
-        return;
-    }
-
-    QString ext = QFileInfo(lod.url).suffix().toLower();
-    if (ext.isEmpty() || !supportedFormats.contains(ext)) {
-        ext = ui->formatsBox->currentText();
-        lod.url += "." + ext;
-    }
-
-    ui->fileNameEdit->setText(QDir::toNativeSeparators(lod.url));
-
-    int index = ui->formatsBox->findText(ext);
-    ui->formatsBox->setCurrentIndex(index);
-
-    setSizeControlsEnabled(!isVectorGraphicFormat(ui->formatsBox->currentText()));
-}
-
-void ExportImageDialog::sl_onFormatsBoxItemChanged(const QString &text)
-{
-    format = text;
-    CHECK(supportedFormats.contains(format), );
-
-    QString fileName = ui->fileNameEdit->text();
-
-    // Remove old suffix if present
-    QString ext = QFileInfo(fileName).suffix().toLower();
-    if (supportedFormats.contains(ext)) {
-        fileName.chop(ext.size() + 1);
-    }
-    if (ext.isEmpty() && fileName.endsWith('.')) {
-        fileName.chop(1);
-    }
-
-    fileName += "." + format;
-
-    ui->fileNameEdit->setText(QDir::toNativeSeparators(fileName));
-
+void ExportImageDialog::sl_onFormatsBoxItemChanged(const QString &format) {
     setSizeControlsEnabled(!isVectorGraphicFormat(format));
 
     const bool areQualityWidgetsVisible = isLossyFormat( format );
@@ -214,28 +147,28 @@ void ExportImageDialog::init() {
 
     switch (source) {
     case WD:
-        new HelpButton(this, ui->buttonBox, "17467907");
+        new HelpButton(this, ui->buttonBox, "17470833");
         break;
     case CircularView:
-        new HelpButton(this, ui->buttonBox, "17467582");
+        new HelpButton(this, ui->buttonBox, "17470511");
         break;
     case MSA:
-        new HelpButton(this, ui->buttonBox, "17467652");
+        new HelpButton(this, ui->buttonBox, "17470584");
         break;
     case SequenceView:
-        new HelpButton(this, ui->buttonBox, "");
+        new HelpButton(this, ui->buttonBox, "17470471");
         break;
     case AssemblyView:
-        new HelpButton(this, ui->buttonBox, "17467688");
+        new HelpButton(this, ui->buttonBox, "17470620");
         break;
     case PHYTreeView:
-        new HelpButton(this, ui->buttonBox, "17467716");
+        new HelpButton(this, ui->buttonBox, "17470649");
         break;
     case DotPlot:
-        new HelpButton(this, ui->buttonBox, "17467613");
+        new HelpButton(this, ui->buttonBox, "17470542");
         break;
     case MolView:
-        new HelpButton(this, ui->buttonBox, "17467596");
+        new HelpButton(this, ui->buttonBox, "17470525");
         break;
     default:
         FAIL("Can't find help Id",);
@@ -249,7 +182,7 @@ void ExportImageDialog::init() {
     ui->hintLabel->setStyleSheet(style);
     ui->hintLabel->hide();
 
-    setFormats();
+    initSaveController();
 
     if (scalingPolicy == NoScaling) {
         ui->imageSizeSettingsContainer->hide();
@@ -258,14 +191,9 @@ void ExportImageDialog::init() {
     ui->widthSpinBox->setValue(exportController->getImageWidth());
     ui->heightSpinBox->setValue(exportController->getImageHeight());
 
-    QString fixedName = GUrlUtils::fixFileName(origFilename);
-    filename = lod.dir + "/" + fixedName + "."  + ui->formatsBox->currentText();
-    filename = GUrlUtils::rollFileName(filename, "_copy", QSet<QString>());
-    ui->fileNameEdit->setText(QDir::cleanPath(QDir::toNativeSeparators(filename)));
-
-    setSizeControlsEnabled(!isVectorGraphicFormat(ui->formatsBox->currentText()));
+    setSizeControlsEnabled(!isVectorGraphicFormat(saveController->getFormatIdToSave()));
 
-    connect(ui->browseFileButton, SIGNAL(clicked()), this, SLOT(sl_onBrowseButtonClick()));
+    connect(ui->formatsBox, SIGNAL(currentIndexChanged(const QString&)), exportController, SLOT(sl_onFormatChanged(const QString&)));
     connect(ui->formatsBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(sl_onFormatsBoxItemChanged(const QString&)));
 
     connect(exportController, SIGNAL(si_disableExport(bool)), SLOT(sl_disableExport(bool)));
@@ -276,95 +204,72 @@ void ExportImageDialog::init() {
         sl_showMessage(exportController->getDisableMessage());
     }
 
-    sl_onFormatsBoxItemChanged(ui->formatsBox->currentText());
-
     QWidget* settingsWidget = exportController->getSettingsWidget();
     if (settingsWidget == NULL) {
         ui->settingsGroupBox->hide();
     } else {
-        //ui->settingsGroupBox->setTitle( tr( ui->settingsGroupBox->title().prepend(exportController->getExportDescription()).toLatin1().data() ) );
         ui->settingsLayout->addWidget(settingsWidget);
     }
+}
 
-    connect(ui->formatsBox, SIGNAL(currentIndexChanged(const QString&)), exportController, SLOT(sl_onFormatChanged(const QString&)));
+void ExportImageDialog::initSaveController() {
+    LastUsedDirHelper dirHelper(IMAGE_DIR, GUrlUtils::getDefaultDataPath());
+
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = IMAGE_DIR;
+    config.defaultFileName = dirHelper.dir + "/" + GUrlUtils::fixFileName(origFilename);
+    config.defaultFormatId = "png";
+    config.fileDialogButton = ui->browseFileButton;
+    config.fileNameEdit = ui->fileNameEdit;
+    config.formatCombo = ui->formatsBox;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save Image As");
+    config.rollSuffix = "_copy";
+
+    SaveDocumentController::SimpleFormatsInfo formatsInfo;
+    QStringList formats = getFormats();
+    foreach (const QString &format, formats) {
+        formatsInfo.addFormat(format, format, QStringList() << format);
+    }
+
+    saveController = new SaveDocumentController(config, formatsInfo, this);
+    saveController->setFormat(saveController->getFormatIdToSave());
 }
 
-void ExportImageDialog::setSizeControlsEnabled(bool enabled)
-{
+void ExportImageDialog::setSizeControlsEnabled(bool enabled) {
     ui->widthLabel->setEnabled(enabled);
     ui->heightLabel->setEnabled(enabled);
     ui->widthSpinBox->setEnabled(enabled);
     ui->heightSpinBox->setEnabled(enabled);
 }
 
-void ExportImageDialog::setFormats() {
-    setRasterFormats();
-    setSvgAndPdfFormats();
-
-    // set default format
-    if (ui->formatsBox->findText("png") != -1) {
-        ui->formatsBox->setCurrentIndex( ui->formatsBox->findText("png") );
-    }
+QStringList ExportImageDialog::getFormats() {
+    return getRasterFormats() + getSvgAndPdfFormats();
 }
 
-void ExportImageDialog::setRasterFormats() {
-    if (exportController->isRasterFormatsEnabled())
-    {
-        QList<QByteArray> list = QImageWriter::supportedImageFormats();
-        list.removeAll("ico");
-        foreach (QByteArray format,list){
-            supportedFormats.append(QString(format));
-            ui->formatsBox->addItem(format);
-        }
+QStringList ExportImageDialog::getRasterFormats() {
+    QStringList result;
+    CHECK(exportController->isRasterFormatsEnabled(), result);
+    QList<QByteArray> list = QImageWriter::supportedImageFormats();
+    list.removeAll("ico");
+    foreach (const QByteArray &format, list) {
+        result << format;
     }
+    return result;
 }
 
-void ExportImageDialog::setSvgAndPdfFormats()
-{
+QStringList ExportImageDialog::getSvgAndPdfFormats() {
+    QStringList result;
     if (exportController->isSvgSupported()) {
-        if (!supportedFormats.contains(ImageExportTaskSettings::SVG_FORMAT)) {
-            supportedFormats.append(ImageExportTaskSettings::SVG_FORMAT);
-        } else {
-            supportedFormats.removeOne(ImageExportTaskSettings::SVG_FORMAT);
-            removeOutputFileNameExtention(ImageExportTaskSettings::SVG_FORMAT);
-        }
+        result << ImageExportTaskSettings::SVG_FORMAT;
     }
 
     if (exportController->isPdfSupported()) {
-        if (!supportedFormats.contains(ImageExportTaskSettings::PS_FORMAT)) {
-            supportedFormats.append(ImageExportTaskSettings::PS_FORMAT);
-        }
-        if (!supportedFormats.contains(ImageExportTaskSettings::PDF_FORMAT)) {
-            supportedFormats.append(ImageExportTaskSettings::PDF_FORMAT);
-        }
-    } else {
-        supportedFormats.removeOne(ImageExportTaskSettings::PS_FORMAT);
-        supportedFormats.removeOne(ImageExportTaskSettings::PDF_FORMAT);
-        removeOutputFileNameExtention(ImageExportTaskSettings::PS_FORMAT);
-        removeOutputFileNameExtention(ImageExportTaskSettings::PDF_FORMAT);
-    }
-
-    // keep the same format selection during exporter change
-    int idx = ui->formatsBox->currentIndex();
-    bool selectFormat = supportedFormats.contains(ui->formatsBox->currentText());
-
-    ui->formatsBox->clear();
-    foreach (const QString &format, supportedFormats) {
-        ui->formatsBox->addItem(format);
+        result << ImageExportTaskSettings::PS_FORMAT;
+        result << ImageExportTaskSettings::PDF_FORMAT;
     }
 
-    if (selectFormat) {
-        ui->formatsBox->setCurrentIndex(idx);
-    }
-}
-
-void ExportImageDialog::removeOutputFileNameExtention( const QString &ext) {
-    QString fileName = ui->fileNameEdit->text();
-    QString fileExt = QFileInfo(fileName).suffix().toLower();
-    if (fileExt == ext) {
-        fileName.chop(ext.size() + 1);
-    }
-    ui->fileNameEdit->setText(QDir::toNativeSeparators(fileName));
+    return result;
 }
 
 bool ExportImageDialog::isVectorGraphicFormat( const QString &formatName ) {
diff --git a/src/corelibs/U2Gui/src/util/ExportImageDialog.h b/src/corelibs/U2Gui/src/util/ExportImageDialog.h
index 60c8d00..00dafe1 100644
--- a/src/corelibs/U2Gui/src/util/ExportImageDialog.h
+++ b/src/corelibs/U2Gui/src/util/ExportImageDialog.h
@@ -22,15 +22,9 @@
 #ifndef _U2_EXPORT_IMAGE_DIALOG_H_
 #define _U2_EXPORT_IMAGE_DIALOG_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 #include "imageExport/ImageExportTask.h"
-#include <U2Gui/LastUsedDirHelper.h>
 
 class Ui_ImageExportForm;
 class QRadioButton;
@@ -39,6 +33,7 @@ class QButtonGroup;
 
 namespace U2 {
 
+class SaveDocumentController;
 
 class U2GUI_EXPORT ExportImageDialog : public QDialog {
     Q_OBJECT
@@ -73,33 +68,30 @@ public slots:
     void accept();
 
 private slots:
-    void sl_onBrowseButtonClick();
-    void sl_onFormatsBoxItemChanged(const QString& text);
+    void sl_onFormatsBoxItemChanged(const QString& format);
 
     void sl_showMessage(const QString& message);
     void sl_disableExport(bool disable);
 
 private:
     void init();
+    void initSaveController();
     void setSizeControlsEnabled(bool enabled);
-    void setFormats();
-    void setRasterFormats();
-    void setSvgAndPdfFormats();
-    void removeOutputFileNameExtention(const QString& ext);
+    QStringList getFormats();
+    QStringList getRasterFormats();
+    QStringList getSvgAndPdfFormats();
 
     static bool isVectorGraphicFormat(const QString &formatName);
     static bool isLossyFormat(const QString &formatName);
 
-private:
+    SaveDocumentController *saveController;
     ImageExportController*  exportController;
     ImageScalingPolicy      scalingPolicy;
 
-    QList<QString>      supportedFormats;
     QString filename;
     QString origFilename;
     QString format;
 
-    LastUsedDirHelper lod;
     Ui_ImageExportForm* ui;
     InvokedFrom source;
 }; // class ExportImageDialog
diff --git a/src/corelibs/U2Gui/src/util/ui/ExportImageDialog.ui b/src/corelibs/U2Gui/src/util/ExportImageDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/ExportImageDialog.ui
rename to src/corelibs/U2Gui/src/util/ExportImageDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/GenbankLocationValidator.cpp b/src/corelibs/U2Gui/src/util/GenbankLocationValidator.cpp
index 619c5b1..fc68116 100644
--- a/src/corelibs/U2Gui/src/util/GenbankLocationValidator.cpp
+++ b/src/corelibs/U2Gui/src/util/GenbankLocationValidator.cpp
@@ -52,13 +52,14 @@ le(_le)
 
 QValidator::State GenbankLocationValidator::validate( QString &str, int &/*ii*/ ) const {
     U2Location loc;
-    QString parseError;
-    if(isCircular){
-        parseError = Genbank::LocationParser::parseLocation(str.toLatin1().constData(), str.length(), loc, seqLen );
-    }else{
-        parseError = Genbank::LocationParser::parseLocation(str.toLatin1().constData(), str.length(), loc, -1 );
+    Genbank::LocationParser::ParsingResult parsingResult = Genbank::LocationParser::Success;
+    if (isCircular) {
+        parsingResult = Genbank::LocationParser::parseLocation(str.toLatin1().constData(), str.length(), loc, seqLen );
+    } else {
+        parsingResult = Genbank::LocationParser::parseLocation(str.toLatin1().constData(), str.length(), loc, -1 );
     }
-    if(parseError.isEmpty()){
+
+    if (Genbank::LocationParser::Success == parsingResult) {
         if (loc.data()->isEmpty()){
             return failValidate();
         }
diff --git a/src/corelibs/U2Gui/src/util/HelpButton.cpp b/src/corelibs/U2Gui/src/util/HelpButton.cpp
index d1a8892..7cea4be 100644
--- a/src/corelibs/U2Gui/src/util/HelpButton.cpp
+++ b/src/corelibs/U2Gui/src/util/HelpButton.cpp
@@ -49,7 +49,7 @@ HelpButton::HelpButton(QObject *parent, QAbstractButton *hb, const QString& _pag
 }
 
 void HelpButton::sl_buttonClicked(){
-    GUIUtils::runWebBrowser("https://ugene.unipro.ru/wiki/pages/viewpage.action?pageId="+pageId+"&from=ugene");
+    GUIUtils::runWebBrowser("http://ugene.net/wiki/pages/viewpage.action?pageId="+pageId+"&from=ugene");
 }
 
 void HelpButton::updatePageId( const QString &newPageId ){
@@ -63,7 +63,7 @@ ComboboxDependentHelpButton::ComboboxDependentHelpButton( QObject *parent, QDial
 
 void ComboboxDependentHelpButton::sl_buttonClicked(){
     QString pageId = pageMap[cb->currentText()];
-    GUIUtils::runWebBrowser("https://ugene.unipro.ru/wiki/pages/viewpage.action?pageId="+pageId+"&from=ugene");
+    GUIUtils::runWebBrowser("http://ugene.net/wiki/pages/viewpage.action?pageId="+pageId+"&from=ugene");
 }
 
 }
diff --git a/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.cpp b/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.cpp
index 32726b2..5dcbf97 100644
--- a/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.cpp
@@ -19,12 +19,8 @@
  * 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 <QPushButton>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
@@ -38,6 +34,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/ObjectViewModel.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "AceImportDialog.h"
@@ -47,31 +44,22 @@ namespace U2 {
 const QString AceImportDialog::EXTENSION = ".ugenedb";
 
 AceImportDialog::AceImportDialog(const QVariantMap& _settings) :
-    ImportDialog(_settings) {
+    ImportDialog(_settings),
+    saveController(NULL)
+{
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467699");
+    new HelpButton(this, buttonBox, "17470632");
+    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);
 
-    if (!src.isEmpty()) {
-        leDest->setText(src + EXTENSION);
-    }
-
-    connect(tbDest, SIGNAL(clicked()), SLOT(sl_selectFileClicked()));
-}
-
-void AceImportDialog::sl_selectFileClicked() {
-    GUrl sourceFile(leSource->text());
-    QString fileFilter = DialogUtils::prepareDocumentsFileFilter(BaseDocumentFormats::UGENEDB, true);
-    QString newDest = U2FileDialog::getSaveFileName(this, tr("Destination UGENEDB file"), sourceFile.dirPath(), fileFilter, NULL, QFileDialog::DontConfirmOverwrite);
-    if (!newDest.isEmpty()) {
-        leDest->setText(newDest);
-    }
+    initSaveController();
 }
 
 bool AceImportDialog::isValid() {
-    GUrl destUrl(leDest->text());
+    GUrl destUrl(saveController->getSaveFileName());
 
     if (destUrl.isEmpty()) {
         leDest->setFocus(Qt::OtherFocusReason);
@@ -129,7 +117,23 @@ bool AceImportDialog::isValid() {
 }
 
 void AceImportDialog::applySettings() {
-    settings.insert(AceImporter::DEST_URL, leDest->text());
+    settings.insert(AceImporter::DEST_URL, saveController->getSaveFileName());
+}
+
+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
index 9e727c7..e745f3c 100644
--- a/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.h
+++ b/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.h
@@ -22,23 +22,25 @@
 #ifndef _U2_ACE_IMPORT_DIALOG_H_
 #define _U2_ACE_IMPORT_DIALOG_H_
 
-#include "ui_AceImportDialog.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);
 
-private slots:
-    void sl_selectFileClicked();
-
 protected:
     bool isValid();
     void applySettings();
+    void initSaveController();
+
+    SaveDocumentController *saveController;
 
     static const QString EXTENSION;
 };
diff --git a/src/corelibs/U2Gui/src/util/ImportDialogs/ui/AceImportDialog.ui b/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ImportDialogs/ui/AceImportDialog.ui
rename to src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/MultiClickMenu.cpp b/src/corelibs/U2Gui/src/util/MultiClickMenu.cpp
new file mode 100644
index 0000000..5c36b89
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/MultiClickMenu.cpp
@@ -0,0 +1,63 @@
+/**
+ * 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 <QKeyEvent>
+#include <QMenu>
+#include <U2Core/U2SafePoints.h>
+
+#include "MultiClickMenu.h"
+
+namespace U2 {
+
+MultiClickMenu::MultiClickMenu(QMenu *menu)
+: QObject(menu), menu(menu)
+{
+    CHECK(NULL != menu, );
+    menu->installEventFilter(this);
+}
+
+bool MultiClickMenu::eventFilter(QObject *watched, QEvent *event) {
+    CHECK(watched == menu, false);
+    CHECK(isSelectEvent(event), false);
+
+    QAction *action = menu->activeAction();
+    CHECK(NULL != action, false);
+
+    if (action->isEnabled()) {
+        action->trigger();
+        return true;
+    }
+    return false;
+}
+
+bool MultiClickMenu::isSelectEvent(QEvent *event) {
+    if (event->type() == QEvent::MouseButtonRelease) {
+        return true;
+    }
+    if (event->type() == QEvent::KeyPress) {
+        QKeyEvent *keyEvent = dynamic_cast<QKeyEvent*>(event);
+        CHECK(NULL != keyEvent, false);
+        return (keyEvent->key() == Qt::Key_Enter) || (keyEvent->key() == Qt::Key_Return);
+    }
+    return false;
+}
+
+} // U2
diff --git a/src/corelibs/U2Gui/src/util/MultiClickMenu.h b/src/corelibs/U2Gui/src/util/MultiClickMenu.h
new file mode 100644
index 0000000..8edcbdf
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/MultiClickMenu.h
@@ -0,0 +1,48 @@
+/**
+ * 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_MULTI_CLICK_MENU_H_
+#define _U2_MULTI_CLICK_MENU_H_
+
+#include <U2Core/global.h>
+
+class QMenu;
+
+namespace U2 {
+
+/**
+ * Keeps a menu opened after clicking an action or pressing Enter on it.
+ * Becomes a child of a menu and don't need to be deleted.
+ */
+class U2GUI_EXPORT MultiClickMenu : public QObject {
+public:
+    MultiClickMenu(QMenu *menu);
+
+private:
+    bool eventFilter(QObject *watched, QEvent *event);
+    bool isSelectEvent(QEvent *event);
+
+    QMenu *menu;
+};
+
+} // U2
+
+#endif // _U2_MULTI_CLICK_MENU_H_
diff --git a/src/corelibs/U2Gui/src/util/ui/MultipartDocFormatConfiguratorWidget.ui b/src/corelibs/U2Gui/src/util/MultipartDocFormatConfiguratorWidget.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/MultipartDocFormatConfiguratorWidget.ui
rename to src/corelibs/U2Gui/src/util/MultipartDocFormatConfiguratorWidget.ui
diff --git a/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.cpp b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.cpp
index 3dec509..eb2dd3a 100644
--- a/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.cpp
@@ -37,10 +37,13 @@
 
 namespace U2 {
 
-ProjectTreeItemSelectorDialogImpl::ProjectTreeItemSelectorDialogImpl(QWidget* p, const ProjectTreeControllerModeSettings& s) 
+ProjectTreeItemSelectorDialogImpl::ProjectTreeItemSelectorDialogImpl(QWidget* p, const ProjectTreeControllerModeSettings& s)
     : QDialog(p)
 {
     setupUi(this);
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+
     controller = new ProjectTreeController(treeView, s, this);
     connect(controller, SIGNAL(si_doubleClicked(GObject*)), this, SLOT(sl_objectClicked(GObject*)));
     acceptByDoubleClick = false;
diff --git a/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialogBase.ui b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialogBase.ui
new file mode 100644
index 0000000..c558ab4
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialogBase.ui
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ProjectTreeItemSelectorDialogBase</class>
+ <widget class="QDialog" name="ProjectTreeItemSelectorDialogBase">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>712</width>
+    <height>461</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Select Item</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="U2::EditableTreeView" name="treeView">
+     <property name="editTriggers">
+      <set>QAbstractItemView::NoEditTriggers</set>
+     </property>
+     <attribute name="headerVisible">
+      <bool>false</bool>
+     </attribute>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>U2::EditableTreeView</class>
+   <extends>QTreeView</extends>
+   <header location="global">util/project/EditableTreeView.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>ProjectTreeItemSelectorDialogBase</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>355</x>
+     <y>440</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>355</x>
+     <y>230</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>ProjectTreeItemSelectorDialogBase</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>355</x>
+     <y>440</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>355</x>
+     <y>230</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialogImpl.h b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialogImpl.h
index de26cac..0ab3b1a 100644
--- a/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialogImpl.h
+++ b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialogImpl.h
@@ -22,7 +22,7 @@
 #ifndef _U2_PROJECT_TREE_ITEM_SELECTOR_DIALOG_IMPL_H_
 #define _U2_PROJECT_TREE_ITEM_SELECTOR_DIALOG_IMPL_H_
 
-#include "ui/ui_ProjectTreeItemSelectorDialogBase.h"
+#include "ui_ProjectTreeItemSelectorDialogBase.h"
 
 namespace U2 {
 
@@ -31,7 +31,7 @@ class ProjectTreeControllerModeSettings;
 class Document;
 class GObject;
 
-class ProjectTreeItemSelectorDialogImpl: public QDialog, public Ui::ProjectTreeItemSelectorDialogBase {
+class ProjectTreeItemSelectorDialogImpl: public QDialog, public Ui_ProjectTreeItemSelectorDialogBase {
     Q_OBJECT
 public:
     ~ProjectTreeItemSelectorDialogImpl();
diff --git a/src/corelibs/U2Gui/src/util/ui/RangeSelectionDialog.ui b/src/corelibs/U2Gui/src/util/RangeSelectionDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/RangeSelectionDialog.ui
rename to src/corelibs/U2Gui/src/util/RangeSelectionDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/RangeSelector.cpp b/src/corelibs/U2Gui/src/util/RangeSelector.cpp
index 4092606..580ed56 100644
--- a/src/corelibs/U2Gui/src/util/RangeSelector.cpp
+++ b/src/corelibs/U2Gui/src/util/RangeSelector.cpp
@@ -36,7 +36,7 @@
 
 #include "GenbankLocationValidator.h"
 
-#include "ui/ui_RangeSelectionDialog.h"
+#include "ui_RangeSelectionDialog.h"
 #include "RangeSelector.h"
 
 namespace U2 {
@@ -240,7 +240,7 @@ MultipleRangeSelector::MultipleRangeSelector(QWidget* _parent, const QVector<U2R
 
     ui = new Ui_RangeSelectionDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467548");
+    new HelpButton(this, ui->buttonBox, "17470476");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Go"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2Gui/src/util/RegionSelector.cpp b/src/corelibs/U2Gui/src/util/RegionSelector.cpp
index a21d4ad..6a06108 100644
--- a/src/corelibs/U2Gui/src/util/RegionSelector.cpp
+++ b/src/corelibs/U2Gui/src/util/RegionSelector.cpp
@@ -59,229 +59,50 @@ RegionSelector::RegionSelector(QWidget* p, qint64 len, bool isVertical,
     maxLen(len),
     startEdit(NULL),
     endEdit(NULL),
-    isVertical(isVertical),
-    selection(selection),
-    isCircularSelectionAvailable(isCircularSelectionAvailable)
+    isVertical(isVertical)
 {
-    defaultItemText = WHOLE_SEQUENCE;
-
-    if (selection != NULL && !selection->isEmpty()) {
-        U2Region region = getOneRegionFromSelection();
-        presetRegions.prepend(RegionPreset(SELECTED_REGION, region));
-        defaultItemText = SELECTED_REGION;
-    }
-
-    presetRegions.prepend(RegionPreset(WHOLE_SEQUENCE, U2Region(0, maxLen)));
-
     initLayout();
-    init(presetRegions);
-    connectSignals();
-    reset();
+
+    RegionSelectorGui gui(startEdit, endEdit, comboBox);
+    RegionSelectorSettings settings(len, isCircularSelectionAvailable, selection, presetRegions);
+    controller = new RegionSelectorController(gui, settings, this);
+    connect(controller, SIGNAL(si_regionChanged(U2Region)), this, SIGNAL(si_regionChanged(U2Region)));
 }
 
 U2Region RegionSelector::getRegion(bool *_ok) const {
-    bool ok = false;
-    qint64 v1 = startEdit->text().toLongLong(&ok) - 1;
-
-    if (!ok || v1 < 0 || v1 > maxLen) {
-        if (_ok != NULL) {
-            *_ok = false;
-        }
-        return U2Region();
-    }
-
-    int v2 = endEdit->text().toLongLong(&ok);
-
-    if (!ok || v2 <= 0 || v2 > maxLen) {
-        if (_ok != NULL) {
-            *_ok = false;
-        }
-        return U2Region();
-    }
-
-    if (v1 > v2 && !isCircularSelectionAvailable) { // start > end
-        if (_ok != NULL) {
-            *_ok = false;
-        }
-        return U2Region();
-    }
-
-    if (_ok != NULL) {
-        *_ok = true;
-    }
-
-    if (v1 < v2) {
-        return U2Region(v1, v2 - v1);
-    } else {
-        return U2Region(v1, v2 + maxLen - v1);
-    }
+    return controller->getRegion(_ok);
 }
 
 bool RegionSelector::isWholeSequenceSelected() const {
-    return comboBox->currentText() == WHOLE_SEQUENCE;
-}
-
-void RegionSelector::setMaxLength(qint64 length) {
-    maxLen = length;
-    const int wholeSequenceIndex = comboBox->findText(WHOLE_SEQUENCE);
-    comboBox->setItemData(wholeSequenceIndex, qVariantFromValue(U2Region(0, length)));
-    if (wholeSequenceIndex == comboBox->currentIndex()) {
-        sl_onComboBoxIndexChanged(wholeSequenceIndex);
-    }
+    return controller->getPresetName() == RegionSelectorSettings::WHOLE_SEQUENCE;
 }
 
 void RegionSelector::setCustomRegion(const U2Region& value) {
-    if (value.startPos < 0 || value.length > maxLen) {
-        return;
-    }
-
-    if (value == getRegion()) {
-        return;
-    }
-
-    startEdit->setText(QString::number(value.startPos + 1));
-    endEdit->setText(QString::number(value.endPos()));
-
-    if (U2Region(0, maxLen) != value) {
-        comboBox->setCurrentIndex(comboBox->findText(CUSTOM_REGION));
-    }
-
-    emit si_regionChanged(value);
-}
-
-void RegionSelector::setSequenceSelection(DNASequenceSelection *_selection) {
-    disconnect(this, SLOT(sl_onSelectionChanged(GSelection*)));
-    selection = _selection;
-    if (NULL != selection) {
-        connect(selection, SIGNAL(si_onSelectionChanged(GSelection*)), SLOT(sl_onSelectionChanged(GSelection*)));
-        sl_onSelectionChanged(selection);
-    }
+    controller->setRegion(value);
 }
 
 void RegionSelector::setWholeRegionSelected() {
-    comboBox->setCurrentIndex(comboBox->findText(WHOLE_SEQUENCE));
+    controller->setPreset(RegionSelectorSettings::WHOLE_SEQUENCE);
 }
 
-void RegionSelector::setCircularSelectionAvailable(bool allowCircSelection) {
-    isCircularSelectionAvailable = allowCircSelection;
+void RegionSelector::setCurrentPreset(const QString &presetName) {
+    controller->setPreset(presetName);
 }
 
 void RegionSelector::reset() {
-    comboBox->setCurrentIndex(comboBox->findText(defaultItemText));
+    controller->reset();
 }
 
-void RegionSelector::showErrorMessage() {
-    QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox(QMessageBox::NoIcon, L10N::errorTitle(), tr("Invalid sequence region!"), QMessageBox::Ok);
-
-    //set focus to error field
-    bool ok = false;
-    qint64 v1 = startEdit->text().toLongLong(&ok) - 1;
-    if (!ok || v1 <= 0 || v1 > maxLen) {
-        msgBox->setInformativeText(tr("Invalid Start position of region"));
-        msgBox->exec();
-        CHECK(!msgBox.isNull(), );
-        startEdit->setFocus();
-        return;
-    }
-
-    int v2 = endEdit->text().toLongLong(&ok);
-    if (!ok || v2 <= 0 || v2 > maxLen) {
-        msgBox->setInformativeText(tr("Invalid End position of region"));
-        msgBox->exec();
-        CHECK(!msgBox.isNull(), );
-        endEdit->setFocus();
-        return;
-    }
+void RegionSelector::removePreset(const QString &itemName) {
+    controller->removePreset(itemName);
+}
 
-    if (v1 > v2 && !isCircularSelectionAvailable) { // start > end
-        msgBox->setInformativeText(tr("Start position is greater than End position"));
+void RegionSelector::showErrorMessage() {
+    if (controller->hasError()) {
+        QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox(QMessageBox::NoIcon, L10N::errorTitle(), tr("Invalid sequence region!"), QMessageBox::Ok, this);
+        msgBox->setInformativeText(controller->getErrorMessage());
         msgBox->exec();
         CHECK(!msgBox.isNull(), );
-        startEdit->setFocus();
-        return;
-    }
-
-    msgBox->exec();
-}
-
-void RegionSelector::sl_onComboBoxIndexChanged(int index) {
-    if (index == comboBox->findText(CUSTOM_REGION)) {
-        return;
-    }
-
-    const U2Region region = comboBox->itemData(index).value<U2Region>();
-    qint64 start = region.startPos + 1;
-    qint64 end = region.endPos();
-    startEdit->setText(QString::number(start));
-    endEdit->setText(QString::number(end > maxLen ? end - maxLen : end));
-    sl_onValueEdited();
-    sl_onRegionChanged();
-}
-
-void RegionSelector::sl_onRegionChanged() {
-    bool ok = false;
-
-    int v1 = startEdit->text().toInt(&ok);
-    if (!ok || v1 < 1 || v1 > maxLen) {
-        return;
-    }
-
-    int v2 = endEdit->text().toInt(&ok);
-    if (!ok || v2 < 1 || v2 > maxLen) {
-        return;
-    }
-    if (!isCircularSelectionAvailable && v2 < v1) {
-        return;
-    }
-
-    U2Region r;
-    if (v1 <= v2) {
-        r = U2Region(v1 - 1, v2 - (v1 - 1));
-    } else {
-        r = U2Region(v1 - 1, v2 + maxLen - (v1 - 1));
-    }
-    emit si_regionChanged(r);
-}
-
-void RegionSelector::sl_onValueEdited() {
-    if (startEdit->text().isEmpty() || endEdit->text().isEmpty()) {
-        GUIUtils::setWidgetWarning(startEdit, startEdit->text().isEmpty());
-        GUIUtils::setWidgetWarning(endEdit, endEdit->text().isEmpty());
-        // select "custom" in combobox
-        comboBox->setCurrentIndex(comboBox->findText(CUSTOM_REGION));
-        return;
-    }
-
-    const U2Region region = getRegion();
-    if (region != comboBox->itemData(comboBox->currentIndex()).value<U2Region>()) {
-        int currentIndex = comboBox->findText(CUSTOM_REGION);
-        for (int i = 0; i < comboBox->count(); i++) {
-            if (region == comboBox->itemData(i).value<U2Region>()) {
-                currentIndex = i;
-                break;
-            }
-        }
-        comboBox->setCurrentIndex(currentIndex);
-    }
-
-    GUIUtils::setWidgetWarning(startEdit, region.isEmpty());
-    GUIUtils::setWidgetWarning(endEdit, region.isEmpty());
-}
-
-void RegionSelector::sl_onSelectionChanged(GSelection *_selection) {
-    SAFE_POINT(selection == _selection, "Invalid sequence selection", );
-    int selectedRegionIndex = comboBox->findText(SELECTED_REGION);
-    if (-1 == selectedRegionIndex) {
-        selectedRegionIndex = comboBox->findText(WHOLE_SEQUENCE) + 1;
-        comboBox->insertItem(selectedRegionIndex, SELECTED_REGION);
-    }
-
-    U2Region region = getOneRegionFromSelection();
-    if (region != comboBox->itemData(selectedRegionIndex).value<U2Region>()) {
-        comboBox->setItemData(selectedRegionIndex, qVariantFromValue(region));
-        if (selectedRegionIndex == comboBox->currentIndex()) {
-            sl_onComboBoxIndexChanged(selectedRegionIndex);
-        }
     }
 }
 
@@ -339,57 +160,9 @@ void RegionSelector::initLayout() {
     setObjectName("range_selector");
 }
 
-void RegionSelector::init(const QList<RegionPreset> &presetRegions) {
-    foreach(const RegionPreset &presetRegion, presetRegions) {
-        comboBox->addItem(presetRegion.text, qVariantFromValue(presetRegion.region));
-    }
-    comboBox->addItem(CUSTOM_REGION);
-
-    const U2Region region = comboBox->itemData(comboBox->findText(defaultItemText)).value<U2Region>();
-    startEdit->setText(QString::number(region.startPos + 1));
-
-    endEdit->setText(QString::number(region.endPos() > maxLen ? region.endPos() - maxLen : region.endPos()));
-}
-
-void RegionSelector::connectSignals() {
-    connect(comboBox,  SIGNAL(currentIndexChanged(int)),           SLOT(sl_onComboBoxIndexChanged(int)));
-    connect(startEdit, SIGNAL(editingFinished()),                  SLOT(sl_onRegionChanged()));
-    connect(startEdit, SIGNAL(textEdited(const QString &)),        SLOT(sl_onValueEdited()));
-    connect(startEdit, SIGNAL(textChanged(QString)),               SLOT(sl_onRegionChanged()));
-
-    connect(endEdit,   SIGNAL(editingFinished()),                  SLOT(sl_onRegionChanged()));
-    connect(endEdit,   SIGNAL(textEdited(const QString &)),        SLOT(sl_onValueEdited()));
-    connect(endEdit,   SIGNAL(textChanged(QString)),               SLOT(sl_onRegionChanged()));
-
-    if (NULL != selection) {
-        connect(selection, SIGNAL(si_onSelectionChanged(GSelection*)), SLOT(sl_onSelectionChanged(GSelection*)));
-    }
-}
-
-U2Region RegionSelector::getOneRegionFromSelection() const {
-    U2Region region = selection->getSelectedRegions().isEmpty()
-            ? U2Region(0, maxLen)
-            : selection->getSelectedRegions().first();
-    if (selection->getSelectedRegions().size() == 2) {
-        U2Region secondReg = selection->getSelectedRegions().last();
-        bool circularSelection = (region.startPos == 0 && secondReg.endPos() == maxLen)
-                || (region.endPos() == maxLen && secondReg.startPos == 0);
-        if (circularSelection) {
-            if (secondReg.startPos == 0) {
-                region.length += secondReg.length;
-            } else {
-                region.startPos = secondReg.startPos;
-                region.length += secondReg.length;
-            }
-        }
-    }
-
-    return region;
-}
-
 ///////////////////////////////////////
-//RegionLineEdit
-//only for empty field highlight
+//! RegionLineEdit
+//! only for empty field highlight
 void RegionLineEdit::focusOutEvent ( QFocusEvent * event) {
     bool ok = false;
     int value = text().toInt(&ok);
@@ -414,4 +187,5 @@ void RegionLineEdit::sl_onSetMinMaxValue(){
     setText(QString::number(defaultValue));
     emit textEdited(QString::number(defaultValue));
 }
+
 } //namespace
diff --git a/src/corelibs/U2Gui/src/util/RegionSelector.h b/src/corelibs/U2Gui/src/util/RegionSelector.h
index 315f22c..6e45947 100644
--- a/src/corelibs/U2Gui/src/util/RegionSelector.h
+++ b/src/corelibs/U2Gui/src/util/RegionSelector.h
@@ -26,26 +26,34 @@
 #include <U2Core/U2Region.h>
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#include <QtGui/QLineEdit>
-#else
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QLineEdit>
-#endif
+#include <QDialog>
+#include <QLineEdit>
 
 class QComboBox;
 
+#include "RegionSelectorController.h"
+
+
 namespace U2 {
 
-class AnnotatedDNAView;
-class RegionLineEdit;
+class RegionLineEdit : public QLineEdit {
+    Q_OBJECT
+public:
+    RegionLineEdit(QWidget* p, QString actionName, qint64 defVal)
+        : QLineEdit(p),
+          actionName(actionName),
+          defaultValue(defVal) {}
+
+protected:
+    void focusOutEvent ( QFocusEvent * event );
+    void contextMenuEvent(QContextMenuEvent *);
+
+private slots:
+    void sl_onSetMinMaxValue();
 
-struct RegionPreset {
-    RegionPreset() {}
-    RegionPreset(const QString &text, const U2Region &region) : text(text), region(region) {}
-    QString text;
-    U2Region region;
+private:
+    const QString actionName;
+    qint64 defaultValue;
 };
 
 class U2GUI_EXPORT RegionSelector : public QWidget {
@@ -59,13 +67,11 @@ public:
     U2Region getRegion(bool *ok = NULL) const;
     bool isWholeSequenceSelected() const;
 
-    void setMaxLength(qint64 length);
     void setCustomRegion(const U2Region& value);
-    void setSequenceSelection(DNASequenceSelection* selection);
-    void updateSelectedRegion(const U2Region &selectedRegion);
     void setWholeRegionSelected();
-    void setCircularSelectionAvailable(bool allowCircSelection);
+    void setCurrentPreset(const QString &presetName);
     void reset();
+    void removePreset(const QString &itemName);
 
     void showErrorMessage();
 
@@ -76,44 +82,18 @@ public:
 signals:
     void si_regionChanged(const U2Region& newRegion);
 
-private slots:
-    void sl_onComboBoxIndexChanged(int index);
-    void sl_onRegionChanged();
-    void sl_onValueEdited();
-    void sl_onSelectionChanged(GSelection* selection);
-
 private:
     void initLayout();
-    void init(const QList<RegionPreset> &presetRegions);
-    void connectSignals();
 
-    // Returns circular region or the first selected. If none is selected, returns full sequence range.
-    U2Region getOneRegionFromSelection() const;
+    RegionSelectorController* controller;
 
     qint64                maxLen;
     RegionLineEdit *      startEdit;
     RegionLineEdit *      endEdit;
     QComboBox *           comboBox;
     bool                  isVertical;
-    QString               defaultItemText;
-    DNASequenceSelection *selection;
-    bool                  isCircularSelectionAvailable;
 };
 
-class RegionLineEdit : public QLineEdit {
-    Q_OBJECT
-public:
-    RegionLineEdit(QWidget* p, QString actionName, qint64 defVal) : QLineEdit(p), actionName(actionName), defaultValue(defVal){}
-protected:
-    void focusOutEvent ( QFocusEvent * event );
-    void contextMenuEvent(QContextMenuEvent *);
-
-private slots:
-    void sl_onSetMinMaxValue();
-private:
-    const QString actionName;
-    qint64 defaultValue;
-};
 }//namespace
 
 #endif
diff --git a/src/corelibs/U2Gui/src/util/RegionSelectorController.cpp b/src/corelibs/U2Gui/src/util/RegionSelectorController.cpp
new file mode 100644
index 0000000..e0f5e1e
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/RegionSelectorController.cpp
@@ -0,0 +1,347 @@
+/**
+ * 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 "RegionSelectorController.h"
+
+#include <U2Core/DNASequenceSelection.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/GUIUtils.h>
+
+#include <QApplication>
+#include <math.h>
+
+
+namespace U2 {
+
+const QString RegionSelectorSettings::WHOLE_SEQUENCE = QApplication::translate("RegionSelectorController", "Whole sequence");
+const QString RegionSelectorSettings::SELECTED_REGION = QApplication::translate("RegionSelectorController", "Selected region");
+const QString RegionSelectorSettings::CUSTOM_REGION = QApplication::translate("RegionSelectorController", "Custom region");
+
+
+RegionSelectorSettings::RegionSelectorSettings(qint64 maxLen,
+                                               bool isCircularSelectionAvailable,
+                                               DNASequenceSelection* selection,
+                                               QList<RegionPreset> _presetRegions,
+                                               QString defaultPreset)
+    : maxLen(maxLen),
+      selection(selection),
+      circular(isCircularSelectionAvailable),
+      presetRegions(_presetRegions),
+      defaultPreset(defaultPreset) {
+
+    if (selection != NULL && !selection->isEmpty()) {
+        U2Region region = getOneRegionFromSelection();
+        presetRegions.prepend(RegionPreset(SELECTED_REGION, region));
+    }
+    presetRegions.prepend(RegionPreset(WHOLE_SEQUENCE, U2Region(0, maxLen)));
+    presetRegions.prepend(RegionPreset(CUSTOM_REGION, U2Region()));
+}
+
+U2Region RegionSelectorSettings::getOneRegionFromSelection() const {
+    U2Region region = selection->getSelectedRegions().isEmpty()
+            ? U2Region(0, maxLen)
+            : selection->getSelectedRegions().first();
+    if (selection->getSelectedRegions().size() == 2) {
+        U2Region secondReg = selection->getSelectedRegions().last();
+        bool circularSelection = (region.startPos == 0 && secondReg.endPos() == maxLen)
+                || (region.endPos() == maxLen && secondReg.startPos == 0);
+        if (circularSelection) {
+            if (secondReg.startPos == 0) {
+                region.length += secondReg.length;
+            } else {
+                region.startPos = secondReg.startPos;
+                region.length += secondReg.length;
+            }
+        }
+    }
+
+    return region;
+}
+
+RegionSelectorController::RegionSelectorController(RegionSelectorGui gui, RegionSelectorSettings settings, QObject* parent)
+    : QObject(parent),
+      gui(gui),
+      settings(settings) {
+
+    init();
+    setupPresets();
+    connectSlots();
+}
+
+U2Region RegionSelectorController::getRegion(bool *_ok) const {
+    SAFE_POINT_EXT(gui.startLineEdit != NULL && gui.endLineEdit != NULL, *_ok = false, U2Region());
+
+    bool ok = false;
+    qint64 v1 = gui.startLineEdit->text().toLongLong(&ok) - 1;
+
+    if (!ok || v1 < 0 || v1 > settings.maxLen) {
+        if (_ok != NULL) {
+            *_ok = false;
+        }
+        return U2Region();
+    }
+
+    int v2 = gui.endLineEdit->text().toLongLong(&ok);
+
+    if (!ok || v2 <= 0 || v2 > settings.maxLen) {
+        if (_ok != NULL) {
+            *_ok = false;
+        }
+        return U2Region();
+    }
+
+    if (v1 > v2 && !settings.circular) { // start > end
+        if (_ok != NULL) {
+            *_ok = false;
+        }
+        return U2Region();
+    }
+
+    if (_ok != NULL) {
+        *_ok = true;
+    }
+
+    if (v1 < v2) {
+        return U2Region(v1, v2 - v1);
+    } else {
+        return U2Region(v1, v2 + settings.maxLen - v1);
+    }
+}
+
+void RegionSelectorController::setRegion(const U2Region &region) {
+    CHECK(region != getRegion(), );
+    SAFE_POINT(region.startPos >=0 && region.startPos < settings.maxLen && region.length <= settings.maxLen, tr("Region is not in sequence range"), );
+
+    qint64 end = region.endPos();
+    if (end > settings.maxLen) {
+        if (settings.circular) {
+            end = region.endPos() % settings.maxLen;
+        } else {
+            end = settings.maxLen;
+        }
+    }
+
+    gui.startLineEdit->setText(QString::number(region.startPos + 1));
+    gui.endLineEdit->setText(QString::number(end));
+
+    emit si_regionChanged(region);
+}
+
+QString RegionSelectorController::getPresetName() const {
+    SAFE_POINT(gui.presetsComboBox != NULL, tr("Cannot get preset name, ComboBox is NULL"), QString());
+    return gui.presetsComboBox->currentText();
+}
+
+void RegionSelectorController::setPreset(const QString& preset) {
+    SAFE_POINT(gui.presetsComboBox != NULL, tr("Cannot set preset, ComboBox is NULL"), );
+    gui.presetsComboBox->setCurrentText(preset);
+}
+
+void RegionSelectorController::removePreset(const QString& preset) {
+    gui.presetsComboBox->removeItem(gui.presetsComboBox->findText(preset));
+    RegionPreset settingsPreset;
+    foreach (const RegionPreset &r, settings.presetRegions) {
+        if (r.text == preset) {
+            settingsPreset = r;
+            break;
+        }
+    }
+    settings.presetRegions.removeOne(settingsPreset);
+}
+
+void RegionSelectorController::reset() {
+    SAFE_POINT(gui.presetsComboBox != NULL, tr("Cannot set preset, ComboBox is NULL"), );
+    gui.presetsComboBox->setCurrentText(settings.defaultPreset);
+}
+
+bool RegionSelectorController::hasError() const {
+    return !getErrorMessage().isEmpty();
+}
+
+namespace {
+const QString START_IS_INVALID = QApplication::translate("RegionSelectorController", "Invalid Start position of region");
+const QString END_IS_INVALID = QApplication::translate("RegionSelectorController", "Invalid End position of region");
+const QString REGION_IS_INVALID = QApplication::translate("RegionSelectorController", "Start position is greater than End position");
+}
+
+QString RegionSelectorController::getErrorMessage() const {
+    bool ok = false;
+    qint64 v1 = gui.startLineEdit->text().toLongLong(&ok) - 1;
+    if (!ok || v1 < 0 || v1 > settings.maxLen) {
+        return START_IS_INVALID;
+    }
+
+    int v2 = gui.endLineEdit->text().toLongLong(&ok);
+    if (!ok || v2 <= 0 || v2 > settings.maxLen) {
+        return END_IS_INVALID;
+    }
+
+    if (v1 > v2 && !settings.circular) { // start > end
+        return REGION_IS_INVALID;
+    }
+
+    return QString();
+}
+
+void RegionSelectorController::sl_onPresetChanged(int index) {
+    blockSignals(true);
+
+    // set the region
+    if (index == gui.presetsComboBox->findText(RegionSelectorSettings::CUSTOM_REGION)) {
+        connect(this, SIGNAL(si_regionChanged(U2Region)), this, SLOT(sl_regionChanged()));
+        return;
+    }
+
+    if (index == gui.presetsComboBox->findText(RegionSelectorSettings::SELECTED_REGION)) {
+        setRegion(settings.getOneRegionFromSelection());
+    } else {
+        const U2Region region = gui.presetsComboBox->itemData(index).value<U2Region>();
+        setRegion(region);
+    }
+    blockSignals(false);
+}
+
+void RegionSelectorController::sl_regionChanged() {
+    gui.presetsComboBox->blockSignals(true);
+    gui.presetsComboBox->setCurrentIndex(gui.presetsComboBox->findText(RegionSelectorSettings::CUSTOM_REGION));
+    gui.presetsComboBox->blockSignals(false);
+}
+
+void RegionSelectorController::sl_onRegionChanged() {
+    SAFE_POINT(gui.startLineEdit != NULL && gui.endLineEdit != NULL, tr("Region lineEdit is NULL"), );
+
+    bool ok = false;
+
+    int v1 = gui.startLineEdit->text().toInt(&ok);
+    if (!ok || v1 < 1 || v1 > settings.maxLen) {
+        return;
+    }
+
+    int v2 = gui.endLineEdit->text().toInt(&ok);
+    if (!ok || v2 < 1 || v2 > settings.maxLen) {
+        return;
+    }
+    if (!settings.circular && v2 < v1) {
+        return;
+    }
+
+    U2Region r;
+    if (v1 <= v2) {
+        r = U2Region(v1 - 1, v2 - (v1 - 1));
+    } else {
+        r = U2Region(v1 - 1, v2 + settings.maxLen - (v1 - 1));
+    }
+
+    emit si_regionChanged(r);
+}
+
+void RegionSelectorController::sl_onSelectionChanged(GSelection *selection) {
+    CHECK(gui.presetsComboBox != NULL, ); // no combobox - no selection dependency
+
+    SAFE_POINT(settings.selection == selection, "Invalid sequence selection", );
+    int selectedRegionIndex = gui.presetsComboBox->findText(RegionSelectorSettings::SELECTED_REGION);
+    if (-1 == selectedRegionIndex) {
+        selectedRegionIndex = gui.presetsComboBox->findText(RegionSelectorSettings::WHOLE_SEQUENCE) + 1;
+        gui.presetsComboBox->insertItem(selectedRegionIndex, RegionSelectorSettings::SELECTED_REGION);
+    }
+
+    U2Region region = settings.getOneRegionFromSelection();
+    if (region != gui.presetsComboBox->itemData(selectedRegionIndex).value<U2Region>()) {
+        gui.presetsComboBox->setItemData(selectedRegionIndex, qVariantFromValue(region));
+        if (selectedRegionIndex == gui.presetsComboBox->currentIndex()) {
+            sl_onPresetChanged(selectedRegionIndex);
+        }
+    }
+}
+
+void RegionSelectorController::sl_onValueEdited() {
+    SAFE_POINT(gui.startLineEdit != NULL && gui.endLineEdit != NULL, tr("Region lineEdit is NULL"), );
+
+    if (gui.startLineEdit->text().isEmpty() || gui.endLineEdit->text().isEmpty()) {
+        GUIUtils::setWidgetWarning(gui.startLineEdit, gui.startLineEdit->text().isEmpty());
+        GUIUtils::setWidgetWarning(gui.endLineEdit, gui.endLineEdit->text().isEmpty());
+        return;
+    }
+
+    const U2Region region = getRegion();
+    GUIUtils::setWidgetWarning(gui.startLineEdit, region.isEmpty());
+    GUIUtils::setWidgetWarning(gui.endLineEdit, region.isEmpty());
+}
+
+void RegionSelectorController::init() {
+    SAFE_POINT(gui.startLineEdit != NULL && gui.endLineEdit != NULL, tr("Region lineEdit is NULL"), );
+
+    int w = qMax(((int)log10((double)settings.maxLen))*10, 50);
+
+    gui.startLineEdit->setValidator(new QIntValidator(1, settings.maxLen, gui.startLineEdit));
+    gui.startLineEdit->setMinimumWidth(w);
+    gui.startLineEdit->setAlignment(Qt::AlignRight);
+
+    gui.endLineEdit->setValidator(new QIntValidator(1, settings.maxLen, gui.endLineEdit));
+    gui.endLineEdit->setMinimumWidth(w);
+    gui.endLineEdit->setAlignment(Qt::AlignRight);
+
+    setRegion(U2Region(0, settings.maxLen));
+}
+
+void RegionSelectorController::setupPresets() {
+    CHECK(gui.presetsComboBox != NULL, );
+
+    bool foundDefaultPreset = false;
+    foreach(const RegionPreset &presetRegion, settings.presetRegions) {
+        gui.presetsComboBox->addItem(presetRegion.text, QVariant::fromValue(presetRegion.region));
+        if (presetRegion.text == settings.defaultPreset) {
+            foundDefaultPreset = true;
+        }
+    }
+    if (!foundDefaultPreset) {
+        settings.defaultPreset = RegionSelectorSettings::WHOLE_SEQUENCE;
+    }
+
+    gui.presetsComboBox->setCurrentText(settings.defaultPreset);
+    const U2Region region = gui.presetsComboBox->itemData(gui.presetsComboBox->findText(settings.defaultPreset)).value<U2Region>();
+    setRegion(region);
+}
+
+void RegionSelectorController::connectSlots() {
+    SAFE_POINT(gui.startLineEdit != NULL && gui.endLineEdit != NULL, tr("Region lineEdit is NULL"), );
+
+    connect(gui.startLineEdit, SIGNAL(editingFinished()),                  SLOT(sl_onRegionChanged()));
+    connect(gui.startLineEdit, SIGNAL(textEdited(const QString &)),        SLOT(sl_onValueEdited()));
+    connect(gui.startLineEdit, SIGNAL(textChanged(QString)),               SLOT(sl_onRegionChanged()));
+
+    connect(gui.endLineEdit,   SIGNAL(editingFinished()),                  SLOT(sl_onRegionChanged()));
+    connect(gui.endLineEdit,   SIGNAL(textEdited(const QString &)),        SLOT(sl_onValueEdited()));
+    connect(gui.endLineEdit,   SIGNAL(textChanged(QString)),               SLOT(sl_onRegionChanged()));
+
+    if (gui.presetsComboBox != NULL) {
+        connect(gui.presetsComboBox, SIGNAL(currentIndexChanged(int)), SLOT(sl_onPresetChanged(int)));
+        connect(this, SIGNAL(si_regionChanged(U2Region)), this, SLOT(sl_regionChanged()));
+    }
+
+    if (settings.selection != NULL) {
+        connect(settings.selection, SIGNAL(si_onSelectionChanged(GSelection*)), SLOT(sl_onSelectionChanged(GSelection*)));
+    }
+}
+
+
+} // namespace
diff --git a/src/corelibs/U2Gui/src/util/RegionSelectorController.h b/src/corelibs/U2Gui/src/util/RegionSelectorController.h
new file mode 100644
index 0000000..caa2d71
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/RegionSelectorController.h
@@ -0,0 +1,131 @@
+/**
+ * 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_REGION_SELECTOR_CONTROLLER_H_
+#define _U2_REGION_SELECTOR_CONTROLLER_H_
+
+#include <U2Core/global.h>
+
+#include <U2Core/U2Region.h>
+
+#include <QLineEdit>
+#include <QComboBox>
+
+
+namespace U2 {
+
+class DNASequenceSelection;
+class GSelection;
+
+struct RegionSelectorGui {
+    RegionSelectorGui()
+        : startLineEdit(NULL),
+          endLineEdit(NULL),
+          presetsComboBox(NULL) {}
+
+    RegionSelectorGui(QLineEdit* start, QLineEdit* end, QComboBox* presets = NULL)
+        : startLineEdit(start),
+          endLineEdit(end),
+          presetsComboBox(presets) {}
+
+    QLineEdit* startLineEdit;
+    QLineEdit* endLineEdit;
+    QComboBox* presetsComboBox;
+};
+
+struct RegionPreset {
+    RegionPreset() {}
+    RegionPreset(const QString &text, const U2Region &region)
+        : text(text),
+          region(region) {}
+    QString text;
+    U2Region region;
+
+    bool operator ==(const RegionPreset& other) const {
+        return (text == other.text);
+    }
+};
+
+struct RegionSelectorSettings {
+    static const QString WHOLE_SEQUENCE;
+    static const QString SELECTED_REGION;
+    static const QString CUSTOM_REGION;
+
+    RegionSelectorSettings(qint64 maxLen,
+                           bool circular = false,
+                           DNASequenceSelection* selection = NULL,
+                           QList<RegionPreset> presetRegions = QList<RegionPreset>(),
+                           QString defaultPreset = SELECTED_REGION);
+
+    qint64                  maxLen;
+    DNASequenceSelection*   selection;
+    bool                    circular;
+
+    QList<RegionPreset>     presetRegions;
+    QString                 defaultPreset;
+
+    // Returns circular region or the first selected. If none is selected, returns full sequence range.
+    U2Region getOneRegionFromSelection() const;
+};
+
+class RegionSelectorController : public QObject {
+    Q_OBJECT
+public:
+    RegionSelectorController(RegionSelectorGui gui,
+                             RegionSelectorSettings settings,
+                             QObject* parent);
+
+    U2Region getRegion(bool *ok = NULL) const;
+    void setRegion(const U2Region& region);
+
+    QString getPresetName() const;
+    void setPreset(const QString& preset);
+    void removePreset(const QString& preset);
+
+    void reset();
+
+    bool hasError() const;
+    QString getErrorMessage() const;
+
+signals:
+    void si_regionChanged(const U2Region& newRegion);
+
+private slots:
+    //! rename
+    void sl_regionChanged();
+    void sl_onPresetChanged(int index);
+    void sl_onRegionChanged();
+    void sl_onSelectionChanged(GSelection* selection);
+    void sl_onValueEdited();
+
+private:
+    void init();
+    void setupPresets();
+    void connectSlots();
+
+private:
+    RegionSelectorGui       gui;
+    RegionSelectorSettings  settings;
+};
+
+} // namespace
+
+#endif // _U2_REGION_SELECTOR_CONTROLLER_H_
diff --git a/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.cpp b/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.cpp
new file mode 100644
index 0000000..18789f1
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.cpp
@@ -0,0 +1,108 @@
+/**
+ * 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 "RegionSelectorWithExcludedRegion.h"
+
+#include "ui_RegionSelectorWithExcludedRegion.h"
+
+
+namespace U2 {
+
+RegionSelectorWithExludedRegion::RegionSelectorWithExludedRegion(QWidget* parent,
+                                                                 qint64 maxLen,
+                                                                 DNASequenceSelection* selection,
+                                                                 bool isCircularAvailable)
+    : QWidget(parent),
+      ui(new Ui_RegionSelectorWithExcludedRegion) {
+    ui->setupUi(this);
+
+    RegionSelectorGui includeGui(ui->startLineEdit, ui->endLineEdit, ui->presetsComboBox);
+    RegionSelectorGui excludeGui(ui->excludeStartLineEdit, ui->excludeEndLinEdit);
+
+    RegionSelectorSettings settings(maxLen, isCircularAvailable, selection);
+
+    includeController = new RegionSelectorController(includeGui, settings, this);
+    excludeController = new RegionSelectorController(excludeGui, settings, this);
+
+    connectSlots();
+
+    setObjectName("region_selector_with_excluded");
+}
+
+RegionSelectorWithExludedRegion::~RegionSelectorWithExludedRegion() {
+    delete ui;
+}
+
+U2Region RegionSelectorWithExludedRegion::getIncludeRegion(bool *ok) const {
+    return includeController->getRegion(ok);
+}
+
+U2Region RegionSelectorWithExludedRegion::getExcludeRegion(bool *ok) const {
+    if (ui->excludeCheckBox->isChecked()) {
+        return excludeController->getRegion(ok);
+    } else {
+        if (ok != NULL) {
+            *ok = true;
+        }
+        return U2Region();
+    }
+}
+
+void RegionSelectorWithExludedRegion::setIncludeRegion(const U2Region &r) {
+    includeController->setRegion(r);
+}
+
+void RegionSelectorWithExludedRegion::setExcludeRegion(const U2Region &r) {
+    excludeController->setRegion(r);
+}
+
+void RegionSelectorWithExludedRegion::setExcludedCheckboxChecked(bool checked) {
+    ui->excludeCheckBox->setChecked(checked);
+}
+
+bool RegionSelectorWithExludedRegion::hasError() const {
+    return !getErrorMessage().isEmpty();
+}
+
+QString RegionSelectorWithExludedRegion::getErrorMessage() const {
+    if (includeController->hasError()) {
+        return includeController->getErrorMessage();
+    }
+
+    if (ui->excludeCheckBox->isChecked()) {
+        if (excludeController->hasError()) {
+            return excludeController->getErrorMessage();
+        } else {
+            if (excludeController->getRegion().contains(includeController->getRegion())) {
+                return tr("'Exclude' region contains 'Search In' region. Search region is empty.");
+            }
+        }
+    }
+
+    return QString();
+}
+
+void RegionSelectorWithExludedRegion::connectSlots() {
+    connect(ui->excludeCheckBox, SIGNAL(toggled(bool)), ui->excludeWidget, SLOT(setEnabled(bool)));
+
+}
+
+} // namespace
diff --git a/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.h b/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.h
new file mode 100644
index 0000000..5fad0c4
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.h
@@ -0,0 +1,65 @@
+/**
+ * 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_REGION_SELECTOR_WITH_EXCLUDED_REGION_H_
+#define _U2_REGION_SELECTOR_WITH_EXCLUDED_REGION_H_
+
+#include <U2Core/global.h>
+
+#include "RegionSelector.h"
+
+class Ui_RegionSelectorWithExcludedRegion;
+
+
+namespace U2 {
+
+class U2GUI_EXPORT RegionSelectorWithExludedRegion : public QWidget {
+    Q_OBJECT
+public:
+    RegionSelectorWithExludedRegion(QWidget* parent,
+                                    qint64 maxLen,
+                                    DNASequenceSelection* selection = NULL,
+                                    bool isCircularAvailable = false);
+    ~RegionSelectorWithExludedRegion();
+
+    U2Region getIncludeRegion(bool *ok = NULL) const;
+    U2Region getExcludeRegion(bool *ok = NULL) const;
+
+    void setIncludeRegion(const U2Region& r);
+    void setExcludeRegion(const U2Region& r);
+    void setExcludedCheckboxChecked(bool checked);
+
+    bool hasError() const;
+    QString getErrorMessage() const;
+
+private:
+    void connectSlots();
+
+private:
+    Ui_RegionSelectorWithExcludedRegion* ui;
+
+    RegionSelectorController* includeController;
+    RegionSelectorController* excludeController;
+};
+
+} // namespace
+
+#endif // _U2_REGION_SELECTOR_WITH_EXCLUDED_REGION_H_
diff --git a/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.ui b/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.ui
new file mode 100644
index 0000000..3459a38
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.ui
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>RegionSelectorWithExcludedRegion</class>
+ <widget class="QWidget" name="RegionSelectorWithExcludedRegion">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>551</width>
+    <height>100</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="2">
+      <layout class="QHBoxLayout" name="includeRegionLayout">
+       <property name="spacing">
+        <number>0</number>
+       </property>
+       <item>
+        <widget class="QLineEdit" name="startLineEdit">
+         <property name="text">
+          <string>1</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>-</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="endLineEdit"/>
+       </item>
+      </layout>
+     </item>
+     <item row="1" column="2">
+      <widget class="QWidget" name="excludeWidget" native="true">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>120</width>
+         <height>0</height>
+        </size>
+       </property>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <property name="spacing">
+         <number>0</number>
+        </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>
+         <widget class="QLineEdit" name="excludeStartLineEdit">
+          <property name="text">
+           <string>1</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLabel" name="label_3">
+          <property name="text">
+           <string>-</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="excludeEndLinEdit">
+          <property name="text">
+           <string/>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <layout class="QHBoxLayout" name="horizontalLayout_4">
+       <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="QCheckBox" name="excludeCheckBox">
+         <property name="text">
+          <string>Exclude</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item row="0" column="0">
+      <layout class="QHBoxLayout" name="horizontalLayout_3">
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Region</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QComboBox" name="presetsComboBox">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="sizeAdjustPolicy">
+          <enum>QComboBox::AdjustToContents</enum>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/corelibs/U2Gui/src/util/ui/RemovePartFromSequenceDialog.ui b/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/RemovePartFromSequenceDialog.ui
rename to src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp b/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp
index ec7cbf8..6db5f22 100644
--- a/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp
@@ -28,45 +28,45 @@
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/ModifySequenceObjectTask.h>
+#include <U2Core/U2SafePoints.h>
 
+#include <U2Formats/DocumentFormatUtils.h>
 #include <U2Formats/GenbankLocationParser.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "RemovePartFromSequenceDialogController.h"
-#include "ui/ui_RemovePartFromSequenceDialog.h"
+#include "ui_RemovePartFromSequenceDialog.h"
 
 namespace U2{
 
 RemovePartFromSequenceDialogController::RemovePartFromSequenceDialogController(U2Region _toDelete, 
                                                                                U2Region _source, 
-                                                                               const QString & docUrl, QWidget *p)
-    :QDialog(p), filter(""), toDelete(_toDelete), source(_source)
+                                                                               const QString & docUrl,
+                                                                               QWidget *p)
+    : QDialog(p),
+      toDelete(_toDelete),
+      source(_source),
+      ui(new Ui_RemovePartFromSequenceDialog),
+      saveController(NULL)
 {
-    ui = new Ui_RemovePartFromSequenceDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467556");
+    new HelpButton(this, ui->buttonBox, "17470484");
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Remove"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     
-    QFileInfo fi(docUrl);
-    ui->filepathEdit->setText(fi.absoluteDir().absolutePath() + "/" + fi.baseName() + "_new" + "." + fi.completeSuffix());
-    
-    connect(ui->browseButton, SIGNAL(clicked()), SLOT(sl_browseButtonClicked()));
+    initSaveController(docUrl);
+
     SharedAnnotationData ad(new AnnotationData);
     ad->location->regions << toDelete;
     ui->removeLocationEdit->setText(U1AnnotationUtils::buildLocationString(ad));
 
-    connect(ui->formatBox, SIGNAL(currentIndexChanged(int)), this, SLOT(sl_indexChanged(int)));
-
-    ui->formatBox->addItem("FASTA", BaseDocumentFormats::FASTA);
-    ui->formatBox->addItem("Genbank", BaseDocumentFormats::PLAIN_GENBANK);
     connect(ui->mergeAnnotationsBox, SIGNAL(toggled(bool)), this, SLOT(sl_mergeAnnotationsToggled(bool)));
-    sl_indexChanged(0);
 }
 
 void RemovePartFromSequenceDialogController::accept() {
@@ -93,18 +93,9 @@ void RemovePartFromSequenceDialogController::accept() {
         return;
     }
 
-    //this->close();
     QDialog::accept();
 }
 
-void RemovePartFromSequenceDialogController::sl_browseButtonClicked(){
-    LastUsedDirHelper h;
-    
-    h.url = U2FileDialog::getSaveFileName(this, tr("Select file to save..."), h.dir, filter);
-    ui->filepathEdit->setText(h.url);
-    sl_indexChanged(ui->formatBox->currentIndex());
-}
-
 U1AnnotationUtils::AnnotationStrategyForResize RemovePartFromSequenceDialogController::getStrategy(){
     if(ui->removeRB->isChecked()){
         return U1AnnotationUtils::AnnotationStrategyForResize_Remove;
@@ -122,50 +113,53 @@ bool RemovePartFromSequenceDialogController::recalculateQualifiers() const {
     return ui->recalculateQualsCheckBox->isChecked();
 }
 
-void RemovePartFromSequenceDialogController::sl_indexChanged( int index){
-    DocumentFormatId currentId = (ui->formatBox->itemData(index)).toString();
-    filter = DialogUtils::prepareDocumentsFileFilter(currentId, false);
-    DocumentFormat *df = AppContext::getDocumentFormatRegistry()->getFormatById(currentId);
-    QString newExt = df->getSupportedDocumentFileExtensions().first();
-    QString filepath = ui->filepathEdit->text();
-    if (filepath.isEmpty()){
-        return;
+void RemovePartFromSequenceDialogController::sl_mergeAnnotationsToggled( bool ) {
+    const QString fastaFormatName = DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::FASTA);
+    CHECK(!fastaFormatName.isEmpty(), );
+
+    if (ui->mergeAnnotationsBox->isChecked()) {
+        ui->formatBox->removeItem(ui->formatBox->findText(fastaFormatName));
+    } else {
+        ui->formatBox->addItem(fastaFormatName);
     }
-    QFileInfo fi(filepath);
-    ui->filepathEdit->setText(fi.absoluteDir().absolutePath() + "/" + fi.baseName() + "." + newExt);
+    ui->formatBox->model()->sort(0);
 }
 
-void RemovePartFromSequenceDialogController::sl_mergeAnnotationsToggled( bool ){
-    if(ui->mergeAnnotationsBox->isChecked()){
-        ui->formatBox->removeItem(ui->formatBox->findText("FASTA"));
-    }else{
-        ui->formatBox->addItem("FASTA", BaseDocumentFormats::FASTA);
-    }
-    sl_indexChanged(ui->formatBox->findText("Genbank"));
+void RemovePartFromSequenceDialogController::initSaveController(const QString &docUrl) {
+    const QFileInfo fi(docUrl);
+
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = fi.absoluteDir().absolutePath() + "/" + fi.baseName() + "_new" + "." + fi.completeSuffix();
+    config.defaultFormatId = BaseDocumentFormats::FASTA;
+    config.fileDialogButton = ui->browseButton;
+    config.fileNameEdit = ui->filepathEdit;
+    config.formatCombo = ui->formatBox;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file to save...");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::FASTA
+                                                                      << BaseDocumentFormats::PLAIN_GENBANK;
+
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
-bool RemovePartFromSequenceDialogController::modifyCurrentDocument() const
-{
+bool RemovePartFromSequenceDialogController::modifyCurrentDocument() const {
     return !ui->saveToAnotherBox->isChecked();
 }
 
-QString RemovePartFromSequenceDialogController::getNewDocumentPath() const
-{
-    return ui->filepathEdit->text();
+QString RemovePartFromSequenceDialogController::getNewDocumentPath() const {
+    return saveController->getSaveFileName();
 }
 
-bool RemovePartFromSequenceDialogController::mergeAnnotations() const
-{
+bool RemovePartFromSequenceDialogController::mergeAnnotations() const {
     return (ui->mergeAnnotationsBox->isChecked() && !modifyCurrentDocument());
 }
 
-DocumentFormatId RemovePartFromSequenceDialogController::getDocumentFormatId() const
-{
-    return ui->formatBox->itemData(ui->formatBox->currentIndex()).toString();
+DocumentFormatId RemovePartFromSequenceDialogController::getDocumentFormatId() const {
+    return saveController->getFormatIdToSave();
 }
 
-RemovePartFromSequenceDialogController::~RemovePartFromSequenceDialogController()
-{
+RemovePartFromSequenceDialogController::~RemovePartFromSequenceDialogController() {
     delete ui;
 }
 
diff --git a/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.h b/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.h
index 2ab4529..162c7b0 100644
--- a/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.h
+++ b/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.h
@@ -22,18 +22,16 @@
 #ifndef _U2_REMOVE_PART_FROM_SEQUENCE_CONTROLLER_H_
 #define _U2_REMOVE_PART_FROM_SEQUENCE_CONTROLLER_H_
 
+#include <QDialog>
+
 #include <U2Core/U2Region.h>
 #include <U2Core/U1AnnotationUtils.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-
 class Ui_RemovePartFromSequenceDialog;
 
-namespace U2{
+namespace U2 {
+
+class SaveDocumentController;
 
 class U2GUI_EXPORT RemovePartFromSequenceDialogController : public QDialog {
     Q_OBJECT
@@ -51,15 +49,16 @@ public:
     DocumentFormatId getDocumentFormatId() const;
 
 private slots:
-    void sl_browseButtonClicked();
-    void sl_indexChanged(int);
     void sl_mergeAnnotationsToggled(bool);
 
 private:
+    void initSaveController(const QString &docUrl);
+
     QString filter;
     U2Region toDelete;
     U2Region source;
     Ui_RemovePartFromSequenceDialog* ui;
+    SaveDocumentController *saveController;
 };
 
 }//ns
diff --git a/src/corelibs/U2Gui/src/util/SaveDocumentController.cpp b/src/corelibs/U2Gui/src/util/SaveDocumentController.cpp
new file mode 100644
index 0000000..fd3fedb
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/SaveDocumentController.cpp
@@ -0,0 +1,344 @@
+/**
+ * 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 <QCheckBox>
+#include <QComboBox>
+#include <QDir>
+#include <QFileInfo>
+#include <QLineEdit>
+#include <QToolButton>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DocumentUtils.h>
+#include <U2Core/FormatUtils.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/ProjectUtils.h>
+#include <U2Gui/U2FileDialog.h>
+
+#include "SaveDocumentController.h"
+
+namespace U2 {
+
+SaveDocumentControllerConfig::SaveDocumentControllerConfig()
+    : fileNameEdit(NULL),
+      fileDialogButton(NULL),
+      formatCombo(NULL),
+      compressCheckbox(NULL),
+      parentWidget(NULL),
+      rollSuffix("_"),
+      rollFileName(true),
+      rollOutProjectUrls(false) {
+
+}
+
+void SaveDocumentController::SimpleFormatsInfo::addFormat(const QString& name, const QStringList& extensions) {
+    addFormat(name, name, extensions);
+}
+
+void SaveDocumentController::SimpleFormatsInfo::addFormat(const QString& id, const QString& name, const QStringList& _extensions) {
+    extensions.insert(id, _extensions);
+    names.insert(id, name);
+}
+
+QStringList SaveDocumentController::SimpleFormatsInfo::getNames() const {
+    return names.values();
+}
+
+QString SaveDocumentController::SimpleFormatsInfo::getFormatNameById(const QString& id) const {
+    return names.value(id);
+}
+
+QString SaveDocumentController::SimpleFormatsInfo::getFormatNameByExtension(const QString &ext) const {
+    foreach (const QStringList& exts, extensions.values()) {
+        if (exts.contains(ext)) {
+            return names.value(extensions.key(exts));
+        }
+    }
+    return QString();
+}
+
+QString SaveDocumentController::SimpleFormatsInfo::getIdByName(const QString &name) const {
+    return names.key(name);
+}
+
+QStringList SaveDocumentController::SimpleFormatsInfo::getExtensionsByName(const QString &formatName) const {
+    CHECK(names.values().contains(formatName), QStringList());
+    return extensions.value(names.key(formatName));
+}
+
+QString SaveDocumentController::SimpleFormatsInfo::getFirstExtensionByName(const QString &formatName) const {
+    const QStringList extensions = getExtensionsByName(formatName);
+    CHECK(!extensions.isEmpty(), QString());
+    return extensions.first();
+}
+
+#if defined(Q_OS_LINUX) | defined (Q_OS_MAC)
+const QString SaveDocumentController::HOME_DIR_IDENTIFIER = "~/";
+#else
+const QString SaveDocumentController::HOME_DIR_IDENTIFIER = "%UserProfile%/";
+#endif
+
+SaveDocumentController::SaveDocumentController(const SaveDocumentControllerConfig &config,
+                                               const DocumentFormatConstraints &formatCnstr,
+                                               QObject *parent)
+    : QObject(parent),
+      conf(config),
+      overwritingConfirmed(false) {
+    initSimpleFormatInfo(formatCnstr);
+    init();
+}
+
+SaveDocumentController::SaveDocumentController(const SaveDocumentControllerConfig& config,
+                                               const QList<DocumentFormatId>& formats,
+                                               QObject* parent)
+    : QObject(parent),
+      conf(config),
+      overwritingConfirmed(false) {
+    initSimpleFormatInfo(formats);
+    init();
+}
+
+SaveDocumentController::SaveDocumentController(const SaveDocumentControllerConfig &config,
+                                               const SimpleFormatsInfo &formatsDesc,
+                                               QObject *parent)
+    : QObject(parent),
+      conf(config),
+      formatsInfo(formatsDesc),
+      overwritingConfirmed(false) {
+    init();
+}
+
+void SaveDocumentController::addFormat(const QString &id, const QString &name, const QStringList &extenstions) {
+    formatsInfo.addFormat(id, name, extenstions);
+    initFormatComboBox();
+}
+
+QString SaveDocumentController::getSaveFileName() const {
+    QString filePath = conf.fileNameEdit->text();
+    if (QDir::fromNativeSeparators(filePath).startsWith(HOME_DIR_IDENTIFIER, Qt::CaseInsensitive)) {
+        filePath.remove(0, HOME_DIR_IDENTIFIER.length() - 1);
+        filePath.prepend(QDir::homePath());
+    }
+    return filePath;
+}
+
+DocumentFormatId SaveDocumentController::getFormatIdToSave() const {
+    SAFE_POINT(!currentFormat.isEmpty(), "Current format is not set", DocumentFormatId::null);
+    return formatsInfo.getIdByName(currentFormat);
+}
+
+void SaveDocumentController::sl_fileNameChanged(const QString &newName) {
+    GUrl url(newName);
+    QString ext = GUrlUtils::getUncompressedExtension(url);
+    if (!formatsInfo.getExtensionsByName(currentFormat).contains(ext) &&
+            !formatsInfo.getFormatNameByExtension(ext).isEmpty()) {
+        overwritingConfirmed = true;
+        setFormat(formatsInfo.getIdByName(formatsInfo.getFormatNameByExtension(ext)));
+    }
+}
+
+void SaveDocumentController::sl_fileDialogButtonClicked() {
+    QString defaultFilter = prepareDefaultFileFilter();
+    const QString filter = prepareFileFilter();
+
+    QString defaultUrl = getSaveFileName();
+    LastUsedDirHelper lod(conf.defaultDomain, defaultUrl);
+    if (defaultUrl.isEmpty()) {
+        defaultUrl = lod;
+    }
+
+    cutGzExtension(defaultUrl);
+
+    lod.url = U2FileDialog::getSaveFileName(conf.parentWidget, conf.saveTitle, defaultUrl, filter, &defaultFilter);
+    if (lod.url.isEmpty()) {
+        return;
+    }
+
+    addFormatExtension(lod.url);
+    addGzExtension(lod.url);
+    overwritingConfirmed = true;
+    setPath(lod.url);
+}
+
+void SaveDocumentController::sl_formatChanged(const QString &newFormat) {
+    currentFormat = newFormat;
+
+    if (!conf.fileNameEdit->text().isEmpty()) {
+        QString oldPath = conf.fileNameEdit->text();
+        cutGzExtension(oldPath);
+
+        const QFileInfo fileInfo(oldPath);
+        const QString fileExt = formatsInfo.getFirstExtensionByName(newFormat);
+        const QString fileDir = fileInfo.dir().path();
+
+        QString newPath = QString("%1/%2.%3").arg(fileDir).arg(fileInfo.completeBaseName()).arg(fileExt);
+        addGzExtension(newPath);
+        setPath(newPath);
+    }
+
+    emit si_formatChanged(formatsInfo.getIdByName(newFormat));
+}
+
+void SaveDocumentController::sl_compressToggled(bool enable) {
+    CHECK(NULL != conf.compressCheckbox, );
+    QString path = conf.fileNameEdit->text();
+    if (enable) {
+        addGzExtension(path);
+    } else {
+        cutGzExtension(path);
+    }
+    setPath(path);
+}
+
+void SaveDocumentController::init() {
+    QString path = conf.defaultFileName;
+    if (conf.defaultFileName.isEmpty()) {
+        path = conf.fileNameEdit->text();
+    }
+    setPath(path);
+
+    connect(conf.fileNameEdit, SIGNAL(textChanged(const QString&)), SLOT(sl_fileNameChanged(const QString&)));
+    connect(conf.fileNameEdit, SIGNAL(textEdited(const QString&)), SLOT(sl_fileNameChanged(const QString&)));
+
+    if (NULL != conf.compressCheckbox) {
+        connect(conf.compressCheckbox, SIGNAL(toggled(bool)), SLOT(sl_compressToggled(bool)));
+    }
+
+    initFormatComboBox();
+    CHECK(conf.fileDialogButton != NULL, );
+    connect(conf.fileDialogButton, SIGNAL(clicked()), SLOT(sl_fileDialogButtonClicked()));
+}
+
+void SaveDocumentController::initSimpleFormatInfo(DocumentFormatConstraints formatConstraints) {
+    formatConstraints.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
+
+    DocumentFormatRegistry* fr = AppContext::getDocumentFormatRegistry();
+    QList<DocumentFormatId> selectedFormats = fr->selectFormats(formatConstraints);
+    initSimpleFormatInfo(selectedFormats);
+}
+
+void SaveDocumentController::initSimpleFormatInfo(const QList<DocumentFormatId> &formats) {
+    DocumentFormatRegistry* fr = AppContext::getDocumentFormatRegistry();
+    foreach(DocumentFormatId id, formats) {
+        formatsInfo.addFormat(id,
+                              fr->getFormatById(id)->getFormatName(),
+                              fr->getFormatById(id)->getSupportedDocumentFileExtensions());
+    }
+
+}
+
+void SaveDocumentController::initFormatComboBox() {
+    currentFormat = formatsInfo.getFormatNameById(conf.defaultFormatId);
+    CHECK(conf.formatCombo != NULL, );
+
+    conf.formatCombo->blockSignals(true);
+    conf.formatCombo->clear();
+
+    QStringList items = formatsInfo.getNames();
+    items.sort(Qt::CaseInsensitive);
+    conf.formatCombo->addItems(items);
+
+    if (currentFormat.isEmpty()) {
+        currentFormat = conf.formatCombo->itemText(0);
+    }
+    conf.formatCombo->setCurrentText(currentFormat);
+
+    connect(conf.formatCombo, SIGNAL(currentIndexChanged(const QString&)), SLOT(sl_formatChanged(const QString&)), Qt::UniqueConnection);
+    sl_formatChanged(conf.formatCombo->currentText());
+    conf.formatCombo->blockSignals(false);
+}
+
+bool SaveDocumentController::cutGzExtension(QString &path) const {
+    CHECK(NULL != conf.compressCheckbox, false);
+    CHECK(path.endsWith(".gz"), false);
+    path.chop(QString(".gz").length());
+    return true;
+}
+
+void SaveDocumentController::addGzExtension(QString &path) const {
+    CHECK(NULL != conf.compressCheckbox && conf.compressCheckbox->isChecked(), );
+    CHECK(!path.endsWith(".gz"), );
+    path += ".gz";
+}
+
+void SaveDocumentController::addFormatExtension(QString &path) const {
+    bool gzWasCut = cutGzExtension(path);
+    QFileInfo fileInfo(path);
+    const QStringList extensions = formatsInfo.getExtensionsByName(currentFormat);
+    if (!extensions.isEmpty() && !extensions.contains(fileInfo.suffix())) {
+        path += "." + extensions.first();
+    }
+
+    if (gzWasCut) {
+        addGzExtension(path);
+    }
+}
+
+QString SaveDocumentController::prepareDefaultFileFilter() const {
+    QStringList extraExtensions;
+    if (NULL != conf.compressCheckbox) {
+        extraExtensions << ".gz";
+    }
+
+    return FormatUtils::prepareFileFilter(currentFormat, formatsInfo.getExtensionsByName(currentFormat), false, extraExtensions);
+}
+
+QString SaveDocumentController::prepareFileFilter() const {
+    QMap<QString, QStringList> formatsWithExtensions;
+    foreach (const QString &formatName, formatsInfo.getNames()) {
+        formatsWithExtensions.insert(formatName, formatsInfo.getExtensionsByName(formatName));
+    }
+
+    QStringList extraExtensions;
+    if (NULL != conf.compressCheckbox) {
+        extraExtensions << ".gz";
+    }
+
+    return FormatUtils::prepareFileFilter(formatsWithExtensions, false, extraExtensions);
+}
+
+void SaveDocumentController::setPath(const QString &path) {
+    QSet<QString> excludeList;
+    if (conf.rollOutProjectUrls) {
+        excludeList += DocumentUtils::getNewDocFileNameExcludesHint();
+    }
+
+    const QString newPath = (conf.rollFileName && !overwritingConfirmed) ? GUrlUtils::rollFileName(path, conf.rollSuffix, excludeList) : path;
+    conf.fileNameEdit->setText(QDir::toNativeSeparators(newPath));
+    overwritingConfirmed = false;
+    emit si_pathChanged(newPath);
+}
+
+void SaveDocumentController::setFormat(const QString &formatId) {
+    SAFE_POINT(!formatsInfo.getFormatNameById(formatId).isEmpty(), QString("Format '%1' not found in the model"), );
+    if (NULL != conf.formatCombo) {
+        conf.formatCombo->setCurrentText(formatsInfo.getFormatNameById(formatId));
+    } else {
+        sl_formatChanged(formatsInfo.getFormatNameById(formatId));
+    }
+    emit si_formatChanged(formatId);
+}
+
+}
diff --git a/src/corelibs/U2Gui/src/util/SaveDocumentController.h b/src/corelibs/U2Gui/src/util/SaveDocumentController.h
new file mode 100644
index 0000000..1016743
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/SaveDocumentController.h
@@ -0,0 +1,127 @@
+/**
+ * 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_SAVE_DOCUMENT_CONTROLLER_H_
+#define _U2_SAVE_DOCUMENT_CONTROLLER_H_
+
+#include <U2Core/DocumentModel.h>
+
+class QAbstractButton;
+class QCheckBox;
+class QComboBox;
+class QLineEdit;
+
+namespace U2 {
+
+class U2GUI_EXPORT SaveDocumentControllerConfig {
+public:
+    SaveDocumentControllerConfig();
+
+    QLineEdit*                  fileNameEdit;       // edit for file name
+    QAbstractButton*            fileDialogButton;   // a button to open save file dialog
+    QComboBox*                  formatCombo;        // combo widget to list formats
+    QCheckBox*                  compressCheckbox;   // checkbox for the compress option
+
+    QString                     defaultFileName;    // filename set by default
+    DocumentFormatId            defaultFormatId;    // format selected by default
+    QString                     defaultDomain;      // domain for the last directory
+
+    QString                     saveTitle;          // a title for save file dialog
+    QWidget*                    parentWidget;       // parent widget for file dialog
+
+    QString                     rollSuffix;
+    bool                        rollFileName;       // roll filename
+    bool                        rollOutProjectUrls; // filename roll policy, that allows to create project-unique URLs
+};
+
+class U2GUI_EXPORT SaveDocumentController : public QObject {
+    Q_OBJECT
+public:
+    class U2GUI_EXPORT SimpleFormatsInfo {
+    public:
+        void addFormat(const QString& name, const QStringList& extensions);
+        void addFormat(const QString& id, const QString& name, const QStringList& extensions);
+
+        QStringList getNames() const;
+        QStringList getExtensionsByName(const QString& formatName) const;
+        QString getFirstExtensionByName(const QString& formatName) const;
+
+        QString     getFormatNameById(const QString& id) const;
+        QString     getFormatNameByExtension(const QString& ext) const;
+
+        QString     getIdByName(const QString& name) const;
+
+    private:
+        QMap<QString, QStringList>  extensions;
+        QMap<QString, QString>      names;
+
+    };
+
+    SaveDocumentController(const SaveDocumentControllerConfig& config,
+                           const DocumentFormatConstraints& formatConstraints,
+                           QObject* parent);
+    SaveDocumentController(const SaveDocumentControllerConfig& config,
+                           const QList<DocumentFormatId>& formats,
+                           QObject* parent);
+    SaveDocumentController(const SaveDocumentControllerConfig& config,
+                           const SimpleFormatsInfo& formatsDesc,
+                           QObject* parent);
+
+    void addFormat(const QString &id, const QString &name, const QStringList &extenstions);
+
+    void setPath(const QString &path);
+    void setFormat(const QString &formatId);
+
+    QString getSaveFileName() const;
+    DocumentFormatId getFormatIdToSave() const;
+
+signals:
+    void si_formatChanged(const QString &newFormatId);
+    void si_pathChanged(const QString newPath);
+
+private slots:
+    void sl_fileNameChanged(const QString& newName);
+    void sl_fileDialogButtonClicked();
+    void sl_formatChanged(const QString& newFormat);
+    void sl_compressToggled(bool enable);
+
+private:
+    void init();
+    void initSimpleFormatInfo(DocumentFormatConstraints formatConstraints);
+    void initSimpleFormatInfo(const QList<DocumentFormatId>& formats);
+    void initFormatComboBox();
+    bool cutGzExtension(QString &path) const;
+    void addGzExtension(QString &path) const;
+    void addFormatExtension(QString &path) const;
+    QString prepareDefaultFileFilter() const;
+    QString prepareFileFilter() const;
+
+    SaveDocumentControllerConfig    conf;
+    SimpleFormatsInfo               formatsInfo;
+    QString                         currentFormat;
+    bool                            overwritingConfirmed;
+
+    static const QString HOME_DIR_IDENTIFIER;
+};
+
+}   // namespace U2
+
+#endif // _U2_SAVE_DOCUMENT_CONTROLLER_H_
diff --git a/src/corelibs/U2Gui/src/util/SaveDocumentGroupController.cpp b/src/corelibs/U2Gui/src/util/SaveDocumentGroupController.cpp
deleted file mode 100644
index bbc6009..0000000
--- a/src/corelibs/U2Gui/src/util/SaveDocumentGroupController.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * 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/AppContext.h>
-#include <U2Core/GUrlUtils.h>
-
-#include <U2Gui/DialogUtils.h>
-#include <U2Gui/DocumentFormatComboboxController.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/U2FileDialog.h>
-
-#include "SaveDocumentGroupController.h"
-
-namespace U2 {
-
-SaveDocumentGroupController::SaveDocumentGroupController(const SaveDocumentGroupControllerConfig& _conf, QObject* _parent)
-: QObject(_parent)
-{
-    conf = _conf;
-    conf.dfc.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
-
-    if (conf.saveTitle.isEmpty()) {
-        conf.saveTitle = tr("Select file location");
-    }
-    assert(conf.parentWidget!=NULL);
-
-    conf.fileNameEdit->setText(conf.defaultFileName);
-    comboController = new DocumentFormatComboboxController(this, conf.formatCombo, conf.dfc, conf.defaultFormatId);
-
-    connect(conf.fileNameEdit, SIGNAL(textChanged(const QString&)), SLOT(sl_fileNameChanged(const QString&)));
-    connect(conf.fileDialogButton, SIGNAL(clicked()), SLOT(sl_saveButtonClicked()));
-    connect(comboController->comboBox(), SIGNAL(currentIndexChanged ( const QString& )), SLOT(sl_formatChanged(const QString&)));
-    sl_formatChanged(QString());
-}
-
-void SaveDocumentGroupController::sl_fileNameChanged(const QString& newName) {
-    GUrl url(newName);
-    QString ext = GUrlUtils::getUncompressedExtension(url);
-    DocumentFormatRegistry* formatRegistry = AppContext::getDocumentFormatRegistry();
-    DocumentFormat* df = formatRegistry->selectFormatByFileExtension(ext);
-    if(formatRegistry->getFormatById(getFormatIdToSave())->getSupportedDocumentFileExtensions().contains(ext)) return;
-    if (df!=NULL && df->checkConstraints(conf.dfc)) {
-        comboController->setActiveFormatId(df->getFormatId());
-    }
-}
-
-DocumentFormatId SaveDocumentGroupController::getFormatIdToSave() const {
-    return comboController->getActiveFormatId();
-}
-
-void SaveDocumentGroupController::setSelectedFormatId(DocumentFormatId id) {
-    comboController->setActiveFormatId(id);
-}
-
-DocumentFormat* SaveDocumentGroupController::getFormatToSave() const {
-    DocumentFormatId id = getFormatIdToSave();
-    if (id.isEmpty()) {
-        return NULL;
-    }
-    return AppContext::getDocumentFormatRegistry()->getFormatById(id);
-}
-
-void SaveDocumentGroupController::sl_saveButtonClicked() {
-    //prepare filters
-    QString filter = DialogUtils::prepareDocumentsFileFilter(getFormatToSave()->getFormatId(), false);
-
-    // find the default one
-    QStringList extList = getFormatToSave()->getSupportedDocumentFileExtensions();
-
-    // show the dialog
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(conf.parentWidget, conf.saveTitle, lod, filter);
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    QFileInfo f(lod.url);
-    if(!extList.contains(f.suffix())){
-        lod.url.append("." + extList.first());
-    }
-    conf.fileNameEdit->setText(lod.url);
-}
-
-void SaveDocumentGroupController::sl_formatChanged( const QString& )
-{
-    if (conf.fileNameEdit->text().isEmpty()) {
-        return;
-    }
-
-    DocumentFormatId id = comboController->getActiveFormatId();
-    QString fileExt = AppContext::getDocumentFormatRegistry()->getFormatById(id)->getSupportedDocumentFileExtensions().first();
-    GUrl url =  conf.fileNameEdit->text();
-    conf.fileNameEdit->setText(QString("%1/%2.%3").arg(url.dirPath()).arg(url.baseFileName()).arg(fileExt));
-}
-
-} //namespace
diff --git a/src/corelibs/U2Gui/src/util/SaveDocumentGroupController.h b/src/corelibs/U2Gui/src/util/SaveDocumentGroupController.h
deleted file mode 100644
index badaf0e..0000000
--- a/src/corelibs/U2Gui/src/util/SaveDocumentGroupController.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * 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_SAVE_DOCUMENT_GROUP_CONTROLLER_H_
-#define _U2_SAVE_DOCUMENT_GROUP_CONTROLLER_H_
-
-#include <U2Core/DocumentModel.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#include <QtGui/QComboBox>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QToolButton>
-#endif
-
-namespace U2{
-
-
-class DocumentFormatComboboxController;
-
-class SaveDocumentGroupControllerConfig {
-public:
-    DocumentFormatConstraints   dfc;                // format constraints applied for formats combo
-    QToolButton*                fileDialogButton;   // a button to open save file dialog
-    QString                     saveTitle;          // a title for save file dialog
-    QString                     defaultFileName;    // filename set by default
-    QComboBox*                  formatCombo;        // combo widget to list formats
-    QLineEdit*                  fileNameEdit;       // edit for file name
-    DocumentFormatId            defaultFormatId;    // format selected by default
-    QWidget*                    parentWidget;       // parent widget for file dialog
-    QString                     objectName;         // custom object name
-};
-
-/* Controls 'save document' fields :
-    - combo with document format selection
-    - edit field with document name
-*/
-class U2GUI_EXPORT SaveDocumentGroupController : public QObject {
-    Q_OBJECT
-public:
-    SaveDocumentGroupController(const SaveDocumentGroupControllerConfig& conf, QObject* parent);
-    
-    QString getSaveFileName() const {return conf.fileNameEdit->text();}
-    
-    void setSelectedFormatId(DocumentFormatId id);
-
-    DocumentFormatId getFormatIdToSave() const;
-    
-    DocumentFormat* getFormatToSave() const;
-    
-    QString getDefaultFileName() const {return conf.defaultFileName;}
-    
-private slots:
-    void sl_fileNameChanged(const QString& v);
-    void sl_saveButtonClicked();
-    void sl_formatChanged(const QString& newFormat);
-
-private:
-    DocumentFormatComboboxController* comboController;
-    SaveDocumentGroupControllerConfig conf;
-};
-
-}//namespace
-
-#endif
-
diff --git a/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp b/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp
index cd3ed1c..4f4b723 100644
--- a/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp
@@ -40,7 +40,7 @@
 
 #include "ScriptEditorDialog.h"
 #include "ScriptEditorWidget.h"
-#include "ui/ui_ScriptEditorDialog.h"
+#include "ui_ScriptEditorDialog.h"
 
 namespace U2 {
 
@@ -48,7 +48,7 @@ ScriptEditorDialog::ScriptEditorDialog(QWidget* w, const QString& roHeaderText,
 : QDialog(w), ui(new Ui_ScriptEditorDialog())
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467915");
+    new HelpButton(this, ui->buttonBox, "17470841");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Done"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2Gui/src/util/ui/ScriptEditorDialog.ui b/src/corelibs/U2Gui/src/util/ScriptEditorDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/ScriptEditorDialog.ui
rename to src/corelibs/U2Gui/src/util/ScriptEditorDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/ui/SearchGenbankSequenceDialog.ui b/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/SearchGenbankSequenceDialog.ui
rename to src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp b/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp
index 287c019..19478fa 100644
--- a/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp
@@ -35,7 +35,7 @@
 
 #include "DownloadRemoteFileDialog.h"
 #include "SearchGenbankSequenceDialogController.h"
-#include "ui/ui_SearchGenbankSequenceDialog.h"
+#include "ui_SearchGenbankSequenceDialog.h"
 
 namespace U2 {
 
@@ -44,7 +44,7 @@ SearchGenbankSequenceDialogController::SearchGenbankSequenceDialogController(QWi
 {
     ui = new Ui_SearchGenbankSequenceDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467529");
+    new HelpButton(this, ui->buttonBox, "17470456");
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Download"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
@@ -243,7 +243,7 @@ QueryBlockWidget::QueryBlockWidget(QueryBuilderController* controller, bool firs
     layout->setMargin(0);
 
     if (first) {
-        QLabel* label = new QLabel("Term:");
+        QLabel* label = new QLabel(tr("Term:"));
         layout->addWidget(label);
     } else {
         conditionBox = new QComboBox(this);
@@ -254,7 +254,7 @@ QueryBlockWidget::QueryBlockWidget(QueryBuilderController* controller, bool firs
     }
 
     termBox = new QComboBox(this);
-    termBox->addItem("All fields");
+    termBox->addItem(tr("All fields"));
     termBox->addItems(ctx.fields);
     connect(termBox, SIGNAL(currentIndexChanged(int)), controller, SLOT(sl_updateQuery()) );
     termBox->setObjectName("term_box");
diff --git a/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.h b/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.h
index d46f5e1..c5bde20 100644
--- a/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.h
+++ b/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.h
@@ -53,7 +53,7 @@ class NCBISearchContext {
 public:
     NCBISearchContext() {
         rules << "AND" << "OR" << "NOT";
-        fields << "Author" << "Gene name" << "Organism";
+        fields << QObject::tr("Author") << QObject::tr("Gene name") << QObject::tr("Organism");
     }
 
     QStringList fields;
diff --git a/src/corelibs/U2Gui/src/util/ui/SeqPasterWidget.ui b/src/corelibs/U2Gui/src/util/SeqPasterWidget.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/ui/SeqPasterWidget.ui
rename to src/corelibs/U2Gui/src/util/SeqPasterWidget.ui
diff --git a/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.cpp b/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.cpp
index 5b65343..cbf2dbc 100644
--- a/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.cpp
+++ b/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.cpp
@@ -30,7 +30,7 @@
 #include <U2Formats/FastaFormat.h>
 
 #include "SeqPasterWidgetController.h"
-#include "ui/ui_SeqPasterWidget.h"
+#include "ui_SeqPasterWidget.h"
 
 namespace U2{
 
diff --git a/src/corelibs/U2Gui/src/util/U2FileDialog.cpp b/src/corelibs/U2Gui/src/util/U2FileDialog.cpp
index d1134d7..fb33f8c 100644
--- a/src/corelibs/U2Gui/src/util/U2FileDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/U2FileDialog.cpp
@@ -39,7 +39,7 @@ namespace U2 {
 
 QString U2FileDialog::getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options) {
     QString name;
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         name = QFileDialog::getOpenFileName(parent, caption, dir, filter, selectedFilter, options | QFileDialog::DontUseNativeDialog);
     } else {
         name = QFileDialog::getOpenFileName(parent, caption, dir, filter, selectedFilter, options);
@@ -50,7 +50,7 @@ QString U2FileDialog::getOpenFileName(QWidget *parent, const QString &caption, c
 }
 
 QStringList U2FileDialog::getOpenFileNames(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options) {
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         options = options | QFileDialog::DontUseNativeDialog;
     }
     const QStringList result = QFileDialog::getOpenFileNames(parent, caption, dir, filter, selectedFilter, options);
@@ -59,7 +59,7 @@ QStringList U2FileDialog::getOpenFileNames(QWidget *parent, const QString &capti
 }
 
 QString U2FileDialog::getExistingDirectory(QWidget *parent, const QString &caption, const QString &dir, QFileDialog::Options options) {
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         options = options | QFileDialog::DontUseNativeDialog;
     }
     const QString result = QFileDialog::getExistingDirectory(parent, caption, dir, options);
@@ -69,7 +69,7 @@ QString U2FileDialog::getExistingDirectory(QWidget *parent, const QString &capti
 
 QString U2FileDialog::getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options) {
     QString name;
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         name = QFileDialog::getSaveFileName(parent, caption, dir, filter, selectedFilter, options | QFileDialog::DontUseNativeDialog);
     } else {
         name = QFileDialog::getSaveFileName(parent, caption, dir, filter, selectedFilter, options);
diff --git a/src/corelibs/U2Gui/src/util/U2FileDialog.h b/src/corelibs/U2Gui/src/util/U2FileDialog.h
index 0bbf498..2739a8a 100644
--- a/src/corelibs/U2Gui/src/util/U2FileDialog.h
+++ b/src/corelibs/U2Gui/src/util/U2FileDialog.h
@@ -58,12 +58,12 @@ public:
                                         const QString & dir = QString(),
                                         QFileDialog::Options options = QFileDialog::ShowDirsOnly);
 
-    static QString getSaveFileName (QWidget * parent = 0,
-                                    const QString & caption = QString(),
-                                    const QString & dir = QString(),
-                                    const QString & filter = QString(),
-                                    QString * selectedFilter = 0,
-                                    QFileDialog::Options options = 0);
+    static QString getSaveFileName(QWidget * parent = 0,
+                                   const QString & caption = QString(),
+                                   const QString & dir = QString(),
+                                   const QString & filter = QString(),
+                                   QString * selectedFilter = 0,
+                                   QFileDialog::Options options = 0);
 
 private:
     static void activateWindow();
diff --git a/src/corelibs/U2Gui/src/util/project/EditableTreeView.cpp b/src/corelibs/U2Gui/src/util/project/EditableTreeView.cpp
new file mode 100644
index 0000000..e008b3e
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/project/EditableTreeView.cpp
@@ -0,0 +1,36 @@
+/**
+ * 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 "EditableTreeView.h"
+
+
+namespace U2 {
+
+EditableTreeView::EditableTreeView(QWidget *p)
+    : QTreeView(p) {
+
+}
+
+bool EditableTreeView::isEditingActive() {
+    return state() == QAbstractItemView::EditingState;
+}
+
+} // namespace
diff --git a/src/corelibs/U2Gui/src/util/project/EditableTreeView.h b/src/corelibs/U2Gui/src/util/project/EditableTreeView.h
new file mode 100644
index 0000000..383ecc7
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/project/EditableTreeView.h
@@ -0,0 +1,40 @@
+/**
+ * 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_EDITABLE_TREE_VIEW_H_
+#define _U2_EDITABLE_TREE_VIEW_H_
+
+#include <U2Core/global.h>
+#include <QTreeView>
+
+
+namespace U2 {
+
+class U2GUI_EXPORT EditableTreeView : public QTreeView {
+public:
+    EditableTreeView(QWidget* p);
+
+    bool isEditingActive();
+};
+
+} // namespace
+
+#endif // _U2_EDITABLE_TREE_VIEW_H_
diff --git a/src/corelibs/U2Gui/src/util/project/FolderNameDialog.h b/src/corelibs/U2Gui/src/util/project/FolderNameDialog.h
index 54b886c..e665c8f 100644
--- a/src/corelibs/U2Gui/src/util/project/FolderNameDialog.h
+++ b/src/corelibs/U2Gui/src/util/project/FolderNameDialog.h
@@ -35,7 +35,7 @@ class QPushButton;
 
 namespace U2 {
 
-class FolderNameDialog : public QDialog, public Ui::FolderNameDialog {
+class FolderNameDialog : public QDialog, public Ui_FolderNameDialog {
     Q_OBJECT
 public:
     FolderNameDialog(const QString &name, QWidget *parent);
diff --git a/src/corelibs/U2Gui/src/util/project/FolderNameDialog.ui b/src/corelibs/U2Gui/src/util/project/FolderNameDialog.ui
new file mode 100644
index 0000000..f7d0e52
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/project/FolderNameDialog.ui
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FolderNameDialog</class>
+ <widget class="QDialog" name="FolderNameDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>86</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Dialog</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Enter the folder name:</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLineEdit" name="nameEdit"/>
+   </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>FolderNameDialog</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>FolderNameDialog</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/project/ProjectTreeController.cpp b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.cpp
index 90210ad..2492962 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectTreeController.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.cpp
@@ -53,6 +53,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 #include <U2Gui/UnloadDocumentTask.h>
 
+#include "EditableTreeView.h"
 #include "FilteredProjectItemDelegate.h"
 #include "FolderNameDialog.h"
 #include "ProjectFilterProxyModel.h"
@@ -63,9 +64,17 @@
 
 namespace U2 {
 
-ProjectTreeController::ProjectTreeController(QTreeView *tree, const ProjectTreeControllerModeSettings &settings, QObject *parent)
-    : QObject(parent), tree(tree), settings(settings), updater(NULL), model(NULL), filterModel(NULL), previousItemDelegate(NULL),
-    proxyModel(NULL), markActiveView(NULL), objectIsBeingRecycled(NULL), renameInProgress(false)
+ProjectTreeController::ProjectTreeController(EditableTreeView *tree, const ProjectTreeControllerModeSettings &settings, QObject *parent)
+    : QObject(parent),
+      tree(tree),
+      settings(settings),
+      updater(NULL),
+      model(NULL),
+      filterModel(NULL),
+      previousItemDelegate(NULL),
+      proxyModel(NULL),
+      markActiveView(NULL),
+      objectIsBeingRecycled(NULL)
 {
     Project *project = AppContext::getProject();
     SAFE_POINT(NULL != project, "NULL project", );
@@ -533,7 +542,8 @@ void ProjectTreeController::sl_onUnloadSelectedDocuments() {
 
 void ProjectTreeController::sl_onContextMenuRequested(const QPoint &) {
     QMenu m;
-    m.addSeparator();
+    QAction* separator = m.addSeparator();
+    separator->setObjectName(PROJECT_MENU_SEPARATOR_1);
 
     ProjectView *pv = AppContext::getProjectView();
 
@@ -556,22 +566,6 @@ void ProjectTreeController::sl_onContextMenuRequested(const QPoint &) {
          }
     }
 
-    QMenu *editMenu = new QMenu(tr("Edit"), &m);
-    editMenu->menuAction()->setObjectName(ACTION_PROJECT__EDIT_MENU);
-     if(pv != NULL && renameAction->isEnabled()){
-         editMenu->addAction(renameAction);
-     }
-    if (addReadonlyFlagAction->isEnabled()) {
-        editMenu->addAction(addReadonlyFlagAction);
-    }
-    if (removeReadonlyFlagAction->isEnabled()) {
-        editMenu->addAction(removeReadonlyFlagAction);
-    }
-
-    if (!editMenu->actions().isEmpty()) {
-        m.addMenu(editMenu);
-    }
-
     if (emptyRecycleBinAction->isEnabled()) {
         m.addAction(emptyRecycleBinAction);
     }
@@ -579,11 +573,23 @@ void ProjectTreeController::sl_onContextMenuRequested(const QPoint &) {
     if (restoreSelectedItemsAction->isEnabled()) {
         m.addAction(restoreSelectedItemsAction);
     }
+
     if (removeSelectedItemsAction->isEnabled()) {
         removeSelectedItemsAction->setObjectName(ACTION_PROJECT__REMOVE_SELECTED);
         m.addAction(removeSelectedItemsAction);
     }
 
+    if (pv != NULL && renameAction->isEnabled()) {
+        m.addAction(renameAction);
+    }
+
+    if (addReadonlyFlagAction->isEnabled()) {
+        m.addAction(addReadonlyFlagAction);
+    }
+    if (removeReadonlyFlagAction->isEnabled()) {
+        m.addAction(removeReadonlyFlagAction);
+    }
+
     emit si_onPopupMenuRequested(m);
 
     if (loadSelectedDocumentsAction->isEnabled()) {
@@ -629,7 +635,6 @@ void ProjectTreeController::sl_onRename() {
 
     const QModelIndex selectedIndex = NULL == proxyModel ? selection.first() : proxyModel->mapToSource(selection.first());
     CHECK(ProjectViewModel::DOCUMENT != ProjectViewModel::itemType(selectedIndex), );
-    renameInProgress = true;
 
     tree->edit(selectedIndex);
 }
@@ -902,34 +907,22 @@ void ProjectTreeController::sl_onLoadingDocumentProgressChanged() {
     updateLoadingState(doc);
 }
 
-bool isHotkeyPressed(int key) {
-#ifdef Q_OS_MAC
-    return key == Qt::Key_Return || key == Qt::Key_Enter;
-#else
-    return key == Qt::Key_F2;
-#endif // Q_OS_MAC
-}
-
 bool ProjectTreeController::eventFilter(QObject *o, QEvent *e) {
-    QTreeView *tree = dynamic_cast<QTreeView*>(o);
+    EditableTreeView* tree = dynamic_cast<EditableTreeView*>(o);
     CHECK(NULL != tree, false);
+    CHECK(tree == this->tree, false);
 
     if (QEvent::KeyPress == e->type()) {
         QKeyEvent *kEvent = dynamic_cast<QKeyEvent *>(e);
         CHECK(NULL != kEvent, false);
         int key = kEvent->key();
         bool hasSelection = !documentSelection.isEmpty() || !objectSelection.isEmpty() || !folderSelection.isEmpty();
-        if (!renameInProgress && isHotkeyPressed(key) && hasSelection) {
-            if (renameAction->isEnabled()) {
-                sl_onRename();
-            }
-            return true;
-        } else if ((key == Qt::Key_Return || key == Qt::Key_Enter) && hasSelection) {
+        if ((key == Qt::Key_Return || key == Qt::Key_Enter) && hasSelection) {
             if (!objectSelection.isEmpty()) {
                 GObject *obj = objectSelection.getSelectedObjects().last();
                 QModelIndex idx = model->getIndexForObject(obj);
                 CHECK(idx.isValid(), false);
-                if (!model->flags(idx).testFlag(Qt::ItemIsEditable)) {
+                if (!tree->isEditingActive()) {
                     emit si_returnPressed(obj);
                     return true;
                 }
@@ -938,11 +931,8 @@ bool ProjectTreeController::eventFilter(QObject *o, QEvent *e) {
                 Document *doc = documentSelection.getSelectedDocuments().last();
                 emit si_returnPressed(doc);
             }
-            renameInProgress = false;
             return true;
         }
-    } else if (QEvent::FocusOut == e->type() && renameInProgress) {
-        renameInProgress = false;
     }
 
     return false;
@@ -959,14 +949,14 @@ void ProjectTreeController::setupActions() {
     tree->addAction(importToDatabaseAction);
     connect(importToDatabaseAction, SIGNAL(triggered()), SLOT(sl_onImportToDatabase()));
 
-    loadSelectedDocumentsAction = new QAction(QIcon(":core/images/load_selected_documents.png"), tr("Load selected documents"), this);
+    loadSelectedDocumentsAction = new QAction(QIcon(":core/images/load_selected_documents.png"), tr("Load selected document(s)"), this);
     loadSelectedDocumentsAction->setObjectName("action_load_selected_documents");
     loadSelectedDocumentsAction->setShortcuts(QList<QKeySequence>() << Qt::Key_Enter << Qt::Key_Return);
     loadSelectedDocumentsAction->setShortcutContext(Qt::WidgetWithChildrenShortcut);
     tree->addAction(loadSelectedDocumentsAction);
     connect(loadSelectedDocumentsAction, SIGNAL(triggered()), SLOT(sl_onLoadSelectedDocuments()));
 
-    unloadSelectedDocumentsAction = new QAction( QIcon(":core/images/unload_document.png"), tr("Unload selected document"), this);
+    unloadSelectedDocumentsAction = new QAction( QIcon(":core/images/unload_document.png"), tr("Unload selected document(s)"), this);
     connect(unloadSelectedDocumentsAction, SIGNAL(triggered()), SLOT(sl_onUnloadSelectedDocuments()));
 
     addReadonlyFlagAction = new QAction(tr("Lock document for editing"), this);
@@ -980,6 +970,9 @@ void ProjectTreeController::setupActions() {
     renameAction = new QAction(tr("Rename..."), this);
     connect(renameAction, SIGNAL(triggered()), SLOT(sl_onRename()));
     renameAction->setObjectName("Rename");
+    renameAction->setShortcut(QKeySequence(Qt::Key_F2));
+    renameAction->setShortcutContext(Qt::WidgetWithChildrenShortcut);
+    tree->addAction(renameAction);
 
     removeSelectedItemsAction = new QAction(QIcon(":core/images/remove_selected_documents.png"), tr("Remove selected items"), this);
     removeSelectedItemsAction->setShortcut(QKeySequence::Delete);
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h
index c51561a..f48fcfd 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h
+++ b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h
@@ -35,6 +35,7 @@ class QTreeView;
 
 namespace U2 {
 
+class EditableTreeView;
 class GObjectView;
 class MWMDIWindow;
 class ProjectFilterProxyModel;
@@ -46,7 +47,7 @@ class Task;
 class U2GUI_EXPORT ProjectTreeController : public QObject {
     Q_OBJECT
 public:
-    ProjectTreeController(QTreeView *tree, const ProjectTreeControllerModeSettings &settings, QObject *parent);
+    ProjectTreeController(EditableTreeView *tree, const ProjectTreeControllerModeSettings &settings, QObject *parent);
     ~ProjectTreeController();
 
     const DocumentSelection * getDocumentSelection() const;
@@ -153,7 +154,7 @@ private:
     static void excludeUnremovableFoldersFromList(QList<Folder> &folders);
     static bool isSubFolder(const QList<Folder> &folders, const Folder &expectedSubFolder, bool trueIfSamePath);
 
-    QTreeView *tree;
+    EditableTreeView *tree;
     ProjectTreeControllerModeSettings settings;
     ProjectUpdater *updater;
     ProjectViewModel *model;
@@ -179,7 +180,6 @@ private:
     GObjectSelection objectSelection;
     GObjectView *markActiveView;
     GObject *objectIsBeingRecycled;
-    bool renameInProgress;
 
     QHash<Task *, QHash<Document *, QSet<U2DataId> > > task2ObjectsBeingDeleted;
     QHash<Task *, QHash<Document *, QSet<QString> > > task2FoldersBeingDeleted;
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 97283cf..f1a5798 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/FeatureKeyFilterTask.cpp
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/FeatureKeyFilterTask.cpp
@@ -56,8 +56,10 @@ void FeatureKeyFilterTask::filterDocument(Document *doc) {
     CHECK(doc->isLoaded(), );
 
     const U2DbiRef dbiRef = doc->getDbiRef();
+    SAFE_POINT_EXT(dbiRef.isValid(), setError(tr("DbiRef is invalid")), );
     if (!dbiRef2AnnotationTables.contains(dbiRef)) {
         DbiConnection connection(dbiRef, stateInfo);
+        CHECK_OP(stateInfo, );
         SAFE_POINT_EXT(NULL != connection.dbi, stateInfo.setError(L10N::nullPointerError("Database connection")), );
         U2FeatureDbi *featureDbi = connection.dbi->getFeatureDbi();
         SAFE_POINT_EXT(NULL != featureDbi, stateInfo.setError(L10N::nullPointerError("Feature DBI")), );
diff --git a/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.cpp
index 2d1efbf..1467e34 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.cpp
@@ -30,7 +30,7 @@ CommonImportOptionsDialog::CommonImportOptionsDialog(const QString& baseFolder,
     QDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467874");
+    new HelpButton(this, buttonBox, "17470800");
     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 ae6e23f..7ed6e61 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.h
@@ -31,7 +31,7 @@
 
 #include <U2Core/ImportToDatabaseOptions.h>
 
-#include "ui/ui_CommonImportOptionsDialog.h"
+#include "ui_CommonImportOptionsDialog.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ui/CommonImportOptionsDialog.ui b/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/shared_db/ui/CommonImportOptionsDialog.ui
rename to src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp
index 8d4fced..5607d17 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp
@@ -42,10 +42,10 @@ const QString EditConnectionDialog::DEFAULT_PORT = "3306";
 
 EditConnectionDialog::EditConnectionDialog(QWidget *parent, const QString &dbiUrl, const QString &userName, const QString &connectionName) :
     QDialog(parent),
-    ui(new Ui::EditConnectionDialog)
+    ui(new Ui_EditConnectionDialog)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467872");
+    new HelpButton(this, ui->buttonBox, "17470798");
     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 77467e9..8b8e95e 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.h
@@ -31,9 +31,7 @@
 
 #include <U2Core/U2DbiUtils.h>
 
-namespace Ui {
-class EditConnectionDialog;
-}
+class Ui_EditConnectionDialog;
 
 namespace U2 {
 
@@ -62,7 +60,7 @@ private:
     void removeCredentials() const;
     bool checkFields();
 
-    Ui::EditConnectionDialog *ui;
+    Ui_EditConnectionDialog *ui;
 
     static const QString DEFAULT_PORT;
 };
diff --git a/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.ui b/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.ui
new file mode 100644
index 0000000..afe0c84
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.ui
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EditConnectionDialog</class>
+ <widget class="QDialog" name="EditConnectionDialog">
+  <property name="windowModality">
+   <enum>Qt::WindowModal</enum>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>431</width>
+    <height>233</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Connection Settings</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QLabel" name="lblName">
+       <property name="text">
+        <string>Connection name:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="leName">
+       <property name="placeholderText">
+        <string>default</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="mainLayout">
+     <property name="rightMargin">
+      <number>0</number>
+     </property>
+     <item>
+      <widget class="QGroupBox" name="urlLayout">
+       <property name="title">
+        <string>Database location</string>
+       </property>
+       <layout class="QFormLayout" name="formLayout">
+        <property name="fieldGrowthPolicy">
+         <enum>QFormLayout::FieldsStayAtSizeHint</enum>
+        </property>
+        <item row="0" column="0">
+         <widget class="QLabel" name="lblHost">
+          <property name="text">
+           <string>Host:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QLineEdit" name="leHost"/>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="lblPort">
+          <property name="text">
+           <string>Port:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <widget class="QLineEdit" name="lePort">
+          <property name="inputMethodHints">
+           <set>Qt::ImhDigitsOnly</set>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0">
+         <widget class="QLabel" name="lblDatabase">
+          <property name="text">
+           <string>Database:</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="1">
+         <widget class="QLineEdit" name="leDatabase"/>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <widget class="QGroupBox" name="gbUserData">
+       <property name="title">
+        <string>Authentication data</string>
+       </property>
+       <layout class="QVBoxLayout" name="verticalLayout_2">
+        <item>
+         <widget class="U2::AuthenticationWidget" name="authenticationWidget" native="true"/>
+        </item>
+       </layout>
+      </widget>
+     </item>
+    </layout>
+   </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::AuthenticationWidget</class>
+   <extends>QWidget</extends>
+   <header>./util/AuthenticationWidget.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <tabstops>
+  <tabstop>leHost</tabstop>
+  <tabstop>lePort</tabstop>
+  <tabstop>leDatabase</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>EditConnectionDialog</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>EditConnectionDialog</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/shared_db/ImportOptionsWidget.cpp b/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.cpp
index aba4280..ba3522f 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.cpp
@@ -25,13 +25,13 @@
 #include <U2Formats/AceImporter.h>
 
 #include "ImportOptionsWidget.h"
-#include "ui/ui_ImportOptionsWidget.h"
+#include "ui_ImportOptionsWidget.h"
 
 namespace U2 {
 
 ImportOptionsWidget::ImportOptionsWidget(QWidget *parent) :
     QWidget(parent),
-    ui(new Ui::ImportOptionsWidget)
+    ui(new Ui_ImportOptionsWidget)
 {
     ui->setupUi(this);
 }
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.h b/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.h
index 7d3c01f..88500f6 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.h
@@ -31,9 +31,7 @@
 
 #include "U2Core/ImportToDatabaseOptions.h"
 
-namespace Ui {
-class ImportOptionsWidget;
-}
+class Ui_ImportOptionsWidget;
 
 namespace U2 {
 
@@ -50,7 +48,7 @@ public:
     ImportToDatabaseOptions getOptions() const;
 
 private:
-    Ui::ImportOptionsWidget* ui;
+    Ui_ImportOptionsWidget* ui;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ui/ImportOptionsWidget.ui b/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/shared_db/ui/ImportOptionsWidget.ui
rename to src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.ui
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp
index 273bbe5..cf228e1 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp
@@ -46,7 +46,7 @@
 #include "CommonImportOptionsDialog.h"
 #include "ImportToDatabaseDialog.h"
 #include "ItemToImportEditDialog.h"
-#include "ui/ui_ImportToDatabaseDialog.h"
+#include "ui_ImportToDatabaseDialog.h"
 
 namespace U2 {
 
@@ -56,12 +56,12 @@ const QString ImportToDatabaseDialog::OBJECTS_AND_DOCUMENTS = QObject::tr("Docum
 
 ImportToDatabaseDialog::ImportToDatabaseDialog(Document *dbConnection, const QString &defaultFolder, QWidget *parent) :
     QDialog(parent),
-    ui(new Ui::ImportToDatabaseDialog),
+    ui(new Ui_ImportToDatabaseDialog),
     dbConnection(dbConnection),
     baseFolder(U2DbiUtils::makeFolderCanonical(defaultFolder))
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467874");
+    new HelpButton(this, ui->buttonBox, "17470800");
     init();
     connectSignals();
     updateState();
@@ -284,7 +284,7 @@ QStringList ImportToDatabaseDialog::getFilesToImport() {
     QFileDialog::Options additionalOptions;
     Q_UNUSED(additionalOptions);
 #if defined(Q_OS_MAC) || (QT_VERSION >= 0x050000)
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         additionalOptions = QFileDialog::DontUseNativeDialog;
     }
 #endif
@@ -307,7 +307,7 @@ QString ImportToDatabaseDialog::getFolderToImport() {
     QFileDialog::Options additionalOptions;
     Q_UNUSED(additionalOptions);
 #ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         additionalOptions = QFileDialog::DontUseNativeDialog;
     }
 #endif
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.h b/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.h
index 71c3a4a..4b86e27 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.h
@@ -31,10 +31,7 @@
 
 #include <U2Core/ImportToDatabaseOptions.h>
 
-namespace Ui {
-class ImportToDatabaseDialog;
-}
-
+class Ui_ImportToDatabaseDialog;
 class QTreeWidgetItem;
 
 namespace U2 {
@@ -43,7 +40,6 @@ class Document;
 class GObject;
 class ProjectTreeController;
 class Task;
-
 class ImportToDatabaseDialog : public QDialog {
     Q_OBJECT
 
@@ -110,7 +106,7 @@ private:
     void setObjectTooltip(QTreeWidgetItem* item);
     void setDocumentTooltip(QTreeWidgetItem* item);
 
-    Ui::ImportToDatabaseDialog* ui;
+    Ui_ImportToDatabaseDialog* ui;
     Document* dbConnection;
     QString baseFolder;
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ui/ImportToDatabaseDialog.ui b/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/shared_db/ui/ImportToDatabaseDialog.ui
rename to src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp
index b7009fc..24f33e5 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp
@@ -29,10 +29,10 @@ namespace U2 {
 
 ItemToImportEditDialog::ItemToImportEditDialog(const QString &item, const QString &folder, const ImportToDatabaseOptions& options, QWidget *parent) :
     QDialog(parent),
-    ui(new Ui::ItemToImportEditDialog)
+    ui(new Ui_ItemToImportEditDialog)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467874");
+    new HelpButton(this, ui->buttonBox, "17470800");
     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 a22d7f8..f0de431 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.h
@@ -31,9 +31,8 @@
 
 #include <U2Core/ImportToDatabaseOptions.h>
 
-namespace Ui {
-class ItemToImportEditDialog;
-}
+class Ui_ItemToImportEditDialog;
+
 
 namespace U2 {
 
@@ -49,7 +48,7 @@ public:
 
 private:
     void init(const QString &item, const QString &folder, const ImportToDatabaseOptions &options);
-    Ui::ItemToImportEditDialog *ui;
+    Ui_ItemToImportEditDialog *ui;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ui/ItemToImportEditDialog.ui b/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/shared_db/ui/ItemToImportEditDialog.ui
rename to src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp
index 38d4cac..d11d9ac 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp
@@ -47,7 +47,7 @@
 
 #include "EditConnectionDialog.h"
 #include "SharedConnectionsDialog.h"
-#include "ui/ui_SharedConnectionsDialog.h"
+#include "ui_SharedConnectionsDialog.h"
 
 
 static const char * NON_INITED_DB_MB_TITLE = "UGENE Shared Database Setup";
@@ -81,10 +81,10 @@ const QString SharedConnectionsDialog::SETTINGS_RECENT = "/shared_database/recen
 
 SharedConnectionsDialog::SharedConnectionsDialog(QWidget *parent) :
     QDialog(parent),
-    ui(new Ui::SharedConnectionsDialog)
+    ui(new Ui_SharedConnectionsDialog)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467872");
+    new HelpButton(this, ui->buttonBox, "17470798");
 
     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), "17467872");
+        HelpButton(question.data(), question->button(QMessageBox::Help), "17470798");
         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 0e72bd7..065697b 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.h
@@ -31,9 +31,8 @@
 
 #include <U2Core/global.h>
 
-namespace Ui {
-class SharedConnectionsDialog;
-}
+class Ui_SharedConnectionsDialog;
+
 
 class QListWidgetItem;
 class QModelIndex;
@@ -98,7 +97,7 @@ private:
     bool checkDbShouldBeUpgraded(const U2DbiRef &ref);
     void checkDbConnectionDuplicate(const QString &shortDbiUrl, const QString &userName, const QString &allowedDuplicateName = QString());
 
-    Ui::SharedConnectionsDialog *ui;
+    Ui_SharedConnectionsDialog *ui;
     QMap<QListWidgetItem*, Task*> connectionTasks;
     QMap<QListWidgetItem*, Task*> upgradeTasks;
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ui/SharedConnectionsDialog.ui b/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.ui
similarity index 100%
rename from src/corelibs/U2Gui/src/util/shared_db/ui/SharedConnectionsDialog.ui
rename to src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.ui
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ui/EditConnectionDialog.ui b/src/corelibs/U2Gui/src/util/shared_db/ui/EditConnectionDialog.ui
deleted file mode 100644
index 1fb8a9a..0000000
--- a/src/corelibs/U2Gui/src/util/shared_db/ui/EditConnectionDialog.ui
+++ /dev/null
@@ -1,170 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EditConnectionDialog</class>
- <widget class="QDialog" name="EditConnectionDialog">
-  <property name="windowModality">
-   <enum>Qt::WindowModal</enum>
-  </property>
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>431</width>
-    <height>233</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Connection Settings</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <item>
-      <widget class="QLabel" name="lblName">
-       <property name="text">
-        <string>Connection name:</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLineEdit" name="leName">
-       <property name="placeholderText">
-        <string>default</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="mainLayout">
-     <property name="rightMargin">
-      <number>0</number>
-     </property>
-     <item>
-      <widget class="QGroupBox" name="urlLayout">
-       <property name="title">
-        <string>Database location</string>
-       </property>
-       <layout class="QFormLayout" name="formLayout">
-        <property name="fieldGrowthPolicy">
-         <enum>QFormLayout::FieldsStayAtSizeHint</enum>
-        </property>
-        <item row="0" column="0">
-         <widget class="QLabel" name="lblHost">
-          <property name="text">
-           <string>Host:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1">
-         <widget class="QLineEdit" name="leHost"/>
-        </item>
-        <item row="1" column="0">
-         <widget class="QLabel" name="lblPort">
-          <property name="text">
-           <string>Port:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="1">
-         <widget class="QLineEdit" name="lePort">
-          <property name="inputMethodHints">
-           <set>Qt::ImhDigitsOnly</set>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="0">
-         <widget class="QLabel" name="lblDatabase">
-          <property name="text">
-           <string>Database:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="1">
-         <widget class="QLineEdit" name="leDatabase"/>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item>
-      <widget class="QGroupBox" name="gbUserData">
-       <property name="title">
-        <string>Authentication data</string>
-       </property>
-       <layout class="QVBoxLayout" name="verticalLayout_2">
-        <item>
-         <widget class="U2::AuthenticationWidget" name="authenticationWidget" native="true"/>
-        </item>
-       </layout>
-      </widget>
-     </item>
-    </layout>
-   </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::AuthenticationWidget</class>
-   <extends>QWidget</extends>
-   <header>../../src/util/AuthenticationWidget.h</header>
-   <container>1</container>
-  </customwidget>
- </customwidgets>
- <tabstops>
-  <tabstop>leHost</tabstop>
-  <tabstop>lePort</tabstop>
-  <tabstop>leDatabase</tabstop>
-  <tabstop>buttonBox</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>EditConnectionDialog</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>EditConnectionDialog</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/ui/AddNewDocumentDialog.ui b/src/corelibs/U2Gui/src/util/ui/AddNewDocumentDialog.ui
deleted file mode 100644
index abad584..0000000
--- a/src/corelibs/U2Gui/src/util/ui/AddNewDocumentDialog.ui
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>AddNewDocumentDialog</class>
- <widget class="QDialog" name="AddNewDocumentDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>389</width>
-    <height>147</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>389</width>
-    <height>120</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Add New Document</string>
-  </property>
-  <property name="modal">
-   <bool>false</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <property name="sizeConstraint">
-    <enum>QLayout::SetMinAndMaxSize</enum>
-   </property>
-   <item>
-    <layout class="QGridLayout" name="gridLayout_3">
-     <property name="sizeConstraint">
-      <enum>QLayout::SetMinAndMaxSize</enum>
-     </property>
-     <item row="0" column="0">
-      <layout class="QGridLayout" name="gridLayout">
-       <item row="0" column="0">
-        <widget class="QLabel" name="documentTypeLabel">
-         <property name="text">
-          <string>Document format</string>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="0">
-        <widget class="QLabel" name="documentLocationLabel">
-         <property name="text">
-          <string>Document location</string>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="1">
-        <widget class="QLineEdit" name="documentURLEdit"/>
-       </item>
-       <item row="1" column="2">
-        <widget class="QToolButton" name="documentURLButton">
-         <property name="text">
-          <string>...</string>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="1" colspan="2">
-        <widget class="QComboBox" name="documentTypeCombo"/>
-       </item>
-      </layout>
-     </item>
-     <item row="1" column="0">
-      <widget class="QCheckBox" name="gzipCheckBox">
-       <property name="layoutDirection">
-        <enum>Qt::LeftToRight</enum>
-       </property>
-       <property name="text">
-        <string>Compress file</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </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>AddNewDocumentDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>306</x>
-     <y>272</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>306</x>
-     <y>146</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/corelibs/U2Gui/src/util/ui/FolderNameDialog.ui b/src/corelibs/U2Gui/src/util/ui/FolderNameDialog.ui
deleted file mode 100644
index 6ff8cc2..0000000
--- a/src/corelibs/U2Gui/src/util/ui/FolderNameDialog.ui
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>FolderNameDialog</class>
- <widget class="QDialog" name="FolderNameDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>400</width>
-    <height>86</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Dialog</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QLabel" name="label">
-     <property name="text">
-      <string>Enter the folder name:</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLineEdit" name="nameEdit"/>
-   </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>FolderNameDialog</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>FolderNameDialog</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/ui/ProjectTreeItemSelectorDialogBase.ui b/src/corelibs/U2Gui/src/util/ui/ProjectTreeItemSelectorDialogBase.ui
deleted file mode 100644
index 3e447b2..0000000
--- a/src/corelibs/U2Gui/src/util/ui/ProjectTreeItemSelectorDialogBase.ui
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ProjectTreeItemSelectorDialogBase</class>
- <widget class="QDialog" name="ProjectTreeItemSelectorDialogBase">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>712</width>
-    <height>461</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Select Item</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QTreeView" name="treeView">
-     <attribute name="headerVisible">
-      <bool>false</bool>
-     </attribute>
-    </widget>
-   </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>accepted()</signal>
-   <receiver>ProjectTreeItemSelectorDialogBase</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>355</x>
-     <y>440</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>355</x>
-     <y>230</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>ProjectTreeItemSelectorDialogBase</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>355</x>
-     <y>440</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>355</x>
-     <y>230</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/corelibs/U2Gui/transl/english.ts b/src/corelibs/U2Gui/transl/english.ts
index ea3e622..442ff31 100644
--- a/src/corelibs/U2Gui/transl/english.ts
+++ b/src/corelibs/U2Gui/transl/english.ts
@@ -37,22 +37,22 @@
 <context>
     <name>AceImportDialog</name>
     <message>
-        <location filename="../src/util/ImportDialogs/ui/AceImportDialog.ui" line="14"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="14"/>
         <source>Import ACE File</source>
         <translation>Import ACE File</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/ui/AceImportDialog.ui" line="28"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="28"/>
         <source>Source URL:</source>
         <translation>Source URL:</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/ui/AceImportDialog.ui" line="52"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="52"/>
         <source>Destination URL:</source>
         <translation>Destination URL:</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/ui/AceImportDialog.ui" line="62"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="62"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -60,27 +60,27 @@
 <context>
     <name>AddNewDocumentDialog</name>
     <message>
-        <location filename="../src/util/ui/AddNewDocumentDialog.ui" line="20"/>
+        <location filename="../src/util/AddNewDocumentDialog.ui" line="20"/>
         <source>Add New Document</source>
         <translation>Add New Document</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AddNewDocumentDialog.ui" line="39"/>
+        <location filename="../src/util/AddNewDocumentDialog.ui" line="39"/>
         <source>Document format</source>
         <translation>Document format</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AddNewDocumentDialog.ui" line="46"/>
+        <location filename="../src/util/AddNewDocumentDialog.ui" line="46"/>
         <source>Document location</source>
         <translation>Document location</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AddNewDocumentDialog.ui" line="56"/>
+        <location filename="../src/util/AddNewDocumentDialog.ui" line="56"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AddNewDocumentDialog.ui" line="71"/>
+        <location filename="../src/util/AddNewDocumentDialog.ui" line="71"/>
         <source>Compress file</source>
         <translation>Compress file</translation>
     </message>
@@ -88,7 +88,7 @@
 <context>
     <name>AuthenticationDialog</name>
     <message>
-        <location filename="../src/util/ui/AuthenticationDialog.ui" line="23"/>
+        <location filename="../src/util/AuthenticationDialog.ui" line="23"/>
         <source>Authetication</source>
         <translation>Authentification</translation>
     </message>
@@ -96,22 +96,22 @@
 <context>
     <name>AuthenticationWidget</name>
     <message>
-        <location filename="../src/util/ui/AuthenticationWidget.ui" line="14"/>
+        <location filename="../src/util/AuthenticationWidget.ui" line="14"/>
         <source>Authentication</source>
         <translation>Authentication</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AuthenticationWidget.ui" line="33"/>
+        <location filename="../src/util/AuthenticationWidget.ui" line="33"/>
         <source>Login:</source>
         <translation>Login:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AuthenticationWidget.ui" line="40"/>
+        <location filename="../src/util/AuthenticationWidget.ui" line="40"/>
         <source>Password:</source>
         <translation>Password:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AuthenticationWidget.ui" line="47"/>
+        <location filename="../src/util/AuthenticationWidget.ui" line="47"/>
         <source>Remember me</source>
         <translation>Remember me</translation>
     </message>
@@ -119,27 +119,27 @@
 <context>
     <name>BreakpointConditionEditDialog</name>
     <message>
-        <location filename="../src/util/ui/BreakpointConditionEditDialog.ui" line="14"/>
+        <location filename="../src/util/BreakpointConditionEditDialog.ui" line="14"/>
         <source>Breakpoint Condition</source>
         <translation>Breakpoint Condition</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/BreakpointConditionEditDialog.ui" line="26"/>
+        <location filename="../src/util/BreakpointConditionEditDialog.ui" line="26"/>
         <source>When the breakpoint location is reached, the expression is evaluated and<br>the breakpoint is hit only if the expression is true or has changed.</source>
         <translation>When the breakpoint location is reached, the expression is evaluated and<br>the breakpoint is hit only if the expression is true or has changed.</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/BreakpointConditionEditDialog.ui" line="36"/>
+        <location filename="../src/util/BreakpointConditionEditDialog.ui" line="36"/>
         <source>Condition</source>
         <translation>Condition</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/BreakpointConditionEditDialog.ui" line="48"/>
+        <location filename="../src/util/BreakpointConditionEditDialog.ui" line="48"/>
         <source>Is true</source>
         <translation>Is true</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/BreakpointConditionEditDialog.ui" line="61"/>
+        <location filename="../src/util/BreakpointConditionEditDialog.ui" line="61"/>
         <source>Has changed</source>
         <translation>Has changed</translation>
     </message>
@@ -147,7 +147,7 @@
 <context>
     <name>CommonImportOptionsDialog</name>
     <message>
-        <location filename="../src/util/shared_db/ui/CommonImportOptionsDialog.ui" line="14"/>
+        <location filename="../src/util/shared_db/CommonImportOptionsDialog.ui" line="14"/>
         <source>Database Import Default Options</source>
         <translation>Database Import Default Options</translation>
     </message>
@@ -155,7 +155,7 @@
 <context>
     <name>CreateAnnotationDialog</name>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationDialog.ui" line="20"/>
+        <location filename="../src/util/CreateAnnotationDialog.ui" line="20"/>
         <source>Create Annotation</source>
         <translation>Create Annotation</translation>
     </message>
@@ -163,115 +163,115 @@
 <context>
     <name>CreateAnnotationFullWidget</name>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="20"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="20"/>
         <source>Create Annotations</source>
         <translation>Create Annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="51"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="51"/>
         <source>Annotation type:</source>
         <translation>Annotation type:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="103"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="103"/>
         <source>Annotation name</source>
         <translation>Annotation name</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="110"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="110"/>
         <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/ui/CreateAnnotationFullWidget.ui" line="113"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="113"/>
         <source>Use pattern names</source>
         <translation>Use pattern names</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="120"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="120"/>
         <source>Group name</source>
         <translation>Group name</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="127"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="127"/>
         <source>Predefined group names</source>
         <translation>Predefined group names</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="130"/>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="309"/>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="388"/>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="426"/>
+        <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"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="144"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="144"/>
         <source>by type</source>
         <translation>by type</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="154"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="154"/>
         <source>Description</source>
         <translation>Description</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="161"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="161"/>
         <source>auto</source>
         <translation>auto</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="176"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="176"/>
         <source>Location</source>
         <translation>Location</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="208"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="208"/>
         <source>Simple format</source>
         <translation>Simple format</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="234"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="234"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="246"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="246"/>
         <source>Complement</source>
         <translation>Complement</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="281"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="281"/>
         <source>GenBank/EMBL format</source>
         <translation>GenBank/EMBL format</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="299"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="299"/>
         <source>Annotation location in GenBank format</source>
         <translation>Annotation location in GenBank format</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="306"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="306"/>
         <source>Add/remove complement flag</source>
         <translation>Add/remove complement flag</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="353"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="353"/>
         <source>Choose a file to store the annotations</source>
         <translation>Choose a file to store the annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="374"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="374"/>
         <source>Use auto-annotations table</source>
         <translation>Use auto-annotations table</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="406"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="406"/>
         <source>Existing table</source>
         <translation>Existing table</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="416"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="416"/>
         <source>Create new table</source>
         <translation>Create new table</translation>
     </message>
@@ -279,95 +279,95 @@
 <context>
     <name>CreateAnnotationNormalWidget</name>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="20"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="20"/>
         <source>Create Annotations</source>
         <translation>Create Annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="38"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="38"/>
         <source>Choose a file to store the annotations</source>
         <translation>Choose a file to store the annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="50"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="50"/>
         <source>Existing table</source>
         <translation>Existing table</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="67"/>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="95"/>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="147"/>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="188"/>
+        <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"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="78"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="78"/>
         <source>Create new table</source>
         <translation>Create new table</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="102"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="102"/>
         <source>Use auto-annotations table</source>
         <translation>Use auto-annotations table</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="130"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="130"/>
         <source>by type</source>
         <translation>by type</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="137"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="137"/>
         <source>auto</source>
         <translation>auto</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="144"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="144"/>
         <source>Add/remove complement flag</source>
         <translation>Add/remove complement flag</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="158"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="158"/>
         <source>Location</source>
         <translation>Location</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="168"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="168"/>
         <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/ui/CreateAnnotationNormalWidget.ui" line="171"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="171"/>
         <source>Use pattern name</source>
         <translation>Use pattern name</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="178"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="178"/>
         <source>Annotation location in GenBank format</source>
         <translation>Annotation location in GenBank format</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="185"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="185"/>
         <source>Predefined group names</source>
         <translation>Predefined group names</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="199"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="199"/>
         <source>Group name</source>
         <translation>Group name</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="206"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="206"/>
         <source>Annotation name</source>
         <translation>Annotation name</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="213"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="213"/>
         <source>Annotation type</source>
         <translation>Annotation type</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="220"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="220"/>
         <source>Description</source>
         <translation>Description</translation>
     </message>
@@ -375,95 +375,95 @@
 <context>
     <name>CreateAnnotationOptionsPanelWidget</name>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="14"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="32"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="32"/>
         <source>Choose a file to store the annotations</source>
         <translation>Choose a file to store the annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="44"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="44"/>
         <source>Existing table:</source>
         <translation>Existing table:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="63"/>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="95"/>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="148"/>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="215"/>
+        <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"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="76"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="76"/>
         <source>Create new table:</source>
         <translation>Create new table:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="104"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="104"/>
         <source>Use auto-annotations table</source>
         <translation>Use auto-annotations table</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="129"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="129"/>
         <source>Group name:</source>
         <translation>Group name:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="138"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="138"/>
         <source>auto</source>
         <translation>auto</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="145"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="145"/>
         <source>Predefined group names</source>
         <translation>Predefined group names</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="161"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="161"/>
         <source>Annotation type:</source>
         <translation>Annotation type:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="175"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="175"/>
         <source>Annotation name:</source>
         <translation>Annotation name:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="187"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="187"/>
         <source>by type</source>
         <translation>by type</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="196"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="196"/>
         <source>Location:</source>
         <translation>Location:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="205"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="205"/>
         <source>Annotation location in GenBank format</source>
         <translation>Annotation location in GenBank format</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="212"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="212"/>
         <source>Add/remove complement flag</source>
         <translation>Add/remove complement flag</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="228"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="228"/>
         <source>Description:</source>
         <translation>Description:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="238"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="238"/>
         <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/ui/CreateAnnotationOptionsPanelWidget.ui" line="241"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="241"/>
         <source>Use pattern name</source>
         <translation>Use pattern name</translation>
     </message>
@@ -471,32 +471,32 @@
 <context>
     <name>CreateDocumentFromTextDialog</name>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="14"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="14"/>
         <source>Create Document</source>
         <translation>Create Document</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="22"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="22"/>
         <source>Document location:</source>
         <translation>Document location:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="32"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="32"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="39"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="39"/>
         <source>Document format:</source>
         <translation>Document format:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="49"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="49"/>
         <source>Sequence name:</source>
         <translation>Sequence name:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="65"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="65"/>
         <source>Save file immediately</source>
         <translation>Save file immediately</translation>
     </message>
@@ -504,12 +504,12 @@
 <context>
     <name>CreateObjectRelationDialog</name>
     <message>
-        <location filename="../src/util/ui/CreateObjectRelationDialog.ui" line="14"/>
+        <location filename="../src/util/CreateObjectRelationDialog.ui" line="14"/>
         <source>Edit Object Relations</source>
         <translation>Edit Object Relations</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateObjectRelationDialog.ui" line="20"/>
+        <location filename="../src/util/CreateObjectRelationDialog.ui" line="20"/>
         <source>Associate object with:</source>
         <translation>Associate object with:</translation>
     </message>
@@ -517,89 +517,85 @@
 <context>
     <name>DownloadRemoteFileDialog</name>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="26"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="26"/>
         <source>Fetch Data from Remote Database</source>
         <translation>Fetch Data from Remote Database</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="43"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="43"/>
         <source>Resource ID:</source>
         <translation>Resource ID:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="66"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="66"/>
         <source>Database:</source>
         <translation>Database:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="79"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="79"/>
         <source>Save to directory:</source>
         <translation>Save to directory:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="104"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="104"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="123"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="123"/>
         <source>Output format:</source>
         <translation>Output format:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="135"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="135"/>
         <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/ui/DownloadRemoteFileDialog.ui" line="138"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="138"/>
         <source>Force download the appropriate sequence</source>
         <translation>Force download the appropriate sequence</translation>
     </message>
-    <message>
-        <source>DAS features</source>
-        <translation type="vanished">DAS features</translation>
-    </message>
 </context>
 <context>
     <name>EditConnectionDialog</name>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="23"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="23"/>
         <source>Connection Settings</source>
         <translation>Connection Settings</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="31"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="31"/>
         <source>Connection name:</source>
         <translation>Connection name:</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="38"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="38"/>
         <source>default</source>
         <translation>default</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="52"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="52"/>
         <source>Database location</source>
         <translation>Database location</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="61"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="61"/>
         <source>Host:</source>
         <translation>Host:</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="71"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="71"/>
         <source>Port:</source>
         <translation>Port:</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="85"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="85"/>
         <source>Database:</source>
         <translation>Database:</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="98"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="98"/>
         <source>Authentication data</source>
         <translation>Authentication data</translation>
     </message>
@@ -607,17 +603,17 @@
 <context>
     <name>EditQualifierDialog</name>
     <message>
-        <location filename="../src/util/ui/EditQualifierDialog.ui" line="14"/>
+        <location filename="../src/util/EditQualifierDialog.ui" line="14"/>
         <source>Edit Qualifier</source>
         <translation>Edit Qualifier</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditQualifierDialog.ui" line="22"/>
+        <location filename="../src/util/EditQualifierDialog.ui" line="22"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditQualifierDialog.ui" line="34"/>
+        <location filename="../src/util/EditQualifierDialog.ui" line="34"/>
         <source>Value</source>
         <translation>Value</translation>
     </message>
@@ -625,112 +621,112 @@
 <context>
     <name>EditSequenceDialog</name>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="22"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="22"/>
         <source>Annotations region resolving mode</source>
         <translation>Annotations region resolving mode</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="28"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="28"/>
         <source>Expand affected annotation</source>
         <translation>Expand affected annotation</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="38"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="38"/>
         <source>Remove affected annotation</source>
         <translation>Remove affected annotation</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="45"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="45"/>
         <source>Split (join annotation parts)</source>
         <translation>Split (join annotation parts)</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="52"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="52"/>
         <source>Split (separate annotations parts)</source>
         <translation>Split (separate annotations parts)</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="64"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="64"/>
         <source>Recalculate values of qualifiers</source>
         <translation>Recalculate values of qualifiers</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="76"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="76"/>
         <source>Position to insert</source>
         <translation>Position to insert</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="82"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="82"/>
         <source>Press to insert before the start of the sequence</source>
         <translation>Press to insert before the start of the sequence</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="85"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="85"/>
         <source>start</source>
         <translation>start</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="99"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="99"/>
         <source>Press to insert to the end of the sequence</source>
         <translation>Press to insert to the end of the sequence</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="102"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="102"/>
         <source>end</source>
         <translation>end</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="122"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="122"/>
         <source>Selection</source>
         <translation>Selection</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="128"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="128"/>
         <source>Press to insert before the selection</source>
         <translation>Press to insert before the selection</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="131"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="131"/>
         <source>before</source>
         <translation>before</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="138"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="138"/>
         <source>Press to insert after the selection</source>
         <translation>Press to insert after the selection</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="141"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="141"/>
         <source>after</source>
         <translation>after</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="148"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="148"/>
         <source>To change the regsion select it on a sequence</source>
         <translation>To change the region select it on a sequence</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="169"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="169"/>
         <source>Save to new file</source>
         <translation>Save to new file</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="183"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="183"/>
         <source>Document location:</source>
         <translation>Document location:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="193"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="193"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="200"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="200"/>
         <source>Document format:</source>
         <translation>Document format:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="212"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="212"/>
         <source>Merge annotations to this file</source>
         <translation>Merge annotations to this file</translation>
     </message>
@@ -738,32 +734,32 @@
 <context>
     <name>ExportDocumentDialog</name>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="14"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="14"/>
         <source>Export Document</source>
         <translation>Export Document</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="25"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="25"/>
         <source>Save to file</source>
         <translation>Save to file</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="42"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="42"/>
         <source>File format</source>
         <translation>File format</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="35"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="62"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="62"/>
         <source>Add to project</source>
         <translation>Add to project</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="52"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="52"/>
         <source>Compress file</source>
         <translation>Compress file</translation>
     </message>
@@ -771,12 +767,12 @@
 <context>
     <name>FolderNameDialog</name>
     <message>
-        <location filename="../src/util/ui/FolderNameDialog.ui" line="20"/>
+        <location filename="../src/util/project/FolderNameDialog.ui" line="20"/>
         <source>Dialog</source>
         <translation>Dialog</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/FolderNameDialog.ui" line="26"/>
+        <location filename="../src/util/project/FolderNameDialog.ui" line="26"/>
         <source>Enter the folder name:</source>
         <translation>Enter the folder name:</translation>
     </message>
@@ -784,62 +780,58 @@
 <context>
     <name>ImageExportForm</name>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="20"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="20"/>
         <source>Export Image</source>
         <translation>Export Image</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="105"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="105"/>
         <source>File name</source>
         <translation>File name</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="78"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="78"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <source>Export settings</source>
-        <translation type="vanished">Export settings</translation>
-    </message>
-    <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="56"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="56"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="124"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="124"/>
         <source>Format</source>
         <translation>Format</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="237"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="237"/>
         <source>DPI</source>
         <translation>DPI</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="316"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="316"/>
         <source>Width</source>
         <translation>Width</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="296"/>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="344"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="296"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="344"/>
         <source>px</source>
         <translation>px</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="397"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="397"/>
         <source>Hint</source>
         <translation>Hint</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="268"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="268"/>
         <source>Height</source>
         <translation>Height</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="158"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="158"/>
         <source>Quality</source>
         <translation>Quality</translation>
     </message>
@@ -847,62 +839,62 @@
 <context>
     <name>ImportOptionsWidget</name>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="14"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="14"/>
         <source>Import to the Database Options</source>
         <translation>Import to the Database Options</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="22"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="22"/>
         <source>Destination folder:</source>
         <translation>Destination folder:</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="34"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="34"/>
         <source>Files and folders options</source>
         <translation>Files and folders options</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="40"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="40"/>
         <source>Process directories recursively</source>
         <translation>Process directories recursively</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="47"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="47"/>
         <source>Keep folders structure</source>
         <translation>Keep folders structure</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="54"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="54"/>
         <source>Create a subfolder for the top level folder</source>
         <translation>Create a subfolder for the top level folder</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="61"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="61"/>
         <source>Create a subfolder for each file</source>
         <translation>Create a subfolder for each file</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="68"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="68"/>
         <source>Import unrecognized files</source>
         <translation>Import unrecognized files</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="91"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="91"/>
         <source>Multi-sequence files import policy</source>
         <translation>Multi-sequence files import policy</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="97"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="97"/>
         <source>Import as separate sequences</source>
         <translation>Import as separate sequences</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="107"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="107"/>
         <source>Merge into a single sequence</source>
         <translation>Merge into a single sequence</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="132"/>
+        <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; }
@@ -915,37 +907,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;">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/ui/ImportOptionsWidget.ui" line="146"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="146"/>
         <source> bases</source>
         <translation>bases</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="161"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="161"/>
         <source>Join into alignment</source>
         <translation>Join into alignment</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="184"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="184"/>
         <source>Import ACE files as</source>
         <translation>Import ACE files as</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="190"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="190"/>
         <source>Multiple sequence alignment</source>
         <translation>Multiple sequence alignment</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="203"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="203"/>
         <source>Short reads assembly</source>
         <translation>Short reads assembly</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="219"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="219"/>
         <source>Documents and objects options</source>
         <translation>Documents and objects options</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="225"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="225"/>
         <source>Create a subfolder for each document</source>
         <translation>Create a subfolder for each document</translation>
     </message>
@@ -953,42 +945,42 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ImportToDatabaseDialog</name>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="14"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="14"/>
         <source>Import to the Database</source>
         <translation>Import to the Database</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="35"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="35"/>
         <source>Item to import</source>
         <translation>Item to import</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="40"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="40"/>
         <source>Import to</source>
         <translation>Import to</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="50"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="50"/>
         <source>Add files</source>
         <translation>Add files</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="57"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="57"/>
         <source>Add folder</source>
         <translation>Add folder</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="64"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="64"/>
         <source>Add objects</source>
         <translation>Add objects</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="84"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="84"/>
         <source>General options</source>
         <translation>General options</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="91"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="91"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
@@ -996,12 +988,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ItemToImportEditDialog</name>
     <message>
-        <location filename="../src/util/shared_db/ui/ItemToImportEditDialog.ui" line="14"/>
+        <location filename="../src/util/shared_db/ItemToImportEditDialog.ui" line="14"/>
         <source>Edit The Item To Import</source>
         <translation>Edit The Item To Import</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ItemToImportEditDialog.ui" line="22"/>
+        <location filename="../src/util/shared_db/ItemToImportEditDialog.ui" line="22"/>
         <source>Item to import:</source>
         <translation>Item to import:</translation>
     </message>
@@ -1009,22 +1001,22 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>MultipartDocFormatConfiguratorWidget</name>
     <message>
-        <location filename="../src/util/ui/MultipartDocFormatConfiguratorWidget.ui" line="19"/>
+        <location filename="../src/util/MultipartDocFormatConfiguratorWidget.ui" line="19"/>
         <source>Create annotation</source>
         <translation>Create annotation</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/MultipartDocFormatConfiguratorWidget.ui" line="25"/>
+        <location filename="../src/util/MultipartDocFormatConfiguratorWidget.ui" line="25"/>
         <source>Separate sequences</source>
         <translation>Separate sequences</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/MultipartDocFormatConfiguratorWidget.ui" line="32"/>
+        <location filename="../src/util/MultipartDocFormatConfiguratorWidget.ui" line="32"/>
         <source>Merge sequences</source>
         <translation>Merge sequences</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/MultipartDocFormatConfiguratorWidget.ui" line="41"/>
+        <location filename="../src/util/MultipartDocFormatConfiguratorWidget.ui" line="41"/>
         <source>Gap length:</source>
         <translation>Gap length:</translation>
     </message>
@@ -1032,7 +1024,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ProjectTreeItemSelectorDialogBase</name>
     <message>
-        <location filename="../src/util/ui/ProjectTreeItemSelectorDialogBase.ui" line="14"/>
+        <location filename="../src/util/ProjectTreeItemSelectorDialogBase.ui" line="14"/>
         <source>Select Item</source>
         <translation>Select Item</translation>
     </message>
@@ -1090,24 +1082,24 @@ Remove it from the project first.</translation>
         <translation>Error! No object DBI</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="1098"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="1091"/>
         <source>Confirm Deletion</source>
         <translation>Confirm Deletion</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="1099"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="1092"/>
         <source>Are you sure you want to delete items in Recycle Bin?
 The items cannot be recovered once deleted.</source>
         <translation>Are you sure you want to delete items in Recycle Bin?
 The items cannot be recovered once deleted.</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="1112"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="1105"/>
         <source>Unable to Remove</source>
         <translation>Unable to Remove</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="1113"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="1106"/>
         <source>Some of selected objects are being used by the other users of the database. Try to remove them later.</source>
         <translation>Some of selected objects are being used by the other users of the database. Try to remove them later.</translation>
     </message>
@@ -1136,51 +1128,66 @@ The items cannot be recovered once deleted.</translation>
         <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"/>
+        <source>Author</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="56"/>
+        <source>Gene name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="56"/>
+        <source>Organism</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RangeSelectionDialog</name>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="14"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="14"/>
         <source>Region Selection</source>
         <translation>Region Selection</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="31"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="31"/>
         <source>    Region:</source>
         <translation>Region:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="41"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="41"/>
         <source>Single Range Selection</source>
         <translation>Single Range Selection</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="51"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="51"/>
         <source>Multiple Range Selection</source>
         <translation>Multiple Range Selection</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="70"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="70"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="86"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="86"/>
         <source>    Multi Region:</source>
         <translation>    Multi Region:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="96"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="96"/>
         <source>Input Format: 1..10,50..60</source>
         <translation>Input Format: 1..10,50..60</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="116"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="116"/>
         <source>Min</source>
         <translation>Min</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="123"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="123"/>
         <source>Max</source>
         <translation>Max</translation>
     </message>
@@ -1204,59 +1211,122 @@ The items cannot be recovered once deleted.</translation>
     </message>
 </context>
 <context>
+    <name>RegionSelectorController</name>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="35"/>
+        <source>Whole sequence</source>
+        <translation type="unfinished">Whole sequence</translation>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="36"/>
+        <source>Selected region</source>
+        <translation type="unfinished">Selected region</translation>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="37"/>
+        <source>Custom region</source>
+        <translation type="unfinished">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>
+    </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>
+    </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>
+    </message>
+</context>
+<context>
+    <name>RegionSelectorWithExcludedRegion</name>
+    <message>
+        <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">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>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="34"/>
+        <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="80"/>
+        <source>-</source>
+        <translation type="unfinished">-</translation>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="112"/>
+        <source>Exclude</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="129"/>
+        <source>Region</source>
+        <translation type="unfinished">Region</translation>
+    </message>
+</context>
+<context>
     <name>RemovePartFromSequenceDialog</name>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="40"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="40"/>
         <source>Region to remove</source>
         <translation>Region to remove</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="128"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="128"/>
         <source>Annotations region resolving mode</source>
         <translation>Annotations region resolving mode</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="32"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="32"/>
         <source>Remove Subsequence</source>
         <translation>Remove Subsequence</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="134"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="134"/>
         <source>Crop corresponding annotation</source>
         <translation>Crop corresponding annotation</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="144"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="144"/>
         <source>Remove corresponding annotation</source>
         <translation>Remove corresponding annotation</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="68"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="68"/>
         <source>Save to new file</source>
         <translation>Save to new file</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="80"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="80"/>
         <source>Merge annotations to this file</source>
         <translation>Merge annotations to this file</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="89"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="89"/>
         <source>Document location:</source>
         <translation>Document location:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="99"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="99"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="106"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="106"/>
         <source>Document format:</source>
         <translation>Document format:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="156"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="156"/>
         <source>Recalculate values of qualifiers</source>
         <translation>Recalculate values of qualifiers</translation>
     </message>
@@ -1264,47 +1334,47 @@ The items cannot be recovered once deleted.</translation>
 <context>
     <name>ScriptEditorDialog</name>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="20"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="20"/>
         <source>Used script</source>
         <translation>Used script</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="30"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="30"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="55"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="55"/>
         <source>Script text</source>
         <translation>Script text</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="67"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="67"/>
         <source>Check syntax</source>
         <translation>Check syntax</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="74"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="74"/>
         <source>Save as...</source>
         <translation>Save as...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="88"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="88"/>
         <source>Save</source>
         <translation>Save</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="81"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="81"/>
         <source>Clear</source>
         <translation>Clear</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="14"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="14"/>
         <source>Script Editor</source>
         <translation>Script Editor</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="108"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="108"/>
         <source>Line:</source>
         <translation>Line:</translation>
     </message>
@@ -1312,52 +1382,52 @@ The items cannot be recovered once deleted.</translation>
 <context>
     <name>SearchGenbankSequenceDialog</name>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="20"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="20"/>
         <source>NCBI Sequence Search</source>
         <translation>NCBI Sequence Search</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="39"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="39"/>
         <source>Database:</source>
         <translation>Database:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="64"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="64"/>
         <source>Search query:</source>
         <translation>Search query:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="102"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="102"/>
         <source>History...</source>
         <translation>History...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="111"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="111"/>
         <source>Results:</source>
         <translation>Results:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="128"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="128"/>
         <source>ID</source>
         <translation>ID</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="133"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="133"/>
         <source>Desc</source>
         <translation>Desc</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="138"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="138"/>
         <source>Size</source>
         <translation>Size</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="148"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="148"/>
         <source>Result limit:</source>
         <translation>Result limit:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="181"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="181"/>
         <source>Search</source>
         <translation>Search</translation>
     </message>
@@ -1365,32 +1435,32 @@ The items cannot be recovered once deleted.</translation>
 <context>
     <name>SeqPasterWidget</name>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="14"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="14"/>
         <source>Create annotation</source>
         <translation>Create annotation</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="32"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="32"/>
         <source>Paste data here</source>
         <translation>Paste data here</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="52"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="52"/>
         <source>Custom settings</source>
         <translation>Custom settings</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="67"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="67"/>
         <source>Alphabet:</source>
         <translation>Alphabet:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="77"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="77"/>
         <source>Skip unknown symbols</source>
         <translation>Skip unknown symbols</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="87"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="87"/>
         <source>Replace unknown symbols with</source>
         <translation>Replace unknown symbols with</translation>
     </message>
@@ -1398,32 +1468,32 @@ The items cannot be recovered once deleted.</translation>
 <context>
     <name>SharedConnectionsDialog</name>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="17"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="17"/>
         <source>Shared Databases Connections</source>
         <translation>Shared Databases Connections</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="43"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="43"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="56"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="56"/>
         <source>Delete</source>
         <translation>Delete</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="69"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="69"/>
         <source>Edit</source>
         <translation>Edit</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="101"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="101"/>
         <source>Connect</source>
         <translation>Connect</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="114"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="114"/>
         <source>Disconnect</source>
         <translation>Disconnect</translation>
     </message>
@@ -1431,34 +1501,39 @@ The items cannot be recovered once deleted.</translation>
 <context>
     <name>U2::AceImportDialog</name>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="67"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="132"/>
         <source>Destination UGENEDB file</source>
         <translation>Destination UGENEDB file</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="78"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="66"/>
         <source>Destination URL is not specified</source>
         <translation>Destination URL is not specified</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="84"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="52"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="72"/>
         <source>Destination URL must point to a local file</source>
         <translation>Destination URL must point to a local file</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="92"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="80"/>
         <source>There is opened view with destination file.
 Close it or choose different file</source>
         <translation>There is opened view with destination file.
 Close it or choose different file</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="102"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="90"/>
         <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>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="110"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="98"/>
         <source>Destination file already exists.
 To overwrite the file, press 'Replace'.
 To append data to existing file press 'Append'.</source>
@@ -1467,22 +1542,23 @@ 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="113"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="101"/>
         <source>Replace</source>
         <translation>Replace</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="114"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="102"/>
         <source>Append</source>
         <translation>Append</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="115"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="53"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="103"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="119"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="107"/>
         <source>Destination file '%1' cannot be removed</source>
         <translation>Destination file '%1' cannot be removed</translation>
     </message>
@@ -1490,24 +1566,24 @@ To append data to existing file press 'Append'.</translation>
 <context>
     <name>U2::AddDocumentAndOpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="311"/>
-        <location filename="../src/OpenViewTask.cpp" line="325"/>
+        <location filename="../src/OpenViewTask.cpp" line="332"/>
+        <location filename="../src/OpenViewTask.cpp" line="346"/>
         <source>Opening view for document: 'NONAME'</source>
         <translation>Opening view for document: 'NONAME'</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="315"/>
-        <location filename="../src/OpenViewTask.cpp" line="328"/>
+        <location filename="../src/OpenViewTask.cpp" line="336"/>
+        <location filename="../src/OpenViewTask.cpp" line="349"/>
         <source>Opening view for document: %1</source>
         <translation>Opening view for document: %1</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="317"/>
+        <location filename="../src/OpenViewTask.cpp" line="338"/>
         <source>Provided document is NULL</source>
         <translation>Provided document is NULL</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="330"/>
+        <location filename="../src/OpenViewTask.cpp" line="351"/>
         <source>Document provider is NULL</source>
         <translation>Document provider is NULL</translation>
     </message>
@@ -1515,24 +1591,38 @@ To append data to existing file press 'Append'.</translation>
 <context>
     <name>U2::AddNewDocumentDialogImpl</name>
     <message>
-        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="60"/>
+        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="61"/>
         <source>Create</source>
         <translation>Create</translation>
     </message>
     <message>
-        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="61"/>
+        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="62"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="76"/>
+        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="71"/>
+        <source>Save File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="82"/>
+        <source>Invalid Document Location</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="82"/>
+        <source>Document location is empty</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="96"/>
         <source>Project is locked</source>
         <translation>Project is locked</translation>
     </message>
     <message>
-        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="144"/>
         <source>Save file</source>
-        <translation>Save file</translation>
+        <translation type="vanished">Save file</translation>
     </message>
 </context>
 <context>
@@ -1572,20 +1662,33 @@ To append data to existing file press 'Append'.</translation>
     </message>
 </context>
 <context>
+    <name>U2::BreakpointConditionEditDialog</name>
+    <message>
+        <location filename="../src/util/BreakpointConditionEditDialog.cpp" line="39"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/util/BreakpointConditionEditDialog.cpp" line="40"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+</context>
+<context>
     <name>U2::CreateAnnotationDialog</name>
     <message>
-        <location filename="../src/util/CreateAnnotationDialog.cpp" line="57"/>
+        <location filename="../src/util/CreateAnnotationDialog.cpp" line="50"/>
         <source>Create</source>
         <translation>Create</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationDialog.cpp" line="71"/>
-        <location filename="../src/util/CreateAnnotationDialog.cpp" line="76"/>
+        <location filename="../src/util/CreateAnnotationDialog.cpp" line="70"/>
+        <location filename="../src/util/CreateAnnotationDialog.cpp" line="75"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationDialog.cpp" line="76"/>
+        <location filename="../src/util/CreateAnnotationDialog.cpp" line="75"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
@@ -1593,12 +1696,12 @@ To append data to existing file press 'Append'.</translation>
 <context>
     <name>U2::CreateAnnotationNormalWidget</name>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.cpp" line="206"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.cpp" line="222"/>
         <source>Save annotation(s) to</source>
         <translation>Save annotation(s) to</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.cpp" line="210"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.cpp" line="226"/>
         <source>Annotation parameters</source>
         <translation>Annotation parameters</translation>
     </message>
@@ -1606,12 +1709,12 @@ To append data to existing file press 'Append'.</translation>
 <context>
     <name>U2::CreateAnnotationOptionsPanelWidget</name>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.cpp" line="202"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.cpp" line="218"/>
         <source>Save annotation(s) to</source>
         <translation>Save annotation(s) to</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.cpp" line="205"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.cpp" line="221"/>
         <source>Annotation parameters</source>
         <translation>Annotation parameters</translation>
     </message>
@@ -1619,37 +1722,36 @@ To append data to existing file press 'Append'.</translation>
 <context>
     <name>U2::CreateAnnotationWidgetController</name>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="219"/>
         <source>Save file</source>
-        <translation>Save file</translation>
+        <translation type="vanished">Save file</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="264"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="239"/>
         <source>Select annotation saving parameters</source>
         <translation>Select annotation saving parameters</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="267"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="242"/>
         <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="272"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="247"/>
         <source>Illegal folder: %1</source>
         <translation>Illegal folder: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="277"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="252"/>
         <source>Illegal annotation name</source>
         <translation>Illegal annotation name</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="282"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="257"/>
         <source>Illegal group name</source>
         <translation>Illegal group name</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="285"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="260"/>
         <source>Invalid location! Location must be in GenBank format.
 Simple examples:
 1..10
@@ -1661,26 +1763,31 @@ Simple examples:
 join(1..10,15..45)
 complement(5..15)</translation>
     </message>
+    <message>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="354"/>
+        <source>Save File</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::CreateDocumentFromTextDialogController</name>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="71"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="128"/>
         <source>Select file to save...</source>
         <translation>Select file to save...</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="90"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="81"/>
         <source>No path specified</source>
         <translation>No path specified</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="103"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="94"/>
         <source>Sequence name is empty</source>
         <translation>Sequence name is empty</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="85"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="76"/>
         <source>Filename is empty</source>
         <translation>File name is empty</translation>
     </message>
@@ -1694,32 +1801,26 @@ complement(5..15)</translation>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
+</context>
+<context>
+    <name>U2::CreateObjectRelationDialogController</name>
     <message>
-        <source>Error</source>
-        <translation type="vanished">Error</translation>
-    </message>
-    <message>
-        <source>The project cannot be created</source>
-        <translation type="vanished">The project cannot be created</translation>
-    </message>
-    <message>
-        <source>warning</source>
-        <translation type="vanished">warning</translation>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="52"/>
+        <source>OK</source>
+        <translation>OK</translation>
     </message>
     <message>
-        <source>The document already in the project</source>
-        <translation type="vanished">The document already in the project</translation>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="53"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
     </message>
-</context>
-<context>
-    <name>U2::CreateObjectRelationDialogController</name>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="72"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="74"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="73"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="75"/>
         <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>
@@ -1729,12 +1830,12 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/util/CreateSequenceFromTextAndOpenViewTask.cpp" line="40"/>
         <source>Create sequence from raw data</source>
-        <translation type="unfinished"></translation>
+        <translation>Create sequence from raw data</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateSequenceFromTextAndOpenViewTask.cpp" line="55"/>
+        <location filename="../src/util/CreateSequenceFromTextAndOpenViewTask.cpp" line="56"/>
         <source>Can't create a project</source>
-        <translation type="unfinished"></translation>
+        <translation>Can't create a project</translation>
     </message>
 </context>
 <context>
@@ -1750,45 +1851,54 @@ complement(5..15)</translation>
         <translation>Project is locked</translation>
     </message>
     <message>
-        <location filename="../src/util/DialogUtils.cpp" line="73"/>
         <source>Export alignment image</source>
-        <translation>Export alignment image</translation>
+        <translation type="vanished">Export alignment image</translation>
     </message>
 </context>
 <context>
     <name>U2::DownloadRemoteFileDialog</name>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="124"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="64"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="65"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="165"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="168"/>
         <source>Resource id is empty!</source>
         <translation>Resource id is empty!</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="171"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="174"/>
         <source>No directory selected for saving file!</source>
         <translation>No directory selected for saving file!</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="201"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="206"/>
         <source>Download remote documents</source>
         <translation>Download remote documents</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="241"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="246"/>
         <source>Hint: </source>
         <translation>Hint: </translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="242"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="247"/>
         <source>Use database unique identifier.</source>
         <translation>Use database unique identifier.</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="244"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="249"/>
         <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>
@@ -1849,6 +1959,16 @@ complement(5..15)</translation>
 <context>
     <name>U2::EditSequenceDialogController</name>
     <message>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="73"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="74"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+    <message>
         <location filename="../src/util/EditSequenceDialogController.cpp" line="98"/>
         <source>Insert Sequence</source>
         <translation>Insert Sequence</translation>
@@ -1859,22 +1979,22 @@ complement(5..15)</translation>
         <translation>Replace sequence</translation>
     </message>
     <message>
-        <location filename="../src/util/EditSequenceDialogController.cpp" line="145"/>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="141"/>
         <source>Directory to save is not exists</source>
         <translation>Directory to save is not exists</translation>
     </message>
     <message>
-        <location filename="../src/util/EditSequenceDialogController.cpp" line="149"/>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="145"/>
         <source>Entered path is empty</source>
         <translation>Entered path is empty</translation>
     </message>
     <message>
-        <location filename="../src/util/EditSequenceDialogController.cpp" line="153"/>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="149"/>
         <source>Filename is empty</source>
         <translation>File name is empty</translation>
     </message>
     <message>
-        <location filename="../src/util/EditSequenceDialogController.cpp" line="171"/>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="232"/>
         <source>Select file to save...</source>
         <translation>Select file to save...</translation>
     </message>
@@ -1955,47 +2075,47 @@ complement(5..15)</translation>
 <context>
     <name>U2::ExportAnnotationsDialog</name>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="14"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="14"/>
         <source>Export Annotations</source>
         <translation>Export Annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="25"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="25"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="37"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="37"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="49"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="49"/>
         <source>File format</source>
         <translation>File format</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="58"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="58"/>
         <source>Save sequences under annotations</source>
         <translation>Save sequences under annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="65"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="65"/>
         <source>Save sequence names</source>
         <translation>Save sequence names</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="48"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="47"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="49"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="48"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="143"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="69"/>
         <source>Select file to save annotations</source>
         <translation>Select file to save annotations</translation>
     </message>
@@ -2003,12 +2123,12 @@ complement(5..15)</translation>
 <context>
     <name>U2::ExportDocumentDialogController</name>
     <message>
-        <location filename="../src/util/ExportDocumentDialogController.cpp" line="49"/>
+        <location filename="../src/util/ExportDocumentDialogController.cpp" line="48"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportDocumentDialogController.cpp" line="50"/>
+        <location filename="../src/util/ExportDocumentDialogController.cpp" line="49"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -2016,55 +2136,57 @@ complement(5..15)</translation>
 <context>
     <name>U2::ExportImageDialog</name>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="76"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="69"/>
         <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="103"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="96"/>
         <source>The image file path is empty.</source>
         <translation>The image file path is empty.</translation>
     </message>
     <message>
-        <source>The image file cannot be created. This can be caused that the file name contains illegal characters or it's too long.</source>
-        <translation type="obsolete">The image file cannot be created. This can be caused that the file name contains illegal characters or it's too long.</translation>
-    </message>
-    <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="108"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="101"/>
         <source>The image file cannot be created. No write permissions.</source>
         <translation>The image file cannot be created. No write permissions.</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="115"/>
         <source>Overwrite file?</source>
-        <translation>Overwrite file?</translation>
+        <translation type="vanished">Overwrite file?</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="116"/>
         <source>The file "%1" already exists. Do you wish to overwrite it?</source>
-        <translation>The file "%1" already exists. Do you wish to overwrite it?</translation>
+        <translation type="vanished">The file "%1" already exists. Do you wish to overwrite it?</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="124"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="109"/>
         <source>Saving image to '%1'...</source>
         <translation>Saving image to '%1'...</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="150"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="226"/>
         <source>Save Image As</source>
         <translation>Save Image As</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="213"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="146"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
 </context>
 <context>
+    <name>U2::FeatureKeyFilterTask</name>
+    <message>
+        <location filename="../src/util/project/filter_tasks/FeatureKeyFilterTask.cpp" line="59"/>
+        <source>DbiRef is invalid</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::FileLineEdit</name>
     <message>
-        <location filename="../src/util/DialogUtils.cpp" line="103"/>
-        <location filename="../src/util/DialogUtils.cpp" line="109"/>
+        <location filename="../src/util/DialogUtils.cpp" line="91"/>
+        <location filename="../src/util/DialogUtils.cpp" line="97"/>
         <source>Select file(s)</source>
         <translation>Select file(s)</translation>
     </message>
@@ -2185,7 +2307,7 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/util/ImportSequenceFromRawDataTask.cpp" line="31"/>
         <source>Import sequence from raw data</source>
-        <translation type="unfinished"></translation>
+        <translation>Import sequence from raw data</translation>
     </message>
 </context>
 <context>
@@ -2321,55 +2443,35 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
-    <name>U2::LoadDASDocumentsAndOpenViewTask</name>
-    <message>
-        <source>Load DAS documents and open view</source>
-        <translation type="vanished">Load DAS documents and open view</translation>
-    </message>
-    <message>
-        <source>Resource ID: %1</source>
-        <translation type="vanished">Resource ID: %1</translation>
-    </message>
-    <message>
-        <source>Converted resource ID: %2</source>
-        <translation type="vanished">Converted resource ID: %2</translation>
-    </message>
+    <name>U2::LoadRemoteDocumentAndAddToProjectTask</name>
     <message>
-        <source>Resolution: </source>
-        <translation type="vanished">Resolution: </translation>
-    </message>
-    <message>
-        <source><font color='%1'>cancelled</font></source>
-        <translation type="vanished"><font color='%1'>cancelled</font></translation>
-    </message>
-    <message>
-        <source><font color='%1'>error</font></source>
-        <translation type="vanished"><font color='%1'>error</font></translation>
+        <location filename="../src/OpenViewTask.cpp" line="224"/>
+        <location filename="../src/OpenViewTask.cpp" line="231"/>
+        <location filename="../src/OpenViewTask.cpp" line="238"/>
+        <source>Load remote document and add to project</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><font color='%1'>success</font></source>
-        <translation type="vanished"><font color='%1'>success</font></translation>
+        <location filename="../src/OpenViewTask.cpp" line="283"/>
+        <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>
-        <location filename="../src/OpenViewTask.cpp" line="267"/>
         <source>Cannot find %1 in %2 database</source>
-        <translation>Cannot find %1 in %2 database</translation>
+        <translation type="vanished">Cannot find %1 in %2 database</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="223"/>
-        <location filename="../src/OpenViewTask.cpp" line="230"/>
-        <location filename="../src/OpenViewTask.cpp" line="237"/>
         <source>Load remote document and open view</source>
-        <translation>Load remote document and open view</translation>
+        <translation type="vanished">Load remote document and open view</translation>
     </message>
 </context>
 <context>
     <name>U2::LoadUnloadedDocumentAndOpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="69"/>
+        <location filename="../src/OpenViewTask.cpp" line="70"/>
         <source>Load document: '%1'</source>
         <translation>Load document: '%1'</translation>
     </message>
@@ -2497,12 +2599,12 @@ complement(5..15)</translation>
 <context>
     <name>U2::OpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="151"/>
+        <location filename="../src/OpenViewTask.cpp" line="152"/>
         <source>State is NULL</source>
         <translation>State is NULL</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="153"/>
+        <location filename="../src/OpenViewTask.cpp" line="154"/>
         <source>GObject factory is NULL</source>
         <translation>GObject factory is NULL</translation>
     </message>
@@ -2512,12 +2614,12 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/PasteController.cpp" line="73"/>
         <source>Unable to handle so huge data in clipboard.</source>
-        <translation type="unfinished"></translation>
+        <translation>Unable to handle so huge data in clipboard.</translation>
     </message>
     <message>
         <location filename="../src/PasteController.cpp" line="77"/>
         <source>UGENE can not recognize current clipboard content as one of supported formats.</source>
-        <translation type="unfinished"></translation>
+        <translation>UGENE can not recognize current clipboard content as one of supported formats.</translation>
     </message>
 </context>
 <context>
@@ -2525,7 +2627,7 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/PasteController.cpp" line="204"/>
         <source>Cannot detect file format</source>
-        <translation type="unfinished"></translation>
+        <translation>Cannot detect file format</translation>
     </message>
 </context>
 <context>
@@ -2533,7 +2635,7 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/PasteController.cpp" line="178"/>
         <source>Pasting of directories is not supported:</source>
-        <translation type="unfinished"></translation>
+        <translation>Pasting of directories is not supported:</translation>
     </message>
 </context>
 <context>
@@ -2604,113 +2706,129 @@ complement(5..15)</translation>
 <context>
     <name>U2::ProjectTreeController</name>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="962"/>
         <source>Load selected documents</source>
-        <translation>Load selected documents</translation>
+        <translation type="vanished">Load selected documents</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="972"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="962"/>
         <source>Lock document for editing</source>
         <translation>Lock document for editing</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="976"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="966"/>
         <source>Unlock document for editing</source>
         <translation>Unlock document for editing</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="969"/>
         <source>Unload selected document</source>
-        <translation>Unload selected document</translation>
+        <translation type="vanished">Unload selected document</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="318"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="327"/>
         <source>Import to the database...</source>
         <translation>Import to the database...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="319"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="328"/>
         <source>Import to the folder...</source>
         <translation>Import to the folder...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="726"/>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="760"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="731"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="765"/>
         <source>Unable to Restore</source>
         <translation>Unable to Restore</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="727"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="732"/>
         <source>UGENE is unable to restore some object from Recycle Bin because its original location does not exist. You can still restore the objects by dragging them with mouse from Recycle Bin.</source>
         <translation>UGENE is unable to restore some object from Recycle Bin because its original location does not exist. You can still restore the objects by dragging them with mouse from Recycle Bin.</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="761"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="766"/>
         <source>UGENE is unable to restore some folder from Recycle Bin because its original location does not exist. You can still restore the folders by dragging them with mouse from Recycle Bin.</source>
         <translation>UGENE is unable to restore some folder from Recycle Bin because its original location does not exist. You can still restore the folders by dragging them with mouse from Recycle Bin.</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="827"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="832"/>
         <source>Select a database to import anything</source>
         <translation>Select a database to import anything</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="952"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="942"/>
         <source>Add object to document...</source>
         <translation>Add object to document...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="957"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="947"/>
         <source>Import...</source>
         <translation>Import...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="980"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="952"/>
+        <source>Load selected document(s)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="959"/>
+        <source>Unload selected document(s)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="970"/>
         <source>Rename...</source>
         <translation>Rename...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="984"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="977"/>
         <source>Remove selected items</source>
         <translation>Remove selected items</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="990"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="983"/>
         <source>Add folder...</source>
         <translation>Add folder...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="995"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="988"/>
         <source>Restore selected items</source>
         <translation>Restore selected items</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="999"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="992"/>
         <source>Empty recycle bin</source>
         <translation>Empty recycle bin</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="544"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="554"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="559"/>
-        <source>Edit</source>
-        <translation>Edit</translation>
-    </message>
-    <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="868"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="873"/>
         <source>No object to add to view</source>
         <translation>No object to add to view</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="874"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="879"/>
         <source>No object to remove from view</source>
         <translation>No object to remove from view</translation>
     </message>
 </context>
 <context>
+    <name>U2::ProjectTreeItemSelectorDialogImpl</name>
+    <message>
+        <location filename="../src/util/ProjectTreeItemSelectorDialog.cpp" line="44"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ProjectTreeItemSelectorDialog.cpp" line="45"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+</context>
+<context>
     <name>U2::ProjectViewModel</name>
     <message>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1108"/>
@@ -2735,6 +2853,19 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
+    <name>U2::QueryBlockWidget</name>
+    <message>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="246"/>
+        <source>Term:</source>
+        <translation>Term:</translation>
+    </message>
+    <message>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="257"/>
+        <source>All fields</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::RangeSelector</name>
     <message>
         <location filename="../src/util/RangeSelector.cpp" line="60"/>
@@ -2771,57 +2902,89 @@ complement(5..15)</translation>
 <context>
     <name>U2::RegionSelector</name>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="293"/>
+        <location filename="../src/util/RegionSelector.cpp" line="114"/>
         <source>Set minimum</source>
         <translation>Set minimum</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="298"/>
+        <location filename="../src/util/RegionSelector.cpp" line="119"/>
         <source>Set maximum</source>
         <translation>Set maximum</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="305"/>
-        <location filename="../src/util/RegionSelector.cpp" line="326"/>
+        <location filename="../src/util/RegionSelector.cpp" line="126"/>
+        <location filename="../src/util/RegionSelector.cpp" line="147"/>
         <source>Region</source>
         <translation>Region</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="313"/>
-        <location filename="../src/util/RegionSelector.cpp" line="332"/>
+        <location filename="../src/util/RegionSelector.cpp" line="134"/>
+        <location filename="../src/util/RegionSelector.cpp" line="153"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="174"/>
+        <location filename="../src/util/RegionSelector.cpp" line="102"/>
         <source>Invalid sequence region!</source>
         <translation>Invalid sequence region!</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="180"/>
         <source>Invalid Start position of region</source>
-        <translation>Invalid Start position of region</translation>
+        <translation type="vanished">Invalid Start position of region</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="189"/>
         <source>Invalid End position of region</source>
-        <translation>Invalid End position of region</translation>
+        <translation type="vanished">Invalid End position of region</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="197"/>
         <source>Start position is greater than End position</source>
-        <translation>Start position is greater than End position</translation>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="150"/>
+        <source>Cannot get preset name, ComboBox is NULL</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="230"/>
+        <location filename="../src/util/RegionSelectorController.cpp" line="277"/>
+        <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>
+    </message>
+</context>
+<context>
+    <name>U2::RegionSelectorWithExludedRegion</name>
+    <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>
     </message>
 </context>
 <context>
     <name>U2::RemovePartFromSequenceDialogController</name>
     <message>
-        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="53"/>
+        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="60"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="54"/>
+        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="61"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -2846,7 +3009,7 @@ complement(5..15)</translation>
         <translation>Region to delete is out of sequence bounds</translation>
     </message>
     <message>
-        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="103"/>
+        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="138"/>
         <source>Select file to save...</source>
         <translation>Select file to save...</translation>
     </message>
@@ -2854,9 +3017,8 @@ complement(5..15)</translation>
 <context>
     <name>U2::SaveDocumentGroupController</name>
     <message>
-        <location filename="../src/util/SaveDocumentGroupController.cpp" line="41"/>
         <source>Select file location</source>
-        <translation>Select file location</translation>
+        <translation type="vanished">Select file location</translation>
     </message>
 </context>
 <context>
@@ -2978,10 +3140,6 @@ complement(5..15)</translation>
         <translation>Symbols that don't match the alphabet have been </translation>
     </message>
     <message>
-        <source>Some of symbols, which doesn't match alphabet has been </source>
-        <translation type="obsolete">Some of symbols, which doesn't match alphabet has been </translation>
-    </message>
-    <message>
         <location filename="../src/util/SeqPasterWidgetController.cpp" line="148"/>
         <source>replaced</source>
         <translation>replaced</translation>
@@ -3064,42 +3222,42 @@ check connection settings</translation>
 <context>
     <name>U2::ToolsMenu</name>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="108"/>
+        <location filename="../src/ToolsMenu.cpp" line="107"/>
         <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="117"/>
         <source>NGS data analysis</source>
         <translation>NGS data analysis</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="145"/>
+        <location filename="../src/ToolsMenu.cpp" line="144"/>
         <source>BLAST</source>
         <translation>BLAST</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="159"/>
+        <location filename="../src/ToolsMenu.cpp" line="158"/>
         <source>Multiple sequence alignment</source>
         <translation>Multiple sequence alignment</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="171"/>
+        <location filename="../src/ToolsMenu.cpp" line="170"/>
         <source>Cloning</source>
         <translation>Cloning</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="179"/>
+        <location filename="../src/ToolsMenu.cpp" line="178"/>
         <source>Primer</source>
         <translation>Primer</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="185"/>
+        <location filename="../src/ToolsMenu.cpp" line="184"/>
         <source>Search for TFBS</source>
         <translation>Search for TFBS</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="194"/>
+        <location filename="../src/ToolsMenu.cpp" line="193"/>
         <source>HMMER tools</source>
         <translation>HMMER tools</translation>
     </message>
@@ -3107,64 +3265,64 @@ check connection settings</translation>
 <context>
     <name>U2::UnloadDocumentTask</name>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="49"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="50"/>
         <source>Unload document task: %1</source>
         <translation>Unload document task: %1</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="74"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="76"/>
         <source>Document '%1' can't be unloaded: </source>
         <translation>Document '%1' can't be unloaded: </translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="77"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="79"/>
         <source>save failed!</source>
         <translation>save failed!</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="89"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="91"/>
         <source>unexpected error</source>
         <translation>unexpected error</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="110"/>
-        <location filename="../src/UnloadDocumentTask.cpp" line="133"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="112"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="135"/>
         <source>Question?</source>
         <translation>Question?</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="110"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="112"/>
         <source>Close views for document: %1</source>
         <translation>Close views for document: %1</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="133"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="135"/>
         <source>Save document: %1</source>
         <translation>Save document: %1</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="152"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="154"/>
         <source>Failed to unload document</source>
         <translation>Failed to unload document</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="156"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="158"/>
         <source>Failed to unload document: %1, error: %2</source>
         <translation>Failed to unload document: %1, error: %2</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="158"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="160"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="107"/>
-        <location filename="../src/UnloadDocumentTask.cpp" line="169"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="109"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="171"/>
         <source>There is an active view with document content</source>
         <translation>There is an active view with document content</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="178"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="180"/>
         <source>Document is locked by some algorithm and cannot be unloaded</source>
         <translation>Document is locked by some algorithm and cannot be unloaded</translation>
     </message>
@@ -3191,11 +3349,4 @@ check connection settings</translation>
         <translation>Screenshot</translation>
     </message>
 </context>
-<context>
-    <name>U2::WidgetScreenshotImageExportTaskFactory</name>
-    <message>
-        <source>Screenshot</source>
-        <translation type="obsolete">Screenshot</translation>
-    </message>
-</context>
 </TS>
diff --git a/src/corelibs/U2Gui/transl/russian.ts b/src/corelibs/U2Gui/transl/russian.ts
index 742e962..6ad19e2 100644
--- a/src/corelibs/U2Gui/transl/russian.ts
+++ b/src/corelibs/U2Gui/transl/russian.ts
@@ -37,22 +37,22 @@
 <context>
     <name>AceImportDialog</name>
     <message>
-        <location filename="../src/util/ImportDialogs/ui/AceImportDialog.ui" line="14"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="14"/>
         <source>Import ACE File</source>
         <translation>Импорт ACE файла</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/ui/AceImportDialog.ui" line="28"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="28"/>
         <source>Source URL:</source>
         <translation>Источник:</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/ui/AceImportDialog.ui" line="52"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="52"/>
         <source>Destination URL:</source>
         <translation>Назначение:</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/ui/AceImportDialog.ui" line="62"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="62"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -60,27 +60,27 @@
 <context>
     <name>AddNewDocumentDialog</name>
     <message>
-        <location filename="../src/util/ui/AddNewDocumentDialog.ui" line="20"/>
+        <location filename="../src/util/AddNewDocumentDialog.ui" line="20"/>
         <source>Add New Document</source>
         <translation>Новый документ</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AddNewDocumentDialog.ui" line="39"/>
+        <location filename="../src/util/AddNewDocumentDialog.ui" line="39"/>
         <source>Document format</source>
         <translation>Формат документа</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AddNewDocumentDialog.ui" line="46"/>
+        <location filename="../src/util/AddNewDocumentDialog.ui" line="46"/>
         <source>Document location</source>
         <translation>Расположение документа</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AddNewDocumentDialog.ui" line="56"/>
+        <location filename="../src/util/AddNewDocumentDialog.ui" line="56"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AddNewDocumentDialog.ui" line="71"/>
+        <location filename="../src/util/AddNewDocumentDialog.ui" line="71"/>
         <source>Compress file</source>
         <translation>Сжать файл</translation>
     </message>
@@ -88,7 +88,7 @@
 <context>
     <name>AuthenticationDialog</name>
     <message>
-        <location filename="../src/util/ui/AuthenticationDialog.ui" line="23"/>
+        <location filename="../src/util/AuthenticationDialog.ui" line="23"/>
         <source>Authetication</source>
         <translation>Аутентификация</translation>
     </message>
@@ -96,22 +96,22 @@
 <context>
     <name>AuthenticationWidget</name>
     <message>
-        <location filename="../src/util/ui/AuthenticationWidget.ui" line="14"/>
+        <location filename="../src/util/AuthenticationWidget.ui" line="14"/>
         <source>Authentication</source>
         <translation>Аутентификация</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AuthenticationWidget.ui" line="33"/>
+        <location filename="../src/util/AuthenticationWidget.ui" line="33"/>
         <source>Login:</source>
         <translation>Логин:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AuthenticationWidget.ui" line="40"/>
+        <location filename="../src/util/AuthenticationWidget.ui" line="40"/>
         <source>Password:</source>
         <translation>Пароль:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/AuthenticationWidget.ui" line="47"/>
+        <location filename="../src/util/AuthenticationWidget.ui" line="47"/>
         <source>Remember me</source>
         <translation>Запомнить меня</translation>
     </message>
@@ -119,27 +119,27 @@
 <context>
     <name>BreakpointConditionEditDialog</name>
     <message>
-        <location filename="../src/util/ui/BreakpointConditionEditDialog.ui" line="14"/>
+        <location filename="../src/util/BreakpointConditionEditDialog.ui" line="14"/>
         <source>Breakpoint Condition</source>
         <translation>Состояние точки остановки</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/BreakpointConditionEditDialog.ui" line="26"/>
+        <location filename="../src/util/BreakpointConditionEditDialog.ui" line="26"/>
         <source>When the breakpoint location is reached, the expression is evaluated and<br>the breakpoint is hit only if the expression is true or has changed.</source>
         <translation>Когда выполнение дойдет до точки остановки, выражение будет вычислено <br> и точка остановки сработает в зависимости от условия: если выражение истинно или изменилось.</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/BreakpointConditionEditDialog.ui" line="36"/>
+        <location filename="../src/util/BreakpointConditionEditDialog.ui" line="36"/>
         <source>Condition</source>
         <translation>Условие</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/BreakpointConditionEditDialog.ui" line="48"/>
+        <location filename="../src/util/BreakpointConditionEditDialog.ui" line="48"/>
         <source>Is true</source>
         <translation>Истинно</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/BreakpointConditionEditDialog.ui" line="61"/>
+        <location filename="../src/util/BreakpointConditionEditDialog.ui" line="61"/>
         <source>Has changed</source>
         <translation>Изменено</translation>
     </message>
@@ -147,7 +147,7 @@
 <context>
     <name>CommonImportOptionsDialog</name>
     <message>
-        <location filename="../src/util/shared_db/ui/CommonImportOptionsDialog.ui" line="14"/>
+        <location filename="../src/util/shared_db/CommonImportOptionsDialog.ui" line="14"/>
         <source>Database Import Default Options</source>
         <translation>Параметры по умолчанию для импорта базы данных</translation>
     </message>
@@ -155,7 +155,7 @@
 <context>
     <name>CreateAnnotationDialog</name>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationDialog.ui" line="20"/>
+        <location filename="../src/util/CreateAnnotationDialog.ui" line="20"/>
         <source>Create Annotation</source>
         <translation>Создание аннотации</translation>
     </message>
@@ -163,115 +163,115 @@
 <context>
     <name>CreateAnnotationFullWidget</name>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="20"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="20"/>
         <source>Create Annotations</source>
         <translation>Создание аннотации</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="51"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="51"/>
         <source>Annotation type:</source>
         <translation>Тип аннотации:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="103"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="103"/>
         <source>Annotation name</source>
         <translation>Имя аннотации</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="110"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="110"/>
         <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/ui/CreateAnnotationFullWidget.ui" line="113"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="113"/>
         <source>Use pattern names</source>
         <translation>Использовать имена паттернов</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="120"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="120"/>
         <source>Group name</source>
         <translation>Имя группы</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="127"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="127"/>
         <source>Predefined group names</source>
         <translation>Стандартные имена групп</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="130"/>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="309"/>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="388"/>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="426"/>
+        <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"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="144"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="144"/>
         <source>by type</source>
         <translation>по типу</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="154"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="154"/>
         <source>Description</source>
         <translation>Описание</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="161"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="161"/>
         <source>auto</source>
         <translation>авто</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="176"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="176"/>
         <source>Location</source>
         <translation>Позиция</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="208"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="208"/>
         <source>Simple format</source>
         <translation>Простой формат</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="234"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="234"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="246"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="246"/>
         <source>Complement</source>
         <translation>Комплементарная</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="281"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="281"/>
         <source>GenBank/EMBL format</source>
         <translation>Формат GenBank/EMBL</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="299"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="299"/>
         <source>Annotation location in GenBank format</source>
         <translation>Местоположение аннотации (в формате GenBank)</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="306"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="306"/>
         <source>Add/remove complement flag</source>
         <translation>Добавить/снять флаг комплементарности</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="353"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="353"/>
         <source>Choose a file to store the annotations</source>
         <translation>Выбрать файл для сохранения аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="374"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="374"/>
         <source>Use auto-annotations table</source>
         <translation>Использовать таблицу автоаннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="406"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="406"/>
         <source>Existing table</source>
         <translation>Существующая таблица</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationFullWidget.ui" line="416"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="416"/>
         <source>Create new table</source>
         <translation>Новая таблица</translation>
     </message>
@@ -279,95 +279,95 @@
 <context>
     <name>CreateAnnotationNormalWidget</name>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="20"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="20"/>
         <source>Create Annotations</source>
         <translation>Создание аннотации</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="38"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="38"/>
         <source>Choose a file to store the annotations</source>
         <translation>Выбрать файл для сохранения аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="50"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="50"/>
         <source>Existing table</source>
         <translation>Существующая таблица</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="67"/>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="95"/>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="147"/>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="188"/>
+        <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"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="78"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="78"/>
         <source>Create new table</source>
         <translation>Новая таблица</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="102"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="102"/>
         <source>Use auto-annotations table</source>
         <translation>Использовать таблицу автоаннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="130"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="130"/>
         <source>by type</source>
         <translation>по типу</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="137"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="137"/>
         <source>auto</source>
         <translation>авто</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="144"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="144"/>
         <source>Add/remove complement flag</source>
         <translation>Добавить/снять флаг комплементарности</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="158"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="158"/>
         <source>Location</source>
         <translation>Позиция</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="168"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="168"/>
         <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/ui/CreateAnnotationNormalWidget.ui" line="171"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="171"/>
         <source>Use pattern name</source>
         <translation>Использовать имя паттерна</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="178"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="178"/>
         <source>Annotation location in GenBank format</source>
         <translation>Местоположение аннотации (в формате GenBank)</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="185"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="185"/>
         <source>Predefined group names</source>
         <translation>Стандартные имена групп</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="199"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="199"/>
         <source>Group name</source>
         <translation>Имя группы</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="206"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="206"/>
         <source>Annotation name</source>
         <translation>Имя аннотации</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="213"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="213"/>
         <source>Annotation type</source>
         <translation>Тип аннотации</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationNormalWidget.ui" line="220"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="220"/>
         <source>Description</source>
         <translation>Описание</translation>
     </message>
@@ -375,95 +375,95 @@
 <context>
     <name>CreateAnnotationOptionsPanelWidget</name>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="14"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="32"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="32"/>
         <source>Choose a file to store the annotations</source>
         <translation>Выбрать файл для сохранения аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="44"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="44"/>
         <source>Existing table:</source>
         <translation>Существующая таблица:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="63"/>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="95"/>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="148"/>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="215"/>
+        <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"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="76"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="76"/>
         <source>Create new table:</source>
         <translation>Новая таблица:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="104"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="104"/>
         <source>Use auto-annotations table</source>
         <translation>Использовать таблицу автоаннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="129"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="129"/>
         <source>Group name:</source>
         <translation>Имя группы:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="138"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="138"/>
         <source>auto</source>
         <translation>авто</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="145"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="145"/>
         <source>Predefined group names</source>
         <translation>Стандартные имена групп</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="161"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="161"/>
         <source>Annotation type:</source>
         <translation>Тип аннотации:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="175"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="175"/>
         <source>Annotation name:</source>
         <translation>Имя аннотации:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="187"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="187"/>
         <source>by type</source>
         <translation>по типу</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="196"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="196"/>
         <source>Location:</source>
         <translation>Позиция:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="205"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="205"/>
         <source>Annotation location in GenBank format</source>
         <translation>Местоположение аннотации (в формате GenBank)</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="212"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="212"/>
         <source>Add/remove complement flag</source>
         <translation>Добавить/снять флаг комплементарности</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="228"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="228"/>
         <source>Description:</source>
         <translation>Описание:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateAnnotationOptionsPanelWidget.ui" line="238"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="238"/>
         <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/ui/CreateAnnotationOptionsPanelWidget.ui" line="241"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="241"/>
         <source>Use pattern name</source>
         <translation>Использовать имя паттерна</translation>
     </message>
@@ -471,32 +471,32 @@
 <context>
     <name>CreateDocumentFromTextDialog</name>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="14"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="14"/>
         <source>Create Document</source>
         <translation>Создание документа</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="22"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="22"/>
         <source>Document location:</source>
         <translation>Расположение документа:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="32"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="32"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="39"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="39"/>
         <source>Document format:</source>
         <translation>Формат:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="49"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="49"/>
         <source>Sequence name:</source>
         <translation>Имя последовательности:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateDocumentFromTextDialog.ui" line="65"/>
+        <location filename="../src/util/CreateDocumentFromTextDialog.ui" line="65"/>
         <source>Save file immediately</source>
         <translation>Записать файл на диск</translation>
     </message>
@@ -504,12 +504,12 @@
 <context>
     <name>CreateObjectRelationDialog</name>
     <message>
-        <location filename="../src/util/ui/CreateObjectRelationDialog.ui" line="14"/>
+        <location filename="../src/util/CreateObjectRelationDialog.ui" line="14"/>
         <source>Edit Object Relations</source>
         <translation>Редактирование связи объекта</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/CreateObjectRelationDialog.ui" line="20"/>
+        <location filename="../src/util/CreateObjectRelationDialog.ui" line="20"/>
         <source>Associate object with:</source>
         <translation>Связь:</translation>
     </message>
@@ -517,89 +517,85 @@
 <context>
     <name>DownloadRemoteFileDialog</name>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="26"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="26"/>
         <source>Fetch Data from Remote Database</source>
         <translation>Получить данные из удаленной базы</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="43"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="43"/>
         <source>Resource ID:</source>
         <translation>Идентификатор:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="66"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="66"/>
         <source>Database:</source>
         <translation>База данных:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="79"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="79"/>
         <source>Save to directory:</source>
         <translation>Сохранить в директорию:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="104"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="104"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="123"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="123"/>
         <source>Output format:</source>
         <translation>Выходной формат:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/DownloadRemoteFileDialog.ui" line="135"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="135"/>
         <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/ui/DownloadRemoteFileDialog.ui" line="138"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="138"/>
         <source>Force download the appropriate sequence</source>
         <translation>Принудительно скачать соответствующую последовательность</translation>
     </message>
-    <message>
-        <source>DAS features</source>
-        <translation type="vanished">DAS аннотации</translation>
-    </message>
 </context>
 <context>
     <name>EditConnectionDialog</name>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="23"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="23"/>
         <source>Connection Settings</source>
         <translation>Настройки соединения</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="31"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="31"/>
         <source>Connection name:</source>
         <translation>Имя соединения:</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="38"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="38"/>
         <source>default</source>
         <translation>по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="52"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="52"/>
         <source>Database location</source>
         <translation>Адрес базы данных</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="61"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="61"/>
         <source>Host:</source>
         <translation>Хост:</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="71"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="71"/>
         <source>Port:</source>
         <translation>Порт:</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="85"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="85"/>
         <source>Database:</source>
         <translation>База данных:</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/EditConnectionDialog.ui" line="98"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.ui" line="98"/>
         <source>Authentication data</source>
         <translation>Данные аутентификации</translation>
     </message>
@@ -607,17 +603,17 @@
 <context>
     <name>EditQualifierDialog</name>
     <message>
-        <location filename="../src/util/ui/EditQualifierDialog.ui" line="14"/>
+        <location filename="../src/util/EditQualifierDialog.ui" line="14"/>
         <source>Edit Qualifier</source>
         <translation>Редактировать квалификатор</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditQualifierDialog.ui" line="22"/>
+        <location filename="../src/util/EditQualifierDialog.ui" line="22"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditQualifierDialog.ui" line="34"/>
+        <location filename="../src/util/EditQualifierDialog.ui" line="34"/>
         <source>Value</source>
         <translation>Значение</translation>
     </message>
@@ -625,145 +621,145 @@
 <context>
     <name>EditSequenceDialog</name>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="22"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="22"/>
         <source>Annotations region resolving mode</source>
         <translation>Способ обработки аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="28"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="28"/>
         <source>Expand affected annotation</source>
-        <translation>Развернуть затронутую аннотацию</translation>
+        <translation>Расширить связанную аннотацию</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="38"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="38"/>
         <source>Remove affected annotation</source>
-        <translation>Удалить затронутую аннотацию</translation>
+        <translation>Удалить связанную аннотацию</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="45"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="45"/>
         <source>Split (join annotation parts)</source>
         <translation>Расщепление (соединить части аннотации)</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="52"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="52"/>
         <source>Split (separate annotations parts)</source>
         <translation>Расщепление (разъединить части аннотации)</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="64"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="64"/>
         <source>Recalculate values of qualifiers</source>
         <translation>Пересчитать значения квалификаторов</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="76"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="76"/>
         <source>Position to insert</source>
         <translation>Позиция для вставки</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="82"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="82"/>
         <source>Press to insert before the start of the sequence</source>
         <translation>Нажмите для вставки в начало последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="85"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="85"/>
         <source>start</source>
         <translation>начало</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="99"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="99"/>
         <source>Press to insert to the end of the sequence</source>
         <translation>Нажмите для вставки в конец последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="102"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="102"/>
         <source>end</source>
         <translation>конец</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="122"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="122"/>
         <source>Selection</source>
         <translation>Участок</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="128"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="128"/>
         <source>Press to insert before the selection</source>
         <translation>Нажмите для вставки до участка</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="131"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="131"/>
         <source>before</source>
         <translation>до</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="138"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="138"/>
         <source>Press to insert after the selection</source>
         <translation>Нажмите для вставки после участка</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="141"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="141"/>
         <source>after</source>
         <translation>после</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="148"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="148"/>
         <source>To change the regsion select it on a sequence</source>
         <translation>Чтобы изменить регион выделите его в последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="169"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="169"/>
         <source>Save to new file</source>
         <translation>Сохранить в новый файл</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="183"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="183"/>
         <source>Document location:</source>
         <translation>Расположение документа:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="193"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="193"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="200"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="200"/>
         <source>Document format:</source>
-        <translation>Формат:</translation>
+        <translation>Формат документа:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/EditSequenceDialog.ui" line="212"/>
+        <location filename="../src/util/EditSequenceDialog.ui" line="212"/>
         <source>Merge annotations to this file</source>
-        <translation>Сохранить связанные аннотации</translation>
+        <translation>Соединить и сохранить аннотации</translation>
     </message>
 </context>
 <context>
     <name>ExportDocumentDialog</name>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="14"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="14"/>
         <source>Export Document</source>
         <translation>Экспорт документа</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="25"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="25"/>
         <source>Save to file</source>
         <translation>Сохранить в файл</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="42"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="42"/>
         <source>File format</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="35"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="62"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="62"/>
         <source>Add to project</source>
         <translation>Добавить в проект</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportDocumentDialog.ui" line="52"/>
+        <location filename="../src/util/ExportDocumentDialog.ui" line="52"/>
         <source>Compress file</source>
         <translation>Сжать файл</translation>
     </message>
@@ -771,12 +767,12 @@
 <context>
     <name>FolderNameDialog</name>
     <message>
-        <location filename="../src/util/ui/FolderNameDialog.ui" line="20"/>
+        <location filename="../src/util/project/FolderNameDialog.ui" line="20"/>
         <source>Dialog</source>
         <translation>Диалог</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/FolderNameDialog.ui" line="26"/>
+        <location filename="../src/util/project/FolderNameDialog.ui" line="26"/>
         <source>Enter the folder name:</source>
         <translation>Введите имя папки:</translation>
     </message>
@@ -784,62 +780,58 @@
 <context>
     <name>ImageExportForm</name>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="20"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="20"/>
         <source>Export Image</source>
         <translation>Экспорт изображения</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="105"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="105"/>
         <source>File name</source>
         <translation>Имя файла</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="78"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="78"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <source>Export settings</source>
-        <translation type="vanished">Настройки экспорта</translation>
-    </message>
-    <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="56"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="56"/>
         <source>Export to file</source>
         <translation>Экспортировать в файл</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="124"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="124"/>
         <source>Format</source>
         <translation>Формат</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="237"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="237"/>
         <source>DPI</source>
         <translation>DPI</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="316"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="316"/>
         <source>Width</source>
         <translation>Ширина</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="296"/>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="344"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="296"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="344"/>
         <source>px</source>
         <translation>px</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="397"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="397"/>
         <source>Hint</source>
         <translation>Подсказка</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="268"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="268"/>
         <source>Height</source>
         <translation>Высота</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportImageDialog.ui" line="158"/>
+        <location filename="../src/util/ExportImageDialog.ui" line="158"/>
         <source>Quality</source>
         <translation>Качество</translation>
     </message>
@@ -847,62 +839,62 @@
 <context>
     <name>ImportOptionsWidget</name>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="14"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="14"/>
         <source>Import to the Database Options</source>
         <translation>Параметры импорта в базу данных</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="22"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="22"/>
         <source>Destination folder:</source>
         <translation>Назначение:</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="34"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="34"/>
         <source>Files and folders options</source>
         <translation>Параметры файлов и папок</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="40"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="40"/>
         <source>Process directories recursively</source>
         <translation>Обработать каталоги рекурсивно</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="47"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="47"/>
         <source>Keep folders structure</source>
         <translation>Сохранить структуру папок</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="54"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="54"/>
         <source>Create a subfolder for the top level folder</source>
         <translation>Создать подпапку для папки верхнего уровня</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="61"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="61"/>
         <source>Create a subfolder for each file</source>
         <translation>Создать подпапку для каждого файла</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="68"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="68"/>
         <source>Import unrecognized files</source>
         <translation>Импортировать неизвестные файлы</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="91"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="91"/>
         <source>Multi-sequence files import policy</source>
         <translation>Параметры импорта файлов, содержащих несколько последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="97"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="97"/>
         <source>Import as separate sequences</source>
         <translation>Импортировать как отдельные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="107"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="107"/>
         <source>Merge into a single sequence</source>
         <translation>Соединить в одну последовательность</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="132"/>
+        <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; }
@@ -915,37 +907,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><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/ui/ImportOptionsWidget.ui" line="146"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="146"/>
         <source> bases</source>
         <translation>символов</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="161"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="161"/>
         <source>Join into alignment</source>
         <translation>Соедить в выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="184"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="184"/>
         <source>Import ACE files as</source>
         <translation>Импортировать ACE файлы как</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="190"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="190"/>
         <source>Multiple sequence alignment</source>
         <translation>Множественное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="203"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="203"/>
         <source>Short reads assembly</source>
         <translation>Сборка коротких ридов</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="219"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="219"/>
         <source>Documents and objects options</source>
         <translation>Настройки документов и объектов</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportOptionsWidget.ui" line="225"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="225"/>
         <source>Create a subfolder for each document</source>
         <translation>Создать подпапку для каждого документа</translation>
     </message>
@@ -953,42 +945,42 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ImportToDatabaseDialog</name>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="14"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="14"/>
         <source>Import to the Database</source>
         <translation>Импорт в базу данных</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="35"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="35"/>
         <source>Item to import</source>
         <translation>Импортировать элемент</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="40"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="40"/>
         <source>Import to</source>
         <translation>Импортировать в</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="50"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="50"/>
         <source>Add files</source>
         <translation>Добавить файлы</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="57"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="57"/>
         <source>Add folder</source>
         <translation>Добавить папку</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="64"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="64"/>
         <source>Add objects</source>
         <translation>Добавить объекты</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="84"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="84"/>
         <source>General options</source>
         <translation>Основные параметры</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ImportToDatabaseDialog.ui" line="91"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.ui" line="91"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
@@ -996,12 +988,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ItemToImportEditDialog</name>
     <message>
-        <location filename="../src/util/shared_db/ui/ItemToImportEditDialog.ui" line="14"/>
+        <location filename="../src/util/shared_db/ItemToImportEditDialog.ui" line="14"/>
         <source>Edit The Item To Import</source>
         <translation>Выбрать элемент для импорта</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/ItemToImportEditDialog.ui" line="22"/>
+        <location filename="../src/util/shared_db/ItemToImportEditDialog.ui" line="22"/>
         <source>Item to import:</source>
         <translation>Импортировать элемент:</translation>
     </message>
@@ -1009,22 +1001,22 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>MultipartDocFormatConfiguratorWidget</name>
     <message>
-        <location filename="../src/util/ui/MultipartDocFormatConfiguratorWidget.ui" line="19"/>
+        <location filename="../src/util/MultipartDocFormatConfiguratorWidget.ui" line="19"/>
         <source>Create annotation</source>
         <translation>Создать аннотацию</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/MultipartDocFormatConfiguratorWidget.ui" line="25"/>
+        <location filename="../src/util/MultipartDocFormatConfiguratorWidget.ui" line="25"/>
         <source>Separate sequences</source>
         <translation>Разделить последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/MultipartDocFormatConfiguratorWidget.ui" line="32"/>
+        <location filename="../src/util/MultipartDocFormatConfiguratorWidget.ui" line="32"/>
         <source>Merge sequences</source>
         <translation>Объединить последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/MultipartDocFormatConfiguratorWidget.ui" line="41"/>
+        <location filename="../src/util/MultipartDocFormatConfiguratorWidget.ui" line="41"/>
         <source>Gap length:</source>
         <translation>Длина пробела:</translation>
     </message>
@@ -1032,7 +1024,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ProjectTreeItemSelectorDialogBase</name>
     <message>
-        <location filename="../src/util/ui/ProjectTreeItemSelectorDialogBase.ui" line="14"/>
+        <location filename="../src/util/ProjectTreeItemSelectorDialogBase.ui" line="14"/>
         <source>Select Item</source>
         <translation>Выбор элемента</translation>
     </message>
@@ -1090,24 +1082,24 @@ Remove it from the project first.</source>
         <translation>Error! No object DBI</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="1098"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="1091"/>
         <source>Confirm Deletion</source>
         <translation>Подтверждение удаления</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="1099"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="1092"/>
         <source>Are you sure you want to delete items in Recycle Bin?
 The items cannot be recovered once deleted.</source>
         <translation>Вы уверены, что хотите удалить элементы в корзину?
 Элементы не могут быть восстановлены после удаления.</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="1112"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="1105"/>
         <source>Unable to Remove</source>
         <translation>Невозможно удалить</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="1113"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="1106"/>
         <source>Some of selected objects are being used by the other users of the database. Try to remove them later.</source>
         <translation>Некоторые из выбранных объектов используются другими пользователями базы данных. Попробуйте удалить их позже.</translation>
     </message>
@@ -1136,51 +1128,66 @@ The items cannot be recovered once deleted.</source>
         <source>Failed to export image to %1.</source>
         <translation>Невозможно экспортировать изображение %1.</translation>
     </message>
+    <message>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="56"/>
+        <source>Author</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="56"/>
+        <source>Gene name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="56"/>
+        <source>Organism</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>RangeSelectionDialog</name>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="14"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="14"/>
         <source>Region Selection</source>
         <translation>Выбор региона</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="31"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="31"/>
         <source>    Region:</source>
         <translation>Регион:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="41"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="41"/>
         <source>Single Range Selection</source>
         <translation>Выбор одного региона</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="51"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="51"/>
         <source>Multiple Range Selection</source>
         <translation>Выбор составного региона</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="70"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="70"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="86"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="86"/>
         <source>    Multi Region:</source>
         <translation>Составной регион:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="96"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="96"/>
         <source>Input Format: 1..10,50..60</source>
         <translation>Входной формат: 1..10,50..60</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="116"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="116"/>
         <source>Min</source>
         <translation>Мин</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RangeSelectionDialog.ui" line="123"/>
+        <location filename="../src/util/RangeSelectionDialog.ui" line="123"/>
         <source>Max</source>
         <translation>Макс</translation>
     </message>
@@ -1204,59 +1211,122 @@ The items cannot be recovered once deleted.</source>
     </message>
 </context>
 <context>
+    <name>RegionSelectorController</name>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="35"/>
+        <source>Whole sequence</source>
+        <translation type="unfinished">Вся последовательность</translation>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="36"/>
+        <source>Selected region</source>
+        <translation type="unfinished">Выбранный регион</translation>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="37"/>
+        <source>Custom region</source>
+        <translation type="unfinished">Заданный регион</translation>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="181"/>
+        <source>Invalid Start position of region</source>
+        <translation type="unfinished">Некорректная стартовая позиция в регионе</translation>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="182"/>
+        <source>Invalid End position of region</source>
+        <translation type="unfinished">Некорректная конечная позиция в регионе</translation>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="183"/>
+        <source>Start position is greater than End position</source>
+        <translation type="unfinished">Начальная позичия больше чем конечная</translation>
+    </message>
+</context>
+<context>
+    <name>RegionSelectorWithExcludedRegion</name>
+    <message>
+        <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Форма</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>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="34"/>
+        <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="80"/>
+        <source>-</source>
+        <translation type="unfinished">-</translation>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="112"/>
+        <source>Exclude</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="129"/>
+        <source>Region</source>
+        <translation type="unfinished">Регион</translation>
+    </message>
+</context>
+<context>
     <name>RemovePartFromSequenceDialog</name>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="40"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="40"/>
         <source>Region to remove</source>
         <translation>Удаляемый регион</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="128"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="128"/>
         <source>Annotations region resolving mode</source>
         <translation>Способ обработки аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="32"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="32"/>
         <source>Remove Subsequence</source>
         <translation>Удаление подпоследовательности</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="134"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="134"/>
         <source>Crop corresponding annotation</source>
         <translation>Обрезать соответствующую аннотацию</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="144"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="144"/>
         <source>Remove corresponding annotation</source>
         <translation>Удалить соответствующую аннотацию</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="68"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="68"/>
         <source>Save to new file</source>
         <translation>Сохранить в новый файл</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="80"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="80"/>
         <source>Merge annotations to this file</source>
         <translation>Сохранить связанные аннотации</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="89"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="89"/>
         <source>Document location:</source>
         <translation>Расположение документа:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="99"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="99"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="106"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="106"/>
         <source>Document format:</source>
         <translation>Формат:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/RemovePartFromSequenceDialog.ui" line="156"/>
+        <location filename="../src/util/RemovePartFromSequenceDialog.ui" line="156"/>
         <source>Recalculate values of qualifiers</source>
         <translation>Пересчитать значения квалификаторов</translation>
     </message>
@@ -1264,47 +1334,47 @@ The items cannot be recovered once deleted.</source>
 <context>
     <name>ScriptEditorDialog</name>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="20"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="20"/>
         <source>Used script</source>
         <translation>Используемый скрипт</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="30"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="30"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="55"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="55"/>
         <source>Script text</source>
         <translation>Текст скрипта</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="67"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="67"/>
         <source>Check syntax</source>
         <translation>Проверить синтаксис</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="74"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="74"/>
         <source>Save as...</source>
         <translation>Сохранить как...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="88"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="88"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="81"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="81"/>
         <source>Clear</source>
         <translation>Очистить</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="14"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="14"/>
         <source>Script Editor</source>
         <translation>Редактор скрипта</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ScriptEditorDialog.ui" line="108"/>
+        <location filename="../src/util/ScriptEditorDialog.ui" line="108"/>
         <source>Line:</source>
         <translation>Строка:</translation>
     </message>
@@ -1312,52 +1382,52 @@ The items cannot be recovered once deleted.</source>
 <context>
     <name>SearchGenbankSequenceDialog</name>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="20"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="20"/>
         <source>NCBI Sequence Search</source>
-        <translation>NCBI поиск</translation>
+        <translation>Поиск в NCBI GenBank</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="39"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="39"/>
         <source>Database:</source>
         <translation>База данных:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="64"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="64"/>
         <source>Search query:</source>
         <translation>Поисковый запрос:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="102"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="102"/>
         <source>History...</source>
         <translation>История...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="111"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="111"/>
         <source>Results:</source>
         <translation>Результаты:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="128"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="128"/>
         <source>ID</source>
         <translation>ID</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="133"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="133"/>
         <source>Desc</source>
         <translation>Описание</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="138"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="138"/>
         <source>Size</source>
         <translation>Размер</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="148"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="148"/>
         <source>Result limit:</source>
         <translation>Количество результатов:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SearchGenbankSequenceDialog.ui" line="181"/>
+        <location filename="../src/util/SearchGenbankSequenceDialog.ui" line="181"/>
         <source>Search</source>
         <translation>Поиск</translation>
     </message>
@@ -1365,65 +1435,65 @@ The items cannot be recovered once deleted.</source>
 <context>
     <name>SeqPasterWidget</name>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="14"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="14"/>
         <source>Create annotation</source>
         <translation>Создать аннотацию</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="32"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="32"/>
         <source>Paste data here</source>
         <translation>Вставьте текст</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="52"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="52"/>
         <source>Custom settings</source>
         <translation>Дополнительные настройки</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="67"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="67"/>
         <source>Alphabet:</source>
         <translation>Алфавит:</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="77"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="77"/>
         <source>Skip unknown symbols</source>
         <translation>Пропускать неизвестные символы</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/SeqPasterWidget.ui" line="87"/>
+        <location filename="../src/util/SeqPasterWidget.ui" line="87"/>
         <source>Replace unknown symbols with</source>
-        <translation>Заменять незивестные символы на</translation>
+        <translation>Заменять неизвестные символы на</translation>
     </message>
 </context>
 <context>
     <name>SharedConnectionsDialog</name>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="17"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="17"/>
         <source>Shared Databases Connections</source>
         <translation>Подключения к базам данных</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="43"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="43"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="56"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="56"/>
         <source>Delete</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="69"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="69"/>
         <source>Edit</source>
         <translation>Редактировать</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="101"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="101"/>
         <source>Connect</source>
         <translation>Подключиться</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ui/SharedConnectionsDialog.ui" line="114"/>
+        <location filename="../src/util/shared_db/SharedConnectionsDialog.ui" line="114"/>
         <source>Disconnect</source>
         <translation>Отключиться</translation>
     </message>
@@ -1431,34 +1501,39 @@ The items cannot be recovered once deleted.</source>
 <context>
     <name>U2::AceImportDialog</name>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="67"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="132"/>
         <source>Destination UGENEDB file</source>
         <translation>Место назначения UGENEDB файла</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="78"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="66"/>
         <source>Destination URL is not specified</source>
         <translation>Не указан путь места назначения</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="84"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="52"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="72"/>
         <source>Destination URL must point to a local file</source>
         <translation>Место назначения должно указывать на локальный файл</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="92"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="80"/>
         <source>There is opened view with destination file.
 Close it or choose different file</source>
         <translation>Указанный файл используется.
 Закройте его или выберите другой файл</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="102"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="90"/>
         <source>Destination directory '%1' is not writable, please choose different destination URL</source>
         <translation>Директория места назначения '%1' недоступна для записи, выберите другое место назначения</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="110"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="98"/>
         <source>Destination file already exists.
 To overwrite the file, press 'Replace'.
 To append data to existing file press 'Append'.</source>
@@ -1467,22 +1542,23 @@ To append data to existing file press 'Append'.</source>
 Для добавления данных в существующий файл нажмите 'Добавить'.</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="113"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="101"/>
         <source>Replace</source>
         <translation>Переписать</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="114"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="102"/>
         <source>Append</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="115"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="53"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="103"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="119"/>
+        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="107"/>
         <source>Destination file '%1' cannot be removed</source>
         <translation>Файл '%1' не может быть удален</translation>
     </message>
@@ -1490,24 +1566,24 @@ To append data to existing file press 'Append'.</source>
 <context>
     <name>U2::AddDocumentAndOpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="311"/>
-        <location filename="../src/OpenViewTask.cpp" line="325"/>
+        <location filename="../src/OpenViewTask.cpp" line="332"/>
+        <location filename="../src/OpenViewTask.cpp" line="346"/>
         <source>Opening view for document: 'NONAME'</source>
         <translation>Открытие документа: 'NONAME'</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="315"/>
-        <location filename="../src/OpenViewTask.cpp" line="328"/>
+        <location filename="../src/OpenViewTask.cpp" line="336"/>
+        <location filename="../src/OpenViewTask.cpp" line="349"/>
         <source>Opening view for document: %1</source>
         <translation>Открытие документа: %1</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="317"/>
+        <location filename="../src/OpenViewTask.cpp" line="338"/>
         <source>Provided document is NULL</source>
         <translation>Provided document is NULL</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="330"/>
+        <location filename="../src/OpenViewTask.cpp" line="351"/>
         <source>Document provider is NULL</source>
         <translation>Document provider is NULL</translation>
     </message>
@@ -1515,22 +1591,36 @@ To append data to existing file press 'Append'.</source>
 <context>
     <name>U2::AddNewDocumentDialogImpl</name>
     <message>
-        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="60"/>
+        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="61"/>
         <source>Create</source>
         <translation>Создать</translation>
     </message>
     <message>
-        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="61"/>
+        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="62"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="144"/>
+        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="71"/>
+        <source>Save File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="82"/>
+        <source>Invalid Document Location</source>
+        <translation type="unfinished"></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>Сохранить файл</translation>
+        <translation type="vanished">Сохранить файл</translation>
     </message>
     <message>
-        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="76"/>
+        <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="96"/>
         <source>Project is locked</source>
         <translation>Проект заблокирован</translation>
     </message>
@@ -1572,20 +1662,33 @@ To append data to existing file press 'Append'.</source>
     </message>
 </context>
 <context>
+    <name>U2::BreakpointConditionEditDialog</name>
+    <message>
+        <location filename="../src/util/BreakpointConditionEditDialog.cpp" line="39"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/util/BreakpointConditionEditDialog.cpp" line="40"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+</context>
+<context>
     <name>U2::CreateAnnotationDialog</name>
     <message>
-        <location filename="../src/util/CreateAnnotationDialog.cpp" line="57"/>
+        <location filename="../src/util/CreateAnnotationDialog.cpp" line="50"/>
         <source>Create</source>
         <translation>Создать</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationDialog.cpp" line="71"/>
-        <location filename="../src/util/CreateAnnotationDialog.cpp" line="76"/>
+        <location filename="../src/util/CreateAnnotationDialog.cpp" line="70"/>
+        <location filename="../src/util/CreateAnnotationDialog.cpp" line="75"/>
         <source>Error</source>
         <translation>Ошибка валидации</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationDialog.cpp" line="76"/>
+        <location filename="../src/util/CreateAnnotationDialog.cpp" line="75"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте пожалуйста настройки</translation>
     </message>
@@ -1593,12 +1696,12 @@ To append data to existing file press 'Append'.</source>
 <context>
     <name>U2::CreateAnnotationNormalWidget</name>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.cpp" line="206"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.cpp" line="222"/>
         <source>Save annotation(s) to</source>
         <translation>Сохранить результат(ы) в</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.cpp" line="210"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.cpp" line="226"/>
         <source>Annotation parameters</source>
         <translation>Параметры аннотации</translation>
     </message>
@@ -1606,12 +1709,12 @@ To append data to existing file press 'Append'.</source>
 <context>
     <name>U2::CreateAnnotationOptionsPanelWidget</name>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.cpp" line="202"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.cpp" line="218"/>
         <source>Save annotation(s) to</source>
         <translation>Сохранить результат(ы) в</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.cpp" line="205"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.cpp" line="221"/>
         <source>Annotation parameters</source>
         <translation>Параметры аннотации</translation>
     </message>
@@ -1619,37 +1722,36 @@ To append data to existing file press 'Append'.</source>
 <context>
     <name>U2::CreateAnnotationWidgetController</name>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="219"/>
         <source>Save file</source>
-        <translation>Сохранить файл</translation>
+        <translation type="vanished">Сохранить файл</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="264"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="239"/>
         <source>Select annotation saving parameters</source>
         <translation>Выберите параметры сохранения аннотации</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="267"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="242"/>
         <source>Document is already added to the project: '%1'</source>
         <translation>Документ уже существует: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="272"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="247"/>
         <source>Illegal folder: %1</source>
         <translation>Не найден путь: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="277"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="252"/>
         <source>Illegal annotation name</source>
         <translation>Нелегальные символы в имени аннотации. Допустимы только цифры, буквы и подчёркивания</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="282"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="257"/>
         <source>Illegal group name</source>
         <translation>Нелегальные символы в имени группы</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="285"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="260"/>
         <source>Invalid location! Location must be in GenBank format.
 Simple examples:
 1..10
@@ -1661,11 +1763,16 @@ complement(5..15)</source>
 join(1..10,15..45)
 complement(5..15)</translation>
     </message>
+    <message>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="354"/>
+        <source>Save File</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::CreateDocumentFromTextDialogController</name>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="71"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="128"/>
         <source>Select file to save...</source>
         <translation>Сохранение файла...</translation>
     </message>
@@ -1680,33 +1787,17 @@ complement(5..15)</translation>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="90"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="81"/>
         <source>No path specified</source>
         <translation>Путь не задан</translation>
     </message>
     <message>
-        <source>Error</source>
-        <translation type="vanished">Ошибка</translation>
-    </message>
-    <message>
-        <source>The project cannot be created</source>
-        <translation type="vanished">Проект не может быть создан</translation>
-    </message>
-    <message>
-        <source>warning</source>
-        <translation type="vanished">Внимание</translation>
-    </message>
-    <message>
-        <source>The document already in the project</source>
-        <translation type="vanished">Документ уже открыт в проекте</translation>
-    </message>
-    <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="103"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="94"/>
         <source>Sequence name is empty</source>
         <translation>Имя последовательности пусто</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="85"/>
+        <location filename="../src/util/CreateDocumentFromTextDialogController.cpp" line="76"/>
         <source>Filename is empty</source>
         <translation>Не задано имя файла</translation>
     </message>
@@ -1714,12 +1805,22 @@ complement(5..15)</translation>
 <context>
     <name>U2::CreateObjectRelationDialogController</name>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="72"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="52"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="53"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="74"/>
         <source>Warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="73"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="75"/>
         <source>Found annotations that are out of the sequence range, continue?</source>
         <translation>Найдены аннотации, выходящие за границы последовательности. Продолжить?</translation>
     </message>
@@ -1729,12 +1830,12 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/util/CreateSequenceFromTextAndOpenViewTask.cpp" line="40"/>
         <source>Create sequence from raw data</source>
-        <translation type="unfinished"></translation>
+        <translation>Create sequence from raw data</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateSequenceFromTextAndOpenViewTask.cpp" line="55"/>
+        <location filename="../src/util/CreateSequenceFromTextAndOpenViewTask.cpp" line="56"/>
         <source>Can't create a project</source>
-        <translation type="unfinished"></translation>
+        <translation>Can't create a project</translation>
     </message>
 </context>
 <context>
@@ -1750,45 +1851,54 @@ complement(5..15)</translation>
         <translation>Проект заблокирован</translation>
     </message>
     <message>
-        <location filename="../src/util/DialogUtils.cpp" line="73"/>
         <source>Export alignment image</source>
-        <translation>Экспорт изображения выравнивания</translation>
+        <translation type="vanished">Экспорт изображения выравнивания</translation>
     </message>
 </context>
 <context>
     <name>U2::DownloadRemoteFileDialog</name>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="124"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="64"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="65"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="127"/>
         <source>Select directory to save</source>
         <translation>Папка для сохранения</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="165"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="168"/>
         <source>Resource id is empty!</source>
         <translation>Идентификатор ресурса пуст!</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="171"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="174"/>
         <source>No directory selected for saving file!</source>
         <translation>Не задана директория для сохранения файла!</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="201"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="206"/>
         <source>Download remote documents</source>
         <translation>Скачать удаленные документы</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="241"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="246"/>
         <source>Hint: </source>
         <translation>Подсказка: </translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="242"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="247"/>
         <source>Use database unique identifier.</source>
         <translation>Использовать уникальный идентификатор базы данных.</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="244"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="249"/>
         <source>You can download multiple items by separating IDs with space or semicolon.</source>
         <translation>Вы можете скачать несколько элементов разделяя идентификаторы при помощи пробела или точки с запятой.</translation>
     </message>
@@ -1849,6 +1959,16 @@ complement(5..15)</translation>
 <context>
     <name>U2::EditSequenceDialogController</name>
     <message>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="73"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="74"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
         <location filename="../src/util/EditSequenceDialogController.cpp" line="98"/>
         <source>Insert Sequence</source>
         <translation>Вставить последовательность</translation>
@@ -1859,22 +1979,22 @@ complement(5..15)</translation>
         <translation>Заменить последовательность</translation>
     </message>
     <message>
-        <location filename="../src/util/EditSequenceDialogController.cpp" line="145"/>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="141"/>
         <source>Directory to save is not exists</source>
         <translation>Директория не существует</translation>
     </message>
     <message>
-        <location filename="../src/util/EditSequenceDialogController.cpp" line="149"/>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="145"/>
         <source>Entered path is empty</source>
         <translation>Не задан путь</translation>
     </message>
     <message>
-        <location filename="../src/util/EditSequenceDialogController.cpp" line="153"/>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="149"/>
         <source>Filename is empty</source>
         <translation>Не задано имя файла</translation>
     </message>
     <message>
-        <location filename="../src/util/EditSequenceDialogController.cpp" line="171"/>
+        <location filename="../src/util/EditSequenceDialogController.cpp" line="232"/>
         <source>Select file to save...</source>
         <translation>Файл для сохранения...</translation>
     </message>
@@ -1955,47 +2075,47 @@ complement(5..15)</translation>
 <context>
     <name>U2::ExportAnnotationsDialog</name>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="14"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="14"/>
         <source>Export Annotations</source>
         <translation>Экспорт аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="25"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="25"/>
         <source>Export to file</source>
         <translation>Экспортировать в файл</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="37"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="37"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="49"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="49"/>
         <source>File format</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="58"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="58"/>
         <source>Save sequences under annotations</source>
         <translation>Сохранить последовательности аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ui/ExportAnnotationsDialog.ui" line="65"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="65"/>
         <source>Save sequence names</source>
         <translation>Сохранить имена последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="48"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="47"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="49"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="48"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="143"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="69"/>
         <source>Select file to save annotations</source>
         <translation>Выберите файл для сохранения аннотаций</translation>
     </message>
@@ -2003,12 +2123,12 @@ complement(5..15)</translation>
 <context>
     <name>U2::ExportDocumentDialogController</name>
     <message>
-        <location filename="../src/util/ExportDocumentDialogController.cpp" line="49"/>
+        <location filename="../src/util/ExportDocumentDialogController.cpp" line="48"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportDocumentDialogController.cpp" line="50"/>
+        <location filename="../src/util/ExportDocumentDialogController.cpp" line="49"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -2016,55 +2136,57 @@ complement(5..15)</translation>
 <context>
     <name>U2::ExportImageDialog</name>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="76"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="69"/>
         <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="103"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="96"/>
         <source>The image file path is empty.</source>
         <translation>Путь до изображения пуст.</translation>
     </message>
     <message>
-        <source>The image file cannot be created. This can be caused that the file name contains illegal characters or it's too long.</source>
-        <translation type="obsolete">Ошибка в имени файла: нелегальные символы или слишком длинное имя.</translation>
-    </message>
-    <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="108"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="101"/>
         <source>The image file cannot be created. No write permissions.</source>
         <translation>Файл не может быть создан. Недостаточно прав.</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="115"/>
         <source>Overwrite file?</source>
-        <translation>Переписать файл?</translation>
+        <translation type="vanished">Переписать файл?</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="116"/>
         <source>The file "%1" already exists. Do you wish to overwrite it?</source>
-        <translation>Файл "%1" уже существует. Переписать его?</translation>
+        <translation type="vanished">Файл "%1" уже существует. Переписать его?</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="124"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="109"/>
         <source>Saving image to '%1'...</source>
         <translation>Сохранение изображения в '%1'...</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="150"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="226"/>
         <source>Save Image As</source>
         <translation>Сохранить изображение как</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="213"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="146"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
 </context>
 <context>
+    <name>U2::FeatureKeyFilterTask</name>
+    <message>
+        <location filename="../src/util/project/filter_tasks/FeatureKeyFilterTask.cpp" line="59"/>
+        <source>DbiRef is invalid</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::FileLineEdit</name>
     <message>
-        <location filename="../src/util/DialogUtils.cpp" line="103"/>
-        <location filename="../src/util/DialogUtils.cpp" line="109"/>
+        <location filename="../src/util/DialogUtils.cpp" line="91"/>
+        <location filename="../src/util/DialogUtils.cpp" line="97"/>
         <source>Select file(s)</source>
         <translation>Выберите файл(ы)</translation>
     </message>
@@ -2185,7 +2307,7 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/util/ImportSequenceFromRawDataTask.cpp" line="31"/>
         <source>Import sequence from raw data</source>
-        <translation type="unfinished"></translation>
+        <translation>Import sequence from raw data</translation>
     </message>
 </context>
 <context>
@@ -2320,55 +2442,35 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
-    <name>U2::LoadDASDocumentsAndOpenViewTask</name>
-    <message>
-        <source>Load DAS documents and open view</source>
-        <translation type="vanished">Загрузить и открыть документы DAS</translation>
-    </message>
-    <message>
-        <source>Resource ID: %1</source>
-        <translation type="vanished">Идентификатор: %1</translation>
-    </message>
-    <message>
-        <source>Converted resource ID: %2</source>
-        <translation type="vanished">Конвертированный идентификатор ресурса: %2</translation>
-    </message>
-    <message>
-        <source>Resolution: </source>
-        <translation type="vanished">Заключение:</translation>
-    </message>
-    <message>
-        <source><font color='%1'>cancelled</font></source>
-        <translation type="vanished"><font color='%1'>отменено</font></translation>
-    </message>
+    <name>U2::LoadRemoteDocumentAndAddToProjectTask</name>
     <message>
-        <source><font color='%1'>error</font></source>
-        <translation type="vanished"><font color='%1'>ошибка</font></translation>
+        <location filename="../src/OpenViewTask.cpp" line="224"/>
+        <location filename="../src/OpenViewTask.cpp" line="231"/>
+        <location filename="../src/OpenViewTask.cpp" line="238"/>
+        <source>Load remote document and add to project</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><font color='%1'>success</font></source>
-        <translation type="vanished"><font color='%1'>успешно</font></translation>
+        <location filename="../src/OpenViewTask.cpp" line="283"/>
+        <source>Cannot find %1 in %2 database</source>
+        <translation type="unfinished">Невозможно найти %1 в базе данных %2</translation>
     </message>
 </context>
 <context>
     <name>U2::LoadRemoteDocumentAndOpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="267"/>
         <source>Cannot find %1 in %2 database</source>
-        <translation>Невозможно найти %1 в базе данных %2</translation>
+        <translation type="vanished">Невозможно найти %1 в базе данных %2</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="223"/>
-        <location filename="../src/OpenViewTask.cpp" line="230"/>
-        <location filename="../src/OpenViewTask.cpp" line="237"/>
         <source>Load remote document and open view</source>
-        <translation>Загрузить и открыть удаленный документ</translation>
+        <translation type="vanished">Загрузить и открыть удаленный документ</translation>
     </message>
 </context>
 <context>
     <name>U2::LoadUnloadedDocumentAndOpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="69"/>
+        <location filename="../src/OpenViewTask.cpp" line="70"/>
         <source>Load document: '%1'</source>
         <translation>Загрузка документа: %1</translation>
     </message>
@@ -2496,12 +2598,12 @@ complement(5..15)</translation>
 <context>
     <name>U2::OpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="151"/>
+        <location filename="../src/OpenViewTask.cpp" line="152"/>
         <source>State is NULL</source>
         <translation>State is NULL</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="153"/>
+        <location filename="../src/OpenViewTask.cpp" line="154"/>
         <source>GObject factory is NULL</source>
         <translation>GObject factory is NULL</translation>
     </message>
@@ -2511,12 +2613,12 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/PasteController.cpp" line="73"/>
         <source>Unable to handle so huge data in clipboard.</source>
-        <translation type="unfinished"></translation>
+        <translation>Unable to handle so huge data in clipboard.</translation>
     </message>
     <message>
         <location filename="../src/PasteController.cpp" line="77"/>
         <source>UGENE can not recognize current clipboard content as one of supported formats.</source>
-        <translation type="unfinished"></translation>
+        <translation>UGENE can not recognize current clipboard content as one of supported formats.</translation>
     </message>
 </context>
 <context>
@@ -2524,7 +2626,7 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/PasteController.cpp" line="204"/>
         <source>Cannot detect file format</source>
-        <translation type="unfinished"></translation>
+        <translation>Cannot detect file format</translation>
     </message>
 </context>
 <context>
@@ -2532,7 +2634,7 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/PasteController.cpp" line="178"/>
         <source>Pasting of directories is not supported:</source>
-        <translation type="unfinished"></translation>
+        <translation>Pasting of directories is not supported:</translation>
     </message>
 </context>
 <context>
@@ -2603,113 +2705,129 @@ complement(5..15)</translation>
 <context>
     <name>U2::ProjectTreeController</name>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="962"/>
         <source>Load selected documents</source>
-        <translation>Загрузить выбранные документы</translation>
+        <translation type="vanished">Загрузить выбранные документы</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="544"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="554"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="969"/>
         <source>Unload selected document</source>
-        <translation>Выгрузить выбранные документы</translation>
+        <translation type="vanished">Выгрузить выбранные документы</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="318"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="327"/>
         <source>Import to the database...</source>
         <translation>Импортировать в базу данных...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="319"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="328"/>
         <source>Import to the folder...</source>
         <translation>Импортировать в папку...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="726"/>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="760"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="731"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="765"/>
         <source>Unable to Restore</source>
         <translation>Невозможно восстановить</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="727"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="732"/>
         <source>UGENE is unable to restore some object from Recycle Bin because its original location does not exist. You can still restore the objects by dragging them with mouse from Recycle Bin.</source>
         <translation>UGENE не может восстановить некоторые объекты из корзины потому, что их изначальное местоположение не существует. Вы можете восстановить объекты путем перетаскивания мышью из корзины.</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="761"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="766"/>
         <source>UGENE is unable to restore some folder from Recycle Bin because its original location does not exist. You can still restore the folders by dragging them with mouse from Recycle Bin.</source>
         <translation>UGENE не может восстановить некоторые папки из корзины потому, что их изначальное местоположение не существует. Вы можете восстановить папки путем перетаскивания мышью из корзины.</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="827"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="832"/>
         <source>Select a database to import anything</source>
         <translation>Выберите базу данных для того, чтобы что-то импортировать</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="868"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="873"/>
         <source>No object to add to view</source>
         <translation>Нет объектов для добавления</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="874"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="879"/>
         <source>No object to remove from view</source>
         <translation>Нет объектов для удаления</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="952"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="942"/>
         <source>Add object to document...</source>
         <translation>Добавить объект в документ...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="957"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="947"/>
         <source>Import...</source>
         <translation>Импорт...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="984"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="952"/>
+        <source>Load selected document(s)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="959"/>
+        <source>Unload selected document(s)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="977"/>
         <source>Remove selected items</source>
         <translation>Удалить выбранные элементы</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="990"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="983"/>
         <source>Add folder...</source>
         <translation>Добавить папку...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="995"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="988"/>
         <source>Restore selected items</source>
         <translation>Восстановить выбранные элементы</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="999"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="992"/>
         <source>Empty recycle bin</source>
         <translation>Очистить корзину</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="980"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="970"/>
         <source>Rename...</source>
         <translation>Переименовать...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="559"/>
-        <source>Edit</source>
-        <translation>Редактировать</translation>
-    </message>
-    <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="972"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="962"/>
         <source>Lock document for editing</source>
         <translation>Заблокировать внесение изменений</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="976"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="966"/>
         <source>Unlock document for editing</source>
         <translation>Снять блокировку изменений</translation>
     </message>
 </context>
 <context>
+    <name>U2::ProjectTreeItemSelectorDialogImpl</name>
+    <message>
+        <location filename="../src/util/ProjectTreeItemSelectorDialog.cpp" line="44"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ProjectTreeItemSelectorDialog.cpp" line="45"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+</context>
+<context>
     <name>U2::ProjectViewModel</name>
     <message>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1108"/>
@@ -2734,6 +2852,19 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
+    <name>U2::QueryBlockWidget</name>
+    <message>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="246"/>
+        <source>Term:</source>
+        <translation>Условие:</translation>
+    </message>
+    <message>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="257"/>
+        <source>All fields</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::RangeSelector</name>
     <message>
         <location filename="../src/util/RangeSelector.cpp" line="60"/>
@@ -2770,57 +2901,89 @@ complement(5..15)</translation>
 <context>
     <name>U2::RegionSelector</name>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="293"/>
+        <location filename="../src/util/RegionSelector.cpp" line="114"/>
         <source>Set minimum</source>
         <translation>Установить минимум</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="298"/>
+        <location filename="../src/util/RegionSelector.cpp" line="119"/>
         <source>Set maximum</source>
         <translation>Установить максимум</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="305"/>
-        <location filename="../src/util/RegionSelector.cpp" line="326"/>
+        <location filename="../src/util/RegionSelector.cpp" line="126"/>
+        <location filename="../src/util/RegionSelector.cpp" line="147"/>
         <source>Region</source>
         <translation>Регион</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="313"/>
-        <location filename="../src/util/RegionSelector.cpp" line="332"/>
+        <location filename="../src/util/RegionSelector.cpp" line="134"/>
+        <location filename="../src/util/RegionSelector.cpp" line="153"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="174"/>
+        <location filename="../src/util/RegionSelector.cpp" line="102"/>
         <source>Invalid sequence region!</source>
         <translation>Некорректный регион последовательности!</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="180"/>
         <source>Invalid Start position of region</source>
-        <translation>Некорректная стартовая позиция в регионе</translation>
+        <translation type="vanished">Некорректная стартовая позиция в регионе</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="189"/>
         <source>Invalid End position of region</source>
-        <translation>Некорректная конечная позиция в регионе</translation>
+        <translation type="vanished">Некорректная конечная позиция в регионе</translation>
     </message>
     <message>
-        <location filename="../src/util/RegionSelector.cpp" line="197"/>
         <source>Start position is greater than End position</source>
-        <translation>Начальная позичия больше чем конечная</translation>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="150"/>
+        <source>Cannot get preset name, ComboBox is NULL</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <location filename="../src/util/RegionSelectorController.cpp" line="230"/>
+        <location filename="../src/util/RegionSelectorController.cpp" line="277"/>
+        <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>
+    </message>
+</context>
+<context>
+    <name>U2::RegionSelectorWithExludedRegion</name>
+    <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>
     </message>
 </context>
 <context>
     <name>U2::RemovePartFromSequenceDialogController</name>
     <message>
-        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="53"/>
+        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="60"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="54"/>
+        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="61"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -2845,7 +3008,7 @@ complement(5..15)</translation>
         <translation>Регион выходит за границы последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="103"/>
+        <location filename="../src/util/RemovePartFromSequenceDialogController.cpp" line="138"/>
         <source>Select file to save...</source>
         <translation>Выберите файл для сохранения...</translation>
     </message>
@@ -2853,9 +3016,8 @@ complement(5..15)</translation>
 <context>
     <name>U2::SaveDocumentGroupController</name>
     <message>
-        <location filename="../src/util/SaveDocumentGroupController.cpp" line="41"/>
         <source>Select file location</source>
-        <translation>Укажите местонахождение файла</translation>
+        <translation type="vanished">Укажите местонахождение файла</translation>
     </message>
 </context>
 <context>
@@ -2977,10 +3139,6 @@ complement(5..15)</translation>
         <translation>Некоторые из символов, которые не соответствали алфавиту были</translation>
     </message>
     <message>
-        <source>Some of symbols, which doesn't match alphabet has been </source>
-        <translation type="obsolete">Некоторые из символов, которые не соответствали алфавиту были</translation>
-    </message>
-    <message>
         <location filename="../src/util/SeqPasterWidgetController.cpp" line="148"/>
         <source>replaced</source>
         <translation>переписаны</translation>
@@ -3062,42 +3220,42 @@ check connection settings</translation>
 <context>
     <name>U2::ToolsMenu</name>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="108"/>
+        <location filename="../src/ToolsMenu.cpp" line="107"/>
         <source>Sanger data analysis</source>
         <translation>Анализ данных секвенирования по Сэнгеру</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="118"/>
+        <location filename="../src/ToolsMenu.cpp" line="117"/>
         <source>NGS data analysis</source>
         <translation>Анализ данных NGS</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="145"/>
+        <location filename="../src/ToolsMenu.cpp" line="144"/>
         <source>BLAST</source>
         <translation>BLAST</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="159"/>
+        <location filename="../src/ToolsMenu.cpp" line="158"/>
         <source>Multiple sequence alignment</source>
         <translation>Множественное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="171"/>
+        <location filename="../src/ToolsMenu.cpp" line="170"/>
         <source>Cloning</source>
         <translation>Клонирование</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="179"/>
+        <location filename="../src/ToolsMenu.cpp" line="178"/>
         <source>Primer</source>
         <translation>Подбор праймеров</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="185"/>
+        <location filename="../src/ToolsMenu.cpp" line="184"/>
         <source>Search for TFBS</source>
         <translation>Поиск сайтов связывания транскрипционных факторов (TFBS)</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="194"/>
+        <location filename="../src/ToolsMenu.cpp" line="193"/>
         <source>HMMER tools</source>
         <translation>Инструменты HMMER</translation>
     </message>
@@ -3105,64 +3263,64 @@ check connection settings</translation>
 <context>
     <name>U2::UnloadDocumentTask</name>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="49"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="50"/>
         <source>Unload document task: %1</source>
         <translation>Выгрузка документа: %1</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="74"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="76"/>
         <source>Document '%1' can't be unloaded: </source>
         <translation>Документ '%1' не может быть выгружен: </translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="77"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="79"/>
         <source>save failed!</source>
         <translation>Ошибка сохранения!</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="89"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="91"/>
         <source>unexpected error</source>
         <translation>неизвестная ошибка</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="110"/>
-        <location filename="../src/UnloadDocumentTask.cpp" line="133"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="112"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="135"/>
         <source>Question?</source>
         <translation>Вопрос?</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="110"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="112"/>
         <source>Close views for document: %1</source>
         <translation>Закрыть показ для документа: %1</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="133"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="135"/>
         <source>Save document: %1</source>
         <translation>Сохранить документ:%1</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="152"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="154"/>
         <source>Failed to unload document</source>
         <translation>Не удалось выгрузить документ</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="156"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="158"/>
         <source>Failed to unload document: %1, error: %2</source>
         <translation>Невозможно выгрузить документ: %1, ошибка: %2</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="107"/>
-        <location filename="../src/UnloadDocumentTask.cpp" line="169"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="109"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="171"/>
         <source>There is an active view with document content</source>
         <translation>Документ используется в открытых окнах</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="178"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="180"/>
         <source>Document is locked by some algorithm and cannot be unloaded</source>
         <translation>Документ был заблокирован одним из алгоритмов и не может быть выгружен</translation>
     </message>
     <message>
-        <location filename="../src/UnloadDocumentTask.cpp" line="158"/>
+        <location filename="../src/UnloadDocumentTask.cpp" line="160"/>
         <source>Warning</source>
         <translation>Предупреждение</translation>
     </message>
@@ -3189,11 +3347,4 @@ check connection settings</translation>
         <translation>Скриншот</translation>
     </message>
 </context>
-<context>
-    <name>U2::WidgetScreenshotImageExportTaskFactory</name>
-    <message>
-        <source>Screenshot</source>
-        <translation type="obsolete">Скриншот</translation>
-    </message>
-</context>
 </TS>
diff --git a/src/corelibs/U2Lang/CMakeLists.txt b/src/corelibs/U2Lang/CMakeLists.txt
new file mode 100644
index 0000000..660bd2b
--- /dev/null
+++ b/src/corelibs/U2Lang/CMakeLists.txt
@@ -0,0 +1,23 @@
+cmake_minimum_required(VERSION 3.4)
+project(U2Lang)
+
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt5 REQUIRED Core Xml Script)
+
+add_definitions(-DBUILDING_U2LANG_DLL)
+
+include_directories(src)
+include_directories(../../include)
+
+file(GLOB_RECURSE SRCS src/*.cpp)
+file(GLOB_RECURSE HDRS src/*.h)
+qt5_add_resources(RCC_SRCS U2Lang.qrc)
+
+add_library(U2Lang SHARED ${HDRS} ${SRCS} ${RCC_SRCS})
+
+target_link_libraries(U2Lang
+        Qt5::Core Qt5::Xml Qt5::Script
+        U2Core)
+
diff --git a/src/corelibs/U2Lang/U2Lang.pro b/src/corelibs/U2Lang/U2Lang.pro
index 3424545..cf6d39f 100644
--- a/src/corelibs/U2Lang/U2Lang.pro
+++ b/src/corelibs/U2Lang/U2Lang.pro
@@ -58,6 +58,7 @@ HEADERS += src/library/BaseActorCategories.h \
            src/support/BreakpointGreaterOrEqualHitCounter.h \
            src/support/BreakpointMultipleHitCounter.h \
            src/support/CoreLibConstants.h \
+           src/support/DatasetFetcher.h \
            src/support/ElapsedTimeUpdater.h \
            src/support/IntegralBusUtils.h \
            src/support/MapDatatypeEditor.h \
@@ -168,6 +169,7 @@ SOURCES += src/library/BaseActorCategories.cpp \
            src/support/BreakpointGreaterOrEqualHitCounter.cpp \
            src/support/BreakpointMultipleHitCounter.cpp \
            src/support/CoreLibConstants.cpp \
+           src/support/DatasetFetcher.cpp \
            src/support/ElapsedTimeUpdater.cpp \
            src/support/IntegralBusUtils.cpp \
            src/support/MapDatatypeEditor.cpp \
diff --git a/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.cpp b/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.cpp
index 0984777..f5c72ca 100644
--- a/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.cpp
+++ b/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.cpp
@@ -111,7 +111,7 @@ void DbObjUrlContainer::accept(URLContainerVisitor *visitor) {
 }
 
 bool DbObjUrlContainer::validateUrl(ProblemList &problemList) {
-    return WorkflowUtils::validateInputDbObjects(url, problemList);
+    return WorkflowUtils::validateInputDbObject(url, problemList);
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -220,7 +220,7 @@ bool DbFolderUrlContainer::validateUrl(ProblemList &problemList) {
     SAFE_POINT(NULL != it, "Invalid DB object iterator", false);
     while (it->hasNext()) {
         QString fileUrl = it->getNextFile();
-        bool urlIsValid = WorkflowUtils::validateInputDbObjects(fileUrl, problemList);
+        bool urlIsValid = WorkflowUtils::validateInputDbObject(fileUrl, problemList);
         res = res && urlIsValid;
     }
     return res;
diff --git a/src/corelibs/U2Lang/src/support/DatasetFetcher.cpp b/src/corelibs/U2Lang/src/support/DatasetFetcher.cpp
new file mode 100644
index 0000000..cce014c
--- /dev/null
+++ b/src/corelibs/U2Lang/src/support/DatasetFetcher.cpp
@@ -0,0 +1,103 @@
+/**
+ * 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/L10n.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "DatasetFetcher.h"
+
+namespace U2 {
+namespace LocalWorkflow {
+
+DatasetFetcher::DatasetFetcher()
+: worker(NULL), port(NULL), context(NULL), datasetInitialized(false), fullDataset(false)
+{
+
+}
+
+DatasetFetcher::DatasetFetcher(BaseWorker *worker, IntegralBus *port, WorkflowContext *context)
+: worker(worker), port(port), context(context), datasetInitialized(false), fullDataset(false)
+{
+
+}
+
+bool DatasetFetcher::hasFullDataset() const {
+    return fullDataset;
+}
+
+bool DatasetFetcher::isDone() const {
+    return datasetMessages.isEmpty() && !port->hasMessage() && port->isEnded();
+}
+
+QList<Message> DatasetFetcher::takeFullDataset() {
+    SAFE_POINT(hasFullDataset(), L10N::internalError("Unexpected method call"), datasetMessages);
+    QList<Message> result = datasetMessages;
+    cleanup();
+    return result;
+}
+
+void DatasetFetcher::processInputMessage() {
+    if (port->hasMessage() && !hasFullDataset()) {
+        if (datasetChanged(port->lookMessage())) {
+            fullDataset = true;
+            return;
+        }
+        takeMessage();
+    }
+
+    if (!datasetMessages.isEmpty() && !port->hasMessage() && port->isEnded()) {
+        fullDataset = true;
+    }
+}
+
+QString DatasetFetcher::getDatasetName(const Message &message) const {
+    const int metadataId = message.getMetadataId();
+    const MessageMetadata metadata = context->getMetadataStorage().get(metadataId);
+    return metadata.getDatasetName();
+}
+
+bool DatasetFetcher::datasetChanged(const Message &message) const {
+    if (!datasetInitialized) {
+        return false;
+    }
+    return (getDatasetName(message) != datasetName);
+}
+
+void DatasetFetcher::takeMessage() {
+    const Message message = worker->getMessageAndSetupScriptValues(port);
+    datasetMessages << message;
+
+    if (!datasetInitialized) {
+        datasetInitialized = true;
+        datasetName = getDatasetName(message);
+    }
+
+    SAFE_POINT(!datasetChanged(message), L10N::internalError("Unexpected method call"), );
+}
+
+void DatasetFetcher::cleanup() {
+    datasetInitialized = false;
+    fullDataset = false;
+    datasetMessages.clear();
+}
+
+} //LocalWorkflow
+} //U2
diff --git a/src/corelibs/U2Lang/src/support/DatasetFetcher.h b/src/corelibs/U2Lang/src/support/DatasetFetcher.h
new file mode 100644
index 0000000..c44af00
--- /dev/null
+++ b/src/corelibs/U2Lang/src/support/DatasetFetcher.h
@@ -0,0 +1,60 @@
+/**
+ * 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_DATASET_FETCHER_H_
+#define _U2_DATASET_FETCHER_H_
+
+#include <U2Lang/LocalDomain.h>
+
+namespace U2 {
+namespace LocalWorkflow {
+
+class U2LANG_EXPORT DatasetFetcher {
+public:
+    DatasetFetcher();
+    DatasetFetcher(BaseWorker *worker, IntegralBus *port, WorkflowContext *context);
+
+    bool hasFullDataset() const;
+    bool isDone() const;
+    QList<Message> takeFullDataset();
+    void processInputMessage();
+
+private:
+    QString getDatasetName(const Message &message) const;
+    bool datasetChanged(const Message &message) const;
+    void takeMessage();
+    void cleanup();
+
+private:
+    BaseWorker *worker;
+    IntegralBus *port;
+    WorkflowContext *context;
+
+    bool datasetInitialized;
+    bool fullDataset;
+    QString datasetName;
+    QList<Message> datasetMessages;
+};
+
+} //LocalWorkflow
+} //U2
+
+#endif //_U2_DATASET_FETCHER_H_
diff --git a/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.cpp b/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.cpp
index aaee837..2a11b88 100644
--- a/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.cpp
+++ b/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.cpp
@@ -21,6 +21,7 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/CmdlineTaskRunner.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/LoadDocumentTask.h>
@@ -42,6 +43,11 @@ namespace U2 {
 
 using namespace Workflow;
 
+SimpleInOutWorkflowTaskConfig::SimpleInOutWorkflowTaskConfig()
+: emptyResultPossible(false)
+{
+}
+
 /***************************
  * WorkflowRunSchemaForTask
  ***************************/
@@ -60,7 +66,7 @@ static QString findWorkflowPath(const QString & schemaName) {
 SimpleInOutWorkflowTask::SimpleInOutWorkflowTask(const SimpleInOutWorkflowTaskConfig& _conf)
 : DocumentProviderTask(tr("Run workflow: %1").arg(_conf.schemaName), TaskFlags_NR_FOSCOE), conf(_conf)
 {
-    inDoc = new Document(BaseDocumentFormats::get(BaseDocumentFormats::FASTA), IOAdapterUtils::get(BaseIOAdapters::LOCAL_FILE),
+    inDoc = new Document(BaseDocumentFormats::get(conf.inFormat), IOAdapterUtils::get(BaseIOAdapters::LOCAL_FILE),
                         GUrl("unused"), U2DbiRef(), conf.objects, conf.inDocHints);
     inDoc->setParent(this);
 }
@@ -100,15 +106,24 @@ QList<Task*> SimpleInOutWorkflowTask::onSubTaskFinished(Task* subTask) {
         conf.extraArgs << "--in=" + inputTmpFile.fileName();
         conf.extraArgs << "--out=" + resultTmpFile.fileName();
         conf.extraArgs << "--format=" + conf.outFormat;
-        RunCmdlineWorkflowTaskConfig monitorConf(schemaPath, conf.extraArgs);
+
+        CmdlineTaskConfig monitorConf;
+        monitorConf.command = "--task=" + schemaPath;
+        monitorConf.arguments = conf.extraArgs;
 #ifdef _DEBUG
-        monitorConf.logLevel2Commute = LogLevel_TRACE;
+        monitorConf.logLevel = LogLevel_TRACE;
 #else
-        monitorConf.logLevel2Commute = LogLevel_DETAILS;
+        monitorConf.logLevel = LogLevel_DETAILS;
 #endif
-        runWorkflowTask = new RunCmdlineWorkflowTask(monitorConf);
+        runWorkflowTask = new CmdlineTaskRunner(monitorConf);
         res << runWorkflowTask;
     } else if (subTask == runWorkflowTask) {
+        if (0 == QFileInfo(resultTmpFile.fileName()).size()) {
+            if (!conf.emptyResultPossible) {
+                setError(tr("An error occurred during the task. See the log for details."));
+            }
+            return res;
+        }
         IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(BaseIOAdapters::LOCAL_FILE);
         ioLog.details(tr("Loading result file '%1'").arg(resultTmpFile.fileName()));
         loadResultTask = new LoadDocumentTask(conf.outFormat, resultTmpFile.fileName(), iof, conf.outDocHints);
diff --git a/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.h b/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.h
index 84828fd..206d263 100644
--- a/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.h
+++ b/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.h
@@ -33,17 +33,18 @@
 
 #include <U2Lang/Schema.h>
 #include <U2Lang/WorkflowIOTasks.h>
-#include <U2Lang/WorkflowRunTask.h>
 
 namespace U2 {
 
 using namespace Workflow;
 
+class CmdlineTaskRunner;
 class LoadDocumentTask;
 class MAlignmentObject;
 
 class U2LANG_EXPORT SimpleInOutWorkflowTaskConfig {
 public:
+    SimpleInOutWorkflowTaskConfig();
     QList<GObject*>     objects;
     DocumentFormatId    inFormat;
     QVariantMap         inDocHints;
@@ -51,11 +52,13 @@ public:
     QVariantMap         outDocHints;
     QStringList         extraArgs;
     QString             schemaName;
+    bool                emptyResultPossible;
 };
 
 /**
-    Runs workflow in a separate process and handles in-out parameters
-    The result is output document
+    Runs workflow in a separate process and handles in-out parameters.
+    The result is output document.
+    If problems occur during the workflow execution, only the first error is detected and warnings are skipped.
 */
 class U2LANG_EXPORT SimpleInOutWorkflowTask : public DocumentProviderTask {
     Q_OBJECT
@@ -74,7 +77,7 @@ private:
     SaveDocumentTask*                   saveInputTask;
     QTemporaryFile                      inputTmpFile;
 
-    RunCmdlineWorkflowTask*             runWorkflowTask;
+    CmdlineTaskRunner*                  runWorkflowTask;
 
     QTemporaryFile                      resultTmpFile;
     LoadDocumentTask*                   loadResultTask;
diff --git a/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp b/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp
index 17d89a1..0fbd079 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp
@@ -19,61 +19,22 @@
  * MA 02110-1301, USA.
  */
 
-#include "WorkflowRunTask.h"
-#include <U2Lang/DbiDataStorage.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/WorkflowManager.h>
-#include <U2Lang/Schema.h>
-#include <U2Lang/HRSchemaSerializer.h>
-#include <U2Lang/WorkflowUtils.h>
-#include <U2Lang/BaseAttributes.h>
-#include <U2Lang/WorkflowSettings.h>
-#include <U2Lang/LocalDomain.h>
-#include <U2Lang/WorkflowMonitor.h>
-
-#include <U2Core/Counter.h>
-#include <U2Core/CMDLineRegistry.h>
+#include <QCoreApplication>
 #include <U2Core/AppContext.h>
-#include <U2Core/Version.h>
-#include <U2Core/Settings.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/Counter.h>
 #include <U2Core/U2SafePoints.h>
-
-#include <QtCore/QDir>
-#include <QCoreApplication>
-
-#include <U2Lang/DbiDataStorage.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/WorkflowManager.h>
-#include <U2Lang/Schema.h>
 #include <U2Lang/HRSchemaSerializer.h>
-#include <U2Lang/WorkflowUtils.h>
-#include <U2Lang/BaseAttributes.h>
-#include <U2Lang/WorkflowSettings.h>
 #include <U2Lang/LocalDomain.h>
+#include <U2Lang/WorkflowDebugMessageParser.h>
+#include <U2Lang/WorkflowEnv.h>
+#include <U2Lang/WorkflowMonitor.h>
 
-#include "WorkflowDebugMessageParser.h"
 #include "WorkflowRunTask.h"
 
-#if (defined(Q_OS_WIN32) || defined(Q_OS_WINCE))
-#include <Windows.h>
-#endif
-
 namespace U2 {
 
-static const QString OUTPUT_PROGRESS_OPTION("ugene-output-progress-state");
-static const QString OUTPUT_ERROR_OPTION("ugene-output-error");
-static const int UPDATE_PROGRESS_INTERVAL = 500;
-static const QString OUTPUT_PROGRESS_TAG("task-progress=");
-static const QString ERROR_KEYWORD("#%*ugene-finished-with-error#%*");
-static const QString STATE_KEYWORD("#%&state#%&");
-static const QString MSG_NUM_KEYWORD("#%$msgnum#%$");
-static const QString MSG_PASSED_KEYWORD("#%$msgpassed#%$");
-
 WorkflowAbstractRunner::WorkflowAbstractRunner(const QString &name, TaskFlags flags)
-: Task(name, flags)
+: CmdlineTask(name, flags)
 {
 
 }
@@ -92,10 +53,9 @@ WorkflowAbstractIterationRunner::WorkflowAbstractIterationRunner(const QString &
  * WorkflowRunTask
  *******************************************/
 WorkflowRunTask::WorkflowRunTask(const Schema& sh, const QMap<ActorId, ActorId>& remap, WorkflowDebugStatus *debugInfo)
-    : WorkflowAbstractRunner(tr("Execute workflow"),
+: WorkflowAbstractRunner(tr("Execute workflow"),
     TaskFlags(TaskFlag_NoRun) | TaskFlag_ReportingIsSupported | TaskFlag_OnlyNotificationReport), rmap(remap), flows(sh.getFlows())
 {
-
     GCOUNTER( cvar, tvar, "WorkflowRunTask" );
     Q_ASSERT(NULL != debugInfo);
     if (NULL == debugInfo->parent()) {
@@ -111,35 +71,6 @@ WorkflowRunTask::WorkflowRunTask(const Schema& sh, const QMap<ActorId, ActorId>&
     addSubTask(t);
 
     setMaxParallelSubtasks(MAX_PARALLEL_SUBTASKS_AUTO);
-    if(AppContext::getCMDLineRegistry()->hasParameter(OUTPUT_PROGRESS_OPTION)) {
-        QTimer * timer = new QTimer(this);
-        connect(timer, SIGNAL(timeout()), SLOT(sl_outputProgressAndState()));
-        timer->start(UPDATE_PROGRESS_INTERVAL);
-    }
-}
-
-void WorkflowRunTask::sl_outputProgressAndState() {
-    coreLog.info(QString("%1%2").arg(OUTPUT_PROGRESS_TAG).arg(getProgress()));
-    foreach(const ActorId & id, rmap.values()) {
-        QList<WorkerState> ret;
-        foreach(Task* t, getSubtasks()) {
-            WorkflowIterationRunTask* rt = qobject_cast<WorkflowIterationRunTask*>(t);
-            ret << rt->getState(id);
-        }
-        if(!rmap.key(id).isEmpty()) {
-            assert(ret.size() == 1);
-            coreLog.info(QString("%1:%2:%3").arg(STATE_KEYWORD).arg(rmap.key(id)).arg((int)ret.first()));
-        }
-    }
-    foreach(Link * l, flows) {
-        ActorId srcId = rmap.key(l->source()->owner()->getId());
-        ActorId dstId = rmap.key(l->destination()->owner()->getId());
-
-        if(!srcId.isEmpty() && !dstId.isEmpty()){
-            coreLog.info(QString("%1:%2:%3:%4").arg(MSG_NUM_KEYWORD).arg(srcId).arg(dstId).arg(getMsgNum(l)));
-            coreLog.info(QString("%1:%2:%3:%4").arg(MSG_PASSED_KEYWORD).arg(srcId).arg(dstId).arg(getMsgPassed(l)));
-        }
-    }
 }
 
 inline bool isValidFile(const QString &link, const qint64 &processStartTime) {
@@ -180,20 +111,27 @@ int WorkflowRunTask::getMsgPassed(const Link* l) {
     return ret;
 }
 
-Task::ReportResult WorkflowRunTask::report() {
-    propagateSubtaskError();
-    if(hasError() && AppContext::getCMDLineRegistry()->hasParameter(OUTPUT_ERROR_OPTION)) {
-        coreLog.info(QString("%1%2%1").arg(ERROR_KEYWORD).arg(getError()));
+QString WorkflowRunTask::getTaskError() const {
+    if (hasError()) {
+        return getError();
     }
-    if(AppContext::getCMDLineRegistry()->hasParameter(OUTPUT_PROGRESS_OPTION)) {
-        sl_outputProgressAndState();
+
+    foreach(WorkflowMonitor *monitor, monitors) {
+        foreach(const Problem &problem, monitor->getProblems()) {
+            if (Problem::U2_ERROR == problem.type) {
+                return problem.message;
+            }
+        }
     }
-    return ReportResult_Finished;
+    return "";
 }
 
 /*******************************************
 * WorkflowIterationRunTask
 *******************************************/
+namespace {
+    const int UPDATE_PROGRESS_INTERVAL = 500;
+}
 
 WorkflowIterationRunTask::WorkflowIterationRunTask(const Schema& sh,
     WorkflowDebugStatus *initDebugInfo)
@@ -348,32 +286,6 @@ QList<Task*> WorkflowIterationRunTask::onSubTaskFinished(Task* subTask) {
     return tasks;
 }
 
-DocumentFormat *getDocumentFormatByProtoId(QString protoId) {
-    DocumentFormatId formatId;
-    if (CoreLibConstants::WRITE_TEXT_PROTO_ID == protoId) {
-        formatId = BaseDocumentFormats::PLAIN_TEXT;
-    }
-    else if (CoreLibConstants::WRITE_FASTA_PROTO_ID == protoId) {
-        formatId = BaseDocumentFormats::FASTA;
-    }
-    else if (CoreLibConstants::WRITE_GENBANK_PROTO_ID == protoId) {
-        formatId = BaseDocumentFormats::PLAIN_GENBANK;
-    }
-    else if (CoreLibConstants::WRITE_CLUSTAL_PROTO_ID == protoId) {
-        formatId = BaseDocumentFormats::CLUSTAL_ALN;
-    }
-    else if (CoreLibConstants::WRITE_STOCKHOLM_PROTO_ID == protoId) {
-        formatId = BaseDocumentFormats::STOCKHOLM;
-    }
-    else if (CoreLibConstants::WRITE_FASTQ_PROTO_ID == protoId ) {
-        formatId = BaseDocumentFormats::FASTQ;
-    } else {
-        return NULL;
-    }
-
-    return AppContext::getDocumentFormatRegistry()->getFormatById(formatId);
-}
-
 Task::ReportResult WorkflowIterationRunTask::report() {
     context->getMonitor()->pause();
     if (scheduler) {
@@ -520,273 +432,4 @@ void WorkflowIterationRunTask::sl_convertMessages2Documents( const Workflow::Lin
     }
 }
 
-/***********************************
- * RunCmdlineWorkflowTask
- ***********************************/
-static bool containsPrefix(const QStringList& list, const QString& prefix) {
-    foreach(const QString& listItem, list) {
-        if (listItem.startsWith(prefix)) {
-            return true;
-        }
-    }
-    return false;
-}
-
-RunCmdlineWorkflowTask::RunCmdlineWorkflowTask(const RunCmdlineWorkflowTaskConfig& _conf)
-: Task(tr("Workflow process"), TaskFlag_NoRun), conf(_conf), proc(new QProcess(this))
-{
-    processLogPrefix = "process:?>";
-}
-
-static QString getLogLevelName(LogLevel l) {
-    switch(l) {
-        case LogLevel_TRACE: return "TRACE";
-        case LogLevel_DETAILS: return "DETAILS";
-        case LogLevel_INFO: return "INFO";
-        case LogLevel_ERROR: return "ERROR";
-        default:
-            assert(0);
-    }
-    return "";
-}
-
-void RunCmdlineWorkflowTask::prepare() {
-    QStringList args;
-    // FIXME: use defined constants!
-    args << QString("--task=%1").arg(conf.schemaPath);
-    args << "--log-no-task-progress";
-    args << QString("--%1").arg(OUTPUT_PROGRESS_OPTION);
-    args << "--lang=en";
-    args << QString("--%1").arg(OUTPUT_ERROR_OPTION);
-    args << QString("--ini-file=\"%1\"").arg(AppContext::getSettings()->fileName());
-    args << conf.args;
-
-    if (!containsPrefix(args, "--log-level")) {
-        QString logLevel = getLogLevelName(conf.logLevel2Commute).toLower();
-        args << ("--log-level-" + logLevel);
-    }
-
-    connect(proc, SIGNAL(error(QProcess::ProcessError)), SLOT(sl_onError(QProcess::ProcessError)));
-    connect(proc, SIGNAL(readyReadStandardOutput()), SLOT(sl_onReadStandardOutput()));
-    QString cmdlineUgenePath(WorkflowSettings::getCmdlineUgenePath());
-    SAFE_POINT(!cmdlineUgenePath.isEmpty(), "ugenecl cmdline is empty!?", );
-    QString line = cmdlineUgenePath;
-    foreach(const QString& arg, args ) {
-        line+=" " + arg;
-    }
-    coreLog.details("Starting UGENE workflow: " + line);
-
-    proc->start(cmdlineUgenePath, args);
-#if (defined(Q_OS_WIN32) || defined(Q_OS_WINCE))
-    QString processId = NULL != proc->pid() ? QString::number(proc->pid()->dwProcessId) : "unknown";
-    processLogPrefix = QString("process: %1>").arg(processId);
-#else
-    processLogPrefix = QString("process:%1>").arg(proc->pid());
-#endif
-    bool startedSuccessfully = proc->waitForStarted();
-    CHECK_EXT(startedSuccessfully, setError(tr("Cannot start process '%1'").arg(cmdlineUgenePath)), );
-}
-
-void RunCmdlineWorkflowTask::sl_onError(QProcess::ProcessError err) {
-    QString msg;
-    switch(err) {
-    case QProcess::FailedToStart:
-        msg = tr("The process '%1' failed to start. Either the invoked program is missing, "
-            "or you may have insufficient permissions to invoke the program").arg(WorkflowSettings::getCmdlineUgenePath());
-        break;
-    case QProcess::Crashed:
-        msg = tr("The process '%1' crashed some time after starting successfully").arg(WorkflowSettings::getCmdlineUgenePath());
-        break;
-    case QProcess::WriteError:
-    case QProcess::ReadError:
-        msg = tr("Error occurred while reading from or writing to channel");
-        break;
-    default:
-        msg = tr("Unknown error occurred");
-    }
-    setError(msg);
-}
-
-/**
- * Returns the position of the last symbol of @nameCandidate in the @line.
- * Or returns -1 if the @line is not a log line
- */
-inline static int getLogNameCandidate(const QString &line, QString &nameCandidate) {
-    if ("" == line) {
-        return -1;
-    }
-
-    if (!line.startsWith("[")) {
-        return -1;
-    }
-
-    // maybe, @line is "[time][loglevel] log"
-    int openPos = line.indexOf("[", 1); // 1 because it is needed to skip first [time] substring
-    if (-1 == openPos) {
-        return -1;
-    }
-    int closePos = line.indexOf("]", openPos);
-    if (-1 == closePos) {
-        return -1;
-    }
-    nameCandidate = line.mid(openPos+1, closePos - openPos - 1);
-    return closePos;
-}
-
-void RunCmdlineWorkflowTask::writeLog(QStringList &lines) {
-    QStringList::Iterator it = lines.begin();
-    for (; it != lines.end(); it++) {
-        QString &line = *it;
-        line = line.trimmed();
-        QString nameCandidate;
-        int closePos = getLogNameCandidate(line, nameCandidate);
-        if (-1 == closePos) {
-            continue;
-        }
-
-
-        for (int i = conf.logLevel2Commute; i < LogLevel_NumLevels; i++) {
-            QString logLevelName = getLogLevelName((LogLevel)i);
-
-            if (logLevelName != nameCandidate) {
-                continue;
-            }
-
-            QString logLine = line.mid(closePos + 1);
-            logLine = logLine.trimmed();
-            bool commandToken = logLine.startsWith(OUTPUT_PROGRESS_TAG)
-                || logLine.startsWith(ERROR_KEYWORD)
-                || logLine.startsWith(STATE_KEYWORD)
-                || logLine.startsWith(MSG_NUM_KEYWORD)
-                || logLine.startsWith(MSG_PASSED_KEYWORD);
-
-            if (commandToken)  {
-                continue;
-            }
-            taskLog.message((LogLevel)i, processLogPrefix + logLine);
-        }
-    }
-}
-
-QString RunCmdlineWorkflowTask::readStdout() {
-    QByteArray charSet;
-#ifdef Q_OS_WIN32
-    charSet = "CP866";
-#else
-    charSet = "UTF-8";
-#endif
-    QTextCodec *codec = QTextCodec::codecForName(charSet);
-    return codec->toUnicode(proc->readAllStandardOutput());
-}
-
-void RunCmdlineWorkflowTask::sl_onReadStandardOutput() {
-    QString data = readStdout();
-    QStringList lines = data.split(QChar('\n'));
-    writeLog(lines);
-
-    int errInd = data.indexOf(ERROR_KEYWORD);
-    if (errInd >= 0) {
-        int errIndEnd = data.indexOf(ERROR_KEYWORD, errInd + 1);
-        assert(errIndEnd > errInd);
-        if(errIndEnd > errInd) {
-            setError(data.mid(errInd + ERROR_KEYWORD.size(), errIndEnd - errInd - ERROR_KEYWORD.size()));
-        } else {
-            assert(false);
-            setError(data.mid(errInd + ERROR_KEYWORD.size() + 1));
-        }
-        return;
-    }
-
-    foreach (const QString &line, lines) {
-        QStringList words = line.split(QRegExp("\\s+"), QString::SkipEmptyParts);
-        int sz = words.size();
-        for(int i = 0; i < sz; ++i) {
-            QString &word = words[i];
-            if(word.startsWith(OUTPUT_PROGRESS_TAG)) {
-                QString numStr = word.mid(OUTPUT_PROGRESS_TAG.size());
-                bool ok = false;
-                int num = numStr.toInt(&ok);
-                if(ok && num >= 0) {
-                    stateInfo.progress = qMin(num, 100);
-                }
-                break;
-            } else if(word.startsWith(STATE_KEYWORD)) {
-                QStringList stWords = word.split(":");
-                if(stWords.size() == 3) {
-                    bool ok = false;
-                    int num = stWords[2].toInt(&ok);
-                    if(ok && num >= 0) {
-                        WorkerState st = (WorkerState)num;
-                        states[stWords[1]] = st;
-                    }
-                }
-                break;
-            } else if(word.startsWith(MSG_NUM_KEYWORD)) {
-                QStringList msgNumWords = word.split(":");
-                if(msgNumWords.size() == 4) {
-                    bool ok = false;
-                    int num = msgNumWords[3].toInt(&ok);
-                    if(ok && num >= 0) {
-                        msgNums[QString("%1:%2").arg(msgNumWords[1]).arg(msgNumWords[2])] = num;
-                    }
-                }
-                break;
-            } else if(word.startsWith(MSG_PASSED_KEYWORD)) {
-                QStringList msgPassedWords = word.split(":");
-                if(msgPassedWords.size() == 4) {
-                    bool ok = false;
-                    int num = msgPassedWords[3].toInt(&ok);
-                    if(ok && num >= 0) {
-                        msgPassed[QString("%1:%2").arg(msgPassedWords[1]).arg(msgPassedWords[2])] = num;
-                    }
-                }
-                break;
-            }
-        }
-    }
-    emit si_logRead();
-}
-
-Task::ReportResult RunCmdlineWorkflowTask::report() {
-    assert(proc != NULL);
-    if (hasError()) {
-        return ReportResult_Finished;
-    }
-    if (isCanceled()) {
-        proc->kill();
-        return ReportResult_Finished;
-    }
-    QProcess::ProcessState st = proc->state();
-    if (st == QProcess::Running) {
-        return ReportResult_CallMeAgain;
-    }
-    return ReportResult_Finished;
-}
-
-WorkerState RunCmdlineWorkflowTask::getState(const ActorId& id) {
-    return states.value(id, WorkerWaiting);
-}
-
-int RunCmdlineWorkflowTask::getMsgNum(const QString & ids) {
-    return msgNums.value(ids, 0);
-}
-
-int RunCmdlineWorkflowTask::getMsgPassed(const QString & ids) {
-    return msgPassed.value(ids, 0);
-}
-
-QStringList RunCmdlineWorkflowTask::getActorLinks(const ActorId &id) {
-    QStringList result;
-    foreach (const QString &ids, msgNums.keys()) {
-        QStringList link = ids.split(":");
-        if (2 != link.size()) {
-            continue;
-        }
-        if (link[0] == id) {
-            result << ids;
-        }
-    }
-    return result;
-}
-
 }//namespace
diff --git a/src/corelibs/U2Lang/src/support/WorkflowRunTask.h b/src/corelibs/U2Lang/src/support/WorkflowRunTask.h
index c628ff6..e5432e2 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowRunTask.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowRunTask.h
@@ -22,30 +22,20 @@
 #ifndef _U2_FLOWTASK_H_
 #define _U2_FLOWTASK_H_
 
-#include <U2Core/Task.h>
-
-#include <U2Lang/CoreLibConstants.h>
-#include <U2Lang/DbiDataStorage.h>
-#include <U2Lang/Schema.h>
+#include <U2Core/CmdlineTaskRunner.h>
 #include <U2Lang/WorkflowManager.h>
-#include <U2Lang/WorkflowIOTasks.h>
 #include <U2Lang/WorkflowDebugStatus.h>
 
-#include <QtCore/QUrl>
-#include <QtCore/QTemporaryFile>
-#include <QtCore/QProcess>
-#include <QtCore/QEventLoop>
-#include <QtCore/QTimer>
-
 namespace U2 {
 
 namespace Workflow {
     class CommunicationChannel;
+    class Schema;
     class WorkflowMonitor;
 }
 using namespace Workflow;
 
-class U2LANG_EXPORT WorkflowAbstractRunner : public Task {
+class U2LANG_EXPORT WorkflowAbstractRunner : public CmdlineTask {
     Q_OBJECT
 public:
     WorkflowAbstractRunner(const QString &name, TaskFlags flags);
@@ -82,17 +72,17 @@ class U2LANG_EXPORT WorkflowRunTask : public WorkflowAbstractRunner {
 public:
     WorkflowRunTask(const Schema&, const ActorMap& rmap = ActorMap(),
         WorkflowDebugStatus *debugInfo = new WorkflowDebugStatus());
-    virtual ReportResult report();
     virtual QList<WorkerState> getState(Actor*);
     virtual int getMsgNum(const Link*);
     virtual int getMsgPassed(const Link*);
 
+private:
+    // CmdlineTask
+    QString getTaskError() const;
+
 signals:
     void si_ticked();
 
-private slots:
-    void sl_outputProgressAndState();
-
 private:
     QMap<ActorId, ActorId> rmap;
     QList<Link*> flows;
@@ -143,49 +133,6 @@ private:
     bool isNextTickRestoring;
 };
 
-class RunCmdlineWorkflowTaskConfig {
-public:
-    RunCmdlineWorkflowTaskConfig(const QString& _schemaPath = QString(), const QStringList& _args = QStringList())
-        : schemaPath(_schemaPath), args(_args), logLevel2Commute(LogLevel_TRACE) {}
-
-    QString         schemaPath;
-    QStringList     args;
-    LogLevel        logLevel2Commute;
-};
-
-class RunCmdlineWorkflowTask : public Task {
-    Q_OBJECT
-public:
-    RunCmdlineWorkflowTask(const RunCmdlineWorkflowTaskConfig& conf);
-
-    void prepare();
-    virtual ReportResult report();
-    WorkerState getState(const ActorId & id);
-    int getMsgNum(const QString & ids);
-    int getMsgPassed(const QString & ids);
-    void writeLog(QStringList &lines);
-    QStringList getActorLinks(const ActorId &id);
-
-signals:
-    void si_logRead();
-
-private slots:
-    void sl_onError(QProcess::ProcessError);
-    void sl_onReadStandardOutput();
-
-private:
-    RunCmdlineWorkflowTaskConfig   conf;
-    QProcess*                               proc;
-    QMap<ActorId, WorkerState>              states;
-    QMap<QString, int>                      msgNums;
-    QMap<QString, int>                      msgPassed;
-    QString                                 processLogPrefix;
-
-private:
-    QString readStdout();
-}; // RunCmdlineWorkflowTask
-
-
 } //namespace U2
 
 #endif
diff --git a/src/corelibs/U2Lang/src/support/WorkflowSettings.cpp b/src/corelibs/U2Lang/src/support/WorkflowSettings.cpp
index 928a1e4..8adab38 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowSettings.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowSettings.cpp
@@ -22,6 +22,7 @@
 #include "WorkflowSettings.h"
 
 #include <U2Core/AppContext.h>
+#include <U2Core/CMDLineUtils.h>
 #include <U2Core/Log.h>
 #include <U2Core/Settings.h>
 #include <U2Core/U2SafePoints.h>
@@ -252,43 +253,10 @@ void WorkflowSettings::setScriptingMode(bool md) {
     AppContext::getSettings()->setValue(SCRIPT_MODE, md);
 }
 
-static QStringList generateCandidatesWithExt(const QString & path) {
-    QStringList res;
-    res << path;
-    res << path + ".exe";
-    return res;
-}
-
-static QStringList generateCandidates(const QString & prefix) {
-    QStringList res;
-    res << generateCandidatesWithExt(prefix + "/" + "ugene");
-    res << generateCandidatesWithExt(prefix + "/" + "ugened");
-    res << generateCandidatesWithExt(prefix + "/" + "ugenecl");
-    res << generateCandidatesWithExt(prefix + "/" + "ugenecld");
-    return res;
-}
-
-static QString lookupCmdlineUgenePath() {
-    QString executableDir = AppContext::getWorkingDirectoryPath();
-    QStringList candidates(generateCandidates(executableDir));
-    foreach(const QString & candidate, candidates) {
-        if(QFile::exists(candidate)) {
-            return candidate;
-        }
-    }
-    return QString();
-}
-
-static bool lookupDone = false;
-
 QString WorkflowSettings::getCmdlineUgenePath() {
-    if (lookupDone) {
-        return QString();
-    }
-    QString path = lookupCmdlineUgenePath();
+    QString path = CMDLineRegistryUtils::getCmdlineUgenePath();
     if (path.isEmpty()) {
         coreLog.info(tr("Command line UGENE path not found, a possibility to run in separate process will be disabled"));
-        return QString();
     }
     return path;
 }
diff --git a/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp b/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp
index d4a3343..deba825 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp
@@ -1107,30 +1107,21 @@ bool WorkflowUtils::checkSharedDbConnection(const QString &fullDbUrl) {
     return connection.isOpen();
 }
 
-bool WorkflowUtils::validateInputDbObjects(QString urls, ProblemList &problemList) {
-    normalizeUrls(urls);
-    if (urls.isEmpty()) {
-        return true;
-    }
-
-    QStringList urlsList = urls.split(';');
-    bool res = true;
-    foreach (const QString &url, urlsList) {
-        const QString dbUrl = SharedDbUrlUtils::getDbUrlFromEntityUrl(url);
-        const U2DataId objId = SharedDbUrlUtils::getObjectIdByUrl(url);
-        const QString objName = SharedDbUrlUtils::getDbObjectNameByUrl(url);
-        const QString shortDbName = SharedDbUrlUtils::getDbShortNameFromEntityUrl(url);
-        if (dbUrl.isEmpty() || objId.isEmpty() || objName.isEmpty()) {
-            problemList << Problem(L10N::errorWrongDbObjUrlFormat(url));
-            res = false;
-        } else if (!checkDbConnectionAndFixProblems(dbUrl, problemList, Problem(L10N::errorDbInacsessible(shortDbName)))) {
-            res = false;
-        } else if (!checkObjectInDb(url)) {
-            problemList << Problem(L10N::errorDbObjectInaccessible(shortDbName, objName));
-            res = false;
-        }
+bool WorkflowUtils::validateInputDbObject(const QString &url, ProblemList &problemList) {
+    const QString dbUrl = SharedDbUrlUtils::getDbUrlFromEntityUrl(url);
+    const U2DataId objId = SharedDbUrlUtils::getObjectIdByUrl(url);
+    const QString objName = SharedDbUrlUtils::getDbObjectNameByUrl(url);
+    const QString shortDbName = SharedDbUrlUtils::getDbShortNameFromEntityUrl(url);
+    if (dbUrl.isEmpty() || objId.isEmpty() || objName.isEmpty()) {
+        problemList << Problem(L10N::errorWrongDbObjUrlFormat(url));
+        return false;
+    } else if (!checkDbConnectionAndFixProblems(dbUrl, problemList, Problem(L10N::errorDbInacsessible(shortDbName)))) {
+        return false;
+    } else if (!checkObjectInDb(url)) {
+        problemList << Problem(L10N::errorDbObjectInaccessible(shortDbName, objName));
+        return false;
     }
-    return res;
+    return true;
 }
 
 bool WorkflowUtils::validateInputDbFolders(QString urls, ProblemList &problemList) {
diff --git a/src/corelibs/U2Lang/src/support/WorkflowUtils.h b/src/corelibs/U2Lang/src/support/WorkflowUtils.h
index dbf08a4..d63f867 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowUtils.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowUtils.h
@@ -138,7 +138,7 @@ public:
     static bool validateInputFiles(QString urls, ProblemList &problemList);
     static bool validateInputDirs(QString urls, ProblemList &problemList);
 
-    static bool validateInputDbObjects(QString urls, ProblemList &problemList);
+    static bool validateInputDbObject(const QString &url, ProblemList &problemList);
     static bool validateInputDbFolders(QString urls, ProblemList &problemList);
 
     /**
diff --git a/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.cpp b/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.cpp
index b8487c8..bfbc8ed 100644
--- a/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.cpp
+++ b/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.cpp
@@ -1260,9 +1260,32 @@ QString HRSchemaSerializer::string2Schema(const QString & bytes, Schema * schema
     } catch (...) {
         return Constants::UNKNOWN_ERROR;
     }
+    postProcessing(schema);
     return Constants::NO_ERROR;
 }
 
+void HRSchemaSerializer::postProcessing(Schema *schema) {
+    CHECK(schema != NULL, );
+
+    foreach (Actor* a, schema->getProcesses()) {
+        CHECK(a != NULL, );
+        ActorPrototype* proto = a->getProto();
+        CHECK(proto != NULL, );
+        foreach (Attribute* attr, proto->getAttributes()) {
+            CHECK(attr != NULL, );
+            foreach (const PortRelationDescriptor& pd, attr->getPortRelations()) {
+                Port* p = a->getPort(pd.portId);
+                CHECK(p != NULL, );
+                CHECK(a->hasParameter(attr->getId()), );
+                QVariant value = a->getParameter(attr->getId())->getAttributePureValue();
+                if (!p->getLinks().isEmpty() && !pd.valuesWithEnabledPort.contains(value)) {
+                    a->setParameter(attr->getId(), pd.valuesWithEnabledPort.first());
+                }
+            }
+        }
+    }
+}
+
 void HRSchemaSerializer::parsePorts(Tokenizer & tokenizer, QList<DataConfig>& ports) {
     while(tokenizer.look() != Constants::BLOCK_END) {
         DataConfig cfg;
diff --git a/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.h b/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.h
index d5a0262..cc40ffa 100644
--- a/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.h
+++ b/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.h
@@ -80,6 +80,9 @@ public:
     static void addEmptyValsToBindings(const QList<Actor*> & procs);
     // idMap not null in copy mode
     static QString string2Schema(const QString & data, Schema * schema, Metadata * meta = NULL, QMap<ActorId, ActorId>* idMap = NULL, QList<QString> includedUrls = QList<QString>());
+    // the method checks port relations:
+    // if the attribute has port relation and the port has a link - the value of attribute must be set to the value that allows port enabling
+    static void postProcessing(Schema* schema);
 
     static void addPart( QString & to, const QString & w);
     static QString header2String(const Metadata * meta);
diff --git a/src/corelibs/U2Lang/transl/english.ts b/src/corelibs/U2Lang/transl/english.ts
index 36dbc13..696da8f 100644
--- a/src/corelibs/U2Lang/transl/english.ts
+++ b/src/corelibs/U2Lang/transl/english.ts
@@ -2,13 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="en_US">
 <context>
-    <name>HRSchemaSerializer</name>
-    <message>
-        <source>Undefined data-flow link: '%1'. Define it in actor-bindings</source>
-        <translation type="vanished">Undefined data-flow link: '%1'. Define it in actor-bindings</translation>
-    </message>
-</context>
-<context>
     <name>QObject</name>
     <message>
         <location filename="../src/model/QDConstraint.cpp" line="34"/>
@@ -869,27 +862,27 @@
         <translation>Grouper out slot: empty in-slot</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1644"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1667"/>
         <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="2006"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2029"/>
         <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="2030"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2053"/>
         <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="2033"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2056"/>
         <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="2042"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2065"/>
         <source>Qualifier name attribute is not set for %1 marker</source>
         <translation>Qualifier name attribute is not set for %1 marker</translation>
     </message>
@@ -1365,19 +1358,19 @@
 <context>
     <name>U2::PrompterBaseImpl</name>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1359"/>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1379"/>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1416"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1350"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1370"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1407"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1362"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1353"/>
         <source>the list of files</source>
         <translation>the list of files</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1394"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1385"/>
         <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>
@@ -1393,34 +1386,28 @@
 <context>
     <name>U2::RunCmdlineWorkflowTask</name>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="536"/>
         <source>Workflow process</source>
-        <translation>Workflow process</translation>
+        <translation type="vanished">Workflow process</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="587"/>
         <source>Cannot start process '%1'</source>
-        <translation>Cannot start process '%1'</translation>
+        <translation type="vanished">Cannot start process '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="594"/>
         <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>
+        <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>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="598"/>
         <source>The process '%1' crashed some time after starting successfully</source>
-        <translation>The process '%1' crashed some time after starting successfully</translation>
+        <translation type="vanished">The process '%1' crashed some time after starting successfully</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="602"/>
         <source>Error occurred while reading from or writing to channel</source>
-        <translation>Error occurred while reading from or writing to channel</translation>
+        <translation type="vanished">Error occurred while reading from or writing to channel</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="605"/>
         <source>Unknown error occurred</source>
-        <translation>Unknown error occurred</translation>
+        <translation type="vanished">Unknown error occurred</translation>
     </message>
 </context>
 <context>
@@ -1442,22 +1429,27 @@
 <context>
     <name>U2::SimpleInOutWorkflowTask</name>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="61"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="67"/>
         <source>Run workflow: %1</source>
         <translation>Run workflow: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="71"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="77"/>
         <source>Cannot create temporary file for writing</source>
         <translation>Cannot create temporary file for writing</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="88"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="94"/>
         <source>Internal error: cannot find workflow %1</source>
         <translation>Internal error: cannot find workflow %1</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="113"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="128"/>
         <source>Loading result file '%1'</source>
         <translation>Loading result file '%1'</translation>
     </message>
@@ -1465,29 +1457,29 @@
 <context>
     <name>U2::SimpleMSAWorkflow4GObjectTask</name>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="164"/>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="184"/>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="200"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="179"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="199"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="215"/>
         <source>Object '%1' removed</source>
         <translation>Object '%1' removed</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="185"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="200"/>
         <source>Object '%1' is locked</source>
         <translation>Object '%1' is locked</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="212"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="227"/>
         <source>Result document not found!</source>
         <translation>Result document not found!</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="213"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="228"/>
         <source>Result document content not matched! %1</source>
         <translation>Result document content not matched! %1</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="215"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="230"/>
         <source>Result document contains no MSA! %1</source>
         <translation>Result document contains no MSA! %1</translation>
     </message>
@@ -1907,42 +1899,42 @@
 <context>
     <name>U2::WorkflowIterationRunTask</name>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="200"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="138"/>
         <source>Workflow run</source>
         <translation>Workflow run</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="216"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="154"/>
         <source>Unknown domain %1</source>
         <translation>Unknown domain %1</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="266"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="204"/>
         <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="274"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="212"/>
         <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="282"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="220"/>
         <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="295"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="233"/>
         <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="383"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="295"/>
         <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="301"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="239"/>
         <source>Failed to create scheduler in domain %1</source>
         <translation>Failed to create scheduler in domain %1</translation>
     </message>
@@ -1958,7 +1950,7 @@
 <context>
     <name>U2::WorkflowRunTask</name>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="95"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="56"/>
         <source>Execute workflow</source>
         <translation>Execute workflow</translation>
     </message>
@@ -2055,7 +2047,7 @@
 <context>
     <name>U2::WorkflowSettings</name>
     <message>
-        <location filename="../src/support/WorkflowSettings.cpp" line="290"/>
+        <location filename="../src/support/WorkflowSettings.cpp" line="259"/>
         <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>
@@ -2138,22 +2130,22 @@
         <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="1214"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1205"/>
         <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="1233"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1252"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1243"/>
         <source>Empty shared database URL specified</source>
         <translation>Empty shared database URL specified</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1324"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1315"/>
         <source>Wrong samples map string</source>
         <translation>Wrong samples map string</translation>
     </message>
@@ -2173,19 +2165,4 @@
         <translation>Required parameter %1 has empty dataset: %2</translation>
     </message>
 </context>
-<context>
-    <name>WorkflowUtils</name>
-    <message>
-        <source>Required parameter has no datasets specified: %1</source>
-        <translation type="vanished">Required parameter has no datasets specified: %1</translation>
-    </message>
-    <message>
-        <source>Required parameter has no input urls specified: %1</source>
-        <translation type="vanished">Required parameter has no input urls specified: %1</translation>
-    </message>
-    <message>
-        <source>Required parameter %1 has empty dataset: %2</source>
-        <translation type="vanished">Required parameter %1 has empty dataset: %2</translation>
-    </message>
-</context>
 </TS>
diff --git a/src/corelibs/U2Lang/transl/russian.ts b/src/corelibs/U2Lang/transl/russian.ts
index 87032e9..e0b9f6f 100644
--- a/src/corelibs/U2Lang/transl/russian.ts
+++ b/src/corelibs/U2Lang/transl/russian.ts
@@ -2,13 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="ru">
 <context>
-    <name>HRSchemaSerializer</name>
-    <message>
-        <source>Undefined data-flow link: '%1'. Define it in actor-bindings</source>
-        <translation type="vanished">Undefined data-flow link: '%1'. Define it in actor-bindings</translation>
-    </message>
-</context>
-<context>
     <name>QObject</name>
     <message>
         <location filename="../src/model/QDConstraint.cpp" line="34"/>
@@ -869,27 +862,27 @@
         <translation>Grouper out slot: empty in-slot</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1644"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1667"/>
         <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="2006"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2029"/>
         <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="2030"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2053"/>
         <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="2033"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2056"/>
         <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="2042"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2065"/>
         <source>Qualifier name attribute is not set for %1 marker</source>
         <translation>Qualifier name attribute is not set for %1 marker</translation>
     </message>
@@ -1365,19 +1358,19 @@
 <context>
     <name>U2::PrompterBaseImpl</name>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1359"/>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1379"/>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1416"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1350"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1370"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1407"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1394"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1385"/>
         <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="1362"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1353"/>
         <source>the list of files</source>
         <translation>список файлов</translation>
     </message>
@@ -1393,34 +1386,28 @@
 <context>
     <name>U2::RunCmdlineWorkflowTask</name>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="536"/>
         <source>Workflow process</source>
-        <translation>Процесс схемы</translation>
+        <translation type="vanished">Процесс схемы</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="587"/>
         <source>Cannot start process '%1'</source>
-        <translation>Cannot start process '%1'</translation>
+        <translation type="vanished">Cannot start process '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="594"/>
         <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>
+        <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>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="598"/>
         <source>The process '%1' crashed some time after starting successfully</source>
-        <translation>The process '%1' crashed some time after starting successfully</translation>
+        <translation type="vanished">The process '%1' crashed some time after starting successfully</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="602"/>
         <source>Error occurred while reading from or writing to channel</source>
-        <translation>Error occurred while reading from or writing to channel</translation>
+        <translation type="vanished">Error occurred while reading from or writing to channel</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="605"/>
         <source>Unknown error occurred</source>
-        <translation>Unknown error occurred</translation>
+        <translation type="vanished">Unknown error occurred</translation>
     </message>
 </context>
 <context>
@@ -1442,22 +1429,27 @@
 <context>
     <name>U2::SimpleInOutWorkflowTask</name>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="61"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="67"/>
         <source>Run workflow: %1</source>
         <translation>Запуск схемы: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="71"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="77"/>
         <source>Cannot create temporary file for writing</source>
         <translation>Невозможно создать временный файл для записи</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="88"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="94"/>
         <source>Internal error: cannot find workflow %1</source>
         <translation>Внутренняя ошибка: невозможно найти схему %1</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="113"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="128"/>
         <source>Loading result file '%1'</source>
         <translation>Loading result file '%1'</translation>
     </message>
@@ -1465,29 +1457,29 @@
 <context>
     <name>U2::SimpleMSAWorkflow4GObjectTask</name>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="164"/>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="184"/>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="200"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="179"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="199"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="215"/>
         <source>Object '%1' removed</source>
         <translation>Object '%1' removed</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="185"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="200"/>
         <source>Object '%1' is locked</source>
         <translation>Object '%1' is locked</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="212"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="227"/>
         <source>Result document not found!</source>
         <translation>Result document not found!</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="213"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="228"/>
         <source>Result document content not matched! %1</source>
         <translation>Result document content not matched! %1</translation>
     </message>
     <message>
-        <location filename="../src/support/SimpleWorkflowTask.cpp" line="215"/>
+        <location filename="../src/support/SimpleWorkflowTask.cpp" line="230"/>
         <source>Result document contains no MSA! %1</source>
         <translation>Result document contains no MSA! %1</translation>
     </message>
@@ -1907,42 +1899,42 @@
 <context>
     <name>U2::WorkflowIterationRunTask</name>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="200"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="138"/>
         <source>Workflow run</source>
         <translation>Запуск схемы</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="216"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="154"/>
         <source>Unknown domain %1</source>
         <translation>Неизвестное имя среды исполнения: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="266"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="204"/>
         <source>Failed to preprocess the workflow. Some of included files are broken</source>
         <translation>Не удалось предварительно обработать схему. Некоторые из включенных файлов некорректны</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="274"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="212"/>
         <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="282"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="220"/>
         <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="295"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="233"/>
         <source>Failed to create a workflow context</source>
         <translation>Невозможно создать контекст схемы</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="383"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="295"/>
         <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="301"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="239"/>
         <source>Failed to create scheduler in domain %1</source>
         <translation>Не удалось создать планировщик для среды исполнения %1</translation>
     </message>
@@ -1958,7 +1950,7 @@
 <context>
     <name>U2::WorkflowRunTask</name>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="95"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="56"/>
         <source>Execute workflow</source>
         <translation>Выполнение схемы</translation>
     </message>
@@ -2055,7 +2047,7 @@
 <context>
     <name>U2::WorkflowSettings</name>
     <message>
-        <location filename="../src/support/WorkflowSettings.cpp" line="290"/>
+        <location filename="../src/support/WorkflowSettings.cpp" line="259"/>
         <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>
@@ -2138,22 +2130,22 @@
         <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="1214"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1205"/>
         <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="1233"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1252"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1243"/>
         <source>Empty shared database URL specified</source>
         <translation>Empty shared database URL specified</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1324"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1315"/>
         <source>Wrong samples map string</source>
         <translation>Wrong samples map string</translation>
     </message>
@@ -2173,19 +2165,4 @@
         <translation>Required parameter %1 has empty dataset: %2</translation>
     </message>
 </context>
-<context>
-    <name>WorkflowUtils</name>
-    <message>
-        <source>Required parameter has no datasets specified: %1</source>
-        <translation type="vanished">Required parameter has no datasets specified: %1</translation>
-    </message>
-    <message>
-        <source>Required parameter has no input urls specified: %1</source>
-        <translation type="vanished">Required parameter has no input urls specified: %1</translation>
-    </message>
-    <message>
-        <source>Required parameter %1 has empty dataset: %2</source>
-        <translation type="vanished">Required parameter %1 has empty dataset: %2</translation>
-    </message>
-</context>
 </TS>
diff --git a/src/corelibs/U2Private/CMakeLists.txt b/src/corelibs/U2Private/CMakeLists.txt
new file mode 100644
index 0000000..88e111d
--- /dev/null
+++ b/src/corelibs/U2Private/CMakeLists.txt
@@ -0,0 +1,45 @@
+cmake_minimum_required(VERSION 3.4)
+project(U2Private)
+
+set(CMAKE_AUTOMOC ON)
+
+if (APPLE)
+    find_package(Qt5 REQUIRED Core Gui Widgets Xml)
+else()
+    find_package(Qt5 REQUIRED Core Gui Widgets)
+endif()
+
+add_definitions(-DBUILDING_U2PRIVATE_DLL)
+
+include_directories(src)
+include_directories(../../include)
+include_directories(../../libs_3rdparty/breakpad/src)
+
+file(GLOB_RECURSE SRCS src/*.cpp)
+file(GLOB_RECURSE HDRS src/*.h)
+
+file(GLOB_RECURSE WIN_IGNORE_FILES src/*Mac.* src/*UnixNotMac.*)
+file(GLOB_RECURSE MAC_IGNORE_FILES src/*Win.* src/*UnixNotMac.*)
+file(GLOB_RECURSE LINUX_IGNORE_FILES src/*[er]Mac.* src/*Win.*)
+
+if (WIN32)
+    list(REMOVE_ITEM SRCS ${WIN_IGNORE_FILES})
+    list(REMOVE_ITEM HDRS ${WIN_IGNORE_FILES})
+elseif (APPLE)
+    list(REMOVE_ITEM SRCS ${MAC_IGNORE_FILES})
+    list(REMOVE_ITEM HDRS ${MAC_IGNORE_FILES})
+elseif (UNIX)
+    list(REMOVE_ITEM SRCS ${LINUX_IGNORE_FILES})
+    list(REMOVE_ITEM HDRS ${LINUX_IGNORE_FILES})
+endif ()
+
+add_library(U2Private SHARED ${HDRS} ${SRCS})
+
+target_link_libraries(U2Private
+        Qt5::Core Qt5::Gui Qt5::Widgets
+        breakpad
+        U2Core U2Algorithm U2Formats)
+
+if (APPLE)
+    target_link_libraries(U2Private  Qt5::Xml "-framework CoreFoundation -framework IOKit")
+endif()
diff --git a/src/corelibs/U2Private/src/AppContextImpl.h b/src/corelibs/U2Private/src/AppContextImpl.h
index 4709ad8..b2ba5af 100644
--- a/src/corelibs/U2Private/src/AppContextImpl.h
+++ b/src/corelibs/U2Private/src/AppContextImpl.h
@@ -157,9 +157,9 @@ public:
 
     void setSWMulAlignResultNamesTagsRegistry (SWMulAlignResultNamesTagsRegistry * _swmarntr) { assert( swmarntr == NULL || _swmarntr == NULL ); swmarntr = _swmarntr; }
 
-    void setMSAColorSchemeRegistry(MSAColorSchemeRegistry* _mcsr) {assert( mcsr == NULL || _mcsr == NULL ); mcsr = _mcsr;}
+    void setMsaColorSchemeRegistry(MsaColorSchemeRegistry* _mcsr) {assert( mcsr == NULL || _mcsr == NULL ); mcsr = _mcsr;}
 
-    void setMSAHighlightingSchemeRegistry(MSAHighlightingSchemeRegistry* _mhsr) {assert( mhsr == NULL || _mhsr == NULL ); mhsr = _mhsr;}
+    void setMsaHighlightingSchemeRegistry(MsaHighlightingSchemeRegistry* _mhsr) {assert( mhsr == NULL || _mhsr == NULL ); mhsr = _mhsr;}
 
     void setSecStructPedictAlgRegistry(SecStructPredictAlgRegistry* _sspar) {assert( secStructPredictRegistry == NULL || _sspar == NULL ); secStructPredictRegistry = _sspar;}
 
@@ -370,8 +370,8 @@ protected:
     virtual MolecularSurfaceFactoryRegistry*   _getMolecularSurfaceFactoryRegistry() const {return msfr;}
     virtual SWResultFilterRegistry*     _getSWResultFilterRegistry() const {return swrfr;}
     virtual SWMulAlignResultNamesTagsRegistry * _getSWMulAlignResultNamesTagsRegistry() const {return swmarntr;}
-    virtual MSAColorSchemeRegistry*     _getMSAColorSchemeRegistry() const {return mcsr;}
-    virtual MSAHighlightingSchemeRegistry* _getMSAHighlightingSchemeRegistry() const {return mhsr;}
+    virtual MsaColorSchemeRegistry*     _getMsaColorSchemeRegistry() const {return mcsr;}
+    virtual MsaHighlightingSchemeRegistry* _getMsaHighlightingSchemeRegistry() const {return mhsr;}
     virtual SecStructPredictAlgRegistry* _getSecStructPredictAlgRegistry() const {return secStructPredictRegistry;}
     virtual CudaGpuRegistry *            _getCudaGpuRegistry() const { return cgr; }
     virtual OpenCLGpuRegistry *          _getOpenCLGpuRegistry() const { return oclgr; }
@@ -446,8 +446,8 @@ private:
     SWResultFilterRegistry*  swrfr;
     SWMulAlignResultNamesTagsRegistry * swmarntr;
     AppSettingsGUI* asg;
-    MSAColorSchemeRegistry* mcsr;
-    MSAHighlightingSchemeRegistry *mhsr;
+    MsaColorSchemeRegistry* mcsr;
+    MsaHighlightingSchemeRegistry *mhsr;
     SecStructPredictAlgRegistry* secStructPredictRegistry;
     CudaGpuRegistry * cgr;
     OpenCLGpuRegistry * oclgr;
diff --git a/src/corelibs/U2Private/src/PluginDescriptor.h b/src/corelibs/U2Private/src/PluginDescriptor.h
index 402d189..822d1e2 100644
--- a/src/corelibs/U2Private/src/PluginDescriptor.h
+++ b/src/corelibs/U2Private/src/PluginDescriptor.h
@@ -19,6 +19,9 @@
  * MA 02110-1301, USA.
  */
 
+#ifndef _U2_PLUGINDESCRIPTOR_H_
+#define _U2_PLUGINDESCRIPTOR_H_
+
 #include <U2Core/global.h>
 #include <U2Core/Version.h>
 #include <U2Core/GUrl.h>
@@ -99,3 +102,5 @@ public:
 
 } //namespace
 
+#endif
+
diff --git a/src/corelibs/U2Private/src/PluginSupportImpl.cpp b/src/corelibs/U2Private/src/PluginSupportImpl.cpp
index e67e526..795ff08 100644
--- a/src/corelibs/U2Private/src/PluginSupportImpl.cpp
+++ b/src/corelibs/U2Private/src/PluginSupportImpl.cpp
@@ -23,6 +23,8 @@
 #include "ServiceRegistryImpl.h"
 
 #include <U2Core/AppContext.h>
+#include <U2Core/CMDLineRegistry.h>
+#include <U2Core/CmdlineTaskRunner.h>
 #include <U2Core/Settings.h>
 #include <U2Core/Log.h>
 #include <U2Core/L10n.h>
@@ -41,15 +43,15 @@
 #include <windows.h>
 #endif
 
+
 namespace U2 {
 
 /* TRANSLATOR U2::PluginSupportImpl */
 #define PLUGINS_LIST_SETTINGS QString("plugin_support/list/")
 #define SKIP_LIST_SETTINGS QString("plugin_support/skip_list/")
 #define PLUGINS_ACCEPTED_LICENSE_LIST QString("plugin_support/accepted_list/")
+#define PLUGIN_VERIFICATION QString("plugin_support/verification/")
 
-QString PluginSupportImpl::versionAppendix("");
-const QString PluginSupportImpl::OPENCL_CHECKED_SETTINGS("plugin_support/opencl/");
 static QStringList findAllPluginsInDefaultPluginsDir();
 
 
@@ -58,40 +60,10 @@ PluginRef::PluginRef(Plugin* _plugin, QLibrary* _library, const PluginDesc& desc
 {
 }
 
-PluginSupportImpl::PluginSupportImpl(bool testingMode): allLoaded(false) {
-    //read plugin names from settings
-    Settings* settings = AppContext::getSettings();
-
-    QSet<QString> pluginFiles = getPluginPaths();
-
+PluginSupportImpl::PluginSupportImpl(): allLoaded(false) {
     connect(this, SIGNAL(si_allStartUpPluginsLoaded()), SLOT(sl_registerServices()));
 
-    if(testingMode) {
-        foreach(const QString& pluginFile, pluginFiles) {
-            if(pluginFile.contains("opencl_support")) {
-                Task* loadStartUpPlugins = new LoadAllPluginsTask(this, QStringList(pluginFile));
-                AppContext::getTaskScheduler()->registerTopLevelTask(loadStartUpPlugins);
-                return;
-            }
-        }
-    }
-
-    QString openclCheckingVersion = settings->getValue(OPENCL_CHECKED_SETTINGS, "").toString();
-
-    Task* loadStartUpPlugins = NULL;
-#ifndef Q_OS_MAC
-    if(openclCheckingVersion != Version::appVersion().text && !testingMode) {
-        loadStartUpPlugins = new LoadAllPluginsTask(this, pluginFiles.toList(), QStringList("opencl_support"));
-    }
-    else {
-        loadStartUpPlugins = new LoadAllPluginsTask(this, pluginFiles.toList(), QStringList());
-        settings->setValue(OPENCL_CHECKED_SETTINGS, Version::appVersion().text);
-    }
-#else
-    Q_UNUSED(openclCheckingVersion);
-    loadStartUpPlugins = new LoadAllPluginsTask(this, pluginFiles.toList(), QStringList());
-#endif
-
+    Task* loadStartUpPlugins = new LoadAllPluginsTask(this, getPluginPaths().toList());
     AppContext::getTaskScheduler()->registerTopLevelTask(loadStartUpPlugins);
 }
 
@@ -106,8 +78,10 @@ bool PluginSupportImpl::isAllPluginsLoaded() const {
     return allLoaded;
 }
 
-LoadAllPluginsTask::LoadAllPluginsTask(PluginSupportImpl* _ps, const QStringList& _pluginFiles, const QStringList& verifiedPlugins)
-: Task(tr("Loading start up plugins"), TaskFlag_NoRun), ps(_ps), pluginFiles(_pluginFiles), verifiedPlugins(verifiedPlugins)
+LoadAllPluginsTask::LoadAllPluginsTask(PluginSupportImpl* _ps, const QStringList& _pluginFiles)
+    : Task(tr("Loading start up plugins"), TaskFlag_NoRun),
+      ps(_ps),
+      pluginFiles(_pluginFiles)
 {
     coreLog.trace("List of the plugins to be loaded:");
     foreach(const QString& path, pluginFiles) {
@@ -129,43 +103,11 @@ void LoadAllPluginsTask::prepare() {
         return;
     }
 
-    if(!orderedPluginsWithVerification.isEmpty()) {
-        orderedPluginsWithVerification = PluginDescriptorHelper::orderPlugins(orderedPluginsWithVerification, err);
-
-        if (!err.isEmpty()) {
-            setError(err);
-            return;
-        }
-        foreach(const PluginDesc& desc, orderedPluginsWithVerification) {
-            addSubTask(new VerifyPluginTask(ps, desc));
-        }
-    }
-
     foreach(const PluginDesc& desc, orderedPlugins) {
         addSubTask(new AddPluginTask(ps, desc));
     }
 }
 
-QList<Task*> LoadAllPluginsTask::onSubTaskFinished(Task* subTask) {
-    QList<Task*> res;
-    VerifyPluginTask* verifyTask = qobject_cast<VerifyPluginTask*>(subTask);
-    if(NULL != verifyTask) {
-        if(verifyTask->isCorrectPlugin()) {
-            res << new AddPluginTask(ps, verifyTask->getPluginDescriptor());
-        }
-        else {
-            MainWindow* mw = AppContext::getMainWindow();
-            if(NULL == mw) {
-                return res;
-            }
-            mw->addNotification(tr("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>").arg("http://ugene.unipro.ru/using-video-cards.html"), Warning_Not);
-        }
-    }
-    return res;
-}
-
 void LoadAllPluginsTask::addToOrderingQueue(const QString& url) {
     QFileInfo descFile(url);
     if (!descFile.exists()) {
@@ -187,7 +129,7 @@ void LoadAllPluginsTask::addToOrderingQueue(const QString& url) {
     }
 
     // now check plugin compatibility
-    bool isUIMode = AppContext::getMainWindow() != NULL;
+    bool isUIMode = AppContext::getMainWindow() != NULL || AppContext::isGUIMode(); // isGUIMode - for pluginChecker!
     bool modeIsOk = false;
     if (isUIMode) {
         modeIsOk = desc.mode.testFlag(PluginMode_UI);
@@ -210,8 +152,8 @@ void LoadAllPluginsTask::addToOrderingQueue(const QString& url) {
         coreLog.trace(QString("Plugin was built with higher QT version: %1").arg(desc.id));
         return;
     }
-    if (ugeneVersion < desc.ugeneVersion) {
-        coreLog.trace(QString("Plugin was built with higher UGENE version: %1, %2 vs %3").arg(desc.id).arg(desc.ugeneVersion.text).arg(ugeneVersion.text));
+    if (ugeneVersion != desc.ugeneVersion) {
+        coreLog.trace(QString("Plugin was built with another UGENE version: %1, %2 vs %3").arg(desc.id).arg(desc.ugeneVersion.text).arg(ugeneVersion.text));
         return;
     }
 
@@ -252,12 +194,6 @@ void LoadAllPluginsTask::addToOrderingQueue(const QString& url) {
     }
 #endif
 
-    foreach(const QString& verifiedPlugin, verifiedPlugins) {
-        if(url.contains(verifiedPlugin) && !verifiedPlugin.isEmpty()) {
-            orderedPluginsWithVerification.append(desc);
-            return;
-        }
-    }
     orderedPlugins.append(desc);
 }
 
@@ -272,16 +208,31 @@ Task::ReportResult LoadAllPluginsTask::report()
     return ReportResult_Finished;
 }
 
+namespace {
+    QStringList getCmdlinePlugins() {
+        CMDLineRegistry *reg = AppContext::getCMDLineRegistry();
+        if (reg->hasParameter(CMDLineRegistry::PLUGINS_ARG)) {
+            QString pluginsToLoad = reg->getParameterValue(CMDLineRegistry::PLUGINS_ARG);
+            return pluginsToLoad.split(";");
+        }
+        return QStringList();
+    }
+}
+
 static QStringList findAllPluginsInDefaultPluginsDir() {
     QDir d = PluginSupportImpl::getDefaultPluginsDir();
     QStringList filter; filter << QString("*.") + PLUGIN_FILE_EXT;
     QStringList fileNames = d.entryList(filter, QDir::Readable | QDir::Files, QDir::NoSort);
     QStringList res;
+    bool hasCmdlinePlugins = AppContext::getCMDLineRegistry()->hasParameter(CMDLineRegistry::PLUGINS_ARG);
+    QStringList cmdlinePlugins = getCmdlinePlugins();
     foreach(const QString& name, fileNames) {
         GUrl filePath(d.absolutePath() + "/" + name);
-        QString path = filePath.getURLString();
-        res.append(path);
-        coreLog.trace(QString("Found plugin candidate in default dir: %1").arg(path));
+        if (!hasCmdlinePlugins || cmdlinePlugins.contains(filePath.baseFileName())) {
+            QString path = filePath.getURLString();
+            res.append(path);
+            coreLog.trace(QString("Found plugin candidate in default dir: %1").arg(path));
+        }
     }
     return res;
 }
@@ -329,7 +280,7 @@ QString PluginSupportImpl::getPluginFileURL(Plugin* p) const {
 Task* PluginSupportImpl::addPluginTask(const QString& pathToPlugin) {
     QString err;
     PluginDesc desc = PluginDescriptorHelper::readPluginDescriptor(pathToPlugin, err);
-    Task* res = new AddPluginTask(this, desc);
+    Task* res = new AddPluginTask(this, desc, true);
     if (!err.isEmpty()) {
         res->setError(err);
     }
@@ -400,7 +351,7 @@ void PluginSupportImpl::updateSavedState(PluginRef* ref) {
             }
         }
     } else {
-        settings->setValue(pluginListSettingsDir + versionAppendix + pluginId, descUrl);
+        settings->setValue(pluginListSettingsDir + pluginId, descUrl);
 
         //remove from skip-list if present
         if (isDefaultPluginsDir(descUrl)) {
@@ -412,7 +363,7 @@ void PluginSupportImpl::updateSavedState(PluginRef* ref) {
     }
 
     if (!ref->plugin->isFree()){
-        settings->setValue(pluginAcceptedLicenseSettingsDir + versionAppendix + pluginId + "license",ref->plugin->isLicenseAccepted());
+        settings->setValue(pluginAcceptedLicenseSettingsDir + pluginId + "license",ref->plugin->isLicenseAccepted());
     }
 }
 
@@ -430,30 +381,22 @@ QSet<QString> PluginSupportImpl::getPluginPaths(){
     Settings* settings = AppContext::getSettings();
     QString pluginListSettingsDir = settings->toVersionKey(PLUGINS_LIST_SETTINGS);
 
-    QStringList pluginsIds = settings->getAllKeys(pluginListSettingsDir);
+    QStringList pluginsIds;
+    if (AppContext::getCMDLineRegistry()->hasParameter(CMDLineRegistry::PLUGINS_ARG)) {
+        pluginsIds = getCmdlinePlugins();
+    } else {
+        pluginsIds = settings->getAllKeys(pluginListSettingsDir);
+    }
 
     QSet<QString> pluginFiles;
-    versionAppendix = Version::buildDate;
-    if (!Version::appVersion().isDevVersion){
-        versionAppendix.clear();
-    }else{
-        versionAppendix.replace(" ", ".");
-        versionAppendix.append("-");
-        if (pluginsIds.size() > 150){
-            settings->remove(pluginListSettingsDir);
-        }
-    }
     foreach (const QString& pluginId, pluginsIds) {
-        QString file = settings->getValue(pluginListSettingsDir + versionAppendix + pluginId).toString();
+        QString file = settings->getValue(pluginListSettingsDir + pluginId).toString();
         if(!file.isEmpty()) {
             pluginFiles.insert(file);
         }
     }
     //read all plugins from the current folder and from ./plugins folder
-    // use SKIP list to learn which plugin should not be loaded
-    QStringList skipFiles = settings->getValue(settings->toVersionKey(SKIP_LIST_SETTINGS), QStringList()).toStringList();
     pluginFiles.unite(findAllPluginsInDefaultPluginsDir().toSet());
-    pluginFiles.subtract(skipFiles.toSet());
 
     return pluginFiles;
 }
@@ -461,18 +404,24 @@ QSet<QString> PluginSupportImpl::getPluginPaths(){
 
 //////////////////////////////////////////////////////////////////////////
 /// Tasks
-
-//todo: improve task naming
-AddPluginTask::AddPluginTask(PluginSupportImpl* _ps, const PluginDesc& _desc)
-: Task(tr("Add plugin task: %1").arg(_desc.id), TaskFlag_NoRun), ps(_ps), desc(_desc)
+AddPluginTask:: AddPluginTask(PluginSupportImpl* _ps, const PluginDesc& _desc, bool forceVerification)
+    : Task(tr("Add plugin task: %1").arg(_desc.id), TaskFlag_NoRun),
+      lib(NULL),
+      ps(_ps),
+      desc(_desc),
+      forceVerification(forceVerification),
+      verificationMode(false),
+      verifyTask(NULL)
 {
+    CMDLineRegistry *reg = AppContext::getCMDLineRegistry();
+    verificationMode = reg->hasParameter(CMDLineRegistry::VERIFY_ARG);
 }
 
-Task::ReportResult AddPluginTask::report() {
+void AddPluginTask::prepare() {
     PluginRef* ref = ps->findRefById(desc.id);
     if (ref != NULL) {
         stateInfo.setError(  tr("Plugin is already loaded: %1").arg(desc.id) );
-        return ReportResult_Finished;
+        return;
     }
 
     //check that plugin we depends on is already loaded
@@ -480,26 +429,77 @@ Task::ReportResult AddPluginTask::report() {
         PluginRef* ref = ps->findRefById(desc.id);
         if (ref == NULL) {
             stateInfo.setError(  tr("Plugin %1 depends on %2 which is not loaded").arg(desc.id).arg(di.id) );
-            return ReportResult_Finished;
+            return;
         }
         if (ref->pluginDesc.pluginVersion < di.version) {
             stateInfo.setError(  tr("Plugin %1 depends on %2 which is available, but the version is too old").arg(desc.id).arg(di.id) );
-            return ReportResult_Finished;
+            return;
         }
     }
 
     //load library
     QString libUrl = desc.libraryUrl.getURLString();
-    QScopedPointer<QLibrary> lib(new QLibrary(libUrl));
+    lib.reset(new QLibrary(libUrl));
     bool loadOk = lib->load();
 
     if (!loadOk) {
         stateInfo.setError(  tr("Plugin loading error: %1, Error string %2").arg(libUrl).arg(lib->errorString()) );
+        return;
+    }
+
+    Settings* settings = AppContext::getSettings();
+    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);
+    }
+}
+
+Task::ReportResult AddPluginTask::report() {
+    CHECK_OP(stateInfo, ReportResult_Finished);
+
+    // verify plugin
+    PLUG_VERIFY_FUNC verify_func = PLUG_VERIFY_FUNC(lib->resolve(U2_PLUGIN_VERIFY_NAME));
+    if (verify_func && verificationMode) {
+        if (!verify_func()) {
+            // verification mode is exclusively for crash check!
+            FAIL("Plugin is not verified!", ReportResult_Finished);
+        }
+    }
+
+    // check if verification failed
+    Settings* settings = AppContext::getSettings();
+    QString libUrl = desc.libraryUrl.getURLString();
+    PLUG_FAIL_MESSAGE_FUNC message_func = PLUG_FAIL_MESSAGE_FUNC(lib->resolve(U2_PLUGIN_FAIL_MASSAGE_NAME));
+    if (!verificationMode && verifyTask != NULL) {
+        settings->setValue(PLUGIN_VERIFICATION + desc.id, Version::appVersion().text);
+        if (!verifyTask->isCorrectPlugin()) {
+            settings->setValue(settings->toVersionKey(SKIP_LIST_SETTINGS) + desc.id, desc.descriptorUrl.getURLString());
+            QString message = message_func ? *(QScopedPointer<QString>(message_func())) : tr("Plugin loading error: %1. Verification failed.").arg(libUrl);
+            stateInfo.setError(message);
+            MainWindow* mw = AppContext::getMainWindow();
+            CHECK(mw != NULL, ReportResult_Finished);
+            mw->addNotification(message, Warning_Not);
+            return ReportResult_Finished;
+        } else {
+            QString skipFile = settings->getValue(settings->toVersionKey(SKIP_LIST_SETTINGS)+ desc.id, QString()).toString();
+            if (skipFile == desc.descriptorUrl.getURLString()) {
+                settings->remove(settings->toVersionKey(SKIP_LIST_SETTINGS)+ desc.id);
+            }
+        }
+    }
+
+    settings->sync();
+    QString skipFile = settings->getValue(settings->toVersionKey(SKIP_LIST_SETTINGS)+ desc.id, QString()).toString();
+    if (skipFile == desc.descriptorUrl.getURLString()) {
         return ReportResult_Finished;
     }
 
     //instantiate plugin
-    PLUG_INIT_FUNC init_fn = PLUG_INIT_FUNC((lib->resolve(U2_PLUGIN_INIT_FUNC_NAME)));
+    PLUG_INIT_FUNC init_fn = PLUG_INIT_FUNC(lib->resolve(U2_PLUGIN_INIT_FUNC_NAME));
     if (!init_fn) {
         stateInfo.setError(  tr("Plugin initialization routine was not found: %1").arg(libUrl) );
         return ReportResult_Finished;
@@ -510,6 +510,7 @@ Task::ReportResult AddPluginTask::report() {
         stateInfo.setError(  tr("Plugin initialization failed: %1").arg(libUrl) );
         return ReportResult_Finished;
     }
+
     p->setId(desc.id);
     p->setLicensePath(desc.licenseUrl.getURLString());
 
@@ -528,7 +529,7 @@ Task::ReportResult AddPluginTask::report() {
         }
     }
 
-    ref = new PluginRef(p, lib.take(), desc);
+    PluginRef* ref = new PluginRef(p, lib.take(), desc);
     ps->registerPlugin(ref);
 
     return ReportResult_Finished;
@@ -539,23 +540,23 @@ VerifyPluginTask::VerifyPluginTask(PluginSupportImpl* ps, const PluginDesc& desc
 {
 }
 void VerifyPluginTask::run() {
-    Settings* settings = AppContext::getSettings();
-
     QString executableDir = AppContext::getWorkingDirectoryPath();
-    QString openclCheckerPath = executableDir + "/plugins_checker";
+    QString pluginCheckerPath = executableDir + "/plugins_checker";
     if(Version::appVersion().debug) {
-        openclCheckerPath += 'd';
+        pluginCheckerPath += 'd';
     }
     #ifdef Q_OS_WIN
-        openclCheckerPath += ".exe";
+        pluginCheckerPath += ".exe";
     #endif
 
-    if(!QFileInfo(openclCheckerPath).exists()) {
-        coreLog.error(QString("Can not find file: \"%1\"").arg(openclCheckerPath));
+    if(!QFileInfo(pluginCheckerPath).exists()) {
+        coreLog.error(QString("Can not find file: \"%1\"").arg(pluginCheckerPath));
         return;
     }
     proc = new QProcess();
-    proc->start(openclCheckerPath, QStringList());
+    proc->start(pluginCheckerPath, QStringList()
+                << QString("--%1=%2").arg(CMDLineRegistry::PLUGINS_ARG).arg(desc.id)
+                << "--" + CMDLineRegistry::VERIFY_ARG);
 
     int elapsedTime = 0;
     while(!proc->waitForFinished(1000) && elapsedTime < timeOut) {
@@ -565,11 +566,7 @@ void VerifyPluginTask::run() {
         elapsedTime += 1000;
     }
     QString errorMessage = proc->readAllStandardError();
-
-    if(0 != proc->exitCode() || !errorMessage.isEmpty()) {
-        settings->setValue(settings->toVersionKey(SKIP_LIST_SETTINGS) + desc.id, desc.descriptorUrl.getURLString());
-    }
-    else {
+    if (proc->exitStatus() == QProcess::NormalExit && errorMessage.isEmpty()) {
         pluginIsCorrect = true;
     }
 }
diff --git a/src/corelibs/U2Private/src/PluginSupportImpl.h b/src/corelibs/U2Private/src/PluginSupportImpl.h
index b5d20b5..7e91a79 100644
--- a/src/corelibs/U2Private/src/PluginSupportImpl.h
+++ b/src/corelibs/U2Private/src/PluginSupportImpl.h
@@ -56,7 +56,7 @@ class U2PRIVATE_EXPORT PluginSupportImpl : public PluginSupport {
     friend class AddPluginTask;
 
 public:
-    PluginSupportImpl(bool testingMode = false);
+    PluginSupportImpl();
     ~PluginSupportImpl();
 
     virtual const QList<Plugin*>& getPlugins() {return plugins;}
@@ -91,23 +91,26 @@ protected:
     static QSet<QString> getPluginPaths();
 
 private:
-    static QString       versionAppendix;
-    static const QString OPENCL_CHECKED_SETTINGS;
     QList<PluginRef*>    plugRefs;
     QList<Plugin*>       plugins;
 };
 
-
+class VerifyPluginTask;
 class AddPluginTask : public Task {
     Q_OBJECT
 public:
-    AddPluginTask(PluginSupportImpl* ps, const PluginDesc& desc);
+    AddPluginTask(PluginSupportImpl* ps, const PluginDesc& desc, bool forceVerificatoin = false);
+    void prepare();
     ReportResult report();
 
 
 private:
+    QScopedPointer<QLibrary> lib;
     PluginSupportImpl*  ps;
     PluginDesc          desc;
+    bool                forceVerification;
+    bool                verificationMode;
+    VerifyPluginTask*   verifyTask;
 };
 
 class VerifyPluginTask : public Task {
@@ -128,10 +131,9 @@ private:
 class LoadAllPluginsTask : public Task {
     Q_OBJECT
 public:
-    LoadAllPluginsTask(PluginSupportImpl* ps,const QStringList& pluginFiles, const QStringList& verifiedPlugins = QStringList());
+    LoadAllPluginsTask(PluginSupportImpl* ps,const QStringList& pluginFiles);
     void prepare();
     ReportResult report();
-    QList<Task*> onSubTaskFinished(Task* subTask);
 
 
 private:
@@ -139,9 +141,7 @@ private:
 
     PluginSupportImpl*  ps;
     QStringList         pluginFiles;
-    QStringList         verifiedPlugins;
     QList<PluginDesc>   orderedPlugins; // plugins ordered by desc
-    QList<PluginDesc>   orderedPluginsWithVerification;
 };
 
 
diff --git a/src/corelibs/U2Private/src/TaskSchedulerImpl.cpp b/src/corelibs/U2Private/src/TaskSchedulerImpl.cpp
index a292bcb..31c18df 100644
--- a/src/corelibs/U2Private/src/TaskSchedulerImpl.cpp
+++ b/src/corelibs/U2Private/src/TaskSchedulerImpl.cpp
@@ -113,6 +113,11 @@ void TaskSchedulerImpl::cancelAllTasks() {
     }
 }
 
+namespace {
+    void onBadAlloc(Task *task) {
+        task->setError(TaskSchedulerImpl::tr("There is not enough memory to finish the task."));
+    }
+}
 
 void TaskSchedulerImpl::propagateStateToParent(Task* task) {
     Task* parentTask = task->getParentTask();
@@ -186,9 +191,13 @@ bool TaskSchedulerImpl::processFinishedTasks() {
         }
 
         if (ti->wasPrepared) {
-            Task::ReportResult res = ti->task->report();
-            if (res == Task::ReportResult_CallMeAgain) {
-                continue;
+            try {
+                Task::ReportResult res = ti->task->report();
+                if (res == Task::ReportResult_CallMeAgain) {
+                    continue;
+                }
+            } catch (const std::bad_alloc &) {
+                onBadAlloc(ti->task);
             }
         }
 
@@ -328,7 +337,11 @@ void TaskSchedulerImpl::runReady() {
         }
         setTaskStateDesc(ti->task, "");
         if(ti->task->hasFlags(TaskFlag_RunInMainThread)) {
-            ti->task->run();
+            try {
+                ti->task->run();
+            } catch (const std::bad_alloc &) {
+                onBadAlloc(ti->task);
+            }
             assert(Task::State_Running == ti->task->getState());
             ti->selfRunFinished = true;
         } else {
@@ -385,8 +398,13 @@ QString TaskSchedulerImpl::tryLockResources(Task* task, bool prepareStage, bool&
         bool resourceAcquired = appRes->tryAcquire(taskRes.resourceUse);
         if (!resourceAcquired) {
             if (appRes->maxTaskUse() < taskRes.resourceUse) {
-                task->setError(tr("Not enough resources for the task, resource name: '%1' max: %2%3 requested: %4%5")
-                    .arg(appRes->name).arg(appRes->maxTaskUse()).arg(appRes->suffix).arg(taskRes.resourceUse).arg(appRes->suffix));
+                QString error = tr("Not enough resources for the task, resource name: '%1' max: %2%3 requested: %4%5")
+                    .arg(appRes->name).arg(appRes->maxTaskUse()).arg(appRes->suffix).arg(taskRes.resourceUse).arg(appRes->suffix);
+                if (!taskRes.errorMessage.isEmpty()) {
+                    coreLog.error(error);
+                    error = taskRes.errorMessage;
+                }
+                task->setError(error);
             }
             errorString = tr("Waiting for resource '%1', count: %2%3").arg(appRes->name).arg(taskRes.resourceUse).arg(appRes->suffix);
             break;
@@ -554,8 +572,12 @@ bool TaskSchedulerImpl::addToPriorityQueue(Task* task, TaskInfo* pti) {
     priorityQueue.append(ti);
     if (runPrepare) {
         setTaskInsidePrepare(task, true);
-        task->prepare();
-          setTaskInsidePrepare(task, false);
+        try {
+            task->prepare();
+        } catch (const std::bad_alloc &) {
+            onBadAlloc(task);
+        }
+        setTaskInsidePrepare(task, false);
         ti->wasPrepared = true;
     }
     promoteTask(ti, Task::State_Prepared);
@@ -974,7 +996,11 @@ void TaskSchedulerImpl::onSubTaskFinished(TaskThread *thread, Task *subtask) {
         && !thread->newSubtasksObtained)
     {
         thread->subtasksLocker.lock();
-        thread->unconsideredNewSubtasks = onSubTaskFinished(thread->ti->task, subtask);
+        try {
+            thread->unconsideredNewSubtasks = onSubTaskFinished(thread->ti->task, subtask);
+        } catch (const std::bad_alloc &) {
+            onBadAlloc(thread->ti->task);
+        }
         thread->newSubtasksObtained = true;
         thread->subtasksLocker.unlock();
     }
@@ -1013,13 +1039,18 @@ void TaskThread::run() {
 
     updateThreadPriority(ti);
     if(!ti->task->hasFlags(TaskFlag_RunMessageLoopOnly)) {
-        ti->task->run();
-        assert(ti->task->getState()== Task::State_Running);
+        try {
+            ti->task->run();
+            assert(ti->task->getState()== Task::State_Running);
+        } catch (const std::bad_alloc &) {
+            onBadAlloc(ti->task);
+        }
     }
     ti->selfRunFinished = true;
     if(ti->task->hasFlags(TaskFlag_RunMessageLoopOnly)) {
-        startTimer(1);
+        int timerId = startTimer(1);
         exec();
+        killTimer(timerId);
     }
     lock.lock();
     AppContext::getTaskScheduler()->removeThreadId(ti->task->getTaskId());
@@ -1044,7 +1075,6 @@ bool TaskThread::event(QEvent *event) {
         if(ti->task->hasFlags(TaskFlag_RunMessageLoopOnly) && (ti->task->isCanceled()
             || ti->task->hasError()))
         {
-            killTimer(timerEvent->timerId());
             exit();
         }
         break;
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandler.cpp b/src/corelibs/U2Private/src/crash_handler/CrashHandler.cpp
index eba6e01..9b06725 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandler.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandler.cpp
@@ -22,6 +22,7 @@
 #include <QTextStream>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/Settings.h>
 #include <U2Core/Timer.h>
 #include <U2Core/Version.h>
 
@@ -39,6 +40,8 @@
 #include "CrashHandlerPrivateWin.h"
 #endif
 
+const static char * SETTINGS_UGENE_UID            = "shtirlitz/uid";
+
 namespace U2 {
 
 CrashHandlerPrivate * CrashHandler::crashHandlerPrivate = NULL;
@@ -51,7 +54,7 @@ bool CrashHandler::isEnabled() {
     return false;
 #endif
 
-    static QString useCrashHandlerValue = qgetenv(ENV_USE_CRASHHANDLER);
+    static QString useCrashHandlerValue = qgetenv(ENV_USE_CRASH_HANDLER);
 
     if ("0" == useCrashHandlerValue) {
         return false;
@@ -134,6 +137,14 @@ QString CrashHandler::generateReport(const QString &exceptionType, int maxReport
     reportText += Version::appVersion().text;
     reportText += "|";
 
+    Settings* settings = AppContext::getSettings();
+    if (settings != NULL){
+        QVariant uuidQvar = settings->getValue( SETTINGS_UGENE_UID, "None" );
+        reportText += uuidQvar.toString() + "|";
+    } else {
+        reportText += "Settings is null|";
+    }
+
     QString activeWindow = AppContext::getActiveWindowName();
     if(activeWindow.isEmpty()) {
         reportText += "None|";
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.cpp b/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.cpp
index 7b04a08..8e380ed 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.cpp
@@ -77,7 +77,7 @@ QStringList CrashHandlerArgsHelper::getArguments() const {
         args << report.toUtf8().toBase64();
     }
 
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1) {
         CMDLineRegistry* cmdLine = AppContext::getCMDLineRegistry();
         if (NULL != cmdLine) {
             QString testName = cmdLine->getParameterValue(CMDLineCoreOptions::LAUNCH_GUI_TEST);
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.cpp b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.cpp
index 1c3f59f..f9d4e7a 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.cpp
@@ -87,12 +87,11 @@ void CrashHandlerPrivateMac::storeStackTrace() {
     sprintf(pid_buf, "%d", getpid());
     char name_buf[512];
     name_buf[readlink(path.toLatin1().constData(), name_buf, 511)] = 0;
-    FILE *fp = NULL;
-    fp = freopen(stacktraceFilePath.toLocal8Bit().constData(), "w+", stdout);
+    FILE *fp = fopen(stacktraceFilePath.toLocal8Bit().constData(), "w+");
     stacktraceFileSucessfullyCreated = (NULL != fp);
     void * stackTrace[1024];
     int frames = backtrace(stackTrace, 1024);
-    backtrace_symbols_fd(stackTrace, frames, STDOUT_FILENO);
+    backtrace_symbols_fd(stackTrace, frames, fileno(fp));
     const int closed = fclose(fp);
     stacktraceFileWasSucessfullyClosed = (closed == 0);
 }
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.cpp b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.cpp
index ab1b18a..f301266 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.cpp
@@ -81,12 +81,11 @@ void CrashHandlerPrivateUnixNotMac::storeStackTrace() {
     sprintf(pid_buf, "%d", getpid());
     char name_buf[512];
     name_buf[readlink(path.toLatin1().data(), name_buf, 511)]=0;
-    FILE *fp;
-    fp = freopen (STACKTRACE_FILE_PATH.toLocal8Bit().constData(), "w+",stdout);
+    FILE *fp = fopen(STACKTRACE_FILE_PATH.toLocal8Bit().constData(), "w+");
     stacktraceFileSucessfullyCreated = (NULL != fp);
     void * stackTrace[1024];
     int frames = backtrace(stackTrace, 1024);
-    backtrace_symbols_fd(stackTrace, frames, STDOUT_FILENO);
+    backtrace_symbols_fd(stackTrace, frames, fileno(fp));
     const int closed = fclose(fp);
     stacktraceFileWasSucessfullyClosed = (closed == 0);
 }
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.cpp b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.cpp
index 6daccb1..f2fef27 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.cpp
@@ -94,7 +94,9 @@ bool CrashHandlerPrivateWin::breakpadCallback(const wchar_t *dump_path,
     }
 
     CrashHandlerPrivateWin *privateHandler = static_cast<CrashHandlerPrivateWin *>(context);
+#ifdef Q_OS_WIN64
     privateHandler->walkStack(exinfo);
+#endif
     privateHandler->dumpWasSuccessfullySaved = succeeded;
 
     handleException(privateHandler->getExceptionText(exinfo), dumpPath);
diff --git a/src/corelibs/U2Private/transl/english.ts b/src/corelibs/U2Private/transl/english.ts
index 5e9bdbf..1797d39 100644
--- a/src/corelibs/U2Private/transl/english.ts
+++ b/src/corelibs/U2Private/transl/english.ts
@@ -40,37 +40,37 @@
 <context>
     <name>U2::AddPluginTask</name>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="467"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="489"/>
         <source>Add plugin task: %1</source>
         <translation>Add plugin task: %1</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="474"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="496"/>
         <source>Plugin is already loaded: %1</source>
         <translation>Plugin is already loaded: %1</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="482"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="504"/>
         <source>Plugin %1 depends on %2 which is not loaded</source>
         <translation>Plugin %1 depends on %2 which is not loaded</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="486"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="508"/>
         <source>Plugin %1 depends on %2 which is available, but the version is too old</source>
         <translation>Plugin %1 depends on %2 which is available, but the version is too old</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="497"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="519"/>
         <source>Plugin loading error: %1, Error string %2</source>
         <translation>Plugin loading error: %1, Error string %2</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="504"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="526"/>
         <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="532"/>
         <source>Plugin initialization failed: %1</source>
         <translation>Plugin initialization failed: %1</translation>
     </message>
@@ -202,22 +202,22 @@ By default, loglevel="ERROR".</translation>
 <context>
     <name>U2::LoadAllPluginsTask</name>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="110"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="112"/>
         <source>Loading start up plugins</source>
         <translation>Loading start up plugins</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="161"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="163"/>
         <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>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/PluginSupportImpl.cpp" line="172"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="174"/>
         <source>File not found: %1</source>
         <translation>File not found: %1</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="177"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="179"/>
         <source>Invalid file format: %1</source>
         <translation>Invalid file format: %1</translation>
     </message>
@@ -320,25 +320,25 @@ By default, loglevel="ERROR".</translation>
     <name>U2::TaskSchedulerImpl</name>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="658"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="680"/>
         <source>New</source>
         <translation>New</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="660"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="682"/>
         <source>Prepared</source>
         <translation>Prepared</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="662"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="684"/>
         <source>Running</source>
         <translation>Running</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="664"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="686"/>
         <source>Finished</source>
         <translation>Finished</translation>
     </message>
@@ -348,87 +348,92 @@ By default, loglevel="ERROR".</translation>
         <translation>Canceling task: %1</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="135"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="118"/>
+        <source>There is not enough memory to finish the task.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="140"/>
         <source>Subtask {%1} is failed: %2</source>
         <translation>Subtask {%1} is failed: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="365"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="378"/>
         <source>Waiting for resource '%1', count: %2</source>
         <translation>Waiting for resource '%1', count: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="380"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="393"/>
         <source>No required resources for the task, resource id: '%1'</source>
         <translation>No required resources for the task, resource id: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="381"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="394"/>
         <source>Unable to run test because required resource not found</source>
         <translation>Unable to run test because required resource not found</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="388"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="401"/>
         <source>Not enough resources for the task, resource name: '%1' max: %2%3 requested: %4%5</source>
         <translation>Not enough resources for the task, resource name: '%1' max: %2%3 requested: %4%5</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="391"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="409"/>
         <source>Waiting for resource '%1', count: %2%3</source>
         <translation>Waiting for resource '%1', count: %2%3</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="524"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="542"/>
         <source>Registering new task: %1</source>
         <translation>Registering new task: %1</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="127"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="132"/>
         <source>Subtask {%1} is canceled %2</source>
         <translation>Subtask {%1} is canceled %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="582"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="604"/>
         <source>Unregistering task: %1</source>
         <translation>Unregistering task: %1</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="667"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="689"/>
         <source>Invalid name</source>
         <translation>Invalid name</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="741"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="763"/>
         <source>Promoting task {%1} to '%2'</source>
         <translation>Promoting task {%1} to '%2'</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="743"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="765"/>
         <source>Promoting task {%1} to '%2', error '%3'</source>
         <translation>Promoting task {%1} to '%2', error '%3'</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="753"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="775"/>
         <source>Starting {%1} task</source>
         <translation>Starting {%1} task</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="781"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="803"/>
         <source>Task {%1} finished with error: %2</source>
         <translation>Task {%1} finished with error: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="785"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="807"/>
         <source>Task {%1} canceled</source>
         <translation>Task {%1} canceled</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="788"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="810"/>
         <source>Task {%1} finished</source>
         <translation>Task {%1} finished</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="891"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="913"/>
         <source>Deleting task: %1</source>
         <translation>Deleting task: %1</translation>
     </message>
@@ -449,7 +454,7 @@ By default, loglevel="ERROR".</translation>
 <context>
     <name>U2::VerifyPluginTask</name>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="538"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="560"/>
         <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 b3ea8b9..886ea8c 100644
--- a/src/corelibs/U2Private/transl/russian.ts
+++ b/src/corelibs/U2Private/transl/russian.ts
@@ -39,37 +39,37 @@
 <context>
     <name>U2::AddPluginTask</name>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="467"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="489"/>
         <source>Add plugin task: %1</source>
         <translation>Загрузка внешнего модуля: %1</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="474"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="496"/>
         <source>Plugin is already loaded: %1</source>
         <translation>Модуль уже загружен: %1</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="482"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="504"/>
         <source>Plugin %1 depends on %2 which is not loaded</source>
         <translation>Модуль %1 зависит от модуля %2, который не был загружен</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="486"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="508"/>
         <source>Plugin %1 depends on %2 which is available, but the version is too old</source>
         <translation>Модуль %1 зависит от модуля %2, который доступен, но версия которого устарела</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="497"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="519"/>
         <source>Plugin loading error: %1, Error string %2</source>
         <translation>Ошибка загрузки модуля: %1, строка %2</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="504"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="526"/>
         <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="532"/>
         <source>Plugin initialization failed: %1</source>
         <translation>Ошибка инициализации модуля: %1</translation>
     </message>
@@ -201,22 +201,22 @@ By default, loglevel="ERROR".</source>
 <context>
     <name>U2::LoadAllPluginsTask</name>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="110"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="112"/>
         <source>Loading start up plugins</source>
         <translation>Загрузка подключаемых модулей</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="161"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="163"/>
         <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>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/PluginSupportImpl.cpp" line="172"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="174"/>
         <source>File not found: %1</source>
         <translation>Не найден внешний модуль: %1</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="177"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="179"/>
         <source>Invalid file format: %1</source>
         <translation>Некорректный файл библиотеки: %1</translation>
     </message>
@@ -319,25 +319,25 @@ By default, loglevel="ERROR".</source>
     <name>U2::TaskSchedulerImpl</name>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="658"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="680"/>
         <source>New</source>
         <translation>Новая</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="660"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="682"/>
         <source>Prepared</source>
         <translation>Инициализирована</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="662"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="684"/>
         <source>Running</source>
         <translation>Выполняется</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="82"/>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="664"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="686"/>
         <source>Finished</source>
         <translation>Завершена</translation>
     </message>
@@ -347,87 +347,92 @@ By default, loglevel="ERROR".</source>
         <translation>Отменяется задача "%1"</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="135"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="118"/>
+        <source>There is not enough memory to finish the task.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="140"/>
         <source>Subtask {%1} is failed: %2</source>
         <translation>Подзадача {%1} завершена с ошибкой: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="365"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="378"/>
         <source>Waiting for resource '%1', count: %2</source>
         <translation>Ожидание ресурса "%1", требуется: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="388"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="401"/>
         <source>Not enough resources for the task, resource name: '%1' max: %2%3 requested: %4%5</source>
         <translation>Не достаточно ресурсов для выполнения задачи: '%1' макс: %2%3	запрошено: %4%5</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="391"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="409"/>
         <source>Waiting for resource '%1', count: %2%3</source>
         <translation>Ожидание ресурса "%1", требуется: %2%3</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="524"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="542"/>
         <source>Registering new task: %1</source>
         <translation>Добавлена задача "%1"</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="667"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="689"/>
         <source>Invalid name</source>
         <translation>Неизвестное состояние</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="891"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="913"/>
         <source>Deleting task: %1</source>
         <translation>Удаляется задача "%1"</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="741"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="763"/>
         <source>Promoting task {%1} to '%2'</source>
         <translation>Задача {%1} %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="127"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="132"/>
         <source>Subtask {%1} is canceled %2</source>
         <translation>Подзадача {%1} отменена %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="380"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="393"/>
         <source>No required resources for the task, resource id: '%1'</source>
         <translation>No required resources for the task, resource id: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="381"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="394"/>
         <source>Unable to run test because required resource not found</source>
         <translation>Unable to run test because required resource not found</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="582"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="604"/>
         <source>Unregistering task: %1</source>
         <translation>Незарегистрированная задача: %1</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="743"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="765"/>
         <source>Promoting task {%1} to '%2', error '%3'</source>
         <translation>Задача {%1} %2; ошибка: %3</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="753"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="775"/>
         <source>Starting {%1} task</source>
         <translation>Старт задачи {%1}</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="781"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="803"/>
         <source>Task {%1} finished with error: %2</source>
         <translation>Задача {%1} завершена с ошибкой: %2</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="785"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="807"/>
         <source>Task {%1} canceled</source>
         <translation>Отменяется задача {%1}</translation>
     </message>
     <message>
-        <location filename="../src/TaskSchedulerImpl.cpp" line="788"/>
+        <location filename="../src/TaskSchedulerImpl.cpp" line="810"/>
         <source>Task {%1} finished</source>
         <translation>Задача {%1} завершена</translation>
     </message>
@@ -448,7 +453,7 @@ By default, loglevel="ERROR".</source>
 <context>
     <name>U2::VerifyPluginTask</name>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="538"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="560"/>
         <source>Verify plugin task: %1</source>
         <translation>Задача верификации модуля: %1</translation>
     </message>
diff --git a/src/corelibs/U2Remote/U2Remote.pri b/src/corelibs/U2Remote/U2Remote.pri
deleted file mode 100644
index be4b1bf..0000000
--- a/src/corelibs/U2Remote/U2Remote.pri
+++ /dev/null
@@ -1,31 +0,0 @@
-# include (U2Remote.pri)
-
-UGENE_RELATIVE_DESTDIR = ''
-MODULE_ID=U2Remote
-include( ../../ugene_lib_common.pri )
-
-QT += network
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-DEFINES+= QT_FATAL_ASSERT BUILDING_U2REMOTE_DLL
-INCLUDEPATH += ../U2Private/src
-
-LIBS += -L../../_release -lU2Core -lU2Lang -lU2Gui -lU2Private
-
-!debug_and_release|build_pass {
-
-    CONFIG(debug, debug|release) {
-        DESTDIR=../../_debug
-        LIBS -= -L../../_release -lU2Core -lU2Lang -lU2Gui -lU2Private
-        LIBS += -L../../_debug -lU2Cored -lU2Langd -lU2Guid -lU2Privated
-    }
-
-    CONFIG(release, debug|release) {
-        DESTDIR=../../_release
-    }
-}
-
-unix {
-    target.path = $$UGENE_INSTALL_DIR/$$UGENE_RELATIVE_DESTDIR
-    INSTALLS += target
-}
-
diff --git a/src/corelibs/U2Remote/U2Remote.pro b/src/corelibs/U2Remote/U2Remote.pro
deleted file mode 100644
index b0a7b64..0000000
--- a/src/corelibs/U2Remote/U2Remote.pro
+++ /dev/null
@@ -1,42 +0,0 @@
-include (U2Remote.pri)
-
-# Input
-HEADERS += src/DistributedComputingUtil.h \
-           src/PingTask.h \
-           src/ProtocolInfo.h \
-           src/ProtocolUI.h \
-           src/RemoteMachine.h \
-           src/RemoteMachineMonitor.h \
-           src/RemoteMachineMonitorDialogController.h \
-           src/RemoteMachineMonitorDialogImpl.h \
-           src/RemoteMachineScanDialogImpl.h \
-           src/RemoteMachineScanner.h \
-           src/RemoteMachineSettingsDialog.h \
-           src/RemoteMachineTasks.h \
-           src/RemoteWorkflowRunTask.h \
-           src/Serializable.h \
-           src/SerializeUtils.h \
-           src/SynchHttp.h \
-           src/TaskDistributor.h
-FORMS += src/ui/RemoteMachineMonitorDialog.ui \
-         src/ui/RemoteMachineScanDialog.ui \
-         src/ui/RemoteMachineSettingsDialog.ui
-SOURCES += src/DistributedComputingUtil.cpp \
-           src/PingTask.cpp \
-           src/ProtocolInfo.cpp \
-           src/ProtocolUI.cpp \
-           src/RemoteMachine.cpp \
-           src/RemoteMachineMonitor.cpp \
-           src/RemoteMachineMonitorDialogController.cpp \
-           src/RemoteMachineMonitorDialogImpl.cpp \
-           src/RemoteMachineScanDialogImpl.cpp \
-           src/RemoteMachineScanner.cpp \
-           src/RemoteMachineSettingsDialog.cpp \
-           src/RemoteMachineTasks.cpp \
-           src/RemoteWorkflowRunTask.cpp \
-           src/Serializable.cpp \
-           src/SerializeUtils.cpp \
-           src/SynchHttp.cpp
-
-TRANSLATIONS += transl/english.ts \
-                transl/russian.ts
diff --git a/src/corelibs/U2Remote/src/DistributedComputingUtil.cpp b/src/corelibs/U2Remote/src/DistributedComputingUtil.cpp
deleted file mode 100644
index a0778d7..0000000
--- a/src/corelibs/U2Remote/src/DistributedComputingUtil.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * 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 <cassert>
-
-#include <QCheckBox>
-#include <QFile>
-#include <QMenu>
-#include <QString>
-#include <QUrl>
-
-#include <AppContextImpl.h>
-
-#include <U2Core/AppSettings.h>
-#include <U2Core/Log.h>
-#include <U2Core/NetworkConfiguration.h>
-
-#include <U2Gui/MainWindow.h>
-#include <U2Core/QObjectScopedPointer.h>
-
-#include <U2Remote/PingTask.h>
-#include <U2Remote/RemoteWorkflowRunTask.h>
-#include <U2Remote/SerializeUtils.h>
-#include <U2Remote/SynchHttp.h>
-
-#include "DistributedComputingUtil.h"
-#include "RemoteMachineMonitorDialogImpl.h"
-
-namespace U2 {
-
-/*******************************************
- * DistributedComputingUtil
- *******************************************/
-
-DistributedComputingUtil::DistributedComputingUtil() {
-    AppContextImpl * appContext = AppContextImpl::getApplicationContext();
-    assert( NULL != appContext );
-
-    pir = new ProtocolInfoRegistry();
-    appContext->setProtocolInfoRegistry( pir );
-    rmm = new RemoteMachineMonitor();
-    appContext->setRemoteMachineMonitor( rmm );
-
-    if( NULL != AppContext::getMainWindow() ) { /* if not congene */
-        QAction * showRemoteMachinesMonitor = new QAction( QIcon( ":core/images/remote_machine_monitor.png" ),
-                                                           tr( "Remote machines monitor..." ), this );
-        showRemoteMachinesMonitor->setObjectName("Remote machines monitor");
-    }
-}
-
-DistributedComputingUtil::~DistributedComputingUtil() {
-    delete rmm;
-    delete pir;
-}
-
-void DistributedComputingUtil::sl_showRemoteMachinesMonitor() {
-    QObjectScopedPointer<RemoteMachineMonitorDialogImpl> dlg = new RemoteMachineMonitorDialogImpl(QApplication::activeWindow(), rmm);
-    const int ret = dlg->exec();
-    CHECK(!dlg.isNull(), );
-
-    if (QDialog::Rejected == ret) {
-        return;
-    }
-    assert( QDialog::Accepted == ret );
-}
-
-QStringList DistributedComputingUtil::filterRemoteMachineServices( const QStringList & services ) {
-    QStringList res = services;
-    return res;
-}
-
-
-/*******************************************
-* UpdateActiveTasks
-*******************************************/
-
-UpdateActiveTasks::UpdateActiveTasks(const RemoteMachineSettingsPtr& s) :
- Task("UpdateActiveTasks", TaskFlags_FOSCOE), settings(s), machine(NULL)
- {
-     rsLog.details(tr("Updating active tasks..."));
-     ProtocolInfo* pi = AppContext::getProtocolInfoRegistry()->getProtocolInfo( settings->getProtocolId() );
-     machine =  pi->getRemoteMachineFactory()->createInstance( settings );
-     if( NULL == machine ) {
-         setError( tr( "Cannot create remote machine from remote machine settings: %1" ).arg( settings->getName() ) );
-     }
-}
-
-UpdateActiveTasks::~UpdateActiveTasks() {
-    delete machine;
-    machine = NULL;
-}
-
-void UpdateActiveTasks::run() {
-    if (hasError() || isCanceled()) {
-        return;
-    }
-
-    QList<qint64> taskIds;
-    taskIds = machine->getActiveTasks(stateInfo);
-    if (hasError()) {
-        return;
-    }
-
-    foreach(qint64 taskId, taskIds) {
-        rsLog.details(tr("Found active task: %1").arg(taskId));
-        addTaskToScheduler(taskId);
-    }
-
-    rsLog.details(tr("Active tasks update finished!"));
-}
-
-void UpdateActiveTasks::addTaskToScheduler( qint64 taskid ) {
-    TaskScheduler* scheduler = AppContext::getTaskScheduler();
-    QList<qint64> activeIds;
-    QList<Task*> topLevelTasks = scheduler->getTopLevelTasks();
-    foreach(Task* task, topLevelTasks) {
-        RemoteWorkflowRunTask* workflowTask = qobject_cast<RemoteWorkflowRunTask*> (task);
-        if (workflowTask == NULL) {
-            continue;
-        }
-        activeIds.append(workflowTask->getRemoteTaskId());
-    }
-
-    if (!activeIds.contains(taskid)) {
-        Task* newTask = new RemoteWorkflowRunTask(settings, taskid);
-        scheduler->registerTopLevelTask(newTask);
-    }
-}
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/DistributedComputingUtil.h b/src/corelibs/U2Remote/src/DistributedComputingUtil.h
deleted file mode 100644
index 1d0df91..0000000
--- a/src/corelibs/U2Remote/src/DistributedComputingUtil.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * 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_DISTRIBUTED_COMPUTING_UTIL_H
-#define _U2_DISTRIBUTED_COMPUTING_UTIL_H
-
-#include <QtCore/QObject>
-
-#include <U2Remote/ProtocolInfo.h>
-#include <U2Remote/RemoteMachineMonitor.h>
-
-namespace U2 {
-
-class PingTask;
-
-class U2REMOTE_EXPORT DistributedComputingUtil : public QObject {
-    Q_OBJECT
-public:
-    DistributedComputingUtil();
-    ~DistributedComputingUtil();
-
-    /* remote machines has some services that are only for internal usage. this function filters them */
-    static QStringList filterRemoteMachineServices( const QStringList & services );
-
-private slots:
-    void sl_showRemoteMachinesMonitor();
-
-private:
-    /* pointers here to manage object creation order */
-    ProtocolInfoRegistry *        pir;
-    RemoteMachineMonitor *        rmm;
-
-}; // DistributedComputingUtil
-
-
-/* Checks for active tasks and adds them to TaskScheduler
- */
-class UpdateActiveTasks : public Task {
-    Q_OBJECT
-
-public:
-    UpdateActiveTasks( const RemoteMachineSettingsPtr& s);
-    ~UpdateActiveTasks();
-    virtual void run();
-    const RemoteMachineSettingsPtr& getSettings() { return settings; }
-
-private:
-    RemoteMachineSettingsPtr settings;
-    RemoteMachine* machine;
-    void addTaskToScheduler(qint64 taskid);
-
-}; // UpdateActiveTasks
-
-} // U2
-
-#endif // _U2_DISTRIBUTED_COMPUTING_UTIL_H
diff --git a/src/corelibs/U2Remote/src/PingTask.cpp b/src/corelibs/U2Remote/src/PingTask.cpp
deleted file mode 100644
index 2087091..0000000
--- a/src/corelibs/U2Remote/src/PingTask.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 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 <cstdio>
-
-#include <U2Core/Log.h>
-#include <U2Core/Counter.h>
-#include <U2Core/AppContext.h>
-
-#include <U2Remote/RemoteMachine.h>
-
-#include "PingTask.h"
-
-namespace U2 {
-
-/************************************
-* PingTask
-***********************************/
-
-PingTask::PingTask(RemoteMachine* m)
- : Task( tr( "PingTask" ), TaskFlag_None), machine(m)
-{
-    assert(machine!=NULL);
-    GCOUNTER( cvar, tvar, "PingTask" );
-}
-
-void PingTask::run() {
-    rsLog.details(tr("Starting remote service ping task, task-id: %1" ).arg( QString::number( getTaskId() ) ) );
-    machine->ping(stateInfo);
-    rsLog.details(tr("Remote service ping task finished, task-id: %1").arg( QString::number( getTaskId() ) ) );
-}
-
-
-
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/PingTask.h b/src/corelibs/U2Remote/src/PingTask.h
deleted file mode 100644
index e1bda78..0000000
--- a/src/corelibs/U2Remote/src/PingTask.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 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_PING_TASK_H_
-#define _U2_PING_TASK_H_
-
-#include <U2Core/Task.h>
-
-namespace U2 {
-
-class RemoteMachine;
-
-class U2REMOTE_EXPORT PingTask : public Task {
-     Q_OBJECT
-public:
-    PingTask(RemoteMachine* m);
-    virtual void run();
-
-private:
-    RemoteMachine* machine;
- }; // PingTask
-
-} // U2
-
-#endif // _U2_PING_TASK_H_
diff --git a/src/corelibs/U2Remote/src/ProtocolInfo.cpp b/src/corelibs/U2Remote/src/ProtocolInfo.cpp
deleted file mode 100644
index 0d4d480..0000000
--- a/src/corelibs/U2Remote/src/ProtocolInfo.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * 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 "ProtocolInfo.h"
-
-namespace U2 {
-
-/***********************************************
-* ProtocolInfo
-***********************************************/
-
-    ProtocolInfo::ProtocolInfo( const QString &id, ProtocolUI *protocolUI,
-        RemoteMachineFactory *remoteMachineFactory )
-: server(NULL), protocolUI(protocolUI), remoteMachineFactory(remoteMachineFactory), scanner(NULL), id(id) {
-}
-
-RemoteTaskServer * ProtocolInfo::getRemoteTaskServer() const {
-    return server;
-}
-
-ProtocolUI * ProtocolInfo::getProtocolUI() const {
-    return protocolUI;
-}
-
-RemoteMachineFactory * ProtocolInfo::getRemoteMachineFactory() const {
-    return remoteMachineFactory;
-}
-
-RemoteMachineScanner * ProtocolInfo::getRemoteMachineScanner() const {
-    return scanner;
-}
-
-QString ProtocolInfo::getId() const {
-    return id;
-}
-
-/***********************************************
- * ProtocolInfoRegistry
- ***********************************************/
-
-void ProtocolInfoRegistry::registerProtocolInfo( ProtocolInfo *info ) {
-    protocolInfos.insert( info->getId(), info );
-}
-
-bool ProtocolInfoRegistry::unregisterProtocolInfo( const QString &id ) {
-    if( !protocolInfos.contains( id ) ) {
-        return false;
-    }
-    protocolInfos.remove( id );
-    return true;
-}
-
-bool ProtocolInfoRegistry::isProtocolInfoRegistered( const QString &id ) const {
-    return protocolInfos.contains( id );
-}
-
-ProtocolInfo *ProtocolInfoRegistry::getProtocolInfo( const QString &id ) const {
-    if( !protocolInfos.contains( id ) ) {
-        return NULL;
-    }
-    return protocolInfos.value( id );
-}
-
-QList< ProtocolInfo *> ProtocolInfoRegistry::getProtocolInfos() const {
-    return protocolInfos.values();
-}
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/ProtocolInfo.h b/src/corelibs/U2Remote/src/ProtocolInfo.h
deleted file mode 100644
index 2a3c418..0000000
--- a/src/corelibs/U2Remote/src/ProtocolInfo.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * 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_PROTOCOL_INFO_H_
-#define _U2_PROTOCOL_INFO_H_
-
-#include <U2Core/global.h>
-#include <QtCore/QString>
-#include <QtCore/QList>
-#include <QtCore/QMap>
-
-namespace U2 {
-
-class RemoteTaskServer;
-class ProtocolUI;
-class RemoteMachineFactory;
-class RemoteMachineScanner;
-
-class U2REMOTE_EXPORT ProtocolInfo {
-public:
-    ProtocolInfo( const QString &id, ProtocolUI *protocolUI,
-        RemoteMachineFactory *remoteMachineFactory);
-
-    ProtocolUI *getProtocolUI() const;
-    RemoteMachineFactory *getRemoteMachineFactory() const;
-    // TODO: do we need version?
-    QString getId() const;
-private:
-    RemoteMachineScanner *getRemoteMachineScanner() const;
-    RemoteTaskServer *getRemoteTaskServer() const;
-private:
-    RemoteTaskServer *server;
-    ProtocolUI *protocolUI;
-    RemoteMachineFactory *remoteMachineFactory;
-    RemoteMachineScanner *scanner;
-
-    QString id;
-
-}; // ProtocolInfo
-
-class U2REMOTE_EXPORT ProtocolInfoRegistry {
-public:
-    void registerProtocolInfo( ProtocolInfo *info );
-    bool unregisterProtocolInfo( const QString &id );
-    bool isProtocolInfoRegistered( const QString &id ) const;
-    ProtocolInfo *getProtocolInfo( const QString &id ) const;
-    QList< ProtocolInfo * > getProtocolInfos() const;
-
-private:
-    QMap< QString, ProtocolInfo * > protocolInfos;
-
-}; // ProtcolInfoRegistry
-
-} // U2
-
-#endif // _U2_PROTOCOL_INFO_H_
diff --git a/src/corelibs/U2Remote/src/ProtocolUI.cpp b/src/corelibs/U2Remote/src/ProtocolUI.cpp
deleted file mode 100644
index 9523fb1..0000000
--- a/src/corelibs/U2Remote/src/ProtocolUI.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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 "ProtocolUI.h"
-
-namespace U2 {
-
-ProtocolUI::ProtocolUI() {
-}
-
-ProtocolUI::~ProtocolUI() {
-}
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/ProtocolUI.h b/src/corelibs/U2Remote/src/ProtocolUI.h
deleted file mode 100644
index 3c68d66..0000000
--- a/src/corelibs/U2Remote/src/ProtocolUI.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * 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_PROTOCOL_UI_H_
-#define _U2_PROTOCOL_UI_H_
-
-#include <cassert>
-
-#include <QtCore/QList>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
-#include "RemoteMachine.h"
-
-namespace U2 {
-
-/*
- * Base class for GUI form with remote machine info
- */
-class U2REMOTE_EXPORT ProtocolUI : public QWidget {
-public:
-    ProtocolUI();
-    virtual ~ProtocolUI();
-
-    // after user clicks 'ok', creates remote machine settings based on the info in the form. Caller should delete it
-    virtual RemoteMachineSettingsPtr createMachine() const = 0;
-    virtual void initializeWidget( const RemoteMachineSettingsPtr& settings ) = 0;
-    virtual void clearWidget() = 0;
-    virtual QString validate() const = 0;
-    virtual QDialog* createUserTasksDialog(const RemoteMachineSettingsPtr& settings, QWidget* parent) = 0;
-
-private:
-    ProtocolUI( const ProtocolUI & );
-    ProtocolUI & operator=( const ProtocolUI & );
-
-}; // ProtocolUI
-
-
-
-} // U2
-
-#endif // _U2_PROTOCOL_UI_H
diff --git a/src/corelibs/U2Remote/src/RemoteMachine.cpp b/src/corelibs/U2Remote/src/RemoteMachine.cpp
deleted file mode 100644
index 4ab4bea..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachine.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 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 "RemoteMachine.h"
-
-namespace U2 {
-
-RemoteMachine::~RemoteMachine() {
-}
-
-RemoteMachineSettings::RemoteMachineSettings( ProtocolInfo * proto, RemoteMachineType type ) :
-        machineType(type) {
-    assert( NULL != proto );
-    protoId = proto->getId();
-}
-
-RemoteMachineSettings::~RemoteMachineSettings() {
-    flushCredentials();
-}
-
-void RemoteMachineSettings::flushCredentials() {
-    credentials = UserCredentials();
-
-}
-
-void RemoteMachineSettings::setupCredentials( const QString& userName, const QString& passwd, bool permanent ) {
-    flushCredentials();
-    credentials.name = userName;
-    credentials.passwd = passwd;
-    credentials.permanent = permanent;
-    credentials.valid = true;
-}
-
-RemoteMachineFactory::~RemoteMachineFactory() {
-}
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/RemoteMachine.h b/src/corelibs/U2Remote/src/RemoteMachine.h
deleted file mode 100644
index f3f6172..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachine.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/**
- * 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_REMOTE_MACHINE_H_
-#define _U2_REMOTE_MACHINE_H_
-
-#include "ProtocolInfo.h"
-
-#include "Serializable.h"
-
-#include <U2Core/Task.h>
-#include <QtCore/QSharedPointer>
-
-namespace U2 {
-
-class RemoteMachineSettings;
-typedef QSharedPointer<RemoteMachineSettings> RemoteMachineSettingsPtr;
-
-/*
- * Base class for RemoteMachines. Should be implemented for each transport protocol.
- * Stores all required remote machine info, performs remote requests.
- */
-class U2REMOTE_EXPORT RemoteMachine {
-public:
-
-    virtual ~RemoteMachine();
-
-    // Runs task on remote machine. Returns remote taskId
-    virtual qint64 runTask( TaskStateInfo& si, const QString & taskFactoryId, const QVariant & settings) = 0;
-
-    // Cancels remote task
-    virtual void cancelTask(TaskStateInfo& si, qint64 taskId ) = 0;
-
-    // Retrieves remote task state
-    virtual Task::State getTaskState(TaskStateInfo& si, qint64 taskId) = 0;
-
-    // Retrieves remote task progress [0..100%]
-    virtual int getTaskProgress(TaskStateInfo& si, qint64 taskId) = 0;
-
-    // Retrieves remote task result
-    virtual void getTaskResult(TaskStateInfo& si, qint64 taskId, const QStringList& resultUrls, const QString& urlPrefix ) = 0;
-
-    // Retrieves remote task error message
-    virtual QString getTaskErrorMessage(TaskStateInfo& si, qint64 taskId) = 0;
-
-    // Returns remote machine server name. TODO: refactor
-    virtual QString getServerName(TaskStateInfo& si) = 0;
-
-    // Lists active tasks ids on remote machine
-    virtual QList<qint64> getActiveTasks(TaskStateInfo& si) = 0;
-
-    // Pings remote machine
-    virtual void ping(TaskStateInfo& si) = 0;
-
-    virtual RemoteMachineSettingsPtr getSettings() = 0;
-
-}; // RemoteMachine
-
-
-/*
-* The type determines how to treat remote machine.
-* In case of remote service the remote tasks are launched via UGENE remote service protocol.
-*/
-
-enum RemoteMachineType {
-    RemoteMachineType_SimpleMachine,
-    RemoteMachineType_RemoteService
-};
-
-/*
-* Authentication information
-*/
-struct U2REMOTE_EXPORT UserCredentials {
-    UserCredentials() : permanent(false), valid(false) {}
-    QString name;
-    QString passwd;
-    bool permanent;
-    bool valid;
-};
-
-/*
- * Base class for remote machine settings
- */
-class U2REMOTE_EXPORT RemoteMachineSettings : public HumanSerializable {
-public:
-    RemoteMachineSettings( ProtocolInfo * proto,  RemoteMachineType type );
-    virtual ~RemoteMachineSettings();
-
-    RemoteMachineType getMachineType() const { return machineType; }
-    const QString& getProtocolId() const {return protoId;}
-    const UserCredentials& getUserCredentials() const { return credentials; }
-    void flushCredentials();
-    void setupCredentials(const QString& userName, const QString& passwd, bool permanent );
-
-    virtual QString serialize() const = 0;
-    virtual QString getName() const = 0;
-    virtual bool usesGuestAccount() const = 0;
-
-
-    virtual bool operator==( const RemoteMachineSettings& ) const = 0;
-
-protected:
-    UserCredentials credentials;
-    QString protoId;
-    RemoteMachineType machineType;
-
-}; // RemoteMachineSettings
-
-
-/*
- * Base class for RemoteMachinesFactories
- */
-class U2REMOTE_EXPORT RemoteMachineFactory {
-public:
-    virtual ~RemoteMachineFactory();
-
-    virtual RemoteMachine * createInstance( const QString& serializedSettings ) const = 0;
-    virtual RemoteMachine * createInstance( const RemoteMachineSettingsPtr& settings ) const = 0;
-    virtual RemoteMachineSettingsPtr createSettings( const QString & serializedSettings ) const = 0;
-
-}; // RemoteMachineFactory
-
-} // U2
-
-#endif // U2_REMOTE_MACHINE_H_
diff --git a/src/corelibs/U2Remote/src/RemoteMachineMonitor.cpp b/src/corelibs/U2Remote/src/RemoteMachineMonitor.cpp
deleted file mode 100644
index c0f6b2d..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineMonitor.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/**
- * 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/AppContext.h>
-#include <U2Core/Settings.h>
-
-#include "SerializeUtils.h"
-#include "RemoteMachineMonitor.h"
-
-namespace U2 {
-
-const QString RemoteMachineMonitor::REMOTE_MACHINE_MONITOR_SETTINGS_TAG = "rservice/machines";
-
-
-RemoteMachineMonitor::RemoteMachineMonitor() : initialized( false ) {
-}
-
-void RemoteMachineMonitor::ensureInitialized() {
-    if (!initialized) {
-        initialize();
-    }
-}
-
-void RemoteMachineMonitor::initialize() {
-    assert(!initialized);
-    initialized = true;
-
-    Settings * settings = AppContext::getSettings();
-    assert( NULL != settings );
-    if( !deserializeMachines( settings->getValue( REMOTE_MACHINE_MONITOR_SETTINGS_TAG ) ) ) {
-        items.clear();
-        return;
-    }
-}
-
-RemoteMachineMonitor::~RemoteMachineMonitor() {
-    if (!initialized) {
-        return;
-    }
-    saveSettings();
-}
-
-void RemoteMachineMonitor::saveSettings() {
-    if (!initialized) {
-        return;
-    }
-    Settings * settings = AppContext::getSettings();
-    assert( NULL != settings );
-    QVariant serializedMachines = serializeMachines();
-    assert( serializedMachines.isValid() );
-    settings->setValue( REMOTE_MACHINE_MONITOR_SETTINGS_TAG, serializedMachines );
-}
-
-QVariant RemoteMachineMonitor::serializeMachines() const {
-    QVariantList res;
-    foreach( const RemoteMachineSettingsPtr& item, items ) {
-        Q_UNUSED(item);
-        QVariantList itemRes;
-        // call leads to FAIL("Obsolete! Not implemented!", "");
-//         QString data = SerializeUtils::serializeRemoteMachineSettings(item);
-//         itemRes << data;
-        res << QVariant( itemRes );
-    }
-    return res;
-}
-
-bool RemoteMachineMonitor::deserializeMachines( const QVariant & data ) {
-    if( !data.canConvert( QVariant::List ) ) {
-        return false;
-    }
-    QVariantList args = data.toList();
-
-    foreach( QVariant arg, args ) {
-        if( !arg.canConvert( QVariant::List ) ) {
-            return false;
-        }
-        QVariantList itemArgs = arg.toList();
-        if( itemArgs.size() == 0 ) {
-            return false;
-        }
-        // call leads to FAIL("Obsolete! Not implemented!", "");
-        //RemoteMachineSettingsPtr machineSettings = SerializeUtils::deserializeRemoteMachineSettings(itemArgs[0].toString());
-        //if( machineSettings == NULL ) {
-        //    return false;
-        //}
-        //
-        //items << machineSettings;
-    }
-    return true;
-}
-
-bool RemoteMachineMonitor::addMachineConfiguration( const RemoteMachineSettingsPtr& machineSettings ) {
-    ensureInitialized();
-
-    if( NULL == machineSettings || items.contains(machineSettings) ) {
-        return false;
-    }
-    items.append( machineSettings );
-    return true;
-}
-
-void RemoteMachineMonitor::removeMachineConfiguration( const RemoteMachineSettingsPtr& machineSettings ) {
-    ensureInitialized();
-
-    if( NULL == machineSettings ) {
-        return;
-    }
-
-    items.removeOne(machineSettings);
-}
-
-QList<RemoteMachineSettingsPtr> RemoteMachineMonitor::getRemoteMachineMonitorItems() {
-    ensureInitialized();
-    return items;
-}
-
-
-RemoteMachineSettingsPtr RemoteMachineMonitor::findMachineSettings( const QString& id ) const
-{
-    foreach ( const RemoteMachineSettingsPtr& item, items) {
-        if (item->serialize() == id ) {
-            return item;
-        }
-    }
-    return RemoteMachineSettingsPtr();
-}
-
-
-
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/RemoteMachineMonitor.h b/src/corelibs/U2Remote/src/RemoteMachineMonitor.h
deleted file mode 100644
index 40c01ff..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineMonitor.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * 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_REMOTE_MACHINE_MONITOR_H_
-#define _U2_REMOTE_MACHINE_MONITOR_H_
-
-#include <QtCore/QList>
-#include <QtCore/QVariant>
-
-#include <U2Core/global.h>
-#include "RemoteMachine.h"
-
-namespace U2 {
-
-/*
- * Stores info about all remote machines registered in system
- * Can be accessed by AppContext::getRemoteMachineMonitor()
- */
-
-class U2REMOTE_EXPORT RemoteMachineMonitor {
-public:
-    static const QString REMOTE_MACHINE_MONITOR_SETTINGS_TAG;
-
-public:
-    RemoteMachineMonitor();
-    ~RemoteMachineMonitor();
-    /* RemoteMachineMonitor shares ownership of the machine settings with machine instances */
-    bool addMachineConfiguration( const RemoteMachineSettingsPtr& machineSettings);
-    void removeMachineConfiguration( const RemoteMachineSettingsPtr& machineSettings);
-    RemoteMachineSettingsPtr findMachineSettings(const QString& serializedSettings) const;
-    /* Function not const because we can call initialize() here */
-    QList<RemoteMachineSettingsPtr> getRemoteMachineMonitorItems();
-    void saveSettings();
-
-private:
-    RemoteMachineMonitor( const RemoteMachineMonitor & );
-    RemoteMachineMonitor & operator=( const RemoteMachineMonitor & );
-
-    QVariant serializeMachines() const;
-    bool deserializeMachines( const QVariant & data );
-
-    void ensureInitialized();
-    void initialize();
-
-private:
-    QList<RemoteMachineSettingsPtr> items;
-    bool initialized;
-
-}; // RemoteMachineMonitor
-
-} // U2
-
-#endif // _U2_REMOTE_MACHINE_MONITOR_H_
diff --git a/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogController.cpp b/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogController.cpp
deleted file mode 100644
index f200fd1..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogController.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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 <QMessageBox>
-
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Core/QObjectScopedPointer.h>
-
-#include "RemoteMachineMonitorDialogController.h"
-#include "RemoteMachineMonitorDialogImpl.h"
-
-namespace U2 {
-
-RemoteMachineSettingsPtr RemoteMachineMonitorDialogController::selectRemoteMachine(
-    RemoteMachineMonitor* monitor, bool runTaskMode /* = false */ )
-{
-    QObjectScopedPointer<RemoteMachineMonitorDialogImpl> dlg = new RemoteMachineMonitorDialogImpl(QApplication::activeWindow(), monitor, runTaskMode);
-    const int ret = dlg->exec();
-    CHECK(!dlg.isNull(), RemoteMachineSettingsPtr());
-
-    if(ret == QDialog::Rejected) {
-        return RemoteMachineSettingsPtr();
-    }
-    assert(ret == QDialog::Accepted);
-
-    RemoteMachineSettingsPtr rms = dlg->getSelectedMachine();
-    if (runTaskMode && !rms) {
-        QMessageBox::critical(QApplication::activeWindow(),
-            RemoteMachineMonitorDialogImpl::tr("Selecting machines error!"),
-            RemoteMachineMonitorDialogImpl::tr("You didn't select a machine to run remote task!"));
-    }
-    return rms;
-}
-}//ns
diff --git a/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogController.h b/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogController.h
deleted file mode 100644
index 5d727ef..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogController.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 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_REMOTE_MACHINE_MONITOR_DIALOG_CTRL_H_
-#define _U2_REMOTE_MACHINE_MONITOR_DIALOG_CTRL_H_
-
-#include <U2Remote/RemoteMachine.h>
-#include <U2Remote/RemoteMachineMonitor.h>
-
-namespace U2 {
-
-    class U2REMOTE_EXPORT RemoteMachineMonitorDialogController {
-
-    public:
-        static RemoteMachineSettingsPtr selectRemoteMachine(RemoteMachineMonitor* monitor, bool runTaskMode = false );
-    };
-
-} // U2
-
-#endif
diff --git a/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogImpl.cpp b/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogImpl.cpp
deleted file mode 100644
index 33d1c17..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogImpl.cpp
+++ /dev/null
@@ -1,504 +0,0 @@
-/**
- * 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 <QLabel>
-#include <QMessageBox>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/Log.h>
-#include <U2Core/LogCache.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Gui/AuthenticationDialog.h>
-#include <U2Gui/GUIUtils.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/LogView.h>
-#include <U2Core/QObjectScopedPointer.h>
-
-#include <U2Remote/RemoteMachineMonitor.h>
-#include <U2Remote/RemoteMachineTasks.h>
-
-#include "RemoteMachineMonitorDialogImpl.h"
-#include "RemoteMachineScanDialogImpl.h"
-#include "RemoteMachineSettingsDialog.h"
-
-namespace U2 {
-
-const QString RemoteMachineMonitorDialogImpl::OK_BUTTON_RUN = QObject::tr("Run");
-const QString RemoteMachineMonitorDialogImpl::SAVE_SETTINGS_FILE_DOMAIN = "rservice";
-
-static LogFilter prepareLogFilter() {
-    LogFilter res;
-    res.filters.append(LogFilterItem(ULOG_CAT_REMOTE_SERVICE, LogLevel_DETAILS));
-    return res;
-}
-
-
-RemoteMachineMonitorDialogImpl::RemoteMachineMonitorDialogImpl( QWidget * p, RemoteMachineMonitor* monitor,
-                                                               bool runTaskMode )
-: QDialog( p ), PING_YES( ":core/images/remote_machine_ping_yes.png" ), PING_NO( ":core/images/remote_machine_ping_no.png" ),
-PING_WAIT_FOR_RESPONSE( ":core/images/remote_machine_ping_waiting_response.png" ), PING_QUESTION(":core/images/question.png"),
-rmm(monitor), getPublicMachinesTask( NULL ) {
-    setupUi( this );
-
-    // add log-view widget
-    QVBoxLayout* logLayout = new QVBoxLayout();
-    logViewHolder->setLayout(logLayout);
-    LogViewWidget* logView = new LogViewWidget(prepareLogFilter());
-    logView->setSearchBoxMode(LogViewSearchBox_Hidden);
-    logLayout->addWidget(logView);
-
-
-    currentlySelectedItemIndex = -1;
-
-    assert(rmm != NULL);
-
-    QList< RemoteMachineSettingsPtr > monitorItems = rmm->getRemoteMachineMonitorItems();
-    int sz = monitorItems.size();
-    for( int i = 0; i < sz; ++i ) {
-        const RemoteMachineSettingsPtr& item = monitorItems.at( i );
-        addMachineSettings( item, false );
-    }
-    rsLog.details(tr("Found %1 remote machine records").arg(sz));
-
-    connect( okPushButton, SIGNAL( clicked() ), SLOT( sl_okPushButtonClicked() ) );
-    connect( cancelPushButton, SIGNAL( clicked() ), SLOT( sl_cancelPushButtonClicked() ) );
-    connect( addPushButton, SIGNAL( clicked() ), SLOT( sl_addPushButtonClicked() ) );
-    connect( removePushButton, SIGNAL( clicked() ), SLOT( sl_removePushButtonClicked() ) );
-    connect( modifyPushButton, SIGNAL( clicked() ), SLOT( sl_modifyPushButtonClicked() ) );
-    connect( showTasksButton, SIGNAL(clicked()), SLOT(sl_showUserTasksButtonClicked()) );
-    connect( machinesTreeWidget, SIGNAL( itemSelectionChanged() ), SLOT( sl_selectionChanged() ) );
-    connect( pingPushButton, SIGNAL( clicked() ), SLOT( sl_pingPushButtonClicked() ) );
-    connect( getPublicMachinesButton, SIGNAL( clicked() ), SLOT( sl_getPublicMachinesButtonClicked() ) );
-
-    okPushButton->setDefault( true );
-
-    QHeaderView * header = machinesTreeWidget->header();
-    header->setStretchLastSection( false );
-#if (QT_VERSION < 0x050000) //Qt 5
-    header->setClickable( false );
-    header->setResizeMode( 1, QHeaderView::Stretch );
-#else
-    header->setSectionsClickable( false );
-    header->setSectionResizeMode( 1, QHeaderView::Stretch );
-#endif
-
-    if( runTaskMode ) {
-        okPushButton->setText( OK_BUTTON_RUN );
-    }
-
-    initMachineActionsMenu();
-    updateState();
-}
-
-void RemoteMachineMonitorDialogImpl::initMachineActionsMenu() {
-    machinesTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
-    connect(machinesTreeWidget, SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(sl_machinesTreeMenuRequested(const QPoint&)));
-
-    machineActionsMenu = new QMenu(this);
-
-    QAction * removeMachineAction = machineActionsMenu->addAction(removePushButton->text());
-    connect(removeMachineAction, SIGNAL(triggered()), SLOT(sl_removePushButtonClicked()));
-
-    QAction * modifyMachineAction = machineActionsMenu->addAction(modifyPushButton->text());
-    connect(modifyMachineAction, SIGNAL(triggered()), SLOT(sl_modifyPushButtonClicked()));
-
-    QAction * pingMachineAction = machineActionsMenu->addAction(pingPushButton->text());
-    connect(pingMachineAction, SIGNAL(triggered()), SLOT(sl_pingPushButtonClicked()));
-
-    QAction * saveMachineAction = machineActionsMenu->addAction(tr("Save machine..."));
-    connect(saveMachineAction, SIGNAL(triggered()), SLOT(sl_saveMachine()));
-}
-
-bool RemoteMachineMonitorDialogImpl::addMachineSettings( const RemoteMachineSettingsPtr& settings, bool ping ) {
-    assert( NULL != settings );
-    if( hasSameMachineInTheView( settings ) ) {
-        rsLog.error(tr( "Can't add %1 machine. The machine is already registered" ).arg( settings->getName() ) );
-        return false;
-    }
-
-    RemoteMachineItemInfo item( settings);
-
-    machinesItemsByOrder << item;
-    QTreeWidgetItem * widgetItem = addItemToTheView( item );
-    assert( NULL != widgetItem );
-    rmm->addMachineConfiguration(settings);
-
-    if (ping) {
-        pingMachine( settings, widgetItem );
-    } else {
-        widgetItem->setIcon(2, PING_QUESTION);
-        widgetItem->setIcon(3, PING_QUESTION);
-
-    }
-
-    return true;
-}
-
-QTreeWidgetItem * RemoteMachineMonitorDialogImpl::addItemToTheView( RemoteMachineItemInfo & itemInfo ) {
-    assert( NULL != itemInfo.settings );
-    QStringList strings;
-    QTreeWidgetItem * widgetItem = new QTreeWidgetItem( machinesTreeWidget );
-
-    widgetItem->setText(0, itemInfo.settings->getName());
-    widgetItem->setText(1, itemInfo.settings->getProtocolId());
-    widgetItem->setTextAlignment(2, Qt::AlignCenter);
-
-    machinesTreeWidget->addTopLevelItem( widgetItem );
-    resizeTreeWidget();
-
-    return widgetItem;
-}
-
-bool RemoteMachineMonitorDialogImpl::hasSameMachineInTheView( const RemoteMachineSettingsPtr& suspect ) const {
-    int sz = machinesItemsByOrder.size();
-    for( int i = 0; i < sz; ++i ) {
-        const RemoteMachineItemInfo& item = machinesItemsByOrder.at( i );
-        if( item.settings == suspect ) {
-            return true;
-        }
-    }
-    return false;
-}
-
-QList< RemoteMachineItemInfo > RemoteMachineMonitorDialogImpl::getModel() const {
-    return machinesItemsByOrder;
-}
-
-
-void RemoteMachineMonitorDialogImpl::sl_okPushButtonClicked() {
-    if (okPushButton->text() == OK_BUTTON_RUN) {
-        RemoteMachineSettingsPtr s = getSelectedMachine();
-        checkCredentials(s);
-    }
-
-    accept();
-}
-
-void RemoteMachineMonitorDialogImpl::sl_cancelPushButtonClicked() {
-    reject();
-}
-
-
-void RemoteMachineMonitorDialogImpl::sl_addPushButtonClicked() {
-
-    QList< ProtocolInfo* > protoInfos = AppContext::getProtocolInfoRegistry()->getProtocolInfos();
-    if (protoInfos.size() < 1) {
-        QMessageBox::information(this, tr("Add remote macnine"), tr("No protocols for distributed computing are found.\nPlease check your plugin list."));
-        return;
-    }
-
-    QObjectScopedPointer<RemoteMachineSettingsDialog> settingsDlg = new RemoteMachineSettingsDialog(this);
-    const int rc = settingsDlg->exec();
-    CHECK(!settingsDlg.isNull(), );
-
-    if( QDialog::Rejected == rc ) {
-        return;
-    }
-    assert( QDialog::Accepted == rc );
-
-    RemoteMachineSettingsPtr newMachine = settingsDlg->getMachineSettings();
-    if( NULL == newMachine ) {
-        return;
-    }
-    addMachineSettings( newMachine, true );
-
-}
-
-void RemoteMachineMonitorDialogImpl::sl_modifyPushButtonClicked() {
-    assert( 1 == topLevelItemsSelectedNum() );
-    int row = getSelectedTopLevelRow();
-    assert( 0 <= row && row < machinesItemsByOrder.size() );
-
-    QObjectScopedPointer<RemoteMachineSettingsDialog> settingsDlg = new RemoteMachineSettingsDialog(this, machinesItemsByOrder.at(row).settings);
-    const int rc = settingsDlg->exec();
-    CHECK(!settingsDlg.isNull(), );
-
-    if( QDialog::Rejected == rc ) {
-        return;
-    }
-
-    RemoteMachineSettingsPtr newMachine = settingsDlg->getMachineSettings();
-    if( NULL == newMachine ) {
-        return;
-    }
-
-    removeDialogItemAt( row );
-    addMachineSettings( newMachine, true );
-}
-
-void RemoteMachineMonitorDialogImpl::sl_removePushButtonClicked() {
-    assert( 1 == topLevelItemsSelectedNum() );
-    bool ok = removeDialogItemAt( getSelectedTopLevelRow() );
-    if( !ok ) {
-        QString msg = tr( "Cannot delete machine that is waiting for response" );
-        rsLog.error(msg);
-        QMessageBox::critical( this, tr( "Error!" ), msg );
-        return;
-    }
-
-}
-
-bool RemoteMachineMonitorDialogImpl::removeDialogItemAt( int row ) {
-    assert( 0 <= row && row < machinesItemsByOrder.size() );
-    RemoteMachineItemInfo & itemToRemove = machinesItemsByOrder[row];
-    QScopedPointer<QTreeWidgetItem> treeItemToRemove ( machinesTreeWidget->takeTopLevelItem( row ) );
-    rmm->removeMachineConfiguration(itemToRemove.settings);
-    machinesItemsByOrder.removeAt( row );
-
-    return true;
-}
-
-void RemoteMachineMonitorDialogImpl::sl_selectionChanged() {
-    if (machinesTreeWidget->currentItem() != NULL ) {
-        currentlySelectedItemIndex = getSelectedTopLevelRow();
-    } else {
-        currentlySelectedItemIndex = -1;
-    }
-
-    updateState();
-}
-
-int RemoteMachineMonitorDialogImpl::topLevelItemsSelectedNum() const {
-    return machinesTreeWidget->selectedItems().size();
-}
-
-int RemoteMachineMonitorDialogImpl::getSelectedTopLevelRow() const {
-    assert( 1 == topLevelItemsSelectedNum() );
-    QList< QTreeWidgetItem* > selection = machinesTreeWidget->selectedItems();
-    assert( !selection.isEmpty() );
-    return machinesTreeWidget->indexOfTopLevelItem( selection.first() );
-}
-
-
-void RemoteMachineMonitorDialogImpl::enableItem( QTreeWidgetItem * item, bool enable ) {
-    assert( NULL != item );
-    GUIUtils::setMutedLnF(item, !enable, true);
-}
-
-void RemoteMachineMonitorDialogImpl::sl_retrieveInfoTaskStateChanged() {
-    RetrieveRemoteMachineInfoTask * retrieveInfoTask = qobject_cast< RetrieveRemoteMachineInfoTask* >( sender() );
-    assert( NULL != retrieveInfoTask );
-    if( Task::State_Finished != retrieveInfoTask->getState() ) {
-        return;
-    }
-
-    RemoteMachineSettingsPtr machineSettings = retrieveInfoTask->getMachineSettings();
-    assert( NULL != machineSettings );
-    QTreeWidgetItem * treeItem = pingingItems.value( machineSettings );
-
-    pingingItems.remove( machineSettings );
-
-    int row = machinesTreeWidget->indexOfTopLevelItem( treeItem );
-    if( -1 == row ) {
-        return; /* item was deleted from the table */
-    }
-
-    RemoteMachineItemInfo & itemInfo = machinesItemsByOrder[row];
-
-    bool pingOk = retrieveInfoTask->isPingOk();
-    bool authOk = !retrieveInfoTask->hasError();
-
-    treeItem->setIcon( 2, pingOk ? PING_YES : PING_NO);
-    treeItem->setIcon( 3, authOk ? PING_YES : PING_NO);
-
-
-    if ( !authOk  ) {
-        rsLog.error( tr( "Test connection for machine %1 finished with error: '%2'" ).
-            arg( itemInfo.settings->getName() ).arg( retrieveInfoTask->getError() ) );
-    }
-
-    itemInfo.hostname = retrieveInfoTask->getHostName();
-    treeItem->setText(1, itemInfo.hostname );
-    resizeTreeWidget();
-
-    enableItem(treeItem, authOk);
-
-    updateState();
-
-}
-
-
-void RemoteMachineMonitorDialogImpl::sl_pingPushButtonClicked() {
-    assert( 1 == topLevelItemsSelectedNum() );
-    int row = getSelectedTopLevelRow();
-    pingMachine( machinesItemsByOrder.at( row ).settings, machinesTreeWidget->topLevelItem( row ) );
-    updateState();
-}
-
-void RemoteMachineMonitorDialogImpl::pingMachine( const RemoteMachineSettingsPtr& settings, QTreeWidgetItem * item ) {
-    assert( NULL != settings && NULL != item );
-
-    if (!checkCredentials(settings)) {
-        return;
-    }
-
-    if( pingingItems.values().contains( item ) ) {
-        rsLog.info(tr("Ping task is already active for machine: %1" ).arg(item->text(0)));
-        return;
-    }
-
-    pingingItems.insert( settings, item );
-    item->setIcon(2, PING_WAIT_FOR_RESPONSE);
-    item->setIcon(3, PING_WAIT_FOR_RESPONSE);
-
-    RetrieveRemoteMachineInfoTask * retrieveInfoTask = new RetrieveRemoteMachineInfoTask( settings );
-    connect( retrieveInfoTask, SIGNAL( si_stateChanged() ), SLOT( sl_retrieveInfoTaskStateChanged() ) );
-    AppContext::getTaskScheduler()->registerTopLevelTask( retrieveInfoTask );
-}
-
-
-void RemoteMachineMonitorDialogImpl::resizeTreeWidget() {
-    QHeaderView * header = machinesTreeWidget->header();
-    header->resizeSections( QHeaderView::ResizeToContents );
-}
-
-void RemoteMachineMonitorDialogImpl::sl_getPublicMachinesButtonClicked() {
-    if( NULL != getPublicMachinesTask ) {
-        rsLog.details(tr("Public machines request is already sent" ) );
-        return;
-    }
-
-    getPublicMachinesTask = new RetrievePublicMachinesTask();
-    connect( getPublicMachinesTask, SIGNAL( si_stateChanged() ), SLOT( sl_getPublicMachinesTaskStateChanged() ) );
-    AppContext::getTaskScheduler()->registerTopLevelTask( getPublicMachinesTask );
-    getPublicMachinesButton->setEnabled(false);
-}
-
-void RemoteMachineMonitorDialogImpl::sl_getPublicMachinesTaskStateChanged() {
-    assert( NULL != getPublicMachinesTask && getPublicMachinesTask == sender() );
-    if( Task::State_Finished != getPublicMachinesTask->getState() ) {
-        return;
-    }
-
-    QList< RemoteMachineSettingsPtr > newMachines = getPublicMachinesTask->takePublicMachines();
-
-    if( getPublicMachinesTask->hasError()) {
-        QMessageBox::critical(this, tr("Info"), tr("Error during remote machines request: %1").arg(getPublicMachinesTask->getError()));
-    } else if ( newMachines.isEmpty() ) {
-        QMessageBox::information(this, tr("Info"), tr("No public machines found"));
-    } else {
-        foreach( const RemoteMachineSettingsPtr&  machine, newMachines ) {
-            addMachineSettings( machine, false );
-        }
-    }
-    getPublicMachinesTask = NULL;
-    getPublicMachinesButton->setEnabled(true);
-
-
-}
-
-void RemoteMachineMonitorDialogImpl::sl_machinesTreeMenuRequested(const QPoint& p) {
-    QTreeWidgetItem * item = machinesTreeWidget->itemAt(p);
-    if( item == NULL || item->parent() != NULL ) {
-        return;
-    }
-    machineActionsMenu->exec(QCursor::pos());
-}
-
-void RemoteMachineMonitorDialogImpl::sl_saveMachine() {
-    assert(topLevelItemsSelectedNum() == 1);
-    RemoteMachineItemInfo & item = machinesItemsByOrder[getSelectedTopLevelRow()];
-    QString filename;
-    LastUsedDirHelper dirHelper(SAVE_SETTINGS_FILE_DOMAIN);
-    dirHelper.url = filename = U2FileDialog::getSaveFileName( this, tr("Select a file to save"), dirHelper.dir);
-    AppContext::getTaskScheduler()->registerTopLevelTask(new SaveRemoteMachineSettings(item.settings, filename));
-}
-
-void RemoteMachineMonitorDialogImpl::updateState()
-{
-
-    if (okPushButton->text() == OK_BUTTON_RUN) {
-        okPushButton->setEnabled(topLevelItemsSelectedNum() > 0);
-    }
-
-    bool itemSelected = machinesTreeWidget->selectedItems().size() > 0;
-
-    bool pinging = false;
-    foreach(QTreeWidgetItem* item, pingingItems.values()) {
-        if (item->isSelected()) {
-            pinging = true;
-            break;
-        }
-    }
-
-    bool available = !pinging && itemSelected;
-
-    pingPushButton->setEnabled(available);
-    removePushButton->setEnabled(available );
-    modifyPushButton->setEnabled(available );
-    showTasksButton->setEnabled(available);
-
-    foreach (QAction* action, machineActionsMenu->actions()) {
-        action->setEnabled(available);
-    }
-}
-
-RemoteMachineSettingsPtr RemoteMachineMonitorDialogImpl::getSelectedMachine() const {
-    if ( currentlySelectedItemIndex < 0 || currentlySelectedItemIndex >= machinesItemsByOrder.size() ) {
-        return RemoteMachineSettingsPtr();
-    }
-
-    const RemoteMachineItemInfo& info = machinesItemsByOrder.at(currentlySelectedItemIndex);
-    return info.settings;
-}
-
-void RemoteMachineMonitorDialogImpl::sl_showUserTasksButtonClicked() {
-    ProtocolInfoRegistry * pir = AppContext::getProtocolInfoRegistry();
-    assert( NULL != pir );
-    QList< ProtocolInfo* > protoInfos = pir->getProtocolInfos();
-    assert(protoInfos.size() > 0);
-    ProtocolInfo* pi = protoInfos.first();
-
-    int row = getSelectedTopLevelRow();
-    RemoteMachineSettingsPtr settings = machinesItemsByOrder.at(row).settings;
-    if (!checkCredentials(settings)) {
-        return;
-    }
-    if (settings->usesGuestAccount()) {
-        QMessageBox::warning(this, tr("User Tasks"),
-            tr("<html><br>Unable to show user task statistics for guest account. \
-               <br>Please register on <a href=http://ugene-service.com >ugene-service.com</a></html>"));
-        return;
-    }
-
-    QObjectScopedPointer<QDialog> dlg(pi->getProtocolUI()->createUserTasksDialog(settings, this));
-    CHECK(!dlg.isNull(), );
-    dlg->exec();
-}
-
-bool RemoteMachineMonitorDialogImpl::checkCredentials( const RemoteMachineSettingsPtr& settings ) {
-    const UserCredentials& credentials = settings->getUserCredentials();
-    if (!credentials.valid) {
-        QObjectScopedPointer<AuthenticationDialog> dlg = new AuthenticationDialog("", this);
-        const int rc = dlg->exec();
-        CHECK(!dlg.isNull(), false);
-
-        if ( QDialog::Rejected == rc ) {
-            return false;
-        }
-        settings->setupCredentials(dlg->getLogin(), dlg->getPassword(), dlg->isRemembered());
-    }
-    return true;
-}
-
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogImpl.h b/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogImpl.h
deleted file mode 100644
index 7367d44..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineMonitorDialogImpl.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * 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_REMOTE_MACHINE_MONITOR_DIALOG_IMPL_H_
-#define _U2_REMOTE_MACHINE_MONITOR_DIALOG_IMPL_H_
-
-#include <U2Remote/RemoteMachine.h>
-#include <U2Remote/RemoteMachineMonitor.h>
-
-#include <ui/ui_RemoteMachineMonitorDialog.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#include <QtGui/QCheckBox>
-#else
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QCheckBox>
-#endif
-
-namespace U2 {
-
-class RemoteTask;
-class RetrievePublicMachinesTask;
-class UpdateActiveTasks;
-class RemoteMachinesMonitor;
-
-#if QT_VERSION < 0x040700
-template <class T> bool operator<(const QSharedPointer<T>& a, const QSharedPointer<T>& b){ return a.data() < b.data(); }
-#endif
-
-
-struct RemoteMachineItemInfo {
-    RemoteMachineSettingsPtr    settings;
-    QString                     hostname;
-    bool                        isSelected;
-
-    RemoteMachineItemInfo(const RemoteMachineSettingsPtr& s)
-        : settings(s), isSelected(false) {
-        assert( NULL != settings );
-    }
-    RemoteMachineItemInfo()
-        : settings( NULL ), isSelected(false)  {
-    }
-
-}; // RemoteMachineMonitorItemInfo
-
-class RemoteMachineMonitorDialogImpl : public QDialog, Ui::RemoteMachineMonitorDialog {
-    Q_OBJECT
-private:
-    static const QString OK_BUTTON_RUN;
-    static const int CHECKBOX_SIZE_HINT_MAGIC_NUMBER = 2;
-    static const QString SAVE_SETTINGS_FILE_DOMAIN;
-
-public:
-    RemoteMachineMonitorDialogImpl( QWidget * p, RemoteMachineMonitor* monitor,
-                                    bool runTaskMode = false );
-
-    QList< RemoteMachineItemInfo > getModel() const;
-    RemoteMachineSettingsPtr getSelectedMachine() const;
-
-private:
-    bool addMachineSettings( const RemoteMachineSettingsPtr& machine, bool ping );
-    QTreeWidgetItem * addItemToTheView( RemoteMachineItemInfo & item );
-    int topLevelItemsSelectedNum() const;
-    int getSelectedTopLevelRow() const;
-    bool hasSameMachineInTheView( const RemoteMachineSettingsPtr& machine ) const;
-    void enableItem( QTreeWidgetItem * item, bool enable );
-    bool removeDialogItemAt( int row ); /* returns if item was successfully removed */
-    bool checkCredentials(const RemoteMachineSettingsPtr& settings);
-    void checkBoxStateChanged( QCheckBox * cb, bool enable );
-    RemoteMachineItemInfo& getItemInfo(QTreeWidgetItem* item);
-    void pingMachine( const RemoteMachineSettingsPtr& settings, QTreeWidgetItem * item );
-    void resizeTreeWidget();
-    void initMachineActionsMenu();
-    void updateState();
-
-private slots:
-    void sl_okPushButtonClicked();
-    void sl_cancelPushButtonClicked();
-    void sl_addPushButtonClicked();
-    void sl_removePushButtonClicked();
-    void sl_modifyPushButtonClicked();
-    void sl_selectionChanged();
-    void sl_retrieveInfoTaskStateChanged();
-    void sl_pingPushButtonClicked();
-    void sl_getPublicMachinesButtonClicked();
-    void sl_getPublicMachinesTaskStateChanged();
-    void sl_machinesTreeMenuRequested(const QPoint&);
-    void sl_showUserTasksButtonClicked();
-    void sl_saveMachine();
-
-private:
-    QMenu* machineActionsMenu;
-    int currentlySelectedItemIndex;
-    QList< RemoteMachineItemInfo > machinesItemsByOrder;
-    QMap< RemoteMachineSettingsPtr, QTreeWidgetItem * > pingingItems; /* ping sent to machines with this items */
-
-    /* not static because QApplication must be constructed before any graphical object */
-    const QPixmap PING_YES;
-    const QPixmap PING_NO;
-    const QPixmap PING_WAIT_FOR_RESPONSE;
-    const QPixmap PING_QUESTION;
-
-    RemoteMachineMonitor* rmm;
-    RetrievePublicMachinesTask * getPublicMachinesTask;
-
-}; // RemoteMachineMonitorDialogImpl
-
-} // U2
-
-#endif // _U2_REMOTE_MACHINE_MONITOR_DIALOG_IMPL_H_
diff --git a/src/corelibs/U2Remote/src/RemoteMachineScanDialogImpl.cpp b/src/corelibs/U2Remote/src/RemoteMachineScanDialogImpl.cpp
deleted file mode 100644
index 3aaeb00..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineScanDialogImpl.cpp
+++ /dev/null
@@ -1,192 +0,0 @@
-/**
- * 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 <cassert>
-
-#include <QtCore/QtAlgorithms>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QCheckBox>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QCheckBox>
-#endif
-
-#include <U2Core/AppContext.h>
-#include <U2Remote/ProtocolInfo.h>
-#include <U2Remote/RemoteMachineScanner.h>
-
-#include "RemoteMachineScanDialogImpl.h"
-
-namespace U2 {
-
-RemoteMachineScanDialogImpl::RemoteMachineScanDialogImpl() {
-    setupUi( this );
-    ProtocolInfoRegistry * pir = AppContext::getProtocolInfoRegistry();
-    assert( NULL != pir );
-
-    QList< ProtocolInfo * > protocolInfos = pir->getProtocolInfos();
-    foreach( ProtocolInfo * pi, protocolInfos ) {
-        Q_UNUSED(pi);
-        assert( NULL != pi );
-//         if( NULL != pi->getRemoteMachineScanner() ) {
-//             protocolComboBox->addItem( pi->getId() );
-//         }
-     }
-
-    connect( cancelPushButton, SIGNAL( clicked() ), SLOT( sl_cancelPushButtonClicked() ) );
-    connect( okPushButton, SIGNAL( clicked() ), SLOT( sl_okPushButtonClicked() ) );
-
-    if( 0 == protocolComboBox->count() ) {
-        okPushButton->setEnabled( false );
-        QLabel * errorLable = new QLabel( tr( "No protocols that supports scanning found!" ), this );
-        QVBoxLayout * topLayout = qobject_cast< QVBoxLayout* >( layout() );
-        assert( NULL != topLayout );
-        topLayout->insertWidget( 1, errorLable );
-        return;
-    }
-
-    connect( protocolComboBox, SIGNAL( activated( const QString & ) ), SLOT( sl_startScan( const QString & ) ) );
-    connect( &updateTimer, SIGNAL( timeout() ), SLOT( sl_updatePushButtonClicked() ) );
-    updateTimer.start( SCAN_UPDATE_TIME );
-
-    machinesTableWidget->horizontalHeader()->setHighlightSections( false );
-#if (QT_VERSION < 0x050000) //Qt 5
-    machinesTableWidget->horizontalHeader()->setClickable( false );
-    machinesTableWidget->verticalHeader()->setClickable( false );
-#else
-    machinesTableWidget->horizontalHeader()->setSectionsClickable( false );
-    machinesTableWidget->verticalHeader()->setSectionsClickable( false );
-#endif
-    machinesTableWidget->setSelectionMode( QAbstractItemView::NoSelection );
-    machinesTableWidget->setEditTriggers( QAbstractItemView::NoEditTriggers );
-    resizeTable();
-
-    sl_startScan( protocolComboBox->currentText() );
-}
-
-RemoteMachineScanDialogImpl::~RemoteMachineScanDialogImpl() {
-}
-
-void RemoteMachineScanDialogImpl::cleanup() {
-    qDeleteAll( model );
-    model.clear();
-}
-
-void RemoteMachineScanDialogImpl::sl_cancelPushButtonClicked() {
-    cleanup();
-    reject();
-}
-
-void RemoteMachineScanDialogImpl::sl_okPushButtonClicked() {
-    int sz = machinesTableWidget->rowCount();
-    QList< int > delIndexes;
-    for( int i = 0; i < sz; ++i ) {
-        QCheckBox * checkBox = qobject_cast<QCheckBox*>( machinesTableWidget->cellWidget( i, 0 ) );
-        assert( NULL != checkBox );
-        if( !checkBox->isChecked() ) {
-            delIndexes << i;
-        }
-    }
-
-    qSort( delIndexes.begin(), delIndexes.end(), qGreater<int>() );
-    sz = delIndexes.size();
-    for( int i = 0; i < sz; ++i ) {
-        delete model.takeAt( delIndexes.at( i ) );
-    }
-
-    accept();
-}
-
-void RemoteMachineScanDialogImpl::sl_startScan(  const QString & /*protoId*/ ) {
-//     RemoteMachineScanner * scanner = AppContext::getProtocolInfoRegistry()->getProtocolInfo( protoId )->getRemoteMachineScanner();
-//     assert( NULL != scanner );
-//     scanner->startScan();
-//     if( !runningScanners.contains( scanner ) ) {
-//         runningScanners << scanner;
-//     }
-}
-
-void RemoteMachineScanDialogImpl::addMachines( const QList< RemoteMachineSettings* > newMachines ) {
-    foreach( RemoteMachineSettings * machine, newMachines ) {
-        addMachine( machine );
-    }
-}
-
-void RemoteMachineScanDialogImpl::addMachine( RemoteMachineSettings * machine ) {
-    assert( NULL != machine );
-    if( hasSameMachineInTheList( machine ) ) {
-        delete machine;
-    } else {
-        model.append( machine );
-        addNextMachineToTable( machine );
-    }
-    resizeTable();
-}
-
-void RemoteMachineScanDialogImpl::addNextMachineToTable( RemoteMachineSettings * settings ) {
-    assert( NULL != settings );
-    int sz = machinesTableWidget->rowCount();
-    machinesTableWidget->insertRow( sz );
-
-    QCheckBox * checkBox = new QCheckBox();
-    checkBox->setCheckState( Qt::Checked );
-    machinesTableWidget->setCellWidget( sz, 0, checkBox );
-    machinesTableWidget->setItem( sz, 1, new QTableWidgetItem( settings->getName() ) );
-    machinesTableWidget->setItem( sz, 2, new QTableWidgetItem( settings->getProtocolId() ) );
-    machinesTableWidget->resizeColumnToContents( 2 );
-}
-
-void RemoteMachineScanDialogImpl::sl_updatePushButtonClicked() {
-    foreach( RemoteMachineScanner * scanner, runningScanners ) {
-        assert( NULL != scanner );
-        QList< RemoteMachineSettings* > newScanned = scanner->takeScanned();
-        addMachines( newScanned );
-    }
-}
-
-bool RemoteMachineScanDialogImpl::hasSameMachineInTheList( RemoteMachineSettings* suspect ) const {
-    assert( NULL != suspect );
-    foreach( RemoteMachineSettings * machine, model ) {
-        assert( NULL != machine );
-        if( *machine == *suspect ) {
-            return true;
-        }
-    }
-    return false;
-}
-
-RemoteMachineScanDialogModel RemoteMachineScanDialogImpl::getModel() const {
-    return model;
-}
-
-void RemoteMachineScanDialogImpl::resizeTable() {
-
-#if (QT_VERSION < 0x050000) //Qt 5
-    machinesTableWidget->horizontalHeader()->setResizeMode( 1, QHeaderView::Stretch );
-#else
-    machinesTableWidget->horizontalHeader()->setSectionResizeMode( 1, QHeaderView::Stretch );
-#endif
-    machinesTableWidget->horizontalHeader()->resizeSections( QHeaderView::ResizeToContents );
-}
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/RemoteMachineScanDialogImpl.h b/src/corelibs/U2Remote/src/RemoteMachineScanDialogImpl.h
deleted file mode 100644
index b9c6073..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineScanDialogImpl.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * 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_REMOTE_MACHINE_SCAN_DIALOG_IMPL_H_
-#define _U2_REMOTE_MACHINE_SCAN_DIALOG_IMPL_H_
-
-#include <QtCore/QTimer>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-
-#include <U2Remote/RemoteMachine.h>
-#include <ui/ui_RemoteMachineScanDialog.h>
-
-namespace U2 {
-
-typedef QList< RemoteMachineSettings * > RemoteMachineScanDialogModel;
-
-class RemoteMachineScanDialogImpl : public QDialog, public Ui::RemoteMachineScanDialog {
-    Q_OBJECT
-public:
-    static const int SCAN_UPDATE_TIME = 500; /* 0.5 seconds */
-
-public:
-    RemoteMachineScanDialogImpl();
-    ~RemoteMachineScanDialogImpl();
-
-    RemoteMachineScanDialogModel getModel() const;
-
-private:
-    void addMachines( const QList< RemoteMachineSettings* > newMachines );
-    void addMachine( RemoteMachineSettings * machine );
-    void addNextMachineToTable( RemoteMachineSettings * );
-    void cleanup();
-    bool hasSameMachineInTheList( RemoteMachineSettings* ) const;
-    void resizeTable();
-
-private slots:
-    void sl_cancelPushButtonClicked();
-    void sl_okPushButtonClicked();
-    void sl_startScan( const QString & protoId );
-    void sl_updatePushButtonClicked();
-
-private:
-    RemoteMachineScanDialogModel        model; /* machines by order as in the table */
-    QList< RemoteMachineScanner * >     runningScanners;
-    QTimer                              updateTimer;
-
-}; // RemoteMachineScanDialogImpl
-
-} // U2
-
-#endif // _U2_REMOTE_MACHINE_SCAN_DIALOG_IMPL_H_
diff --git a/src/corelibs/U2Remote/src/RemoteMachineScanner.cpp b/src/corelibs/U2Remote/src/RemoteMachineScanner.cpp
deleted file mode 100644
index 3662416..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineScanner.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 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 "RemoteMachineScanner.h"
-
-namespace U2 {
-
-RemoteMachineScanner::RemoteMachineScanner( bool filter ) : filterLocalHost( filter ) {
-}
-
-RemoteMachineScanner::~RemoteMachineScanner() {
-}
-
-void RemoteMachineScanner::setFilterLocalHost( bool filter ) {
-    filterLocalHost = filter;
-}
-
-bool RemoteMachineScanner::getFilterLocalHost() const {
-    return filterLocalHost;
-}
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/RemoteMachineScanner.h b/src/corelibs/U2Remote/src/RemoteMachineScanner.h
deleted file mode 100644
index d24165d..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineScanner.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 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_REMOTE_MACHINE_SCANNER_H_
-#define _U2_REMOTE_MACHINE_SCANNER_H_
-
-#include <QtCore/QList>
-
-#include "RemoteMachine.h"
-
-namespace U2 {
-
-/*
- * Base class. Each transport protocol that can scan remote machines should implement this
- */
-class U2REMOTE_EXPORT RemoteMachineScanner : public QObject {
-public:
-    RemoteMachineScanner( bool filter = true );
-    virtual ~RemoteMachineScanner();
-
-    virtual void startScan() = 0;
-    /* creates new allocated list of machine settings. caller should delete them. returned machines - newly scanned since startScan() */
-    virtual QList< RemoteMachineSettings * > takeScanned() = 0;
-
-    virtual void setFilterLocalHost( bool filter );
-    virtual bool getFilterLocalHost() const;
-
-protected:
-    bool filterLocalHost;
-
-}; // RemoteMachineScanner
-
-} // U2
-
-#endif // _U2_REMOTE_MACHINE_SCANNER_H_
diff --git a/src/corelibs/U2Remote/src/RemoteMachineSettingsDialog.cpp b/src/corelibs/U2Remote/src/RemoteMachineSettingsDialog.cpp
deleted file mode 100644
index 45f472f..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineSettingsDialog.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * 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 <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMessageBox>
-#endif
-
-#include <U2Core/AppContext.h>
-
-#include "RemoteMachineSettingsDialog.h"
-
-namespace U2 {
-
-RemoteMachineSettingsDialog::RemoteMachineSettingsDialog(QWidget* parent, const RemoteMachineSettingsPtr& settings ) : QDialog(parent), machineSettings( settings ), currentUi( NULL ) {
-    setupUi( this );
-
-    ProtocolInfoRegistry * pir = AppContext::getProtocolInfoRegistry();
-    assert( NULL != pir );
-
-    QList< ProtocolInfo* > protoInfos = pir->getProtocolInfos();
-    assert(protoInfos.size() > 0);
-
-    ProtocolInfo* pi = protoInfos.first();
-    currentUi = pi->getProtocolUI();
-    QVBoxLayout * topLayout = qobject_cast< QVBoxLayout* >( layout() );
-    topLayout->insertWidget( 0, currentUi );
-    protoId = pi->getId();
-
-    if (machineSettings != NULL) {
-        currentUi->initializeWidget(machineSettings);
-    }
-
-    connect( cancelPushButton, SIGNAL( clicked() ), SLOT( reject() ) );
-    connect( okPushButton, SIGNAL( clicked() ), SLOT( sl_okPushButtonClicked() ) );
-
-}
-
-RemoteMachineSettingsDialog::~RemoteMachineSettingsDialog() {
-
-    if( NULL != currentUi ) {
-        QVBoxLayout * topLayout = qobject_cast< QVBoxLayout* >( layout() );
-        assert( NULL != topLayout );
-        Q_UNUSED(topLayout);
-        currentUi->setParent( NULL );
-    }
-}
-
-RemoteMachineSettingsPtr  RemoteMachineSettingsDialog::getMachineSettings() const {
-    return machineSettings;
-}
-
-void RemoteMachineSettingsDialog::sl_okPushButtonClicked() {
-
-    QString error = currentUi->validate();
-    if( !error.isEmpty() ) {
-        QMessageBox::critical( this, tr( "Error!" ), error );
-        return;
-    }
-
-    createMachineSettings();
-
-    QDialog::accept();
-}
-
-
-void RemoteMachineSettingsDialog::showErrorLabel( const QString& msg )
-{
-    assert( !msg.isEmpty() );
-    QLabel * errorLabel = new QLabel( msg, this );
-    QVBoxLayout * topLayout = qobject_cast< QVBoxLayout* >( layout() );
-    assert( NULL != topLayout );
-    topLayout->insertWidget( 0, errorLabel );
-
-
-}
-
-void RemoteMachineSettingsDialog::createMachineSettings()
-{
-    assert( !protoId.isEmpty() );
-
-    machineSettings = currentUi->createMachine();
-    if( NULL == machineSettings ) {
-        QMessageBox::critical( this, tr( "Error!" ), tr( "Sorry! Cannot create remote machine" ) );
-    }
-
-}
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/RemoteMachineSettingsDialog.h b/src/corelibs/U2Remote/src/RemoteMachineSettingsDialog.h
deleted file mode 100644
index a3c7cca..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineSettingsDialog.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * 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_REMOTE_MACHINE_SETTINGS_DIALOG_H_
-#define _U2_REMOTE_MACHINE_SETTINGS_DIALOG_H_
-
-#include <U2Remote/RemoteMachine.h>
-#include <U2Remote/ProtocolUI.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-
-#include <ui/ui_RemoteMachineSettingsDialog.h>
-
-namespace U2 {
-
-class RemoteMachineSettingsDialog : public QDialog, public Ui::RemoteMachineSettingsDialog {
-    Q_OBJECT
-public:
-    RemoteMachineSettingsDialog(QWidget* parent, const RemoteMachineSettingsPtr& settings = RemoteMachineSettingsPtr());
-    ~RemoteMachineSettingsDialog();
-
-    RemoteMachineSettingsPtr getMachineSettings() const;
-
-private slots:
-    void sl_okPushButtonClicked();
-
-private:
-    void showErrorLabel(const QString& error);
-    void createMachineSettings();
-    RemoteMachineSettingsPtr        machineSettings;
-    QString                         protoId;
-    ProtocolUI*                     currentUi;
-
-}; // RemoteMachineSettingsDialog
-
-} // U2
-
-#endif // _U2_REMOTE_MACHINE_SETTINGS_DIALOG_H_
diff --git a/src/corelibs/U2Remote/src/RemoteMachineTasks.cpp b/src/corelibs/U2Remote/src/RemoteMachineTasks.cpp
deleted file mode 100644
index 22bbbbe..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineTasks.cpp
+++ /dev/null
@@ -1,208 +0,0 @@
-/**
- * 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 "RemoteMachineTasks.h"
-
-#include "PingTask.h"
-#include "SynchHttp.h"
-
-#include <QtCore/QString>
-#include <QtCore/QUrl>
-#include <QtCore/QFile>
-
-#include <U2Core/NetworkConfiguration.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/Log.h>
-
-#include "SerializeUtils.h"
-
-#include <cassert>
-
-namespace U2 {
-
-/*******************************************
-* RetrieveRemoteMachineInfoTask
-*******************************************/
-
-RetrieveRemoteMachineInfoTask::RetrieveRemoteMachineInfoTask( RemoteMachineSettingsPtr s )
-: Task( tr( "Retrieve remote machine info task" ), TaskFlags_FOSCOE ), pingTask(NULL), pingOK(false), machine( NULL ), settings(s)
-{
-    setVerboseLogMode(true);
-    setErrorNotificationSuppression(true);
-
-}
-
-RetrieveRemoteMachineInfoTask::~RetrieveRemoteMachineInfoTask() {
-    delete machine;
-    machine = NULL;
-}
-
-void RetrieveRemoteMachineInfoTask::prepare() {
-    rsLog.details(tr("Retrieving remomote machine info..." ));
-
-    ProtocolInfo* pi = AppContext::getProtocolInfoRegistry()->getProtocolInfo( settings->getProtocolId() );
-    machine = pi->getRemoteMachineFactory()->createInstance(settings);
-    if( NULL == machine ) {
-        setError( tr( "Cannot create remote machine from remote machine settings: %1" ).arg( settings->getName() ) );
-        return;
-    }
-
-    pingTask = new PingTask(machine);
-    addSubTask( pingTask );
-}
-
-
-void RetrieveRemoteMachineInfoTask::run() {
-    if( hasError() || isCanceled() ) {
-        return;
-    }
-    assert( NULL != machine );
-    if( isCanceled() ) {
-        return;
-    }
-    hostname = machine->getServerName(stateInfo);
-}
-
-Task::ReportResult RetrieveRemoteMachineInfoTask::report() {
-
-    if( pingTask->isCanceled() ) {
-        pingTask->setError( tr( "Ping task is canceled by user" ) );
-    }
-    if( pingTask->hasError() ) {
-        setError( tr( "Ping task finished with error: " ) + pingTask->getError() );
-        pingOK = false;
-        return ReportResult_Finished;
-    }
-
-    pingOK = true;
-    if( isCanceled() ) {
-        setError( tr( "Task is canceled by user" ) );
-        return ReportResult_Finished;
-    }
-
-    return ReportResult_Finished;
-}
-
-QStringList RetrieveRemoteMachineInfoTask::getServicesList() const {
-    return services;
-}
-
-QString RetrieveRemoteMachineInfoTask::getHostName() const {
-    return hostname;
-}
-
-bool RetrieveRemoteMachineInfoTask::isPingOk() const {
-    return pingOK;
-}
-
-
-
-/*******************************************
-* RetrievePublicMachinesTask
-*******************************************/
-
-const QString RetrievePublicMachinesTask::PUBLIC_MACHINES_KEEPER_SERVER = "http://ugene.unipro.ru";
-const QString RetrievePublicMachinesTask::PUBLIC_MACHINES_KEEPER_PAGE   = "/public_machines.html";
-const QString RetrievePublicMachinesTask::PUBLIC_MACHINES_STR_SEPARATOR = "<br>";
-
-RetrievePublicMachinesTask::RetrievePublicMachinesTask() : Task( "Retrieve public remote machines", TaskFlag_None ) {
-    setVerboseLogMode(true);
-    setErrorNotificationSuppression(true);
-}
-
-
-RetrievePublicMachinesTask::~RetrievePublicMachinesTask() {
-
-}
-
-void RetrievePublicMachinesTask::run() {
-    rsLog.details(tr("Retrieving public machines..."));
-
-    SyncHTTP http(stateInfo, this);
-    NetworkConfiguration * nc = AppContext::getAppSettings()->getNetworkConfiguration();
-    assert( NULL != nc );
-    bool proxyUsed = nc->isProxyUsed( QNetworkProxy::HttpProxy );
-    bool srvIsException = nc->getExceptionsList().contains( QUrl( PUBLIC_MACHINES_KEEPER_SERVER ).host() );
-
-    if( proxyUsed && !srvIsException ) {
-        http.setProxy( nc->getProxy( QNetworkProxy::HttpProxy ) );
-    }
-    processEncodedMachines( http.syncGet( QUrl( PUBLIC_MACHINES_KEEPER_SERVER + PUBLIC_MACHINES_KEEPER_PAGE ) ) );
-
-    if (hasError()) {
-        rsLog.error(tr("Failed to retrieve public machines, error: %1").arg(getError()));
-    } else {
-        rsLog.info(tr("Found %1 public machines").arg(publicMachines.size()));
-    }
-}
-
-void RetrievePublicMachinesTask::processEncodedMachines( const QString & encodedMachinesStr ) {
-    QStringList encodedMachines = encodedMachinesStr.split( PUBLIC_MACHINES_STR_SEPARATOR, QString::SkipEmptyParts  );
-    foreach( const QString & encodedMachine, encodedMachines ) {
-        RemoteMachineSettingsPtr settings = SerializeUtils::deserializeRemoteMachineSettings( encodedMachine.trimmed() );
-        if (settings == NULL) {
-            setError( tr( "Illegal server response" ) );
-            break;
-        }
-        publicMachines << settings;
-    }
-}
-
-QList< RemoteMachineSettingsPtr > RetrievePublicMachinesTask::getPublicMachines() const {
-    return publicMachines;
-}
-
-QList< RemoteMachineSettingsPtr > RetrievePublicMachinesTask::takePublicMachines() {
-    QList< RemoteMachineSettingsPtr > res = publicMachines;
-    publicMachines.clear();
-    return res;
-}
-
-/*******************************************
-* SaveRemoteMachineSettings
-*******************************************/
-SaveRemoteMachineSettings::SaveRemoteMachineSettings(const RemoteMachineSettingsPtr& machineSettings, const QString& file)
-: Task(tr("Save remote machine settings task"), TaskFlag_None), filename(file) {
-    if(filename.isEmpty()) {
-        setError(tr("Output file not set"));
-        return;
-    }
-    if( machineSettings == NULL ) {
-        setError(tr("Nothing to write: empty remote machine settings"));
-        return;
-    }
-    data = SerializeUtils::serializeRemoteMachineSettings(machineSettings).toLatin1();
-}
-
-void SaveRemoteMachineSettings::run() {
-    if(hasError() || isCanceled()) {
-        return;
-    }
-    QFile out(filename);
-    if( !out.open(QIODevice::WriteOnly) ) {
-        setError(tr("Cannot open %1 file").arg(filename));
-        return;
-    }
-    out.write(data);
-    out.close();
-}
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/RemoteMachineTasks.h b/src/corelibs/U2Remote/src/RemoteMachineTasks.h
deleted file mode 100644
index 30649b8..0000000
--- a/src/corelibs/U2Remote/src/RemoteMachineTasks.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * 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_DISTRIBUTED_COMPUTING_UTIL_H
-#define _U2_DISTRIBUTED_COMPUTING_UTIL_H
-
-#include <QtCore/QObject>
-
-#include "RemoteMachine.h"
-
-namespace U2 {
-
-    class PingTask;
-
-    /* RemoteMachine functions are blocking, so this task can be useful,
-    * because it waits for remote machine responses in separate thread
-    */
-    class U2REMOTE_EXPORT RetrieveRemoteMachineInfoTask : public Task {
-        Q_OBJECT
-    public:
-        RetrieveRemoteMachineInfoTask( RemoteMachineSettingsPtr s);
-        ~RetrieveRemoteMachineInfoTask();
-
-        virtual void prepare();
-        virtual void run();
-        virtual ReportResult report();
-
-        QStringList getServicesList() const;
-        //QUuid getUuid() const;
-        QString getHostName() const;
-        bool isPingOk() const;
-        RemoteMachineSettingsPtr getMachineSettings() const {return settings;}
-
-    private:
-        QStringList                 services;
-        QString                     hostname;
-        PingTask*                   pingTask;
-        bool                        pingOK;
-        RemoteMachine *             machine;
-        RemoteMachineSettingsPtr    settings;
-    }; // RetrieveRemoteMachineInfoTask
-
-
-    /* Retrieves public RemoteMachines settings from hard-coded ugene websites
-    */
-    class RetrievePublicMachinesTask : public Task {
-        Q_OBJECT
-    public:
-        static const QString PUBLIC_MACHINES_KEEPER_SERVER;
-        static const QString PUBLIC_MACHINES_KEEPER_PAGE;
-        static const QString PUBLIC_MACHINES_STR_SEPARATOR;
-
-    public:
-        RetrievePublicMachinesTask();
-        ~RetrievePublicMachinesTask();
-
-        virtual void run();
-
-        QList< RemoteMachineSettingsPtr > getPublicMachines() const;
-        QList< RemoteMachineSettingsPtr > takePublicMachines();
-
-    private:
-        void processEncodedMachines( const QString & encodedMachines );
-
-    private:
-        QList< RemoteMachineSettingsPtr > publicMachines;
-
-    }; // RetrievePublicMachinesTask
-
-    /* Save remote machine settings to file
-    */
-    class SaveRemoteMachineSettings : public Task {
-        Q_OBJECT
-    public:
-        SaveRemoteMachineSettings(const RemoteMachineSettingsPtr& machineSettings, const QString& filename);
-        virtual void run();
-
-    private:
-        QByteArray data;
-        QString filename;
-
-    }; // SaveRemoteMachineSettings
-
-} // U2
-
-#endif // _U2_DISTRIBUTED_COMPUTING_UTIL_H
diff --git a/src/corelibs/U2Remote/src/RemoteWorkflowRunTask.cpp b/src/corelibs/U2Remote/src/RemoteWorkflowRunTask.cpp
deleted file mode 100644
index 54107c8..0000000
--- a/src/corelibs/U2Remote/src/RemoteWorkflowRunTask.cpp
+++ /dev/null
@@ -1,274 +0,0 @@
-/**
- * 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 <QtXml/QDomDocument>
-#include <QtCore/QFile>
-#include <QtCore/QTimer>
-
-#include <U2Core/L10n.h>
-#include <U2Core/Log.h>
-#include <U2Core/Counter.h>
-
-#include <U2Remote/SerializeUtils.h>
-#include <U2Lang/HRSchemaSerializer.h>
-#include <U2Lang/CoreLibConstants.h>
-#include <U2Lang/WorkflowUtils.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseAttributes.h>
-#include <time.h>
-
-#include "RemoteWorkflowRunTask.h"
-
-
-namespace U2 {
-
-#define TASK_OUTPUT_DIR "out/"
-#define TASK_INPUT_DIR "in/"
-
-/***************************************
-* RemoteWorkflowRunTask
-***************************************/
-
-RemoteWorkflowRunTask::RemoteWorkflowRunTask( const RemoteMachineSettingsPtr& m, const Schema & sc)
-    : Task( tr( "Workflow run task on the cloud" ), TaskFlags_FOSCOE | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled ), machineSettings( m ),
-      machine( NULL ), schema( sc ), taskId(0), eventLoop(NULL),taskIsActive(false)
-{
-    GCOUNTER(cvar, tvar, "WorkflowOnTheCloud");
-    if( NULL == machineSettings ) {
-        setError( tr("Bad remote machine settings"));
-        return;
-    }
-    tpm = Progress_Manual;
-}
-
-RemoteWorkflowRunTask::RemoteWorkflowRunTask( const RemoteMachineSettingsPtr& m, qint64 remoteTaskId )
-: Task( tr( "Workflow run task on the cloud" ), TaskFlags_FOSCOE | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled), machineSettings( m ),
-machine( NULL ), taskId(remoteTaskId), eventLoop(NULL), taskIsActive(true)
-{
-    GCOUNTER(cvar, tvar, "WorkflowOnTheCloud");
-    if( NULL == machineSettings ) {
-        setError( tr("Bad remote machine settings"));
-        return;
-    }
-    tpm = Progress_Manual;
-}
-
-void RemoteWorkflowRunTask::preprocessSchema()
-{
-    foreach( Actor * actor, schema.getProcesses() ) {
-        assert( NULL != actor );
-        if( actor->getParameter( BaseAttributes::URL_IN_ATTRIBUTE().getId() ) != NULL &&
-            actor->getParameter( BaseAttributes::URL_LOCATION_ATTRIBUTE().getId()) == NULL ) {
-
-                actor->addParameter( BaseAttributes::URL_LOCATION_ATTRIBUTE().getId(),
-                    new Attribute( BaseAttributes::URL_LOCATION_ATTRIBUTE(), BaseTypes::BOOL_TYPE(), false, true ) );
-        }
-    }
-}
-
-void RemoteWorkflowRunTask::dumpSchema(const QString& fileName, const QByteArray& schema) {
-    QFile file(fileName);
-    file.open(QIODevice::WriteOnly);
-    file.write(schema);
-    file.close();
-}
-
-
-void RemoteWorkflowRunTask::prepare()
-{
-    if( hasError() || isCanceled() ) {
-        return;
-    }
-
-    rsLog.trace(tr("Started remote workflow task"));
-    machine = AppContext::getProtocolInfoRegistry()->getProtocolInfo( machineSettings->getProtocolId() )
-        ->getRemoteMachineFactory()->createInstance( machineSettings );
-    if( NULL == machine ) {
-        setError( tr( "Cannot create remote machine from remote machine settings: %1" ).arg( machineSettings->getName()) );
-        return;
-    }
-
-    stateInfo.progress = 0;
-
-    if (taskIsActive) {
-        return;
-    }
-
-    preprocessSchema();
-
-    QStringList inputUrls;
-
-    foreach( Actor * actor, schema.getProcesses() ) {
-        assert( NULL != actor );
-        ActorId actorId = actor->getId();
-
-        Attribute * urlInAttr = actor->getParameter( BaseAttributes::URL_IN_ATTRIBUTE().getId() );
-        if( NULL != urlInAttr ) {
-            Attribute * urlLocAttr = actor->getParameter(BaseAttributes::URL_LOCATION_ATTRIBUTE().getId());
-            assert(NULL != urlLocAttr);
-            if (urlLocAttr->getAttributePureValue().toBool()) { // file located on this computer
-                QString urlpath = urlInAttr->getAttributePureValue().toString();
-                // multiple urls are in the same string
-                // TODO: folder contents handling
-                QStringList urls = urlpath.split(';', QString::SkipEmptyParts);
-                QStringList newPathes;
-                foreach (const GUrl& filePath, urls) {
-                    QString path = TASK_INPUT_DIR + filePath.fileName();
-                    inputUrls.append(filePath.getURLString());
-                    newPathes.append(path);
-                }
-                // skip first semicolon
-                QString newPath = newPathes.join(";");
-                urlInAttr->setAttributeValue(newPath);
-            }
-        }
-
-        Attribute * urlOutAttr = actor->getParameter( BaseAttributes::URL_OUT_ATTRIBUTE().getId() );
-        if( NULL != urlOutAttr ) {
-            assert( NULL == actor->getParameter( BaseAttributes::URL_LOCATION_ATTRIBUTE().getId() ) );
-            GUrl filePath = urlOutAttr->getAttributePureValue().toString();
-            QString newPath = TASK_OUTPUT_DIR + filePath.fileName();
-            outputUrls.append(filePath.getURLString());
-            urlOutAttr->setAttributeValue(newPath);
-        }
-    }
-
-    QByteArray rawData = HRSchemaSerializer::schema2String(schema, NULL).toUtf8();
-    taskSettings.insert(CoreLibConstants::WORKFLOW_SCHEMA_ATTR, rawData);
-    taskSettings.insert(CoreLibConstants::DATA_IN_ATTR, inputUrls);
-    taskSettings.insert(CoreLibConstants::DATA_OUT_ATTR, outputUrls);
-
-    rsLog.trace("Workflow is preprocessed for sending to remote service");
-
-#ifdef _DEBUG
-    assert(!WorkflowUtils::WD_FILE_EXTENSIONS.isEmpty());
-    dumpSchema("dump." + WorkflowUtils::WD_FILE_EXTENSIONS.first(), rawData);
-#endif
-}
-
-void RemoteWorkflowRunTask::run() {
-    if (!taskIsActive) {
-        taskId = machine->runTask(stateInfo, CoreLibConstants::WORKFLOW_ON_CLOUD_TASK_ID, taskSettings);
-        if (hasError()) {
-            return;
-        }
-    }
-
-    eventLoop = new QEventLoop(this);
-
-    QTimer::singleShot(RemoteWorkflowRunTask::TIMER_UPDATE_TIME, this, SLOT(sl_remoteTaskTimerUpdate()));
-    eventLoop->exec(QEventLoop::ExcludeUserInputEvents);
-
-    delete eventLoop;
-    eventLoop = NULL;
-}
-
-
-void RemoteWorkflowRunTask::sl_remoteTaskTimerUpdate()  {
-    assert( eventLoop != NULL );
-    if (isCanceled()) {
-        machine->cancelTask(stateInfo, taskId);
-        eventLoop->exit();
-        return;
-    }
-
-    State state = State_Running;
-    state = machine->getTaskState(stateInfo, taskId);
-    if (hasError()) {
-        eventLoop->exit();
-        return;
-    }
-
-    if (state == State_Finished) {
-        rsLog.trace("Workflow task finished on remote host.");
-        if (!outputUrls.isEmpty()) {
-            machine->getTaskResult(stateInfo, taskId, outputUrls, TASK_OUTPUT_DIR);
-            if (hasError()) {
-                eventLoop->exit();
-                return;
-            }
-            rsLog.trace("Retrieved result data from remote host.");
-        }
-        eventLoop->exit();
-        return;
-
-    }
-
-    int progress = machine->getTaskProgress(stateInfo, taskId);
-    if (hasError()) {
-        eventLoop->exit();
-        return;
-    }
-
-    stateInfo.progress = progress;
-    QTimer::singleShot( RemoteWorkflowRunTask::TIMER_UPDATE_TIME, this, SLOT( sl_remoteTaskTimerUpdate() ) );
-}
-
-QString RemoteWorkflowRunTask::generateReport() const {
-    QString res;
-    res+="<table width='75%'>";
-    res+=QString("<tr><th>%1</th><th>%2</th><th>%3</th></tr>").arg(tr("Task")).arg(tr("Status")).arg(tr("Details"));
-#if (QT_VERSION < 0x050000) //Qt 5
-    QString name = Qt::escape(getTaskName());
-    QString error = Qt::escape(getError()).replace("\n", "<br>");
-#else
-    QString name = getTaskName().toHtmlEscaped();
-    QString error = getError().toHtmlEscaped().replace("\n", "<br>");
-#endif
-    QString status = hasError() ? tr("Failed") : isCanceled() ? tr("Canceled") : tr("Finished");
-
-    if (hasError()) {
-        name = "<font color='red'>"+name+"</font>";
-        status = "<font color='red'>"+status+"</font>";
-    } else if (isCanceled()) {
-        status = "<font color='blue'>"+status+"</font>";
-    } else {
-        status = "<font color='green'>"+status+"</font>";
-    }
-    res+=QString("<tr><td>%1</td><td>%2</td><td>%3</td></tr>").arg(name).arg(status).arg(error);
-    res += QString("<tr><td><i>%1</i></td></tr>").arg(tr("Output files:"));
-    foreach(QString url, outputUrls) {
-        if(QFile::exists(url)) {
-            res += QString("<tr><td><a href=\"%1\">%2</a></td></tr>").arg(url).arg(url);
-        }
-    }
-    res+="<tr><td></td></tr>";
-    res+="</table>";
-    return res;
-}
-
-
-Task::ReportResult RemoteWorkflowRunTask::report() {
-    if (!hasError() && !isCanceled()) {
-        rsLog.details("Remote task finished successfully");
-    }
-    return ReportResult_Finished;
-}
-
-RemoteWorkflowRunTask::~RemoteWorkflowRunTask() {
-    delete machine;
-}
-
-
-} // ~ U2
-
-
diff --git a/src/corelibs/U2Remote/src/RemoteWorkflowRunTask.h b/src/corelibs/U2Remote/src/RemoteWorkflowRunTask.h
deleted file mode 100644
index da989ad..0000000
--- a/src/corelibs/U2Remote/src/RemoteWorkflowRunTask.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * 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_REMOTE_WORKFLOW_RUN_TASK_H_
-#define _U2_REMOTE_WORKFLOW_RUN_TASK_H_
-
-#include <U2Core/VirtualFileSystem.h>
-#include <U2Remote/RemoteMachine.h>
-
-#include <U2Lang/Schema.h>
-
-#include <QtCore/QEventLoop>
-
-
-namespace U2 {
-
-using namespace Workflow;
-
-class U2REMOTE_EXPORT RemoteWorkflowRunTask : public Task {
-    Q_OBJECT
-public:
-    RemoteWorkflowRunTask( const RemoteMachineSettingsPtr& m, const Schema & sc);
-    RemoteWorkflowRunTask( const RemoteMachineSettingsPtr& m, qint64 remoteTaskId);
-    ~RemoteWorkflowRunTask();
-
-    static const int TIMER_UPDATE_TIME = 2000; /* 2 seconds */
-    static const int REMOTE_TASK_TIMEOUT = 30000;
-
-    virtual void prepare();
-    virtual void run();
-    QString generateReport() const;
-    virtual ReportResult report();
-    qint64 getRemoteTaskId() { return taskId; }
-
-private:
-    void preprocessSchema();
-    static void dumpSchema(const QString& fileName, const QByteArray& schema);
-
-private slots:
-    void sl_remoteTaskTimerUpdate();
-
-private:
-    RemoteMachineSettingsPtr  machineSettings;
-    RemoteMachine *         machine;
-    Schema                  schema;
-    qint64                  taskId;
-    QEventLoop*             eventLoop;
-    QStringList             outputUrls;
-    QVariantMap             taskSettings;
-    // Task is running or enqueued on remote machine already
-    bool                    taskIsActive;
-
-}; // RemoteWorkflowRunTask
-
-} // U2
-
-#endif // _U2_REMOTE_WORKFLOW_RUN_TASK_H_
diff --git a/src/corelibs/U2Remote/src/Serializable.cpp b/src/corelibs/U2Remote/src/Serializable.cpp
deleted file mode 100644
index ec50430..0000000
--- a/src/corelibs/U2Remote/src/Serializable.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 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 "Serializable.h"
-
-namespace U2 {
-
-/*****************************
- * Serializable
- *****************************/
-Serializable::~Serializable() {
-}
-
-/*****************************
-* HumanSerializable
-*****************************/
-HumanSerializable::~HumanSerializable() {
-}
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/Serializable.h b/src/corelibs/U2Remote/src/Serializable.h
deleted file mode 100644
index 8d0db21..0000000
--- a/src/corelibs/U2Remote/src/Serializable.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * 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_SERIALIZABLE_H_
-#define _U2_SERIALIZABLE_H_
-
-#include <U2Core/global.h>
-
-namespace U2 {
-
-class U2REMOTE_EXPORT Serializable {
-public:
-    virtual ~Serializable();
-    virtual QVariant serialize()const = 0;
-    virtual bool deserialize( const QVariant & data ) = 0;
-
-}; // Serializable
-
-/*
- * this interface is same as Serializable, but it must provide human-readable serialization
- */
-class U2REMOTE_EXPORT HumanSerializable {
-public:
-    virtual ~HumanSerializable();
-    virtual QString serialize() const = 0;
-    virtual bool deserialize( const QString & data ) = 0;
-
-}; // HumanSerializable
-
-} // U2
-
-#endif // _U2_SERIALIZABLE_H_
diff --git a/src/corelibs/U2Remote/src/SerializeUtils.cpp b/src/corelibs/U2Remote/src/SerializeUtils.cpp
deleted file mode 100644
index 841cd5a..0000000
--- a/src/corelibs/U2Remote/src/SerializeUtils.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * 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/AppContext.h>
-#include <U2Core/DNASequence.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/MAlignment.h>
-
-#include "RemoteMachine.h"
-#include "SerializeUtils.h"
-
-#include <QtCore/QFile>
-
-namespace U2 {
-
-// remote machine settings
-
-#define HEADER_COMMENT "# UGENE remote machine settings"
-
-QString SerializeUtils::serializeRemoteMachineSettings( const RemoteMachineSettingsPtr& machineSettings ) {
-    FAIL("Obsolete! Not implemented!", "");
-    Q_UNUSED(machineSettings);
-
-    //assert( NULL != machineSettings );
-    //return HEADER_COMMENT "\n" + machineSettings->serialize();
-}
-
-RemoteMachineSettingsPtr SerializeUtils::deserializeRemoteMachineSettingsFromFile( const QString & machinePath) {
-    FAIL("Obsolete! Not implemented!", RemoteMachineSettingsPtr());
-    Q_UNUSED(machinePath);
-
-    //QFile file( machinePath );
-    //if( !file.open( QIODevice::ReadOnly ) ) {
-    //    return RemoteMachineSettingsPtr();
-    //}
-    //
-    //QString data;
-    //while (!file.atEnd()) {
-    //    QString line = file.readLine();
-    //    if (!line.startsWith("#")) {
-    //        data.append(line);
-    //    }
-    //}
-    //
-    //return deserializeRemoteMachineSettings( data );
-}
-
-/*bool SerializeUtils::deserializeRemoteMachineSettingsFromFile( const QString & machinePath, RemoteMachineSettings ** settings ) {
-    QFile file( machinePath );
-    if( !file.open( QIODevice::ReadOnly ) ) {
-        return NULL;
-    }
-
-    QString data;
-    while (!file.atEnd()) {
-        QString line = file.readLine();
-        if (!line.startsWith("#")) {
-            data.append(line);
-        }
-    }
-
-    if( !deserializeRemoteMachineSettings( data, settings ) || NULL == settings ) { return false; }
-    return true;
-}
-*/
-
-/*static QString getDefaultProtocolId( ) {
-    FAIL("Obsolete! Not implemented!", "");
-
-    //QString res;
-    //QList< ProtocolInfo* > infos = AppContext::getProtocolInfoRegistry()->getProtocolInfos();
-    //
-    //if (infos.count() > 0) {
-    //    res = infos.first()->getId();
-    //}
-
-    //return res;
-}*/
-
-RemoteMachineSettingsPtr SerializeUtils::deserializeRemoteMachineSettings( const QString & data, QString * retProtoId ) {
-    FAIL("Obsolete! Not implemented!", RemoteMachineSettingsPtr());
-    Q_UNUSED(data);
-    Q_UNUSED(retProtoId);
-
-    //QString protoId = getDefaultProtocolId();
-    //ProtocolInfo * protoInfo = AppContext::getProtocolInfoRegistry()->getProtocolInfo( protoId );
-    //if( NULL == protoInfo ) {
-    //    return RemoteMachineSettingsPtr();
-    //}
-    //
-    //RemoteMachineSettingsPtr machineSettings = protoInfo->getRemoteMachineFactory()->createSettings( data );
-    //if( NULL != retProtoId ) {
-    //    *retProtoId = protoId;
-    //}
-
-    //return machineSettings;
-}
-
-/*
-bool SerializeUtils::deserializeRemoteMachineSettings( const QString & data, RemoteMachine ** machine ) {
-    if( NULL == machine ) {
-        return false;
-    }
-    *machine = NULL;
-
-    RemoteMachineSettings * settings = NULL;
-    QString protoId;
-    if( !deserializeRemoteMachineSettings( data, &settings, &protoId ) ) {
-        assert( NULL == settings );
-        return false;
-    }
-    assert( NULL != settings );
-    *machine = AppContext::getProtocolInfoRegistry()->getProtocolInfo( protoId )->getRemoteMachineFactory()->createInstance( settings );
-    delete settings;
-
-    return NULL == *machine ? false : true;
-}
-*/
-
-} // U2
diff --git a/src/corelibs/U2Remote/src/SerializeUtils.h b/src/corelibs/U2Remote/src/SerializeUtils.h
deleted file mode 100644
index 380ef9b..0000000
--- a/src/corelibs/U2Remote/src/SerializeUtils.h
+++ /dev/null
@@ -1,436 +0,0 @@
-/**
- * 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_SERIALIZE_UTILS_H_
-#define _U2_SERIALIZE_UTILS_H_
-
-#include <U2Core/global.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNASequence.h>
-#include <U2Core/MAlignment.h>
-#include <U2Remote/RemoteMachine.h>
-#include <U2Core/VirtualFileSystem.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <stdlib.h> //for calloc
-
-namespace U2 {
-
-class U2REMOTE_EXPORT SerializeUtils {
-private:
-    static const int SERIALIZED_DNASEQUENCE_LIST_SZ = 3;
-
-    static const int SERIALIZED_MALIGNMENT_LIST_SZ = 4;
-
-    static const QString REMOTE_MACHINE_VERSION_1_0;
-
-public:
-    template<typename T> static QVariant serializeValue( const T & t ) {
-        return qVariantFromValue( t );
-    }
-
-    template<typename T> static bool deserializeValue( const QVariant & data, T * val ) {
-        FAIL("Obsolete! Not implemented!", false);
-        Q_UNUSED(data);
-        Q_UNUSED(val);
-
-        //if( NULL == val ) {
-        //    return false;
-        //}
-        //if( !data.canConvert<T>() ) {
-        //    return false;
-        //}
-        //*val = data.value<T>();
-        //return true;
-    }
-
-    template<typename T> static QVariant serializeArray( T * arr, int sz ) {
-        FAIL("Obsolete! Not implemented!", false);
-        Q_UNUSED(arr);
-        Q_UNUSED(sz);
-
-        //if( NULL == arr ) {
-        //    return 0;
-        //}
-        //assert( 0 <= sz );
-        //QVariantList res;
-        //for( int i = 0; i < sz; ++i ) {
-        //    res << serializeValue<T>( arr[i] );
-        //}
-        //return res;
-    }
-
-    /* the arr array must be allocated by caller */
-    template<typename T> static bool deserializeArray( const QVariant & data, T * arr, int sz ) {
-        FAIL("Obsolete! Not implemented!", false);
-        Q_UNUSED(data);
-        Q_UNUSED(arr);
-        Q_UNUSED(sz);
-
-        //if( data.canConvert( QVariant::Int ) && 0 == data.toInt() ) {
-        //    return true;
-        //}
-        //if( 0 >= sz ) {
-        //    return false;
-        //}
-        //if( !data.canConvert( QVariant::List ) ) {
-        //    return false;
-        //}
-        //QVariantList args = data.toList();
-        //if( args.size() != sz ) {
-        //    return false;
-        //}
-        //
-        //for( int i = 0; i < sz; ++i ) {
-        //    if( !deserializeValue<T>( args[i], arr + i ) ) {
-        //        return false;
-        //    }
-        //}
-        //return true;
-    }
-
-    /* serialization of RemoteMachineSettings: human-readable QString instead of binary QVariant
-       4 deserialization functions need for tests */
-    static QString serializeRemoteMachineSettings( const RemoteMachineSettingsPtr& machine );
-    static RemoteMachineSettingsPtr deserializeRemoteMachineSettings( const QString & data, QString * protoId = NULL );
-    //static bool deserializeRemoteMachineSettings( const QString & data, RemoteMachine ** machine );
-    static RemoteMachineSettingsPtr deserializeRemoteMachineSettingsFromFile( const QString & machinePath);
-
-}; // SerializeUtils
-
-// serializeValue/deserializeValue template realizations: TODO: is it good to make them inline?
-template<>
-inline QVariant SerializeUtils::serializeValue<char*>( char * const& str ) {
-    FAIL("Obsolete! Not implemented!", QVariant());
-    Q_UNUSED(str);
-
-    // QVariantList res;
-    //if( NULL == str ) {
-    //    res << serializeValue<int>( -1 );
-    //    res << QVariant();
-    //} else {
-    //    int len = strlen( str );
-    //    res << serializeValue<int>( len );
-    //    res << serializeArray<char>( str, len );
-    //}
-    //return res;
-}
-
-template<>
-inline bool SerializeUtils::deserializeValue<char*>( const QVariant & data, char ** str ) {
-    FAIL("Obsolete! Not implemented!", false);
-    Q_UNUSED(data);
-    Q_UNUSED(str);
-
-    //if( NULL == str ) {
-    //    return false;
-    //}
-    //*str = NULL;
-
-    //if( !data.canConvert( QVariant::List ) ) {
-    //    return false;
-    //}
-    //QVariantList args = data.toList();
-    //if( 2 != args.size() ) {
-    //    return false;
-    //}
-
-    //int sz = 0;
-    //if( !deserializeValue<int>( args[0], &sz ) ) { return false; }
-    //if( -1 == sz ) {
-    //    return true;
-    //}
-    //assert( 0 <= sz );
-    //*str = (char*)calloc( sz + 1, sizeof( char ) );
-    //assert( NULL != str );
-    //if( !deserializeArray<char>( args[1], *str, sz ) ) { return false; }
-    //(*str)[sz] = '\0';
-    //return true;
-}
-
-template<>
-inline QVariant SerializeUtils::serializeValue<const DNAAlphabet*>( const DNAAlphabet * const& al ) {
-    FAIL("Obsolete! Not implemented!", QVariant());
-    Q_UNUSED(al);
-
-    // QVariantList res;
-    //if( NULL != al ) {
-    //    res << serializeValue<bool>( true );
-    //    res << serializeValue<QString>( al->getId() );
-    //} else {
-    //    res << serializeValue<bool>( false );
-    //    res << serializeValue<QString>( "" );
-    //}
-    //return res;
-}
-
-template<>
-inline bool SerializeUtils::deserializeValue<const DNAAlphabet*>( const QVariant & data, const DNAAlphabet ** al ) {
-    FAIL("Obsolete! Not implemented!", false);
-    Q_UNUSED(data);
-    Q_UNUSED(al);
-
-    //if( NULL == al ) {
-    //    return false;
-    //}
-    //*al = NULL;
-    //if( !data.canConvert( QVariant::List ) ) {
-    //    return false;
-    //}
-
-    //QVariantList args = data.toList();
-    //if( 2 != args.size() ) {
-    //    return false;
-    //}
-
-    //bool notNullAl = false;
-    //QString alId;
-    //if( !deserializeValue<bool>( args[0], &notNullAl ) ) { return false; }
-    //if( !deserializeValue<QString>( args[1], &alId ) ) { return false; }
-    //if( notNullAl ) {
-    //    DNAAlphabetRegistry * alReg = AppContext::getDNAAlphabetRegistry();
-    //    assert( NULL != alReg );
-    //    *al = alReg->findById( alId );
-    //}
-
-    //return true;
-}
-
-template<>
-inline QVariant SerializeUtils::serializeValue<DNASequence>( const DNASequence & sequence ) {
-    FAIL("Obsolete! Not implemented!", QVariant());
-    Q_UNUSED(sequence);
-
-    //assert( !sequence.isNull() && NULL != sequence.alphabet );
-    //QVariantList res;
-    //res << serializeValue<QVariantMap>( sequence.info );
-    //res << serializeValue<QByteArray>( sequence.seq );
-    //res << serializeValue<const DNAAlphabet*>( sequence.alphabet );
-    //return res;
-}
-
-template<>
-inline bool SerializeUtils::deserializeValue<DNASequence>( const QVariant & data, DNASequence * seq ) {
-    FAIL("Obsolete! Not implemented!", false);
-    Q_UNUSED(data);
-    Q_UNUSED(seq);
-
-    //if( NULL == seq ) {
-    //    return false;
-    //}
-    //if( !data.canConvert( QVariant::List ) ) {
-    //    return false;
-    //}
-    //QVariantList args = data.toList();
-    //if( SERIALIZED_DNASEQUENCE_LIST_SZ != args.size() ) {
-    //    return false;
-    //}
-
-    //if( !deserializeValue<QVariantMap>( args[0], &seq->info ) ) { return false; }
-    //if( !deserializeValue<QByteArray>( args[1], &seq->seq ) ) { return false; }
-    //if( !deserializeValue<const DNAAlphabet*>( args[2], &seq->alphabet ) ) { return false; }
-    //assert( NULL != seq->alphabet );
-
-    //return true;
-}
-
-template<>
-inline QVariant SerializeUtils::serializeValue<MAlignmentRow>( const MAlignmentRow & row) {
-    FAIL("Obsolete! Not implemented!", QVariant());
-    Q_UNUSED(row);
-
-    //QVariantList res;
-    //res << serializeValue<QString>( row.getName() );
-    //res << serializeValue<QByteArray>( row.getCore() );
-    //res << serializeValue<int>( row.getCoreLength() );
-    //return res;
-}
-
-template<>
-inline QVariant SerializeUtils::serializeValue< QList<MAlignmentRow> >( const QList< MAlignmentRow> & items ) {
-    FAIL("Obsolete! Not implemented!", QVariant());
-    Q_UNUSED(items);
-
-    //QVariantList res;
-    //foreach( const MAlignmentRow & item, items ) {
-    //    res << serializeValue<MAlignmentRow>( item );
-    //}
-    //return res;
-}
-
-template<>
-inline bool SerializeUtils::deserializeValue<MAlignmentRow>( const QVariant & data, MAlignmentRow* row ) {
-    FAIL("Obsolete! Not implemented!", false);
-    Q_UNUSED(data);
-    Q_UNUSED(row);
-
-    //if( !data.canConvert( QVariant::List ) ) {
-    //    return false;
-    //}
-    //QVariantList args = data.toList();
-    //if( 3 != args.size() ) {
-    //    return false;
-    //}
-
-    //QString name;
-    //if ( !deserializeValue<QString>( args[0], &name) ) { return false; }
-
-    //QByteArray array;
-    //if ( !deserializeValue<QByteArray>( args[1], &array) )  { return false; }
-
-    //int offset = 0;
-    //if ( !deserializeValue<int>( args[2], &offset) ) { return false; }
-
-    //U2OpStatus2Log os;
-    //MAlignmentRow createdRow = MAlignmentRow::createRow(name, array, offset, os);
-    //CHECK_OP_EXT(os, row = NULL, false);
-
-    //*row = createdRow;
-    //return true;
-}
-
-template<>
-inline bool SerializeUtils::deserializeValue< QList<MAlignmentRow> >( const QVariant & data, QList< MAlignmentRow > * itemList ) {
-    FAIL("Obsolete! Not implemented!", false);
-    Q_UNUSED(data);
-    Q_UNUSED(itemList);
-
-    //if( !data.canConvert( QVariant::List ) ) {
-    //    return false;
-    //}
-
-    //QVariantList args = data.toList();
-    //foreach( const QVariant & arg, args ) {
-    //    MAlignmentRow item;
-    //    if( !deserializeValue<MAlignmentRow>( arg, &item ) ) { return false; }
-    //    itemList->append( item );
-    //}
-    //return true;
-}
-
-template<>
-inline QVariant SerializeUtils::serializeValue<MAlignment>( const MAlignment & ma ) {
-    FAIL("Obsolete! Not implemented!", QVariant());
-    Q_UNUSED(ma);
-
-    //QVariantList res;
-    //res << serializeValue<const DNAAlphabet*>( ma.getAlphabet());
-    //res << serializeValue< QList<MAlignmentRow> >( ma.getRows() );
-    //res << serializeValue<int>( ma.getLength() );
-    //res << serializeValue<QVariantMap>( ma.getInfo() );
-    //return res;
-}
-
-template<>
-inline bool SerializeUtils::deserializeValue<MAlignment>( const QVariant & data, MAlignment * ma ) {
-    FAIL("Obsolete! Not implemented!", false);
-    Q_UNUSED(data);
-    Q_UNUSED(ma);
-
-    //if( NULL == ma ) {
-    //    return false;
-    //}
-    //if( !data.canConvert( QVariant::List ) ) {
-    //    return false;
-    //}
-    //QVariantList args = data.toList();
-    //if( SERIALIZED_MALIGNMENT_LIST_SZ != args.size() ) {
-    //    return false;
-    //}
-    //
-    //const DNAAlphabet* al = NULL;
-    //if( !deserializeValue<const DNAAlphabet*>( args[0], &al) ) { return false; }
-
-    //QList<MAlignmentRow> rows;
-    //if( !deserializeValue< QList<MAlignmentRow> >( args[1], &rows) ) { return false; }
-
-    //int len = 0;
-    //if( !deserializeValue<int>( args[2], &len) ) { return false; }
-
-    //QVariantMap info;
-    //if( !deserializeValue<QVariantMap>( args[3], &info ) ) { return false; }
-
-    //*ma = MAlignment(MA_OBJECT_NAME, al, rows);
-    //ma->setInfo(info);
-
-    //return true;
-}
-
-template<>
-inline QVariant SerializeUtils::serializeValue<VirtualFileSystem>( const VirtualFileSystem & vfs ) {
-    FAIL("Obsolete! Not implemented!", QVariant());
-    Q_UNUSED(vfs);
-
-    //QVariantList res;
-    //
-    //res << serializeValue( vfs.getId() );
-    //
-    //QVariantMap resMap;
-    //QStringList filenames = vfs.getAllFilenames();
-    //foreach( const QString & filename, filenames ) {
-    //    QByteArray file = vfs.getFileByName( filename );
-    //    resMap.insert( filename, serializeValue( file ) );
-    //}
-    //res << serializeValue( resMap );
-    //
-    //return res;
-}
-
-template<>
-inline bool SerializeUtils::deserializeValue<VirtualFileSystem>( const QVariant & data, VirtualFileSystem * val ) {
-    FAIL("Obsolete! Not implemented!", false);
-    Q_UNUSED(data);
-    Q_UNUSED(val);
-
-    //if( NULL == val ) {
-    //    return false;
-    //}
-    //if( !data.canConvert( QVariant::List ) ) {
-    //    return false;
-    //}
-    //QVariantList args = data.toList();
-    //if( 2 != args.size() ) {
-    //    return false;
-    //}
-    //
-    //QString id;
-    //if( !deserializeValue( args[0], &id ) ) { return false; }
-    //val->setId( id );
-    //
-    //QVariantMap filesMap;
-    //if( !deserializeValue( args[1], &filesMap ) ) { return false; }
-    //foreach( const QString & filename, filesMap.keys() ) {
-    //    QByteArray fileData;
-    //    if( !deserializeValue( filesMap[filename], &fileData ) ) {
-    //        val->removeAllFiles();
-    //        return false;
-    //    }
-    //    val->createFile( filename, fileData );
-    //}
-    //
-    //return true;
-}
-
-} // U2
-
-#endif // _U2_SERIALIZE_UTILS_H_
diff --git a/src/corelibs/U2Remote/src/SynchHttp.cpp b/src/corelibs/U2Remote/src/SynchHttp.cpp
deleted file mode 100644
index 307882f..0000000
--- a/src/corelibs/U2Remote/src/SynchHttp.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * 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 "SynchHttp.h"
-#include <U2Core/U2SafePoints.h>
-#include <QtNetwork/QNetworkRequest>
-#include <QtCore/QTimer>
-
-namespace U2 {
-
-SyncHTTP::SyncHTTP(U2OpStatus &os, QObject* parent)
-: QNetworkAccessManager(parent)
-,loop(NULL)
-,errString(""),
-os(os)
-{
-    connect(this,SIGNAL(finished(QNetworkReply*)),SLOT(finished(QNetworkReply*)));
-}
-
-QString SyncHTTP::syncGet(const QUrl& url) {
-    connect(this,SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-    QNetworkRequest request(url);
-    QNetworkReply *reply = get(request);
-    SAFE_POINT(reply != NULL, "SyncHTTP::syncGet no reply is created", "");
-    runTimer();
-    if (loop == NULL){
-        loop = new QEventLoop();
-    }
-    CHECK_OP(os, QString());
-    loop->exec();
-    err=reply->error();
-    errString=reply->errorString();
-    return QString(reply->readAll());
-}
-
-QString SyncHTTP::syncPost(const QUrl & url, QIODevice * data) {
-    connect(this,SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-    QNetworkRequest request(url);
-    QNetworkReply *reply = post(request, data);
-    SAFE_POINT(reply != NULL, "SyncHTTP::syncGet no reply is created", "");
-    runTimer();
-    if (loop == NULL){
-        loop = new QEventLoop();
-    }
-    CHECK_OP(os, QString());
-    loop->exec();
-    err=reply->error();
-    errString=reply->errorString();
-    return QString(reply->readAll());
-}
-
-void SyncHTTP::finished(QNetworkReply*) {
-    SAFE_POINT(loop != NULL, "SyncHTTP::finished no event loop", );
-    loop->exit();
-}
-
-void SyncHTTP::onProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth){
-    auth->setUser(proxy.user());
-    auth->setPassword(proxy.password());
-    disconnect(this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-}
-
-SyncHTTP::~SyncHTTP(){
-    delete loop;
-    loop = NULL;
-}
-void SyncHTTP::runTimer() {
-    QTimer *timer = new QTimer(this);
-    connect(timer, SIGNAL(timeout()), this, SLOT(sl_taskCancellingCheck()));
-    timer->start(500);
-}
-
-void SyncHTTP::sl_taskCancellingCheck() {
-    if (loop != NULL && os.isCanceled()) {
-        loop->exit();
-    }
-}
-
-}  // U2
diff --git a/src/corelibs/U2Remote/src/SynchHttp.h b/src/corelibs/U2Remote/src/SynchHttp.h
deleted file mode 100644
index 62e08d8..0000000
--- a/src/corelibs/U2Remote/src/SynchHttp.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * 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 __SYNC_HTTP_H__
-#define __SYNC_HTTP_H__
-
-#include <QtNetwork/QNetworkAccessManager>
-#include <QtNetwork/QNetworkReply>
-#include <QtNetwork/QNetworkProxy>
-#include <QtNetwork/QAuthenticator>
-#include <QtCore/QEventLoop>
-
-#include <U2Core/global.h>
-#include <U2Core/U2OpStatus.h>
-
-namespace U2 {
-
-class U2REMOTE_EXPORT SyncHTTP : public QNetworkAccessManager {
-    Q_OBJECT
-public:
-    SyncHTTP(U2OpStatus &os, QObject* parent = 0);
-    ~SyncHTTP();
-    QString syncGet(const QUrl& url);
-    QString syncPost(const QUrl & url, QIODevice * data);
-    QNetworkReply::NetworkError error() {return err;}
-    QString errorString() {return errString;}
-protected slots:
-    virtual void finished(QNetworkReply*);
-    virtual void onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*);
-    void sl_taskCancellingCheck();
-
-private:
-    void    runTimer();
-
-    QEventLoop* loop;
-    QNetworkReply::NetworkError err;
-    QString errString;
-    U2OpStatus &os;
-};
-
-} // U2
-
-#endif
diff --git a/src/corelibs/U2Remote/src/TaskDistributor.h b/src/corelibs/U2Remote/src/TaskDistributor.h
deleted file mode 100644
index f32f1b9..0000000
--- a/src/corelibs/U2Remote/src/TaskDistributor.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * 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_TASK_DISTRIBUTOR_H_
-#define _U2_TASK_DISTRIBUTOR_H_
-
-#include <QtCore/QList>
-#include "LocalTask.h"
-
-namespace U2 {
-
-/*
- * Base class. Each algorithm needs its own distributor
- */
-class U2REMOTE_EXPORT TaskDistributor {
-public:
-    virtual ~TaskDistributor(){}
-    /*scatters task settings to some number of parts
-      returns new allocated settings */
-    virtual QList<LocalTaskSettings *> scatter( const LocalTaskSettings * settings)const = 0;
-    /* returns new allocated results */
-    virtual LocalTaskResult * gather(const QList<LocalTaskResult *> &results)const = 0;
-
-}; // TaskDistributor
-
-/*
- * Template to TaskDistributor. Makes it easier to write own TaskDistributor implementation.
- */
-template<class SettingsT, class ResultT>
-class U2REMOTE_EXPORT TaskDistributorTemplate : public TaskDistributor {
-public:
-    virtual QList<LocalTaskSettings *> scatter( LocalTaskSettings * settings)const
-    {
-        SettingsT *castedSettings = dynamic_cast<SettingsT *>(settings);
-        if(NULL == castedSettings)
-        {
-            return QList<LocalTaskSettings *>();
-        }
-        QList<LocalTaskSettings *> settingsList;
-        foreach(SettingsT *settings, scatter(castedSettings))
-        {
-            settingsList.append(settings);
-        }
-        return settingsList;
-    }
-    virtual LocalTaskResult *gather(const QList<LocalTaskResult *> &results)const
-    {
-        QList<ResultT *> castedResults;
-        foreach(LocalTaskResult *result, results)
-        {
-            ResultT *castedResult = dynamic_cast<ResultT *>(result);
-            if(NULL == castedResult)
-            {
-                return NULL;
-            }
-            castedResults.append(castedResult);
-        }
-        return gather(castedResults);
-    }
-
-    virtual QList<SettingsT *> scatter(const SettingsT *settings)const = 0;
-    virtual ResultT *gather(const QList<const ResultT *> &results)const = 0;
-
-}; // TaskDistributorTemplate
-
-} // U2
-
-#endif // _U2_TASK_DISTRIBUTOR_H_
diff --git a/src/corelibs/U2Remote/src/ui/RemoteMachineMonitorDialog.ui b/src/corelibs/U2Remote/src/ui/RemoteMachineMonitorDialog.ui
deleted file mode 100644
index 61ee4fa..0000000
--- a/src/corelibs/U2Remote/src/ui/RemoteMachineMonitorDialog.ui
+++ /dev/null
@@ -1,216 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>RemoteMachineMonitorDialog</class>
- <widget class="QDialog" name="RemoteMachineMonitorDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>654</width>
-    <height>319</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Remote machine monitor</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <item row="0" column="0">
-    <widget class="QTreeWidget" name="machinesTreeWidget">
-     <property name="toolTip">
-      <string>Remote machine list</string>
-     </property>
-     <property name="whatsThis">
-      <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;">The list contains information about available UGENE remote service machines: the web-url, server name, ping and authentification status. </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;">The green </span><a name="result_box"></a><span style=" font-size:8pt;">t</span><span style=" font-size:8pt;">ick in the status means succes, red cross - fail. The question sign means that the connection with these service has not been tested ye [...]
-     </property>
-     <column>
-      <property name="text">
-       <string>Url</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Server Name</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Ping</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Auth</string>
-      </property>
-     </column>
-    </widget>
-   </item>
-   <item row="0" column="1">
-    <layout class="QVBoxLayout" name="verticalLayout">
-     <item>
-      <widget class="QPushButton" name="addPushButton">
-       <property name="toolTip">
-        <string>Add new UGENE remote service machine</string>
-       </property>
-       <property name="whatsThis">
-        <string>Add new UGENE remote service machine</string>
-       </property>
-       <property name="text">
-        <string>Add...</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="removePushButton">
-       <property name="enabled">
-        <bool>false</bool>
-       </property>
-       <property name="toolTip">
-        <string>Remove UGENE remote service machine from list</string>
-       </property>
-       <property name="whatsThis">
-        <string>Remove UGENE remote service machine from list</string>
-       </property>
-       <property name="text">
-        <string>Remove</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="modifyPushButton">
-       <property name="enabled">
-        <bool>false</bool>
-       </property>
-       <property name="toolTip">
-        <string>Modify settings of existing UGENE remote service machine</string>
-       </property>
-       <property name="whatsThis">
-        <string>Modify settings of existing UGENE remote service machine</string>
-       </property>
-       <property name="text">
-        <string>Modify...</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="pingPushButton">
-       <property name="enabled">
-        <bool>false</bool>
-       </property>
-       <property name="toolTip">
-        <string>Test connection with selected remote machine</string>
-       </property>
-       <property name="whatsThis">
-        <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;">The connection is tested in two steps.</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;">First a PING command is sent to remote service, then an authentification information is sent (AUTH command) and active session is started. </span></p></body></html></string>
-       </property>
-       <property name="text">
-        <string>Test Connection</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="showTasksButton">
-       <property name="enabled">
-        <bool>false</bool>
-       </property>
-       <property name="toolTip">
-        <string>Show user remote tasks statistics</string>
-       </property>
-       <property name="whatsThis">
-        <string>Activate User Tasks dialog, to check finished and ongoing tasks status, retrieve results or delete remote tasks.</string>
-       </property>
-       <property name="text">
-        <string>Show User Tasks</string>
-       </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>
-   </item>
-   <item row="3" column="0" colspan="2">
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <item>
-      <widget class="QPushButton" name="getPublicMachinesButton">
-       <property name="toolTip">
-        <string>Add available public machines to the list</string>
-       </property>
-       <property name="whatsThis">
-        <string>Add available public machines to the list</string>
-       </property>
-       <property name="text">
-        <string>Get Public Machines</string>
-       </property>
-      </widget>
-     </item>
-     <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="okPushButton">
-       <property name="text">
-        <string>OK</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="cancelPushButton">
-       <property name="text">
-        <string>Cancel</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item row="2" column="0">
-    <widget class="QWidget" name="logViewHolder" native="true">
-     <property name="minimumSize">
-      <size>
-       <width>0</width>
-       <height>80</height>
-      </size>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="0">
-    <widget class="QLabel" name="label">
-     <property name="text">
-      <string>Events log</string>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/corelibs/U2Remote/src/ui/RemoteMachineScanDialog.ui b/src/corelibs/U2Remote/src/ui/RemoteMachineScanDialog.ui
deleted file mode 100644
index f92700e..0000000
--- a/src/corelibs/U2Remote/src/ui/RemoteMachineScanDialog.ui
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>RemoteMachineScanDialog</class>
- <widget class="QDialog" name="RemoteMachineScanDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>425</width>
-    <height>318</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Scan remote machine</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QComboBox" name="protocolComboBox"/>
-   </item>
-   <item>
-    <widget class="QTableWidget" name="machinesTableWidget">
-     <column>
-      <property name="text">
-       <string>Add</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Host</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Protocol</string>
-      </property>
-     </column>
-    </widget>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <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="okPushButton">
-       <property name="text">
-        <string>Add selected</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="cancelPushButton">
-       <property name="text">
-        <string>Cancel</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/corelibs/U2Remote/src/ui/RemoteMachineSettingsDialog.ui b/src/corelibs/U2Remote/src/ui/RemoteMachineSettingsDialog.ui
deleted file mode 100644
index b64d962..0000000
--- a/src/corelibs/U2Remote/src/ui/RemoteMachineSettingsDialog.ui
+++ /dev/null
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>RemoteMachineSettingsDialog</class>
- <widget class="QDialog" name="RemoteMachineSettingsDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>332</width>
-    <height>90</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Remote machine configuration</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>36</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <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="okPushButton">
-       <property name="text">
-        <string>OK</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="cancelPushButton">
-       <property name="text">
-        <string>Cancel</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/corelibs/U2Remote/transl/english.ts b/src/corelibs/U2Remote/transl/english.ts
deleted file mode 100644
index b5e15c0..0000000
--- a/src/corelibs/U2Remote/transl/english.ts
+++ /dev/null
@@ -1,516 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="en_US">
-<context>
-    <name>QObject</name>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="45"/>
-        <source>Run</source>
-        <translation>Run</translation>
-    </message>
-</context>
-<context>
-    <name>RemoteMachineMonitorDialog</name>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="14"/>
-        <source>Remote machine monitor</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="20"/>
-        <source>Remote machine list</source>
-        <translation>Remote machine list</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="23"/>
-        <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;">The list contains information about available UGENE remote service machines: the web-url, server name, ping and authentification status. </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;">The green </span><a name="result_box"></a><span style=" font-size:8pt;">t</span><span style=" font-size:8pt;">ick in the status means succes, red cross - fail. The question sign means that the connection with these service has not been tested ye [...]
-        <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:'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;">The list contains information about available UGENE remote service machines: the web-url, server name, ping and authentification status. </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;">The green </span><a name="result_box"></a><span style=" font-size:8pt;">t</span><span style=" font-size:8pt;">ick in the status means succes, red cross - fail. The question sign means that the connection with these service has not been tested ye [...]
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="32"/>
-        <source>Url</source>
-        <translation>Url</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="37"/>
-        <source>Server Name</source>
-        <translation>Server Name</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="42"/>
-        <source>Ping</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="47"/>
-        <source>Auth</source>
-        <translation>Auth</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="57"/>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="60"/>
-        <source>Add new UGENE remote service machine</source>
-        <translation>Add new UGENE remote service machine</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="63"/>
-        <source>Add...</source>
-        <translation>Add...</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="73"/>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="76"/>
-        <source>Remove UGENE remote service machine from list</source>
-        <translation>Remove UGENE remote service machine from list</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="79"/>
-        <source>Remove</source>
-        <translation>Remove</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="89"/>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="92"/>
-        <source>Modify settings of existing UGENE remote service machine</source>
-        <translation>Modify settings of existing UGENE remote service machine</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="95"/>
-        <source>Modify...</source>
-        <translation>Modify...</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="105"/>
-        <source>Test connection with selected remote machine</source>
-        <translation>Test connection with selected remote machine</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="108"/>
-        <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;">The connection is tested in two steps.</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;">First a PING command is sent to remote service, then an authentification information is sent (AUTH command) and active session is started. </span></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:'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;">The connection is tested in two steps.</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;">First a PING command is sent to remote service, then an authentification information is sent (AUTH command) and active session is started. </span></p></body></html></translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="116"/>
-        <source>Test Connection</source>
-        <translation>Test Connection</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="126"/>
-        <source>Show user remote tasks statistics</source>
-        <translation>Show user remote tasks statistics</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="129"/>
-        <source>Activate User Tasks dialog, to check finished and ongoing tasks status, retrieve results or delete remote tasks.</source>
-        <translation>Activate User Tasks dialog, to check finished and ongoing tasks status, retrieve results or delete remote tasks.</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="132"/>
-        <source>Show User Tasks</source>
-        <translation>Show User Tasks</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="156"/>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="159"/>
-        <source>Add available public machines to the list</source>
-        <translation>Add available public machines to the list</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="162"/>
-        <source>Get Public Machines</source>
-        <translation>Get Public Machines</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="182"/>
-        <source>OK</source>
-        <translation>OK</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="189"/>
-        <source>Cancel</source>
-        <translation>Cancel</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="208"/>
-        <source>Events log</source>
-        <translation>Events log</translation>
-    </message>
-</context>
-<context>
-    <name>RemoteMachineScanDialog</name>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="14"/>
-        <source>Scan remote machine</source>
-        <translation>Scan remote machine</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="24"/>
-        <source>Add</source>
-        <translation>Add</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="29"/>
-        <source>Host</source>
-        <translation>Host</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="34"/>
-        <source>Protocol</source>
-        <translation>Protocol</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="57"/>
-        <source>Add selected</source>
-        <translation>Add selected</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="64"/>
-        <source>Cancel</source>
-        <translation>Cancel</translation>
-    </message>
-</context>
-<context>
-    <name>RemoteMachineSettingsDialog</name>
-    <message>
-        <location filename="../src/ui/RemoteMachineSettingsDialog.ui" line="20"/>
-        <source>Remote machine configuration</source>
-        <translation>Remote machine configuration</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineSettingsDialog.ui" line="54"/>
-        <source>OK</source>
-        <translation>OK</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineSettingsDialog.ui" line="61"/>
-        <source>Cancel</source>
-        <translation>Cancel</translation>
-    </message>
-</context>
-<context>
-    <name>U2::DistributedComputingUtil</name>
-    <message>
-        <location filename="../src/DistributedComputingUtil.cpp" line="64"/>
-        <source>Remote machines monitor...</source>
-        <translation>Remote machines monitor...</translation>
-    </message>
-</context>
-<context>
-    <name>U2::PingTask</name>
-    <message>
-        <location filename="../src/PingTask.cpp" line="39"/>
-        <source>PingTask</source>
-        <translation>PingTask</translation>
-    </message>
-    <message>
-        <location filename="../src/PingTask.cpp" line="46"/>
-        <source>Starting remote service ping task, task-id: %1</source>
-        <translation>Starting remote service ping task, task-id: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/PingTask.cpp" line="48"/>
-        <source>Remote service ping task finished, task-id: %1</source>
-        <translation>Remote service ping task finished, task-id: %1</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteMachineMonitorDialogImpl</name>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="80"/>
-        <source>Found %1 remote machine records</source>
-        <translation>Found %1 remote machine records</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="127"/>
-        <source>Save machine...</source>
-        <translation>Save machine...</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="134"/>
-        <source>Can't add %1 machine. The machine is already registered</source>
-        <translation>Can't add %1 machine. The machine is already registered</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="205"/>
-        <source>Add remote macnine</source>
-        <translation>Add remote macnine</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="205"/>
-        <source>No protocols for distributed computing are found.
-Please check your plugin list.</source>
-        <translation>No protocols for distributed computing are found.
-Please check your plugin list.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="254"/>
-        <source>Error!</source>
-        <translation>Error!</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="355"/>
-        <source>Ping task is already active for machine: %1</source>
-        <translation>Ping task is already active for machine: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="376"/>
-        <source>Public machines request is already sent</source>
-        <translation>Public machines request is already sent</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="395"/>
-        <source>Error during remote machines request: %1</source>
-        <translation>Error during remote machines request: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="397"/>
-        <source>No public machines found</source>
-        <translation>No public machines found</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="477"/>
-        <source>User Tasks</source>
-        <translation>User Tasks</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="478"/>
-        <source><html><br>Unable to show user task statistics for guest account.                <br>Please register on <a href=http://ugene-service.com >ugene-service.com</a></html></source>
-        <translation><html><br>Unable to show user task statistics for guest account.                <br>Please register on <a href=http://ugene-service.com >ugene-service.com</a></html></translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="252"/>
-        <source>Cannot delete machine that is waiting for response</source>
-        <translation>Cannot delete machine that is waiting for response</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="325"/>
-        <source>Test connection for machine %1 finished with error: '%2'</source>
-        <translation>Test connection for machine %1 finished with error: '%2'</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="395"/>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="397"/>
-        <source>Info</source>
-        <translation>Info</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="422"/>
-        <source>Select a file to save</source>
-        <translation>Select a file to save</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogController.cpp" line="48"/>
-        <source>Selecting machines error!</source>
-        <translation>Selecting machines error!</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogController.cpp" line="49"/>
-        <source>You didn't select a machine to run remote task!</source>
-        <translation>You didn't select a machine to run remote task!</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteMachineScanDialogImpl</name>
-    <message>
-        <location filename="../src/RemoteMachineScanDialogImpl.cpp" line="61"/>
-        <source>No protocols that supports scanning found!</source>
-        <translation></translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteMachineSettingsDialog</name>
-    <message>
-        <location filename="../src/RemoteMachineSettingsDialog.cpp" line="79"/>
-        <location filename="../src/RemoteMachineSettingsDialog.cpp" line="106"/>
-        <source>Error!</source>
-        <translation>Error!</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineSettingsDialog.cpp" line="106"/>
-        <source>Sorry! Cannot create remote machine</source>
-        <translation>Sorry! Cannot create remote machine</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteWorkflowRunTask</name>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="52"/>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="64"/>
-        <source>Workflow run task on the cloud</source>
-        <translation>Workflow run task on the cloud</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="57"/>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="69"/>
-        <source>Bad remote machine settings</source>
-        <translation>Bad remote machine settings</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="102"/>
-        <source>Started remote workflow task</source>
-        <translation>Started remote workflow task</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="106"/>
-        <source>Cannot create remote machine from remote machine settings: %1</source>
-        <translation>Cannot create remote machine from remote machine settings: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="229"/>
-        <source>Task</source>
-        <translation>Task</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="229"/>
-        <source>Status</source>
-        <translation>Status</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="229"/>
-        <source>Details</source>
-        <translation>Details</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="237"/>
-        <source>Failed</source>
-        <translation>Failed</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="237"/>
-        <source>Canceled</source>
-        <translation>Canceled</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="237"/>
-        <source>Finished</source>
-        <translation>Finished</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="248"/>
-        <source>Output files:</source>
-        <translation>Output files:</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RetrievePublicMachinesTask</name>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="137"/>
-        <source>Retrieving public machines...</source>
-        <translation>Retrieving public machines...</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="151"/>
-        <source>Failed to retrieve public machines, error: %1</source>
-        <translation>Failed to retrieve public machines, error: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="153"/>
-        <source>Found %1 public machines</source>
-        <translation>Found %1 public machines</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="162"/>
-        <source>Illegal server response</source>
-        <translation>Illegal server response</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RetrieveRemoteMachineInfoTask</name>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="46"/>
-        <source>Retrieve remote machine info task</source>
-        <translation>Retrieve remote machine info task</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="64"/>
-        <source>Cannot create remote machine from remote machine settings: %1</source>
-        <translation>Cannot create remote machine from remote machine settings: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="87"/>
-        <source>Ping task is canceled by user</source>
-        <translation>Ping task is canceled by user</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="90"/>
-        <source>Ping task finished with error: </source>
-        <translation>Ping task finished with error: </translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="97"/>
-        <source>Task is canceled by user</source>
-        <translation>Task is canceled by user</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="59"/>
-        <source>Retrieving remomote machine info...</source>
-        <translation>Retrieving remote machine info...</translation>
-    </message>
-</context>
-<context>
-    <name>U2::SaveRemoteMachineSettings</name>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="183"/>
-        <source>Save remote machine settings task</source>
-        <translation>Save remote machine settings task</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="185"/>
-        <source>Output file not set</source>
-        <translation>Output file not set</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="189"/>
-        <source>Nothing to write: empty remote machine settings</source>
-        <translation>Nothing to write: empty remote machine settings</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="201"/>
-        <source>Cannot open %1 file</source>
-        <translation>Cannot open %1 file</translation>
-    </message>
-</context>
-<context>
-    <name>U2::UpdateActiveTasks</name>
-    <message>
-        <location filename="../src/DistributedComputingUtil.cpp" line="98"/>
-        <source>Updating active tasks...</source>
-        <translation>Updating active tasks...</translation>
-    </message>
-    <message>
-        <location filename="../src/DistributedComputingUtil.cpp" line="123"/>
-        <source>Found active task: %1</source>
-        <translation>Found active task: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/DistributedComputingUtil.cpp" line="127"/>
-        <source>Active tasks update finished!</source>
-        <translation>Active tasks update finished!</translation>
-    </message>
-    <message>
-        <location filename="../src/DistributedComputingUtil.cpp" line="102"/>
-        <source>Cannot create remote machine from remote machine settings: %1</source>
-        <translation>Cannot create remote machine from remote machine settings: %1</translation>
-    </message>
-</context>
-</TS>
diff --git a/src/corelibs/U2Remote/transl/russian.ts b/src/corelibs/U2Remote/transl/russian.ts
deleted file mode 100644
index 8683ef8..0000000
--- a/src/corelibs/U2Remote/transl/russian.ts
+++ /dev/null
@@ -1,516 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="ru">
-<context>
-    <name>QObject</name>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="45"/>
-        <source>Run</source>
-        <translation>Запустить</translation>
-    </message>
-</context>
-<context>
-    <name>RemoteMachineMonitorDialog</name>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="14"/>
-        <source>Remote machine monitor</source>
-        <translation>Диспетчер удаленных машин</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="20"/>
-        <source>Remote machine list</source>
-        <translation>Список удаленных машин</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="23"/>
-        <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;">The list contains information about available UGENE remote service machines: the web-url, server name, ping and authentification status. </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;">The green </span><a name="result_box"></a><span style=" font-size:8pt;">t</span><span style=" font-size:8pt;">ick in the status means succes, red cross - fail. The question sign means that the connection with these service has not been tested ye [...]
-        <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:'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;">Лист содержит информацию о доступных удаленных машинах UGENE: адрес, имя сервера, статус авторизации. </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;">Зеленая </span><a name="result_box"></a><span style=" font-size:8pt;">о</span><span style=" font-size:8pt;">тметка на статусе означает успешное соединение, красная отметка означает неудачное соединение. Знак вопроса означает, что соединение с эт [...]
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="32"/>
-        <source>Url</source>
-        <translation>Путь</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="37"/>
-        <source>Server Name</source>
-        <translation>Имя сервера</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="42"/>
-        <source>Ping</source>
-        <translation>Пинг</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="47"/>
-        <source>Auth</source>
-        <translation>Автор</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="57"/>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="60"/>
-        <source>Add new UGENE remote service machine</source>
-        <translation>Добавить новую удаленную машину</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="63"/>
-        <source>Add...</source>
-        <translation>Добавить...</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="73"/>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="76"/>
-        <source>Remove UGENE remote service machine from list</source>
-        <translation>Удалить машину из списка</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="79"/>
-        <source>Remove</source>
-        <translation>Удалить</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="89"/>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="92"/>
-        <source>Modify settings of existing UGENE remote service machine</source>
-        <translation>Изменить настройки удаленной машины</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="95"/>
-        <source>Modify...</source>
-        <translation>Изменить...</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="105"/>
-        <source>Test connection with selected remote machine</source>
-        <translation>Тестирование подключения к выбранной машине</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="108"/>
-        <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;">The connection is tested in two steps.</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;">First a PING command is sent to remote service, then an authentification information is sent (AUTH command) and active session is started. </span></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:'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></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;">Первый этапом была отправлена команда PING на удаленный сервис, после этого была отправлена аутентификационная информация и начата сессия. </span></p></body></html></translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="116"/>
-        <source>Test Connection</source>
-        <translation>Тестирование подключения</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="126"/>
-        <source>Show user remote tasks statistics</source>
-        <translation>Показать удаленные задачи</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="129"/>
-        <source>Activate User Tasks dialog, to check finished and ongoing tasks status, retrieve results or delete remote tasks.</source>
-        <translation>Активируйте диалог пользовательских задач для проверки состояния готовых и текущих задач, получения результатов или удаления задач.</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="132"/>
-        <source>Show User Tasks</source>
-        <translation>Показать задачи</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="156"/>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="159"/>
-        <source>Add available public machines to the list</source>
-        <translation>Добавить доступные задачи в список</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="162"/>
-        <source>Get Public Machines</source>
-        <translation>Найти публичные машины</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="182"/>
-        <source>OK</source>
-        <translation>OK</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="208"/>
-        <source>Events log</source>
-        <translation>События</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineMonitorDialog.ui" line="189"/>
-        <source>Cancel</source>
-        <translation>Отмена</translation>
-    </message>
-</context>
-<context>
-    <name>RemoteMachineScanDialog</name>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="14"/>
-        <source>Scan remote machine</source>
-        <translation>Сканировать удаленные машины</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="24"/>
-        <source>Add</source>
-        <translation>Добавить</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="29"/>
-        <source>Host</source>
-        <translation>Адрес</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="34"/>
-        <source>Protocol</source>
-        <translation>Протокол</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="57"/>
-        <source>Add selected</source>
-        <translation>Добавить выбранные</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineScanDialog.ui" line="64"/>
-        <source>Cancel</source>
-        <translation>Отмена</translation>
-    </message>
-</context>
-<context>
-    <name>RemoteMachineSettingsDialog</name>
-    <message>
-        <location filename="../src/ui/RemoteMachineSettingsDialog.ui" line="20"/>
-        <source>Remote machine configuration</source>
-        <translation>Конфигурация удалённой машины</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineSettingsDialog.ui" line="54"/>
-        <source>OK</source>
-        <translation>OK</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteMachineSettingsDialog.ui" line="61"/>
-        <source>Cancel</source>
-        <translation>Отмена</translation>
-    </message>
-</context>
-<context>
-    <name>U2::DistributedComputingUtil</name>
-    <message>
-        <location filename="../src/DistributedComputingUtil.cpp" line="64"/>
-        <source>Remote machines monitor...</source>
-        <translation>Диспетчер удаленных машин ...</translation>
-    </message>
-</context>
-<context>
-    <name>U2::PingTask</name>
-    <message>
-        <location filename="../src/PingTask.cpp" line="39"/>
-        <source>PingTask</source>
-        <translation>Задача пинг</translation>
-    </message>
-    <message>
-        <location filename="../src/PingTask.cpp" line="46"/>
-        <source>Starting remote service ping task, task-id: %1</source>
-        <translation>Запуск задачи пинг, идентификатор задачи: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/PingTask.cpp" line="48"/>
-        <source>Remote service ping task finished, task-id: %1</source>
-        <translation>Задача пинг с идентификатором %1 завершена</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteMachineMonitorDialogImpl</name>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="80"/>
-        <source>Found %1 remote machine records</source>
-        <translation>Найдено %1 записей удаленной машины</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="127"/>
-        <source>Save machine...</source>
-        <translation>Сохранить удалённую машину...</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="134"/>
-        <source>Can't add %1 machine. The machine is already registered</source>
-        <translation>Невозможно добавить %1 машину. Машина уже зарегистрирована</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="205"/>
-        <source>Add remote macnine</source>
-        <translation>Добавить удаленную машину</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="205"/>
-        <source>No protocols for distributed computing are found.
-Please check your plugin list.</source>
-        <translation>No protocols for distributed computing are found.
-Please check your plugin list.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="355"/>
-        <source>Ping task is already active for machine: %1</source>
-        <translation>Ping task is already active for machine: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="376"/>
-        <source>Public machines request is already sent</source>
-        <translation>Public machines request is already sent</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="395"/>
-        <source>Error during remote machines request: %1</source>
-        <translation>Error during remote machines request: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="397"/>
-        <source>No public machines found</source>
-        <translation>No public machines found</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="477"/>
-        <source>User Tasks</source>
-        <translation>User Tasks</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="478"/>
-        <source><html><br>Unable to show user task statistics for guest account.                <br>Please register on <a href=http://ugene-service.com >ugene-service.com</a></html></source>
-        <translation><html><br>Unable to show user task statistics for guest account.                <br>Please register on <a href=http://ugene-service.com >ugene-service.com</a></html></translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="254"/>
-        <source>Error!</source>
-        <translation>Ошибка!</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="252"/>
-        <source>Cannot delete machine that is waiting for response</source>
-        <translation>Нельзя удалять машину, которая ждет удаленного ответа</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="325"/>
-        <source>Test connection for machine %1 finished with error: '%2'</source>
-        <translation>Test connection for machine %1 finished with error: '%2'</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="395"/>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="397"/>
-        <source>Info</source>
-        <translation>Info</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogImpl.cpp" line="422"/>
-        <source>Select a file to save</source>
-        <translation>Выберите файл для сохранения</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogController.cpp" line="48"/>
-        <source>Selecting machines error!</source>
-        <translation>Selecting machines error!</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineMonitorDialogController.cpp" line="49"/>
-        <source>You didn't select a machine to run remote task!</source>
-        <translation>You didn't select a machine to run remote task!</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteMachineScanDialogImpl</name>
-    <message>
-        <location filename="../src/RemoteMachineScanDialogImpl.cpp" line="61"/>
-        <source>No protocols that supports scanning found!</source>
-        <translation>Не найдено ни одного сетевого протокола, поддерживающего сканирование сети!</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteMachineSettingsDialog</name>
-    <message>
-        <location filename="../src/RemoteMachineSettingsDialog.cpp" line="79"/>
-        <location filename="../src/RemoteMachineSettingsDialog.cpp" line="106"/>
-        <source>Error!</source>
-        <translation>Ошибка!</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineSettingsDialog.cpp" line="106"/>
-        <source>Sorry! Cannot create remote machine</source>
-        <translation>Невозможно создать удаленную машину</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteWorkflowRunTask</name>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="52"/>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="64"/>
-        <source>Workflow run task on the cloud</source>
-        <translation>Исполнение вычислительной схемы на облаке</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="57"/>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="69"/>
-        <source>Bad remote machine settings</source>
-        <translation>Некорректные настройки удалённой машины</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="102"/>
-        <source>Started remote workflow task</source>
-        <translation>Started remote workflow task</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="106"/>
-        <source>Cannot create remote machine from remote machine settings: %1</source>
-        <translation>Не удалось создать удаленную машину на основе следующих настроек:%1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="229"/>
-        <source>Task</source>
-        <translation>Task</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="229"/>
-        <source>Status</source>
-        <translation>Status</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="229"/>
-        <source>Details</source>
-        <translation>Details</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="237"/>
-        <source>Failed</source>
-        <translation>Failed</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="237"/>
-        <source>Canceled</source>
-        <translation>Canceled</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="237"/>
-        <source>Finished</source>
-        <translation>Finished</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteWorkflowRunTask.cpp" line="248"/>
-        <source>Output files:</source>
-        <translation>Output files:</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RetrievePublicMachinesTask</name>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="137"/>
-        <source>Retrieving public machines...</source>
-        <translation>Retrieving public machines...</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="151"/>
-        <source>Failed to retrieve public machines, error: %1</source>
-        <translation>Failed to retrieve public machines, error: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="153"/>
-        <source>Found %1 public machines</source>
-        <translation>Found %1 public machines</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="162"/>
-        <source>Illegal server response</source>
-        <translation>Illegal server response</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RetrieveRemoteMachineInfoTask</name>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="46"/>
-        <source>Retrieve remote machine info task</source>
-        <translation>Задача получения информации о удаленной машине</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="64"/>
-        <source>Cannot create remote machine from remote machine settings: %1</source>
-        <translation>Не удалось создать удаленную машину на основе следующих настроек:%1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="87"/>
-        <source>Ping task is canceled by user</source>
-        <translation>Задача пинга отменена пользователем</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="90"/>
-        <source>Ping task finished with error: </source>
-        <translation>Задача пинг завершилась с ошибкой:</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="97"/>
-        <source>Task is canceled by user</source>
-        <translation>Задача отменена пользователем</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="59"/>
-        <source>Retrieving remomote machine info...</source>
-        <translation>Retrieving remote machine info...</translation>
-    </message>
-</context>
-<context>
-    <name>U2::SaveRemoteMachineSettings</name>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="183"/>
-        <source>Save remote machine settings task</source>
-        <translation>Сохранение настроек удалённой машины</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="185"/>
-        <source>Output file not set</source>
-        <translation>Выходной файл не указан</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="189"/>
-        <source>Nothing to write: empty remote machine settings</source>
-        <translation>Невозможно записать: пустые настройки удалённой машины</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteMachineTasks.cpp" line="201"/>
-        <source>Cannot open %1 file</source>
-        <translation>Невозможно открыть файл "%1"</translation>
-    </message>
-</context>
-<context>
-    <name>U2::UpdateActiveTasks</name>
-    <message>
-        <location filename="../src/DistributedComputingUtil.cpp" line="98"/>
-        <source>Updating active tasks...</source>
-        <translation>Updating active tasks...</translation>
-    </message>
-    <message>
-        <location filename="../src/DistributedComputingUtil.cpp" line="123"/>
-        <source>Found active task: %1</source>
-        <translation>Found active task: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/DistributedComputingUtil.cpp" line="127"/>
-        <source>Active tasks update finished!</source>
-        <translation>Active tasks update finished!</translation>
-    </message>
-    <message>
-        <location filename="../src/DistributedComputingUtil.cpp" line="102"/>
-        <source>Cannot create remote machine from remote machine settings: %1</source>
-        <translation>Не удалось создать удаленную машину на основе следующих настроек:%1</translation>
-    </message>
-</context>
-</TS>
diff --git a/src/corelibs/U2Script/U2Script.pri b/src/corelibs/U2Script/U2Script.pri
index 6d06adf..5d975ae 100644
--- a/src/corelibs/U2Script/U2Script.pri
+++ b/src/corelibs/U2Script/U2Script.pri
@@ -21,15 +21,15 @@ INCLUDEPATH +=      ../../include \
 #                    $${UGENE_NODE_DIR}/deps/uv/include
 #}
 
-LIBS += -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Remote -lU2Lang -lU2Private -lugenedb -lU2Gui -lU2Test
+LIBS += -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Lang -lU2Private -lugenedb -lU2Gui -lU2Test
 
 !debug_and_release|build_pass {
 
     CONFIG( debug, debug|release ) {
         DESTDIR =   ../../_debug
 
-        LIBS -=     -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Remote -lU2Lang -lU2Private -lugenedb -lU2Gui -lU2Test
-        LIBS +=     -L../../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Remoted -lU2Langd -lU2Privated -lugenedbd -lU2Guid -lU2Testd
+        LIBS -=     -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Lang -lU2Private -lugenedb -lU2Gui -lU2Test
+        LIBS +=     -L../../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Langd -lU2Privated -lugenedbd -lU2Guid -lU2Testd
                     
 #        count( UGENE_NODE_DIR, 1 ) {
 #            LIBS += -l$${UGENE_NODE_DIR}/Debug/node
@@ -48,4 +48,4 @@ LIBS += -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Remote -lU2Lang
 unix {
     target.path =   $$UGENE_INSTALL_DIR/$$UGENE_RELATIVE_DESTDIR
     INSTALLS +=     target
-}
\ No newline at end of file
+}
diff --git a/src/corelibs/U2Script/src/UgeneContextWrapper.cpp b/src/corelibs/U2Script/src/UgeneContextWrapper.cpp
index bfedc72..4d49781 100644
--- a/src/corelibs/U2Script/src/UgeneContextWrapper.cpp
+++ b/src/corelibs/U2Script/src/UgeneContextWrapper.cpp
@@ -76,8 +76,6 @@
 #include <U2Lang/WorkflowEnvImpl.h>
 #include <U2Lang/WorkflowSettings.h>
 
-#include <U2Remote/DistributedComputingUtil.h>
-
 #include <U2Test/GTestFrameworkComponents.h>
 
 #include <AppContextImpl.h>
@@ -262,8 +260,6 @@ UgeneContextWrapper::UgeneContextWrapper( const QString &workingDirectoryPath )
     rdc = new RecentlyDownloadedCache( );
     appContext->setRecentlyDownloadedCache( rdc );
 
-    distrUtil = new DistributedComputingUtil( );
-
     vfsReg = new VirtualFileSystemRegistry( );
     appContext->setVirtualFileSystemRegistry( vfsReg );
 
@@ -316,8 +312,6 @@ UgeneContextWrapper::UgeneContextWrapper( const QString &workingDirectoryPath )
 UgeneContextWrapper::~UgeneContextWrapper( ) {
     Workflow::WorkflowEnv::shutdown( );
 
-    delete distrUtil;
-
     delete dpr;
     appContext->setDataPathRegistry( NULL );
 
diff --git a/src/corelibs/U2Script/src/UgeneContextWrapper.h b/src/corelibs/U2Script/src/UgeneContextWrapper.h
index 756fd47..fa3bc6a 100644
--- a/src/corelibs/U2Script/src/UgeneContextWrapper.h
+++ b/src/corelibs/U2Script/src/UgeneContextWrapper.h
@@ -127,7 +127,6 @@ private:
     OpenCLGpuRegistry *                     oclgr;
 #endif
     RecentlyDownloadedCache *               rdc;
-    DistributedComputingUtil *              distrUtil;
     VirtualFileSystemRegistry *             vfsReg;
     DnaAssemblyAlgRegistry *                assemblyReg;
     GenomeAssemblyAlgRegistry *             genomeAssemblyReg;
diff --git a/src/corelibs/U2Script/src/WorkflowElementFacade.cpp b/src/corelibs/U2Script/src/WorkflowElementFacade.cpp
index 9092dad..6c198d8 100644
--- a/src/corelibs/U2Script/src/WorkflowElementFacade.cpp
+++ b/src/corelibs/U2Script/src/WorkflowElementFacade.cpp
@@ -212,8 +212,8 @@ U2ErrorType WorkflowElementFacade::getWriteElementTypeForSlot( const QString &sl
         QList <ActorPrototype*> ::iterator currElement = currGroup.begin();
         while( currElement != currGroup.end() ) {
             QList<PortDescriptor*> currPorts = (*currElement)->getPortDesciptors();
-            Workflow::PortDescriptor *port = currPorts.first();
-            if( port->isInput() ) {
+            Workflow::PortDescriptor *port = currPorts.isEmpty() ? NULL : currPorts.first();
+            if (NULL != port && port->isInput()) {
                 QList<Descriptor> slotList = port->getOwnTypeMap( ).keys( );
                 foreach ( Descriptor slotDescriptor, slotList ) {
                     if( slotDescriptor.getId() == slotId ){
diff --git a/src/corelibs/U2Script/transl/english.ts b/src/corelibs/U2Script/transl/english.ts
index d28308c..4073eb6 100644
--- a/src/corelibs/U2Script/transl/english.ts
+++ b/src/corelibs/U2Script/transl/english.ts
@@ -2,13 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="en_US" sourcelanguage="en">
 <context>
-    <name>AppContextImpl</name>
-    <message>
-        <source>UGENE script environment initialization started</source>
-        <translation type="vanished">UGENE script environment initialization started</translation>
-    </message>
-</context>
-<context>
     <name>QObject</name>
     <message>
         <location filename="../src/CommonDbi.cpp" line="84"/>
@@ -31,7 +24,7 @@
         <translation>The unsupported format was provided</translation>
     </message>
     <message>
-        <location filename="../src/UgeneContextWrapper.cpp" line="436"/>
+        <location filename="../src/UgeneContextWrapper.cpp" line="430"/>
         <source>%1-bit version of UGENE started</source>
         <translation>%1-bit version of UGENE started</translation>
     </message>
@@ -39,7 +32,7 @@
 <context>
     <name>U2::AppContextImpl</name>
     <message>
-        <location filename="../src/UgeneContextWrapper.cpp" line="170"/>
+        <location filename="../src/UgeneContextWrapper.cpp" line="168"/>
         <source>UGENE script environment initialization started</source>
         <translation>UGENE script environment initialization started</translation>
     </message>
diff --git a/src/corelibs/U2Script/transl/russian.ts b/src/corelibs/U2Script/transl/russian.ts
index 028829b..3f6d0f0 100644
--- a/src/corelibs/U2Script/transl/russian.ts
+++ b/src/corelibs/U2Script/transl/russian.ts
@@ -2,13 +2,6 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="ru" sourcelanguage="en">
 <context>
-    <name>AppContextImpl</name>
-    <message>
-        <source>UGENE script environment initialization started</source>
-        <translation type="vanished">UGENE script environment initialization started</translation>
-    </message>
-</context>
-<context>
     <name>QObject</name>
     <message>
         <location filename="../src/CommonDbi.cpp" line="84"/>
@@ -31,7 +24,7 @@
         <translation>The unsupported format was provided</translation>
     </message>
     <message>
-        <location filename="../src/UgeneContextWrapper.cpp" line="436"/>
+        <location filename="../src/UgeneContextWrapper.cpp" line="430"/>
         <source>%1-bit version of UGENE started</source>
         <translation>%1-bit version of UGENE started</translation>
     </message>
@@ -39,7 +32,7 @@
 <context>
     <name>U2::AppContextImpl</name>
     <message>
-        <location filename="../src/UgeneContextWrapper.cpp" line="170"/>
+        <location filename="../src/UgeneContextWrapper.cpp" line="168"/>
         <source>UGENE script environment initialization started</source>
         <translation>UGENE script environment initialization started</translation>
     </message>
diff --git a/src/corelibs/U2Test/CMakeLists.txt b/src/corelibs/U2Test/CMakeLists.txt
new file mode 100644
index 0000000..f752c86
--- /dev/null
+++ b/src/corelibs/U2Test/CMakeLists.txt
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.4)
+project(U2Test)
+
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+
+find_package(Qt5 REQUIRED Core Gui Widgets Xml)
+
+add_definitions(-DBUILDING_U2TEST_DLL)
+
+include_directories(src)
+include_directories(../../include)
+
+file(GLOB SRCS src/*.cpp src/xmltest/*.cpp)
+file(GLOB HDRS src/*.h src/xmltest/*.h)
+
+add_library(U2Test SHARED ${HDRS} ${SRCS})
+
+target_link_libraries(U2Test
+        Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml
+        U2Core)
+
diff --git a/src/corelibs/U2Test/U2Test.pri b/src/corelibs/U2Test/U2Test.pri
index cbce11f..e101e50 100644
--- a/src/corelibs/U2Test/U2Test.pri
+++ b/src/corelibs/U2Test/U2Test.pri
@@ -7,7 +7,7 @@ include( ../../ugene_lib_common.pri )
 QT += xml gui
 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 DEFINES+= QT_FATAL_ASSERT BUILDING_U2TEST_DLL
-LIBS += -L../../_release -L../../libs_3rdparty/humimit/ -lU2Core -lhumimit
+LIBS += -L../../_release -lU2Core -lhumimit
 INCLUDEPATH += ../../libs_3rdparty/QSpec/src
 
 if(exclude_list_enabled()|!exists( ../../libs_3rdparty/QSpec/QSpec.pro )) {
diff --git a/src/corelibs/U2Test/U2Test.pro b/src/corelibs/U2Test/U2Test.pro
index 6cecc15..ff7985f 100644
--- a/src/corelibs/U2Test/U2Test.pro
+++ b/src/corelibs/U2Test/U2Test.pro
@@ -31,7 +31,7 @@ SOURCES += src/GTest.cpp \
 TRANSLATIONS += transl/english.ts \
                 transl/russian.ts
 
-FORMS += GUITestingWindow.ui
+FORMS += src/gui_tests/GUITestingWindow.ui
 
 if(exclude_list_enabled()|!exists( ../../libs_3rdparty/QSpec/QSpec.pro )) {
 
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp
index 80894cf..6da2f94 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp
@@ -130,7 +130,8 @@ void GUITestLauncher::firstTestRunCheck(const QString& testName) {
 bool GUITestLauncher::initGUITestBase() {
     UGUITestBase* b = AppContext::getGUITestBase();
     SAFE_POINT(NULL != b, "Test base is NULL", false);
-    QList<HI::GUITest *> list = b->getTests();
+    QString label = qgetenv("UGENE_GUI_TEST_LABEL");
+    QList<HI::GUITest *> list = b->getTests(UGUITestBase::Normal, label);
     if (list.isEmpty()) {
         setError(tr("No tests to run"));
         return false;
@@ -213,15 +214,15 @@ QString GUITestLauncher::getTestOutDir(){
     return d.absolutePath();
 }
 
-QProcessEnvironment GUITestLauncher::getProcessEnvironment(const QString &testName) {
+QProcessEnvironment GUITestLauncher::getProcessEnvironment(QString testName) {
     QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
 
     QDir().mkpath(testOutDir + "/logs");
-    env.insert("UGENE_DEV", "1");
-    env.insert("UGENE_GUI_TEST", "1");
-    env.insert("UGENE_USE_NATIVE_DIALOGS", "0");
-    env.insert("UGENE_PRINT_TO_FILE", testOutDir + "/logs/" + testOutFile(testName));
-    env.insert("UGENE_USER_INI", testOutDir + "/inis/" + testName + "_UGENE.ini");
+    env.insert(ENV_UGENE_DEV, "1");
+    env.insert(ENV_GUI_TEST, "1");
+    env.insert(ENV_USE_NATIVE_DIALOGS, "0");
+    env.insert(U2_PRINT_TO_FILE, testOutDir + "/logs/" + testOutFile(testName));
+    env.insert(U2_USER_INI, testOutDir + "/inis/" + testName.replace(':', '_') + "_UGENE.ini");
 
     return env;
 }
@@ -330,13 +331,13 @@ QString GUITestLauncher::getScreenRecorderString(QString testName){
 #elif defined Q_OS_WIN
     result = QString("ffmpeg -f dshow -i video=\"UScreenCapture\" -r 5 %1").arg(getVideoPath(testName.replace(':', '_')));
 #endif
+    uiLog.trace("going to record video: " + result);
     return result;
 }
 
 QString GUITestLauncher::getVideoPath(const QString &testName){
     QDir().mkpath(QDir::currentPath() + "/videos");
     QString result = QDir::currentPath() + "/videos/" + testName + ".avi";
-    uiLog.trace("going to record video: " + result);
     return result;
 }
 
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h
index 24ec1ab..4cac912 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h
@@ -49,7 +49,7 @@ private:
     QString testOutDir;
 
     static QStringList getTestProcessArguments(const QString &testName);
-    QProcessEnvironment getProcessEnvironment(const QString &testName);
+    QProcessEnvironment getProcessEnvironment(QString testName);
     static QString testOutFile(const QString &testName);
     static QString getTestOutDir();
 
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp
index cc9611c..9719e86 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp
@@ -77,7 +77,6 @@ GUITestService::GUITestService(QObject *) :
     needTeamcityLog(false)
 {
     connect(AppContext::getPluginSupport(), SIGNAL(si_allStartUpPluginsLoaded()), SLOT(sl_allStartUpPluginsLoaded()));
-    setQtFileDialogView();
 }
 
 GUITestService::~GUITestService() {
@@ -131,39 +130,43 @@ void GUITestService::sl_serviceRegistered() {
     }
 }
 
-GUITestService::LaunchOptions GUITestService::getLaunchOptions(CMDLineRegistry* cmdLine) const {
-    CHECK(cmdLine, NONE);
+void GUITestService::setEnvVariablesForGuiTesting() {
+    qputenv(ENV_GUI_TEST, "1");
+    qputenv(ENV_USE_NATIVE_DIALOGS, "0");
+    qputenv(ENV_UGENE_DEV, "1");
+}
 
-    if(cmdLine->hasParameter(CMDLineCoreOptions::CREATE_GUI_TEST)){
-        return CREATE_GUI_TEST;
-    }
+GUITestService::LaunchOptions GUITestService::getLaunchOptions(CMDLineRegistry* cmdLine) {
+    CHECK(cmdLine, NONE);
 
+    LaunchOptions result = NONE;
 
-    if (cmdLine->hasParameter(CMDLineCoreOptions::LAUNCH_GUI_TEST)) {
+    if(cmdLine->hasParameter(CMDLineCoreOptions::CREATE_GUI_TEST)){
+        result = CREATE_GUI_TEST;
+    } else if (cmdLine->hasParameter(CMDLineCoreOptions::LAUNCH_GUI_TEST)) {
         QString paramValue = cmdLine->getParameterValue(CMDLineCoreOptions::LAUNCH_GUI_TEST);
         if (!paramValue.isEmpty()) {
-            return RUN_ONE_TEST;
+            result = RUN_ONE_TEST;
+        } else {
+            result = RUN_ALL_TESTS;
         }
-        return RUN_ALL_TESTS;
-    }
-
-    if (cmdLine->hasParameter(CMDLineCoreOptions::LAUNCH_GUI_TEST_BATCH)) {
-        return RUN_ALL_TESTS_BATCH;
-    }
-
-    if (cmdLine->hasParameter(CMDLineCoreOptions::LAUNCH_GUI_TEST_SUITE)) {
-        return RUN_TEST_SUITE;
-    }
-
-    if (cmdLine->hasParameter(CMDLineCoreOptions::LAUNCH_GUI_TEST_NO_IGNORED)) {
-        return RUN_ALL_TESTS_NO_IGNORED;
+    } else if (cmdLine->hasParameter(CMDLineCoreOptions::LAUNCH_GUI_TEST_BATCH)) {
+        result = RUN_ALL_TESTS_BATCH;
+    } else if (cmdLine->hasParameter(CMDLineCoreOptions::LAUNCH_GUI_TEST_SUITE)) {
+        result = RUN_TEST_SUITE;
+    } else if (cmdLine->hasParameter(CMDLineCoreOptions::LAUNCH_GUI_TEST_NO_IGNORED)) {
+        result = RUN_ALL_TESTS_NO_IGNORED;
+    } else if (cmdLine->hasParameter(CMDLineCoreOptions::LAUNCH_GUI_TEST_CRAZY_USER)) {
+        result = RUN_CRAZY_USER_MODE;
     }
-
-    if (cmdLine->hasParameter(CMDLineCoreOptions::LAUNCH_GUI_TEST_CRAZY_USER)) {
-        return RUN_CRAZY_USER_MODE;
+    if (result !=  NONE) {
+        setEnvVariablesForGuiTesting();
     }
+    return result;
+}
 
-    return NONE;
+bool GUITestService::isGuiTestServiceNeeded() {
+    return getLaunchOptions(AppContext::getCMDLineRegistry()) != NONE;
 }
 
 void GUITestService::registerAllTestsTask() {
@@ -397,21 +400,6 @@ void GUITestService::writeTestResult(const QString& result) {
     printf("%s\n", (QString(GUITESTING_REPORT_PREFIX) + ": " + result).toUtf8().data());
 }
 
-void GUITestService::setQtFileDialogView()
-{
-#ifdef Q_OS_LINUX
-#if (QT_VERSION < 0x050000) //Qt 5
-    if (!qgetenv("UGENE_USE_NATIVE_DIALOGS").isEmpty()) {//this condition does not controls native dialogs
-    //if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
-        qt_filedialog_open_filename_hook = 0;
-        qt_filedialog_open_filenames_hook = 0;
-        qt_filedialog_save_filename_hook = 0;
-        qt_filedialog_existing_directory_hook = 0;
-    }
-#endif
-#endif
-}
-
 void GUITestService::clearSandbox()
 {
     log.trace("GUITestService __ clearSandbox");
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestService.h b/src/corelibs/U2Test/src/gui_tests/GUITestService.h
index fa9f014..a8fac34 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestService.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestService.h
@@ -52,6 +52,10 @@ public:
 
     static GUITestService * getGuiTestService();    // the service should be already created and registered
 
+    static void setEnvVariablesForGuiTesting();
+    static LaunchOptions getLaunchOptions(CMDLineRegistry* cmdLine);
+    static bool isGuiTestServiceNeeded();
+
     static const QString GUITESTING_REPORT_PREFIX;
     static const qint64 TIMER_INTERVAL;
 
@@ -80,8 +84,6 @@ private:
     static void clearSandbox();
     static void removeDir(QString dirName);
 
-    LaunchOptions getLaunchOptions(CMDLineRegistry* cmdLine) const;
-
     void registerAllTestsTask();
     void registerAllTestsTaskNoIgnored();
     void registerTestSuiteTask();
@@ -91,8 +93,6 @@ private:
     Task* createTestSuiteLauncherTask() const;
     static void writeTestResult(const QString &result);
 
-    void setQtFileDialogView();
-
     QAction *runTestsAction;
     Task *testLauncher;
     HI::GUITests testsToRun;
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestThread.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestThread.cpp
index 61c9fd8..c4c758d 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestThread.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestThread.cpp
@@ -58,12 +58,20 @@ void GUITestThread::run() {
 
     clearSandbox();
 
+    QTimer* timer = new QTimer(this);
+    timer->connect(timer, SIGNAL(timeout()), this, SLOT(sl_getMemory()));
+    timer->start(1000);
+
     const QString error = launchTest(tests);
 
     if(needCleanup){
         cleanup();
     }
 
+    timer->stop();
+
+    saveMemoryInfo();
+
     testResult = error.isEmpty() ? GUITestTeamcityLogger::successResult : error;
     writeTestResult();
 
@@ -219,4 +227,91 @@ void GUITestThread::writeTestResult() {
     printf("%s\n", (GUITestService::GUITESTING_REPORT_PREFIX + ": " + testResult).toUtf8().data());
 }
 
+void GUITestThread::sl_getMemory(){
+#ifdef Q_OS_LINUX
+    qint64 appPid = QApplication::applicationPid();
+
+    int memValue = countMemForProcessTree(appPid);
+
+    memoryList << memValue;
+#endif
+}
+
+int GUITestThread::countMemForProcessTree(int pid){
+#ifdef Q_OS_LINUX
+    int result = 0;
+    //getting child processes
+    QProcess pgrep;
+    pgrep.start(QString("pgrep -P %1").arg(pid/*appPid*/));
+    pgrep.waitForFinished();
+    QByteArray pgrepOut = pgrep.readAllStandardOutput();
+    QStringList childPidsStringList = QString(pgrepOut).split("\n");
+    QList<int> childPids;
+    foreach (QString s, childPidsStringList) {
+        bool ok;
+        int childPid = s.toInt(&ok);
+        if(ok){
+            childPids<<childPid;
+        }
+    }
+
+    //getting memory of process by pid
+    QProcess memTracer;
+    memTracer.start("bash", QStringList() << "-c" << QString("top -b -p%1 -n 1 | grep %1").arg(pid));
+    memTracer.waitForFinished();
+    QByteArray memOutput = memTracer.readAllStandardOutput();
+    QString s = QString(memOutput);
+    uiLog.trace("top outpup: |" + s + "|");
+    QStringList splitted = s.split(' ');
+    splitted.removeAll("");
+
+    int memValue;
+    if(splitted.size()>=5){
+        QString memString = splitted.at(5);
+        if(memString.at(memString.length()-1) == 'g'){
+            //section for gigabytes
+            memString.chop(1);
+            bool ok;
+            memString.toDouble(&ok);
+            if(ok){
+                memValue = memString.toDouble()*1000*1000;
+            }else{
+                coreLog.trace("String " + memString + " could not be converted to double");
+            }
+        }else{
+            bool ok;
+            memString.toInt(&ok);
+            if(ok){
+                memValue = memString.toInt();
+            }else{
+                coreLog.trace("String " + memString + "could not be converted to int");
+            }
+        }
+    }else{
+        memValue = 0;
+    }
+    result+=memValue;
+
+    foreach (int childPid, childPids) {
+        result+=countMemForProcessTree(childPid);
+    }
+    return result;
+#else
+    return -1;
+#endif
+}
+
+void GUITestThread::saveMemoryInfo(){
+#ifdef Q_OS_LINUX
+    int max = *std::max_element(memoryList.begin(), memoryList.end());
+    QString filename="memFolder/memory.txt";
+    QDir().mkpath("memFolder");
+    QFile file( filename );
+    if ( file.open(QIODevice::ReadWrite | QIODevice::Append) ){
+        file.write(QString("%1_%2 %3\n").arg(test->getSuite()).arg(test->getName()).arg(max).toUtf8());
+        file.close();
+    }
+#endif
+}
+
 }   // namespace U2
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestThread.h b/src/corelibs/U2Test/src/gui_tests/GUITestThread.h
index bbe550e..fae6c20 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestThread.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestThread.h
@@ -43,6 +43,7 @@ public:
 
 private slots:
     void sl_testTimeOut();
+    void sl_getMemory();
 
 private:
     QString launchTest(const GUITests &tests);
@@ -55,11 +56,15 @@ private:
     void saveScreenshot();
     static void cleanup();
     void writeTestResult();
+    void saveMemoryInfo();
+    int countMemForProcessTree(int pid);
 
     HI::GUITest *test;
     Logger &log;
     bool needCleanup;
     QString testResult;
+
+    QList<int> memoryList;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestWindow.h b/src/corelibs/U2Test/src/gui_tests/GUITestWindow.h
index f797a88..16c9e10 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestWindow.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestWindow.h
@@ -24,7 +24,7 @@
 
 #include <U2Gui/MainWindow.h>
 #include <U2Core/AppContext.h>
-#include <ui/ui_GUITestingWindow.h>
+#include <ui_GUITestingWindow.h>
 
 
 #if (QT_VERSION < 0x050000) //Qt 5
diff --git a/src/corelibs/U2Test/GUITestingWindow.ui b/src/corelibs/U2Test/src/gui_tests/GUITestingWindow.ui
similarity index 100%
rename from src/corelibs/U2Test/GUITestingWindow.ui
rename to src/corelibs/U2Test/src/gui_tests/GUITestingWindow.ui
diff --git a/src/corelibs/U2Test/src/gui_tests/UGUITestBase.cpp b/src/corelibs/U2Test/src/gui_tests/UGUITestBase.cpp
index 79baa88..653fa72 100644
--- a/src/corelibs/U2Test/src/gui_tests/UGUITestBase.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/UGUITestBase.cpp
@@ -89,10 +89,16 @@ GUITestMap& UGUITestBase::getMap(TestType testType) {
     }
 }
 
-GUITests UGUITestBase::getTests(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 48d394f..a9b75ef 100644
--- a/src/corelibs/U2Test/src/gui_tests/UGUITestBase.h
+++ b/src/corelibs/U2Test/src/gui_tests/UGUITestBase.h
@@ -28,7 +28,7 @@ public:
     HI::GUITest *getTest(const QString &suite, const QString &name, TestType testType = Normal);
     HI::GUITest *takeTest(const QString &suite, const QString &name, TestType testType = Normal); // removes item from UGUITestBase
 
-    GUITests getTests(TestType testType = Normal);
+    GUITests getTests(TestType testType = Normal, QString label = "");
     GUITests takeTests(TestType testType = Normal); // removes items from UGUITestBase
 
     GUITests getTestsWithoutRemoving(TestType testType = Normal);
diff --git a/src/corelibs/U2Test/transl/english.ts b/src/corelibs/U2Test/transl/english.ts
index 63ec3db..73a4764 100644
--- a/src/corelibs/U2Test/transl/english.ts
+++ b/src/corelibs/U2Test/transl/english.ts
@@ -4,47 +4,47 @@
 <context>
     <name>GUITestWindow</name>
     <message>
-        <location filename="../GUITestingWindow.ui" line="14"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="14"/>
         <source>GUI testing window</source>
         <translation>GUI testing window</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="22"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="22"/>
         <source>get parent info</source>
         <translation>get parent info</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="29"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="29"/>
         <source>switch off code generation</source>
         <translation>switch off code generation</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="36"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="36"/>
         <source>generate filler</source>
         <translation>generate filler</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="87"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="87"/>
         <source>Class name</source>
         <translation>Class name</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="92"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="92"/>
         <source>Object name</source>
         <translation>Object name</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="97"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="97"/>
         <source>Action name</source>
         <translation>Action name</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="102"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="102"/>
         <source>Action text</source>
         <translation>Action text</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="107"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="107"/>
         <source>value</source>
         <translation>value</translation>
     </message>
@@ -99,37 +99,37 @@
 <context>
     <name>U2::GUITestLauncher</name>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="135"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="136"/>
         <source>No tests to run</source>
         <translation>No tests to run</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="145"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="146"/>
         <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="245"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="246"/>
         <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="271"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="272"/>
         <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="273"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="274"/>
         <source>Test fails because of timeout.</source>
         <translation>Test fails because of timeout.</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="305"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="306"/>
         <source>Test name</source>
         <translation>Test name</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="305"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="306"/>
         <source>Status</source>
         <translation>Status</translation>
     </message>
@@ -147,7 +147,7 @@
         <translation>Service to support UGENE GUI testing</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="255"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="259"/>
         <source>Can't connect external tool manager signal</source>
         <translation>Can't connect external tool manager signal</translation>
     </message>
diff --git a/src/corelibs/U2Test/transl/russian.ts b/src/corelibs/U2Test/transl/russian.ts
index 9b62b52..2246e49 100644
--- a/src/corelibs/U2Test/transl/russian.ts
+++ b/src/corelibs/U2Test/transl/russian.ts
@@ -4,47 +4,47 @@
 <context>
     <name>GUITestWindow</name>
     <message>
-        <location filename="../GUITestingWindow.ui" line="14"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="14"/>
         <source>GUI testing window</source>
         <translation>GUI testing window</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="22"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="22"/>
         <source>get parent info</source>
         <translation>get parent info</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="29"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="29"/>
         <source>switch off code generation</source>
         <translation>switch off code generation</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="36"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="36"/>
         <source>generate filler</source>
         <translation>generate filler</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="87"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="87"/>
         <source>Class name</source>
         <translation>Class name</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="92"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="92"/>
         <source>Object name</source>
         <translation>Object name</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="97"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="97"/>
         <source>Action name</source>
         <translation>Action name</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="102"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="102"/>
         <source>Action text</source>
         <translation>Action text</translation>
     </message>
     <message>
-        <location filename="../GUITestingWindow.ui" line="107"/>
+        <location filename="../src/gui_tests/GUITestingWindow.ui" line="107"/>
         <source>value</source>
         <translation>value</translation>
     </message>
@@ -99,37 +99,37 @@
 <context>
     <name>U2::GUITestLauncher</name>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="135"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="136"/>
         <source>No tests to run</source>
         <translation>No tests to run</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="145"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="146"/>
         <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="245"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="246"/>
         <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="271"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="272"/>
         <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="273"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="274"/>
         <source>Test fails because of timeout.</source>
         <translation>Test fails because of timeout.</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="305"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="306"/>
         <source>Test name</source>
         <translation>Test name</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="305"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="306"/>
         <source>Status</source>
         <translation>Status</translation>
     </message>
@@ -147,7 +147,7 @@
         <translation>Service to support UGENE GUI testing</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="255"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="259"/>
         <source>Can't connect external tool manager signal</source>
         <translation>Can't connect external tool manager signal</translation>
     </message>
diff --git a/src/corelibs/U2View/CMakeLists.txt b/src/corelibs/U2View/CMakeLists.txt
new file mode 100644
index 0000000..afa2b0a
--- /dev/null
+++ b/src/corelibs/U2View/CMakeLists.txt
@@ -0,0 +1,24 @@
+cmake_minimum_required(VERSION 3.4)
+project(U2View)
+
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+
+find_package(Qt5 REQUIRED Core Gui Widgets Xml Svg WebKit WebKitWidgets PrintSupport)
+
+add_definitions(-DBUILDING_U2VIEW_DLL)
+
+include_directories(src)
+include_directories(../../include)
+
+file(GLOB_RECURSE SRCS src/*.cpp)
+file(GLOB_RECURSE HDRS src/*.h)
+
+add_library(U2View SHARED ${HDRS} ${SRCS})
+
+target_link_libraries(U2View
+        Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml Qt5::Svg Qt5::WebKit Qt5::WebKitWidgets Qt5::PrintSupport
+        U2Core U2Algorithm U2Formats U2Remote U2Lang U2Gui)
+
diff --git a/src/corelibs/U2View/U2View.pri b/src/corelibs/U2View/U2View.pri
index 8436b61..5aae4e6 100644
--- a/src/corelibs/U2View/U2View.pri
+++ b/src/corelibs/U2View/U2View.pri
@@ -8,7 +8,7 @@ QT += xml svg webkit
 greaterThan(QT_MAJOR_VERSION, 4): QT -= webkit
 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets webkitwidgets printsupport
 DEFINES+= QT_FATAL_ASSERT BUILDING_U2VIEW_DLL
-LIBS += -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Remote -lU2Lang -lU2Gui
+LIBS += -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Lang -lU2Gui
 
 unix: QMAKE_CXXFLAGS += -Wno-char-subscripts
 
@@ -16,8 +16,8 @@ unix: QMAKE_CXXFLAGS += -Wno-char-subscripts
 
     CONFIG(debug, debug|release) {
         DESTDIR=../../_debug
-        LIBS -= -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Remote -lU2Lang -lU2Gui
-        LIBS += -L../../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Remoted -lU2Langd -lU2Guid
+        LIBS -= -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Lang -lU2Gui
+        LIBS += -L../../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Langd -lU2Guid
     }
 
     CONFIG(release, debug|release) {
diff --git a/src/corelibs/U2View/U2View.pro b/src/corelibs/U2View/U2View.pro
index d37803a..b616eea 100644
--- a/src/corelibs/U2View/U2View.pro
+++ b/src/corelibs/U2View/U2View.pro
@@ -35,6 +35,8 @@ HEADERS += src/LicenseDialog.h \
            src/ov_assembly/ExportCoverageDialog.h \
            src/ov_assembly/ExportCoverageTask.h \
            src/ov_assembly/ExportReadsDialog.h \
+           src/ov_assembly/ExtractAssemblyRegionDialog.h \
+           src/ov_assembly/ExtractAssemblyRegionTask.h \
            src/ov_assembly/ZoomableAssemblyOverview.h \
            src/ov_msa/AlignmentLogo.h \
            src/ov_msa/Clipboard/SubalignmentToClipboardTask.h \
@@ -122,7 +124,6 @@ HEADERS += src/LicenseDialog.h \
            src/ov_sequence/AutoAnnotationUtils.h \
            src/ov_sequence/CreateRulerDialogController.h \
            src/ov_sequence/DetView.h \
-           src/ov_sequence/EditAnnotationDialogController.h \
            src/ov_sequence/GSequenceGraphView.h \
            src/ov_sequence/GSequenceGraphViewWithFactory.h \
            src/ov_sequence/GSequenceLineView.h \
@@ -185,44 +186,44 @@ 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/ui/ExportConsensusDialog.ui \
-         src/ov_assembly/ui/ExportCoverageDialog.ui \
-         src/ov_assembly/ui/ExportReadsDialog.ui \
-         src/ov_msa/ui/CreateSubalignmentDialog.ui \
-         src/ov_msa/ui/ColorSchemaDialog.ui \
-         src/ov_msa/ui/ColorSchemaSettingsWidget.ui \
-         src/ov_msa/ui/CreateMSAScheme.ui \
-         src/ov_msa/ui/DeleteGapsDialog.ui \
-         src/ov_msa/ui/ExportConsensusWidget.ui \
-         src/ov_msa/ui/ExportHighlightedDialog.ui \
-         src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui \
-         src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui \
-         src/ov_msa/ui/MSAExportSettings.ui \
-         src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui \
-         src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui \
-         src/ov_msa/ui/SelectSubalignmentDialog.ui \
-         src/ov_msa/ui/SequenceSelectorWidget.ui \
-         src/ov_msa/ui/TreeOptionsWidget.ui \
-         src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui \
-         src/ov_sequence/find_pattern/ui/FindPatternForm.ui \
+FORMS += src/ov_assembly/ExportConsensusDialog.ui \
+         src/ov_assembly/ExportCoverageDialog.ui \
+         src/ov_assembly/ExportReadsDialog.ui \
+         src/ov_assembly/ExtractAssemblyRegionDialog.ui \
+         src/ov_msa/CreateSubalignmentDialog.ui \
+         src/ov_msa/ColorSchemaDialog.ui \
+         src/ov_msa/ColorSchemaSettingsWidget.ui \
+         src/ov_msa/CreateMSAScheme.ui \
+         src/ov_msa/DeleteGapsDialog.ui \
+         src/ov_msa/ExportConsensus/ExportConsensusWidget.ui \
+         src/ov_msa/ExportHighlightedDialog.ui \
+         src/ov_msa/General/GeneralTabOptionsPanelWidget.ui \
+         src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui \
+         src/ov_msa/Export/MSAExportSettings.ui \
+         src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui \
+         src/ov_msa/SaveSelectedSequenceFromMSADialog.ui \
+         src/ov_msa/SelectSubalignmentDialog.ui \
+         src/ov_msa/SequenceSelectorWidget.ui \
+         src/ov_msa/TreeOptions/TreeOptionsWidget.ui \
+         src/ov_sequence/annot_highlight/AnnotHighlightSettings.ui \
+         src/ov_sequence/find_pattern/FindPatternForm.ui \
          src/ov_sequence/image_export/SequenceImageExportSettingsWidget.ui \
-         src/ov_sequence/ui/CreateRulerDialog.ui \
-         src/ov_sequence/ui/EditAnnotationDialog.ui \
-         src/ov_sequence/ui/SaveGraphCutoffsDialog.ui \
-         src/ov_sequence/ui/SearchQualifierDialog.ui \
-         src/phyltree/ui/BranchSettingsDialog.ui \
-         src/phyltree/ui/CreatePhyTreeDialog.ui \
-         src/phyltree/ui/PhyTreeDisplayOptionsWidget.ui \
-         src/phyltree/ui/TextSettingsDialog.ui \
-         src/phyltree/ui/TreeSettingsDialog.ui \
-         src/ui/LicenseDialog.ui \
-         src/util_dna_assembly/ui/AssemblyToRefDialog.ui \
-         src/util_dna_assembly/ui/AssemblyToSamDialog.ui \
-         src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui \
-         src/util_dna_assembly/ui/GenomeAssemblyDialog.ui \
-         src/util_sec_struct_predict/ui/SecStructDialog.ui \
-         src/util_smith_waterman/ui/SmithWatermanDialogBase.ui \
-         src/util_smith_waterman/ui/SubstMatrixDialogBase.ui
+         src/ov_sequence/CreateRulerDialog.ui \
+         src/ov_sequence/SaveGraphCutoffsDialog.ui \
+         src/ov_sequence/SearchQualifierDialog.ui \
+         src/phyltree/BranchSettingsDialog.ui \
+         src/phyltree/CreatePhyTreeDialog.ui \
+         src/phyltree/PhyTreeDisplayOptionsWidget.ui \
+         src/phyltree/TextSettingsDialog.ui \
+         src/phyltree/TreeSettingsDialog.ui \
+         src/LicenseDialog.ui \
+         src/util_dna_assembly/AssemblyToRefDialog.ui \
+         src/util_dna_assembly/AssemblyToSamDialog.ui \
+         src/util_dna_assembly/BuildIndexFromRefDialog.ui \
+         src/util_dna_assembly/GenomeAssemblyDialog.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 \
@@ -257,6 +258,8 @@ SOURCES += src/LicenseDialog.cpp \
            src/ov_assembly/ExportCoverageDialog.cpp \
            src/ov_assembly/ExportCoverageTask.cpp \
            src/ov_assembly/ExportReadsDialog.cpp \
+           src/ov_assembly/ExtractAssemblyRegionDialog.cpp \
+           src/ov_assembly/ExtractAssemblyRegionTask.cpp \
            src/ov_assembly/ZoomableAssemblyOverview.cpp \
            src/ov_msa/AlignmentLogo.cpp \
            src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp \
@@ -329,7 +332,6 @@ SOURCES += src/LicenseDialog.cpp \
            src/ov_sequence/ADVSequenceObjectContext.cpp \
            src/ov_sequence/ADVSequenceWidget.cpp \
            src/ov_sequence/ADVSingleSequenceWidget.cpp \
-           src/ov_sequence/ADVSplitWidget.cpp \
            src/ov_sequence/ADVSyncViewManager.cpp \
            src/ov_sequence/ADVUtils.cpp \
            src/ov_sequence/AnnotatedDNAView.cpp \
@@ -340,7 +342,6 @@ SOURCES += src/LicenseDialog.cpp \
            src/ov_sequence/AutoAnnotationUtils.cpp \
            src/ov_sequence/CreateRulerDialogController.cpp \
            src/ov_sequence/DetView.cpp \
-           src/ov_sequence/EditAnnotationDialogController.cpp \
            src/ov_sequence/GraphLabelModel.cpp \
            src/ov_sequence/GraphLabelsSelectDialog.cpp \
            src/ov_sequence/GraphMenu.cpp \
diff --git a/src/corelibs/U2View/src/LicenseDialog.cpp b/src/corelibs/U2View/src/LicenseDialog.cpp
index 24db843..fac9c5d 100644
--- a/src/corelibs/U2View/src/LicenseDialog.cpp
+++ b/src/corelibs/U2View/src/LicenseDialog.cpp
@@ -31,7 +31,7 @@
 namespace U2 {
 
 LicenseDialog::LicenseDialog(Plugin *_plugin, QWidget *parent) :
-    QDialog(parent), ui(new Ui::LicenseDialog), plugin(_plugin)
+    QDialog(parent), ui(new Ui_LicenseDialog), plugin(_plugin)
 {
     ui->setupUi(this);
     //Opening license file
diff --git a/src/corelibs/U2View/src/LicenseDialog.h b/src/corelibs/U2View/src/LicenseDialog.h
index 2a17c2b..bff9324 100644
--- a/src/corelibs/U2View/src/LicenseDialog.h
+++ b/src/corelibs/U2View/src/LicenseDialog.h
@@ -31,11 +31,11 @@
 #include <QtWidgets/QDialog>
 #endif
 
-#include <ui/ui_LicenseDialog.h>
+#include <ui_LicenseDialog.h>
 
 namespace U2 {
 
-class LicenseDialog : public QDialog, private Ui::LicenseDialog
+class LicenseDialog : public QDialog, private Ui_LicenseDialog
 {
     Q_OBJECT
 
@@ -46,7 +46,7 @@ public slots:
     void sl_accept();
 
 private:
-    Ui::LicenseDialog   *ui;
+    Ui_LicenseDialog   *ui;
     Plugin              *plugin;
 
 };
diff --git a/src/corelibs/U2View/src/ui/LicenseDialog.ui b/src/corelibs/U2View/src/LicenseDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ui/LicenseDialog.ui
rename to src/corelibs/U2View/src/LicenseDialog.ui
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp
index b9924fd..018e4d4 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp
@@ -59,6 +59,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/ExportImageDialog.h>
 #include <U2Gui/GUIUtils.h>
+#include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/Notification.h>
 #include <U2Gui/OPWidgetFactoryRegistry.h>
 #include <U2Gui/OptionsPanel.h>
@@ -82,6 +83,7 @@
 #include "AssemblyRuler.h"
 #include "ExportCoverageDialog.h"
 #include "ExportCoverageTask.h"
+#include "ExtractAssemblyRegionDialog.h"
 #include "ZoomableAssemblyOverview.h"
 
 namespace U2 {
@@ -93,11 +95,11 @@ const double AssemblyBrowser::ZOOM_MULT = 1.25;
 const double AssemblyBrowser::INITIAL_ZOOM_FACTOR= 1.;
 
 AssemblyBrowser::AssemblyBrowser(QString viewName, AssemblyObject * o) :
-GObjectView(AssemblyBrowserFactory::ID, viewName), ui(0),
-gobject(o), model(0), zoomFactor(INITIAL_ZOOM_FACTOR), xOffsetInAssembly(0), yOffsetInAssembly(0), coverageReady(false),
+GObjectView(AssemblyBrowserFactory::ID, viewName), ui(NULL),
+gobject(o), model(NULL), zoomFactor(INITIAL_ZOOM_FACTOR), xOffsetInAssembly(0), yOffsetInAssembly(0), coverageReady(false),
 cellRendererRegistry(new AssemblyCellRendererFactoryRegistry(this)),
-zoomInAction(0), zoomOutAction(0), posSelectorAction(0), posSelector(0), showCoordsOnRulerAction(0), saveScreenShotAction(0),
-exportToSamAction(0), setReferenceAction(0), loadReferenceTask(0)
+zoomInAction(NULL), zoomOutAction(NULL), posSelectorAction(NULL), posSelector(NULL), showCoordsOnRulerAction(NULL), saveScreenShotAction(NULL),
+exportToSamAction(NULL), setReferenceAction(NULL), extractAssemblyRegionAction(NULL), loadReferenceTask(NULL)
 {
     GCOUNTER( cvar, tvar, "AssemblyBrowser" );
     initFont();
@@ -338,6 +340,7 @@ void AssemblyBrowser::buildStaticToolbar(QToolBar* tb) {
         tb->addAction(readHintEnabledAction);
         tb->addSeparator();
         tb->addAction(setReferenceAction);
+        tb->addAction(extractAssemblyRegionAction);
         tb->addAction(saveScreenShotAction);
     }
     GObjectView::buildStaticToolbar(tb);
@@ -355,6 +358,7 @@ void AssemblyBrowser::buildStaticMenu(QMenu* m) {
         m->addAction(zoomOutAction);
         m->addAction(saveScreenShotAction);
         m->addAction(exportToSamAction);
+        m->addAction(extractAssemblyRegionAction);
         m->addAction(setReferenceAction);
     }
     GObjectView::buildStaticMenu(m);
@@ -676,6 +680,10 @@ void AssemblyBrowser::setupActions() {
     setReferenceAction = new QAction(QIcon(":core/images/set_reference.png"), tr("Set reference"), this);
     setReferenceAction->setObjectName("setReferenceAction");
     connect(setReferenceAction, SIGNAL(triggered()), SLOT(sl_setReference()));
+
+    extractAssemblyRegionAction = new QAction(QIcon(":core/images/extract_assembly_region.png"), tr("Export assembly region"), this);
+    extractAssemblyRegionAction->setObjectName("ExtractAssemblyRegion");
+    connect(extractAssemblyRegionAction, SIGNAL(triggered()), SLOT(sl_extractAssemblyRegion()));
 }
 
 void AssemblyBrowser::sl_saveScreenshot() {
@@ -1069,6 +1077,23 @@ void AssemblyBrowser::sl_setReference() {
     }
 }
 
+void AssemblyBrowser::sl_extractAssemblyRegion() {
+    GUrl url(U2DbiUtils::ref2Url(model->getDbiConnection().dbi->getDbiRef()));
+    U2Region visibleRegion = getVisibleBasesRegion();
+    QString extractedFragmentFilename = url.dirPath() + "/" + url.baseFileName() + "_" + QString::number(visibleRegion.startPos + 1) 
+        + "_" + QString::number(visibleRegion.endPos()) + "." + url.completeFileSuffix();
+    U2OpStatusImpl os;
+    ExtractAssemblyRegionTaskSettings ts(extractedFragmentFilename, model->getModelLength(os), gobject);
+    ts.regionToExtract = visibleRegion;
+    QObjectScopedPointer<ExtractAssemblyRegionDialog> dlg = new ExtractAssemblyRegionDialog(ui, &ts);
+    int result = dlg->exec();
+    CHECK(!dlg.isNull(), );
+    if (result != QDialog::Accepted) {
+        return;
+    }
+    AppContext::getTaskScheduler()->registerTopLevelTask(new ExtractAssemblyRegionAndOpenViewTask(ts));
+}
+
 void AssemblyBrowser::sl_onReferenceLoaded() {
     Task *task = loadReferenceTask;
     CHECK(NULL != task, );
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h
index e1fee76..5ce2bce 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h
@@ -137,6 +137,7 @@ public slots:
     void sl_zoomOut(const QPoint & pos = QPoint());
     void sl_zoomToReads();
     void sl_coveredRegionClicked(const QString link);
+	void sl_extractAssemblyRegion();
 
 signals:
     void si_offsetsChanged();
@@ -219,6 +220,7 @@ private:
     QAction * saveScreenShotAction;
     QAction * exportToSamAction;
     QAction * setReferenceAction;
+    QAction * extractAssemblyRegionAction;
 
     Task * loadReferenceTask;
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.cpp
index cf0b30d..e8c606b 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.cpp
@@ -118,7 +118,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 = "17467694";
+const QString AssemblyInfoWidgetFactory::GROUP_DOC_PAGE = "17470627";
 
 
 AssemblyInfoWidgetFactory::AssemblyInfoWidgetFactory()
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.cpp
index 6a5ce0e..2af3267 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.cpp
@@ -132,7 +132,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 = "17467692";
+const QString AssemblyNavigationWidgetFactory::GROUP_DOC_PAGE = "17470625";
 
 AssemblyNavigationWidgetFactory::AssemblyNavigationWidgetFactory() {
     objectViewOfWidget = ObjViewType_AssemblyBrowser;
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.cpp
index 354b0f6..a0f1e81 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.cpp
@@ -112,18 +112,23 @@ void AssemblyReadsArea::createMenu() {
     QMenu * exportMenu = readMenu->addMenu(tr("Export"));
     exportMenu->menuAction()->setObjectName("Export");
 
+	QAction *exportCoverage = exportMenu->addAction(tr("Coverage"));
+	exportCoverage->setObjectName("Export coverage");
+	connect(exportCoverage, SIGNAL(triggered()), browser, SLOT(sl_exportCoverage()));
+
+	QAction * exportConsensus = exportMenu->addAction("Consensus");
+	connect(exportConsensus, SIGNAL(triggered()), ui->getConsensusArea(), SLOT(sl_exportConsensus()));
+
+	exportMenu->addSeparator();
+
     exportReadAction = exportMenu->addAction("Current read");
     connect(exportReadAction, SIGNAL(triggered()), SLOT(sl_onExportRead()));
 
-    QAction * exportVisibleReads = exportMenu->addAction("Visible reads");
+    QAction * exportVisibleReads = exportMenu->addAction("Visible reads as sequences");
     connect(exportVisibleReads, SIGNAL(triggered()), SLOT(sl_onExportReadsOnScreen()));
 
-    QAction * exportConsensus = exportMenu->addAction("Consensus");
-    connect(exportConsensus, SIGNAL(triggered()), ui->getConsensusArea(), SLOT(sl_exportConsensus()));
-
-    QAction *exportCoverage = exportMenu->addAction(tr("Coverage"));
-    exportCoverage->setObjectName("Export coverage");
-    connect(exportCoverage, SIGNAL(triggered()), browser, SLOT(sl_exportCoverage()));
+	QAction * exportAssemblyRegion = exportMenu->addAction("Assembly region");
+	connect(exportAssemblyRegion, SIGNAL(triggered()), browser, SLOT(sl_extractAssemblyRegion()));
 
     readMenu->addSeparator();
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.cpp
index c82dbf0..4d7fe8e 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.cpp
@@ -231,7 +231,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 = "17467693";
+const QString AssemblySettingsWidgetFactory::GROUP_DOC_PAGE = "17470626";
 
 
 AssemblySettingsWidgetFactory::AssemblySettingsWidgetFactory()
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp
index fbe599f..49d0f75 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp
@@ -19,7 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include "ExportConsensusDialog.h"
+#include <QPushButton>
+#include <QMessageBox>
 
 #include <U2Algorithm/AssemblyConsensusAlgorithmRegistry.h>
 
@@ -27,41 +28,28 @@
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <U2Gui/SaveDocumentGroupController.h>
-#include <U2Gui/RegionSelector.h>
 #include <U2Gui/HelpButton.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <U2Gui/RegionSelector.h>
+#include <U2Gui/SaveDocumentController.h>
+
+#include "ExportConsensusDialog.h"
 
 namespace U2 {
 
 ExportConsensusDialog::ExportConsensusDialog(QWidget *p, const ExportConsensusTaskSettings &settings_, const U2Region & visibleRegion)
-    : QDialog(p), settings(settings_)
+    : QDialog(p),
+      settings(settings_),
+      saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467687");
+    new HelpButton(this, buttonBox, "17470619");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     //hide for this dialog
     variationModeComboBox->hide();
     variationModeLabel->hide();
 
-    SaveDocumentGroupControllerConfig conf;
-    conf.dfc.supportedObjectTypes += GObjectTypes::SEQUENCE;
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.dfc.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
-    conf.fileDialogButton = filepathToolButton;
-    conf.fileNameEdit = filepathLineEdit;
-    conf.formatCombo = documentFormatComboBox;
-    conf.parentWidget = this;
-    conf.saveTitle = tr("Export consensus");
-    conf.defaultFileName = settings.fileName;
-    saveController = new SaveDocumentGroupController(conf, this);
+    initSaveController();
 
     U2OpStatus2Log os;
     QList<RegionPreset> presets = QList<RegionPreset>() << RegionPreset(tr("Visible"), visibleRegion);
@@ -70,8 +58,6 @@ ExportConsensusDialog::ExportConsensusDialog(QWidget *p, const ExportConsensusTa
     int insertPos = verticalLayout->count() - 3;
     verticalLayout->insertWidget(insertPos, regionSelector);
 
-    filepathLineEdit->setText(settings.fileName);
-    saveController->setSelectedFormatId(settings.formatId);
     sequenceNameLineEdit->setText(settings.seqObjName);
     addToProjectCheckBox->setChecked(settings.addToProject);
     regionSelector->setCustomRegion(settings.region);
@@ -87,7 +73,6 @@ ExportConsensusDialog::ExportConsensusDialog(QWidget *p, const ExportConsensusTa
     connect(okPushButton, SIGNAL(clicked()), SLOT(accept()));
     connect(cancelPushButton, SIGNAL(clicked()), SLOT(reject()));
     setMaximumHeight(layout()->minimumSize().height());
-
 }
 
 void ExportConsensusDialog::accept() {
@@ -127,4 +112,22 @@ void ExportConsensusDialog::accept() {
     QDialog::accept();
 }
 
+void ExportConsensusDialog::initSaveController() {
+    SaveDocumentControllerConfig conf;
+    conf.fileDialogButton = filepathToolButton;
+    conf.fileNameEdit = filepathLineEdit;
+    conf.formatCombo = documentFormatComboBox;
+    conf.parentWidget = this;
+    conf.saveTitle = tr("Export consensus");
+    conf.defaultFileName = settings.fileName;
+    conf.defaultFormatId = settings.formatId;
+
+    DocumentFormatConstraints dfc;
+    dfc.supportedObjectTypes += GObjectTypes::SEQUENCE;
+    dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+    dfc.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
+
+    saveController = new SaveDocumentController(conf, dfc, this);
+}
+
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.h b/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.h
index c0a6132..e606d42 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.h
@@ -23,7 +23,7 @@
 #define _U2_EXPORT_CONSENSUS_DIALOG_H__
 
 #include "ExportConsensusTask.h"
-#include <ui/ui_ExportConsensusDialog.h>
+#include <ui_ExportConsensusDialog.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QDialog>
@@ -33,7 +33,7 @@
 
 namespace U2 {
 
-class SaveDocumentGroupController;
+class SaveDocumentController;
 class RegionSelector;
 
 class ExportConsensusDialog : public QDialog, Ui_ExportConsensusDialog {
@@ -46,9 +46,11 @@ public:
     const ExportConsensusTaskSettings & getSettings() const { return settings; }
 
 private:
+    void initSaveController();
+
     ExportConsensusTaskSettings settings;
-    SaveDocumentGroupController * saveController;
-    RegionSelector * regionSelector;
+    SaveDocumentController*     saveController;
+    RegionSelector*             regionSelector;
 };
 
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_assembly/ui/ExportConsensusDialog.ui b/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_assembly/ui/ExportConsensusDialog.ui
rename to src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.ui
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp
index 3d9fe31..45d0173 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp
@@ -19,24 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMessageBox>
+#include <QPushButton>
+
+#include <U2Algorithm/AssemblyConsensusAlgorithmRegistry.h>
 
 #include <U2Core/DocumentModel.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <U2Algorithm/AssemblyConsensusAlgorithmRegistry.h>
-
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/RegionSelector.h>
-#include <U2Gui/SaveDocumentGroupController.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "ExportConsensusVariationsDialog.h"
 
@@ -47,24 +41,14 @@ ExportConsensusVariationsDialog::ExportConsensusVariationsDialog(QWidget *p, con
 {
     setupUi(this);
     setWindowTitle(tr("Export Consensus Variations"));
-    new HelpButton(this, buttonBox, "17467689");
+    new HelpButton(this, buttonBox, "17470621");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     //hide for this dialog
     sequenceNameLabel->hide();
     sequenceNameLineEdit->hide();
 
-    SaveDocumentGroupControllerConfig conf;
-    conf.dfc.supportedObjectTypes += GObjectTypes::VARIANT_TRACK;
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.dfc.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
-    conf.fileDialogButton = filepathToolButton;
-    conf.fileNameEdit = filepathLineEdit;
-    conf.formatCombo = documentFormatComboBox;
-    conf.parentWidget = this;
-    conf.saveTitle = tr("Export Consensus Variations");
-    conf.defaultFileName = settings.fileName;
-    saveController = new SaveDocumentGroupController(conf, this);
+    initSaveController();
 
     U2OpStatus2Log os;
     QList<RegionPreset> presets = QList<RegionPreset>() << RegionPreset(tr("Visible"), visibleRegion);
@@ -74,7 +58,6 @@ ExportConsensusVariationsDialog::ExportConsensusVariationsDialog(QWidget *p, con
     verticalLayout->insertWidget(insertPos, regionSelector);
 
     filepathLineEdit->setText(settings.fileName);
-    saveController->setSelectedFormatId(settings.formatId);
     sequenceNameLineEdit->setText(settings.seqObjName);
     addToProjectCheckBox->setChecked(settings.addToProject);
     regionSelector->setCustomRegion(settings.region);
@@ -140,4 +123,26 @@ void ExportConsensusVariationsDialog::accept() {
     QDialog::accept();
 }
 
+const ExportConsensusVariationsTaskSettings &ExportConsensusVariationsDialog::getSettings() const {
+    return settings;
+}
+
+void ExportConsensusVariationsDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = settings.fileName;
+    config.defaultFormatId = settings.formatId;
+    config.fileDialogButton = filepathToolButton;
+    config.fileNameEdit = filepathLineEdit;
+    config.formatCombo = documentFormatComboBox;
+    config.parentWidget = this;
+    config.saveTitle = tr("Export Consensus Variations");
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::VARIANT_TRACK;
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+    formatConstraints.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
+
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.h b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.h
index 1671ea1..2119adc 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.h
@@ -19,37 +19,36 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_EXPORT_CONSENSUS_VARIATIONS_DIALOG_H__
-#define _U2_EXPORT_CONSENSUS_VARIATIONS_DIALOG_H__
+#ifndef _U2_EXPORT_CONSENSUS_VARIATIONS_DIALOG_H_
+#define _U2_EXPORT_CONSENSUS_VARIATIONS_DIALOG_H_
+
+#include <QDialog>
 
 #include "ExportConsensusVariationsTask.h"
-#include <ui/ui_ExportConsensusDialog.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <ui_ExportConsensusDialog.h>
 
 namespace U2 {
 
-class SaveDocumentGroupController;
 class RegionSelector;
+class SaveDocumentController;
 
-class ExportConsensusVariationsDialog : public QDialog, Ui_ExportConsensusDialog {
+class ExportConsensusVariationsDialog : public QDialog, private Ui_ExportConsensusDialog {
     Q_OBJECT
 public:
     ExportConsensusVariationsDialog(QWidget * p, const ExportConsensusVariationsTaskSettings & settings, const U2Region & visibleRegion);
 
     virtual void accept();
 
-    const ExportConsensusVariationsTaskSettings & getSettings() const { return settings; }
+    const ExportConsensusVariationsTaskSettings & getSettings() const;
 
 private:
+    void initSaveController();
+
     ExportConsensusVariationsTaskSettings settings;
-    SaveDocumentGroupController * saveController;
+    SaveDocumentController * saveController;
     RegionSelector * regionSelector;
 };
 
 } // namespace
 
-#endif // _U2_EXPORT_CONSENSUS_VARIATIONS_DIALOG_H__
+#endif // _U2_EXPORT_CONSENSUS_VARIATIONS_DIALOG_H_
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp
index 7e0f1ca..d469200 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp
@@ -19,27 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#include <QtCore/QFileInfo>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QPushButton>
-#endif
-
-#include <U2Core/AppContext.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/DocumentModel.h>
+#include <QDir>
+#include <QFileInfo>
+#include <QMessageBox>
+#include <QPushButton>
+
 #include <U2Core/GUrlUtils.h>
-#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "ExportCoverageDialog.h"
 
@@ -53,7 +43,7 @@ ExportCoverageDialog::ExportCoverageDialog(const QString &assemblyName, QWidget
     setupUi(this);
     initLayout();
     init(assemblyName);
-    connectSignals();
+    connect(cbFormat, SIGNAL(currentIndexChanged(const QString &)), SLOT(sl_formatChanged(const QString &)));
 }
 
 ExportCoverageSettings::Format ExportCoverageDialog::getFormat() const {
@@ -71,7 +61,7 @@ ExportCoverageSettings::Format ExportCoverageDialog::getFormat() const {
 
 ExportCoverageSettings ExportCoverageDialog::getSettings() const {
     ExportCoverageSettings settings;
-    settings.url = QDir::toNativeSeparators(leFilePath->text());
+    settings.url = saveController->getSaveFileName();
     settings.compress = chbCompress->isChecked();
     settings.exportCoverage = chbExportCoverage->isChecked();
     settings.exportBasesCount = chbExportBasesQuantity->isChecked();
@@ -80,7 +70,7 @@ ExportCoverageSettings ExportCoverageDialog::getSettings() const {
 }
 
 void ExportCoverageDialog::accept() {
-    if (leFilePath->text().isEmpty()) {
+    if (saveController->getSaveFileName().isEmpty()) {
         QMessageBox::critical(this, tr("Error"), tr("The output file path is not specified."));
         leFilePath->setFocus();
         return;
@@ -89,116 +79,55 @@ void ExportCoverageDialog::accept() {
         QMessageBox::critical(this, tr("Error"), tr("Not enough permissions to write here. Please set another output file."));
         return;
     }
-    if (ExportCoverageSettings::PER_BASE == cbFormat->currentText() && !chbExportCoverage->isChecked() && !chbExportBasesQuantity->isChecked()) {
+    if (ExportCoverageSettings::PER_BASE == saveController->getFormatIdToSave() && !chbExportCoverage->isChecked() && !chbExportBasesQuantity->isChecked()) {
         QMessageBox::critical(this, tr("Error"), tr("Nothing to export"));
         return;
     }
 
     LastUsedDirHelper dirHelper(DIR_HELPER_NAME);
-    dirHelper.url = leFilePath->text();
+    dirHelper.url = saveController->getSaveFileName();
 
     QDialog::accept();
 }
 
-void ExportCoverageDialog::sl_browseFiles() {
-    QFileDialog::Options additionalOptions = 0;
-    Q_UNUSED(additionalOptions);
-#ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
-        additionalOptions = QFileDialog::DontUseNativeDialog;
-    }
-#endif
-    QString filterName;
-    QString extension;
-    if (chbCompress->isChecked()) {
-        filterName = tr("Compressed ") + cbFormat->currentText().toLower();
-        extension = cbFormat->itemData(cbFormat->currentIndex()).toString().mid(1) + ExportCoverageSettings::COMPRESSED_EXTENSION;
-    } else {
-        filterName = cbFormat->currentText();
-        extension = cbFormat->itemData(cbFormat->currentIndex()).toString().mid(1);
-    }
-
-    const QString filter = DialogUtils::prepareFileFilter(filterName, QStringList() << extension, true, QStringList());
-    LastUsedDirHelper dirHelper(DIR_HELPER_NAME);
-    QString filePath = U2FileDialog::getSaveFileName(this,
-                                                     tr("Export to..."),
-                                                     dirHelper.url,
-                                                     filter,
-                                                     NULL,
-                                                     additionalOptions);
-    CHECK(!filePath.isEmpty(), );
-
-    if (chbCompress->isChecked() && !filePath.endsWith(ExportCoverageSettings::COMPRESSED_EXTENSION)) {
-        filePath += ExportCoverageSettings::COMPRESSED_EXTENSION;
-    }
-
-    dirHelper.url = filePath;
-    leFilePath->setText(QDir::toNativeSeparators(QFileInfo(filePath).absoluteFilePath()));
-}
-
-void ExportCoverageDialog::sl_compressToggled(bool isChecked) {
-    QString filePath = leFilePath->text();
-    if (isChecked && !filePath.endsWith(ExportCoverageSettings::COMPRESSED_EXTENSION)) {
-        leFilePath->setText(filePath + ExportCoverageSettings::COMPRESSED_EXTENSION);
-    }
-    if (!isChecked && filePath.endsWith(ExportCoverageSettings::COMPRESSED_EXTENSION)) {
-        filePath.chop(ExportCoverageSettings::COMPRESSED_EXTENSION.size());
-        leFilePath->setText(filePath);
-    }
-}
-
 void ExportCoverageDialog::sl_formatChanged(const QString &format) {
     gbAdditionalOptions->setVisible(ExportCoverageSettings::PER_BASE == format);
     adjustSize();
-
-    const QString dirPath = QFileInfo(leFilePath->text()).dir().absolutePath();
-    QString fileName = QFileInfo(leFilePath->text()).fileName();
-
-    if (chbCompress->isChecked() && fileName.endsWith(ExportCoverageSettings::COMPRESSED_EXTENSION)) {
-        fileName.chop(ExportCoverageSettings::COMPRESSED_EXTENSION.size());
-    }
-
-    for (int i = 0; i < cbFormat->count(); i++) {
-        if (fileName.endsWith(cbFormat->itemData(i).toString())) {
-            fileName.chop(cbFormat->itemData(i).toString().size());
-            break;
-        }
-    }
-
-    fileName += cbFormat->itemData(cbFormat->currentIndex()).toString() + (chbCompress->isChecked() ? ExportCoverageSettings::COMPRESSED_EXTENSION : "");
-    leFilePath->setText(QDir::toNativeSeparators(GUrlUtils::rollFileName(dirPath + QDir::separator() + fileName, "_", QSet<QString>())));
 }
 
 void ExportCoverageDialog::initLayout() {
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
-    new HelpButton(this, buttonBox, "17467690");
+    new HelpButton(this, buttonBox, "17470622");
     gbAdditionalOptions->hide();
     adjustSize();
 }
 
 void ExportCoverageDialog::init(QString assemblyName) {
-    cbFormat->addItem(ExportCoverageSettings::HISTOGRAM, ExportCoverageSettings::HISTOGRAM_EXTENSION);
-    cbFormat->addItem(ExportCoverageSettings::PER_BASE, ExportCoverageSettings::PER_BASE_EXTENSION);
-    cbFormat->addItem(ExportCoverageSettings::BEDGRAPH, ExportCoverageSettings::BEDGRAPH_EXTENSION);
-    cbFormat->setCurrentIndex(cbFormat->findText(ExportCoverageSettings::BEDGRAPH));
+    SaveDocumentControllerConfig conf;
+    conf.fileDialogButton = tbFilePath;
+    conf.fileNameEdit = leFilePath;
+    conf.formatCombo = cbFormat;
+    conf.compressCheckbox = chbCompress;
+    conf.parentWidget = this;
+    conf.saveTitle = tr("Export coverage");
+    conf.defaultFormatId = ExportCoverageSettings::BEDGRAPH;
+    conf.defaultDomain = DIR_HELPER_NAME;
+
+    SaveDocumentController::SimpleFormatsInfo formats;
+    formats.addFormat(ExportCoverageSettings::HISTOGRAM, QStringList() << ExportCoverageSettings::HISTOGRAM_EXTENSION);
+    formats.addFormat(ExportCoverageSettings::PER_BASE, QStringList() << ExportCoverageSettings::PER_BASE_EXTENSION);
+    formats.addFormat(ExportCoverageSettings::BEDGRAPH, QStringList() << ExportCoverageSettings::BEDGRAPH_EXTENSION);
 
     LastUsedDirHelper dirHelper(DIR_HELPER_NAME, GUrlUtils::getDefaultDataPath());
     assemblyName.replace(QRegExp("[^0-9a-zA-Z._\\-]"), "_").replace(QRegExp("_+"), "_");
-    QString filePath = dirHelper.dir + QDir::separator() +
-            assemblyName + "_coverage" +
+    conf.defaultFileName = dirHelper.dir + "/" + assemblyName + "_coverage" +
             cbFormat->itemData(cbFormat->currentIndex()).toString() + (chbCompress->isChecked() ? ExportCoverageSettings::COMPRESSED_EXTENSION : "");
-    filePath = GUrlUtils::rollFileName(filePath, "_", QSet<QString>());
-    leFilePath->setText(QDir::toNativeSeparators(filePath));
-}
 
-void ExportCoverageDialog::connectSignals() {
-    connect(tbFilePath, SIGNAL(clicked()), SLOT(sl_browseFiles()));
-    connect(chbCompress, SIGNAL(toggled(bool)), SLOT(sl_compressToggled(bool)));
-    connect(cbFormat, SIGNAL(currentIndexChanged(const QString &)), SLOT(sl_formatChanged(const QString &)));
+    saveController = new SaveDocumentController(conf, formats, this);
 }
 
 bool ExportCoverageDialog::checkPermissions() const {
-    QFileInfo fileInfo(leFilePath->text());
+    QFileInfo fileInfo(saveController->getSaveFileName());
     QFileInfo dirInfo(fileInfo.absoluteDir().absolutePath());
     bool isFileExist = fileInfo.exists();
     bool isFileWritable = fileInfo.isWritable();
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.h b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.h
index 1a69b85..60507a1 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.h
@@ -25,10 +25,12 @@
 #include <QDialog>
 
 #include "ExportCoverageTask.h"
-#include "ui/ui_ExportCoverageDialog.h"
+#include "ui_ExportCoverageDialog.h"
 
 namespace U2 {
 
+class SaveDocumentController;
+
 class ExportCoverageDialog : public QDialog, public Ui_ExportCoverageDialog {
     Q_OBJECT
 public:
@@ -41,16 +43,15 @@ public slots:
     void accept();
 
 private slots:
-    void sl_browseFiles();
-    void sl_compressToggled(bool isChecked);
     void sl_formatChanged(const QString &format);
 
 private:
     void initLayout();
     void init(QString assemblyName);
-    void connectSignals();
     bool checkPermissions() const;
 
+    SaveDocumentController * saveController;
+
     static const QString DIR_HELPER_NAME;
 };
 
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.ui b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.ui
new file mode 100644
index 0000000..bba4045
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.ui
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ExportCoverageDialog</class>
+ <widget class="QDialog" name="ExportCoverageDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>420</width>
+    <height>242</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Export the Assembly Coverage</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QWidget" name="gbFileOptions" native="true">
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="lblFilePath">
+        <property name="text">
+         <string>Export to:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <layout class="QHBoxLayout" name="filePathLayout">
+        <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="1" column="0">
+       <widget class="QLabel" name="lblFormat">
+        <property name="text">
+         <string>Format:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <layout class="QHBoxLayout" name="formatOptionsLayout">
+        <item>
+         <widget class="QComboBox" name="cbFormat"/>
+        </item>
+        <item>
+         <spacer name="formatOptionsSpacer">
+          <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="QCheckBox" name="chbCompress">
+          <property name="text">
+           <string>Compress the file</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="thresholdLayout">
+     <item>
+      <widget class="QLabel" name="lblThreshold">
+       <property name="text">
+        <string>Threshold:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="sbThreshold">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="maximum">
+        <number>65535</number>
+       </property>
+       <property name="value">
+        <number>1</number>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="thresholdSpacer">
+       <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>
+    <widget class="QWidget" name="gbAdditionalOptions" native="true">
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="QCheckBox" name="chbExportCoverage">
+        <property name="text">
+         <string>Export coverage value</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="chbExportBasesQuantity">
+        <property name="text">
+         <string>Export bases quantity</string>
+        </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>ExportCoverageDialog</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>ExportCoverageDialog</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/U2View/src/ov_assembly/ExportCoverageTask.cpp b/src/corelibs/U2View/src/ov_assembly/ExportCoverageTask.cpp
index 6207de6..f3fdb82 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportCoverageTask.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportCoverageTask.cpp
@@ -39,9 +39,9 @@ namespace U2 {
 const QString ExportCoverageSettings::HISTOGRAM = QObject::tr("Histogram");
 const QString ExportCoverageSettings::PER_BASE = QObject::tr("Per base");
 const QString ExportCoverageSettings::BEDGRAPH = QObject::tr("Bedgraph");
-const QString ExportCoverageSettings::HISTOGRAM_EXTENSION = ".histogram";
-const QString ExportCoverageSettings::PER_BASE_EXTENSION = ".txt";
-const QString ExportCoverageSettings::BEDGRAPH_EXTENSION = ".bedgraph";
+const QString ExportCoverageSettings::HISTOGRAM_EXTENSION = "histogram";
+const QString ExportCoverageSettings::PER_BASE_EXTENSION = "txt";
+const QString ExportCoverageSettings::BEDGRAPH_EXTENSION = "bedgraph";
 const QString ExportCoverageSettings::COMPRESSED_EXTENSION = ".gz";
 
 const QByteArray ExportCoverageTask::SEPARATOR = "\t";
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp
index 046c741..d05294b 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp
@@ -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/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -38,7 +32,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "ExportReadsDialog.h"
 
@@ -46,21 +40,30 @@ namespace U2 {
 
 ExportReadsDialog::ExportReadsDialog(QWidget * p, const QList<DocumentFormatId> & formats) : QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467685");
+    new HelpButton(this, buttonBox, "17470617");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    documentFormatComboBox->addItems(formats);
-    initFilePath();
+    SaveDocumentControllerConfig conf;
+    conf.defaultDomain = "ExportReadsDialog";
+    conf.fileNameEdit = filepathLineEdit;
+    conf.fileDialogButton = filepathToolButton;
+    conf.formatCombo = documentFormatComboBox;
+    conf.parentWidget = this;
+    conf.saveTitle = tr("Select file to save");
 
-    connect(filepathToolButton, SIGNAL(clicked()), SLOT(sl_selectFile()));
-    connect(documentFormatComboBox, SIGNAL(currentIndexChanged(const QString &)), SLOT(sl_formatChanged(const QString &)));
+    const QString ugeneDataDir = AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath();
+    LastUsedDirHelper lod("ExportReadsDialog", ugeneDataDir);
+    const QString filePath = lod.dir + "/exported_reads";
+    conf.defaultFileName = GUrlUtils::rollFileName(filePath, "_", QSet<QString>());
+
+    saveController = new SaveDocumentController(conf, formats, this);
     setMaximumHeight(layout()->minimumSize().height());
 }
 
 void ExportReadsDialog::accept() {
-    if(filepathLineEdit->text().isEmpty()) {
+    if (saveController->getSaveFileName().isEmpty()) {
         QMessageBox::critical(this, tr("Error!"), tr("Select destination file"));
         filepathLineEdit->setFocus(Qt::OtherFocusReason);
         return;
@@ -68,37 +71,10 @@ void ExportReadsDialog::accept() {
     QDialog::accept();
 }
 
-void ExportReadsDialog::sl_selectFile() {
-    LastUsedDirHelper lod("ExportReadsDialog");
-    const QString filter = DialogUtils::prepareDocumentsFileFilter(documentFormatComboBox->currentText(), false, QStringList());
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Select file to save"), lod, filter);
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    filepathLineEdit->setText(lod.url);
-}
-
-void ExportReadsDialog::sl_formatChanged(const QString &newFormat) {
-    filepathLineEdit->setText(GUrlUtils::rollFileName(GUrlUtils::changeFileExt(filepathLineEdit->text(), newFormat).getURLString(), "_"));
-}
-
-void ExportReadsDialog::initFilePath() {
-    const QString ugeneDataDir = AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath();
-    LastUsedDirHelper lod("ExportReadsDialog", ugeneDataDir);
-
-    DocumentFormat *format = AppContext::getDocumentFormatRegistry()->getFormatById(documentFormatComboBox->currentText());
-    CHECK(NULL != format, );
-    const QStringList extensions = format->getSupportedDocumentFileExtensions();
-    CHECK(!extensions.isEmpty(), );
-
-    const QString filePath = lod.dir + QDir::separator() + "exported_reads" + "." + extensions.first();
-    filepathLineEdit->setText(GUrlUtils::rollFileName(filePath, "_", QSet<QString>()));
-}
-
 ExportReadsDialogModel ExportReadsDialog::getModel() const {
     ExportReadsDialogModel ret;
-    ret.filepath = filepathLineEdit->text();
-    ret.format = documentFormatComboBox->currentText();
+    ret.filepath = saveController->getSaveFileName();
+    ret.format = saveController->getFormatIdToSave();
     ret.addToProject = addToProjectCheckBox->isChecked();
     return ret;
 }
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.h b/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.h
index 1f6c586..2f203f9 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.h
@@ -22,17 +22,16 @@
 #ifndef _U2_EXPORT_READS_DIALOG_H__
 #define _U2_EXPORT_READS_DIALOG_H__
 
+#include <QDialog>
+
 #include <U2Core/global.h>
 
-#include <ui/ui_ExportReadsDialog.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <ui_ExportReadsDialog.h>
 
 namespace U2 {
 
+class SaveDocumentController;
+
 struct ExportReadsDialogModel {
     QString filepath;
     DocumentFormatId format;
@@ -44,16 +43,13 @@ class ExportReadsDialog : public QDialog, Ui_ExportReadsDialog {
 public:
     ExportReadsDialog(QWidget * p, const QList<DocumentFormatId> & formats);
 
-    virtual void accept();
+    void accept();
 
     ExportReadsDialogModel getModel() const;
 
-private slots:
-    void sl_selectFile();
-    void sl_formatChanged(const QString &newFormat);
-
 private:
-    void initFilePath();
+    SaveDocumentController * saveController;
+
 }; // ExportReadsDialog
 
 } // U2
diff --git a/src/corelibs/U2View/src/ov_assembly/ui/ExportReadsDialog.ui b/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_assembly/ui/ExportReadsDialog.ui
rename to src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.ui
diff --git a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.cpp
new file mode 100644
index 0000000..379f959
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.cpp
@@ -0,0 +1,118 @@
+/**
+* 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 <QDir>
+#include <QFileInfo>
+#include <QMessageBox>
+#include <QPushButton>
+
+#include "ExtractAssemblyRegionDialog.h"
+
+#include <U2Core/U2OpStatusUtils.h>
+
+#include <U2View/AssemblyModel.h>
+
+#include <U2Gui/RegionSelector.h>
+#include <U2Gui/SaveDocumentController.h>
+#include <U2Gui/HelpButton.h>
+
+#include "ExtractAssemblyRegionDialog.h"
+
+namespace U2 {
+
+ExtractAssemblyRegionDialog::ExtractAssemblyRegionDialog(QWidget * p, ExtractAssemblyRegionTaskSettings *settings) : QDialog(p)
+, settings(settings) {
+    setupUi(this);
+
+    new HelpButton(this, buttonBox, "17470623");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+
+    initSaveController();
+
+    QList<RegionPreset> presets = QList<RegionPreset>() << RegionPreset(tr("Visible"), settings->regionToExtract);
+    regionSelector = new RegionSelector(this, settings->assemblyLength, false, NULL, false, presets);
+    regionSelector->setCurrentPreset(tr("Visible"));
+    regionSelector->removePreset(RegionSelector::WHOLE_SEQUENCE);
+    regionSelectorWidget->layout()->addWidget(regionSelector);
+
+    setMaximumHeight(layout()->minimumSize().height());
+    connect(regionSelector, SIGNAL(si_regionChanged(const U2Region&)), SLOT(sl_regionChanged(const U2Region&)));
+}
+
+void ExtractAssemblyRegionDialog::sl_regionChanged(const U2Region& newRegion) {
+    QString filePath = saveController->getSaveFileName();
+    QFileInfo fi(filePath);
+    U2Region prevRegion = settings->regionToExtract;
+    prevRegion.startPos += 1;
+    prevRegion.length -= 1;
+    QString stringToReplace = QString::number(prevRegion.startPos) + "_" + QString::number(prevRegion.endPos());
+    if (fi.baseName().contains(stringToReplace)) {
+        QString baseName = fi.baseName();
+        QString newLocation = QString::number(newRegion.startPos + 1) + "_" + QString::number(newRegion.endPos());
+        baseName.replace(stringToReplace, newLocation);
+        
+        filePath = fi.dir().path() + "/" + baseName + "." + fi.completeSuffix();
+        saveController->setPath(filePath);
+    }
+    settings->regionToExtract = newRegion;
+}
+
+void ExtractAssemblyRegionDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = settings->fileUrl;
+    config.defaultFormatId = settings->fileFormat;
+    config.fileDialogButton = filepathToolButton;
+    config.fileNameEdit = filepathLineEdit;
+    config.formatCombo = documentFormatComboBox;
+    config.parentWidget = this;
+    config.saveTitle = tr("Export Assembly Region");
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::ASSEMBLY;
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
+
+void ExtractAssemblyRegionDialog::accept() {
+    bool isRegionOk = false;
+    settings->fileUrl = saveController->getSaveFileName();
+    settings->fileFormat = saveController->getFormatIdToSave();
+    settings->addToProject = addToProjectCheckBox->isChecked();
+    settings->regionToExtract = regionSelector->getRegion(&isRegionOk);
+
+    if (!isRegionOk) {
+        regionSelector->showErrorMessage();
+        regionSelector->setFocus(Qt::OtherFocusReason);
+        return;
+    }
+    
+    if (settings->fileUrl.isEmpty()) {
+        QMessageBox::critical(this, tr("Error!"), tr("Select destination file"));
+        filepathLineEdit->setFocus(Qt::OtherFocusReason);
+        return;
+    }
+
+    QDialog::accept();
+}
+
+}
diff --git a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.h b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.h
new file mode 100644
index 0000000..f7c55ed
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.h
@@ -0,0 +1,63 @@
+/**
+* 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_EXTRACT_ASSEMBLY_REGION_DIALOG_H_
+#define _U2_EXTRACT_ASSEMBLY_REGION_DIALOG_H_
+
+#include <QDialog>
+
+#include "ExtractAssemblyRegionTask.h"
+
+#include "ui_ExtractAssemblyRegionDialog.h"
+
+#include <U2Core/U2Region.h>
+
+#include <U2Formats/SQLiteDbi.h>
+
+#include "ExtractAssemblyRegionTask.h"
+#include "ui_ExtractAssemblyRegionDialog.h"
+
+namespace U2 {
+
+class SaveDocumentController;
+class RegionSelector;
+
+class ExtractAssemblyRegionDialog : public QDialog, public Ui_ExtractAssemblyRegionDialog {
+    Q_OBJECT
+public:
+    ExtractAssemblyRegionDialog(QWidget * p, ExtractAssemblyRegionTaskSettings* settings);
+
+    virtual void accept();
+
+private slots:
+    void sl_regionChanged(const U2Region& newRegion);
+
+private:
+    void initSaveController();
+
+    SaveDocumentController * saveController;
+    RegionSelector * regionSelector;
+    ExtractAssemblyRegionTaskSettings *settings;
+};
+
+} // namespace
+
+#endif
diff --git a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.ui b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.ui
new file mode 100644
index 0000000..ddb07ee
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.ui
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ExtractAssemblyRegionDialog</class>
+ <widget class="QDialog" name="ExtractAssemblyRegionDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>480</width>
+    <height>137</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Export Assembly Region</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <widget class="QLabel" name="filepathLabel">
+       <property name="text">
+        <string>Save to file</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLineEdit" name="filepathLineEdit"/>
+     </item>
+     <item row="0" column="2">
+      <widget class="QToolButton" name="filepathToolButton">
+       <property name="text">
+        <string>...</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="documentFormatLabel">
+       <property name="text">
+        <string>File format</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1" colspan="2">
+      <widget class="QComboBox" name="documentFormatComboBox"/>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QWidget" name="regionSelectorWidget" native="true">
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <property name="spacing">
+       <number>0</number>
+      </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>
+    <widget class="QCheckBox" name="addToProjectCheckBox">
+     <property name="text">
+      <string>Add to project</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>ExtractAssemblyRegionDialog</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>ExtractAssemblyRegionDialog</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/U2View/src/ov_assembly/ExtractAssemblyRegionTask.cpp b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.cpp
new file mode 100644
index 0000000..e3441df
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.cpp
@@ -0,0 +1,98 @@
+/**
+* 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/AppContext.h>
+#include <U2Core/AssemblyObject.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DocumentImport.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/DocumentUtils.h>
+#include <U2Core/IOAdapterUtils.h>
+#include <U2Core/LoadDocumentTask.h>
+#include <U2Core/ProjectModel.h>
+#include <U2Core/SaveDocumentTask.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Formats/BAMUtils.h>
+
+#include <U2Gui/OpenViewTask.h>
+
+#include <U2View/AssemblyModel.h>
+
+#include "ExtractAssemblyRegionTask.h"
+
+namespace U2 {
+
+ExtractAssemblyRegionAndOpenViewTask::ExtractAssemblyRegionAndOpenViewTask(const ExtractAssemblyRegionTaskSettings& settings) 
+    : Task(tr("Extract Assembly Region And Open View Task"), TaskFlags_NR_FOSE_COSC), settings(settings), extractTask(NULL) {}
+
+void ExtractAssemblyRegionAndOpenViewTask::prepare() {
+    if (settings.addToProject) {
+        setSubtaskProgressWeight(50);
+    } else {
+        setSubtaskProgressWeight(100);
+    }
+    
+    extractTask = new ExtractAssemblyRegionTask(settings);
+    addSubTask(extractTask);
+}
+
+QList<Task*> ExtractAssemblyRegionAndOpenViewTask::onSubTaskFinished(Task *subTask) {
+    QList<Task*> result;
+    CHECK(NULL != subTask, result);
+
+    if (subTask->hasError() || subTask->isCanceled()) {
+        return result;
+    }
+           
+    if (extractTask == subTask && settings.addToProject) {
+        Task* openTask = AppContext::getProjectLoader()->openWithProjectTask(settings.fileUrl);
+        CHECK(openTask != NULL, result);
+        result.append(openTask);
+    } 
+    return result;
+}
+
+ExtractAssemblyRegionTask::ExtractAssemblyRegionTask(const ExtractAssemblyRegionTaskSettings& settings) 
+    : Task(tr("Extract Assembly Region Task"), TaskFlag_None), settings(settings) {
+    tpm = Task::Progress_Manual;
+}
+
+void ExtractAssemblyRegionTask::run() {
+    taskLog.details("Start extracting regions to assembly");
+
+    if (settings.fileFormat == BaseDocumentFormats::BAM || settings.fileFormat == BaseDocumentFormats::SAM) {
+        QList<GObject*> objects;
+        objects.append(settings.obj);
+        BAMUtils::writeObjects(objects, GUrl(settings.fileUrl), settings.fileFormat, stateInfo, settings.regionToExtract);
+    } else if (settings.fileFormat == BaseDocumentFormats::UGENEDB) {
+        const U2DbiRef dbiRef = U2DbiRef(SQLITE_DBI_ID, settings.fileUrl);
+        SAFE_POINT_OP(stateInfo, );
+
+        U2EntityRef dstEntityRef = AssemblyObject::dbi2dbiExtractRegion(settings.obj, dbiRef, stateInfo, settings.regionToExtract, QVariantMap());
+        SAFE_POINT_OP(stateInfo, );
+    } else {
+        setError(tr("Unsupported assembly format"));
+    }
+    taskLog.details("Finish extracting regions to assembly");
+}
+
+}
diff --git a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.h b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.h
new file mode 100644
index 0000000..fdccfb2
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.h
@@ -0,0 +1,69 @@
+/**
+* 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_EXTRACT_ASSEMBLY_TASK_H_
+#define _U2_EXTRACT_ASSEMBLY_TASK_H_
+
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/Task.h>
+#include <U2Core/U2Region.h>
+
+namespace U2 {
+
+class AssemblyObject;
+class DocumentProviderTask;
+class ExtractAssemblyRegionTask;
+
+struct ExtractAssemblyRegionTaskSettings {
+    ExtractAssemblyRegionTaskSettings(QString fileUrl, int assemblyLength, AssemblyObject *o) : fileUrl(fileUrl), regionToExtract(U2_REGION_MAX),
+        fileFormat(BaseDocumentFormats::UGENEDB), assemblyLength(assemblyLength), obj(o), addToProject(false) {}
+    QString fileUrl;
+    U2Region regionToExtract;
+    DocumentFormatId fileFormat;
+    int assemblyLength;
+    AssemblyObject *obj;
+    bool addToProject;
+};
+
+class ExtractAssemblyRegionAndOpenViewTask : public Task {
+public:
+    ExtractAssemblyRegionAndOpenViewTask(const ExtractAssemblyRegionTaskSettings& settings);
+
+    void prepare();
+
+    QList<Task*>  onSubTaskFinished(Task *subTask);
+private:
+    ExtractAssemblyRegionTaskSettings settings;
+    ExtractAssemblyRegionTask *extractTask;
+};
+
+class ExtractAssemblyRegionTask : public Task {
+public:
+    ExtractAssemblyRegionTask(const ExtractAssemblyRegionTaskSettings& settings);
+
+    void run();
+private:
+    ExtractAssemblyRegionTaskSettings settings;
+};
+
+}
+
+#endif
diff --git a/src/corelibs/U2View/src/ov_assembly/ui/ExportCoverageDialog.ui b/src/corelibs/U2View/src/ov_assembly/ui/ExportCoverageDialog.ui
deleted file mode 100644
index 5c7e5f8..0000000
--- a/src/corelibs/U2View/src/ov_assembly/ui/ExportCoverageDialog.ui
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ExportCoverageDialog</class>
- <widget class="QDialog" name="ExportCoverageDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>429</width>
-    <height>276</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Export the Assembly Coverage</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QGroupBox" name="gbFileOptions">
-     <property name="title">
-      <string/>
-     </property>
-     <layout class="QGridLayout" name="gridLayout">
-      <item row="0" column="0">
-       <widget class="QLabel" name="lblFilePath">
-        <property name="text">
-         <string>Export to:</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <layout class="QHBoxLayout" name="filePathLayout">
-        <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="1" column="0">
-       <widget class="QLabel" name="lblFormat">
-        <property name="text">
-         <string>Format:</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <layout class="QHBoxLayout" name="formatOptionsLayout">
-        <item>
-         <widget class="QComboBox" name="cbFormat"/>
-        </item>
-        <item>
-         <spacer name="formatOptionsSpacer">
-          <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="QCheckBox" name="chbCompress">
-          <property name="text">
-           <string>Compress the file</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="thresholdLayout">
-     <item>
-      <widget class="QLabel" name="lblThreshold">
-       <property name="text">
-        <string>Threshold:</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QSpinBox" name="sbThreshold">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="maximum">
-        <number>65535</number>
-       </property>
-       <property name="value">
-        <number>1</number>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="thresholdSpacer">
-       <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>
-    <widget class="QGroupBox" name="gbAdditionalOptions">
-     <property name="title">
-      <string>Additional options</string>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2">
-      <item>
-       <widget class="QCheckBox" name="chbExportCoverage">
-        <property name="text">
-         <string>Export coverage value</string>
-        </property>
-        <property name="checked">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QCheckBox" name="chbExportBasesQuantity">
-        <property name="text">
-         <string>Export bases quantity</string>
-        </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>ExportCoverageDialog</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>ExportCoverageDialog</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/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp b/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp
index 497584f..5cddaf7 100644
--- a/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp
@@ -19,16 +19,12 @@
  * 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 <U2Algorithm/MSAColorScheme.h>
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -50,12 +46,10 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
 
-
 #include "SubalignmentToClipboardTask.h"
 #include "ov_msa/MSACollapsibleModel.h"
 #include "ov_msa/MSAEditorSequenceArea.h"
 
-
 namespace U2{
 
 
@@ -175,22 +169,22 @@ void RichTextMsaClipboardTask::run(){
     SAFE_POINT(NULL != s, "RTFMSA entry storing: NULL settings object", );
 
     DNAAlphabetType atype = al->getType();
-    MSAColorSchemeRegistry* csr = AppContext::getMSAColorSchemeRegistry();
+    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(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_COLOR_AMINO, MsaColorScheme::UGENE_AMINO).toString()
+          : s->getValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_COLOR_NUCL, MsaColorScheme::UGENE_NUCL).toString();
 
-    MSAColorSchemeFactory* csf = csr->getMSAColorSchemeFactoryById(csid);
+    MsaColorSchemeFactory* csf = csr->getMsaColorSchemeFactoryById(csid);
     if (csf == NULL) {
-        csf = csr->getMSAColorSchemeFactoryById(atype == DNAAlphabet_AMINO ? MSAColorScheme::UGENE_AMINO : MSAColorScheme::UGENE_NUCL);
+        csf = csr->getMsaColorSchemeFactoryById(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);
+    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();
 
-    MSAHighlightingScheme* highlightingScheme = context->getUI()->getSequenceArea()->getCurrentHighlightingScheme();
+    MsaHighlightingScheme* highlightingScheme = context->getUI()->getSequenceArea()->getCurrentHighlightingScheme();
     SAFE_POINT(highlightingScheme!=NULL, "RTFMSA entry storing: NULL highlightingScheme object", );
 
     QString schemeName = highlightingScheme->metaObject()->className();
@@ -208,39 +202,35 @@ void RichTextMsaClipboardTask::run(){
         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;
+            QString res;
+            const MAlignmentRow& row = ma.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);
                 }
-                result.append("<p>");
-                for (int pos = window.startPos; pos < window.endPos(); pos++){
-                    char c = row.charAt(pos);
-                    QColor color = colorScheme->getColor(seq, pos, c);
-                    bool drawColor = false;
-                    if (isGapsScheme || highlightingScheme->getFactory()->isRefFree()){ //schemes which applied without reference
-                        const char refChar = 'z';
-                        highlightingScheme->process(refChar, c, drawColor, pos, seq);
-                        if(isGapsScheme){
-                            color = QColor(192, 192, 192);
-                        }
-                    }else if(seq == refSeq || MAlignmentRow::invalidRowId() == refSeq){
-                        drawColor = true;
-                    }else{
-                        const char refChar = r->charAt(pos);
-                        highlightingScheme->process(refChar, c, drawColor, pos, seq);
-
-                        if(isGapsScheme){
-                            color = QColor(192, 192, 192);
-                        }
-                    }
-                    if (color.isValid() && drawColor){
-                        res.append(QString("<span style=\"background-color:%1;\">%2</span>").arg(color.name()).arg(c));
-                    }else{
-                        res.append(QString("%1").arg(c));
-                    }
+
+                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(res.toLatin1());
             result.append("</p>\n");
         }
     result.append("</span>");
diff --git a/src/corelibs/U2View/src/ov_msa/ui/ColorSchemaDialog.ui b/src/corelibs/U2View/src/ov_msa/ColorSchemaDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/ColorSchemaDialog.ui
rename to src/corelibs/U2View/src/ov_msa/ColorSchemaDialog.ui
diff --git a/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp b/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp
index d9136f7..9c03323 100644
--- a/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp
@@ -19,13 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include <QPainter>
 #include <QColorDialog>
+#include <QPainter>
+#include <QPushButton>
+
+#include <U2Algorithm/ColorSchemeUtils.h>
 
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/U2SafePoints.h>
+
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/U2FileDialog.h>
 
@@ -44,7 +48,9 @@ ColorSchemaDialogController::ColorSchemaDialogController(QMap<char, QColor>& col
 
 int ColorSchemaDialogController::adjustAlphabetColors(){
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467624");
+    new HelpButton(this, buttonBox, "17470553");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     alphabetColorsView = new QPixmap(alphabetColorsFrame->size());
     connect(clearButton, SIGNAL(clicked()), SLOT(sl_onClear()));
     connect(restoreButton, SIGNAL(clicked()), SLOT(sl_onRestore()));
@@ -170,9 +176,9 @@ void ColorSchemaDialogController::mouseReleaseEvent(QMouseEvent * event){
 
 /*Create MSA scheme dialog*/
 
-CreateColorSchemaDialog::CreateColorSchemaDialog(CustomColorSchema* _newSchema, QStringList _usedNames) : usedNames(_usedNames), newSchema(_newSchema) {
+CreateColorSchemaDialog::CreateColorSchemaDialog(ColorSchemeData* _newSchema, QStringList _usedNames) : usedNames(_usedNames), newSchema(_newSchema) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467624");
+    new HelpButton(this, buttonBox, "17470553");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -187,6 +193,8 @@ CreateColorSchemaDialog::CreateColorSchemaDialog(CustomColorSchema* _newSchema,
 
     connect(schemeName, SIGNAL(textEdited ( const QString&)), SLOT(sl_schemaNameEdited(const QString&)));
 
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Ok"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     QPushButton *createButton = buttonBox->button(QDialogButtonBox::Ok);
     QPushButton *cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
 
@@ -289,7 +297,7 @@ void CreateColorSchemaDialog::sl_createSchema(){
         }
     }
 
-    QMap<char, QColor> alpColors = ColorSchemaSettingsUtils::getDefaultSchemaColors(type, defaultAlpType);
+    QMap<char, QColor> alpColors = ColorSchemeUtils::getDefaultSchemaColors(type, defaultAlpType);
 
     QObjectScopedPointer<ColorSchemaDialogController> controller = new ColorSchemaDialogController(alpColors);
     const int r = controller->adjustAlphabetColors();
@@ -333,7 +341,7 @@ void ColorSchemaSettingsPageWidget::setState(AppSettingsGUIPageState* s) {
     customSchemas = state->customSchemas;
     colorSchemas->clear();
 
-    foreach(const CustomColorSchema& customSchema, customSchemas){
+    foreach(const ColorSchemeData& customSchema, customSchemas){
         colorSchemas->addItem(new QListWidgetItem(customSchema.name, colorSchemas));
     }
     update();
@@ -363,11 +371,11 @@ void ColorSchemaSettingsPageWidget::sl_onColorsDirButton() {
         QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
     if (!dir.isEmpty()) {
         colorsDirEdit->setText(dir);
-        ColorSchemaSettingsUtils::setColorsDir(dir);
+        ColorSchemeUtils::setColorsDir(dir);
         customSchemas.clear();
         colorSchemas->clear();
-        customSchemas = ColorSchemaSettingsUtils::getSchemas();
-        foreach(CustomColorSchema schema, customSchemas){
+        customSchemas = ColorSchemeUtils::getSchemas();
+        foreach(ColorSchemeData schema, customSchemas){
             colorSchemas->addItem(new QListWidgetItem(schema.name, colorSchemas));
         }
     }
@@ -376,10 +384,10 @@ void ColorSchemaSettingsPageWidget::sl_onColorsDirButton() {
 void ColorSchemaSettingsPageWidget::sl_onAddColorSchema(){
 
     QStringList usedNames;
-    foreach(const CustomColorSchema& customScheme, customSchemas){
+    foreach(const ColorSchemeData& customScheme, customSchemas){
         usedNames << customScheme.name;
     }
-    CustomColorSchema schema;
+    ColorSchemeData schema;
 
     QObjectScopedPointer<CreateColorSchemaDialog> d = new CreateColorSchemaDialog(&schema, usedNames);
     const int r = d->createNewScheme();
@@ -401,7 +409,7 @@ void ColorSchemaSettingsPageWidget::sl_onChangeColorSchema(){
 
     QString schemaName = item->text();
     for(int i = 0; i < customSchemas.size(); ++i){
-        CustomColorSchema& customSchema = customSchemas[i];
+        ColorSchemeData& customSchema = customSchemas[i];
         if(customSchema.name == schemaName){
             alpColors = customSchema.alpColors;
             QObjectScopedPointer<ColorSchemaDialogController> controller = new ColorSchemaDialogController(alpColors);
@@ -428,7 +436,7 @@ void ColorSchemaSettingsPageWidget::sl_onDeleteColorSchema(){
 
     QString schemaName = item->text();
     for(int i = 0; i < customSchemas.size(); ++i){
-        CustomColorSchema& customSchema = customSchemas[i];
+        ColorSchemeData& customSchema = customSchemas[i];
         if(customSchema.name == schemaName){
             customSchemas.removeAt(i);
             colorSchemas->removeItemWidget(item);
diff --git a/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.h b/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.h
index 0344b4f..ca17673 100644
--- a/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.h
+++ b/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.h
@@ -22,13 +22,13 @@
 #ifndef _U2_COLOR_SCHEMA_DIALOG_CONTROLLER_H_
 #define _U2_COLOR_SCHEMA_DIALOG_CONTROLLER_H_
 
-#include <U2Algorithm/MSAColorScheme.h>
+#include <U2Algorithm/MsaColorScheme.h>
 #include <U2Gui/AppSettingsGUI.h>
 #include <U2View/ColorSchemaSettingsController.h>
 
-#include "ui/ui_ColorSchemaDialog.h"
-#include <ui/ui_ColorSchemaSettingsWidget.h>
-#include <ui/ui_CreateMSAScheme.h>
+#include "ui_ColorSchemaDialog.h"
+#include <ui_ColorSchemaSettingsWidget.h>
+#include <ui_CreateMSAScheme.h>
 
 #include <QtCore/QMap>
 
@@ -66,7 +66,7 @@ class ColorSchemaSettingsPageState : public AppSettingsGUIPageState {
     Q_OBJECT
 public:
     QString colorsDir;
-    QList<CustomColorSchema> customSchemas;
+    QList<ColorSchemeData> customSchemas;
 };
 
 class ColorSchemaSettingsPageWidget: public AppSettingsGUIPageWidget, public Ui_ColorSchemaSettingsWidget {
@@ -86,14 +86,14 @@ private slots:
     void sl_schemaChanged(int);
 
 private:
-    QList<CustomColorSchema> customSchemas;
+    QList<ColorSchemeData> customSchemas;
 };
 
 
 class CreateColorSchemaDialog: public QDialog, public Ui_CreateMSAScheme{
     Q_OBJECT
 public:
-    CreateColorSchemaDialog(CustomColorSchema*, QStringList usedNames);
+    CreateColorSchemaDialog(ColorSchemeData*, QStringList usedNames);
     int createNewScheme();
 
 private slots:
@@ -107,7 +107,7 @@ private:
     bool isSchemaNameValid(const QString&, QString&);
 
     QStringList usedNames;
-    CustomColorSchema* newSchema;
+    ColorSchemeData* newSchema;
 };
 
 
diff --git a/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp b/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp
index 1dab0f1..50be7d2 100644
--- a/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp
@@ -22,6 +22,8 @@
 #include <QColor>
 #include <QDir>
 
+#include <U2Algorithm/ColorSchemeUtils.h>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/DNAAlphabet.h>
@@ -47,7 +49,7 @@ enum DefaultStrategy{
 };
 
 static void clearColorsDir() {
-    QString path = ColorSchemaSettingsUtils::getColorsDir();
+    QString path = ColorSchemeUtils::getColorsDir();
     QDir dir(path);
     dir.setNameFilters(QStringList() << "*.*");
     dir.setFilter(QDir::Files);
@@ -57,8 +59,8 @@ static void clearColorsDir() {
     }
 }
 
-static void setSchemaColors(const CustomColorSchema& customSchema){
-    QString dirPath = ColorSchemaSettingsUtils::getColorsDir();
+static void setSchemaColors(const ColorSchemeData& customSchema){
+    QString dirPath = ColorSchemeUtils::getColorsDir();
     QDir dir(dirPath);
     if(!dir.exists()){
         dir.mkpath(dirPath);
@@ -69,11 +71,11 @@ static void setSchemaColors(const CustomColorSchema& customSchema){
     QScopedPointer<IOAdapter> io(factory->createIOAdapter());
 
     const QMap<char, QColor> & alphColors = customSchema.alpColors;
-    const QString& file  = customSchema.name + COLOR_SCHEME_NAME_FILTERS;
+    const QString& file  = customSchema.name + ColorSchemeUtils::COLOR_SCHEME_NAME_FILTERS;
     DNAAlphabetType type = customSchema.type;
     bool defaultType = customSchema.defaultAlpType;
 
-    QString keyword(type == DNAAlphabet_AMINO ? COLOR_SCHEME_AMINO_KEYWORD : (defaultType ? COLOR_SCHEME_NUCL_DEFAULT_KEYWORD : COLOR_SCHEME_NUCL_EXTENDED_KEYWORD));
+    QString keyword(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
@@ -91,9 +93,9 @@ static void setSchemaColors(const CustomColorSchema& customSchema){
 }
 
 
-const QString ColorSchemaSettingsPageController::helpPageId = QString("17467527");
+const QString ColorSchemaSettingsPageController::helpPageId = QString("17470454");
 
-ColorSchemaSettingsPageController::ColorSchemaSettingsPageController(MSAColorSchemeRegistry* mcsr, QObject* p)
+ColorSchemaSettingsPageController::ColorSchemaSettingsPageController(MsaColorSchemeRegistry* mcsr, QObject* p)
 : AppSettingsGUIPageController(tr("Alignment Color Scheme"), ColorSchemaSettingsPageId, p) {
        connect(this, SIGNAL(si_customSettingsChanged()), mcsr, SLOT(sl_onCustomSettingsChanged()));
 }
@@ -101,8 +103,8 @@ ColorSchemaSettingsPageController::ColorSchemaSettingsPageController(MSAColorSch
 
 AppSettingsGUIPageState* ColorSchemaSettingsPageController::getSavedState() {
     ColorSchemaSettingsPageState* state = new ColorSchemaSettingsPageState();
-    state->colorsDir = ColorSchemaSettingsUtils::getColorsDir();
-    state->customSchemas = ColorSchemaSettingsUtils::getSchemas();
+    state->colorsDir = ColorSchemeUtils::getColorsDir();
+    state->customSchemas = ColorSchemeUtils::getSchemas();
 
     return state;
 }
@@ -110,9 +112,9 @@ AppSettingsGUIPageState* ColorSchemaSettingsPageController::getSavedState() {
 void ColorSchemaSettingsPageController::saveState(AppSettingsGUIPageState* s) {
     ColorSchemaSettingsPageState* state = qobject_cast<ColorSchemaSettingsPageState*>(s);
 
-    ColorSchemaSettingsUtils::setColorsDir(state->colorsDir);
+    ColorSchemeUtils::setColorsDir(state->colorsDir);
     clearColorsDir();
-    foreach(const CustomColorSchema& schema, state->customSchemas){
+    foreach(const ColorSchemeData& schema, state->customSchemas){
         setSchemaColors(schema);
     }
     emit si_customSettingsChanged();
diff --git a/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.h b/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.h
index bc1647c..3728638 100644
--- a/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.h
+++ b/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.h
@@ -24,7 +24,7 @@
 
 #include <U2Gui/AppSettingsGUI.h>
 
-#include <U2Algorithm/MSAColorScheme.h>
+#include <U2Algorithm/MsaColorScheme.h>
 
 namespace U2 {
 
@@ -34,7 +34,7 @@ const QString ColorSchemaSettingsPageId = "ColorSchemaSettings";
 class U2VIEW_EXPORT ColorSchemaSettingsPageController : public AppSettingsGUIPageController {
     Q_OBJECT
 public:
-    ColorSchemaSettingsPageController(MSAColorSchemeRegistry* mcsr, QObject* p = NULL);
+    ColorSchemaSettingsPageController(MsaColorSchemeRegistry* mcsr, QObject* p = NULL);
 
     virtual AppSettingsGUIPageState* getSavedState();
 
diff --git a/src/corelibs/U2View/src/ov_msa/ui/ColorSchemaSettingsWidget.ui b/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsWidget.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/ColorSchemaSettingsWidget.ui
rename to src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsWidget.ui
diff --git a/src/corelibs/U2View/src/ov_msa/ui/CreateMSAScheme.ui b/src/corelibs/U2View/src/ov_msa/CreateMSAScheme.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/CreateMSAScheme.ui
rename to src/corelibs/U2View/src/ov_msa/CreateMSAScheme.ui
diff --git a/src/corelibs/U2View/src/ov_msa/ui/CreateSubalignmentDialog.ui b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/CreateSubalignmentDialog.ui
rename to src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialog.ui
diff --git a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp
index 591aaa7..756d295 100644
--- a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp
@@ -19,48 +19,39 @@
  * MA 02110-1301, USA.
  */
 
-#include "CreateSubalignmentDialogController.h"
+#include <QMessageBox>
 
-#include <U2Core/DocumentModel.h>
+#include <U2Algorithm/CreateSubalignmentTask.h>
+
+#include <U2Core/AddDocumentTask.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/DocumentUtils.h>
+#include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/ProjectModel.h>
-#include <U2Core/AddDocumentTask.h>
-#include <U2Core/U2SafePoints.h>
 #include <U2Core/TmpDirChecker.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Formats/GenbankLocationParser.h>
 
-#include <U2Algorithm/CreateSubalignmentTask.h>
-
-#include <U2Gui/OpenViewTask.h>
-#include <U2Gui/LastUsedDirHelper.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
-
-#include <U2Core/BaseDocumentFormats.h>
-
 #include <U2Gui/DialogUtils.h>
-#include <U2Gui/SaveDocumentGroupController.h>
 #include <U2Gui/HelpButton.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/DocumentUtils.h>
+#include <U2Gui/OpenViewTask.h>
+#include <U2Gui/SaveDocumentController.h>
 
+#include "CreateSubalignmentDialogController.h"
 
 namespace U2{
 
 CreateSubalignmentDialogController::CreateSubalignmentDialogController(MAlignmentObject *_mobj, const QRect& selection, QWidget *p)
-: QDialog(p), mobj(_mobj), saveContoller(NULL){
+: QDialog(p), mobj(_mobj), saveController(NULL){
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467651");
+    new HelpButton(this, buttonBox, "17470583");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Extract"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    connect(browseButton, SIGNAL(clicked()), SLOT(sl_browseButtonClicked()));
     connect(allButton, SIGNAL(clicked()), SLOT(sl_allButtonClicked()));
     connect(noneButton, SIGNAL(clicked()), SLOT(sl_noneButtonClicked()));
     connect(invertButton, SIGNAL(clicked()), SLOT(sl_invertButtonClicked()));
@@ -74,24 +65,9 @@ CreateSubalignmentDialogController::CreateSubalignmentDialogController(MAlignmen
     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
 
-    SaveDocumentGroupControllerConfig conf;
-    conf.dfc.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.dfc.supportedObjectTypes+=GObjectTypes::MULTIPLE_ALIGNMENT;
-    conf.fileDialogButton = browseButton;
-    conf.formatCombo = formatCombo;
-    conf.fileNameEdit = filepathEdit;
-    conf.parentWidget = this;
-    conf.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
-    conf.defaultFileName = GUrlUtils::getNewLocalUrlByFormat(_mobj->getDocument()->getURLString(), _mobj->getGObjectName(), conf.defaultFormatId, "_subalign");
-
-    saveContoller = new SaveDocumentGroupController(conf, this);
+    initSaveController();
 
     int startSeq = -1;
     int endSeq = -1;
@@ -124,20 +100,28 @@ CreateSubalignmentDialogController::CreateSubalignmentDialogController(MAlignmen
         sequencesTableWidget->setCellWidget(i, 0, cb);
         sequencesTableWidget->setRowHeight(i, 15);
     }
-
 }
 
 QString CreateSubalignmentDialogController::getSavePath(){
-    if(NULL == saveContoller) {
+    if(NULL == saveController) {
         return QString();
     }
-    return saveContoller->getSaveFileName();
-};
+    return saveController->getSaveFileName();
+}
+
 DocumentFormatId CreateSubalignmentDialogController::getFormatId() {
-    if(NULL == saveContoller) {
+    if(NULL == saveController) {
         return DocumentFormatId();
     }
-    return saveContoller->getFormatIdToSave();
+    return saveController->getFormatIdToSave();
+}
+
+U2Region CreateSubalignmentDialogController::getRegion() {
+    return window;
+}
+
+QStringList CreateSubalignmentDialogController::getSelectedSeqNames() {
+    return selectedNames;
 }
 
 void CreateSubalignmentDialogController::sl_allButtonClicked(){
@@ -161,8 +145,25 @@ void CreateSubalignmentDialogController::sl_noneButtonClicked(){
     }
 }
 
+void CreateSubalignmentDialogController::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = GUrlUtils::getNewLocalUrlByFormat(mobj->getDocument()->getURLString(), mobj->getGObjectName(), BaseDocumentFormats::CLUSTAL_ALN, "_subalign");
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
+    config.fileDialogButton = browseButton;
+    config.fileNameEdit = filepathEdit;
+    config.formatCombo = formatCombo;
+    config.parentWidget = this;
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+    formatConstraints.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
+
 void CreateSubalignmentDialogController::accept(){
-    QFileInfo fi(filepathEdit->text());
+    QFileInfo fi(saveController->getSaveFileName());
     QDir dirToSave(fi.dir());
     if (!dirToSave.exists()){
         QMessageBox::critical(this, this->windowTitle(), tr("Directory to save does not exist"));
@@ -172,7 +173,7 @@ void CreateSubalignmentDialogController::accept(){
         QMessageBox::critical(this, this->windowTitle(), tr("No write permission to '%1' directory").arg(dirToSave.absolutePath()));
         return;
     }
-    if(filepathEdit->text().isEmpty()){
+    if(saveController->getSaveFileName().isEmpty()){
         QMessageBox::critical(this, this->windowTitle(), tr("No path specified"));
         return;
     }
@@ -214,6 +215,10 @@ void CreateSubalignmentDialogController::accept(){
     QDialog::accept();
 }
 
+bool CreateSubalignmentDialogController::getAddToProjFlag() {
+    return addToProjBox->isChecked();
+}
+
 void CreateSubalignmentDialogController::selectSeqNames(){
     QStringList names;
     for (int i=0; i<sequencesTableWidget->rowCount(); i++) {
diff --git a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.h b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.h
index 25d1141..5b3700b 100644
--- a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.h
+++ b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.h
@@ -22,28 +22,29 @@
 #ifndef _U2_CREATE_SUBALIGNIMENT_DIALOG_CONTROLLER_H_
 #define _U2_CREATE_SUBALIGNIMENT_DIALOG_CONTROLLER_H_
 
-#include "ui/ui_CreateSubalignmentDialog.h"
+#include "ui_CreateSubalignmentDialog.h"
 
-#include <U2Core/global.h>
-#include <U2Core/Task.h>
 #include <U2Core/MAlignmentObject.h>
+#include <U2Core/Task.h>
+#include <U2Core/global.h>
+
 
 namespace U2{
 
-class SaveDocumentGroupController;
+class SaveDocumentController;
 
-class U2VIEW_EXPORT CreateSubalignmentDialogController : public QDialog, Ui_CreateSubalignmentDialog {
+class U2VIEW_EXPORT CreateSubalignmentDialogController : public QDialog, private Ui_CreateSubalignmentDialog {
     Q_OBJECT
 public:
     CreateSubalignmentDialogController( MAlignmentObject *_mobj, const QRect& selection, QWidget *p = NULL);
 
     void accept();
 
-    bool getAddToProjFlag(){return addToProjBox->isChecked();};
+    bool getAddToProjFlag();
     QString getSavePath();
     DocumentFormatId getFormatId();
-    U2Region getRegion(){return window;};
-    QStringList getSelectedSeqNames(){return selectedNames;};
+    U2Region getRegion();
+    QStringList getSelectedSeqNames();
 
 private slots:
     void sl_allButtonClicked();
@@ -51,12 +52,13 @@ private slots:
     void sl_noneButtonClicked();
 
 private:
+    void initSaveController();
     void selectSeqNames();
 
     MAlignmentObject *mobj;
     U2Region window;
     QStringList selectedNames;
-    SaveDocumentGroupController* saveContoller;
+    SaveDocumentController* saveController;
 };
 
 
diff --git a/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp b/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp
index fe1619f..c8f932e 100644
--- a/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp
+++ b/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp
@@ -20,58 +20,59 @@
  */
 
 #include "DeleteGapsDialog.h"
+#include "ui_DeleteGapsDialog.h"
+
 #include <U2Gui/HelpButton.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#endif
 
+#include <QPushButton>
 
 namespace U2 {
 
-DeleteGapsDialog::DeleteGapsDialog(QWidget* parent, int rowNum): QDialog(parent) {
-    setupUi(this);
-    new HelpButton(this, buttonBox, "17467637");
-    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Remove"));
-    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+DeleteGapsDialog::DeleteGapsDialog(QWidget* parent, int rowNum): QDialog(parent), ui(new Ui_DeleteGapsDialog()) {
+    ui->setupUi(this);
+    new HelpButton(this, ui->buttonBox, "17470566");
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Remove"));
+    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    allRadioButton->setChecked(true);
-    absoluteSpinBox->setMinimum(1);
-    absoluteSpinBox->setMaximum(rowNum);
+    ui->allRadioButton->setChecked(true);
+    ui->absoluteSpinBox->setMinimum(1);
+    ui->absoluteSpinBox->setMaximum(rowNum);
 
-    QPushButton *deleteButton = buttonBox->button(QDialogButtonBox::Ok);
-    QPushButton *cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
+    QPushButton *deleteButton = ui->buttonBox->button(QDialogButtonBox::Ok);
+    QPushButton *cancelButton = ui->buttonBox->button(QDialogButtonBox::Cancel);
 
-    connect(absoluteRadioButton, SIGNAL(clicked()), SLOT(sl_onRadioButtonClicked()));
-    connect(relativeRadioButton, SIGNAL(clicked()), SLOT(sl_onRadioButtonClicked()));
-    connect(allRadioButton, SIGNAL(clicked()), SLOT(sl_onRadioButtonClicked()));
+    connect(ui->absoluteRadioButton, SIGNAL(clicked()), SLOT(sl_onRadioButtonClicked()));
+    connect(ui->relativeRadioButton, SIGNAL(clicked()), SLOT(sl_onRadioButtonClicked()));
+    connect(ui->allRadioButton, SIGNAL(clicked()), SLOT(sl_onRadioButtonClicked()));
     connect(deleteButton, SIGNAL(clicked()), SLOT(sl_onOkClicked()));
     connect(cancelButton, SIGNAL(clicked()), SLOT(sl_onCancelClicked()));
 
     sl_onRadioButtonClicked();
 
 }
+DeleteGapsDialog::~DeleteGapsDialog(){
+    delete ui;
+}
 
 void DeleteGapsDialog::sl_onRadioButtonClicked() {
-    absoluteSpinBox->setEnabled(absoluteRadioButton->isChecked());
-    relativeSpinBox->setEnabled(relativeRadioButton->isChecked());
+    ui->absoluteSpinBox->setEnabled(ui->absoluteRadioButton->isChecked());
+    ui->relativeSpinBox->setEnabled(ui->relativeRadioButton->isChecked());
 
-    if (absoluteRadioButton->isChecked()) {
-        absoluteSpinBox->setFocus();
+    if (ui->absoluteRadioButton->isChecked()) {
+        ui->absoluteSpinBox->setFocus();
     }
-    if (relativeRadioButton->isChecked()) {
-        relativeSpinBox->setFocus();
+    if (ui->relativeRadioButton->isChecked()) {
+        ui->relativeSpinBox->setFocus();
     }
 }
 
 void DeleteGapsDialog::sl_onOkClicked() {
-    deleteMode = allRadioButton->isChecked() ? DeleteAll : (relativeRadioButton->isChecked() ? DeleteByRelativeVal : DeleteByAbsoluteVal);
+    deleteMode = ui->allRadioButton->isChecked() ? DeleteAll : (ui->relativeRadioButton->isChecked() ? DeleteByRelativeVal : DeleteByAbsoluteVal);
 
     switch(deleteMode) {
-        case DeleteByAbsoluteVal: value = absoluteSpinBox->value();
+        case DeleteByAbsoluteVal: value = ui->absoluteSpinBox->value();
             break;
-        case DeleteByRelativeVal: value = relativeSpinBox->value();
+        case DeleteByRelativeVal: value = ui->relativeSpinBox->value();
             break;
         default: value = 0;
     }
diff --git a/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.h b/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.h
index 9cbb565..d58c70b 100644
--- a/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.h
+++ b/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.h
@@ -22,8 +22,9 @@
 #ifndef _DELETE_GAPS_DIALOG_
 #define _DELETE_GAPS_DIALOG_
 
-#include "ui/ui_DeleteGapsDialog.h"
+#include <QDialog>
 
+class Ui_DeleteGapsDialog;
 
 namespace U2 {
 
@@ -33,10 +34,11 @@ enum DeleteMode {
     DeleteAll
 };
 
-class DeleteGapsDialog: public QDialog, public Ui_DeleteGapsDialog {
+class DeleteGapsDialog: public QDialog {
     Q_OBJECT
 public:
     DeleteGapsDialog(QWidget* parent, int alignmentLen);
+    ~DeleteGapsDialog();
     DeleteMode getDeleteMode() const {return deleteMode;}
     int getValue() const {return value;}
 private slots:
@@ -47,6 +49,7 @@ private slots:
 private:
     DeleteMode deleteMode;
     int value;
+    Ui_DeleteGapsDialog* ui;
 };
 
 }
diff --git a/src/corelibs/U2View/src/ov_msa/ui/DeleteGapsDialog.ui b/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/DeleteGapsDialog.ui
rename to src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.ui
diff --git a/src/corelibs/U2View/src/ov_msa/ui/MSAExportSettings.ui b/src/corelibs/U2View/src/ov_msa/Export/MSAExportSettings.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/MSAExportSettings.ui
rename to src/corelibs/U2View/src/ov_msa/Export/MSAExportSettings.ui
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/ExportConsensusWidget.ui b/src/corelibs/U2View/src/ov_msa/ExportConsensus/ExportConsensusWidget.ui
new file mode 100644
index 0000000..060d763
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/ExportConsensus/ExportConsensusWidget.ui
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ExportConsensusWidget</class>
+ <widget class="QWidget" name="ExportConsensusWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>215</width>
+    <height>442</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="spacing">
+    <number>18</number>
+   </property>
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <property name="spacing">
+      <number>1</number>
+     </property>
+     <item row="0" column="0">
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Export to file</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLineEdit" name="pathLe"/>
+     </item>
+     <item row="1" column="1">
+      <widget class="QToolButton" name="browseBtn">
+       <property name="text">
+        <string>...</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QGridLayout" name="gridLayout_2">
+     <property name="verticalSpacing">
+      <number>1</number>
+     </property>
+     <item row="0" column="0">
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>File format</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QComboBox" name="formatCb"/>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <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>
+       </property>
+       <property name="wordWrap">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item alignment="Qt::AlignHCenter">
+    <widget class="QToolButton" name="exportBtn">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>198</width>
+       <height>23</height>
+      </size>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>198</width>
+       <height>16777215</height>
+      </size>
+     </property>
+     <property name="sizeIncrement">
+      <size>
+       <width>0</width>
+       <height>37</height>
+      </size>
+     </property>
+     <property name="text">
+      <string>Export</string>
+     </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>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp
index 81b9bb8..78a66b1 100644
--- a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp
+++ b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp
@@ -26,15 +26,17 @@
 #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 <U2Core/TaskWatchdog.h>
+
+#include <U2Formats/DocumentFormatUtils.h>
 
 #include <U2Gui/DialogUtils.h>
-#include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/ShowHideSubgroupWidget.h>
-#include <U2Gui/U2FileDialog.h>
 #include <U2Gui/U2WidgetStateStorage.h>
 
 #include <U2View/MSAEditor.h>
@@ -47,69 +49,43 @@
 namespace U2 {
 
 MSAExportConsensusTab::MSAExportConsensusTab(MSAEditor* msa_)
-    : msa(msa_), savableWidget(this, GObjectViewUtils::findViewByName(msa_->getName()))
+    : msa(msa_),
+      savableWidget(this, GObjectViewUtils::findViewByName(msa_->getName())),
+      saveController(NULL)
 {
     setupUi(this);
 
     hintLabel->setStyleSheet("color: green; font: bold;");
 
-    DocumentFormatRegistry *dfr = AppContext::getDocumentFormatRegistry();
-    pathLe->setText(AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath() + QDir::separator()
-        + msa->getMSAObject()->getGObjectName() + "_consensus.txt");
-
-    formatCb->addItem(dfr->getFormatById(BaseDocumentFormats::PLAIN_TEXT)->getFormatName(), BaseDocumentFormats::PLAIN_TEXT);
+    initSaveController();
 
     MSAEditorConsensusArea *consensusArea = msa->getUI()->getConsensusArea();
     showHint(true);
 
-    sl_consensusChanged(consensusArea->getConsensusAlgorithm()->getId());
-
-    connect(browseBtn, SIGNAL(clicked()), SLOT(sl_browseClicked()));
     connect(exportBtn, SIGNAL(clicked()), SLOT(sl_exportClicked()));
-    connect(formatCb, SIGNAL(currentIndexChanged(const QString &)), SLOT(sl_formatChanged()));
     connect(consensusArea, SIGNAL(si_consensusAlgorithmChanged(const QString &)), SLOT(sl_consensusChanged(const QString &)));
 
     U2WidgetStateStorage::restoreWidgetState(savableWidget);
+    sl_consensusChanged(consensusArea->getConsensusAlgorithm()->getId());
 }
 
-void MSAExportConsensusTab::sl_browseClicked() {
-    LastUsedDirHelper h;
-    DocumentFormatId id = formatCb->itemData(formatCb->currentIndex()).toString();
-    QString fileName = U2FileDialog::getSaveFileName(NULL, tr("Save file"), h.dir, DialogUtils::prepareDocumentsFileFilter(id, false));
-    if (!fileName.isEmpty()) {
-        pathLe->setText(fileName);
+void MSAExportConsensusTab::sl_exportClicked(){
+    if (saveController->getSaveFileName().isEmpty()) {
+        saveController->setPath(getDefaultFilePath());
     }
-}
 
-void MSAExportConsensusTab::sl_exportClicked(){
-    checkEmptyFilepath();
     ExportMSAConsensusTaskSettings settings;
-    settings.format = formatCb->itemData(formatCb->currentIndex()).toString();
+    settings.format = saveController->getFormatIdToSave();
     settings.keepGaps = keepGapsChb->isChecked() || keepGapsChb->isHidden();
     settings.msa = msa;
     settings.name = msa->getMSAObject()->getGObjectName() + "_consensus";
+    settings.url = saveController->getSaveFileName();
 
-    settings.url = pathLe->text();
     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::sl_formatChanged(){
-    if (pathLe->text().isEmpty()) {
-        return;
-    }
-
-    DocumentFormatId id = formatCb->itemData(formatCb->currentIndex()).toString();
-    DocumentFormatRegistry *dfr = AppContext::getDocumentFormatRegistry();
-    DocumentFormat *df = dfr->getFormatById(id);
-    SAFE_POINT(df, "Cant get document format by id", );
-    QString fileExt = df->getSupportedDocumentFileExtensions().first();
-    GUrl url =  pathLe->text();
-    pathLe->setText(QDir::toNativeSeparators(QString( QString("%1") + QDir::separator() + QString("%2.%3") )
-        .arg(url.dirPath()).arg(url.baseFileName()).arg(fileExt)));
-}
-
 void MSAExportConsensusTab::showHint( bool showHint ){
     if (showHint){
         hintLabel->show();
@@ -123,38 +99,47 @@ void MSAExportConsensusTab::showHint( bool showHint ){
 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
-            DocumentFormatRegistry *dfr = AppContext::getDocumentFormatRegistry();
-            formatCb->addItem(dfr->getFormatById(BaseDocumentFormats::PLAIN_GENBANK)->getFormatName(), BaseDocumentFormats::PLAIN_GENBANK);
-            formatCb->addItem(dfr->getFormatById(BaseDocumentFormats::FASTA)->getFormatName(), BaseDocumentFormats::FASTA);
-            showHint(false);
-        }else{
+
+    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", );
         }
-    }else{
-        if(formatCb->count() == 3 ){ //all possible formats
-            formatCb->setCurrentIndex(formatCb->findText(BaseDocumentFormats::PLAIN_TEXT));
-            formatCb->removeItem(formatCb->findText(BaseDocumentFormats::FASTA));
-            formatCb->removeItem(formatCb->findText(BaseDocumentFormats::PLAIN_GENBANK));
-            showHint(true);
-        }else{
+        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::checkEmptyFilepath() const {
-    if(pathLe->text().isEmpty()) {
-        DocumentFormatId id = formatCb->itemData(formatCb->currentIndex()).toString();
-        DocumentFormatRegistry *dfr = AppContext::getDocumentFormatRegistry();
-        DocumentFormat *df = dfr->getFormatById(id);
-        SAFE_POINT(df, "Cant get document format by id", );
-        QString fileExt = df->getSupportedDocumentFileExtensions().first();
+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);
+}
 
-        pathLe->setText(AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath() + QDir::separator()
-            + msa->getMSAObject()->getGObjectName() + "_consensus." + fileExt);
-    }
+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
index d95807b..bfb68fb 100644
--- a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.h
+++ b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.h
@@ -24,11 +24,12 @@
 
 #include <U2Gui/U2SavableWidget.h>
 
-#include "ui/ui_ExportConsensusWidget.h"
+#include "ui_ExportConsensusWidget.h"
 
 namespace U2 {
 
 class MSAEditor;
+class SaveDocumentController;
 
 class MSAExportConsensusTab : public QWidget, private Ui_ExportConsensusWidget {
     Q_OBJECT
@@ -38,14 +39,16 @@ public:
     void showHint(bool showHint);
 
 private slots:
-    void sl_browseClicked();
     void sl_exportClicked();
-    void sl_formatChanged();
     void sl_consensusChanged(const QString& algoId);
+
 private:
-    void checkEmptyFilepath() const;
+    void initSaveController();
+    QString getDefaultFilePath() const;
+
     MSAEditor *msa;
     U2SavableWidget savableWidget;
+    SaveDocumentController *saveController;
 };
 
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp
index 8bb8d59..456438c 100644
--- a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp
+++ b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp
@@ -34,7 +34,7 @@ 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 = "17467628";
+const QString MSAExportConsensusFactoryTab::GROUP_DOC_PAGE = "17470557";
 
 MSAExportConsensusFactoryTab::MSAExportConsensusFactoryTab() {
     objectViewOfWidget = ObjViewType_AlignmentEditor;
diff --git a/src/corelibs/U2View/src/ov_msa/ui/ExportHighlightedDialog.ui b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/ExportHighlightedDialog.ui
rename to src/corelibs/U2View/src/ov_msa/ExportHighlightedDialog.ui
diff --git a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp
index 1350d29..743ccdd 100644
--- a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp
@@ -19,41 +19,44 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#endif
-
-#include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/U2FileDialog.h>
+#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/UserApplicationsSettings.h>
 
+#include <U2Gui/HelpButton.h>
+#include <U2Gui/SaveDocumentController.h>
+
 #include "ExportHighlightedDialogController.h"
 #include "ov_msa/MSAEditorSequenceArea.h"
 
 namespace U2{
 
-ExportHighligtningDialogController::ExportHighligtningDialogController(MSAEditorUI *msaui_, QWidget* p ): QDialog(p), msaui(msaui_){
-    setupUi(this);
-    new HelpButton(this, buttonBox, "17467629");
-    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
-    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+ExportHighligtingDialogController::ExportHighligtingDialogController(MSAEditorUI *msaui_, QWidget* p )
+    : QDialog(p),
+      msaui(msaui_),
+      saveController(NULL),
+      ui(new Ui_ExportHighlightedDialog())
+{
+    ui->setupUi(this);
+    new HelpButton(this, ui->buttonBox, "17470558");
+
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
+    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+
     CHECK(AppContext::getAppSettings(), );
     CHECK(AppContext::getAppSettings()->getUserAppsSettings(), );
     CHECK(msaui->getEditor(), );
     CHECK(msaui->getEditor()->getMSAObject(), );
-    fileNameEdit->setText(QDir::toNativeSeparators(AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath() + "/" + msaui->getEditor()->getMSAObject()->getGObjectName() + "_highlighting.txt"));
 
-    connect(fileButton, SIGNAL(clicked()), SLOT(sl_fileButtonClicked()));
-    connect(endPosBox, SIGNAL(valueChanged(int)), SLOT(endPosValueChanged()));
+    initSaveController();
+
+    connect(ui->endPosBox, SIGNAL(valueChanged(int)), SLOT(endPosValueChanged()));
 
     int alignLength = msaui->getEditor()->getMSAObject()->getLength();
     QRect selection = msaui->getSequenceArea()->getSelection().getRect();
@@ -68,51 +71,60 @@ ExportHighligtningDialogController::ExportHighligtningDialogController(MSAEditor
         endPos = selection.x() + selection.width();
     }
 
-    startPosBox->setMaximum(endPos);
-    endPosBox->setMaximum(alignLength);
-
-    startPosBox->setMinimum(1);
-    endPosBox->setMinimum(2);
+    ui->startPosBox->setMaximum(endPos);
+    ui->endPosBox->setMaximum(alignLength);
 
-    startPosBox->setValue(startPos);
-    endPosBox->setValue(endPos);
+    ui->startPosBox->setMinimum(1);
+    ui->endPosBox->setMinimum(2);
 
+    ui->startPosBox->setValue(startPos);
+    ui->endPosBox->setValue(endPos);
+}
+ExportHighligtingDialogController::~ExportHighligtingDialogController(){
+    delete ui;
 }
 
-void ExportHighligtningDialogController::accept(){
-    startPos = startPosBox->value();
-    endPos = endPosBox->value();
-    if(oneIndexRB->isChecked()){
+void ExportHighligtingDialogController::accept(){
+    startPos = ui->startPosBox->value();
+    endPos = ui->endPosBox->value();
+    if(ui->oneIndexRB->isChecked()){
         startingIndex = 1;
     }else{
         startingIndex = 0;
     }
-    if(fileNameEdit->text().isEmpty()){
+    if (saveController->getSaveFileName().isEmpty()){
         QMessageBox::warning(this, tr("Warning"), tr("Export to file URL is empty!"));
         return;
     }
-    keepGaps = keepGapsBox->isChecked();
-    dots = dotsBox->isChecked();
-    transpose = transposeBox->isChecked();
-    url = GUrl(fileNameEdit->text());
+    keepGaps = ui->keepGapsBox->isChecked();
+    dots = ui->dotsBox->isChecked();
+    transpose = ui->transposeBox->isChecked();
+    url = GUrl(saveController->getSaveFileName());
 
     QDialog::accept();
 }
 
-void ExportHighligtningDialogController::sl_fileButtonClicked(){
-    LastUsedDirHelper h;
-
-    h.url = U2FileDialog::getSaveFileName(this, tr("Select file to save..."), h.dir);
-    fileNameEdit->setText(h.url);
+void ExportHighligtingDialogController::lockKeepGaps(){
+    ui->keepGapsBox->setChecked(true);
+    ui->keepGapsBox->setDisabled(true);
 }
 
-void ExportHighligtningDialogController::lockKeepGaps(){
-    keepGapsBox->setChecked(true);
-    keepGapsBox->setDisabled(true);
+void ExportHighligtingDialogController::endPosValueChanged(){
+    ui->startPosBox->setMaximum(ui->endPosBox->value() - 1);
 }
 
-void ExportHighligtningDialogController::endPosValueChanged(){
-    startPosBox->setMaximum(endPosBox->value() - 1);
+void ExportHighligtingDialogController::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = GUrlUtils::getDefaultDataPath() + "/" + msaui->getEditor()->getMSAObject()->getGObjectName() + "_highlighting.txt";
+    config.defaultFormatId = BaseDocumentFormats::PLAIN_TEXT;
+    config.fileDialogButton = ui->fileButton;
+    config.fileNameEdit = ui->fileNameEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file to save...");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::PLAIN_TEXT;
+
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
 }
diff --git a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.h b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.h
index 3685cd2..cb4b2f4 100644
--- a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.h
+++ b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.h
@@ -19,19 +19,24 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_EXPORT_HIGHLIGHTNING_DIALOG_CONTROLLER_H_
-#define _U2_EXPORT_HIGHLIGHTNING_DIALOG_CONTROLLER_H_
+#ifndef _U2_EXPORT_HIGHLIGHTING_DIALOG_CONTROLLER_H_
+#define _U2_EXPORT_HIGHLIGHTING_DIALOG_CONTROLLER_H_
 
-#include <ui/ui_ExportHighlightedDialog.h>
+#include <QDialog>
 
 #include "MSAEditor.h"
 
+class Ui_ExportHighlightedDialog;
+
 namespace U2 {
 
-class ExportHighligtningDialogController : public QDialog , Ui_ExportHighlightedDialog{
+class SaveDocumentController;
+
+class ExportHighligtingDialogController : public QDialog{
     Q_OBJECT
 public:
-    ExportHighligtningDialogController(MSAEditorUI *msaui_, QWidget* p);
+    ExportHighligtingDialogController(MSAEditorUI *msaui_, QWidget* p);
+    ~ExportHighligtingDialogController();
 
     virtual void accept();
     void lockKeepGaps();
@@ -45,10 +50,14 @@ public:
     GUrl url;
 
 private slots:
-    void sl_fileButtonClicked();
     void endPosValueChanged();
+
 private:
+    void initSaveController();
+
     MSAEditorUI *msaui;
+    SaveDocumentController *saveController;
+    Ui_ExportHighlightedDialog* ui;
 };
 
 }
diff --git a/src/corelibs/U2View/src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui b/src/corelibs/U2View/src/ov_msa/General/GeneralTabOptionsPanelWidget.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui
rename to src/corelibs/U2View/src/ov_msa/General/GeneralTabOptionsPanelWidget.ui
diff --git a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.h b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.h
index a9d8b0c..3c73266 100644
--- a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.h
+++ b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.h
@@ -22,7 +22,7 @@
 #ifndef _U2_MSA_GENERAL_TAB_H_
 #define _U2_MSA_GENERAL_TAB_H_
 
-#include "ui/ui_GeneralTabOptionsPanelWidget.h"
+#include "ui_GeneralTabOptionsPanelWidget.h"
 
 #include "../MsaOpSavableTab.h"
 
diff --git a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.cpp b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.cpp
index eaf8f54..b81901c 100644
--- a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.cpp
+++ b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.cpp
@@ -34,7 +34,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 = "17467627";
+const QString MSAGeneralTabFactory::GROUP_DOC_PAGE = "17470556";
 
 MSAGeneralTabFactory::MSAGeneralTabFactory() {
     objectViewOfWidget = ObjViewType_AlignmentEditor;
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.cpp b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.cpp
index 1855008..0be0443 100644
--- a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.cpp
@@ -19,11 +19,22 @@
  * MA 02110-1301, USA.
  */
 
+#include <QCheckBox>
+#include <QComboBox>
+#include <QLabel>
+#include <QRadioButton>
+#include <QToolButton>
+#include <QVBoxLayout>
+
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
 
 #include <U2Gui/ShowHideSubgroupWidget.h>
 #include <U2Gui/U2WidgetStateStorage.h>
 
-#include <U2Algorithm/MSAColorScheme.h>
 #include <U2View/MSAEditor.h>
 #include <U2View/MSAEditorSequenceArea.h>
 
@@ -148,14 +159,20 @@ MSAHighlightingTab::MSAHighlightingTab(MSAEditor* m)
 
     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(seqArea, SIGNAL(si_highlightingChanged()), SLOT(sl_sync()));
 
-    connect(seqArea, SIGNAL(si_highlightingAndColorActionsChanged()), SLOT(sl_actionsChanged()));
+    MsaColorSchemeRegistry *msaColorSchemeRegistry = AppContext::getMsaColorSchemeRegistry();
+    connect(msaColorSchemeRegistry, SIGNAL(si_customSettingsChanged()), SLOT(sl_customSchemesListChanged()));
 
     connect(m, SIGNAL(si_referenceSeqChanged(qint64)), SLOT(sl_updateHint()));
+    connect(m->getMSAObject(), SIGNAL(si_alphabetChanged(MAlignmentModInfo, const DNAAlphabet *)), SLOT(sl_customSchemesListChanged()));
 
+    connect(highlightingScheme, 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()));
@@ -165,43 +182,57 @@ MSAHighlightingTab::MSAHighlightingTab(MSAEditor* m)
     sl_highlightingParametersChanged();
 }
 
-void MSAHighlightingTab::initColorCB(){
-    disconnect(colorScheme, 0, 0, 0);
-    disconnect(highlightingScheme, 0, 0, 0);
+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();
-    colorScheme->addItems(seqArea->getAvailableColorSchemes());
+    foreach (MsaColorSchemeFactory *factory, colorSchemesFactories) {
+        colorScheme->addItem(factory->getName());
+    }
+
+    MsaHighlightingSchemeRegistry *msaHighlightingSchemeRegistry = AppContext::getMsaHighlightingSchemeRegistry();
+    QList<MsaHighlightingSchemeFactory *> highlightingSchemesFactories = msaHighlightingSchemeRegistry->getMsaHighlightingSchemes(msa->getMSAObject()->getAlphabet()->getType());
 
     highlightingScheme->clear();
-    highlightingScheme->addItems(seqArea->getAvailableHighlightingSchemes());
-    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(highlightingScheme, SIGNAL(currentIndexChanged(const QString &)), SLOT(sl_updateHint()));
-}
+    foreach (MsaHighlightingSchemeFactory *factory, highlightingSchemesFactories) {
+        highlightingScheme->addItem(factory->getName());
+    }
 
-void MSAHighlightingTab::sl_sync(){
-    customColorSchemesChangeCheck();
+    colorScheme->blockSignals(false);
+    highlightingScheme->blockSignals(false);
+}
 
-    MSAColorScheme *s = seqArea->getCurrentColorScheme();
+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);
 
-    MSAHighlightingScheme *sh = seqArea->getCurrentHighlightingScheme();
+    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->setCurrentIndex(highlightingScheme->findText(sh->getFactory()->getName()));
 
+    highlightingScheme->blockSignals(true);
+    highlightingScheme->setCurrentIndex(highlightingScheme->findText(sh->getFactory()->getName()));
+    highlightingScheme->blockSignals(false);
 
-    disconnect(useDots, SIGNAL(stateChanged(int)), seqArea, SLOT(sl_doUseDots())); //disconnect-connect to prevent infinite loop
+    useDots->blockSignals(true);
     useDots->setChecked(seqArea->getUseDotsCheckedState());
-    connect(useDots, SIGNAL(stateChanged(int)), seqArea, SLOT(sl_doUseDots()));
+    useDots->blockSignals(false);
+
     sl_updateHint();
 }
 
 void MSAHighlightingTab::sl_updateHint() {
-    MSAHighlightingScheme *s = seqArea->getCurrentHighlightingScheme();
+    MsaHighlightingScheme *s = seqArea->getCurrentHighlightingScheme();
     SAFE_POINT(s->getFactory() != NULL, "Highlighting factory is NULL!", );
 
     QVariantMap highlightingSettings;
@@ -212,14 +243,14 @@ void MSAHighlightingTab::sl_updateHint() {
         thresholdMoreRb->show();
         lessMoreLabel->show();
         bool ok = false;
-        int thresholdValue = s->getSettings().value(MSAHighlightingScheme::THRESHOLD_PARAMETER_NAME).toInt(&ok);
+        int thresholdValue = s->getSettings().value(MsaHighlightingScheme::THRESHOLD_PARAMETER_NAME).toInt(&ok);
         assert(ok);
         thresholdSlider->setValue(thresholdValue);
-        bool lessThenThreshold = s->getSettings().value(MSAHighlightingScheme::LESS_THEN_THRESHOLD_PARAMETER_NAME, thresholdLessRb->isChecked()).toBool();
+        bool lessThenThreshold = s->getSettings().value(MsaHighlightingScheme::LESS_THAN_THRESHOLD_PARAMETER_NAME, thresholdLessRb->isChecked()).toBool();
         thresholdLessRb->setChecked(lessThenThreshold);
         thresholdMoreRb->setChecked(!lessThenThreshold);
-        highlightingSettings.insert(MSAHighlightingScheme::THRESHOLD_PARAMETER_NAME, thresholdValue);
-        highlightingSettings.insert(MSAHighlightingScheme::LESS_THEN_THRESHOLD_PARAMETER_NAME, lessThenThreshold);
+        highlightingSettings.insert(MsaHighlightingScheme::THRESHOLD_PARAMETER_NAME, thresholdValue);
+        highlightingSettings.insert(MsaHighlightingScheme::LESS_THAN_THRESHOLD_PARAMETER_NAME, lessThenThreshold);
     }else{
         thresholdLabel->hide();
         thresholdSlider->hide();
@@ -253,24 +284,16 @@ void MSAHighlightingTab::sl_exportHighlightningClicked(){
 void MSAHighlightingTab::sl_highlightingParametersChanged() {
     QVariantMap highlightingSettings;
     thresholdLabel->setText(tr("Threshold: %1%").arg(thresholdSlider->value()));
-    MSAHighlightingScheme *s = seqArea->getCurrentHighlightingScheme();
-    highlightingSettings.insert(MSAHighlightingScheme::THRESHOLD_PARAMETER_NAME, thresholdSlider->value());
-    highlightingSettings.insert(MSAHighlightingScheme::LESS_THEN_THRESHOLD_PARAMETER_NAME, thresholdLessRb->isChecked());
+    MsaHighlightingScheme *s = seqArea->getCurrentHighlightingScheme();
+    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());
 }
 
-void MSAHighlightingTab::sl_actionsChanged() {
+void MSAHighlightingTab::sl_customSchemesListChanged() {
     initColorCB();
     sl_sync();
 }
 
-void MSAHighlightingTab::customColorSchemesChangeCheck() {
-    if (seqArea->getAvailableColorSchemes().size() != colorScheme->count()) {
-        disconnect(colorScheme, SIGNAL(currentIndexChanged(const QString &)), seqArea, SLOT(sl_changeColorSchemeOutside(const QString &)));
-        initColorCB();
-        connect(colorScheme, SIGNAL(currentIndexChanged(const QString &)), seqArea, SLOT(sl_changeColorSchemeOutside(const QString &)));
-    }
-}
-
 }//ns
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.h b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.h
index bf15107..7a20c72 100644
--- a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.h
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.h
@@ -53,13 +53,12 @@ private slots:
     void sl_updateHint();
     void sl_exportHighlightningClicked();
     void sl_highlightingParametersChanged();
-    void sl_actionsChanged();
+    void sl_customSchemesListChanged();
 
 private:
     QWidget* createColorGroup();
     QWidget* createHighlightingGroup();
     void initColorCB();
-    void customColorSchemesChangeCheck();
 
     MSAEditor *msa;
     MSAEditorSequenceArea *seqArea;
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp
index 88c0a11..bf53925 100644
--- a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp
@@ -32,7 +32,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 = "17467629";
+const QString MSAHighlightingFactory::GROUP_DOC_PAGE = "17470558";
 
 MSAHighlightingFactory::MSAHighlightingFactory() {
     objectViewOfWidget = ObjViewType_AlignmentEditor;
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditor.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditor.cpp
index aceba2a..496b6ef 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditor.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditor.cpp
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <QApplication>
 #include <QEvent>
 #include <QFontDialog>
 #include <QGridLayout>
@@ -33,6 +34,8 @@
 
 #include <U2Algorithm/MSADistanceAlgorithm.h>
 #include <U2Algorithm/MSADistanceAlgorithmRegistry.h>
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
 #include <U2Algorithm/PairwiseAlignmentTask.h>
 #include <U2Algorithm/PhyTreeGeneratorRegistry.h>
 
@@ -52,13 +55,14 @@
 #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 <U2Core/TaskWatchdog.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/ExportDocumentDialogController.h>
@@ -68,20 +72,20 @@
 #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/ProjectView.h>
-#include <U2Core/QObjectScopedPointer.h>
 #include <U2Gui/U2FileDialog.h>
 
-#include <U2Algorithm/MSAColorScheme.h>
 #include <U2View/UndoRedoFramework.h>
 
+#include "AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h"
+#include "Export/MSAImageExportTask.h"
 #include "ExportHighlightedDialogController.h"
 #include "MSAEditor.h"
 #include "MSAEditorConsensusArea.h"
-#include "MsaEditorSimilarityColumn.h"
 #include "MSAEditorFactory.h"
 #include "MSAEditorNameList.h"
 #include "MSAEditorOffsetsView.h"
@@ -91,10 +95,9 @@
 #include "MSAEditorStatusBar.h"
 #include "MSAEditorTasks.h"
 #include "MSAEditorUndoFramework.h"
+#include "MsaEditorSimilarityColumn.h"
 #include "PhyTrees/MSAEditorMultiTreeViewer.h"
 #include "PhyTrees/MSAEditorTreeViewer.h"
-#include "AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h"
-#include "Export/MSAImageExportTask.h"
 #include "ov_msa/TreeOptions//TreeOptionsWidgetFactory.h"
 #include "ov_phyltree/TreeViewer.h"
 #include "ov_phyltree/TreeViewerTasks.h"
@@ -783,6 +786,7 @@ void MSAEditor::alignSequencesFromObjectsToAlignment(const QList<GObject*>& obje
 
     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."));
         AppContext::getTaskScheduler()->registerTopLevelTask(task);
     }
 }
@@ -793,7 +797,7 @@ void MSAEditor::alignSequencesFromFilesToAlignment() {
     LastUsedDirHelper lod;
     QStringList urls;
 #ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         urls = U2FileDialog::getOpenFileNames(ui, tr("Open file with sequences"), lod.dir, filter, 0, QFileDialog::DontUseNativeDialog );
     } else
 #endif
@@ -802,6 +806,7 @@ 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."));
         AppContext::getTaskScheduler()->registerTopLevelTask(task);
     }
 }
@@ -874,7 +879,7 @@ void MSAEditor::resetCollapsibleModel() {
 }
 
 void MSAEditor::sl_exportHighlighted(){
-    QObjectScopedPointer<ExportHighligtningDialogController> d = new ExportHighligtningDialogController(ui, (QWidget*)AppContext::getMainWindow()->getQMainWindow());
+    QObjectScopedPointer<ExportHighligtingDialogController> d = new ExportHighligtingDialogController(ui, (QWidget*)AppContext::getMainWindow()->getQMainWindow());
     d->exec();
     CHECK(!d.isNull(), );
 
@@ -1239,12 +1244,8 @@ void SinchronizedObjectView::removeObject( QWidget *obj )
         widgetSizes[i] = widgetSizes[i] * baseSize / widgetsWidth;
     }
     foreach(QWidget *curObj, objects) {
-        disconnect(obj,     SIGNAL(si_selectionChanged(const QList<QString>&)), curObj, SLOT(sl_selectionChanged(const QList<QString>&)));
-        disconnect(obj,    SIGNAL(si_aligmentChanged(const QList<QString>&)),   curObj, SLOT(sl_aligmentChanged(const QList<QString>&)));
-        disconnect(obj,    SIGNAL(si_zoomChanged(double)),                      curObj, SLOT(sl_zoomChanged(double)));
-        disconnect(curObj, SIGNAL(si_selectionChanged(const QList<QString>&)),  obj,    SLOT(sl_selectionChanged(const QList<QString>&)));
-        disconnect(curObj, SIGNAL(si_aligmentChanged(const QList<QString>&)),   obj,    SLOT(sl_aligmentChanged(const QList<QString>&)));
-        disconnect(curObj, SIGNAL(sl_zoomChanged(double)),                      obj,    SLOT(si_zoomChanged(double)));
+        curObj->disconnect(obj);
+        obj->disconnect(curObj);
     }
     objects.removeAll(obj);
     obj->setParent(NULL);
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorFactory.h b/src/corelibs/U2View/src/ov_msa/MSAEditorFactory.h
index d803963..094b8d2 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorFactory.h
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorFactory.h
@@ -27,7 +27,7 @@
 namespace U2 {
 
 class MultiGSelection;
-class MSAColorSchemeRegistry;
+class MsaColorSchemeRegistry;
 
 class U2VIEW_EXPORT MSAEditorFactory : public GObjectViewFactory {
     Q_OBJECT
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp
index 38f1d2f..a101bb7 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp
@@ -28,7 +28,9 @@
 #include <QTextStream>
 
 #include <U2Algorithm/CreateSubalignmentTask.h>
-#include <U2Algorithm/MSAColorScheme.h>
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
+
 #include <U2Core/AddSequencesToAlignmentTask.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/ClipboardController.h>
@@ -39,6 +41,7 @@
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
+#include <U2Core/L10n.h>
 #include <U2Core/MAlignment.h>
 #include <U2Core/MAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
@@ -57,7 +60,9 @@
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2SequenceUtils.h>
+
 #include <U2Formats/DocumentFormatUtils.h>
+
 #include <U2Gui/AppSettingsGUI.h>
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/GUIUtils.h>
@@ -65,21 +70,19 @@
 #include <U2Gui/MainWindow.h>
 #include <U2Gui/Notification.h>
 #include <U2Gui/OPWidgetFactory.h>
-#include <U2Gui/OPWidgetFactory.h>
-#include <U2Gui/OptionsPanel.h>
 #include <U2Gui/OptionsPanel.h>
 #include <U2Gui/PositionSelector.h>
 #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 "MSAEditor.h"
 #include "MSAEditorNameList.h"
 #include "MSAEditorSequenceArea.h"
-#include "Clipboard/SubalignmentToClipboardTask.h"
 
 namespace U2 {
 
@@ -224,13 +227,6 @@ MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, G
     connect(undoAction, SIGNAL(triggered()), SLOT(sl_resetCollapsibleModel()));
     connect(redoAction, SIGNAL(triggered()), SLOT(sl_resetCollapsibleModel()));
 
-    MSAColorSchemeRegistry* csr = AppContext::getMSAColorSchemeRegistry();
-    connect(csr, SIGNAL(si_customSettingsChanged()), SLOT(sl_customColorSettingsChanged()));
-
-    useDotsAction = new QAction(tr("Use dots"), this);
-    useDotsAction->setCheckable(true);
-    useDotsAction->setChecked(false);
-    connect(useDotsAction, SIGNAL(triggered()), SLOT(sl_useDots()));
     connect(editor->getMSAObject(), SIGNAL(si_alphabetChanged(const MAlignmentModInfo &, const DNAAlphabet*)),
         SLOT(sl_alphabetChanged(const MAlignmentModInfo &, const DNAAlphabet*)));
 
@@ -242,7 +238,6 @@ MSAEditorSequenceArea::~MSAEditorSequenceArea() {
     exitFromEditCharacterMode();
     delete cachedView;
     deleteOldCustomSchemes();
-    delete colorScheme;
     delete highlightingScheme;
 }
 
@@ -264,11 +259,11 @@ void MSAEditorSequenceArea::updateColorAndHighlightSchemes() {
     DNAAlphabetType atype = al->getType();
     DNAAlphabetType currentAlphabet = DNAAlphabet_RAW;
     bool colorSchemesActionsIsEmpty = colorSchemeMenuActions.isEmpty();
-    MSAColorSchemeRegistry* csr = AppContext::getMSAColorSchemeRegistry();
-    MSAHighlightingSchemeRegistry* hsr = AppContext::getMSAHighlightingSchemeRegistry();
+    MsaColorSchemeRegistry* csr = AppContext::getMsaColorSchemeRegistry();
+    MsaHighlightingSchemeRegistry* hsr = AppContext::getMsaHighlightingSchemeRegistry();
     if (!colorSchemesActionsIsEmpty) {
         QString id = colorSchemeMenuActions.first()->data().toString();
-        MSAColorSchemeFactory* f = csr->getMSAColorSchemeFactoryById(id);
+        MsaColorSchemeFactory* f = csr->getMsaColorSchemeFactoryById(id);
         currentAlphabet = f->getAlphabetType();
         if (currentAlphabet == atype) {
             return;
@@ -278,77 +273,69 @@ void MSAEditorSequenceArea::updateColorAndHighlightSchemes() {
     QString csid;
     QString hsid;
     getColorAndHighlightingIds(csid, hsid, atype, colorSchemesActionsIsEmpty);
-    MSAColorSchemeFactory* csf = csr->getMSAColorSchemeFactoryById(csid);
+    MsaColorSchemeFactory* csf = csr->getMsaColorSchemeFactoryById(csid);
     if (csf == NULL) {
-        switch (atype) {
-        case DNAAlphabet_RAW:
-            csf = csr->getMSAColorSchemeFactoryById(MSAColorScheme::EMPTY_RAW);
-            break;
-        case DNAAlphabet_NUCL:
-            csf = csr->getMSAColorSchemeFactoryById(MSAColorScheme::UGENE_NUCL);
-            break;
-        case DNAAlphabet_AMINO:
-            csf = csr->getMSAColorSchemeFactoryById(MSAColorScheme::UGENE_AMINO);
-            break;
-        default:
-            FAIL(tr("Unknown alphabet"), );
-            break;
-        }
+        csf = getDefaultColorSchemeFactory();
     }
-    SAFE_POINT(csf!=NULL, "Color scheme factory is NULL", );
-    MSAHighlightingSchemeFactory* hsf = hsr->getMSAHighlightingSchemeFactoryById(hsid);
-    initColorSchemes(csf, atype);
-    initCustomSchemeActions(csf, atype);
+    SAFE_POINT(csf != NULL, "Color scheme factory is NULL", );
+    MsaHighlightingSchemeFactory* hsf = hsr->getMsaHighlightingSchemeFactoryById(hsid);
+    initColorSchemes(csf);
     initHighlightSchemes(hsf, atype);
-
-    emit si_highlightingAndColorActionsChanged();
 }
 
-void MSAEditorSequenceArea::initHighlightSchemes(MSAHighlightingSchemeFactory* hsf, DNAAlphabetType 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();
-    if (highlightingScheme != NULL) {
-        delete highlightingScheme;
-    }
+    delete highlightingScheme;
+
     highlightingScheme = hsf->create(this, maObj);
-    MSAHighlightingSchemeRegistry* hsr = AppContext::getMSAHighlightingSchemeRegistry();
-    QList<MSAHighlightingSchemeFactory*> highFactories = hsr->getMSAHighlightingSchemes(atype);
-    foreach(MSAHighlightingSchemeFactory* f, highFactories) {
-        QAction* action = new QAction(f->getName(), this);
-        action->setObjectName(f->getName());
+
+    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(f == hsf);
-        action->setData(f->getId());
+        action->setChecked(factory == hsf);
+        action->setData(factory->getId());
         connect(action, SIGNAL(triggered()), SLOT(sl_changeHighlightScheme()));
         highlightingSchemeMenuActions.append(action);
     }
 }
 
-void MSAEditorSequenceArea::initColorSchemes(MSAColorSchemeFactory* csf, DNAAlphabetType atype) {
+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();
-    MAlignmentObject* maObj = editor->getMSAObject();
-    if (colorScheme != NULL) {
-        delete colorScheme;
-    }
-    colorScheme = csf->create(this, maObj);
-    MSAColorSchemeRegistry* csr = AppContext::getMSAColorSchemeRegistry();
-    QList<MSAColorSchemeFactory*> colorFactories = csr->getMSAColorSchemes(atype);
-    foreach(MSAColorSchemeFactory* f, colorFactories) {
-        QAction* action = new QAction(f->getName(), this);
-        action->setObjectName(f->getName());
+
+    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->setChecked(f == csf);
-        action->setData(f->getId());
+        action->setData(factory->getId());
         connect(action, SIGNAL(triggered()), SLOT(sl_changeColorScheme()));
         colorSchemeMenuActions.append(action);
     }
-    useDotsAction = new QAction(QString(tr("Use dots")), this);
-    useDotsAction->setCheckable(true);
-    useDotsAction->setChecked(false);
-    connect(useDotsAction, SIGNAL(triggered()), SLOT(sl_useDots()));
 }
 
 void MSAEditorSequenceArea::getColorAndHighlightingIds(QString &csid, QString &hsid, DNAAlphabetType atype, bool isFirstInitialization) {
@@ -356,29 +343,29 @@ void MSAEditorSequenceArea::getColorAndHighlightingIds(QString &csid, QString &h
     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();
+            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;
+            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();
+            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;
+            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();
+            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;
+            csid = MsaColorScheme::UGENE_AMINO;
+            hsid = MsaHighlightingScheme::EMPTY_AMINO;
         }
         break;
     default:
@@ -388,35 +375,55 @@ void MSAEditorSequenceArea::getColorAndHighlightingIds(QString &csid, QString &h
     }
 }
 
-void MSAEditorSequenceArea::initCustomSchemeActions(MSAColorSchemeFactory* csf, DNAAlphabetType atype) {
-    deleteOldCustomSchemes();
+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());
 
-    MSAColorSchemeRegistry* csr = AppContext::getMSAColorSchemeRegistry();
+    connect(factory, SIGNAL(si_factoryChanged()), SLOT(sl_colorSchemeFactoryUpdated()), Qt::UniqueConnection);
+    connect(factory, SIGNAL(destroyed(QObject *)), SLOT(sl_setDefaultColorScheme()), Qt::UniqueConnection);
 
-    QList<MSAColorSchemeFactory*> customFactories = csr->getMSACustomColorSchemes(atype);
-    foreach(MSAColorSchemeFactory* f, customFactories) {
-        QAction* action = new QAction(f->getName(), NULL);
-        action->setObjectName(f->getName());
-        action->setCheckable(true);
-        if (csf != NULL) {
-            action->setChecked(csf->getId() == f->getId());
-        }
-        action->setData(f->getId());
-        connect(action, SIGNAL(triggered()), SLOT(sl_changeColorScheme()));
-        customColorSchemeMenuActions.append(action);
+    QList<QAction *> tmpActions = QList<QAction *>() << colorSchemeMenuActions << customColorSchemeMenuActions;
+    foreach (QAction *action, tmpActions) {
+        action->setChecked(action->data() == id);
     }
-}
 
-QStringList MSAEditorSequenceArea::getAvailableColorSchemes() const{
-    QStringList allSchemas;
-    foreach(QAction *a, colorSchemeMenuActions){
-        allSchemas.append(a->text());
+    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;
     }
 
-    foreach(QAction *a, customColorSchemeMenuActions){
-        allSchemas.append(a->text());
+    completeRedraw = true;
+    update();
+    emit si_highlightingChanged();
+}
+
+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 allSchemas;
+    return NULL;
 }
 
 QStringList MSAEditorSequenceArea::getAvailableHighlightingSchemes() const{
@@ -479,45 +486,8 @@ bool MSAEditorSequenceArea::drawContent(QPixmap &pixmap,
     return drawContent(p, region, seqIdx);
 }
 
-void MSAEditorSequenceArea::sl_customColorSettingsChanged(){
-    DNAAlphabetType atype = editor->getMSAObject()->getAlphabet()->getType();
-    QAction* a = GUIUtils::getCheckedAction(customColorSchemeMenuActions);
-    MSAColorSchemeFactory *csf = NULL;
-    if (a != NULL) {
-        MSAColorSchemeRegistry* csr = AppContext::getMSAColorSchemeRegistry();
-        csf = csr->getMSAColorSchemeFactoryById(a->data().toString());
-    }
-    initCustomSchemeActions(csf, atype);
-    if(a != NULL && !colorSchemeMenuActions.contains(a)){
-        bool containsActionByName = false;
-        foreach(QAction *customAction, customColorSchemeMenuActions){
-            if(customAction->objectName() != "" && customAction->objectName() == prevSchemeName){
-                containsActionByName = true;
-                break;
-            }
-        }
-        if (!containsActionByName){
-            colorSchemeMenuActions.first()->setChecked(true);
-            colorSchemeMenuActions.first()->trigger();
-            return;
-        }
-    }
-    if (NULL == a) {
-        QAction *a = GUIUtils::findActionByData(QList<QAction*>() << colorSchemeMenuActions << customColorSchemeMenuActions,
-            atype == DNAAlphabet_AMINO ? MSAColorScheme::UGENE_AMINO : MSAColorScheme::UGENE_NUCL);
-        if (a != NULL) {
-            a->setChecked(true);
-        }
-    }
-
-    emit si_highlightingChanged();
-    sl_changeColorScheme();
-}
-
-void MSAEditorSequenceArea::deleteOldCustomSchemes(){
-    foreach(QAction* a, customColorSchemeMenuActions){
-        delete a;
-    }
+void MSAEditorSequenceArea::deleteOldCustomSchemes() {
+    qDeleteAll(customColorSchemeMenuActions);
     customColorSchemeMenuActions.clear();
 }
 
@@ -543,57 +513,33 @@ void MSAEditorSequenceArea::sl_changeCopyFormat(const QString& alg){
 }
 
 void MSAEditorSequenceArea::sl_changeColorScheme() {
-    QAction* a = qobject_cast<QAction*>(sender());
-    if(!a){a = GUIUtils::getCheckedAction(customColorSchemeMenuActions);}
-    if(!a){return;}
-
-    QString id = a->data().toString();
-    MSAColorSchemeFactory* f = AppContext::getMSAColorSchemeRegistry()->getMSAColorSchemeFactoryById(id);
-    delete colorScheme;
-    if (ui->editor->getMSAObject() == NULL)
-        return;
-
-    colorScheme = f->create(this, ui->editor->getMSAObject());
-    QList<QAction*> tmpActions; tmpActions << colorSchemeMenuActions << customColorSchemeMenuActions;
-    foreach(QAction* action, tmpActions) {
-        action->setChecked(action == a);
-    }
-
-    switch (f->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;
+    QAction *action = qobject_cast<QAction *>(sender());
+    if (NULL == action) {
+        action = GUIUtils::getCheckedAction(customColorSchemeMenuActions);
     }
+    CHECK(NULL != action, );
 
-    prevSchemeName = a->objectName();
-    completeRedraw = true;
-    update();
-    emit si_highlightingChanged();
+    applyColorScheme(action->data().toString());
 }
 
 void MSAEditorSequenceArea::sl_changeHighlightScheme(){
     QAction* a = qobject_cast<QAction*>(sender());
-    if(!a){a = GUIUtils::getCheckedAction(customColorSchemeMenuActions);}
-    if(!a){return;}
+    if (NULL == a) {
+        a = GUIUtils::getCheckedAction(customColorSchemeMenuActions);
+    }
+    CHECK(NULL != a, );
 
     editor->saveHighlightingSettings(highlightingScheme->getFactory()->getId(), highlightingScheme->getSettings());
 
     QString id = a->data().toString();
-    MSAHighlightingSchemeFactory* f = AppContext::getMSAHighlightingSchemeRegistry()->getMSAHighlightingSchemeFactoryById(id);
-    delete highlightingScheme;
-    if (ui->editor->getMSAObject() == NULL)
+    MsaHighlightingSchemeFactory* factory = AppContext::getMsaHighlightingSchemeRegistry()->getMsaHighlightingSchemeFactoryById(id);
+    SAFE_POINT(NULL != factory, L10N::nullPointerError("highlighting scheme"), );
+    if (ui->editor->getMSAObject() == NULL) {
         return;
+    }
 
-    highlightingScheme = f->create(this, ui->editor->getMSAObject());
+    delete highlightingScheme;
+    highlightingScheme = factory->create(this, ui->editor->getMSAObject());
     highlightingScheme->applySettings(editor->getHighlightingSettings(id));
 
     const MAlignment &msa = ui->editor->getMSAObject()->getMAlignment();
@@ -607,7 +553,7 @@ void MSAEditorSequenceArea::sl_changeHighlightScheme(){
     CHECK(ui->getEditor(), );
     CHECK(ui->getEditor()->getOptionsPanel(), );
 
-    if(!f->isRefFree() && refSeq == -1 && ui->getEditor()->getOptionsPanel()->getActiveGroupId() != msaHighlightingId) {
+    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"));
     }
@@ -615,7 +561,7 @@ void MSAEditorSequenceArea::sl_changeHighlightScheme(){
     foreach(QAction* action, highlightingSchemeMenuActions) {
         action->setChecked(action == a);
     }
-    switch (f->getAlphabetType()) {
+    switch (factory->getAlphabetType()) {
     case DNAAlphabet_RAW:
         AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_RAW, id);
         break;
@@ -762,40 +708,23 @@ bool MSAEditorSequenceArea::drawContent(QPainter &p, const U2Region &region, con
             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);
-            bool drawColor = false;
-            if (isGapsScheme || highlightingScheme->getFactory()->isRefFree()){ //schemes which applied without reference
-                const char refChar = 'z';
-                highlightingScheme->process(refChar, c, drawColor, pos, seq);
-                if(isGapsScheme){
-                    color = QColor(192, 192, 192);
-                }
-                if (color.isValid() && drawColor) {
-                    p.fillRect(cr, color);
-                }
-                if (editor->getResizeMode() == MSAEditor::ResizeMode_FontAndContent) {
-                    p.drawText(cr, Qt::AlignCenter, QString(c));
-                }
-            }else if(seq == refSeq || refSeqName.isEmpty()){
-                if (color.isValid()) {
-                    p.fillRect(cr, color);
-                }
-                if (isResizeMode) {
-                    p.drawText(cr, Qt::AlignCenter, QString(c));
-                }
-            }else{
+            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, drawColor, pos, seq);
+                highlightingScheme->process(refChar, c, color, highlight, pos, seq);
+            }
 
-                if(isGapsScheme){
-                    color = QColor(192, 192, 192);
-                }
-                if (color.isValid() && drawColor) {
-                    p.fillRect(cr, color);
-                }
-                if (isResizeMode) {
-                    p.drawText(cr, Qt::AlignCenter, QString(c));
-                }
+            if (color.isValid() && highlight) {
+                p.fillRect(cr, color);
+            }
+            if (isResizeMode) {
+                p.drawText(cr, Qt::AlignCenter, QString(c));
             }
         }
         baseYRange.startPos += editor->getRowHeight();
@@ -2341,6 +2270,32 @@ 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;
@@ -2631,7 +2586,7 @@ void MSAEditorSequenceArea::sl_addSeqFromFile()
     LastUsedDirHelper lod;
     QStringList urls;
 #ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         urls = U2FileDialog::getOpenFileNames(this, tr("Open file with sequences"), lod.dir, filter, 0, QFileDialog::DontUseNativeDialog);
     } else
 #endif
@@ -3013,31 +2968,34 @@ QString MSAEditorSequenceArea::exportHighligtning(int startPos, int endPos, int
             char c = msa.charAt(seq, pos);
 
             const char refChar = r->charAt(pos);
-            if (refChar == '-' && !keepGaps) continue;
-            bool drawColor = false;
+            if (refChar == '-' && !keepGaps) {
+                continue;
+            }
+
+            QColor unused;
+            bool highlight = false;
             highlightingScheme->setUseDots(useDotsAction->isChecked());
-            highlightingScheme->process(refChar, c, drawColor, pos, seq);
+            highlightingScheme->process(refChar, c, unused, highlight, pos, seq);
 
-            if (drawColor) {
+            if (highlight) {
                 rowStr.append(c);
                 informative = true;
-            }else{
-                if (dots){
+            } else {
+                if (dots) {
                     rowStr.append(".");
-                }else{
+                } else {
                     rowStr.append(" ");
                 }
             }
             rowStr.append("\t");
         }
         if(informative){
-            header.remove(rowStr.length()-1,1);
+            header.remove(rowStr.length() - 1, 1);
             result.append(rowStr);
         }
         posInResult++;
     }
 
-
     if (!transpose){
         QStringList transposedRows = TextUtils::transposeCSVRows(result, "\t");
         return transposedRows.join("\n");
@@ -3046,11 +3004,11 @@ QString MSAEditorSequenceArea::exportHighligtning(int startPos, int endPos, int
     return result.join("\n");
 }
 
-MSAColorScheme * MSAEditorSequenceArea::getCurrentColorScheme() const {
+MsaColorScheme * MSAEditorSequenceArea::getCurrentColorScheme() const {
     return colorScheme;
 }
 
-MSAHighlightingScheme * MSAEditorSequenceArea::getCurrentHighlightingScheme() const {
+MsaHighlightingScheme * MSAEditorSequenceArea::getCurrentHighlightingScheme() const {
     return highlightingScheme;
 }
 
@@ -3065,7 +3023,7 @@ void MSAEditorSequenceArea::cancelShiftTracking() {
     editor->getMSAObject()->releaseState();
 }
 
-ExportHighligtningTask::ExportHighligtningTask(ExportHighligtningDialogController *dialog, MSAEditorSequenceArea *msaese_)
+ExportHighligtningTask::ExportHighligtningTask(ExportHighligtingDialogController *dialog, MSAEditorSequenceArea *msaese_)
     : Task(tr("Export highlighting"), TaskFlags_FOSCOE | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled)
 {
     msaese = msaese_;
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h
index 6f22b77..b71061e 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h
@@ -53,15 +53,15 @@ namespace U2 {
 class MSAEditor;
 class MSAEditorUI;
 class GObjectView;
-class MSAColorScheme;
-class MSAHighlightingScheme;
+class MsaColorScheme;
+class MsaHighlightingScheme;
 class MAlignment;
 class MAlignmentModInfo;
 class MAlignmentObject;
-class MSAColorSchemeFactory;
-class MSAHighlightingSchemeFactory;
-class MSAColorSchemeRegistry;
-class MSAHighlightingSchemeRegistry;
+class MsaColorSchemeFactory;
+class MsaHighlightingSchemeFactory;
+class MsaColorSchemeRegistry;
+class MsaHighlightingSchemeRegistry;
 class Settings;
 
 class ModificationType {
@@ -268,8 +268,6 @@ public:
 
     int getHeight();
 
-    QStringList getAvailableColorSchemes() const;
-
     QStringList getAvailableHighlightingSchemes() const;
 
     bool hasAminoAlphabet();
@@ -315,8 +313,8 @@ public:
 
     QString exportHighligtning(int startPos, int endPos, int startingIndex, bool keepGaps, bool dots, bool transpose);
 
-    MSAColorScheme * getCurrentColorScheme() const;
-    MSAHighlightingScheme * getCurrentHighlightingScheme() const;
+    MsaColorScheme * getCurrentColorScheme() const;
+    MsaHighlightingScheme * getCurrentHighlightingScheme() const;
     bool getUseDotsCheckedState() const;
 
     void onVisibleRangeChanged();
@@ -332,7 +330,6 @@ signals:
     void si_startMsaChanging();
     void si_stopMsaChanging(bool msaUpdated);
     void si_copyFormattedChanging(bool enabled);
-    void si_highlightingAndColorActionsChanged();
 
 public slots:
     void sl_changeColorSchemeOutside(const QString &name);
@@ -385,6 +382,9 @@ private slots:
 
     void sl_saveSequence();
 
+    void sl_registerCustomColorSchemes();
+    void sl_colorSchemeFactoryUpdated();
+    void sl_setDefaultColorScheme();
     void sl_changeColorScheme();
     void sl_changeHighlightScheme();
 
@@ -392,7 +392,6 @@ private slots:
 
     void sl_modelChanged();
 
-    void sl_customColorSettingsChanged();
     void sl_showCustomSettings();
     void sl_referenceSeqChanged(qint64);
 
@@ -418,11 +417,13 @@ private:
     void buildMenu(QMenu* m);
     void updateColorAndHighlightSchemes();
 
-    void initColorSchemes(MSAColorSchemeFactory* csf, DNAAlphabetType atype);
-    void initHighlightSchemes(MSAHighlightingSchemeFactory* hsf, DNAAlphabetType atype);
-    void initCustomSchemeActions(MSAColorSchemeFactory* csf, DNAAlphabetType type);
+    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();
 
@@ -519,16 +520,14 @@ private:
     QPixmap*        cachedView;
     bool            completeRedraw;
 
-    MSAColorScheme* colorScheme;
-    MSAHighlightingScheme* highlightingScheme;
+    MsaColorScheme* colorScheme;
+    MsaHighlightingScheme* highlightingScheme;
     bool            highlightSelection;
 
     QList<QAction*> colorSchemeMenuActions;
     QList<QAction* > customColorSchemeMenuActions;
     QList<QAction* > highlightingSchemeMenuActions;
 
-    QString prevSchemeName;
-
     // 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
@@ -539,7 +538,7 @@ private:
 class U2VIEW_EXPORT ExportHighligtningTask : public Task {
     Q_OBJECT
 public:
-    ExportHighligtningTask(ExportHighligtningDialogController *dialog, MSAEditorSequenceArea *msaese_);
+    ExportHighligtningTask(ExportHighligtingDialogController *dialog, MSAEditorSequenceArea *msaese_);
 
     void run();
     QString generateReport() const;
diff --git a/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.cpp b/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.cpp
index cb044e8..d3ba77e 100644
--- a/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.cpp
@@ -120,7 +120,7 @@ void SelectSubalignmentDialog::init() {
     SAFE_POINT(ui->getEditor() != NULL, tr("MSA Editor is NULL"), );
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467652");
+    new HelpButton(this, buttonBox, "17470584");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Select"));
 
     connect(allButton, SIGNAL(clicked()), SLOT(sl_allButtonClicked()));
diff --git a/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.h b/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.h
index 3e0581b..4b24a0b 100644
--- a/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.h
+++ b/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.h
@@ -22,7 +22,7 @@
 #ifndef _U2_MSA_SELECT_SUBALIGNMENT_DIALOG_H_
 #define _U2_MSA_SELECT_SUBALIGNMENT_DIALOG_H_
 
-#include "ui/ui_SelectSubalignmentDialog.h"
+#include "ui_SelectSubalignmentDialog.h"
 
 #include <U2Core/global.h>
 #include <U2Core/MAlignmentObject.h>
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.cpp b/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.cpp
index f5e1f65..08364a3 100644
--- a/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.cpp
@@ -33,6 +33,8 @@
 #include <U2Algorithm/MSADistanceAlgorithmRegistry.h>
 #include <U2Algorithm/MSADistanceAlgorithm.h>
 
+#include <QVBoxLayout>
+
 namespace U2
 {
 
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.cpp
index 5adcdd0..ea3db89 100644
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.cpp
@@ -19,21 +19,21 @@
  * MA 02110-1301, USA.
  */
 
-#include "MSAGraphCalculationTask.h"
+#include <QPolygonF>
+
+#include <U2Algorithm/MSAConsensusAlgorithmClustal.h>
+#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
+#include <U2Algorithm/MSAConsensusAlgorithmStrict.h>
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
 
-#include <U2Core/U2SafePoints.h>
 #include <U2Core/MAlignmentObject.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2Algorithm/MSAColorScheme.h>
-
-#include <U2Algorithm/MSAConsensusAlgorithmStrict.h>
-#include <U2Algorithm/MSAConsensusAlgorithmClustal.h>
-#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
-
-#include <QtGui/QPolygonF>
 
+#include "MSAGraphCalculationTask.h"
 
 namespace U2 {
 
@@ -197,23 +197,23 @@ MSAHighlightingOverviewCalculationTask::MSAHighlightingOverviewCalculationTask(M
                                                                                int width, int height)
     : MSAGraphCalculationTask(editor->getMSAObject(), width, height) {
 
-    SAFE_POINT_EXT(AppContext::getMSAHighlightingSchemeRegistry() != NULL,
+    SAFE_POINT_EXT(AppContext::getMsaHighlightingSchemeRegistry() != NULL,
                    setError(tr("MSA highlighting scheme registry is NULL")), );
-    MSAHighlightingSchemeFactory* f_hs = AppContext::getMSAHighlightingSchemeRegistry()->getMSAHighlightingSchemeFactoryById( highlightingSchemeId );
+    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 );
+    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,
+bool MSAHighlightingOverviewCalculationTask::isCellHighlighted(const MAlignment &ma, MsaHighlightingScheme *highlightingScheme,
+                                                               MsaColorScheme *colorScheme,
                                                                int seq, int pos,
                                                                int refSeq)
 {
@@ -229,24 +229,24 @@ bool MSAHighlightingOverviewCalculationTask::isCellHighlighted(const MAlignment
             return true;
         }
     }
-    else  {
+    else {
         char refChar;
         if (isGapScheme(schemeId) || highlightingScheme->getFactory()->isRefFree()) {
-            refChar = 'z';
+            refChar = '\n';
         } else {
             refChar = ma.charAt(refSeq, pos);
         }
-        bool drawColor;
-        char c = ma.charAt(seq, pos);
 
-        highlightingScheme->process(refChar, c, drawColor, pos, seq);
-        if (drawColor) {
+        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 {
@@ -263,11 +263,11 @@ int MSAHighlightingOverviewCalculationTask::getGraphValue(int pos) const {
 }
 
 bool MSAHighlightingOverviewCalculationTask::isGapScheme(const QString &schemeId) {
-    return (schemeId == MSAHighlightingScheme::GAPS_AMINO || schemeId == MSAHighlightingScheme::GAPS_NUCL);
+    return (schemeId == MsaHighlightingScheme::GAPS_AMINO || schemeId == MsaHighlightingScheme::GAPS_NUCL);
 }
 
 bool MSAHighlightingOverviewCalculationTask::isEmptyScheme(const QString &schemeId) {
-    return (schemeId == MSAHighlightingScheme::EMPTY_AMINO || schemeId == MSAHighlightingScheme::EMPTY_NUCL);
+    return (schemeId == MsaHighlightingScheme::EMPTY_AMINO || schemeId == MsaHighlightingScheme::EMPTY_NUCL);
 }
 
 bool MSAHighlightingOverviewCalculationTask::isCellHighlighted(int seq, int pos) const {
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.h b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.h
index f39d820..45b10bf 100644
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.h
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.h
@@ -36,8 +36,8 @@ namespace U2 {
 class MSAEditor;
 class MAlignmentObject;
 class MSAConsensusAlgorithm;
-class MSAColorScheme;
-class MSAHighlightingScheme;
+class MsaColorScheme;
+class MsaHighlightingScheme;
 
 class MSAGraphCalculationTask : public BackgroundTask<QPolygonF> {
     Q_OBJECT
@@ -100,8 +100,8 @@ public:
                                            int width, int height);
 
     static bool isCellHighlighted(const MAlignment &msa,
-                                  MSAHighlightingScheme* highlightingScheme,
-                                  MSAColorScheme* colorScheme,
+                                  MsaHighlightingScheme* highlightingScheme,
+                                  MsaColorScheme* colorScheme,
                                   int seq, int pos,
                                   int refSeq);
 
@@ -115,8 +115,8 @@ private:
 
     int refSequenceId;
 
-    MSAColorScheme*         colorScheme;
-    MSAHighlightingScheme*  highlightingScheme;
+    MsaColorScheme*         colorScheme;
+    MsaHighlightingScheme*  highlightingScheme;
     QString                 schemeId;
 };
 
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.cpp
index 0e28720..2d588de 100644
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.cpp
@@ -22,7 +22,8 @@
 #include <QMouseEvent>
 #include <QPainter>
 
-#include <U2Algorithm/MSAColorScheme.h>
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
 
 #include <U2Core/Settings.h>
 
@@ -188,10 +189,10 @@ void MSAGraphOverview::sl_drawGraph() {
                                                                      width(), FIXED_HEIGHT);
         break;
     case Highlighting:
-        MSAHighlightingScheme* hScheme = sequenceArea->getCurrentHighlightingScheme();
+        MsaHighlightingScheme* hScheme = sequenceArea->getCurrentHighlightingScheme();
         QString hSchemeId = hScheme->getFactory()->getId();
 
-        MSAColorScheme* cScheme = sequenceArea->getCurrentColorScheme();
+        MsaColorScheme* cScheme = sequenceArea->getCurrentColorScheme();
         QString cSchemeId = cScheme->getFactory()->getId();
 
         graphCalculationTask = new MSAHighlightingOverviewCalculationTask(editor,
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewContextMenu.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewContextMenu.cpp
index 36a347d..3d0e28a 100644
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewContextMenu.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewContextMenu.cpp
@@ -102,7 +102,7 @@ void MSAOverviewContextMenu::sl_graphOrientationActionTriggered(QAction *action)
 void MSAOverviewContextMenu::sl_colorActionTriggered() {
     QObjectScopedPointer<QColorDialog> colorDialog = new QColorDialog(graphOverview->getCurrentColor(), this);
 #ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         colorDialog->setOption(QColorDialog::DontUseNativeDialog);
     }
 #endif
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.cpp
index b192fbf..bf901ef 100644
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.cpp
@@ -19,18 +19,19 @@
  * MA 02110-1301, USA.
  */
 
-#include "MSASimpleOverview.h"
-#include "MSAGraphCalculationTask.h"
+#include <QMouseEvent>
+#include <QPainter>
+
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
 
 #include <U2Core/U2OpStatusUtils.h>
 
-#include <U2Algorithm/MSAColorScheme.h>
 #include <U2View/MSAEditor.h>
 #include <U2View/MSAEditorSequenceArea.h>
 
-#include <QtGui/QPainter>
-#include <QtGui/QMouseEvent>
-
+#include "MSASimpleOverview.h"
+#include "MSAGraphCalculationTask.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h b/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h
index 11571b3..0ff0642 100644
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h
@@ -33,8 +33,8 @@ namespace U2 {
 class MSAEditor;
 class MSAEditorUI;
 class MSAEditorSequenceArea;
-class MSAColorScheme;
-class MSAHighlightingScheme;
+class MsaColorScheme;
+class MsaHighlightingScheme;
 
 
 class U2VIEW_EXPORT MSASimpleOverview : public MSAOverview {
diff --git a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.cpp b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.cpp
index 471025e..e50ca92 100644
--- a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.cpp
@@ -19,9 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QString>
-#include <QtCore/QStringList>
-#include <QtCore/QVariant>
+#include <QString>
+#include <QStringList>
+#include <QVariant>
 
 #include <QHBoxLayout>
 #include <QLayout>
@@ -35,6 +35,7 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
+#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
@@ -49,8 +50,8 @@
 #include <U2Core/U2SequenceDbi.h>
 #include <U2Core/UserApplicationsSettings.h>
 
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/ShowHideSubgroupWidget.h>
-#include <U2Gui/U2FileDialog.h>
 #include <U2Gui/U2WidgetStateStorage.h>
 
 #include <U2View/MSAEditor.h>
@@ -73,7 +74,7 @@ PairAlign::PairAlign(MSAEditor* _msa)
     : msa(_msa), pairwiseAlignmentWidgetsSettings(_msa->getPairwiseAlignmentWidgetsSettings()),
     distanceCalcTask(NULL), settingsWidget(NULL),
     showHideSequenceWidget(NULL), showHideSettingsWidget(NULL), showHideOutputWidget(NULL),
-    savableTab(this, GObjectViewUtils::findViewByName(_msa->getName())),
+    saveController(NULL), savableTab(this, GObjectViewUtils::findViewByName(_msa->getName())),
     showSequenceWidget(_msa->getPairwiseAlignmentWidgetsSettings()->showSequenceWidget),
     showAlgorithmWidget(_msa->getPairwiseAlignmentWidgetsSettings()->showAlgorithmWidget),
     showOutputWidget(_msa->getPairwiseAlignmentWidgetsSettings()->showOutputWidget),
@@ -94,6 +95,7 @@ PairAlign::PairAlign(MSAEditor* _msa)
     secondSequenceLayout->addWidget(secondSeqSelectorWC);
 
     initLayout();
+    initSaveController();
     connectSignals();
     initParameters();
 
@@ -146,7 +148,6 @@ void PairAlign::initParameters() {
         "font: bold;");
     updateWarningMessage();
 
-    sl_outputFileChanged("");
     sl_alignmentChanged();
 }
 
@@ -155,6 +156,24 @@ void PairAlign::updateWarningMessage() {
     lblMessage->setText(tr("Pairwise alignment is not available for alignments with \"%1\" alphabet.").arg(alphabetName));
 }
 
+void PairAlign::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = getDefaultFilePath();
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
+    config.fileDialogButton = outputFileSelectButton;
+    config.fileNameEdit = outputFileLineEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save file");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::CLUSTAL_ALN;
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
+QString PairAlign::getDefaultFilePath() {
+    return GUrlUtils::getDefaultDataPath() + "/" + PairwiseAlignmentTaskSettings::DEFAULT_NAME;
+}
+
 void PairAlign::connectSignals() {
     connect(showHideSequenceWidget,     SIGNAL(si_subgroupStateChanged(QString)),   SLOT(sl_subwidgetStateChanged(QString)));
     connect(showHideSettingsWidget,     SIGNAL(si_subgroupStateChanged(QString)),   SLOT(sl_subwidgetStateChanged(QString)));
@@ -162,8 +181,8 @@ void PairAlign::connectSignals() {
     connect(algorithmListComboBox,      SIGNAL(currentIndexChanged(QString)),       SLOT(sl_algorithmSelected(QString)));
     connect(inNewWindowCheckBox,        SIGNAL(clicked(bool)),                      SLOT(sl_inNewWindowCheckBoxChangeState(bool)));
     connect(alignButton,                SIGNAL(clicked()),                          SLOT(sl_alignButtonPressed()));
-    connect(outputFileSelectButton,     SIGNAL(clicked()),                          SLOT(sl_selectFileButtonClicked()));
-    connect(outputFileLineEdit,         SIGNAL(textChanged(QString)),               SLOT(sl_outputFileChanged(QString)));
+    connect(outputFileSelectButton,     SIGNAL(clicked()),                          SLOT(sl_checkState()));
+    connect(outputFileLineEdit,         SIGNAL(textChanged(QString)),               SLOT(sl_outputFileChanged()));
 
     connect(firstSeqSelectorWC,         SIGNAL(si_selectionChanged()),         SLOT(sl_selectorTextChanged()));
     connect(secondSeqSelectorWC,        SIGNAL(si_selectionChanged()),         SLOT(sl_selectorTextChanged()));
@@ -224,7 +243,7 @@ void PairAlign::checkState() {
     pairwiseAlignmentWidgetsSettings->secondSequenceId = secondSeqSelectorWC->sequenceId();
     pairwiseAlignmentWidgetsSettings->algorithmName = algorithmListComboBox->currentText();
     pairwiseAlignmentWidgetsSettings->inNewWindow = inNewWindowCheckBox->isChecked();
-    pairwiseAlignmentWidgetsSettings->resultFileName = outputFileLineEdit->text();
+    pairwiseAlignmentWidgetsSettings->resultFileName = saveController->getSaveFileName();
     pairwiseAlignmentWidgetsSettings->showSequenceWidget = showSequenceWidget;
     pairwiseAlignmentWidgetsSettings->showAlgorithmWidget = showAlgorithmWidget;
     pairwiseAlignmentWidgetsSettings->showOutputWidget = showOutputWidget;
@@ -309,14 +328,6 @@ void PairAlign::sl_inNewWindowCheckBoxChangeState(bool newState) {
     checkState();
 }
 
-void PairAlign::sl_selectFileButtonClicked() {
-    QString fileName = U2FileDialog::getSaveFileName(NULL, tr("Save file"), "", tr("Clustal format (*.aln)"));
-    if (false == fileName.isEmpty()) {
-        outputFileLineEdit->setText(fileName);
-    }
-    checkState();
-}
-
 void PairAlign::sl_alignButtonPressed() {
     firstSequenceSelectionOn = false;
     secondSequenceSelectionOn = false;
@@ -341,8 +352,8 @@ void PairAlign::sl_alignButtonPressed() {
     PairwiseAlignmentTaskSettings settings;
     settings.algorithmName = algorithmListComboBox->currentText();
 
-    if (!outputFileLineEdit->text().isEmpty()) {
-        settings.resultFileName = GUrl(outputFileLineEdit->text());
+    if (!saveController->getSaveFileName().isEmpty()) {
+        settings.resultFileName = GUrl(saveController->getSaveFileName());
     } else {
         settings.resultFileName = GUrl(AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath() +
                                        "/" + PairwiseAlignmentTaskSettings::DEFAULT_NAME);
@@ -384,11 +395,11 @@ void PairAlign::sl_alignButtonPressed() {
     checkState();
 }
 
-void PairAlign::sl_outputFileChanged(const QString& newText) {
-    if (newText.isEmpty()) {
-        outputFileLineEdit->setText(QDir::toNativeSeparators(AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath()
-            + QDir::separator() + PairwiseAlignmentTaskSettings::DEFAULT_NAME));
+void PairAlign::sl_outputFileChanged() {
+    if (saveController->getSaveFileName().isEmpty()) {
+        saveController->setPath(getDefaultFilePath());
     }
+    checkState();
 }
 
 void PairAlign::sl_distanceCalculated() {
diff --git a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.h b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.h
index 84e1a80..dae4294 100644
--- a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.h
+++ b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.h
@@ -22,47 +22,35 @@
 #ifndef _U2_PAIR_ALIGN_H
 #define _U2_PAIR_ALIGN_H
 
-#include "ui/ui_PairwiseAlignmentOptionsPanelWidget.h"
-#include "../MsaOpSavableTab.h"
-#include "../SequenceSelectorWidgetController.h"
-
-#include <QtCore/QList>
-#include <QtCore/QString>
-#include <QtCore/QStringList>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QLabel>
-#include <QtGui/QPushButton>
-#include <QtGui/QLineEdit>
-#include <QtGui/QToolButton>
-#include <QtGui/QComboBox>
-#include <QtGui/QGroupBox>
-#include <QtGui/QCheckBox>
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QVBoxLayout>
-#endif
+#include <QList>
+#include <QString>
+#include <QStringList>
+#include <QWidget>
+#include <QLabel>
+#include <QPushButton>
+#include <QLineEdit>
+#include <QToolButton>
+#include <QComboBox>
+#include <QGroupBox>
+#include <QCheckBox>
+#include <QVBoxLayout>
 
 #include <U2Gui/SuggestCompleter.h>
 
+#include "ui_PairwiseAlignmentOptionsPanelWidget.h"
+#include "../MsaOpSavableTab.h"
+#include "../SequenceSelectorWidgetController.h"
+
 namespace U2 {
 
+class AlignmentAlgorithm;
+class AlignmentAlgorithmMainWidget;
 class MAlignment;
 class MAlignmentModInfo;
 class MSADistanceAlgorithm;
 class MSAEditor;
-class AlignmentAlgorithm;
-class AlignmentAlgorithmMainWidget;
 class PairwiseAlignmentTaskSettings;
+class SaveDocumentController;
 class ShowHideSubgroupWidget;
 
 class U2VIEW_EXPORT PairAlign : public QWidget, public Ui_PairwiseAlignmentOptionsPanelWidget {
@@ -72,22 +60,12 @@ class U2VIEW_EXPORT PairAlign : public QWidget, public Ui_PairwiseAlignmentOptio
 public:
     PairAlign(MSAEditor* _msa);
 
-private:
-    void initLayout();
-    void initParameters();
-    void connectSignals();
-    void checkState();
-    void updatePercentOfSimilarity();
-    bool checkSequenceNames();
-    AlignmentAlgorithm* getAlgorithmById(const QString& algorithmId);
-
 private slots:
     void sl_algorithmSelected(const QString& algorithmName);
     void sl_subwidgetStateChanged(const QString& id);
     void sl_inNewWindowCheckBoxChangeState(bool newState);
-    void sl_selectFileButtonClicked();
     void sl_alignButtonPressed();
-    void sl_outputFileChanged(const QString& newText);
+    void sl_outputFileChanged();
 
     void sl_distanceCalculated();
     void sl_alignComplete();
@@ -96,7 +74,16 @@ private slots:
     void sl_alignmentChanged();
 
 private:
+    void initLayout();
+    void initParameters();
+    void connectSignals();
+    void checkState();
+    void updatePercentOfSimilarity();
+    bool checkSequenceNames();
+    AlignmentAlgorithm* getAlgorithmById(const QString& algorithmId);
     void updateWarningMessage();
+    void initSaveController();
+    static QString getDefaultFilePath();
 
     MSAEditor* msa;
     PairwiseAlignmentWidgetsSettings * pairwiseAlignmentWidgetsSettings;
@@ -111,6 +98,7 @@ private:
     SequenceSelectorWidgetController *firstSeqSelectorWC;
     SequenceSelectorWidgetController *secondSeqSelectorWC;
 
+    SaveDocumentController *saveController;
     MsaOpSavableTab savableTab;
 
     bool showSequenceWidget;
diff --git a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.cpp b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.cpp
index ee005ea..cdc1644 100644
--- a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.cpp
@@ -30,7 +30,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 = "17467655";
+const QString PairAlignFactory::GROUP_DOC_PAGE = "17470587";
 
 
 PairAlignFactory::PairAlignFactory() {
diff --git a/src/corelibs/U2View/src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui b/src/corelibs/U2View/src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui
rename to src/corelibs/U2View/src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp
index 5957b76..0bbf22f 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp
@@ -19,6 +19,7 @@
 * MA 02110-1301, USA.
 */
 
+#include <QApplication>
 #include <QMessageBox>
 
 #include <U2Algorithm/MSADistanceAlgorithm.h>
@@ -313,7 +314,7 @@ void MSAEditorTreeManager::openTreeFromFile() {
     QString filter = DialogUtils::prepareDocumentsFileFilter(BaseDocumentFormats::NEWICK, false, QStringList());
     QString file;
 #ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         file = U2FileDialog::getOpenFileName(QApplication::activeWindow(), tr("Select files to open..."), h.dir,  filter, 0, QFileDialog::DontUseNativeDialog);
     }else
 #endif
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp
index 438b174..6c0f862 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp
@@ -40,9 +40,9 @@
 #include <QMouseEvent>
 #include <QResizeEvent>
 #include <QStack>
+#include <QVBoxLayout>
 #include <QWheelEvent>
 
-
 namespace U2 {
 
 MSAEditorTreeViewer::MSAEditorTreeViewer(const QString& viewName, GObject* obj, GraphicsRectangularBranchItem* _root, qreal s)
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewerTasks.cpp b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewerTasks.cpp
deleted file mode 100644
index be26a61..0000000
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewerTasks.cpp
+++ /dev/null
@@ -1,244 +0,0 @@
-/**
- * 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 "TreeViewerTasks.h"
-#include "TreeViewer.h"
-#include "TreeViewerFactory.h"
-#include "TreeViewerState.h"
-#include "CreateRectangularBranchesTask.h"
-#include "GraphicsRectangularBranchItem.h"
-
-#include <U2Core/Log.h>
-#include <U2Core/L10n.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/ProjectModel.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/TaskSignalMapper.h>
-
-#include <U2Core/PhyTreeObject.h>
-#include <U2Core/UnloadedObject.h>
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <QtCore/QSet>
-
-
-namespace U2 {
-
-/* TRANSLATOR U2::TreeViewer */
-/* TRANSLATOR U2::ObjectViewTask */
-
-//////////////////////////////////////////////////////////////////////////
-/// open new view
-
-OpenTreeViewerTask::OpenTreeViewerTask(PhyTreeObject* _obj, const QObject* _parent, bool _createMDIWindow)
-: ObjectViewTask(TreeViewerFactory::ID), phyObject(_obj), parent(_parent), createMDIWindow(_createMDIWindow) {
-    assert(!phyObject.isNull());
-}
-
-OpenTreeViewerTask::OpenTreeViewerTask(UnloadedObject* _obj, const QObject* _parent, bool _createMDIWindow)
-: ObjectViewTask(TreeViewerFactory::ID), unloadedReference(_obj), parent(_parent), createMDIWindow(_createMDIWindow) {
-    assert(_obj->getLoadedObjectType() == GObjectTypes::PHYLOGENETIC_TREE);
-    documentsToLoad.append(_obj->getDocument());
-}
-
-OpenTreeViewerTask::OpenTreeViewerTask(Document* doc, const QObject* _parent, bool _createMDIWindow)
-: ObjectViewTask(TreeViewerFactory::ID), phyObject(NULL), parent(_parent), createMDIWindow(_createMDIWindow)
-{
-    assert(!doc->isLoaded());
-    documentsToLoad.append(doc);
-}
-
-OpenTreeViewerTask::~OpenTreeViewerTask(){
-    int res = 0;
-}
-
-void OpenTreeViewerTask::open() {
-    if (stateInfo.hasError() || (phyObject.isNull() && documentsToLoad.isEmpty())) {
-        return;
-    }
-    if (phyObject.isNull()) {
-        Document* doc = documentsToLoad.first();
-        QList<GObject*> objects;
-        if (unloadedReference.isValid()) {
-            GObject* obj = doc->findGObjectByName(unloadedReference.objName);
-            if (obj != NULL && obj->getGObjectType() == GObjectTypes::PHYLOGENETIC_TREE) {
-                phyObject = qobject_cast<PhyTreeObject*>(obj);
-            }
-        } else {
-            QList<GObject*> objects = doc->findGObjectByType(GObjectTypes::PHYLOGENETIC_TREE, UOF_LoadedAndUnloaded);
-            phyObject = objects.isEmpty() ? NULL : qobject_cast<PhyTreeObject*>(objects.first());
-        }
-        if (phyObject.isNull()) {
-            stateInfo.setError(tr("Phylogenetic tree object not found"));
-            return;
-        }
-    }
-    viewName = GObjectViewUtils::genUniqueViewName(phyObject->getDocument(), phyObject);
-    uiLog.details(tr("Opening tree viewer for object %1").arg(phyObject->getGObjectName()));
-
-    Task* createTask;
-
-    if(createMDIWindow) {
-        createTask = new CreateMDITreeViewerTask(viewName, phyObject, stateData);
-    }
-    else {
-        createTask = new CreateTreeViewerTask(viewName, phyObject, stateData);
-        connect(new TaskSignalMapper(createTask), SIGNAL(si_taskFinished(Task*)), parent, SLOT(sl_openTreeTaskFinished(Task*)));
-    }
-
-    TaskScheduler* scheduler = AppContext::getTaskScheduler();
-    scheduler->registerTopLevelTask(createTask);
-}
-
-void OpenTreeViewerTask::updateTitle(TreeViewer* tv) {
-    const QString& oldViewName = tv->getName();
-    GObjectViewWindow* w = GObjectViewUtils::findViewByName(oldViewName);
-    if (w != NULL) {
-        PhyTreeObject* phyObj = tv->getPhyObject();
-        QString newViewName = GObjectViewUtils::genUniqueViewName(phyObj->getDocument(), phyObj);
-        tv->setName(newViewName);
-        w->setWindowTitle(newViewName);
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////
-// open view from state
-
-OpenSavedTreeViewerTask::OpenSavedTreeViewerTask(const QString& viewName, const QVariantMap& stateData)
-: ObjectViewTask(TreeViewerFactory::ID, viewName, stateData)
-{
-    TreeViewerState state(stateData);
-    GObjectReference ref = state.getPhyObject();
-    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 OpenSavedTreeViewerTask::open() {
-    if (stateInfo.hasError()) {
-        return;
-    }
-    TreeViewerState state(stateData);
-    GObjectReference ref = state.getPhyObject();
-    Document* doc = AppContext::getProject()->findDocumentByURL(ref.docUrl);
-    if (doc == NULL) {
-        stateIsIllegal = true;
-        stateInfo.setError(L10N::errorDocumentNotFound(ref.docUrl));
-        return;
-    }
-    GObject* obj = doc->findGObjectByName(ref.objName);
-    if (obj == NULL || obj->getGObjectType() != GObjectTypes::PHYLOGENETIC_TREE) {
-        stateIsIllegal = true;
-        stateInfo.setError(tr("DNA sequence object not found: %1").arg(ref.objName));
-        return;
-    }
-    PhyTreeObject* phyObject = qobject_cast<PhyTreeObject*>(obj);
-    assert(phyObject != NULL);
-
-    Task* createTask = new CreateTreeViewerTask(viewName, phyObject, stateData);
-    TaskScheduler* scheduler = AppContext::getTaskScheduler();
-    scheduler->registerTopLevelTask(createTask);
-
-}
-
-void OpenSavedTreeViewerTask::updateRanges(const QVariantMap& stateData, TreeViewer* ctx) {
-    TreeViewerState state(stateData);
-
-    QTransform m = state.getTransform();
-    if (m != QTransform()) {
-        ctx->setTransform(m);
-    }
-
-    qreal zoom = state.getZoom();
-    ctx->setZoom(zoom);
-
-    ctx->setSettingsState(stateData);
-}
-
-//////////////////////////////////////////////////////////////////////////
-// update
-UpdateTreeViewerTask::UpdateTreeViewerTask(GObjectView* v, const QString& stateName, const QVariantMap& stateData)
-: ObjectViewTask(v, stateName, stateData)
-{
-}
-
-void UpdateTreeViewerTask::update() {
-    if (view.isNull() || view->getFactoryId() != TreeViewerFactory::ID) {
-        return; //view was closed;
-    }
-
-    TreeViewer* phyView = qobject_cast<TreeViewer*>(view.data());
-    assert(phyView != NULL);
-
-    OpenSavedTreeViewerTask::updateRanges(stateData, phyView);
-}
-
-
-
-//////////////////////////////////////////////////////////////////////////
-/// create view
-
-CreateTreeViewerTask::CreateTreeViewerTask(const QString& name, const QPointer<PhyTreeObject>& obj, const QVariantMap& sData)
-: Task("Open tree viewer", TaskFlag_NoRun), viewName(name), phyObj(obj), subTask(NULL), stateData(sData), view(NULL) {}
-
-void CreateTreeViewerTask::prepare() {
-    subTask = new CreateRectangularBranchesTask(phyObj->getTree()->getRootNode());
-    addSubTask(subTask);
-}
-
-Task::ReportResult CreateTreeViewerTask::report() {
-    GraphicsRectangularBranchItem* root = dynamic_cast<GraphicsRectangularBranchItem*>(subTask->getResult());
-    view = new TreeViewer(viewName, phyObj, root, subTask->getScale());
-
-    if (!stateData.isEmpty()) {
-        OpenSavedTreeViewerTask::updateRanges(stateData, view);
-    }
-    return Task::ReportResult_Finished;
-}
-TreeViewer* CreateTreeViewerTask::getTreeViewer() {
-    return view;
-}
-const QVariantMap& CreateTreeViewerTask::getStateData() {
-    return stateData;
-}
-
-CreateMDITreeViewerTask::CreateMDITreeViewerTask(const QString& name, const QPointer<PhyTreeObject>& obj, const QVariantMap& sData)
-: Task("Open tree viewer", TaskFlag_NoRun), subTask(new CreateTreeViewerTask(name, obj, sData)), viewName(name) {}
-
-void CreateMDITreeViewerTask::prepare() {
-    addSubTask(subTask);
-}
-
-Task::ReportResult CreateMDITreeViewerTask::report() {
-    GObjectViewWindow* w = new GObjectViewWindow(subTask->getTreeViewer(), viewName, !subTask->getStateData().isEmpty());
-    MWMDIManager* mdiManager = AppContext::getMainWindow()->getMDIManager();
-    mdiManager->addMDIWindow(w);
-
-    return Task::ReportResult_Finished;
-}
-
-} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewerTasks.h b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewerTasks.h
deleted file mode 100644
index 2d48d9b..0000000
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewerTasks.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * 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_TREE_VIEWER_TASKS_H_
-#define _U2_TREE_VIEWER_TASKS_H_
-
-#include <U2Core/GObjectReference.h>
-#include <U2Gui/ObjectViewTasks.h>
-#include <QtGui/QSplitter>
-
-namespace U2 {
-
-class PhyTreeObject;
-class UnloadedObject;
-class TreeViewer;
-class CreateRectangularBranchesTask;
-class OpenTreeViewerTask;
-
-class OpenTreeViewerTask : public ObjectViewTask {
-    Q_OBJECT
-public:
-    OpenTreeViewerTask(PhyTreeObject* obj, const QObject* _parent = NULL, bool _createMDIWindow = true);
-    OpenTreeViewerTask(UnloadedObject* obj, const QObject* _parent = NULL, bool _createMDIWindow = true);
-    OpenTreeViewerTask(Document* doc, const QObject* _parent = NULL, bool _createMDIWindow = true);
-    virtual ~OpenTreeViewerTask();
-
-    virtual void open();
-
-    static void updateTitle(TreeViewer* tv);
-
-private:
-    QPointer<PhyTreeObject>     phyObject;
-    GObjectReference            unloadedReference;
-    const QObject*              parent;
-    bool                        createMDIWindow;
-};
-
-class OpenSavedTreeViewerTask : public ObjectViewTask {
-    Q_OBJECT
-public:
-    OpenSavedTreeViewerTask(const QString& viewName, const QVariantMap& stateData);
-    virtual void open();
-
-    static void updateRanges(const QVariantMap& stateData, TreeViewer* ctx);
-};
-
-
-class UpdateTreeViewerTask : public ObjectViewTask {
-public:
-    UpdateTreeViewerTask(GObjectView* v, const QString& stateName, const QVariantMap& stateData);
-    virtual void update();
-};
-
-class CreateTreeViewerTask: public Task {
-    Q_OBJECT
-    QString viewName;
-    QPointer<PhyTreeObject> phyObj;
-    CreateRectangularBranchesTask* subTask;
-    QVariantMap stateData;
-    TreeViewer* view;
-public:
-    CreateTreeViewerTask(const QString& name, const QPointer<PhyTreeObject>& obj, const QVariantMap& stateData);
-    virtual void prepare();
-    virtual ReportResult report();
-    TreeViewer* getTreeViewer();
-    const QVariantMap& getStateData();
-};
-
-class CreateMDITreeViewerTask: public Task {
-    Q_OBJECT
-public:
-    CreateMDITreeViewerTask(const QString& name, const QPointer<PhyTreeObject>& obj, const QVariantMap& stateData);
-    virtual void prepare();
-    virtual ReportResult report();
-private:
-    QString viewName;
-    CreateTreeViewerTask* subTask;
-};
-
-} // namespace
-
-#endif
diff --git a/src/corelibs/U2View/src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui b/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui
rename to src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialog.ui
diff --git a/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp b/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp
index 5e0b7f5..becbf2b 100644
--- a/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp
@@ -19,57 +19,69 @@
  * MA 02110-1301, USA.
  */
 
-#include "SaveSelectedSequenceFromMSADialogController.h"
+#include <QMessageBox>
+#include <QPushButton>
 
-#include <U2Core/BaseDocumentFormats.h>
+#include "ui_SaveSelectedSequenceFromMSADialog.h"
 
+#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/L10n.h>
+
 #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 <U2Gui/SaveDocumentController.h>
+
+#include "SaveSelectedSequenceFromMSADialogController.h"
 
 
 namespace U2 {
 
-SaveSelectedSequenceFromMSADialogController::SaveSelectedSequenceFromMSADialogController(QWidget* p): QDialog(p) {
-    setupUi(this);
-    new HelpButton(this, buttonBox, "17467653");
-    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
-    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+SaveSelectedSequenceFromMSADialogController::SaveSelectedSequenceFromMSADialogController(QWidget* p)
+    : QDialog(p),
+      saveController(NULL),
+      ui(new Ui_SaveSelectedSequenceFromMSADialog())
+{
+    ui->setupUi(this);
+    new HelpButton(this, ui->buttonBox, "17470585");
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
+    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     trimGapsFlag = false;
     addToProjectFlag = true;
 
-    SaveDocumentGroupControllerConfig conf;
-    conf.dfc.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.dfc.supportedObjectTypes+=GObjectTypes::SEQUENCE;
-    conf.fileDialogButton = fileButton;
-    conf.formatCombo = formatCombo;
-    conf.fileNameEdit = fileNameEdit;
-    conf.parentWidget = this;
-    conf.defaultFormatId = BaseDocumentFormats::FASTA;
-    saveContoller = new SaveDocumentGroupController(conf, this);
-
+    initSaveController();
+}
+SaveSelectedSequenceFromMSADialogController::~SaveSelectedSequenceFromMSADialogController(){
+    delete ui;
 }
 
 void SaveSelectedSequenceFromMSADialogController::accept() {
-    if (fileNameEdit->text().isEmpty()) {
+    if (saveController->getSaveFileName().isEmpty()) {
         QMessageBox::critical(this, L10N::errorTitle(), tr("File name is empty!"));
         return;
     }
 
-    url = saveContoller->getSaveFileName();
-    format = saveContoller->getFormatIdToSave();
-    trimGapsFlag = trimGapsRB->isChecked();
-    addToProjectFlag = addToProjectBox->isChecked();
+    url = saveController->getSaveFileName();
+    format = saveController->getFormatIdToSave();
+    trimGapsFlag = ui->trimGapsRB->isChecked();
+    addToProjectFlag = ui->addToProjectBox->isChecked();
 
     QDialog::accept();
 }
 
+void SaveSelectedSequenceFromMSADialogController::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::FASTA;
+    config.fileDialogButton = ui->fileButton;
+    config.fileNameEdit = ui->fileNameEdit;
+    config.formatCombo = ui->formatCombo;
+    config.parentWidget = this;
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::SEQUENCE;
+    formatConstraints.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
+
 }
diff --git a/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.h b/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.h
index 567c814..3f5f844 100644
--- a/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.h
+++ b/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.h
@@ -22,23 +22,21 @@
 #ifndef _U2_SAVE_SELECTED_SEQUENCES_DIALOG_CONTROLLER
 #define _U2_SAVE_SELECTED_SEQUENCES_DIALOG_CONTROLLER
 
+#include <QDialog>
+
 #include <U2Core/global.h>
-#include <U2Gui/SaveDocumentGroupController.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+class Ui_SaveSelectedSequenceFromMSADialog;
 
-#include <ui/ui_SaveSelectedSequenceFromMSADialog.h>
+namespace U2 {
 
-namespace U2{
+class SaveDocumentController;
 
-class SaveSelectedSequenceFromMSADialogController : public QDialog, Ui_SaveSelectedSequenceFromMSADialog {
+class SaveSelectedSequenceFromMSADialogController : public QDialog {
     Q_OBJECT
 public:
     SaveSelectedSequenceFromMSADialogController(QWidget* p);
+    ~SaveSelectedSequenceFromMSADialogController();
 
     virtual void accept();
 
@@ -48,7 +46,10 @@ public:
     bool                addToProjectFlag;
 
 private:
-    SaveDocumentGroupController* saveContoller;
+    void initSaveController();
+
+    SaveDocumentController* saveController;
+    Ui_SaveSelectedSequenceFromMSADialog* ui;
 };
 
 }
diff --git a/src/corelibs/U2View/src/ov_msa/ui/SelectSubalignmentDialog.ui b/src/corelibs/U2View/src/ov_msa/SelectSubalignmentDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/SelectSubalignmentDialog.ui
rename to src/corelibs/U2View/src/ov_msa/SelectSubalignmentDialog.ui
diff --git a/src/corelibs/U2View/src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui b/src/corelibs/U2View/src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui
rename to src/corelibs/U2View/src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui
diff --git a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.h b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.h
index 8cb7ca0..894cb56 100644
--- a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.h
+++ b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.h
@@ -24,7 +24,7 @@
 
 #include "../MsaOpSavableTab.h"
 
-#include "ui/ui_MSADistancesColumnSettingsWidget.h"
+#include "ui_MSADistancesColumnSettingsWidget.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp
index a0a5802..884dfa2 100644
--- a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp
+++ b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp
@@ -34,7 +34,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 = "17467664";
+const QString SeqStatisticsWidgetFactory::GROUP_DOC_PAGE = "17470596";
 
 
 SeqStatisticsWidgetFactory::SeqStatisticsWidgetFactory() {
diff --git a/src/corelibs/U2View/src/ov_msa/ui/SequenceSelectorWidget.ui b/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidget.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/SequenceSelectorWidget.ui
rename to src/corelibs/U2View/src/ov_msa/SequenceSelectorWidget.ui
diff --git a/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.h b/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.h
index 826ee21..9f6a24b 100644
--- a/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.h
+++ b/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_SEQUENCE_SELECT_WIDGET_CONTROLLER
 #define _U2_SEQUENCE_SELECT_WIDGET_CONTROLLER
 
-#include "ui/ui_SequenceSelectorWidget.h"
+#include "ui_SequenceSelectorWidget.h"
 
 #include <U2View/MSAEditor.h>
 
diff --git a/src/corelibs/U2View/src/ov_msa/TreeOptions/AddTreeWidget.cpp b/src/corelibs/U2View/src/ov_msa/TreeOptions/AddTreeWidget.cpp
deleted file mode 100644
index 07b1886..0000000
--- a/src/corelibs/U2View/src/ov_msa/TreeOptions/AddTreeWidget.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2011 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 "AddTreeWidget.h"
-
-#include <U2Gui/ShowHideSubgroupWidget.h>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/IOAdapter.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/DocumentUtils.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/Settings.h>
-#include <U2Core/AppResources.h>
-#include <U2Core/PluginModel.h>
-
-#include <U2Algorithm/SubstMatrixRegistry.h>
-#include <U2Algorithm/PhyTreeGeneratorRegistry.h>
-
-namespace U2 {
-
-static const int ITEMS_SPACING = 10;
-static const int TITLE_SPACING = 5;
-
-static inline QVBoxLayout * initLayout(QWidget * w) {
-    QVBoxLayout * layout = new QVBoxLayout;
-    layout->setContentsMargins(0, 0, 0, 0);
-    layout->setSpacing(5);
-    layout->setAlignment(Qt::AlignTop);
-
-    w->setLayout(layout);
-    return layout;
-}
-
-AddTreeWidget::AddTreeWidget(const MAlignmentObject* mobj):msa(_mobj->getMAlignment()), mobj(_mobj){
-    createGroups();
-}
-void AddTreeWidget::createGroups() {
-    QVBoxLayout* mainLayout = initLayout(this);
-    mainLayout->setSpacing(0);
-
-    QWidget * similarityGroup = new ShowHideSubgroupWidget("TREE", tr("Trees settings"), createTreesSettings(), true);
-    mainLayout->addWidget(similarityGroup);
-    QWidget * visualGroup = new ShowHideSubgroupWidget("TREE_VISUAL", tr("Labels formating"), createLabelsFormatSettings(), true);
-    mainLayout->addWidget(visualGroup);
-    QWidget * branchGroup = new ShowHideSubgroupWidget("BRANCH_SETTINGS", tr("Branches settings"), createBranchSettings(), true);
-    mainLayout->addWidget(branchGroup);
-}
-
-QWidget* AddTreeWidget::createSettingsWidget() {
-    QWidget* group = new QWidget();
-    QVBoxLayout* groupLayout = initLayout(group);
-    algorithmBox = new QComboBox(group);
-    groupLayout->addItem(algorithmBox);
-
-    const GUrl& msaURL = mobj->getDocument()->getURL();
-    GUrl url = GUrlUtils::rollFileName(msaURL.dirPath() + "/" + msaURL.baseFileName() + ".nwk", DocumentUtils::getNewDocFileNameExcludesHint());
-
-    fileNameEdit = new QLineEdit(group);
-    groupLayout->addItem(fileNameEdit);
-
-    fileNameEdit->setText(url.getURLString());
-    PhyTreeGeneratorRegistry* registry = AppContext::getPhyTreeGeneratorRegistry();
-    algorithmBox->addItems(registry->getNameList());
-
-    connect(browseButton, SIGNAL(clicked()), SLOT(sl_browseClicked()));
-    connect(algorithmBox, SIGNAL(currentIndexChanged ( int )), SLOT(sl_comboIndexChaged(int)));
-
-    int itemIndex = algorithmBox->count()-1;
-    assert(itemIndex >= 0);
-
-    int curIndex = algorithmBox->currentIndex();
-    if(itemIndex == curIndex){ //cause the signal currentIndexChanged isn't sent in this case
-        PhyTreeGenerator* generator = registry->getGenerator(algorithmBox->itemText(curIndex));
-        generator->setupCreatePhyTreeUI(this, msa);
-        verticalLayout->activate();
-    }
-    else {
-        algorithmBox->setCurrentIndex(i);
-    }
-}
-
-void CreatePhyTreeDialogController::insertContrWidget( int pos, CreatePhyTreeWidget* widget )
-{
-    QWidget* contrWidget = new QWidget(this);
-    QVBoxLayout* contrLayout = new QVBoxLayout(contrWidget);
-
-    QLayout* mainLayout = widget->layout();
-    QStack<QLayout*> layoutStack;
-    layoutStack.push(mainLayout);
-    do{
-        QLayout* curLayout = layoutStack.pop();
-        int count = curLayout->count();
-        for(int i = 0; i < count; i++) {
-            QLayoutItem* curItem = curLayout->itemAt(i);
-            QLayout* layout = qobject_cast<QLayout*>(curItem);
-            if(NULL != layout) {
-                layoutStack.push(layout);
-                continue;
-            }
-            QGroupBox* group = qobject_cast<QGroupBox*>(curItem);
-            if(NULL != group) {
-                layoutStack.push();
-                continue;
-            }
-            contrLayout->addWidget(curItem->widget());
-        }
-    }while(!layoutStack.isEmpty());
-
-    contrWidget->setLayout(contrLayout);
-    childWidgets.append(contrWidget);
-
-}
-
-void CreatePhyTreeDialogController::clearContrWidgets(){
-    foreach(QWidget* w, childWidgets){
-        // adjust sizes
-        setMinimumHeight(minimumHeight() - w->minimumHeight());
-        w->hide();
-        delete w;
-    }
-    childWidgets.clear();
-    adjustSize();
-}
-
-void CreatePhyTreeDialogController::sl_browseClicked()
-{
-    GUrl oldUrl = ui->fileNameEdit->text();
-    QString path;
-    LastUsedDirHelper lod;
-    if (oldUrl.isEmpty()) {
-        path = lod.dir;
-    } else {
-        path = oldUrl.getURLString();
-    }
-    GUrl newUrl = QFileDialog::getSaveFileName(this, "Choose file name", path,"Newick format (*.nwk)");
-
-    if (newUrl.isEmpty()) {
-        return;
-    }
-    ui->fileNameEdit->setText(newUrl.getURLString());
-    lod.url = newUrl.getURLString();
-}
-
-void CreatePhyTreeDialogController::sl_comboIndexChaged(int ){
-    clearContrWidgets();
-    PhyTreeGeneratorRegistry* registry = AppContext::getPhyTreeGeneratorRegistry();
-    PhyTreeGenerator* generator = registry->getGenerator(ui->algorithmBox->currentText());
-    generator->setupCreatePhyTreeUI(this, msa);
-    ui->verticalLayout->activate();
-}
-}
diff --git a/src/corelibs/U2View/src/ov_msa/TreeOptions/AddTreeWidget.h b/src/corelibs/U2View/src/ov_msa/TreeOptions/AddTreeWidget.h
deleted file mode 100644
index e4332b2..0000000
--- a/src/corelibs/U2View/src/ov_msa/TreeOptions/AddTreeWidget.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2011 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_TREE_OPTIONS_WIDGET_H_
-#define _U2_TREE_OPTIONS_WIDGET_H_
-
-#include <QtGui/QtGui>
-#include <U2View/MSAEditor.h>
-
-namespace U2 {
-
-class U2VIEW_EXPORT AddTreeWidget: public QWidget
-{
-    Q_OBJECT
-public:
-    AddTreeWidget(const MAlignmentObject* _mobj);
-private slots:
-private:
-    void createGroups();
-    QWidget* createSettingsWidget();
-
-
-    MAlignment msa;
-    const MAlignmentObject* mobj
-
-    QComboBox *algorithmBox;
-    QRadioButton *createNewView;
-    QRadioButton *displayWithAlignmentEditor;
-    QLineEdit *fileNameEdit;
-    QToolButton *browseButton;
-    QPushButton *storeSettings;
-    QPushButton *restoreSettings;
-    QSpacerItem *horizontalSpacer;
-};
-} // namespace
-
-#endif
diff --git a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.h b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.h
index cf6abb2..b9ff403 100644
--- a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.h
+++ b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.h
@@ -26,7 +26,7 @@
 
 #include "ov_phyltree/TreeSettings.h"
 
-#include "ui/ui_TreeOptionsWidget.h"
+#include "ui_TreeOptionsWidget.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_msa/ui/TreeOptionsWidget.ui b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_msa/ui/TreeOptionsWidget.ui
rename to src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.ui
diff --git a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp
index 23ae576..165e8d7 100644
--- a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp
+++ b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp
@@ -34,7 +34,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 = "17467701";
+const QString MSATreeOptionsWidgetFactory::GROUP_DOC_PAGE = "17470634";
 
 
 MSATreeOptionsWidgetFactory::MSATreeOptionsWidgetFactory()
@@ -75,7 +75,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 = "17467701";
+const QString TreeOptionsWidgetFactory::GROUP_DOC_PAGE = "17470634";
 
 TreeOptionsWidgetFactory::TreeOptionsWidgetFactory()
     : viewSettings(new TreeOpWidgetViewSettings)
@@ -117,7 +117,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 = "17467701";
+const QString AddTreeWidgetFactory::GROUP_DOC_PAGE = "17470634";
 
 AddTreeWidgetFactory::AddTreeWidgetFactory() {
     objectViewOfWidget = ObjViewType_AlignmentEditor;
diff --git a/src/corelibs/U2View/src/ov_msa/ui/ExportConsensusWidget.ui b/src/corelibs/U2View/src/ov_msa/ui/ExportConsensusWidget.ui
deleted file mode 100644
index 232a954..0000000
--- a/src/corelibs/U2View/src/ov_msa/ui/ExportConsensusWidget.ui
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ExportConsensusWidget</class>
- <widget class="QWidget" name="ExportConsensusWidget">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>215</width>
-    <height>442</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <property name="spacing">
-    <number>18</number>
-   </property>
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <property name="spacing">
-      <number>1</number>
-     </property>
-     <item row="0" column="0">
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>Export to file</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <widget class="QLineEdit" name="pathLe"/>
-     </item>
-     <item row="1" column="1">
-      <widget class="QToolButton" name="browseBtn">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <layout class="QGridLayout" name="gridLayout_2">
-     <property name="verticalSpacing">
-      <number>1</number>
-     </property>
-     <item row="0" column="0">
-      <widget class="QLabel" name="label">
-       <property name="text">
-        <string>File format</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <widget class="QComboBox" name="formatCb"/>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <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>
-       </property>
-       <property name="wordWrap">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item alignment="Qt::AlignHCenter">
-    <widget class="QToolButton" name="exportBtn">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>198</width>
-       <height>23</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>198</width>
-       <height>16777215</height>
-      </size>
-     </property>
-     <property name="sizeIncrement">
-      <size>
-       <width>0</width>
-       <height>37</height>
-      </size>
-     </property>
-     <property name="text">
-      <string>Export</string>
-     </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>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp b/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp
index 2698bcc..a587e5a 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp
@@ -33,6 +33,7 @@
 #include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/GObjectUtils.h>
 #include <U2Core/U2SafePoints.h>
+#include <U2Gui/MultiClickMenu.h>
 #include <U2View/CodonTable.h>
 
 
@@ -211,37 +212,37 @@ void ADVSequenceObjectContext::sl_onAnnotationRelationChange() {
     }
 }
 
-QMenu* ADVSequenceObjectContext::createTranslationsMenu() {
-    QMenu* m = NULL, *frames = NULL;
-    if (translations) {
-        m = new QMenu(tr("Amino translation"));
-        frames = new QMenu(tr("Translation frames"));
-        frames->menuAction()->setObjectName("Translation frames");
+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");
 
-        SAFE_POINT(visibleFrames != NULL, "ADVSequenceObjectContext: visibleFrames is NULL ?!", m);
-        foreach(QAction* a, visibleFrames->actions()) {
-            frames->addAction(a);
-        }
-        frames->addSeparator();
+    foreach (QAction *a, translations->actions()) {
+        menu->addAction(a);
+    }
+    return menu;
+}
 
-        connect(frames->addAction(QString("Show direct only")), SIGNAL(triggered()), SLOT(sl_showDirectOnly()));
-        connect(frames->addAction(QString("Show complementary only")), SIGNAL(triggered()), SLOT(sl_showComplOnly()));
-        connect(frames->addAction(QString("Show all")), SIGNAL(triggered()), SLOT(sl_showShowAll()));
+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);
 
-        if (view != NULL){
-            m->addAction(view->getShowCodonTableAction());
-        }
-        m->addMenu(frames);
-        m->addSeparator();
+    menu->addAction(showTranslationAction);
+    menu->addSeparator();
 
-        m->setIcon(QIcon(":core/images/tt_switch.png"));
-        foreach(QAction* a, translations->actions()) {
-            m->addAction(a);
-        }
+    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();
 
-        m->menuAction()->setObjectName("AminoTranslationAction");
+    foreach(QAction* a, visibleFrames->actions()) {
+        menu->addAction(a);
     }
-    return m;
+    return menu;
 }
 
 void ADVSequenceObjectContext::setAminoTranslation(const QString& tid) {
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.h b/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.h
index d4d76c9..4c8943a 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.h
@@ -71,7 +71,8 @@ public:
     QSet<AnnotationTableObject *> getAutoAnnotationObjects() const { return autoAnnotations; }
     QList<GObject*> getAnnotationGObjects() const;
 
-    QMenu* createTranslationsMenu();
+    QMenu * createGeneticCodeMenu();
+    QMenu * createTranslationFramesMenu(QAction *showTranslationAction);
     void setAminoTranslation(const QString& tid);
 
     void addAnnotationObject(AnnotationTableObject *obj);
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.cpp b/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.cpp
index e3cc969..12ebb92 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.cpp
@@ -195,13 +195,7 @@ void ADVSingleSequenceWidget::init() {
     buttonTabOrederedNames->append(selectRangeAction1->objectName());
 
     if (seqCtx->getAminoTT() != NULL) {
-        QMenu* ttMenu = seqCtx->createTranslationsMenu();
-        tbMenues.append(ttMenu);
-        QToolButton* button = detView->addActionToLocalToolbar(ttMenu->menuAction());
-        detView->addAction(ctx->getShowCodonTableAction());
-        SAFE_POINT(button, QString("ToolButton for %1 is NULL").arg(ttMenu->menuAction()->objectName()), );
-        button->setPopupMode(QToolButton::InstantPopup);
-        button->setObjectName("AminoToolbarButton");
+        setupGeneticCodeMenu(seqCtx);
     } else {
         ttButton = NULL;
     }
@@ -561,6 +555,16 @@ void ADVSingleSequenceWidget::addRulersMenu(QMenu& m) {
     m.insertSeparator(aBefore)->setObjectName("SECOND_SEP");
 }
 
+void ADVSingleSequenceWidget::setupGeneticCodeMenu(ADVSequenceObjectContext *seqCtx) {
+    QMenu *ttMenu = seqCtx->createGeneticCodeMenu();
+    CHECK(NULL != ttMenu, );
+    tbMenues.append(ttMenu);
+    QToolButton *button = detView->addActionToLocalToolbar(ttMenu->menuAction());
+    SAFE_POINT(button, QString("ToolButton for %1 is NULL").arg(ttMenu->menuAction()->objectName()), );
+    button->setPopupMode(QToolButton::InstantPopup);
+    button->setObjectName("AminoToolbarButton");
+}
+
 bool ADVSingleSequenceWidget::isWidgetOnlyObject(GObject* o) const {
     foreach(GSequenceLineView* v, lineViews) {
         ADVSequenceObjectContext *ctx = v->getSequenceContext();
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.h b/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.h
index 8e4e3d6..2b4184c 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.h
@@ -172,6 +172,7 @@ private:
     QToolButton* addButtonWithActionToToolbar(QAction * buttonAction, QToolBar * toolBar, int position = -1) const;
     void addRulersMenu(QMenu& m);
     void addSelectMenu(QMenu& m);
+    void setupGeneticCodeMenu(ADVSequenceObjectContext *seqCtx);
 
     /** Used by several other functions to set new selected region */
     void setSelectedRegion(const U2Region& region);
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSplitWidget.cpp b/src/corelibs/U2View/src/ov_sequence/ADVSplitWidget.cpp
deleted file mode 100644
index e69de29..0000000
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.cpp b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.cpp
index 5a4f272..bad3045 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.cpp
@@ -25,6 +25,7 @@
 #include <QScrollArea>
 #include <QToolBar>
 #include <QVBoxLayout>
+#include <limits>
 
 #include <U2Core/AnnotationSelection.h>
 #include <U2Core/AnnotationSettings.h>
@@ -88,6 +89,10 @@
 #include "AutoAnnotationUtils.h"
 #include "GraphMenu.h"
 
+#ifdef max
+#undef max
+#endif
+
 namespace U2 {
 
 AnnotatedDNAView::AnnotatedDNAView(const QString& viewName, const QList<U2SequenceObject*>& dnaObjects)
@@ -111,10 +116,7 @@ AnnotatedDNAView::AnnotatedDNAView(const QString& viewName, const QList<U2Sequen
     codonTableView = new CodonTableView(this);
     connect(this, SIGNAL(si_focusChanged(ADVSequenceWidget*,ADVSequenceWidget*)),
             codonTableView, SLOT(sl_onSequenceFocusChanged(ADVSequenceWidget*,ADVSequenceWidget*)));
-    showCodonTableAction = new CodonTableAction(codonTableView);
-    showCodonTableAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_B));
-    showCodonTableAction->setShortcutContext(Qt::WindowShortcut);
-
+    createCodonTableAction();
     createAnnotationAction = (new ADVAnnotationCreation(this))->getCreateAnnotationAction();
 
     posSelectorAction = new QAction(QIcon(":core/images/goto.png"), tr("Go to position..."), this);
@@ -130,9 +132,6 @@ AnnotatedDNAView::AnnotatedDNAView(const QString& viewName, const QList<U2Sequen
     removeAnnsAndQsAction->setShortcut(QKeySequence(Qt::Key_Delete));
     removeAnnsAndQsAction->setShortcutContext(Qt::WidgetWithChildrenShortcut);
 
-    renameItemAction = new QAction(tr("Rename item"), this);
-    renameItemAction->setObjectName("rename_item");
-
     syncViewManager = new ADVSyncViewManager(this);
 
     foreach(U2SequenceObject* dnaObj, dnaObjects) {
@@ -221,6 +220,7 @@ QWidget* AnnotatedDNAView::createWidget() {
         ADVSequenceObjectContext* seqCtx = seqContexts[i];
         ADVSingleSequenceWidget* block = new ADVSingleSequenceWidget(seqCtx, this);
         connect(block, SIGNAL(si_titleClicked(ADVSequenceWidget*)), SLOT(sl_onSequenceWidgetTitleClicked(ADVSequenceWidget*)));
+        connect(seqCtx, SIGNAL(si_aminoTranslationChanged()), SLOT(sl_aminoTranslationChanged()));
         block->setObjectName("ADV_single_sequence_widget_"+QString::number(i));
         addSequenceWidget(block);
         block->addAction(createPasteAction());
@@ -248,13 +248,11 @@ QWidget* AnnotatedDNAView::createWidget() {
 //add view global shortcuts
 
     connect(removeAnnsAndQsAction, SIGNAL(triggered()),annotationsView->removeAnnsAndQsAction, SIGNAL(triggered()));
-    connect(renameItemAction, SIGNAL(triggered()), annotationsView->renameAction, SIGNAL(triggered()));
 
     mainSplitter->addAction(toggleHLAction);
     mainSplitter->addAction(removeSequenceObjectAction);
 
     mainSplitter->addAction(removeAnnsAndQsAction);
-    mainSplitter->addAction(renameItemAction);
 
     mainSplitter->setWindowIcon(GObjectTypes::getTypeInfo(GObjectTypes::SEQUENCE).icon);
 
@@ -593,6 +591,10 @@ void AnnotatedDNAView::addEditMenu(QMenu* m) {
     };
     rm->menuAction()->setObjectName(ADV_MENU_EDIT);
 
+    if (annotationSelection->getSelection().size() == 1 && annotationsView->editAction->isEnabled()) {
+        rm->addAction(annotationsView->editAction);
+    }
+
     rm->addAction(addSequencePart);
     rm->addAction(replaceSequencePart);
     sl_selectionChanged();
@@ -742,14 +744,6 @@ void AnnotatedDNAView::sl_onContextMenuRequested(const QPoint &scrollAreaPos) {
 
     m.addAction(posSelectorAction);
 
-    QRect annTreeRect = annotationsView->getTreeWidget()->rect();
-    // convert to global coordinates
-    annTreeRect.moveTopLeft(annotationsView->getTreeWidget()->mapToGlobal(annTreeRect.topLeft()));
-    QPoint globalPos = mainSplitter->mapToGlobal(scrollAreaPos);
-    if (!annTreeRect.contains(globalPos)) {
-        m.addAction(renameItemAction);
-    }
-
     m.addSeparator()->setObjectName("FIRST_SEP");
     clipb->addCopyMenu(&m);
     m.addSeparator()->setObjectName(ADV_MENU_SECTION1_SEP);
@@ -777,9 +771,6 @@ void AnnotatedDNAView::sl_onContextMenuRequested(const QPoint &scrollAreaPos) {
 
         toggleHLAction->setObjectName("toggle_HL_action");
         m.addAction(toggleHLAction);
-        renameItemAction->setEnabled(true);
-    } else {
-        renameItemAction->setEnabled(false);
     }
 
     if (NULL != focusedWidget) {
@@ -988,7 +979,7 @@ void AnnotatedDNAView::addRelatedAnnotations(ADVSequenceObjectContext *seqCtx) {
 }
 
 void AnnotatedDNAView::addAutoAnnotations(ADVSequenceObjectContext* seqCtx) {
-    AutoAnnotationObject *aa = new AutoAnnotationObject(seqCtx->getSequenceObject(), seqCtx);
+    AutoAnnotationObject *aa = new AutoAnnotationObject(seqCtx->getSequenceObject(), seqCtx->getAminoTT(), seqCtx);
     seqCtx->addAutoAnnotationObject(aa->getAnnotationObject());
     autoAnnotationsMap.insert(seqCtx, aa);
 
@@ -1100,6 +1091,15 @@ void AnnotatedDNAView::finishSeqWidgetMove() {
     replacedSeqWidget = NULL;
 }
 
+void AnnotatedDNAView::createCodonTableAction() {
+    QAction *showCodonTableAction = new ADVGlobalAction(this, QIcon(":core/images/codon_table.png"), tr("Show codon table"), std::numeric_limits<int>::max() - 1, ADVGlobalActionFlag_AddToToolbar);
+    showCodonTableAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_B));
+    showCodonTableAction->setShortcutContext(Qt::WindowShortcut);
+    connect(showCodonTableAction, SIGNAL(triggered()), codonTableView, SLOT(sl_setVisible()));
+    showCodonTableAction->setObjectName("Codon table");
+    showCodonTableAction->setCheckable(true);
+}
+
 void AnnotatedDNAView::sl_onDocumentLoadedStateChanged() {
     Document* d = qobject_cast<Document*>(sender());
     importDocAnnotations(d);
@@ -1278,7 +1278,7 @@ QList<AnnotationTableObject *> AnnotatedDNAView::getAnnotationObjects(bool inclu
 void AnnotatedDNAView::updateAutoAnnotations() {
     QList<AutoAnnotationObject *> autoAnnotations = autoAnnotationsMap.values();
     foreach (AutoAnnotationObject *aa, autoAnnotations) {
-        aa->update();
+        aa->updateAll();
     }
 }
 
@@ -1337,7 +1337,7 @@ void AnnotatedDNAView::sl_paste(){
             }
         }
     }
-    
+
     PasteTask* task = pasteFactory->pasteTask(!focus);
     if (focus){
         connect(new TaskSignalMapper(task), SIGNAL(si_taskFinished(Task *)), SLOT(sl_pasteFinished(Task*)));
@@ -1429,6 +1429,17 @@ void AnnotatedDNAView::sl_selectionChanged() {
     }
 }
 
+void AnnotatedDNAView::sl_aminoTranslationChanged() {
+    ADVSequenceObjectContext *seqCtx = getSequenceInFocus();
+    U2SequenceObject *seqObj = seqCtx->getSequenceObject();
+    QList<AutoAnnotationObject *> autoAnnotations = autoAnnotationsMap.values();
+    foreach(AutoAnnotationObject *aa, autoAnnotations) {
+        if (aa->getSeqObject() == seqObj) {
+            aa->updateTranslationDependent(seqCtx->getAminoTT());
+        }
+    }
+}
+
 void AnnotatedDNAView::reverseComplementSequence(bool reverse, bool complement) {
     ADVSequenceObjectContext *seqCtx = getSequenceInFocus();
     U2SequenceObject *seqObj = seqCtx->getSequenceObject();
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h
index b324107..a9bdb9b 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h
@@ -155,8 +155,6 @@ public:
 
     const CodonTableView* getCodonTableView() const {return codonTableView; }
 
-    CodonTableAction* getShowCodonTableAction() const {return showCodonTableAction; }
-
 protected:
     virtual QWidget* createWidget();
     virtual bool onObjectRemoved(GObject* o);
@@ -215,6 +213,7 @@ private slots:
     void sl_reverseSequence();
     void sl_complementSequence();
     void sl_selectionChanged();
+    void sl_aminoTranslationChanged();
 
     virtual void sl_onDocumentAdded(Document*);
     virtual void sl_onDocumentLoadedStateChanged();
@@ -232,6 +231,7 @@ private:
     void importDocAnnotations(Document* doc);
     void seqWidgetMove(const QPoint& pos);
     void finishSeqWidgetMove();
+    void createCodonTableAction();
 
     void reverseComplementSequence(bool reverse = true, bool complement = true);
 
@@ -243,7 +243,6 @@ private:
     QVBoxLayout*        scrolledWidgetLayout;
 
     CodonTableView*     codonTableView;
-    CodonTableAction*   showCodonTableAction;
 
     QAction*            createAnnotationAction;
     QAction*            findPatternAction;
@@ -251,7 +250,6 @@ private:
     QAction*            toggleHLAction;
     QAction*            posSelectorWidgetAction;
     QAction*            removeAnnsAndQsAction;
-    QAction*            renameItemAction;
 
     QAction*            addSequencePart;
     QAction*            removeSequencePart;
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.cpp b/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.cpp
index 2a26b37..16466ab 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.cpp
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <QApplication>
 #include <QClipboard>
 #include <QDrag>
 #include <QFileInfo>
@@ -41,6 +42,7 @@
 #include <U2Core/DBXRefRegistry.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/DocumentModel.h>
+#include <U2Core/GenbankFeatures.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/L10n.h>
 #include <U2Core/TaskSignalMapper.h>
@@ -63,7 +65,6 @@
 #include "AnnotatedDNAView.h"
 #include "AnnotationsTreeView.h"
 #include "AutoAnnotationUtils.h"
-#include "EditAnnotationDialogController.h"
 
 namespace U2 {
 
@@ -217,26 +218,13 @@ AnnotationsTreeView::AnnotationsTreeView(AnnotatedDNAView* _ctx) : ctx(_ctx), dn
     copyColumnURLAction = new QAction(tr("copy column URL"), this);
     connect(copyColumnURLAction, SIGNAL(triggered()), SLOT(sl_onCopyColumnURL()));
 
-    renameAction = new QAction(tr("Rename item"), this);
-    renameAction->setObjectName("rename_item");
-    renameAction->setShortcut(QKeySequence(Qt::Key_F2));
-    renameAction->setShortcutContext(Qt::WindowShortcut);
-    connect(renameAction, SIGNAL(triggered()), SLOT(sl_rename()));
-    tree->addAction(renameAction);
-
-    editAction = new QAction(tr("Edit qualifier"), this);
-    editAction->setShortcut(QKeySequence(Qt::Key_F4));
+    editAction = new QAction(tr("Annotation"), this);
+    editAction->setObjectName("edit_annotation_tree_item");
+    editAction->setShortcut(QKeySequence(Qt::Key_F2));
     editAction->setShortcutContext(Qt::WindowShortcut);
-    editAction->setObjectName("edit_qualifier_action");
     connect(editAction, SIGNAL(triggered()), SLOT(sl_edit()));
     tree->addAction(editAction);
 
-    viewAction = new QAction(tr("View qualifier"), this);
-    viewAction->setShortcut(QKeySequence(Qt::Key_F3));
-    viewAction->setShortcutContext(Qt::WindowShortcut);
-    connect(viewAction, SIGNAL(triggered()), SLOT(sl_edit()));
-    tree->addAction(viewAction);
-
     addQualifierAction = new QAction(tr("Qualifier..."), this);
     addQualifierAction->setShortcut(QKeySequence(Qt::Key_Insert));
     addQualifierAction->setShortcutContext(Qt::WindowShortcut);
@@ -397,6 +385,24 @@ void AnnotationsTreeView::sl_onItemSelectionChanged() {
             ags->addToSelection(gItem->group);
         }
     }
+
+    // make the text of Edit action correct
+    if (items.size() == 1) {
+        switch (static_cast<AVItem*>(items.last())->type) {
+        case AVItemType_Group:
+            editAction->setText(tr("Group"));
+            break;
+        case AVItemType_Qualifier:
+            editAction->setText(tr("Qualifier"));
+            break;
+        case AVItemType_Annotation:
+            editAction->setText(tr("Annotation"));
+            break;
+        default:
+            FAIL("Invalid annotation tree item type", );
+        }
+    }
+
     connectAnnotationSelection();
     connectAnnotationGroupSelection();
     updateState();
@@ -437,6 +443,7 @@ void AnnotationsTreeView::sl_onAnnotationSelectionChanged(AnnotationSelection *,
 
     if(!selectedItems.isEmpty()) {
         tree->setCurrentItem(selectedItems.last(), 0, QItemSelectionModel::NoUpdate);
+        editAction->setText(tr("Annotation"));
     }
 
     connect(tree, SIGNAL(itemSelectionChanged()), SLOT(sl_onItemSelectionChanged()));
@@ -610,6 +617,7 @@ void AnnotationsTreeView::sl_onAnnotationModified(const AnnotationModification &
     switch(md.type) {
     case AnnotationModification_NameChanged:
     case AnnotationModification_LocationChanged:
+    case AnnotationModification_TypeChanged:
         {
             QList<AVAnnotationItem *> aItems = findAnnotationItems(md.annotation);
             assert(!aItems.isEmpty());
@@ -865,7 +873,7 @@ void AnnotationsTreeView::sl_onBuildPopupMenu(GObjectView*, QMenu* m) {
 
     //Add active context actions to the top level menu
     QList<QAction*> contextActions;
-    contextActions << toggleQualifierColumnAction << editAction;
+    contextActions << toggleQualifierColumnAction;
 
     QList<QAction *> copySubmenuActions;
     copySubmenuActions << copyQualifierAction << copyQualifierURLAction << copyColumnTextAction
@@ -882,8 +890,12 @@ void AnnotationsTreeView::sl_onBuildPopupMenu(GObjectView*, QMenu* m) {
     QAction* first = m->actions().first();
     m->insertAction(first, searchQualifierAction);
     m->insertAction(first, invertAnnotationSelectionAction);
-    m->insertAction(first, renameAction);
-    //m->insertAction(first, pasteAction);
+
+    QMenu* editMenu = GUIUtils::findSubMenu(m, ADV_MENU_EDIT);
+    SAFE_POINT(editMenu != NULL, L10N::nullPointerError(ADV_MENU_EDIT), );
+    if (editAction->isEnabled()) {
+        editMenu->addAction(editAction);
+    }
 
     m->insertSeparator(first);
     foreach(QAction* a, contextActions) {
@@ -1135,9 +1147,7 @@ void AnnotationsTreeView::updateState() {
     QTreeWidgetItem *ciBase = tree->currentItem();
     AVItem *ci = static_cast<AVItem *>(ciBase);
     bool editableItemSelected = items.size() == 1 && ci!=NULL && ci == items.first() && !ci->isReadonly();
-    renameAction->setEnabled(editableItemSelected);
-    editAction->setEnabled(hasOnly1QualifierSelected && editableItemSelected);
-    viewAction->setEnabled(hasOnly1QualifierSelected);
+    editAction->setEnabled(editableItemSelected);
 
     bool hasEditableAnnotationContext = editableItemSelected && (ci->type == AVItemType_Annotation || ci->type == AVItemType_Qualifier);
     addQualifierAction->setEnabled(hasEditableAnnotationContext);
@@ -1549,7 +1559,8 @@ void AnnotationsTreeView::sl_itemEntered(QTreeWidgetItem * i, int column) {
 void AnnotationsTreeView::sl_itemDoubleClicked(QTreeWidgetItem *i, int) {
     AVItem* item = static_cast<AVItem*>(i);
     if (item->type == AVItemType_Qualifier) {
-        editItem(item);
+        AVQualifierItem *qi = static_cast<AVQualifierItem *>(item);
+        editQualifierItem(qi);
     }
 }
 
@@ -1560,7 +1571,7 @@ void AnnotationsTreeView::sl_itemClicked(QTreeWidgetItem *i, int column) {
     }
     QString fileUrl = item->getFileUrl(column);
     if (!fileUrl.isEmpty()) {
-        Task *task = new LoadRemoteDocumentAndOpenViewTask(fileUrl);
+        Task *task = new LoadRemoteDocumentAndAddToProjectTask(fileUrl);
         AppContext::getTaskScheduler()->registerTopLevelTask(task);
     } else {
         GUIUtils::runWebBrowser(item->buildLinkURL(column));
@@ -1723,7 +1734,6 @@ void AnnotationsTreeView::saveState(QVariantMap& map) const {
 
 void AnnotationsTreeView::updateState(const QVariantMap& map) {
     QStringList columns = map.value(COLUMN_NAMES).toStringList();
-    //QByteArray geom = map.value(COLUMNS_GEOM).toByteArray();
 
     if (columns != qColumns && !columns.isEmpty()) {
         TreeSorter ts(this);
@@ -1734,9 +1744,6 @@ void AnnotationsTreeView::updateState(const QVariantMap& map) {
             addQualifierColumn(q);
         }
     }
-    /*if (columns == qColumns && !geom.isEmpty()) {
-        tree->header()->restoreState(geom);
-    }*/
 }
 
 void AnnotationsTreeView::setSortingEnabled(bool v) {
@@ -1754,35 +1761,94 @@ void AnnotationsTreeView::sl_sortTree() {
     tree->setSortingEnabled(true);
 }
 
-void AnnotationsTreeView::sl_rename() {
+void AnnotationsTreeView::sl_edit() {
     AVItem *item = static_cast<AVItem *>(tree->currentItem());
-    renameItem(item);
+    editItem(item);
 }
 
-void AnnotationsTreeView::sl_edit() {
-    AVItem *item = static_cast<AVItem *>(tree->currentItem());
-    if (item != NULL) {
-        editItem(item);
+void AnnotationsTreeView::editGroupItem(AVGroupItem *gi) {
+    SAFE_POINT(gi != NULL, "Item is NULL", );
+    SAFE_POINT(gi->group->getParentGroup() != NULL, "Attempting renaming of root group!", ); //not a root group
+    QString oldName = gi->group->getName();
+    QString newName = renameDialogHelper(gi, oldName, tr("Edit Group"));
+    AnnotationGroup *parentAnnotationGroup = gi->group->getParentGroup();
+    if (newName != oldName && AnnotationGroup::isValidGroupName(newName, false) && parentAnnotationGroup->getSubgroup(newName, false) == NULL) {
+        gi->group->setName(newName);
+        gi->group->getGObject()->setModified(true);
+        gi->updateVisual();
     }
 }
 
-void AnnotationsTreeView::editItem(AVItem *item) {
-    //warn: item could be readonly here -> used just for viewing advanced context
-    if (item->type == AVItemType_Qualifier) {
-        AVQualifierItem *qi  = static_cast<AVQualifierItem*>(item);
-        AVAnnotationItem *ai = static_cast<AVAnnotationItem*>(qi->parent());
-        U2Qualifier q;
-        bool ro = qi->isReadonly();
-        bool ok = editQualifierDialogHelper(qi, ro, q);
-        QString simplifiedValue = AVQualifierItem::simplifyText(q.value);
-        if (!ro && ok && (q.name !=qi->qName || simplifiedValue != qi->qValue)) {
-            Annotation *a = (static_cast<AVAnnotationItem*>(qi->parent()))->annotation;
-            a->removeQualifier(U2Qualifier(qi->qName, qi->qValue));
-            a->addQualifier(q);
-            AVQualifierItem *qi = ai->findQualifierItem(q.name, q.value);
-            tree->setCurrentItem(qi);
-            tree->scrollToItem(qi);
+void AnnotationsTreeView::editQualifierItem(AVQualifierItem *qi) {
+    SAFE_POINT(qi != NULL, "Item is NULL", );
+    AVAnnotationItem *ai = static_cast<AVAnnotationItem*>(qi->parent());
+    U2Qualifier q;
+    bool ro = qi->isReadonly();
+    bool ok = editQualifierDialogHelper(qi, ro, q);
+    QString simplifiedValue = AVQualifierItem::simplifyText(q.value);
+    if (!ro && ok && (q.name !=qi->qName || simplifiedValue != qi->qValue)) {
+        Annotation *a = (static_cast<AVAnnotationItem*>(qi->parent()))->annotation;
+        a->removeQualifier(U2Qualifier(qi->qName, qi->qValue));
+        a->addQualifier(q);
+        AVQualifierItem *qi = ai->findQualifierItem(q.name, q.value);
+        tree->setCurrentItem(qi);
+        tree->scrollToItem(qi);
+    }
+}
+
+void AnnotationsTreeView::editAnnotationItem(AVAnnotationItem *ai) {
+    QVector<U2Region> l = ai->annotation->getRegions();
+    QList<ADVSequenceObjectContext *> soList = ctx->findRelatedSequenceContexts(ai->annotation->getGObject());
+    SAFE_POINT(1 == soList.size(), "Invalid sequence context count!", );
+    ADVSequenceObjectContext *so = soList.first();
+
+    CreateAnnotationModel m;
+    m.sequenceObjectRef = GObjectReference(so->getSequenceGObject());
+    m.defaultIsNewDoc = false;
+    m.groupName = ai->getAnnotationGroup()->getName();
+    m.data = ai->annotation->getData();
+    QString oldDescription = ai->annotation->findFirstQualifierValue(GBFeatureUtils::QUALIFIER_NOTE);
+    m.description = oldDescription;
+    m.hideAnnotationTableOption = true;
+    m.hideGroupName = true;
+    m.useAminoAnnotationTypes = so->getAminoTT() == NULL;
+
+    m.annotationObjectRef = GObjectReference(ai->getAnnotationTableObject());
+    m.sequenceLen = so->getSequenceLength();
+    QObjectScopedPointer<CreateAnnotationDialog> dlg = new CreateAnnotationDialog(this, m);
+    QString helpPageId= "17467567"; //! the line is important for the script that changes the documentation links
+    dlg->updateAppearance(tr("Edit Annotation"), helpPageId, tr("Edit"));
+    const int result = dlg->exec();
+
+    if (result == QDialog::Accepted) {
+        QString newName = m.data->name;
+        if (newName != ai->annotation->getName()) {
+            ai->annotation->setName(newName);
+            QList<AVAnnotationItem *> ais = findAnnotationItems(ai->annotation);
+            foreach (AVAnnotationItem *a, ais) {
+                a->updateVisual(ATVAnnUpdateFlag_BaseColumns);
+            }
+        }
+        U2Location location = m.data->location;
+        if(!location->regions.isEmpty() && l != location->regions){
+            ai->annotation->updateRegions(location->regions);
+        }
+
+        U2FeatureType newType = m.data->type;
+        if (newType != ai->annotation->getType()) {
+            ai->annotation->setType(newType);
+        }
+
+        if ((m.description.isEmpty() && oldDescription != QString::null) || (m.description != oldDescription)) {
+            ai->annotation->removeQualifier(U2Qualifier(GBFeatureUtils::QUALIFIER_NOTE, oldDescription));
         }
+        if (!m.description.isEmpty() && m.description != oldDescription) {
+            ai->annotation->addQualifier(U2Qualifier(GBFeatureUtils::QUALIFIER_NOTE, m.description));
+        }
+
+        ai->annotation->setLocationOperator(location->op);
+        ai->annotation->setStrand(location->strand);
+        ai->annotation->getGObject()->setModified(true);
     }
 }
 
@@ -1839,66 +1905,20 @@ bool AnnotationsTreeView::editQualifierDialogHelper(AVQualifierItem *i, bool ro,
     return rc == QDialog::Accepted;
 }
 
-void AnnotationsTreeView::renameItem(AVItem *item) {
+void AnnotationsTreeView::editItem(AVItem *item) {
     if (item->isReadonly()) {
         return;
     }
     if (item->type == AVItemType_Group) {
         AVGroupItem *gi = static_cast<AVGroupItem *>(item);
-        SAFE_POINT(gi->group->getParentGroup() != NULL, "Attempting renaming of root group!", ); //not a root group
-        QString oldName = gi->group->getName();
-        QString newName = renameDialogHelper(item, oldName, tr("Rename Group"));
-        AnnotationGroup *parentAnnotationGroup = gi->group->getParentGroup();
-        if (newName != oldName && AnnotationGroup::isValidGroupName(newName, false) && parentAnnotationGroup->getSubgroup(newName, false) == NULL) {
-            gi->group->setName(newName);
-            gi->group->getGObject()->setModified(true);
-            gi->updateVisual();
-        }
+        editGroupItem(gi);
     } else if (item->type == AVItemType_Annotation) {
         AVAnnotationItem *ai = static_cast<AVAnnotationItem *>(item);
-        QVector<U2Region> l = ai->annotation->getRegions();
-        QList<ADVSequenceObjectContext *> soList = ctx->findRelatedSequenceContexts(ai->annotation->getGObject());
-        SAFE_POINT(1 == soList.size(), "Invalid sequence context count!", );
-        ADVSequenceObjectContext *so = soList.first();
-        U2Region seqRange(0, so->getSequenceObject()->getSequenceLength());
-
-        QObjectScopedPointer<EditAnnotationDialogController> dialog = new EditAnnotationDialogController(ai->annotation->getData(), seqRange, this);
-        moveDialogToItem(ai, dialog.data());
-        const int result = dialog->exec();
-        CHECK(!dialog.isNull(), );
-
-        if (result == QDialog::Accepted) {
-            QString newName = dialog->getName();
-            if (newName != ai->annotation->getName()) {
-                ai->annotation->setName(newName);
-                QList<AVAnnotationItem *> ais = findAnnotationItems(ai->annotation);
-                foreach (AVAnnotationItem *a, ais) {
-                    a->updateVisual(ATVAnnUpdateFlag_BaseColumns);
-                }
-            }
-            U2Location location = dialog->getLocation();
-            if(!location->regions.isEmpty() && l != location->regions){
-                ai->annotation->updateRegions(location->regions);
-            }
-            ai->annotation->setLocationOperator(location->op);
-            ai->annotation->setStrand(location->strand);
-            ai->annotation->getGObject()->setModified(true);
-        }
+        editAnnotationItem(ai);
     } else {
         SAFE_POINT(item->type == AVItemType_Qualifier, "Unexpected annotation view item's qualifier!", );
         AVQualifierItem *qi = static_cast<AVQualifierItem *>(item);
-        AVAnnotationItem *ai = static_cast<AVAnnotationItem *>(qi->parent());
-        QString newName = renameDialogHelper(item, qi->qName, tr("Rename Qualifier"));
-        if (newName != qi->qName) {
-            Annotation *a = (static_cast<AVAnnotationItem *>(qi->parent()))->annotation;
-            QString val = qi->qValue;
-            a->removeQualifier(U2Qualifier(qi->qName, val));
-            a->addQualifier(U2Qualifier(newName, val));
-            a->getGObject()->setModified(true);
-            AVQualifierItem *qi = ai->findQualifierItem(newName, val);
-            tree->setCurrentItem(qi);
-            tree->scrollToItem(qi);
-        }
+        editQualifierItem(qi);
     }
 }
 
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.h b/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.h
index 9b3bdc2..e3616af 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.h
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.h
@@ -129,7 +129,6 @@ private slots:
     void sl_searchQualifier();
     void sl_invertSelection();
 
-    void sl_rename();
     void sl_edit();
     void sl_addQualifier();
 
@@ -144,8 +143,10 @@ protected:
     bool eventFilter(QObject *o, QEvent *e);
 
 private:
-    void renameItem(AVItem *i);
     void editItem(AVItem *i);
+    void editGroupItem(AVGroupItem *gi);
+    void editQualifierItem(AVQualifierItem *qi);
+    void editAnnotationItem(AVAnnotationItem *ai);
 
     QString renameDialogHelper(AVItem *i, const QString &defText, const QString &title);
     bool editQualifierDialogHelper(AVQualifierItem *i, bool ro, U2Qualifier &res);
@@ -177,7 +178,6 @@ private:
     AnnotationsTreeWidget* tree;
 
     AnnotatedDNAView*   ctx;
-    //QAction*            pasteAction;
     QAction*            addAnnotationObjectAction;
     QAction*            removeObjectsFromViewAction;
     QAction*            removeAnnsAndQsAction;
@@ -189,9 +189,7 @@ private:
     QAction*            copyColumnURLAction;
     QAction*            exportAutoAnnotationsGroup;
 
-    QAction*            renameAction;       // action to rename active group/qualifier/annotation only
-    QAction*            editAction;         // action to edit active item -> only for non-readonly
-    QAction*            viewAction;         // action to view active item -> could be used both for readonly and not readonly
+    QAction*            editAction;         // action to edit active group/qualifier/annotation only
     QAction*            addQualifierAction; // action to create qualifier. Editable annotation or editable qualifier must be selected
 
     QAction*            searchQualifierAction;
diff --git a/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.cpp b/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.cpp
index 9d5e496..0f5d8fb 100644
--- a/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.cpp
@@ -63,7 +63,7 @@ AutoAnnotationsADVAction::AutoAnnotationsADVAction(ADVSequenceWidget* v,
 
     updateMenu();
 
-    aaObj->update();
+    aaObj->updateAll();
 }
 
 #define MAX_SEQ_SIZE_TO_ENABLE_AUTO_ANNOTATIONS 10000
diff --git a/src/corelibs/U2View/src/ov_sequence/ui/CreateRulerDialog.ui b/src/corelibs/U2View/src/ov_sequence/CreateRulerDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_sequence/ui/CreateRulerDialog.ui
rename to src/corelibs/U2View/src/ov_sequence/CreateRulerDialog.ui
diff --git a/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.cpp b/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.cpp
index 78d099c..0f6c63f 100644
--- a/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.cpp
@@ -50,7 +50,7 @@ CreateRulerDialogController::CreateRulerDialogController(const QSet<QString>& na
 : QDialog(p)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467545");
+    new HelpButton(this, buttonBox, "17470473");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.h b/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.h
index 615d89f..298bc39 100644
--- a/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.h
+++ b/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.h
@@ -23,7 +23,7 @@
 #define _U2_CREATE_RULER_DIALOG_CONTROLLER_H_
 
 
-#include <ui/ui_CreateRulerDialog.h>
+#include <ui_CreateRulerDialog.h>
 
 #include <U2Core/U2Region.h>
 
diff --git a/src/corelibs/U2View/src/ov_sequence/DetView.cpp b/src/corelibs/U2View/src/ov_sequence/DetView.cpp
index 0c9f0ac..13fd646 100644
--- a/src/corelibs/U2View/src/ov_sequence/DetView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/DetView.cpp
@@ -64,8 +64,7 @@ DetView::DetView(QWidget* p, ADVSequenceObjectContext* ctx)
     showComplementAction->setObjectName("complement_action");
     connect(showComplementAction, SIGNAL(triggered(bool)), SLOT(sl_showComplementToggle(bool)));
 
-    showTranslationAction = new QAction(tr("Show amino translations"), this);
-    showTranslationAction->setIcon(QIcon(":core/images/show_trans.png"));
+    showTranslationAction = new QAction(tr("Show/hide translations"), this);
     showTranslationAction->setObjectName("translation_action");
     connect(showTranslationAction, SIGNAL(triggered(bool)), SLOT(sl_showTranslationToggle(bool)));
 
@@ -97,7 +96,7 @@ DetView::DetView(QWidget* p, ADVSequenceObjectContext* ctx)
         addActionToLocalToolbar(showComplementAction);
     }
     if (hasAmino) {
-        addActionToLocalToolbar(showTranslationAction);
+        setupTranslationsMenu();
     }
 
     verticalScrollBar = new GScrollBar(Qt::Vertical, this);
@@ -539,6 +538,14 @@ void DetView::updateVerticalScrollBarPosition() {
     connect(verticalScrollBar, SIGNAL(valueChanged(int)), SLOT(sl_verticalSrcollBarMoved(int)));
 }
 
+void DetView::setupTranslationsMenu() {
+    QMenu *translationsMenu = ctx->createTranslationFramesMenu(showTranslationAction);
+    CHECK(NULL != translationsMenu, );
+    QToolButton *button = addActionToLocalToolbar(translationsMenu->menuAction());
+    button->setPopupMode(QToolButton::InstantPopup);
+    button->setObjectName("translationsMenuToolbarButton");
+}
+
 /************************************************************************/
 /* DetViewRenderArea */
 /************************************************************************/
diff --git a/src/corelibs/U2View/src/ov_sequence/DetView.h b/src/corelibs/U2View/src/ov_sequence/DetView.h
index aa52d35..94994cd 100644
--- a/src/corelibs/U2View/src/ov_sequence/DetView.h
+++ b/src/corelibs/U2View/src/ov_sequence/DetView.h
@@ -100,6 +100,9 @@ protected:
 
     int numShiftsInOneLine;
     int currentShiftsCounter;
+
+private:
+    void setupTranslationsMenu();
 };
 
 class DetViewRenderArea : public GSequenceLineViewAnnotatedRenderArea {
diff --git a/src/corelibs/U2View/src/ov_sequence/EditAnnotationDialogController.cpp b/src/corelibs/U2View/src/ov_sequence/EditAnnotationDialogController.cpp
deleted file mode 100644
index a1593a6..0000000
--- a/src/corelibs/U2View/src/ov_sequence/EditAnnotationDialogController.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/**
- * 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 <QMenu>
-#include <QMessageBox>
-
-#include <U2Core/Annotation.h>
-#include <U2Core/AnnotationData.h>
-#include <U2Core/GenbankFeatures.h>
-#include <U2Core/U1AnnotationUtils.h>
-
-#include <U2Formats/GenbankLocationParser.h>
-
-#include <U2Gui/CreateAnnotationWidgetController.h>
-#include <U2Gui/HelpButton.h>
-
-#include "EditAnnotationDialogController.h"
-
-/* TRANSLATOR U2::EditAnnotationDialogController */
-
-namespace U2 {
-
-EditAnnotationDialogController::EditAnnotationDialogController(const SharedAnnotationData &a, const U2Region &seqRange, QWidget *p)
-    : QDialog(p), seqRange(seqRange)
-{
-    setupUi(this);
-    new HelpButton(this, buttonBox, "17467567");
-
-    nameEdit->setText(a->name);
-    locationEdit->setText(U1AnnotationUtils::buildLocationString(a));
-    location = a->location;
-
-    QMenu* menu = EditAnnotationDialogController::createAnnotationNamesMenu(this, this);
-    showNameGroupsButton->setMenu(menu);
-    showNameGroupsButton->setPopupMode(QToolButton::InstantPopup);
-
-    connect(locationEdit, SIGNAL(textChanged(const QString&)), SLOT(sl_onTextChanged(const QString&)));
-    connect(complementButton, SIGNAL(clicked()), SLOT(sl_complementLocation()));
-    connect(locationEdit, SIGNAL(returnPressed()), SLOT(accept()));
-    connect(nameEdit, SIGNAL(returnPressed()), SLOT(accept()));
-}
-
-void EditAnnotationDialogController::sl_onTextChanged(const QString& changedText) {
-    QByteArray locEditText = changedText.toLatin1();
-    Genbank::LocationParser::parseLocation(locEditText.constData(), changedText.length(), location);
-    if (location->isEmpty()) {
-        if (changedText.isEmpty()) {
-            statusLabel->setText("<b><font color=\"#A6392E\">" + tr("Location is empty!") + "</font></b>");
-        } else{
-            statusLabel->setText("<b><font color=\"#A6392E\">" + tr("Invalid location!") + "</font><b>");
-        }
-    } else {
-        statusLabel->setText("");
-    }
-}
-
-void EditAnnotationDialogController::accept() {
-    QByteArray locEditText = locationEdit->text().toLatin1();
-    Genbank::LocationParser::parseLocation(locEditText.constData(), locationEdit->text().length(), location);
-
-    if (location->isEmpty()) {
-        QMessageBox::critical(this, tr("Error!"), tr("Annotation location empty or invalid!"));
-        QDialog::reject();
-        return;
-    }
-
-    U2Region cRegion = U2Region::containingRegion(location->regions);
-    bool validRegions = seqRange.contains(cRegion);
-
-    if (!Annotation::isValidAnnotationName(nameEdit->text())) {
-        QMessageBox::critical(this, tr("Error!"), tr("Wrong annotation name!"));
-        QDialog::reject();
-    }else if (!validRegions){
-        QMessageBox::critical(this, tr("Error!"), tr("New annotation locations is out of sequence bounds!"));
-        QDialog::reject();
-    }else{
-        currentName = nameEdit->text();
-        QDialog::accept();
-    }
-}
-
-static bool caseInsensitiveLessThan(const QString &s1, const QString &s2) {
-    return s1.toLower() < s2.toLower();
-}
-
-QMenu* EditAnnotationDialogController::createAnnotationNamesMenu(QWidget* p, QObject* receiver) {
-    assert(p!=NULL && receiver!=NULL);
-
-    QMenu* m = new QMenu(p);
-    const QMultiMap<QString, GBFeatureKey>& nameGroups = GBFeatureUtils::getKeyGroups();
-    QStringList groupNames = nameGroups.uniqueKeys();
-    qSort(groupNames.begin(), groupNames.end(), caseInsensitiveLessThan);
-    foreach(const QString& groupName, groupNames) {
-        QMenu* groupMenu = m->addMenu(groupName);
-        QList<GBFeatureKey> keys = nameGroups.values(groupName);
-        QStringList names;
-        foreach(GBFeatureKey k, keys) {
-            names.append(GBFeatureUtils::getKeyInfo(k).text);
-        }
-        qSort(names.begin(), names.end(), caseInsensitiveLessThan);
-        foreach(const QString& name, names) {
-            QAction* a = new QAction(name, groupMenu);
-            connect(a, SIGNAL(triggered()), receiver, SLOT(sl_setPredefinedAnnotationName()));
-            groupMenu->addAction(a);
-        }
-    }
-    return m;
-}
-
-void EditAnnotationDialogController::sl_setPredefinedAnnotationName() {
-    QAction* a = qobject_cast<QAction*>(sender());
-    QString text = a->text();
-    nameEdit->setText(text);
-}
-
-void EditAnnotationDialogController::sl_complementLocation() {
-    QString text = locationEdit->text();
-    if (text.startsWith("complement(") && text.endsWith(")")) {
-        locationEdit->setText(text.mid(11, text.length()-12));
-    } else {
-        locationEdit->setText("complement(" + text + ")");
-    }
-}
-
-}// ns
-
diff --git a/src/corelibs/U2View/src/ov_sequence/EditAnnotationDialogController.h b/src/corelibs/U2View/src/ov_sequence/EditAnnotationDialogController.h
deleted file mode 100644
index 9a956e5..0000000
--- a/src/corelibs/U2View/src/ov_sequence/EditAnnotationDialogController.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * 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_EDIT_ANNOTATION_DIALOG_CONTROLLER_H_
-#define _U2_EDIT_ANNOTATION_DIALOG_CONTROLLER_H_
-
-#include <U2Core/AnnotationData.h>
-
-#include "ui/ui_EditAnnotationDialog.h"
-
-namespace U2{
-
-class U2VIEW_EXPORT EditAnnotationDialogController : public QDialog, public Ui_EditAnnotationDialog {
-    Q_OBJECT
-public:
-    EditAnnotationDialogController(const SharedAnnotationData &a, const U2Region &seqRange, QWidget *p = NULL);
-
-    virtual void accept();
-
-    QString getName() const {return currentName;}
-    U2Location getLocation() const {return location;}
-
-private slots:
-    void sl_onTextChanged(const QString &);
-    void sl_setPredefinedAnnotationName();
-    void sl_complementLocation();
-
-private:
-    QMenu* createAnnotationNamesMenu(QWidget *p, QObject *receiver);
-
-    U2Region            seqRange;
-    U2Location          location;
-    QString             currentName;
-};
-
-} // namespace U2
-
-#endif //_U2_EDIT_ANNOTATION_DIALOG_CONTROLLER_H_
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp b/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp
index 99f0cb4..b9f6a75 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp
@@ -178,7 +178,7 @@ bool GSequenceLineViewAnnotated::isAnnotationVisible(Annotation *a) const  {
 QList<AnnotationSelectionData> GSequenceLineViewAnnotated::selectAnnotationByCoord(const QPoint &p) const {
     QList<AnnotationSelectionData> res;
     GSequenceLineViewAnnotatedRenderArea *ra = static_cast<GSequenceLineViewAnnotatedRenderArea *>(renderArea);
-    CHECK(ra->rect().contains(ra->mapFrom(this, p)), res);
+    CHECK(ra->rect().contains(p), res);
     AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
     const qint64 pos = ra->coordToPos(p);
     qint64 dPos = 0;
@@ -443,7 +443,7 @@ QString GSequenceLineViewAnnotated::createToolTip(QHelpEvent *e) {
 }
 
 void GSequenceLineViewAnnotated::sl_onAnnotationsModified(const AnnotationModification& md) {
-    if (md.type == AnnotationModification_LocationChanged || md.type == AnnotationModification_NameChanged) {
+    if (md.type == AnnotationModification_LocationChanged || md.type == AnnotationModification_NameChanged || md.type == AnnotationModification_TypeChanged) {
         addUpdateFlags(GSLV_UF_AnnotationsChanged);
         update();
     }
diff --git a/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.cpp b/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.cpp
index 4bba97e..d23e62f 100644
--- a/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.cpp
@@ -71,7 +71,7 @@ GraphLabelsSelectDialog::GraphLabelsSelectDialog(int maxWindowSize, QWidget* par
     QPushButton* okButton = buttonBox->button(QDialogButtonBox::Ok);
     QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
 
-    new HelpButton(this, buttonBox, "17467602");
+    new HelpButton(this, buttonBox, "17470531");
 
     mainLayout->addLayout(spinLayout);
     mainLayout->addWidget(usedIntervalsCheck);
diff --git a/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.cpp b/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.cpp
index 37c6f27..edad110 100644
--- a/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.cpp
@@ -88,7 +88,7 @@ GraphSettingsDialog::GraphSettingsDialog( GSequenceGraphDrawer* d, const U2Regio
 
     QPushButton* okButton = buttonBox->button(QDialogButtonBox::Ok);
     QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
-    new HelpButton(this, buttonBox, "17467604");
+    new HelpButton(this, buttonBox, "17470533");
 
     connect(cancelButton, SIGNAL(clicked()), SLOT(sl_onCancelClicked()));
     connect(okButton, SIGNAL(clicked()), SLOT(sl_onOkClicked()));
@@ -106,7 +106,7 @@ void GraphSettingsDialog::sl_onPickColorButtonClicked()
     QColor initial = colorMap.value(colorName);
 
     QObjectScopedPointer<QColorDialog> CD = new QColorDialog(initial, this);
-    CD->setOption(QColorDialog::DontUseNativeDialog, qgetenv("UGENE_GUI_TEST") == "1");
+    CD->setOption(QColorDialog::DontUseNativeDialog, qgetenv(ENV_GUI_TEST) == "1");
     CD->exec();
     CHECK(!CD.isNull(), );
 
diff --git a/src/corelibs/U2View/src/ov_sequence/ui/SaveGraphCutoffsDialog.ui b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_sequence/ui/SaveGraphCutoffsDialog.ui
rename to src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialog.ui
diff --git a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.cpp b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.cpp
index 1b3457f..e667fed 100644
--- a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.cpp
@@ -40,7 +40,7 @@ SaveGraphCutoffsDialogController::SaveGraphCutoffsDialogController(GSequenceGrap
     :QDialog(parent), ctx(_ctx), d(_d), gd(_gd)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467605");
+    new HelpButton(this, buttonBox, "17470534");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Save"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.h b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.h
index 06f6a68..6b0d4de 100644
--- a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.h
+++ b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_SAVE_GRAPH_CUTOFFS_DIALOG_H_
 #define _U2_SAVE_GRAPH_CUTOFFS_DIALOG_H_
 
-#include <ui/ui_SaveGraphCutoffsDialog.h>
+#include <ui_SaveGraphCutoffsDialog.h>
 
 #include <U2View/ADVGraphModel.h>
 #include <U2View/ADVSequenceObjectContext.h>
diff --git a/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp b/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp
index 3d73389..f489b6c 100644
--- a/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp
@@ -31,7 +31,7 @@
 #include <U2Gui/HelpButton.h>
 
 #include "SearchQualifierDialog.h"
-#include "ui/ui_SearchQualifierDialog.h"
+#include "ui_SearchQualifierDialog.h"
 
 namespace U2 {
 
@@ -44,7 +44,7 @@ SearchQualifierDialog::SearchQualifierDialog(QWidget* p, AnnotationsTreeView *tr
     indexOfPrevResult(-1)
 {
      ui->setupUi(this);
-     new HelpButton(this, ui->buttonBox, "17467579");
+     new HelpButton(this, ui->buttonBox, "17470507");
      ui->buttonBox->button(QDialogButtonBox::Yes)->setText(tr("Select all"));
      ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Next"));
 
diff --git a/src/corelibs/U2View/src/ov_sequence/ui/SearchQualifierDialog.ui b/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_sequence/ui/SearchQualifierDialog.ui
rename to src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.ui
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 7e106b8..0f437a8 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.h
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.h
@@ -22,7 +22,7 @@
 #ifndef _U2_ANNOT_HIGHLIGHT_SETTINGS_H_
 #define _U2_ANNOT_HIGHLIGHT_SETTINGS_H_
 
-#include <ui/ui_AnnotHighlightSettings.h>
+#include <ui_AnnotHighlightSettings.h>
 
 #include <QtGui/QtGui>
 
diff --git a/src/corelibs/U2View/src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui
rename to src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.ui
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 29e0ac2..6af1aaf 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp
@@ -165,7 +165,7 @@ void AnnotHighlightTree::sl_onItemClicked(QTreeWidgetItem* item, int column)
     AnnotHighlightTreeItem* annotHighlightItem = static_cast<AnnotHighlightTreeItem*>(item);
 
     QColorDialog::ColorDialogOption options = static_cast<QColorDialog::ColorDialogOption>(0);
-    if (qgetenv("UGENE_GUI_TEST") == "1") {
+    if (qgetenv(ENV_GUI_TEST) == "1") {
         options = QColorDialog::DontUseNativeDialog;
     }
     QColor annotColor = QColorDialog::getColor(annotHighlightItem->getColor(), this, "", options);
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 b1569af..2e31ab0 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.cpp
@@ -34,7 +34,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 = "17467568";
+const QString AnnotHighlightWidgetFactory::GROUP_DOC_PAGE = "17470496";
 
 AnnotHighlightWidgetFactory::AnnotHighlightWidgetFactory() {
     objectViewOfWidget = ObjViewType_SequenceView;
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 d7002bd..5f5c2c2 100644
--- a/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.cpp
@@ -285,15 +285,4 @@ QColor CodonTableView::getColor(DNACodonGroup gr) {
     return QColor();
 }
 
-// CodonTableAction
-CodonTableAction::CodonTableAction(CodonTableView *_view)
-    : ADVSequenceWidgetAction("codon_table_action", "Show codon table"),
-      view(_view)
-{
-    addToBar = true;
-    connect(this, SIGNAL(triggered()), view, SLOT(sl_setVisible()));
-    setObjectName("Codon table");
-    setCheckable(true);
-}
-
 }
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 71d6883..f206ce6 100644
--- a/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.h
+++ b/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.h
@@ -58,14 +58,6 @@ private:
     QColor getColor(DNACodonGroup gr);
 };
 
-class CodonTableAction : public ADVSequenceWidgetAction {
-    Q_OBJECT
-public:
-    CodonTableAction(CodonTableView *_view);
-    ~CodonTableAction() {}
-    CodonTableView *view;
-};
-
 } // namespace
 
 #endif // _U2_CODON_TABLE_H_
diff --git a/src/corelibs/U2View/src/ov_sequence/find_pattern/ui/FindPatternForm.ui b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternForm.ui
similarity index 100%
rename from src/corelibs/U2View/src/ov_sequence/find_pattern/ui/FindPatternForm.ui
rename to src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternForm.ui
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 f3effe0..e9765cc 100644
--- a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidget.h
+++ b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidget.h
@@ -28,7 +28,7 @@
 #include "FindPatternWidgetSavableTab.h"
 
 #include "FindPatternTask.h"
-#include "ui/ui_FindPatternForm.h"
+#include "ui_FindPatternForm.h"
 
 namespace U2 {
 
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 740b3f8..b89f692 100644
--- a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetFactory.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetFactory.cpp
@@ -34,7 +34,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 = "17467550";
+const QString FindPatternWidgetFactory::GROUP_DOC_PAGE = "17470478";
 
 FindPatternWidgetFactory::FindPatternWidgetFactory() {
     objectViewOfWidget = ObjViewType_SequenceView;
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 77bd9bb..b848990 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SequenceExportSettingsWidget.h
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SequenceExportSettingsWidget.h
@@ -22,7 +22,7 @@
 #ifndef _U2_SEQUENCE_EXPORT_SETTINGS_WIDGET_H_
 #define _U2_SEQUENCE_EXPORT_SETTINGS_WIDGET_H_
 
-#include "ui/ui_SequenceImageExportSettingsWidget.h"
+#include "ui_SequenceImageExportSettingsWidget.h"
 #include "SequencePainter.h"
 
 
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 c56fa70..9cb4d2f 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.cpp
@@ -67,7 +67,7 @@ void SequenceExportSettings::setType(SequenceExportType t) {
 /* CurrentViewPainter */
 /************************************************************************/
 void CurrentViewPainter::paint(QPainter &p, CustomExportSettings* /*settings*/) const {
-    QPixmap screenshot = QPixmap::grabWidget(seqWidget, seqWidget->rect());
+    QPixmap screenshot = seqWidget->grab();
     p.drawPixmap(screenshot.rect(), screenshot);
 }
 
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 9d5e0f4..0aa2036 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.cpp
@@ -40,7 +40,7 @@
 
 namespace U2 {
 
-const int SequenceInfo::COMMON_STATISTICS_VALUE_MAX_WIDTH = 90;
+const int SequenceInfo::COMMON_STATISTICS_TABLE_CELLSPACING = 5;
 const QString SequenceInfo::CAPTION_SEQ_REGION_LENGTH = "Length: ";
 
 //nucl
@@ -82,9 +82,16 @@ void SequenceInfo::initLayout()
     setLayout(mainLayout);
 
     // Common statistics
-    statisticLabel = new QLabel(this);
-    statsWidget = new ShowHideSubgroupWidget(STAT_GROUP_ID, tr("Common Statistics"), statisticLabel, true);
-    statsWidget->setObjectName("Common Statistics");
+    QWidget *statisticLabelContainer = new QWidget(this);
+    statisticLabelContainer->setLayout(new QHBoxLayout);
+    statisticLabelContainer->layout()->setContentsMargins(0, 0, 0, 0);
+
+    statisticLabel = new QLabel(statisticLabelContainer);
+    statisticLabel->setMinimumWidth(1);
+    statisticLabel->setObjectName("Common Statistics");
+    statisticLabelContainer->layout()->addWidget(statisticLabel);
+
+    statsWidget = new ShowHideSubgroupWidget(STAT_GROUP_ID, tr("Common Statistics"), statisticLabelContainer, true);
 
     mainLayout->addWidget(statsWidget);
 
@@ -120,6 +127,62 @@ void SequenceInfo::updateLayout()
     updateDinuclLayout();
 }
 
+namespace {
+
+/** Formats long number by separating each three digits */
+QString getFormattedLongNumber(qint64 num)
+{
+    QString result;
+
+    int DIVIDER = 1000;
+    do {
+        int lastThreeDigits = num % DIVIDER;
+
+        QString digitsStr = QString::number(lastThreeDigits);
+
+        // Fill with zeros if the digits are in the middle of the number
+        if (num / DIVIDER != 0) {
+            digitsStr = QString("%1").arg(digitsStr, 3, '0');
+        }
+
+        result = digitsStr + " " + result;
+
+        num /= DIVIDER;
+    } while (num != 0);
+
+    return result;
+}
+
+}
+
+void SequenceInfo::updateCommonStatisticsLayout() {
+    ADVSequenceWidget *wgt = annotatedDnaView->getSequenceWidgetInFocus();
+    CHECK(wgt != NULL, );
+    ADVSequenceObjectContext *ctx = wgt->getActiveSequenceContext();
+    SAFE_POINT(ctx != NULL, tr("Sequence context is NULL"), );
+    SAFE_POINT(ctx->getAlphabet() != NULL, tr("Sequence alphbet is NULL"), );
+
+    int availableSpace = getAvailableSpace(ctx->getAlphabet()->getType());
+
+    QString statsInfo = QString("<table cellspacing=%1>").arg(COMMON_STATISTICS_TABLE_CELLSPACING);
+    statsInfo += formTableRow(CAPTION_SEQ_REGION_LENGTH, getFormattedLongNumber(currentCommonStatistics.length), availableSpace);
+    if (ctx->getAlphabet()->isNucleic()) {
+        statsInfo += formTableRow(CAPTION_SEQ_GC_CONTENT, QString::number(currentCommonStatistics.gcContent, 'f', 2) + "%", availableSpace);
+        statsInfo += formTableRow(CAPTION_SEQ_MOLAR_WEIGHT, QString::number(currentCommonStatistics.molarWeight, 'f', 2) + " Da", availableSpace);
+        statsInfo += formTableRow(CAPTION_SEQ_MOLAR_EXT_COEF, QString::number(currentCommonStatistics.molarExtCoef) + " I/mol", availableSpace);
+        statsInfo += formTableRow(CAPTION_SEQ_MELTING_TM, QString::number(currentCommonStatistics.meltingTm, 'f', 2) + " C", availableSpace);
+
+        statsInfo += formTableRow(CAPTION_SEQ_NMOLE_OD, QString::number(currentCommonStatistics.nmoleOD260, 'f', 2), availableSpace);
+        statsInfo += formTableRow(CAPTION_SEQ_MG_OD, QString::number(currentCommonStatistics.mgOD260, 'f', 2), availableSpace);
+    } else if (ctx->getAlphabet()->isAmino()) {
+        statsInfo += formTableRow(CAPTION_SEQ_MOLECULAR_WEIGHT, QString::number(currentCommonStatistics.molecularWeight, 'f', 2), availableSpace);
+        statsInfo += formTableRow(CAPTION_SEQ_ISOELECTIC_POINT, QString::number(currentCommonStatistics.isoelectricPoint, 'f', 2), availableSpace);
+    }
+
+    statsInfo += "</table>";
+
+    statisticLabel->setText(statsInfo);
+}
 
 void SequenceInfo::updateCharOccurLayout()
 {
@@ -287,31 +350,6 @@ void SequenceInfo::updateCurrentRegion()
     }
 }
 
-/** Formats long number by separating each three digits */
-QString getFormattedLongNumber(qint64 num)
-{
-    QString result;
-
-    int DIVIDER = 1000;
-    do {
-        int lastThreeDigits = num % DIVIDER;
-
-        QString digitsStr = QString::number(lastThreeDigits);
-
-        // Fill with zeros if the digits are in the middle of the number
-        if (num / DIVIDER != 0) {
-            digitsStr = QString("%1").arg(digitsStr, 3, '0');
-        }
-
-        result = digitsStr + " " + result;
-
-        num /= DIVIDER;
-    } while (num != 0);
-
-    return result;
-}
-
-
 void SequenceInfo::launchCalculations(QString subgroupId)
 {
     // Launch the statistics, characters and dinucleotides calculation tasks,
@@ -354,6 +392,45 @@ void SequenceInfo::launchCalculations(QString subgroupId)
     }
 }
 
+void SequenceInfo::resizeEvent(QResizeEvent *event) {
+    updateCommonStatisticsLayout();
+    QWidget::resizeEvent(event);
+}
+
+int SequenceInfo::getAvailableSpace(DNAAlphabetType alphabetType) const {
+    QStringList captions;
+    switch (alphabetType) {
+    case DNAAlphabet_NUCL:
+        captions << CAPTION_SEQ_REGION_LENGTH
+                 << CAPTION_SEQ_GC_CONTENT
+                 << CAPTION_SEQ_MOLAR_WEIGHT
+                 << CAPTION_SEQ_MOLAR_EXT_COEF
+                 << CAPTION_SEQ_MELTING_TM;
+// Two captions are ignored because of HTML tags within them
+//                 << CAPTION_SEQ_NMOLE_OD
+//                 << CAPTION_SEQ_MG_OD;
+        break;
+    case DNAAlphabet_AMINO:
+        captions << CAPTION_SEQ_REGION_LENGTH
+                 << CAPTION_SEQ_MOLECULAR_WEIGHT
+                 << CAPTION_SEQ_ISOELECTIC_POINT;
+        break;
+    default:
+        captions << CAPTION_SEQ_REGION_LENGTH;
+        break;
+    }
+
+    QFont font = statisticLabel->font();
+    font.setBold(true);
+    QFontMetrics fontMetrics(font);
+
+    int availableSize = INT_MAX;
+    foreach (const QString &caption, captions) {
+        availableSize = qMin(availableSize, statisticLabel->width() - fontMetrics.boundingRect(caption).width() - 3 * COMMON_STATISTICS_TABLE_CELLSPACING);
+    }
+
+    return availableSize;
+}
 
 void SequenceInfo::sl_updateCharOccurData()
 {
@@ -397,44 +474,18 @@ void SequenceInfo::sl_updateDinuclData()
 
 void SequenceInfo::sl_updateStatData() {
     statsWidget->hideProgress();
-
-    DNAStatistics stats = dnaStatisticsTaskRunner.getResult();
-
-    ADVSequenceWidget *wgt = annotatedDnaView->getSequenceWidgetInFocus();
-    CHECK(wgt != NULL, );
-    ADVSequenceObjectContext *ctx = wgt->getActiveSequenceContext();
-    SAFE_POINT(ctx != NULL, tr("Sequence context is NULL"), );
-    SAFE_POINT(ctx->getAlphabet() != NULL, tr("Sequence alphbet is NULL"), );
-
-    QString statsInfo = "<table cellspacing=5>";
-    statsInfo += formTableRow( CAPTION_SEQ_REGION_LENGTH,  getFormattedLongNumber(stats.length) );
-    if (ctx->getAlphabet()->isNucleic()) {
-        statsInfo += formTableRow( CAPTION_SEQ_GC_CONTENT, QString::number(stats.gcContent, 'f', 2) + "%");
-        statsInfo += formTableRow( CAPTION_SEQ_MOLAR_WEIGHT, QString::number(stats.molarWeight, 'f', 2) + " Da");
-        statsInfo += formTableRow( CAPTION_SEQ_MOLAR_EXT_COEF, QString::number(stats.molarExtCoef) + " I/mol");
-        statsInfo += formTableRow( CAPTION_SEQ_MELTING_TM, QString::number(stats.meltingTm, 'f', 2) + " C");
-
-        statsInfo += formTableRow( CAPTION_SEQ_NMOLE_OD, QString::number(stats.nmoleOD260, 'f', 2));
-        statsInfo += formTableRow( CAPTION_SEQ_MG_OD, QString::number(stats.mgOD260, 'f', 2));
-    } else if (ctx->getAlphabet()->isAmino()) {
-        statsInfo += formTableRow( CAPTION_SEQ_MOLECULAR_WEIGHT, QString::number(stats.molecularWeight, 'f', 2));
-        statsInfo += formTableRow( CAPTION_SEQ_ISOELECTIC_POINT, QString::number(stats.isoelectricPoint, 'f', 2));
-    }
-
-    statsInfo += "</table>";
-
-    statisticLabel->setText(statsInfo);
+    currentCommonStatistics = dnaStatisticsTaskRunner.getResult();
+    updateCommonStatisticsLayout();
 }
 
-QString SequenceInfo::formTableRow(const QString& caption, QString value) const {
+QString SequenceInfo::formTableRow(const QString& caption, const QString &value, int availableSpace) const {
     QString result;
 
     QFontMetrics metrics = statisticLabel->fontMetrics();
     result = "<tr><td><b>" + tr("%1").arg(caption) + "</b></td><td>"
-            + metrics.elidedText(value, Qt::ElideRight, COMMON_STATISTICS_VALUE_MAX_WIDTH)
+            + metrics.elidedText(value, Qt::ElideRight, availableSpace)
             + "</td></tr>";
     return result;
 }
 
-
 } // namespace
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 92187a5..9370bd9 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.h
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.h
@@ -77,6 +77,7 @@ private:
 
     /** Show or hide widgets depending on the alphabet of the sequence in focus */
     void updateLayout(); // calls the following update functions
+    void updateCommonStatisticsLayout();
     void updateCharOccurLayout();
     void updateDinuclLayout();
 
@@ -101,13 +102,18 @@ private:
      */
     void launchCalculations(QString subgroupId = QString(""));
 
-    QString  formTableRow(const QString& caption, QString value) const;
+    void resizeEvent(QResizeEvent *event);
+
+    int getAvailableSpace(DNAAlphabetType alphabetType) const;
+
+    QString  formTableRow(const QString& caption, const QString &value, int availableSpace) const;
 
     AnnotatedDNAView* annotatedDnaView;
 
     ShowHideSubgroupWidget* statsWidget;
     QLabel* statisticLabel;
     BackgroundTaskRunner< DNAStatistics > dnaStatisticsTaskRunner;
+    DNAStatistics currentCommonStatistics;
 
     ShowHideSubgroupWidget* charOccurWidget;
     QLabel* charOccurLabel;
@@ -121,7 +127,7 @@ private:
 
     U2SavableWidget savableWidget;
 
-    static const int COMMON_STATISTICS_VALUE_MAX_WIDTH;
+    static const int COMMON_STATISTICS_TABLE_CELLSPACING;
     static const QString CAPTION_SEQ_REGION_LENGTH;
 
     //nucl
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 14cb416..8579900 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfoFactory.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfoFactory.cpp
@@ -34,7 +34,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 = "17467539";
+const QString SequenceInfoFactory::GROUP_DOC_PAGE = "17470467";
 
 SequenceInfoFactory::SequenceInfoFactory() {
     objectViewOfWidget = ObjViewType_SequenceView;
diff --git a/src/corelibs/U2View/src/ov_sequence/ui/EditAnnotationDialog.ui b/src/corelibs/U2View/src/ov_sequence/ui/EditAnnotationDialog.ui
deleted file mode 100644
index 0aa0172..0000000
--- a/src/corelibs/U2View/src/ov_sequence/ui/EditAnnotationDialog.ui
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EditAnnotationDialog</class>
- <widget class="QDialog" name="EditAnnotationDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>354</width>
-    <height>124</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Edit Annotation</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0" colspan="2">
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>Annotation name</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="2">
-      <widget class="QLineEdit" name="nameEdit"/>
-     </item>
-     <item row="1" column="0" colspan="2">
-      <widget class="QLabel" name="label">
-       <property name="text">
-        <string>Location</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="2">
-      <widget class="QLineEdit" name="locationEdit"/>
-     </item>
-     <item row="2" column="2">
-      <widget class="QLabel" name="statusLabel">
-       <property name="text">
-        <string/>
-       </property>
-       <property name="textFormat">
-        <enum>Qt::RichText</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="3">
-      <widget class="QToolButton" name="complementButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-       <property name="icon">
-        <iconset resource="../../../../U2Gui/U2Gui.qrc">
-         <normaloff>:/core/images/do_complement.png</normaloff>:/core/images/do_complement.png</iconset>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="3">
-      <widget class="QToolButton" name="showNameGroupsButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-       <property name="icon">
-        <iconset resource="../../../../U2Gui/U2Gui.qrc">
-         <normaloff>:/core/images/predefined_annotation_groups.png</normaloff>:/core/images/predefined_annotation_groups.png</iconset>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources>
-  <include location="../../../../U2Gui/U2Gui.qrc"/>
- </resources>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>EditAnnotationDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>176</x>
-     <y>103</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>176</x>
-     <y>61</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>EditAnnotationDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>176</x>
-     <y>103</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>176</x>
-     <y>61</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
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 d765ee8..2233936 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.cpp
@@ -61,7 +61,7 @@ float DetViewMultiLineRenderer::posToXCoordF(qint64 p, const QSize &canvasSize,
 }
 
 U2Region DetViewMultiLineRenderer::getAnnotationYRange(Annotation *a, int r, const AnnotationSettings *as, const QSize& canvasSize, const U2Region& visibleRange) const {
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1) {
         U2Region res = singleLinePainter->getAnnotationYRange(a, r, as, QSize(canvasSize.width(), getOneLineHeight()), visibleRange);
         res.startPos += INDENT_BETWEEN_LINES / 2;
         return res;
diff --git a/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.cpp b/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.cpp
index cf20f9b..5970d3c 100644
--- a/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.cpp
+++ b/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.cpp
@@ -39,7 +39,7 @@ 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, "17467702");
+    new HelpButton(this, buttonBox, "17470635");
 
     thicknessSpinBox->setValue(changedSettings[BRANCH_THICKNESS].toInt());
 
@@ -66,7 +66,7 @@ void BranchSettingsDialog::updateColorButton() {
 void BranchSettingsDialog::sl_colorButton() {
     QColorDialog::ColorDialogOptions options;
 #ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         options |= QColorDialog::DontUseNativeDialog;
     }
 #endif
diff --git a/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.h b/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.h
index f6e71e3..7a8486e 100644
--- a/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.h
+++ b/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.h
@@ -24,7 +24,7 @@
 
 #include "BaseSettingsDialog.h"
 #include "ov_phyltree/TreeSettings.h"
-#include <ui/ui_BranchSettingsDialog.h>
+#include "ui_BranchSettingsDialog.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/phyltree/ui/BranchSettingsDialog.ui b/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/phyltree/ui/BranchSettingsDialog.ui
rename to src/corelibs/U2View/src/phyltree/BranchSettingsDialog.ui
diff --git a/src/corelibs/U2View/src/phyltree/ui/CreatePhyTreeDialog.ui b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/phyltree/ui/CreatePhyTreeDialog.ui
rename to src/corelibs/U2View/src/phyltree/CreatePhyTreeDialog.ui
diff --git a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp
index 2316dd9..fd9d3c8 100644
--- a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp
+++ b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp
@@ -28,26 +28,26 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
 #include <U2Core/AppSettings.h>
+#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/MAlignmentObject.h>
 #include <U2Core/PluginModel.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
 #include <U2Core/TmpDirChecker.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Core/QObjectScopedPointer.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include <U2View/LicenseDialog.h>
 
 #include "CreatePhyTreeDialogController.h"
 #include "CreatePhyTreeWidget.h"
-#include "ui/ui_CreatePhyTreeDialog.h"
+#include "ui_CreatePhyTreeDialog.h"
 
 namespace U2 {
 
@@ -56,14 +56,15 @@ CreatePhyTreeDialogController::CreatePhyTreeDialogController(QWidget* parent, co
     msa(mobj->getMAlignment()),
     settings(_settings),
     settingsWidget(NULL),
-    ui(new Ui_CreatePhyTree)
+    ui(new Ui_CreatePhyTree),
+    saveController(NULL)
 {
     ui->setupUi(this);
 
     QMap<QString, QString> helpPagesMap;
-    helpPagesMap.insert("PHYLIP Neighbor Joining","17467661");
-    helpPagesMap.insert("MrBayes","17467662");
-    helpPagesMap.insert("PhyML Maximum Likelihood","17467660");
+    helpPagesMap.insert("PHYLIP Neighbor Joining","17470593");
+    helpPagesMap.insert("MrBayes","17470594");
+    helpPagesMap.insert("PhyML Maximum Likelihood","17470592");
     new ComboboxDependentHelpButton(this, ui->buttonBox, ui->algorithmBox, helpPagesMap);
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
@@ -72,14 +73,12 @@ CreatePhyTreeDialogController::CreatePhyTreeDialogController(QWidget* parent, co
     PhyTreeGeneratorRegistry *registry = AppContext::getPhyTreeGeneratorRegistry();
     ui->algorithmBox->addItems(registry->getNameList());
 
-    connect(ui->browseButton, SIGNAL(clicked()), SLOT(sl_browseClicked()));
+    initSaveController(mobj);
+
     connect(ui->algorithmBox, SIGNAL(currentIndexChanged(int)), SLOT(sl_comboIndexChaged(int)));
     connect(ui->storeSettings, SIGNAL(clicked()), SLOT(sl_onStoreSettings()));
     connect(ui->restoreSettings, SIGNAL(clicked()), SLOT(sl_onRestoreDefault()));
 
-    QString url = GUrlUtils::getNewLocalUrlByExtention(mobj->getDocument()->getURLString(), mobj->getGObjectName(), ".nwk", "");
-    ui->fileNameEdit->setText(url);
-
     const QString defaultAlgorithm = "PHYLIP Neighbor Joining";
     int defaultIndex = ui->algorithmBox->findText(defaultAlgorithm);
     if (defaultIndex == -1) {
@@ -102,24 +101,6 @@ void CreatePhyTreeDialogController::accept() {
     QDialog::accept();
 }
 
-void CreatePhyTreeDialogController::sl_browseClicked() {
-    GUrl oldUrl = ui->fileNameEdit->text();
-    QString path;
-    LastUsedDirHelper lod;
-    if (oldUrl.isEmpty()) {
-        path = lod.dir;
-    } else {
-        path = oldUrl.getURLString();
-    }
-    GUrl newUrl = U2FileDialog::getSaveFileName(this, tr("Choose file name"), path, "Newick format (*.nwk)");
-
-    if (newUrl.isEmpty()) {
-        return;
-    }
-    ui->fileNameEdit->setText(newUrl.getURLString());
-    lod.url = newUrl.getURLString();
-}
-
 void CreatePhyTreeDialogController::sl_comboIndexChaged(int) {
     delete settingsWidget;
     settingsWidget = NULL;
@@ -161,7 +142,7 @@ bool CreatePhyTreeDialogController::checkLicense() {
 }
 
 bool CreatePhyTreeDialogController::checkFileName() {
-    const QString fileName = ui->fileNameEdit->text();
+    const QString fileName = saveController->getSaveFileName();
     if (fileName.isEmpty()) {
         QMessageBox::warning(this, tr("Warning"), tr("Please, input the file name."));
         ui->fileNameEdit->setFocus();
@@ -208,4 +189,18 @@ bool CreatePhyTreeDialogController::checkMemory() {
     return true;
 }
 
+void CreatePhyTreeDialogController::initSaveController(const MAlignmentObject *mobj) {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = GUrlUtils::getNewLocalUrlByExtention(mobj->getDocument()->getURLString(), mobj->getGObjectName(), ".nwk", "");
+    config.defaultFormatId = BaseDocumentFormats::NEWICK;
+    config.fileDialogButton = ui->browseButton;
+    config.fileNameEdit = ui->fileNameEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Choose file name");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::NEWICK;
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
 }   // namespace U2
diff --git a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.h b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.h
index e69e683..42b48b9 100644
--- a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.h
+++ b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.h
@@ -35,6 +35,7 @@ namespace U2 {
 
 class MAlignmentObject;
 class CreatePhyTreeWidget;
+class SaveDocumentController;
 
 class U2VIEW_EXPORT CreatePhyTreeDialogController : public QDialog {
     Q_OBJECT
@@ -44,7 +45,6 @@ public:
 
 private slots:
     void accept();
-    void sl_browseClicked();
     void sl_comboIndexChaged(int index);
     void sl_onStoreSettings();
     void sl_onRestoreDefault();
@@ -54,12 +54,14 @@ private:
     bool checkFileName();
     bool checkSettings();
     bool checkMemory();
+    void initSaveController(const MAlignmentObject *mobj);
 
     MAlignment msa;
     CreatePhyTreeSettings& settings;
     QList<CreatePhyTreeWidget*> childWidgets;
     CreatePhyTreeWidget *settingsWidget;
     Ui_CreatePhyTree* ui;
+    SaveDocumentController *saveController;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.cpp b/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.cpp
index 5641b73..bfa8858 100644
--- a/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.cpp
+++ b/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.cpp
@@ -43,7 +43,7 @@ bool CreatePhyTreeWidget::checkMemoryEstimation(QString &, const MAlignment &, c
     return true;
 }
 
-bool CreatePhyTreeWidget::insertOutputOptionWidget(PhyTreeDisplayOptionsWidget *outputOptionsWidget) {
+bool CreatePhyTreeWidget::insertOutputOptionWidget(PhyTreeDisplayOptionsWidget *) {
     return false;
 }
 
diff --git a/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.cpp b/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.cpp
index f3fcea0..13b31d1 100644
--- a/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.cpp
+++ b/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.cpp
@@ -23,7 +23,7 @@
 #include <U2Core/Settings.h>
 
 #include "PhyTreeDisplayOptionsWidget.h"
-#include "ui/ui_PhyTreeDisplayOptionsWidget.h"
+#include "ui_PhyTreeDisplayOptionsWidget.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/phyltree/ui/PhyTreeDisplayOptionsWidget.ui b/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.ui
similarity index 100%
rename from src/corelibs/U2View/src/phyltree/ui/PhyTreeDisplayOptionsWidget.ui
rename to src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.ui
diff --git a/src/corelibs/U2View/src/phyltree/TextSettingsDialog.cpp b/src/corelibs/U2View/src/phyltree/TextSettingsDialog.cpp
index 9a48ccd..edc3238 100644
--- a/src/corelibs/U2View/src/phyltree/TextSettingsDialog.cpp
+++ b/src/corelibs/U2View/src/phyltree/TextSettingsDialog.cpp
@@ -37,7 +37,7 @@ TextSettingsDialog::TextSettingsDialog(QWidget *parent, const OptionsMap& settin
 : BaseSettingsDialog(parent) {
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467707");
+    new HelpButton(this, buttonBox, "17470640");
 
     curColor = qvariant_cast<QColor>(settings[LABEL_COLOR]);
 
diff --git a/src/corelibs/U2View/src/phyltree/TextSettingsDialog.h b/src/corelibs/U2View/src/phyltree/TextSettingsDialog.h
index 25ef394..6922050 100644
--- a/src/corelibs/U2View/src/phyltree/TextSettingsDialog.h
+++ b/src/corelibs/U2View/src/phyltree/TextSettingsDialog.h
@@ -23,7 +23,7 @@
 #define _U2_PHYLTREE_TEXT_SETTINGS_DIALOG_H_
 
 #include "BaseSettingsDialog.h"
-#include <ui/ui_TextSettingsDialog.h>
+#include <ui_TextSettingsDialog.h>
 #include "ov_phyltree/TreeSettings.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2View/src/phyltree/ui/TextSettingsDialog.ui b/src/corelibs/U2View/src/phyltree/TextSettingsDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/phyltree/ui/TextSettingsDialog.ui
rename to src/corelibs/U2View/src/phyltree/TextSettingsDialog.ui
diff --git a/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.cpp b/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.cpp
index c6da5e1..7314d5f 100644
--- a/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.cpp
+++ b/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.cpp
@@ -30,7 +30,7 @@ namespace U2 {
 TreeSettingsDialog::TreeSettingsDialog(QWidget *parent, const OptionsMap &settings, bool isRectLayout)
 : BaseSettingsDialog(parent) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467701");
+    new HelpButton(this, buttonBox, "17470634");
 
     heightSlider->setValue(settings[HEIGHT_COEF].toUInt());
     widthlSlider->setValue(settings[WIDTH_COEF].toUInt());
diff --git a/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.h b/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.h
index bfa58de..936b373 100644
--- a/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.h
+++ b/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.h
@@ -23,7 +23,7 @@
 #define _TREE_SETTIHS_DIALOG_
 
 #include "BaseSettingsDialog.h"
-#include <ui/ui_TreeSettingsDialog.h>
+#include <ui_TreeSettingsDialog.h>
 #include "ov_phyltree/TreeSettings.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2View/src/phyltree/ui/TreeSettingsDialog.ui b/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/phyltree/ui/TreeSettingsDialog.ui
rename to src/corelibs/U2View/src/phyltree/TreeSettingsDialog.ui
diff --git a/src/corelibs/U2View/src/util_dna_assembly/ui/AssemblyToRefDialog.ui b/src/corelibs/U2View/src/util_dna_assembly/AssemblyToRefDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/util_dna_assembly/ui/AssemblyToRefDialog.ui
rename to src/corelibs/U2View/src/util_dna_assembly/AssemblyToRefDialog.ui
diff --git a/src/corelibs/U2View/src/util_dna_assembly/AssemblyToSamDialog.ui b/src/corelibs/U2View/src/util_dna_assembly/AssemblyToSamDialog.ui
new file mode 100644
index 0000000..4fae7b2
--- /dev/null
+++ b/src/corelibs/U2View/src/util_dna_assembly/AssemblyToSamDialog.ui
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AssemblyToSamDialog</class>
+ <widget class="QDialog" name="AssemblyToSamDialog">
+  <property name="windowModality">
+   <enum>Qt::NonModal</enum>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>474</width>
+    <height>122</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Convert UGENE Assembly Database to SAM Format</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Assembly database:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QLineEdit" name="dbPathEdit"/>
+     </item>
+     <item row="0" column="2">
+      <widget class="QToolButton" name="setDbPathButton">
+       <property name="text">
+        <string>...</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Result SAM file:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="QLineEdit" name="samPathEdit"/>
+     </item>
+     <item row="1" column="2">
+      <widget class="QToolButton" name="setSamPathButton">
+       <property name="text">
+        <string>...</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </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>accepted()</signal>
+   <receiver>AssemblyToSamDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>236</x>
+     <y>101</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>236</x>
+     <y>60</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>AssemblyToSamDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>236</x>
+     <y>101</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>236</x>
+     <y>60</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.cpp b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.cpp
index 015f3d6..0b9b434 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.cpp
@@ -48,12 +48,12 @@ BuildIndexDialog::BuildIndexDialog(const DnaAssemblyAlgRegistry* registry, QWidg
 {
     setupUi(this);
     QMap<QString,QString> helpPagesMap;
-    helpPagesMap.insert("BWA","17467778");
-    helpPagesMap.insert("BWA-MEM","17467819");
-    helpPagesMap.insert("BWA-SW","17467806");
-    helpPagesMap.insert("Bowtie","17467775");
-    helpPagesMap.insert("Bowtie2","17467803");
-    helpPagesMap.insert("UGENE Genome Aligner","17467781");
+    helpPagesMap.insert("BWA","17470711");
+    helpPagesMap.insert("BWA-MEM","17470745");
+    helpPagesMap.insert("BWA-SW","17470739");
+    helpPagesMap.insert("Bowtie","17470708");
+    helpPagesMap.insert("Bowtie2","17470736");
+    helpPagesMap.insert("UGENE Genome Aligner","17470714");
     new ComboboxDependentHelpButton(this, buttonBox, methodNamesBox, helpPagesMap);
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -81,7 +81,7 @@ void BuildIndexDialog::sl_onAddRefButtonClicked() {
     LastUsedDirHelper lod;
     QString filter;
 
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         lod.url = U2FileDialog::getOpenFileName(this, tr("Open reference sequence"), lod.dir, filter, 0, QFileDialog::DontUseNativeDialog );
     } else{
         lod.url = U2FileDialog::getOpenFileName(this, tr("Open reference sequence"), lod.dir, filter);
diff --git a/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.h b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.h
index ad62955..737ef44 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.h
+++ b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.h
@@ -23,7 +23,7 @@
 #define _U2_BUILD_INDEX_DIALOG_H_
 
 #include <U2Core/GUrl.h>
-#include <ui/ui_BuildIndexFromRefDialog.h>
+#include <ui_BuildIndexFromRefDialog.h>
 
 #include <QtCore/QVariant>
 
@@ -32,7 +32,7 @@ namespace U2 {
 class DnaAssemblyAlgRegistry;
 class DnaAssemblyAlgorithmBuildIndexWidget;
 
-class BuildIndexDialog : public QDialog, private Ui::BuildIndexFromRefDialog    {
+class BuildIndexDialog : public QDialog, private Ui_BuildIndexFromRefDialog    {
     Q_OBJECT
 
 public:
diff --git a/src/corelibs/U2View/src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexFromRefDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui
rename to src/corelibs/U2View/src/util_dna_assembly/BuildIndexFromRefDialog.ui
diff --git a/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp b/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp
index d575596..fbe0366 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp
@@ -19,45 +19,38 @@
  * 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/BaseDocumentFormats.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/GUrlUtils.h>
 
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "ConvertAssemblyToSamDialog.h"
-#include "ui/ui_AssemblyToSamDialog.h"
+#include "ui_AssemblyToSamDialog.h"
 
 namespace U2 {
 
 GUrl ConvertAssemblyToSamDialog::dbFileUrl;
 
 ConvertAssemblyToSamDialog::ConvertAssemblyToSamDialog(QWidget* parent, QString dbPath)
-: QDialog(parent)
+    : QDialog(parent),
+      ui(new Ui_AssemblyToSamDialog),
+      saveController(NULL)
 {
-    ui = new Ui_AssemblyToSamDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "17467782");
+    new HelpButton(this, ui->buttonBox, "17470715");
+
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Convert"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    QPushButton* convertButton = ui->buttonBox->button(QDialogButtonBox::Ok);
-    QPushButton* cancelButton = ui->buttonBox->button(QDialogButtonBox::Cancel);
-
+    initSaveController();
     connect(ui->setDbPathButton, SIGNAL(clicked()), SLOT(sl_onSetDbPathButtonClicked()));
-    connect(ui->setSamPathButton, SIGNAL(clicked()), SLOT(sl_onSetSamPathButtonClicked()));
-    connect(convertButton, SIGNAL(clicked()), SLOT(accept()));
-    connect(cancelButton, SIGNAL(clicked()), SLOT(reject()));
 
     if ("" != dbPath) {
         ui->dbPathEdit->setText(dbPath);
@@ -71,14 +64,13 @@ ConvertAssemblyToSamDialog::ConvertAssemblyToSamDialog(QWidget* parent, QString
         ui->dbPathEdit->setText(dbFileUrl.getURLString());
         buildSamUrl(dbFileUrl);
     }
-
 }
 
 void ConvertAssemblyToSamDialog::accept() {
     if (ui->dbPathEdit->text().isEmpty()) {
         QMessageBox::information(this, tr("Data base to SAM converter"),
             tr("Data base file url is not set!") );
-    } else if (ui->samPathEdit->text().isEmpty()) {
+    } else if (saveController->getSaveFileName().isEmpty()) {
         QMessageBox::information(this, tr("Data base to SAM converter"),
             tr("SAM file url is not set!") );
     } else {
@@ -97,10 +89,24 @@ void ConvertAssemblyToSamDialog::reject() {
 }
 
 void ConvertAssemblyToSamDialog::buildSamUrl(const GUrl &dbUrl) {
-    GUrl url = GUrlUtils::rollFileName(dbUrl.dirPath() + "/" + dbUrl.baseFileName()+ ".sam", DocumentUtils::getNewDocFileNameExcludesHint());
+    GUrl url = GUrlUtils::rollFileName(dbUrl.dirPath() + "/" + dbUrl.baseFileName() + ".sam", DocumentUtils::getNewDocFileNameExcludesHint());
     ui->samPathEdit->setText(url.getURLString());
 }
 
+void ConvertAssemblyToSamDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::SAM;
+    config.fileDialogButton = ui->setSamPathButton;
+    config.fileNameEdit = ui->samPathEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Set a result SAM file name");
+    config.rollOutProjectUrls = true;
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::SAM;
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
 void ConvertAssemblyToSamDialog::sl_onSetDbPathButtonClicked() {
     LastUsedDirHelper lod;
     QString filter;
@@ -114,24 +120,12 @@ void ConvertAssemblyToSamDialog::sl_onSetDbPathButtonClicked() {
     buildSamUrl(lod.url);
 }
 
-void ConvertAssemblyToSamDialog::sl_onSetSamPathButtonClicked() {
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Set a result SAM file name"), lod.dir);
-    if (!lod.url.isEmpty()) {
-        GUrl result = lod.url;
-        if (result.lastFileSuffix().isEmpty()) {
-            result = QString( "%1.sam" ).arg( result.getURLString() );
-        }
-        ui->samPathEdit->setText(result.getURLString());
-    }
-}
-
 const GUrl ConvertAssemblyToSamDialog::getDbFileUrl() {
     return ui->dbPathEdit->text();
 }
 
 const GUrl ConvertAssemblyToSamDialog::getSamFileUrl() {
-    return ui->samPathEdit->text();
+    return saveController->getSaveFileName();
 }
 
 } // U2
diff --git a/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.h b/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.h
index c5afb42..aad6246 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.h
+++ b/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.h
@@ -22,17 +22,16 @@
 #ifndef _U2_CONVERT_ASSEMBLY_TO_SAM_DIALOG_H_
 #define _U2_CONVERT_ASSEMBLY_TO_SAM_DIALOG_H_
 
+#include <QDialog>
+
 #include <U2Core/GUrl.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
 
 class Ui_AssemblyToSamDialog;
 
 namespace U2 {
 
+class SaveDocumentController;
+
 class U2VIEW_EXPORT ConvertAssemblyToSamDialog : public QDialog {
     Q_OBJECT
 
@@ -44,13 +43,15 @@ public:
 
 private slots:
     void sl_onSetDbPathButtonClicked();
-    void sl_onSetSamPathButtonClicked();
     void accept();
     void reject();
 
 private:
-    Ui_AssemblyToSamDialog *ui;
     void buildSamUrl(const GUrl &dbUrl);
+    void initSaveController();
+
+    Ui_AssemblyToSamDialog *ui;
+    SaveDocumentController *saveController;
 
     static GUrl dbFileUrl;
 };
diff --git a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp
index 6f8bed9..0bfc22a 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp
@@ -30,6 +30,7 @@
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/ExternalToolRegistry.h>
 #include <U2Core/GUrlUtils.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Formats/SAMFormat.h>
@@ -37,7 +38,7 @@
 #include <U2Gui/AppSettingsGUI.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Core/QObjectScopedPointer.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include <U2View/DnaAssemblyUtils.h>
@@ -59,18 +60,19 @@ bool DnaAssemblyDialog::samOutput = false;
 #define MATE_DOWNSTREAM         "Downstream"
 
 DnaAssemblyDialog::DnaAssemblyDialog(QWidget* p, const QStringList& shortReadsUrls, const QString& refSeqUrl)
-: QDialog(p),
-  assemblyRegistry(AppContext::getDnaAssemblyAlgRegistry()),
-  customGUI(NULL)
+    : QDialog(p),
+      assemblyRegistry(AppContext::getDnaAssemblyAlgRegistry()),
+      customGUI(NULL),
+      saveController(NULL)
 {
     setupUi(this);
     QMap<QString,QString> helpPagesMap;
-    helpPagesMap.insert("BWA","17467777");
-    helpPagesMap.insert("BWA-MEM","17467818");
-    helpPagesMap.insert("BWA-SW","17467805");
-    helpPagesMap.insert("Bowtie","17467774");
-    helpPagesMap.insert("Bowtie2","17467802");
-    helpPagesMap.insert("UGENE Genome Aligner","17467780");
+    helpPagesMap.insert("BWA","17470710");
+    helpPagesMap.insert("BWA-MEM","17470744");
+    helpPagesMap.insert("BWA-SW","17470738");
+    helpPagesMap.insert("Bowtie","17470707");
+    helpPagesMap.insert("Bowtie2","17470735");
+    helpPagesMap.insert("UGENE Genome Aligner","17470713");
     new ComboboxDependentHelpButton(this, buttonBox, methodNamesBox, helpPagesMap);
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -93,18 +95,14 @@ DnaAssemblyDialog::DnaAssemblyDialog(QWidget* p, const QStringList& shortReadsUr
     shortReadsTable->installEventFilter(this);
     QHeaderView* header = shortReadsTable->header();
     header->setStretchLastSection( false );
-#if (QT_VERSION < 0x050000) //Qt 5
-    header->setClickable( false );
-    header->setResizeMode( 0, QHeaderView::Stretch );
-#else
     header->setSectionsClickable( false );
     header->setSectionResizeMode( 0, QHeaderView::Stretch );
-#endif
+
+    initSaveController();
 
     sl_onAlgorithmChanged(methodNamesBox->currentText());
     connect(addShortreadsButton, SIGNAL(clicked()), SLOT(sl_onAddShortReadsButtonClicked()) );
     connect(removeShortReadsButton, SIGNAL(clicked()), SLOT(sl_onRemoveShortReadsButtonClicked()));
-    connect(setResultFileNameButton, SIGNAL(clicked()), SLOT(sl_onSetResultFileNameButtonClicked()));
     connect(addRefButton, SIGNAL(clicked()), SLOT(sl_onAddRefButtonClicked()) );
     connect(methodNamesBox, SIGNAL(currentIndexChanged(const QString &)), SLOT(sl_onAlgorithmChanged(const QString &)));
     connect(samBox, SIGNAL(clicked()), SLOT(sl_onSamBoxClicked()));
@@ -136,20 +134,12 @@ void DnaAssemblyDialog::updateState() {
 
 void DnaAssemblyDialog::sl_onAddShortReadsButtonClicked() {
     LastUsedDirHelper lod;
-    QStringList fileNames;
-#ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
-        fileNames = U2FileDialog::getOpenFileNames(this, tr("Add short reads"), lod.dir, QString(), 0, QFileDialog::DontUseNativeDialog );
-    } else
-#endif
-    fileNames = U2FileDialog::getOpenFileNames(this, tr("Add short reads"), lod.dir);
+    QStringList fileNames = U2FileDialog::getOpenFileNames(this, tr("Add short reads"), lod.dir);
     if (fileNames.isEmpty()) {
         return;
     }
     lod.url = fileNames.at(fileNames.count() - 1);
 
-    QList<QTreeWidgetItem*> items;
-
     foreach(const QString& f, fileNames) {
         ShortReadsTableItem* item = new ShortReadsTableItem(shortReadsTable, f);
         item->setLibraryType( libraryComboBox->currentIndex() == 0 ? LIBRARY_TYPE_SINGLE : LIBRARY_TYPE_PAIRED);
@@ -160,11 +150,6 @@ void DnaAssemblyDialog::sl_onAddShortReadsButtonClicked() {
 void DnaAssemblyDialog::sl_onAddRefButtonClicked() {
     LastUsedDirHelper lod;
     QString filter;
-#ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
-        lod.url = U2FileDialog::getOpenFileName(this, tr("Open reference sequence"), lod.dir, filter, 0, QFileDialog::DontUseNativeDialog );
-    } else
-#endif
 
     lod.url = U2FileDialog::getOpenFileName(this, tr("Open reference sequence"), lod.dir, filter);
     if (lod.url.isEmpty()) {
@@ -172,9 +157,8 @@ void DnaAssemblyDialog::sl_onAddRefButtonClicked() {
     }
 
     refSeqEdit->setText(lod.url);
-    if(resultFileNameEdit->text().isEmpty()){
-            buildResultUrl(lod.url);
-    }
+    buildResultUrl(lod.url);
+
     if (NULL != customGUI) {
         QString error;
         if (!customGUI->buildIndexUrl(lod.url, prebuiltIndex, error)) {
@@ -209,7 +193,7 @@ void DnaAssemblyDialog::accept() {
     if (refSeqEdit->text().isEmpty()) {
         QMessageBox::information(this, tr("DNA Assembly"),
             tr("Reference sequence url is not set!") );
-    } else if (resultFileNameEdit->text().isEmpty() ) {
+    } else if (saveController->getSaveFileName().isEmpty() ) {
         QMessageBox::information(this, tr("DNA Assembly"),
             tr("Result alignment file name is not set!") );
     } else if (shortReadsTable->topLevelItemCount() == 0 ) {
@@ -262,6 +246,32 @@ void DnaAssemblyDialog::accept() {
     }
 }
 
+void DnaAssemblyDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = samOutput ? BaseDocumentFormats::SAM : BaseDocumentFormats::UGENEDB;
+    config.fileDialogButton = setResultFileNameButton;
+    config.fileNameEdit = resultFileNameEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Set result alignment file name");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::SAM
+                                                                      << BaseDocumentFormats::UGENEDB;
+
+    saveController = new SaveDocumentController(config, formats, this);
+
+    connect(saveController, SIGNAL(si_formatChanged(const QString &)), SLOT(sl_formatChanged(const QString &)));
+}
+
+void DnaAssemblyDialog::buildResultUrl(const QString &refUrl) {
+    if (saveController->getSaveFileName().isEmpty()) {
+        const QString formatId = saveController->getFormatIdToSave();
+        const QFileInfo refinfo(refUrl);
+        const QString path = refinfo.path() + "/" + refinfo.completeBaseName();
+        saveController->setPath(path);
+        saveController->setFormat(formatId);
+    }
+}
+
 const GUrl DnaAssemblyDialog::getRefSeqUrl() {
     return refSeqEdit->text();
 }
@@ -291,15 +301,6 @@ void DnaAssemblyDialog::sl_onRemoveShortReadsButtonClicked() {
 
 }
 
-void DnaAssemblyDialog::sl_onSetResultFileNameButtonClicked() {
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Set result alignment file name"), lod.dir);
-    if (!lod.url.isEmpty()) {
-        GUrl result = lod.url;
-        buildResultUrl(result);
-    }
-}
-
 void DnaAssemblyDialog::sl_onAlgorithmChanged(const QString &text) {
     methodName = text;
     updateState();
@@ -307,14 +308,11 @@ void DnaAssemblyDialog::sl_onAlgorithmChanged(const QString &text) {
 
 void DnaAssemblyDialog::sl_onSamBoxClicked() {
     samOutput = samBox->isChecked();
-
-    if (!refSeqEdit->text().isEmpty()) {
-        buildResultUrl(resultFileNameEdit->text(), true);
-    }
+    saveController->setFormat(samOutput ? BaseDocumentFormats::SAM : BaseDocumentFormats::UGENEDB);
 }
 
 const QString DnaAssemblyDialog::getResultFileName() {
-    return resultFileNameEdit->text();
+    return saveController->getSaveFileName();
 }
 
 bool DnaAssemblyDialog::isPaired() const {
@@ -404,25 +402,6 @@ void DnaAssemblyDialog::addGuiExtension() {
     }
 }
 
-void DnaAssemblyDialog::buildResultUrl(const GUrl& refUrl, bool ignoreExtension ) {
-    QByteArray extension;
-    SAMFormat sf;
-    QStringList extensions = sf.getSupportedDocumentFileExtensions();
-    if(extensions.contains(refUrl.completeFileSuffix()) && !ignoreExtension){
-        samOutput = true;
-        samBox->setChecked(true);
-    }
-
-    if (samOutput) {
-        extension = "sam";
-    } else {
-        extension = "ugenedb";
-    }
-    QString tmpUrl = QString(refUrl.dirPath() + "/" + refUrl.baseFileName()+ ".%1").arg(extension.constData());
-
-    resultFileNameEdit->setText(tmpUrl);
-}
-
 bool DnaAssemblyDialog::eventFilter( QObject * obj, QEvent * event ) {
     if (obj == shortReadsTable) {
         if (event->type() == QEvent::KeyPress) {
@@ -449,6 +428,10 @@ void DnaAssemblyDialog::sl_onLibraryTypeChanged()
     }
 }
 
+void DnaAssemblyDialog::sl_formatChanged(const QString &newFormat) {
+    samBox->setChecked(BaseDocumentFormats::SAM == newFormat);
+}
+
 DnaAssemblyToRefTaskSettings DnaAssemblyGUIUtils::getSettings(DnaAssemblyDialog *dialog) {
     DnaAssemblyToRefTaskSettings s;
     SAFE_POINT(NULL != dialog, "NULL dialog", s);
diff --git a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.h b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.h
index 257529d..96fa666 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.h
+++ b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.h
@@ -22,21 +22,21 @@
 #ifndef _U2_DNA_ASSEMBLEY_DIALOG_H_
 #define _U2_DNA_ASSEMBLEY_DIALOG_H_
 
-#include <U2Core/GUrl.h>
-
-#include <ui/ui_AssemblyToRefDialog.h>
+#include <QStringList>
+#include <QVariant>
 
-#include <QtCore/QVariant>
-#include <QtCore/QStringList>
+#include <ui_AssemblyToRefDialog.h>
 
 #include <U2Algorithm/DnaAssemblyMultiTask.h>
 
+#include <U2Core/GUrl.h>
+
 
 namespace U2 {
 
 class DnaAssemblyAlgRegistry;
 class DnaAssemblyAlgorithmMainWidget;
-
+class SaveDocumentController;
 
 class ShortReadsTableItem : public QTreeWidgetItem {
 
@@ -57,7 +57,7 @@ public:
 };
 
 
-class DnaAssemblyDialog : public QDialog, private Ui::AssemblyToRefDialog {
+class DnaAssemblyDialog : public QDialog, private Ui_AssemblyToRefDialog {
     Q_OBJECT
 
 public:
@@ -78,20 +78,22 @@ private slots:
     void sl_onAddRefButtonClicked();
     void sl_onAddShortReadsButtonClicked();
     void sl_onRemoveShortReadsButtonClicked();
-    void sl_onSetResultFileNameButtonClicked();
     void sl_onAlgorithmChanged(const QString &text);
     void sl_onSamBoxClicked();
     void sl_onLibraryTypeChanged();
+    void sl_formatChanged(const QString &newFormat);
 
 private:
     void updateState();
     void addGuiExtension();
-    void buildResultUrl(const GUrl& url, bool ignoreExtension = false);
     void accept();
-
+    void initSaveController();
+    void buildResultUrl(const QString &refUrl);
 
     const DnaAssemblyAlgRegistry*   assemblyRegistry;
     DnaAssemblyAlgorithmMainWidget* customGUI;
+    SaveDocumentController *        saveController;
+
     static QString                  lastRefSeqUrl;
     static QStringList              lastShortReadsUrls;
     static QString                  methodName;
diff --git a/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.cpp b/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.cpp
index 307bbcd..b2ab9e9 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.cpp
@@ -195,7 +195,7 @@ void GenomeAssemblyDialog::sl_onAddShortReadsButtonClicked() {
     LastUsedDirHelper lod("AssemblyReads");
     QStringList fileNames;
 #ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         fileNames = U2FileDialog::getOpenFileNames(this, tr("Add short reads"), lod.dir, QString(), 0, QFileDialog::DontUseNativeDialog );
     } else
 #endif
diff --git a/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.h b/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.h
index 1191602..7dd0a9a 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.h
+++ b/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.h
@@ -32,7 +32,7 @@
 #include <QtWidgets/QWidget>
 #endif
 
-#include <ui/ui_GenomeAssemblyDialog.h>
+#include <ui_GenomeAssemblyDialog.h>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/util_dna_assembly/ui/GenomeAssemblyDialog.ui b/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/util_dna_assembly/ui/GenomeAssemblyDialog.ui
rename to src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.ui
diff --git a/src/corelibs/U2View/src/util_dna_assembly/ui/AssemblyToSamDialog.ui b/src/corelibs/U2View/src/util_dna_assembly/ui/AssemblyToSamDialog.ui
deleted file mode 100644
index 5f5acc3..0000000
--- a/src/corelibs/U2View/src/util_dna_assembly/ui/AssemblyToSamDialog.ui
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>AssemblyToSamDialog</class>
- <widget class="QDialog" name="AssemblyToSamDialog">
-  <property name="windowModality">
-   <enum>Qt::NonModal</enum>
-  </property>
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>474</width>
-    <height>122</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Convert UGENE Assembly Database to SAM Format</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0">
-      <widget class="QLabel" name="label">
-       <property name="text">
-        <string>Assembly database:</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QLineEdit" name="dbPathEdit"/>
-     </item>
-     <item row="0" column="2">
-      <widget class="QToolButton" name="setDbPathButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>Result SAM file:</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="1">
-      <widget class="QLineEdit" name="samPathEdit"/>
-     </item>
-     <item row="1" column="2">
-      <widget class="QToolButton" name="setSamPathButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
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 065fafd..e3ecc06 100644
--- a/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.cpp
+++ b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.cpp
@@ -53,7 +53,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, "17467753");
+    new HelpButton(this, buttonBox, "17470686");
 
     sspr = AppContext::getSecStructPredictAlgRegistry();
     algorithmComboBox->addItems(sspr->getAlgNameList());
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 996ce9c..b9abff9 100644
--- a/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.h
+++ b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.h
@@ -23,7 +23,7 @@
 #define _U2_EXPORT_SEC_STRUCT_DIALOG_H_
 
 #include <U2Core/AnnotationData.h>
-#include <ui/ui_SecStructDialog.h>
+#include <ui_SecStructDialog.h>
 
 namespace U2 {
 
@@ -32,7 +32,7 @@ class SecStructPredictTask;
 class SecStructPredictAlgRegistry;
 class Task;
 
-class U2VIEW_EXPORT SecStructDialog : public QDialog, private Ui::SecStructDialog {
+class U2VIEW_EXPORT SecStructDialog : public QDialog, private Ui_SecStructDialog {
     Q_OBJECT
 public:
     SecStructDialog(ADVSequenceObjectContext* ctx, QWidget *p = NULL);
diff --git a/src/corelibs/U2View/src/util_sec_struct_predict/ui/SecStructDialog.ui b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.ui
similarity index 100%
rename from src/corelibs/U2View/src/util_sec_struct_predict/ui/SecStructDialog.ui
rename to src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.ui
diff --git a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp
index 5f3c562..0025df1 100644
--- a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp
+++ b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp
@@ -44,8 +44,6 @@
 #include <U2Core/QObjectScopedPointer.h>
 #include <U2Gui/U2FileDialog.h>
 
-#include <U2Remote/RemoteMachineMonitorDialogController.h>
-
 #include <U2View/ADVSequenceObjectContext.h>
 
 #include "SmithWatermanDialogImpl.h"
@@ -74,7 +72,7 @@ SmithWatermanDialog::SmithWatermanDialog(QWidget* w, ADVSequenceObjectContext* c
     dialogConfig = _dialogConfig;
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467760");
+    new HelpButton(this, buttonBox, "17470693");
     buttonBox->button(QDialogButtonBox::Yes)->setText(tr("Remote run"));
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/corelibs/U2View/src/util_smith_waterman/ui/SmithWatermanDialogBase.ui b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogBase.ui
similarity index 100%
rename from src/corelibs/U2View/src/util_smith_waterman/ui/SmithWatermanDialogBase.ui
rename to src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogBase.ui
diff --git a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogImpl.h b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogImpl.h
index 809132d..de1eb48 100644
--- a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogImpl.h
+++ b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogImpl.h
@@ -23,7 +23,7 @@
 #define _U2_SMITH_WATERMAN_DIALOG_IMPL_H_
 
 #include "SmithWatermanDialog.h"
-#include <ui/ui_SmithWatermanDialogBase.h>
+#include <ui_SmithWatermanDialogBase.h>
 
 #include <QDialog>
 #include <QCloseEvent>
@@ -43,7 +43,7 @@ class QCheckBox;
 
 namespace U2 {
 
-class SmithWatermanDialog: public QDialog, public Ui::SmithWatermanDialogBase {
+class SmithWatermanDialog: public QDialog, public Ui_SmithWatermanDialogBase {
     Q_OBJECT
 public:
     SmithWatermanDialog(QWidget* p,
diff --git a/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.h b/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.h
index da301ed..f615f07 100644
--- a/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.h
+++ b/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.h
@@ -35,7 +35,7 @@
 
 namespace U2 {
 
-class U2VIEW_EXPORT SubstMatrixDialog: public QDialog, public Ui::SubstMatrixDialogBase {
+class U2VIEW_EXPORT SubstMatrixDialog: public QDialog, public Ui_SubstMatrixDialogBase {
     Q_OBJECT
 public:
     SubstMatrixDialog(const SMatrix& m, QWidget* parent);
diff --git a/src/corelibs/U2View/src/util_smith_waterman/ui/SubstMatrixDialogBase.ui b/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialogBase.ui
similarity index 100%
rename from src/corelibs/U2View/src/util_smith_waterman/ui/SubstMatrixDialogBase.ui
rename to src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialogBase.ui
diff --git a/src/corelibs/U2View/transl/english.ts b/src/corelibs/U2View/transl/english.ts
index 22b6003..cc2fc8f 100644
--- a/src/corelibs/U2View/transl/english.ts
+++ b/src/corelibs/U2View/transl/english.ts
@@ -14,103 +14,103 @@ Probably the data is too big.</translation>
 <context>
     <name>AssemblyToRefDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="88"/>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="112"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="88"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="112"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="177"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="177"/>
         <source>Path</source>
         <translation>Path</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="182"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="182"/>
         <source>Type</source>
         <translation>Type</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="187"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="187"/>
         <source>Order</source>
         <translation>Order</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="210"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="210"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="217"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="217"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="20"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="20"/>
         <source>Align Sequencing Reads</source>
         <translation>Align Sequencing Reads</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="31"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="31"/>
         <source>Select a method to align short reads.</source>
         <translation>Select a method to align short reads.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="34"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="34"/>
         <source>Alignment method</source>
         <translation>Alignment method</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="41"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="41"/>
         <source>Select required align short reads method</source>
         <translation>Select required align short reads method</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="71"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="71"/>
         <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/ui/AssemblyToRefDialog.ui" line="74"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="74"/>
         <source>Reference sequence</source>
         <translation>Reference sequence</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="95"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="95"/>
         <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/ui/AssemblyToRefDialog.ui" line="98"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="98"/>
         <source>Result file name</source>
         <translation>Result file name</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="123"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="123"/>
         <source>Library</source>
         <translation>Library</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="131"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="131"/>
         <source>Single-end</source>
         <translation>Single-end</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="136"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="136"/>
         <source>Paired-end</source>
         <translation>Paired-end</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="157"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="157"/>
         <source>SAM output</source>
         <translation>SAM output</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="166"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="166"/>
         <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/ui/AssemblyToRefDialog.ui" line="169"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="169"/>
         <source>Short reads</source>
         <translation>Short reads</translation>
     </message>
@@ -118,23 +118,23 @@ Probably the data is too big.</translation>
 <context>
     <name>AssemblyToSamDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToSamDialog.ui" line="17"/>
+        <location filename="../src/util_dna_assembly/AssemblyToSamDialog.ui" line="17"/>
         <source>Convert UGENE Assembly Database to SAM Format</source>
         <translation>Convert UGENE Assembly Database to SAM Format</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToSamDialog.ui" line="25"/>
+        <location filename="../src/util_dna_assembly/AssemblyToSamDialog.ui" line="25"/>
         <source>Assembly database:</source>
         <translation>Assembly database:</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToSamDialog.ui" line="35"/>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToSamDialog.ui" line="52"/>
+        <location filename="../src/util_dna_assembly/AssemblyToSamDialog.ui" line="35"/>
+        <location filename="../src/util_dna_assembly/AssemblyToSamDialog.ui" line="52"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToSamDialog.ui" line="42"/>
+        <location filename="../src/util_dna_assembly/AssemblyToSamDialog.ui" line="42"/>
         <source>Result SAM file:</source>
         <translation>Result SAM file:</translation>
     </message>
@@ -142,17 +142,17 @@ Probably the data is too big.</translation>
 <context>
     <name>BranchSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/ui/BranchSettingsDialog.ui" line="14"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.ui" line="14"/>
         <source>Branch Settings</source>
         <translation>Branch Settings</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/BranchSettingsDialog.ui" line="22"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.ui" line="22"/>
         <source>Color</source>
         <translation>Color</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/BranchSettingsDialog.ui" line="61"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.ui" line="61"/>
         <source>Line Weight</source>
         <translation>Line Weight</translation>
     </message>
@@ -160,46 +160,46 @@ Probably the data is too big.</translation>
 <context>
     <name>BuildIndexFromRefDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="20"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="20"/>
         <source>Build Index</source>
         <translation>Build Index</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="39"/>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="49"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="39"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="49"/>
         <source>Select a method that would be used to align short reads.</source>
         <translation>Select a method that would be used to align short reads.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="42"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="42"/>
         <source>Align short reads method</source>
         <translation>Align short reads method</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="76"/>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="86"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="76"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="86"/>
         <source>Select a DNA sequence that would be used to align short reads to. This parameter is <b>required</b>.</source>
         <translation>Select a DNA sequence that would be used to align short reads to. This parameter is <b>required</b>.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="79"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="79"/>
         <source>Reference sequence</source>
         <translation>Reference sequence</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="103"/>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="113"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="103"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="113"/>
         <source>Specify the index to build for the reference sequence. This parameter is <b>required</b>.</source>
         <translation>Specify the index to build for the reference sequence. This parameter is <b>required</b>.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="106"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="106"/>
         <source>Index file name</source>
         <translation>Index file name</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="96"/>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="123"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="96"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="123"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -207,17 +207,17 @@ Probably the data is too big.</translation>
 <context>
     <name>ColorSchemaDialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaDialog.ui" line="17"/>
+        <location filename="../src/ov_msa/ColorSchemaDialog.ui" line="17"/>
         <source>Color Scheme </source>
         <translation>Color Scheme </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaDialog.ui" line="43"/>
+        <location filename="../src/ov_msa/ColorSchemaDialog.ui" line="43"/>
         <source>Clear</source>
         <translation>Clear</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaDialog.ui" line="50"/>
+        <location filename="../src/ov_msa/ColorSchemaDialog.ui" line="50"/>
         <source>Restore last state</source>
         <translation>Restore last state</translation>
     </message>
@@ -225,37 +225,37 @@ Probably the data is too big.</translation>
 <context>
     <name>ColorSchemaSettingsWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="17"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="17"/>
         <source>MSA Color Schemes Settings</source>
         <translation>MSA Color Schemes Settings</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="23"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="23"/>
         <source>Create and modify custom color schemes</source>
         <translation>Create and modify custom color schemes</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="35"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="35"/>
         <source>Directory to save color scheme:</source>
         <translation>Directory to save color scheme:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="47"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="47"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="66"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="66"/>
         <source>Change color scheme</source>
         <translation>Change color scheme</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="73"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="73"/>
         <source>Create color scheme</source>
         <translation>Create color scheme</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="80"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="80"/>
         <source>Delete</source>
         <translation>Delete</translation>
     </message>
@@ -263,22 +263,22 @@ Probably the data is too big.</translation>
 <context>
     <name>CreateMSAScheme</name>
     <message>
-        <location filename="../src/ov_msa/ui/CreateMSAScheme.ui" line="23"/>
+        <location filename="../src/ov_msa/CreateMSAScheme.ui" line="23"/>
         <source>Create Alignment Color Scheme</source>
         <translation>Create Alignment Color Scheme</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateMSAScheme.ui" line="50"/>
+        <location filename="../src/ov_msa/CreateMSAScheme.ui" line="50"/>
         <source>New scheme name</source>
         <translation>New scheme name</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateMSAScheme.ui" line="79"/>
+        <location filename="../src/ov_msa/CreateMSAScheme.ui" line="79"/>
         <source>Alphabet</source>
         <translation>Alphabet</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateMSAScheme.ui" line="110"/>
+        <location filename="../src/ov_msa/CreateMSAScheme.ui" line="110"/>
         <source>Use extended mode</source>
         <translation>Use extended mode</translation>
     </message>
@@ -286,32 +286,32 @@ Probably the data is too big.</translation>
 <context>
     <name>CreatePhyTree</name>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="20"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="20"/>
         <source>Build Phylogenetic Tree</source>
         <translation>Build Phylogenetic Tree</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="45"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="45"/>
         <source>Tree building method</source>
         <translation>Tree building method</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="86"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="86"/>
         <source>Save tree to</source>
         <translation>Save tree to</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="96"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="96"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="110"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="110"/>
         <source>Remember Settings</source>
         <translation>Remember Settings</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="117"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="117"/>
         <source>Restore Default</source>
         <translation>Restore Default</translation>
     </message>
@@ -319,32 +319,32 @@ Probably the data is too big.</translation>
 <context>
     <name>CreateRulerDialog</name>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="14"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="14"/>
         <source>Create New Ruler</source>
         <translation>Create New Ruler</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="28"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="28"/>
         <source>Ruler name</source>
         <translation>Ruler name</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="48"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="48"/>
         <source>Ruler start</source>
         <translation>Ruler start</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="68"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="68"/>
         <source>Ruler color</source>
         <translation>Ruler color</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="75"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="75"/>
         <source>Sample Text</source>
         <translation>Sample Text</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="88"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="88"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -352,224 +352,86 @@ Probably the data is too big.</translation>
 <context>
     <name>CreateSubalignmentDialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="14"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="14"/>
         <source>Extract Selected as MSA</source>
         <translation>Extract Selected as MSA</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="22"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="22"/>
         <source>From </source>
         <translation>From </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="48"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="48"/>
         <source> to </source>
         <translation> to </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="73"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="73"/>
         <source>Selected sequences</source>
         <translation>Selected sequences</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="102"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="102"/>
         <source>Invert selection</source>
         <translation>Invert selection</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="109"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="109"/>
         <source>Select all</source>
         <translation>Select all</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="116"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="116"/>
         <source>Clear selection</source>
         <translation>Clear selection</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="127"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="127"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="137"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="137"/>
         <source>File name</source>
         <translation>File name</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="144"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="144"/>
         <source>File format to use</source>
         <translation>File format to use</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="173"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="173"/>
         <source>Add to project</source>
         <translation>Add to project</translation>
     </message>
 </context>
 <context>
-    <name>DasBlastSettingsWidget</name>
-    <message>
-        <source>Form</source>
-        <translation type="vanished">Form</translation>
-    </message>
-    <message>
-        <source>Threshold:</source>
-        <translation type="vanished">Threshold:</translation>
-    </message>
-    <message>
-        <source>Number of expected matches in a random database. The lower the value, the more likely the match is to be significant</source>
-        <translation type="vanished">Number of expected matches in a random database. The lower the value, the more likely the match is to be significant</translation>
-    </message>
-    <message>
-        <source>Matrix:</source>
-        <translation type="vanished">Matrix:</translation>
-    </message>
-    <message>
-        <source>Assigns a probability score for each position in an alignment</source>
-        <translation type="vanished">Assigns a probability score for each position in an alignment</translation>
-    </message>
-    <message>
-        <source>Filtering:</source>
-        <translation type="vanished">Filtering:</translation>
-    </message>
-    <message>
-        <source>Filtering low-complexity regions replaces the regions with X's during the search to filter biologically unrelated results</source>
-        <translation type="vanished">Filtering low-complexity regions replaces the regions with X's during the search to filter biologically unrelated results</translation>
-    </message>
-    <message>
-        <source>Gapped:</source>
-        <translation type="vanished">Gapped:</translation>
-    </message>
-    <message>
-        <source>Allows gaps to be introduced in the sequences when the comparison is done</source>
-        <translation type="vanished">Allows gaps to be introduced in the sequences when the comparison is done</translation>
-    </message>
-    <message>
-        <source>Maximum results:</source>
-        <translation type="vanished">Maximum results:</translation>
-    </message>
-    <message>
-        <source>Limits the number of returned results</source>
-        <translation type="vanished">Limits the number of returned results</translation>
-    </message>
-</context>
-<context>
-    <name>DasOptionsPanelWidget</name>
-    <message>
-        <source>Form</source>
-        <translation type="vanished">Form</translation>
-    </message>
-    <message>
-        <source>Database:</source>
-        <translation type="vanished">Database:</translation>
-    </message>
-    <message>
-        <source>Database against which the search is performed: UniProtKB or clusters of sequences with 100%, 90% or 50% identity</source>
-        <translation type="vanished">Database against which the search is performed: UniProtKB or clusters of sequences with 100%, 90% or 50% identity</translation>
-    </message>
-    <message>
-        <source>Minimum Identity:</source>
-        <translation type="vanished">Minimum Identity:</translation>
-    </message>
-    <message>
-        <source>Minimum percent identity between the input sequence region and BLAST results</source>
-        <translation type="vanished">Minimum percent identity between the input sequence region and BLAST results</translation>
-    </message>
-    <message>
-        <source>%</source>
-        <translation type="vanished">%</translation>
-    </message>
-    <message>
-        <source>Show more option...</source>
-        <translation type="vanished">Show more option...</translation>
-    </message>
-    <message>
-        <source>IDs of similar sequences:</source>
-        <translation type="vanished">IDs of similar sequences:</translation>
-    </message>
-    <message>
-        <source>Select ID(s) to fetch annotations from DAS</source>
-        <translation type="vanished">Select ID(s) to fetch annotations from DAS</translation>
-    </message>
-    <message>
-        <source>ID</source>
-        <translation type="vanished">ID</translation>
-    </message>
-    <message>
-        <source>Identity</source>
-        <translation type="vanished">Identity</translation>
-    </message>
-    <message>
-        <source>Fetch annotations</source>
-        <translation type="vanished">Fetch annotations</translation>
-    </message>
-    <message>
-        <source>Send request to Uniprot BLAST to get IDs of similar sequences</source>
-        <translation type="vanished">Send request to Uniprot BLAST to get IDs of similar sequences</translation>
-    </message>
-    <message>
-        <source>Fetch IDs</source>
-        <translation type="vanished">Fetch IDs</translation>
-    </message>
-    <message>
-        <source>Info: Searching for annotations with DAS is available for amino acid sequences only</source>
-        <translation type="vanished">Info: Searching for annotations with DAS is available for amino acid sequences only</translation>
-    </message>
-    <message>
-        <source>BLAST</source>
-        <translation type="vanished">BLAST</translation>
-    </message>
-    <message>
-        <source>Algorithm settings</source>
-        <translation type="vanished">Algorithm settings</translation>
-    </message>
-    <message>
-        <source>Annotations settings</source>
-        <translation type="vanished">Annotations settings</translation>
-    </message>
-    <message>
-        <source>DAS features sources</source>
-        <translation type="vanished">DAS features sources</translation>
-    </message>
-    <message>
-        <source>Whole sequence</source>
-        <translation type="vanished">Whole sequence</translation>
-    </message>
-    <message>
-        <source>Selected region</source>
-        <translation type="vanished">Selected region</translation>
-    </message>
-    <message>
-        <source>Custom region</source>
-        <translation type="vanished">Custom region</translation>
-    </message>
-</context>
-<context>
     <name>DeleteGapsDialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/DeleteGapsDialog.ui" line="14"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.ui" line="14"/>
         <source>Remove Columns of Gaps</source>
         <translation>Remove Columns of Gaps</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/DeleteGapsDialog.ui" line="22"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.ui" line="22"/>
         <source>Remove columns with number of gaps</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/DeleteGapsDialog.ui" line="32"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.ui" line="32"/>
         <source>Remove columns with percentage of gaps</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/DeleteGapsDialog.ui" line="39"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.ui" line="39"/>
         <source>%</source>
         <comment>%</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/DeleteGapsDialog.ui" line="52"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.ui" line="52"/>
         <source>Remove all gap-only columns</source>
         <translation>Remove all gap-only columns</translation>
     </message>
@@ -577,71 +439,66 @@ Probably the data is too big.</translation>
 <context>
     <name>EditAnnotationDialog</name>
     <message>
-        <location filename="../src/ov_sequence/ui/EditAnnotationDialog.ui" line="14"/>
         <source>Edit Annotation</source>
-        <translation>Edit Annotation</translation>
+        <translation type="vanished">Edit Annotation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/EditAnnotationDialog.ui" line="22"/>
         <source>Annotation name</source>
-        <translation>Annotation name</translation>
+        <translation type="vanished">Annotation name</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/EditAnnotationDialog.ui" line="32"/>
         <source>Location</source>
-        <translation>Location</translation>
+        <translation type="vanished">Location</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/EditAnnotationDialog.ui" line="52"/>
-        <location filename="../src/ov_sequence/ui/EditAnnotationDialog.ui" line="63"/>
         <source>...</source>
-        <translation>...</translation>
+        <translation type="vanished">...</translation>
     </message>
 </context>
 <context>
     <name>ExportConsensusDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="14"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="14"/>
         <source>Export Consensus</source>
         <translation>Export Consensus</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="22"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="22"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="32"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="32"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="42"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="42"/>
         <source>Sequence name</source>
         <translation>Sequence name</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="81"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="81"/>
         <source>Keep gaps</source>
         <translation>Keep gaps</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="52"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="52"/>
         <source>Consensus algorithm</source>
         <translation>Consensus algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="62"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="62"/>
         <source>File format</source>
         <translation>File format</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="69"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="69"/>
         <source>Mode</source>
         <translation>Mode</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="90"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="90"/>
         <source>Add to project</source>
         <translation>Add to project</translation>
     </message>
@@ -649,37 +506,37 @@ Probably the data is too big.</translation>
 <context>
     <name>ExportConsensusWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="14"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="34"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="34"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="44"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="44"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="58"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="58"/>
         <source>File format</source>
         <translation>File format</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="75"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="75"/>
         <source>Keep gaps</source>
         <translation>Keep gaps</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="82"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="82"/>
         <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/ui/ExportConsensusWidget.ui" line="118"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="118"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
@@ -687,47 +544,46 @@ Probably the data is too big.</translation>
 <context>
     <name>ExportCoverageDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="14"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="14"/>
         <source>Export the Assembly Coverage</source>
         <translation>Export the Assembly Coverage</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="26"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="23"/>
         <source>Export to:</source>
         <translation>Export to:</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="38"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="47"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="44"/>
         <source>Format:</source>
         <translation>Format:</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="72"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="69"/>
         <source>Compress the file</source>
         <translation>Compress the file</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="124"/>
         <source>Additional options</source>
-        <translation>Additional options</translation>
+        <translation type="vanished">Additional options</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="130"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="124"/>
         <source>Export coverage value</source>
         <translation>Export coverage value</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="140"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="134"/>
         <source>Export bases quantity</source>
         <translation>Export bases quantity</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="86"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="83"/>
         <source>Threshold:</source>
         <translation>Threshold:</translation>
     </message>
@@ -735,57 +591,57 @@ Probably the data is too big.</translation>
 <context>
     <name>ExportHighlightedDialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="20"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="20"/>
         <source>Export Highlighted to File</source>
         <translation>Export Highlighted to File</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="31"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="31"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="41"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="41"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="52"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="52"/>
         <source>Exported area:  from</source>
         <translation>Exported area: from</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="78"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="78"/>
         <source> to </source>
         <translation> to </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="109"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="109"/>
         <source>Indexing</source>
         <translation>Indexing</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="118"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="118"/>
         <source>1-based</source>
         <translation>1-based</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="128"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="128"/>
         <source>0-based</source>
         <translation>0-based</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="141"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="141"/>
         <source>Keep gaps</source>
         <translation>Keep gaps</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="151"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="151"/>
         <source>Dots instead not highlighted</source>
         <translation>Dots instead not highlighted</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="161"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="161"/>
         <source>Transpose output</source>
         <translation>Transpose output</translation>
     </message>
@@ -793,27 +649,59 @@ Probably the data is too big.</translation>
 <context>
     <name>ExportReadsDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportReadsDialog.ui" line="14"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.ui" line="14"/>
         <source>Export Reads</source>
         <translation>Export Reads</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportReadsDialog.ui" line="22"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.ui" line="22"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportReadsDialog.ui" line="32"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.ui" line="32"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportReadsDialog.ui" line="39"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.ui" line="39"/>
         <source>File format</source>
         <translation>File format</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportReadsDialog.ui" line="51"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.ui" line="51"/>
+        <source>Add to project</source>
+        <translation>Add to project</translation>
+    </message>
+</context>
+<context>
+    <name>ExtractAssemblyRegionDialog</name>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.ui" line="14"/>
+        <source>Export Assembly Region</source>
+        <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 type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.ui" line="32"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.ui" line="39"/>
+        <source>File format</source>
+        <translation>File format</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.ui" line="72"/>
         <source>Add to project</source>
         <translation>Add to project</translation>
     </message>
@@ -821,87 +709,87 @@ Probably the data is too big.</translation>
 <context>
     <name>FindPatternForm</name>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="41"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="41"/>
         <source>Search for:</source>
         <translation>Search for:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="433"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="433"/>
         <source>Search in</source>
         <translation>Search in</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="526"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="526"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="190"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="190"/>
         <source>Previous</source>
         <translation>Previous</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="193"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="193"/>
         <source>Shift+Return</source>
         <translation>Shift+Return</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="234"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="234"/>
         <source>Next</source>
         <translation>Next</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="237"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="237"/>
         <source>Return</source>
         <translation>Return</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="446"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="446"/>
         <source>Strand</source>
         <translation>Strand</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="459"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="459"/>
         <source>Region</source>
         <translation>Region</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="596"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="596"/>
         <source>Remove overlapped results</source>
         <translation>Remove overlapped results</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="613"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="613"/>
         <source>Limit results number to:</source>
         <translation>Limit results number to:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="668"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="668"/>
         <source>Create annotations</source>
         <translation>Create annotations</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="82"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="82"/>
         <source>Find file with newline-separated patterns</source>
         <translation>Find file with newline-separated patterns</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="85"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="85"/>
         <source>Load patterns from file</source>
         <translation>Load patterns from file</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="100"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="100"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="107"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="107"/>
         <source>Path:</source>
         <translation>Path:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="295"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="295"/>
         <source>Algorithm</source>
         <translation>Algorithm</translation>
     </message>
@@ -909,47 +797,47 @@ Probably the data is too big.</translation>
 <context>
     <name>GeneralTabOptionsPanelWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="14"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="56"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="56"/>
         <source>Length:</source>
         <translation>Length:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="85"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="85"/>
         <source>Sequence number:</source>
         <translation>Sequence number:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="117"/>
+        <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/ui/GeneralTabOptionsPanelWidget.ui" line="129"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="129"/>
         <source>Threshold:</source>
         <translation>Threshold:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="136"/>
+        <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/ui/GeneralTabOptionsPanelWidget.ui" line="176"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="176"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="203"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="203"/>
         <source>Format:</source>
         <translation>Format:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="213"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="213"/>
         <source>Copy</source>
         <translation>Copy</translation>
     </message>
@@ -957,90 +845,90 @@ Probably the data is too big.</translation>
 <context>
     <name>GenomeAssemblyDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="20"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="20"/>
         <source>Assemble Genomes</source>
         <translation>Assemble Genomes</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="28"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="28"/>
         <source>Select a method to align short reads.</source>
         <translation>Select a method to align short reads.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="31"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="31"/>
         <source>Assembly method</source>
         <translation>Assembly method</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="38"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="38"/>
         <source>Select required align short reads method</source>
         <translation>Select required align short reads method</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="65"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="65"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="79"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.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/ui/GenomeAssemblyDialog.ui" line="82"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="82"/>
         <source>Output directory</source>
         <translation>Output directory</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="93"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="93"/>
         <source>Library</source>
         <translation>Library</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="121"/>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="155"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="121"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="155"/>
         <source>Path</source>
         <translation>Path</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="136"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="136"/>
         <source>#</source>
         <translation>#</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="141"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="141"/>
         <source>Type</source>
         <translation>Type</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="146"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="146"/>
         <source>Orientation</source>
         <translation>Orientation</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="165"/>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="196"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="165"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="196"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="172"/>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="203"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="172"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="203"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="225"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="225"/>
         <source>Properties</source>
         <translation>Properties</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="232"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="232"/>
         <source>Left reads</source>
         <translation>Left reads</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="239"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="239"/>
         <source>Right reads</source>
         <translation>Right reads</translation>
     </message>
@@ -1048,22 +936,22 @@ Probably the data is too big.</translation>
 <context>
     <name>LicenseDialog</name>
     <message>
-        <location filename="../src/ui/LicenseDialog.ui" line="14"/>
+        <location filename="../src/LicenseDialog.ui" line="14"/>
         <source>License Agreement</source>
         <translation>License Agreement</translation>
     </message>
     <message>
-        <location filename="../src/ui/LicenseDialog.ui" line="20"/>
+        <location filename="../src/LicenseDialog.ui" line="20"/>
         <source>To use this algorithm need accept following license agreement:</source>
         <translation>To use this algorithm need accept following license agreement:</translation>
     </message>
     <message>
-        <location filename="../src/ui/LicenseDialog.ui" line="45"/>
+        <location filename="../src/LicenseDialog.ui" line="45"/>
         <source>Accept</source>
         <translation>Accept</translation>
     </message>
     <message>
-        <location filename="../src/ui/LicenseDialog.ui" line="52"/>
+        <location filename="../src/LicenseDialog.ui" line="52"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -1071,62 +959,62 @@ Probably the data is too big.</translation>
 <context>
     <name>MSADistanceColumnSettingsForm</name>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="23"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="23"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="77"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="77"/>
         <source>Show distances column</source>
         <translation>Show distances column</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="104"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="104"/>
         <source>Distance algorithm:</source>
         <translation>Distance algorithm:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="147"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="147"/>
         <source>Automatic updating</source>
         <translation>Automatic updating</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="162"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="162"/>
         <source><dataState></source>
         <translation><dataState></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="169"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="169"/>
         <source>Refresh distances</source>
         <translation>Refresh distances</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="172"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="172"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="191"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="191"/>
         <source><hint></source>
         <translation><hint></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="114"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="114"/>
         <source>Profile mode</source>
         <translation>Profile mode</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="123"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="123"/>
         <source>Counts</source>
         <translation>Counts</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="130"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="130"/>
         <source>Percents</source>
         <translation>Percents</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="137"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="137"/>
         <source>Exclude gaps</source>
         <translation>Exclude gaps</translation>
     </message>
@@ -1134,42 +1022,42 @@ Probably the data is too big.</translation>
 <context>
     <name>MSAExportSettings</name>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="14"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="40"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="40"/>
         <source>Region</source>
         <translation>Region</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="54"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="54"/>
         <source>Whole alignment</source>
         <translation>Whole alignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="59"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="59"/>
         <source>Custom region</source>
         <translation>Custom region</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="73"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="73"/>
         <source>Select</source>
         <translation>Select</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="82"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="82"/>
         <source>Include sequences' names</source>
         <translation>Include sequences' names</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="89"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="89"/>
         <source>Include consensus</source>
         <translation>Include consensus</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="96"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="96"/>
         <source>Include ruler</source>
         <translation>Include ruler</translation>
     </message>
@@ -1177,62 +1065,62 @@ Probably the data is too big.</translation>
 <context>
     <name>PairwiseAlignmentOptionsPanelWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="20"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="20"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="148"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="148"/>
         <source>Similarity:</source>
         <translation>Similarity:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="161"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="161"/>
         <source>Not defined</source>
         <translation>Not defined</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="196"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="196"/>
         <source>Algorithm:</source>
         <translation>Algorithm:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="251"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="251"/>
         <source>Open the alignment result in the new editor</source>
         <translation>Open the alignment result in the new editor</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="254"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="254"/>
         <source>In new window</source>
         <translation>In new window</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="283"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="283"/>
         <source>Output file:</source>
         <translation>Output file:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="301"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="301"/>
         <source>Select file to save result of the alignment. If it is not defined, default file name will be used.</source>
         <translation>Select file to save result of the alignment. If it is not defined, default file name will be used.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="304"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="304"/>
         <source>Default</source>
         <translation>Default</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="311"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="311"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="343"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="343"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="352"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="352"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
@@ -1240,22 +1128,22 @@ Probably the data is too big.</translation>
 <context>
     <name>PhyTreeDisplayOptionsWidget</name>
     <message>
-        <location filename="../src/phyltree/ui/PhyTreeDisplayOptionsWidget.ui" line="14"/>
+        <location filename="../src/phyltree/PhyTreeDisplayOptionsWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/PhyTreeDisplayOptionsWidget.ui" line="41"/>
+        <location filename="../src/phyltree/PhyTreeDisplayOptionsWidget.ui" line="41"/>
         <source>Display tree in new window</source>
         <translation>Display tree in new window</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/PhyTreeDisplayOptionsWidget.ui" line="57"/>
+        <location filename="../src/phyltree/PhyTreeDisplayOptionsWidget.ui" line="57"/>
         <source>Display tree with alignment editor</source>
         <translation>Display tree with alignment editor</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/PhyTreeDisplayOptionsWidget.ui" line="76"/>
+        <location filename="../src/phyltree/PhyTreeDisplayOptionsWidget.ui" line="76"/>
         <source>Synchronize alignment with tree</source>
         <translation>Synchronize alignment with tree</translation>
     </message>
@@ -1356,137 +1244,137 @@ Double-click to collapse the branch</translation>
         <translation>Navigation</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="161"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="166"/>
         <source>Lock here</source>
         <translation>Lock here</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="312"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="317"/>
         <source>Shift+move mouse</source>
         <translation>Shift+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="312"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="317"/>
         <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="313"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="318"/>
         <source>Ctrl+wheel</source>
         <translation>Ctrl+wheel</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="313"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="318"/>
         <source>Zoom the Assembly Overview</source>
         <translation>Zoom the Assembly Overview</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="314"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="319"/>
         <source>Alt+click</source>
         <translation>Alt+click</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="314"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="319"/>
         <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="315"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="320"/>
         <source>Wheel+move mouse</source>
         <translation>Wheel+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="315"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="320"/>
         <source>Move the Assembly Overview</source>
         <translation>Move the Assembly Overview</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="316"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="321"/>
         <source>Wheel</source>
         <translation>Wheel</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="316"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="321"/>
         <source>Zoom the Reads Area</source>
         <translation>Zoom the Reads Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="317"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="322"/>
         <source>Double-click</source>
         <translation>Double-click</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="317"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="322"/>
         <source>Zoom in the Reads Area</source>
         <translation>Zoom in the Reads Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="318"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="323"/>
         <source>+/-</source>
         <translation>+/-</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="318"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="323"/>
         <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="319"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="324"/>
         <source>Click+move mouse</source>
         <translation>Click+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="319"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="324"/>
         <source>Move the Reads Area</source>
         <translation>Move the Reads Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="320"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="325"/>
         <source>Arrow</source>
         <translation>Arrow</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="320"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="325"/>
         <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="321"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="326"/>
         <source>Ctrl+arrow</source>
         <translation>Ctrl+arrow</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="321"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="326"/>
         <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="322"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="327"/>
         <source>Page up/Page down</source>
         <translation>Page up/Page down</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="322"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="327"/>
         <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="323"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="328"/>
         <source>Home/End</source>
         <translation>Home/End</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="323"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="328"/>
         <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="324"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="329"/>
         <source>Ctrl+G</source>
         <translation>Ctrl+G</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="324"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="329"/>
         <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>
@@ -1531,17 +1419,17 @@ Double-click to collapse the branch</translation>
         <translation>Highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="39"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="41"/>
         <source>Data is outdated</source>
         <translation>Data is outdated</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="40"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="42"/>
         <source>Data is valid</source>
         <translation>Data is valid</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="41"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="43"/>
         <source>Data is being updated</source>
         <translation>Data is being updated</translation>
     </message>
@@ -1584,10 +1472,6 @@ Double-click to collapse the branch</translation>
         <translation>Annotations Highlighting</translation>
     </message>
     <message>
-        <source>DAS Annotations</source>
-        <translation type="vanished">DAS Annotations</translation>
-    </message>
-    <message>
         <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="218"/>
         <source>Search algorithm</source>
         <translation>Search algorithm</translation>
@@ -1636,32 +1520,32 @@ Double-click to collapse the branch</translation>
 <context>
     <name>SaveGraphCutoffsDialog</name>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="14"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="14"/>
         <source>Save Graph Cutoffs as Annotations</source>
         <translation>Save Graph Cutoffs as Annotations</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="141"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="141"/>
         <source>Maximum cutoff</source>
         <translation>Maximum cutoff</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="154"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="154"/>
         <source>Minimum cutoff</source>
         <translation>Minimum cutoff</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="52"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="52"/>
         <source>Area to annotate</source>
         <translation>Area to annotate</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="64"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="64"/>
         <source>Around cutoff values</source>
         <translation>Around cutoff values</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="77"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="77"/>
         <source>Between cutoff values</source>
         <translation>Between cutoff values</translation>
     </message>
@@ -1669,47 +1553,47 @@ Double-click to collapse the branch</translation>
 <context>
     <name>SearchQualifierDialog</name>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="14"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="14"/>
         <source>Find Qualifier</source>
         <translation>Find Qualifier</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="58"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="58"/>
         <source>Qualifier</source>
         <translation>Qualifier</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="67"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="67"/>
         <source>Name:</source>
         <translation>Name:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="77"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="77"/>
         <source>Value:</source>
         <translation>Value:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="23"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="23"/>
         <source>Match Parameter</source>
         <translation>Match Parameter</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="32"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="32"/>
         <source>Contains substring</source>
         <translation>Contains substring</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="45"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="45"/>
         <source>Exact match</source>
         <translation>Exact match</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="96"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="96"/>
         <source>Group Name</source>
         <translation>Group Name</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="122"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="122"/>
         <source>Search in:</source>
         <translation>Search in:</translation>
     </message>
@@ -1717,37 +1601,37 @@ Double-click to collapse the branch</translation>
 <context>
     <name>SecStructDialog</name>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="14"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="14"/>
         <source>Secondary Structure Prediction</source>
         <translation>Secondary Structure Prediction</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="22"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="22"/>
         <source>Algorithm</source>
         <translation>Algorithm</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="36"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="36"/>
         <source>Range Start:</source>
         <translation>Range Start:</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="59"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="59"/>
         <source>Range End:</source>
         <translation>Range End:</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="86"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="86"/>
         <source>Results:</source>
         <translation>Results:</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="120"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="120"/>
         <source>Total predicted:</source>
         <translation>Total predicted:</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="127"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="127"/>
         <source>0</source>
         <translation>0</translation>
     </message>
@@ -1755,37 +1639,37 @@ Double-click to collapse the branch</translation>
 <context>
     <name>SelectSubalignmentDialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="14"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="14"/>
         <source>Select Subalignment</source>
         <translation>Select Subalignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="22"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="22"/>
         <source>From </source>
         <translation>From </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="48"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="48"/>
         <source> to </source>
         <translation> to </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="73"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="73"/>
         <source>Selected sequences</source>
         <translation>Selected sequences</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="102"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="102"/>
         <source>Invert selection</source>
         <translation>Invert selection</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="109"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="109"/>
         <source>Select all</source>
         <translation>Select all</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="116"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="116"/>
         <source>Clear selection</source>
         <translation>Clear selection</translation>
     </message>
@@ -1816,32 +1700,32 @@ Double-click to collapse the branch</translation>
 <context>
     <name>SequenceSelectorWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="14"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="40"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="40"/>
         <source>Add selected sequence</source>
         <translation>Add selected sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="43"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="43"/>
         <source>></source>
         <translation>></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="88"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="88"/>
         <source>Select and add</source>
         <translation>Select and add</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="123"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="123"/>
         <source>Clear</source>
         <translation>Clear</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="126"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="126"/>
         <source>x</source>
         <translation>x</translation>
     </message>
@@ -1849,162 +1733,162 @@ Double-click to collapse the branch</translation>
 <context>
     <name>SmithWatermanDialogBase</name>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="32"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="32"/>
         <source>Smith-Waterman Search</source>
         <translation>Smith-Waterman Search</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="478"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="478"/>
         <source>Input and output</source>
         <translation>Input and output</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="42"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="42"/>
         <source>Smith-Waterman parameters</source>
         <translation>Smith-Waterman parameters</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="48"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="48"/>
         <source>Pattern</source>
         <translation>Pattern</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="100"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="100"/>
         <source>Search in</source>
         <translation>Search in</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="115"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="115"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="134"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="134"/>
         <source>Translation</source>
         <translation>Translation</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="169"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="169"/>
         <source>Strand</source>
         <translation>Strand</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="178"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="178"/>
         <source>Both</source>
         <translation>Both</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="188"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="188"/>
         <source>Direct</source>
         <translation>Direct</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="198"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="198"/>
         <source>Complement</source>
         <translation>Complement</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="217"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="217"/>
         <source>Smith-Waterman algorithm parameters</source>
         <translation>Smith-Waterman algorithm parameters</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="223"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="223"/>
         <source>Algorithm version</source>
         <translation>Algorithm version</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="273"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="273"/>
         <source>Advanced..</source>
         <translation>Advanced..</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="289"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="289"/>
         <source>Scoring matrix</source>
         <translation>Scoring matrix</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="339"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="339"/>
         <source>View..</source>
         <translation>View..</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="352"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="352"/>
         <source>Gap scores</source>
         <translation>Gap scores</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="358"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="358"/>
         <source>Gap open</source>
         <translation>Gap open</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="365"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="365"/>
         <source>Gap  extension </source>
         <translation>Gap  extension </translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="398"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="398"/>
         <source>Results filtering strategy</source>
         <translation>Results filtering strategy</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="406"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="406"/>
         <source>Minimal score</source>
         <translation>Minimal score</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="432"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="432"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="452"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="452"/>
         <source>Report results</source>
         <translation>Report results</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="510"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="510"/>
         <source>Save results as</source>
         <translation>Save results as</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="559"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="559"/>
         <source>Aligner options</source>
         <translation>Aligner options</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="576"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="576"/>
         <source>Alignment files directory path</source>
         <translation>Alignment files directory path</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="611"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="611"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="621"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="621"/>
         <source>Set advanced options</source>
         <translation>Set advanced options</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="639"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="639"/>
         <source>Template for alignment files names</source>
         <translation>Template for alignment files names</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="652"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="652"/>
         <source>Template for reference subsequences names</source>
         <translation>Template for reference subsequences names</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="691"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="691"/>
         <source>Template for pattern subsequences names</source>
         <translation>Template for pattern subsequences names</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="721"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="721"/>
         <source>Pattern sequence name</source>
         <translation>Pattern sequence name</translation>
     </message>
@@ -2012,47 +1896,47 @@ Double-click to collapse the branch</translation>
 <context>
     <name>TextSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="14"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="14"/>
         <source>Labels Formatting</source>
         <translation>Labels Formatting</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="22"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="22"/>
         <source>Color</source>
         <translation>Color</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="29"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="29"/>
         <source>Size</source>
         <translation>Size</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="75"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="75"/>
         <source>Font</source>
         <translation>Font</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="85"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="85"/>
         <source>Attributes</source>
         <translation>Attributes</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="100"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="100"/>
         <source>B</source>
         <translation>B</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="115"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="115"/>
         <source>I</source>
         <translation>I</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="130"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="130"/>
         <source>U</source>
         <translation>U</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="145"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="145"/>
         <source>S</source>
         <translation>S</translation>
     </message>
@@ -2060,113 +1944,113 @@ Double-click to collapse the branch</translation>
 <context>
     <name>TreeOptionWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="23"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="23"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="58"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="58"/>
         <source>Tree layout</source>
         <translation>Tree layout</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="78"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="78"/>
         <source>Tree view</source>
         <translation>Tree view</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="120"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="120"/>
         <source>Show names</source>
         <translation>Show names</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="127"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="127"/>
         <source>Show distances</source>
         <translation>Show distances</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="134"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="134"/>
         <source>Show node labels</source>
         <translation>Show node labels</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="141"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="141"/>
         <source>Align labels</source>
         <translation>Align labels</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="163"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="163"/>
         <source>Show font settings</source>
         <translation>Show font settings</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="192"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="192"/>
         <source>Font</source>
         <translation>Font</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="199"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="199"/>
         <source>Size</source>
         <translation>Size</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="229"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="229"/>
         <source>Color  </source>
         <translation>Color  </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="262"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="262"/>
         <source>Attributes</source>
         <translation>Attributes</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="288"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="288"/>
         <source>B</source>
         <translation>B</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="300"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="300"/>
         <source>I</source>
         <translation>I</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="316"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="316"/>
         <source>U</source>
         <translation>U</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="345"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="345"/>
         <source>Font size</source>
         <translation>Font size</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="374"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="374"/>
         <source>Scale range</source>
         <translation>Scale range</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="381"/>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="544"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="381"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="544"/>
         <source>Line width</source>
         <translation>Line width</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="465"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="465"/>
         <source>Width</source>
         <translation>Width</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="472"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="472"/>
         <source>Height</source>
         <translation>Height</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="509"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="509"/>
         <source>Show pen settings</source>
         <translation>Show pen settings</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="561"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="561"/>
         <source>Color</source>
         <translation>Color</translation>
     </message>
@@ -2174,27 +2058,27 @@ Double-click to collapse the branch</translation>
 <context>
     <name>TreeSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/ui/TreeSettingsDialog.ui" line="14"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.ui" line="14"/>
         <source>Tree Settings</source>
         <translation>Tree Settings</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TreeSettingsDialog.ui" line="76"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.ui" line="76"/>
         <source>Width</source>
         <translation>Width</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TreeSettingsDialog.ui" line="83"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.ui" line="83"/>
         <source>Height (Rectangular)</source>
         <translation>Height (Rectangular)</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TreeSettingsDialog.ui" line="93"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.ui" line="93"/>
         <source>Tree View</source>
         <translation>Tree View</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TreeSettingsDialog.ui" line="103"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.ui" line="103"/>
         <source>Scale Range</source>
         <translation>Scale Range</translation>
     </message>
@@ -2240,23 +2124,19 @@ Double-click to collapse the branch</translation>
         <translation>Copy annotation sequence translation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="90"/>
+        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="319"/>
         <source>Paste sequence</source>
-        <translation type="unfinished"></translation>
+        <translation>Paste sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="150"/>
+        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="147"/>
         <source>An error occurred during getting sequence data: %1</source>
         <translation>An error occurred during getting sequence data: %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="307"/>
+        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="304"/>
         <source>Copy/Paste</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Copy</source>
-        <translation type="vanished">Copy</translation>
+        <translation>Copy/Paste</translation>
     </message>
 </context>
 <context>
@@ -2270,70 +2150,93 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::ADVSequenceObjectContext</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="206"/>
+        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="207"/>
         <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>Amino translation</translation>
+        <translation type="vanished">Amino translation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="218"/>
         <source>Translation frames</source>
-        <translation>Translation frames</translation>
+        <translation type="vanished">Translation frames</translation>
     </message>
 </context>
 <context>
     <name>U2::ADVSingleSequenceHeaderWidget</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="967"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="971"/>
         <source>Alphabet: <b>%1</b></source>
         <translation>Alphabet: <b>%1</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="968"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="972"/>
         <source> Sequence size: <b>%1</b></source>
         <translation> Sequence size: <b>%1</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="969"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="973"/>
         <source> File:&nbsp;<b>%1</b></source>
         <translation>File:&nbsp;<b>%1</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1054"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1058"/>
         <source>raw</source>
         <translation>raw</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1058"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1062"/>
         <source>amino ext</source>
         <translation>amino ext</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1060"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1064"/>
         <source>amino</source>
         <translation>amino</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1065"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1069"/>
         <source>dna</source>
         <translation>dna</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1067"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1071"/>
         <source>dna ext</source>
         <translation>dna ext</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1071"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1075"/>
         <source>rna ext</source>
         <translation>rna ext</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1069"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1073"/>
         <source>rna</source>
         <translation>rna</translation>
     </message>
@@ -2371,83 +2274,83 @@ Double-click to collapse the branch</translation>
         <translation>Create new ruler...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="209"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="203"/>
         <source>Export image</source>
         <translation>Export image</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="225"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="219"/>
         <source>Remove sequence</source>
         <translation>Remove sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="449"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="443"/>
         <source>Zoom</source>
         <translation>Zoom</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="526"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="520"/>
         <source>Select</source>
         <translation>Select</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="541"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="535"/>
         <source>Rulers...</source>
         <translation>Rulers...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="552"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="546"/>
         <source>Remove '%1'</source>
         <translation>Remove '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="703"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="707"/>
         <source>Zoom to range</source>
         <translation>Zoom to range</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="315"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="309"/>
         <source>Show all views</source>
         <translation>Show all views</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="315"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="309"/>
         <source>Hide all views</source>
         <translation>Hide all views</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="243"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="921"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="237"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="925"/>
         <source>Show zoom view</source>
         <translation>Show zoom view</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="243"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="921"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="237"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="925"/>
         <source>Hide zoom view</source>
         <translation>Hide zoom view</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="244"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="926"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="930"/>
         <source>Show details view</source>
         <translation>Show details view</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="244"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="926"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="930"/>
         <source>Hide details view</source>
         <translation>Hide details view</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="245"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="931"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="935"/>
         <source>Show overview</source>
         <translation>Show overview</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="245"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="931"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="935"/>
         <source>Hide overview</source>
         <translation>Hide overview</translation>
     </message>
@@ -2640,117 +2543,121 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AnnotatedDNAView</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="120"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="122"/>
         <source>Go to position...</source>
         <translation>Go to position...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="133"/>
         <source>Rename item</source>
-        <translation>Rename item</translation>
+        <translation type="vanished">Rename item</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="142"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="141"/>
         <source>Find pattern...</source>
         <translation>Find pattern...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="147"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="146"/>
         <source>Insert subsequence...</source>
         <translation>Insert subsequence...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="152"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="151"/>
         <source>Remove subsequence...</source>
         <translation>Remove subsequence...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="156"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="155"/>
         <source>Replace subsequence...</source>
         <translation>Replace subsequence...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="161"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="160"/>
         <source>Selected sequence from view</source>
         <translation>Selected sequence from view</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="165"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="164"/>
         <source>Reverse-complement sequence</source>
         <translation>Reverse-complement sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="173"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="172"/>
         <source>Complement sequence</source>
         <translation>Complement sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="358"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="363"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="539"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="544"/>
         <source>Analyze</source>
         <translation>Analyze</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="549"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="554"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="555"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="560"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="561"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="566"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="567"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="572"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="580"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="585"/>
         <source>Edit</source>
         <translation>Edit</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1339"/>
-        <source>No sequence in focus</source>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1095"/>
+        <source>Show codon table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="169"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1346"/>
+        <source>No sequence in focus</source>
+        <translation>No sequence in focus</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="168"/>
         <source>Reverse sequence</source>
         <translation>Reverse sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="763"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="764"/>
         <source>Disable '%1' highlighting</source>
         <translation>Disable '%1' highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="765"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="766"/>
         <source>Enable '%1' highlighting</source>
         <translation>Enable '%1' highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="818"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="816"/>
         <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="836"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="834"/>
         <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="905"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="903"/>
         <source>Go To</source>
         <translation>Go To</translation>
     </message>
@@ -2766,164 +2673,186 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AnnotationsTreeView</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="123"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="124"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="123"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="275"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="124"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="265"/>
         <source>Value</source>
         <translation>Value</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="123"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="124"/>
         <source>Type</source>
         <translation>Type</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="166"/>
-        <source>Paste annotations</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="173"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="176"/>
         <source>Objects with annotations...</source>
         <translation>Objects with annotations...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="176"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="179"/>
         <source>Selected objects with annotations from view</source>
         <translation>Selected objects with annotations from view</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="183"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="186"/>
         <source>Selected annotations and qualifiers</source>
         <translation>Selected annotations and qualifiers</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="189"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1119"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="192"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1133"/>
         <source>Copy qualifier text</source>
         <translation>Copy qualifier text</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="192"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1123"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="195"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
         <source>Copy qualifier URL</source>
         <translation>Copy qualifier URL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="195"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1128"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="198"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1142"/>
         <source>Toggle column</source>
         <translation>Toggle column</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="199"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="202"/>
         <source>Hide column</source>
         <translation>Hide column</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="203"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="206"/>
         <source>Find qualifier...</source>
         <translation>Find qualifier...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="208"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="211"/>
         <source>Invert annotation selection</source>
         <translation>Invert annotation selection</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="212"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="788"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="215"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="798"/>
         <source>Copy column text</source>
         <translation>Copy column text</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="215"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="802"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="218"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="812"/>
         <source>copy column URL</source>
         <translation>copy column URL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="218"/>
+        <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"/>
+        <source>Annotation</source>
+        <translation type="unfinished">Annotation</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1773"/>
+        <source>Edit Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1820"/>
+        <source>Edit Annotation</source>
+        <translation type="unfinished">Edit Annotation</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1820"/>
+        <source>Edit</source>
+        <translation type="unfinished">Edit</translation>
+    </message>
+    <message>
         <source>Rename item</source>
-        <translation>Rename item</translation>
+        <translation type="vanished">Rename item</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="559"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="568"/>
         <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>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1848"/>
         <source>Rename Group</source>
-        <translation>Rename Group</translation>
+        <translation type="vanished">Rename Group</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1889"/>
         <source>Rename Qualifier</source>
-        <translation>Rename Qualifier</translation>
+        <translation type="vanished">Rename Qualifier</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1948"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1970"/>
         <source>Create Permanent Annotation</source>
         <translation>Create Permanent Annotation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="225"/>
         <source>Edit qualifier</source>
-        <translation>Edit qualifier</translation>
+        <translation type="vanished">Edit qualifier</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="232"/>
         <source>View qualifier</source>
-        <translation>View qualifier</translation>
+        <translation type="vanished">View qualifier</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="238"/>
+        <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="245"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="235"/>
         <source>Make auto-annotations persistent</source>
         <translation>Make auto-annotations persistent</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="794"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="393"/>
+        <source>Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="396"/>
+        <source>Qualifier</source>
+        <translation type="unfinished">Qualifier</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="804"/>
         <source>Copy column '%1' text</source>
         <translation>Copy column '%1' text</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="797"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="807"/>
         <source>Copy '%1' annotation location</source>
         <translation>Copy '%1' annotation location</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="806"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="816"/>
         <source>Copy column '%1' URL</source>
         <translation>Copy column '%1' URL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="828"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1129"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="838"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1143"/>
         <source>Hide '%1' column</source>
         <translation>Hide '%1' column</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1119"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1133"/>
         <source>Copy qualifier '%1' value</source>
         <translation>Copy qualifier '%1' value</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1123"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
         <source>Copy qualifier '%1' URL</source>
         <translation>Copy qualifier '%1' URL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1129"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1143"/>
         <source>Add '%1' column</source>
         <translation>Add '%1' column</translation>
     </message>
@@ -2931,183 +2860,150 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AssemblyBrowser</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="206"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="208"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="150"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="152"/>
         <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="140"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="142"/>
         <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="217"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="219"/>
         <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="221"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="223"/>
         <source>Internal error: broken sequence object</source>
         <translation>Internal error: broken sequence object</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="222"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="224"/>
         <source>Internal error: empty document format</source>
         <translation>Internal error: empty document format</translation>
     </message>
     <message>
-        <source>- Reference sequence is %1 than assembly</source>
-        <translation type="vanished">- Reference sequence is %1 than assembly</translation>
-    </message>
-    <message>
-        <source>lesser</source>
-        <translation type="vanished">lesser</translation>
-    </message>
-    <message>
-        <source>bigger</source>
-        <translation type="vanished">bigger</translation>
-    </message>
-    <message>
-        <source>- Reference and assembly names not match</source>
-        <translation type="vanished">- Reference and assembly names not match</translation>
-    </message>
-    <message>
-        <source>
-  Continue?</source>
-        <translation type="vanished">
-  Continue?</translation>
-    </message>
-    <message>
-        <source>Errors</source>
-        <translation type="vanished">Errors</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="229"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="231"/>
         <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="232"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="234"/>
         <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="250"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="252"/>
         <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="288"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="290"/>
         <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="294"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="296"/>
         <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="303"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="305"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="304"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="306"/>
         <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="643"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="647"/>
         <source>Zoom in</source>
         <translation>Zoom in</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="646"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="650"/>
         <source>Zoom out</source>
         <translation>Zoom out</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="649"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="653"/>
         <source>Linear</source>
         <translation>Linear</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="651"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="655"/>
         <source>Logarithmic</source>
         <translation>Logarithmic</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="657"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="661"/>
         <source>Show coordinates on ruler</source>
         <translation>Show coordinates on ruler</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="661"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="665"/>
         <source>Show coverage under ruler cursor</source>
         <translation>Show coverage under ruler cursor</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="665"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="669"/>
         <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="670"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="674"/>
         <source>Export as image</source>
         <translation>Export as image</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="673"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="677"/>
         <source>Export assembly to SAM format</source>
         <translation>Export assembly to SAM format</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="676"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="680"/>
         <source>Set reference</source>
         <translation>Set reference</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="993"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="684"/>
+        <source>Export assembly region</source>
+        <translation>Export assembly region</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1001"/>
         <source>Open file with a sequence</source>
         <translation>Open file with a sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1004"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1012"/>
         <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="1006"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1014"/>
         <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 type="unfinished"></translation>
+        <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="1067"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1075"/>
         <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 type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There are several sequences in file "%1". Select the required sequence object in the Project View and click the "Set reference" button.</source>
-        <translation type="vanished">There are several sequences in file "%1". Select the required sequence object in the Project View and click the "Set reference" button.</translation>
+        <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="1066"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1074"/>
         <source>Choose Reference Sequence</source>
         <translation>Choose Reference Sequence</translation>
     </message>
-    <message>
-        <source>You have more than one sequence object selected in the Project View. To set a sequence from the current project as reference, please select only one sequence object in the Project View and click the "Set reference" item again.
-
-Alternatively, to set a sequence from a file as reference, deselect the objects in the Project View, click the "Set reference" item and browse for the file.</source>
-        <translation type="vanished">You have more than one sequence object selected in the Project View. To set a sequence from the current project as reference, please select only one sequence object in the Project View and click the "Set reference" item again.
-
-Alternatively, to set a sequence from a file as reference, deselect the objects in the Project View, click the "Set reference" item and browse for the file.</translation>
-    </message>
 </context>
 <context>
     <name>U2::AssemblyBrowserFactory</name>
@@ -3125,7 +3021,7 @@ Alternatively, to set a sequence from a file as reference, deselect the objects
 <context>
     <name>U2::AssemblyBrowserUi</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1169"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1194"/>
         <source>Assembly has no mapped reads. Nothing to visualize.</source>
         <translation>Assembly has no mapped reads. Nothing to visualize.</translation>
     </message>
@@ -3377,62 +3273,62 @@ You don't have enough rights to change file</translation>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="124"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="115"/>
         <source>Coverage</source>
         <translation>Coverage</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="130"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="135"/>
         <source>Reads highlighting</source>
         <translation>Reads highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="155"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="160"/>
         <source>Optimize rendering when scrolling</source>
         <translation>Optimize rendering when scrolling</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="164"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="169"/>
         <source>Reads shadowing</source>
         <translation>Reads shadowing</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="166"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="171"/>
         <source>Disabled</source>
         <translation>Disabled</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="168"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="173"/>
         <source>Free</source>
         <translation>Free</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="170"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="175"/>
         <source>Centered</source>
         <translation>Centered</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="178"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="183"/>
         <source>Jump to locked base</source>
         <translation>Jump to locked base</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="332"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="337"/>
         <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="336"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="341"/>
         <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="338"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="343"/>
         <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="925"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="930"/>
         <source>Locked to base</source>
         <translation>Locked to base</translation>
     </message>
@@ -3734,9 +3630,22 @@ You don't have enough rights to change file</translation>
     </message>
 </context>
 <context>
+    <name>U2::ColorSchemaDialogController</name>
+    <message>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="52"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="53"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+</context>
+<context>
     <name>U2::ColorSchemaSettingsPageController</name>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaSettingsController.cpp" line="97"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsController.cpp" line="99"/>
         <source>Alignment Color Scheme</source>
         <translation>Alignment Color Scheme</translation>
     </message>
@@ -3744,7 +3653,7 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::ColorSchemaSettingsPageWidget</name>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="362"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="370"/>
         <source>Choose Directory</source>
         <translation>Choose Directory</translation>
     </message>
@@ -3752,38 +3661,38 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::ConvertAssemblyToSamDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="51"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="49"/>
         <source>Convert</source>
         <translation>Convert</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="52"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="50"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="79"/>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="82"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="71"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="74"/>
         <source>Data base to SAM converter</source>
         <translation>Database to SAM converter</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="80"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="72"/>
         <source>Data base file url is not set!</source>
         <translation>Database file url is not set!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="83"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="75"/>
         <source>SAM file url is not set!</source>
         <translation>SAM file url is not set!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="108"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="114"/>
         <source>Open an Assembly Database File</source>
         <translation>Open an Assembly Database File</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="119"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="102"/>
         <source>Set a result SAM file name</source>
         <translation>Set a result SAM file name</translation>
     </message>
@@ -3809,47 +3718,53 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CreateColorSchemaDialog</name>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="176"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="182"/>
         <source>Create</source>
         <translation>Create</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="177"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="183"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="197"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="179"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="185"/>
         <source>Amino acid</source>
         <translation>Amino acid</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="180"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="186"/>
         <source>Nucleotide</source>
         <translation>Nucleotide</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="215"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="196"/>
+        <source>Ok</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="223"/>
         <source>Name of scheme is empty.</source>
         <translation>Name of scheme is empty.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="225"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="233"/>
         <source>Name can't contain only spaces.</source>
         <translation>Name can't contain only spaces.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="230"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="238"/>
         <source>Name has to consist of letters, digits, spaces</source>
         <translation>Name has to consist of letters, digits, spaces</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="231"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="239"/>
         <source>or underscore symbols only.</source>
         <translation>or underscore symbols only.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="236"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="244"/>
         <source>Color scheme with the same name already exists.</source>
         <translation>Color scheme with the same name already exists.</translation>
     </message>
@@ -3857,7 +3772,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="159"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="161"/>
         <source>Generate distance matrix</source>
         <translation>Generate distance matrix</translation>
     </message>
@@ -3865,39 +3780,39 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CreatePhyTreeDialogController</name>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="69"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="70"/>
         <source>Build</source>
         <translation>Build</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="70"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="71"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="108"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="199"/>
         <source>Choose file name</source>
         <translation>Choose file name</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="160"/>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="181"/>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="195"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="147"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="168"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="182"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="160"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="147"/>
         <source>Please, input the file name.</source>
         <translation>Please, input the file name.</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="169"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="156"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="169"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="156"/>
         <source>Please, change the output file.</source>
         <translation>Please, change the output file.</translation>
     </message>
@@ -3947,7 +3862,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="230"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="235"/>
         <source>Create sub-alignment and open view: %1</source>
         <translation>Create sub-alignment and open view: %1</translation>
     </message>
@@ -3955,52 +3870,52 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CreateSubalignmentDialogController</name>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="60"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="52"/>
         <source>Extract</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="61"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="53"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="168"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="172"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="176"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="177"/>
         <source>No path specified</source>
         <translation>No path specified</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="180"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="181"/>
         <source>Filename to save is empty</source>
         <translation>Filename to save is empty</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="184"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="185"/>
         <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="194"/>
+        <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="200"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="207"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="208"/>
         <source>You must select at least one sequence</source>
         <translation>You must select at least one sequence</translation>
     </message>
@@ -4046,33 +3961,14 @@ You don't have enough rights to change file</translation>
     </message>
 </context>
 <context>
-    <name>U2::DasOptionsPanelWidget</name>
-    <message>
-        <source>Show more options</source>
-        <translation type="vanished">Show more options</translation>
-    </message>
-    <message>
-        <source>Show less options</source>
-        <translation type="vanished">Show less options</translation>
-    </message>
-    <message>
-        <source>Warning: Selected region is too short. It should be from 4 to 1900 amino acids.</source>
-        <translation type="vanished">Warning: Selected region is too short. It should be from 4 to 1900 amino acids.</translation>
-    </message>
-    <message>
-        <source>Warning: Selected region is too long. It should be from 4 to 1900 amino acids.</source>
-        <translation type="vanished">Warning: Selected region is too long. It should be from 4 to 1900 amino acids.</translation>
-    </message>
-</context>
-<context>
     <name>U2::DeleteGapsDialog</name>
     <message>
-        <location filename="../src/ov_msa/DeleteGapsDialog.cpp" line="36"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.cpp" line="34"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/DeleteGapsDialog.cpp" line="37"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.cpp" line="35"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -4086,13 +3982,17 @@ You don't have enough rights to change file</translation>
     </message>
     <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>Show amino translations</translation>
+        <translation type="vanished">Show amino translations</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/DetView.cpp" line="72"/>
+        <location filename="../src/ov_sequence/DetView.cpp" line="71"/>
         <source>Wrap sequence</source>
-        <translation type="unfinished"></translation>
+        <translation>Wrap sequence</translation>
     </message>
 </context>
 <context>
@@ -4126,61 +4026,59 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::DnaAssemblyDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="75"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="77"/>
         <source>Start</source>
         <translation>Start</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="76"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="78"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="142"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="145"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="137"/>
         <source>Add short reads</source>
         <translation>Add short reads</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="165"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="169"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="154"/>
         <source>Open reference sequence</source>
         <translation>Open reference sequence</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="192"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="176"/>
         <source>Align short reads</source>
         <translation>Align short reads</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="198"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="203"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="210"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="213"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="216"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="235"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="246"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="253"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="182"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="187"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="194"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="197"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="200"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="219"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="230"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="237"/>
         <source>DNA Assembly</source>
         <translation>DNA Assembly</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="211"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="195"/>
         <source>Reference sequence url is not set!</source>
         <translation>Reference sequence url is not set!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="214"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="198"/>
         <source>Result alignment file name is not set!</source>
         <translation>Result alignment file name is not set!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="217"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="201"/>
         <source>Short reads list is empty!</source>
         <translation>Short reads list is empty!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="236"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="220"/>
         <source>You set the index as a reference and the index files are corrupted.
 
 Try to build it again or choose a reference sequence.</source>
@@ -4189,7 +4087,7 @@ Try to build it again or choose a reference sequence.</source>
 Try to build it again or choose a reference sequence.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="247"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="231"/>
         <source>These files have the unknown format:
 
 </source>
@@ -4198,7 +4096,7 @@ Try to build it again or choose a reference sequence.</translation>
 </translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="254"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="238"/>
         <source>These files have the incompatible format:
 
 </source>
@@ -4207,7 +4105,7 @@ Try to build it again or choose a reference sequence.</translation>
 </translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="255"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="239"/>
         <source>
 
 Do you want to convert the files and run the aligner?</source>
@@ -4216,7 +4114,7 @@ Do you want to convert the files and run the aligner?</source>
 Do you want to convert the files and run the aligner?</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="296"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="255"/>
         <source>Set result alignment file name</source>
         <translation>Set result alignment file name</translation>
     </message>
@@ -4273,36 +4171,28 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::EditAnnotationDialogController</name>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="66"/>
         <source>Location is empty!</source>
-        <translation>Location is empty!</translation>
+        <translation type="vanished">Location is empty!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="68"/>
         <source>Invalid location!</source>
-        <translation>Invalid location!</translation>
+        <translation type="vanished">Invalid location!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="80"/>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="89"/>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="92"/>
         <source>Error!</source>
-        <translation>Error!</translation>
+        <translation type="vanished">Error!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="80"/>
         <source>Annotation location empty or invalid!</source>
-        <translation>Annotation location empty or invalid!</translation>
+        <translation type="vanished">Annotation location empty or invalid!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="89"/>
         <source>Wrong annotation name!</source>
-        <translation>Wrong annotation name!</translation>
+        <translation type="vanished">Wrong annotation name!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="92"/>
         <source>New annotation locations is out of sequence bounds!</source>
-        <translation>New annotation locations is out of sequence bounds!</translation>
+        <translation type="vanished">New annotation locations is out of sequence bounds!</translation>
     </message>
 </context>
 <context>
@@ -4316,38 +4206,38 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExportConsensusDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="48"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="46"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="49"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="47"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="62"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="121"/>
         <source>Export consensus</source>
         <translation>Export consensus</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="67"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="55"/>
         <source>Visible</source>
         <translation>Visible</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="117"/>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="122"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="102"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="107"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="117"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="102"/>
         <source>Select destination file</source>
         <translation>Select destination file</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="122"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="107"/>
         <source>Sequence name cannot be empty</source>
         <translation>Sequence name cannot be empty</translation>
     </message>
@@ -4373,60 +4263,60 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExportConsensusVariationsDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="49"/>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="65"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="43"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="138"/>
         <source>Export Consensus Variations</source>
         <translation>Export Consensus Variations</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="51"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="45"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="52"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="70"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="54"/>
         <source>Visible</source>
         <translation>Visible</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="87"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="70"/>
         <source>Variations</source>
         <translation>Variations</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="88"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="71"/>
         <source>Similar</source>
         <translation>Similar</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="89"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="72"/>
         <source>All</source>
         <translation>All</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="117"/>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="130"/>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="135"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="100"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="113"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="118"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="117"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="100"/>
         <source>Select consensus variation mode</source>
         <translation>Select consensus variation mode</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="130"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="113"/>
         <source>Select destination file</source>
         <translation>Select destination file</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="135"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="118"/>
         <source>Sequence name cannot be empty</source>
         <translation>Sequence name cannot be empty</translation>
     </message>
@@ -4452,39 +4342,42 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExportCoverageDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="84"/>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="89"/>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="93"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="74"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="79"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="83"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="84"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="74"/>
         <source>The output file path is not specified.</source>
         <translation>The output file path is not specified.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="89"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="79"/>
         <source>Not enough permissions to write here. Please set another output file.</source>
         <translation>Not enough permissions to write here. Please set another output file.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="93"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="83"/>
         <source>Nothing to export</source>
         <translation>Nothing to export</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="114"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="112"/>
+        <source>Export coverage</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Compressed </source>
-        <translation>Compressed </translation>
+        <translation type="vanished">Compressed </translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="124"/>
         <source>Export to...</source>
-        <translation>Export to...</translation>
+        <translation type="vanished">Export to...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="173"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="99"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
@@ -4551,47 +4444,70 @@ Please, check external tools in the settings.</translation>
     </message>
 </context>
 <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>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="47"/>
         <source>Export</source>
-        <translation>Export</translation>
+        <translation type="vanished">Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="48"/>
         <source>Cancel</source>
-        <translation>Cancel</translation>
+        <translation type="vanished">Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="91"/>
         <source>Warning</source>
-        <translation>Warning</translation>
+        <translation type="vanished">Warning</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="91"/>
         <source>Export to file URL is empty!</source>
-        <translation>Export to file URL is empty!</translation>
+        <translation type="vanished">Export to file URL is empty!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="105"/>
         <source>Select file to save...</source>
-        <translation>Select file to save...</translation>
+        <translation type="vanished">Select file to save...</translation>
     </message>
 </context>
 <context>
     <name>U2::ExportHighligtningTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3069"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3027"/>
         <source>Export highlighting</source>
         <translation>Export highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3097"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3055"/>
         <source>Export highligtning finished successfully</source>
         <translation>Export highligtning finished successfully</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3097"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3055"/>
         <source>Result file:</source>
         <translation>Result file:</translation>
     </message>
@@ -4607,38 +4523,102 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExportReadsDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="51"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="45"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="52"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="64"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="67"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="64"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="67"/>
         <source>Select destination file</source>
         <translation>Select destination file</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="74"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="54"/>
         <source>Select file to save</source>
         <translation>Select file to save</translation>
     </message>
 </context>
 <context>
+    <name>U2::ExtractAssemblyRegionAndOpenViewTask</name>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionTask.cpp" line="45"/>
+        <source>Extract Assembly Region And Open View Task</source>
+        <translation>Extract Assembly Region And Open View Task</translation>
+    </message>
+</context>
+<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>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="47"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="51"/>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="53"/>
+        <source>Visible</source>
+        <translation>Visible</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="87"/>
+        <source>Export Assembly Region</source>
+        <translation type="unfinished">Export Assembly Region</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="110"/>
+        <source>Error!</source>
+        <translation>Error!</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="110"/>
+        <source>Select destination file</source>
+        <translation>Select destination file</translation>
+    </message>
+</context>
+<context>
+    <name>U2::ExtractAssemblyRegionTask</name>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionTask.cpp" line="75"/>
+        <source>Extract Assembly Region Task</source>
+        <translation>Extract Assembly Region Task</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionTask.cpp" line="93"/>
+        <source>Unsupported assembly format</source>
+        <translation>Unsupported assembly format</translation>
+    </message>
+</context>
+<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>
     </message>
+    <message>
+        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="293"/>
+        <source>No sequences in alignment</source>
+        <translation>No sequences in alignment</translation>
+    </message>
 </context>
 <context>
     <name>U2::FindPatternListTask</name>
@@ -4851,7 +4831,7 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::FindQualifierTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2309"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2331"/>
         <source>Searching for a qualifier</source>
         <translation>Searching for a qualifier</translation>
     </message>
@@ -4859,22 +4839,22 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::FormatsMsaClipboardTask</name>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="126"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="120"/>
         <source>No temporary document.</source>
         <translation>No temporary document.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="130"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="124"/>
         <source>Cannot read the temporary file.</source>
         <translation>Cannot read the temporary file.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="153"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="147"/>
         <source>Invalid applications settings detected</source>
         <translation>Invalid applications settings detected</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="156"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="150"/>
         <source>Invalid users applications settings detected</source>
         <translation>Invalid users applications settings detected</translation>
     </message>
@@ -5088,10 +5068,6 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::MSAClustalOverviewCalculationTask</name>
     <message>
-        <source>MAlignmentObject is NULL</source>
-        <translation type="vanished">MAlignmentObject is NULL</translation>
-    </message>
-    <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="169"/>
         <source>MSAConsensusAlgorithmRegistry is NULL!</source>
         <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
@@ -5104,16 +5080,12 @@ Please, check external tools in the settings.</translation>
     <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="174"/>
         <source>MSA is NULL</source>
-        <translation type="unfinished">MSA is NULL</translation>
+        <translation>MSA is NULL</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAConsensusOverviewCalculationTask</name>
     <message>
-        <source>MAlignmentObject is NULL</source>
-        <translation type="vanished">MAlignmentObject is NULL</translation>
-    </message>
-    <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="132"/>
         <source>MSAConsensusAlgorithmRegistry is NULL!</source>
         <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
@@ -5126,144 +5098,138 @@ Please, check external tools in the settings.</translation>
     <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="137"/>
         <source>MSA is NULL</source>
-        <translation type="unfinished">MSA is NULL</translation>
-    </message>
-    <message>
-        <source>No sequences in MSA</source>
-        <translation type="vanished">No sequences in MSA</translation>
+        <translation>MSA is NULL</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAEditor</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="133"/>
+        <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="137"/>
+        <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="141"/>
+        <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="145"/>
+        <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="149"/>
+        <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="153"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="156"/>
         <source>Build Tree</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="430"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="433"/>
         <source>Copy/Paste</source>
-        <translation type="unfinished"></translation>
+        <translation>Copy/Paste</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="505"/>
+        <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="367"/>
+        <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="125"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="221"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="128"/>
+        <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="129"/>
+        <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="181"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="184"/>
         <source>Export highlighted</source>
         <translation>Export highlighted</translation>
     </message>
     <message>
-        <source>Copy</source>
-        <translation type="vanished">Copy</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="435"/>
+        <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="440"/>
+        <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="453"/>
+        <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="461"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="509"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="464"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="512"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="467"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="470"/>
         <source>Tree</source>
         <translation>Tree</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="474"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="477"/>
         <source>Advanced</source>
         <translation>Advanced</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="479"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="482"/>
         <source>Statistics</source>
         <translation>Statistics</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="485"/>
+        <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="513"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="516"/>
         <source>Align sequence to this alignment</source>
         <translation>Align sequence to this alignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="517"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="520"/>
         <source>Set this sequence as reference</source>
         <translation>Set this sequence as reference</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="521"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="524"/>
         <source>Unset reference sequence</source>
         <translation>Unset reference sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="711"/>
+        <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"/>
         <source>A problem occurred during adding sequences. The multiple alignment is no more available.</source>
-        <translation type="unfinished"></translation>
+        <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="797"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="800"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="801"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="804"/>
         <source>Open file with sequences</source>
         <translation>Open file with sequences</translation>
     </message>
@@ -5336,39 +5302,38 @@ Please, check external tools in the settings.</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="74"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="81"/>
-        <source>Remove sequence</source>
-        <translation type="unfinished">Remove sequence</translation>
+        <source>Remove sequence(s)</source>
+        <translation>Remove sequence(s)</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="122"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="151"/>
+        <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="124"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="153"/>
+        <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="139"/>
+        <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="144"/>
+        <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="868"/>
+        <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="869"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="860"/>
         <source>New sequence name:</source>
         <translation>New sequence name:</translation>
     </message>
@@ -5384,317 +5349,300 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::MSAEditorSequenceArea</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="120"/>
-        <source>Remove selection</source>
-        <translation>Remove selection</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="133"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="132"/>
         <source>Remove columns of gaps...</source>
         <translation>Remove columns of gaps...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="140"/>
+        <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="146"/>
+        <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="150"/>
+        <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="154"/>
+        <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="161"/>
+        <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="165"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="164"/>
         <source>Sequence from file...</source>
         <translation>Sequence from file...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="169"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="168"/>
         <source>Sequence from current project...</source>
         <translation>Sequence from current project...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="173"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="172"/>
         <source>Sort sequences by name</source>
         <translation>Sort sequences by name</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="177"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="176"/>
         <source>Switch on/off collapsing</source>
         <translation>Switch on/off collapsing</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="182"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="181"/>
         <source>Update collapsed groups</source>
         <translation>Update collapsed groups</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="187"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="186"/>
         <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="191"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="190"/>
         <source>Replace selected character</source>
-        <translation type="unfinished"></translation>
+        <translation>Replace selected character</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="198"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="197"/>
         <source>Replace selected rows with reverse</source>
         <translation>Replace selected rows with reverse</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="202"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="201"/>
         <source>Replace selected rows with complement</source>
         <translation>Replace selected rows with complement</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="234"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="352"/>
+        <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="298"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="577"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="633"/>
+        <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="444"/>
+        <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="446"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="449"/>
         <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="615"/>
+        <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="616"/>
+        <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="739"/>
+        <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="878"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="973"/>
+        <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="904"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="982"/>
+        <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="941"/>
+        <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="942"/>
+        <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="963"/>
+        <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="964"/>
+        <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="996"/>
+        <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="1021"/>
+        <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="1068"/>
+        <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="1099"/>
+        <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="1100"/>
+        <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="1133"/>
+        <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="1134"/>
+        <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="1157"/>
+        <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="1792"/>
+        <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="2006"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1932"/>
         <source>Colors</source>
         <translation>Colors</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2013"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1939"/>
         <source>Custom schemes</source>
         <translation>Custom schemes</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2024"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1950"/>
         <source>Create new color scheme</source>
         <translation>Create new color scheme</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2032"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1958"/>
         <source>Highlighting</source>
         <translation>Highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2055"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1981"/>
         <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 type="unfinished"></translation>
+        <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="2074"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2173"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2234"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2717"/>
+        <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"/>
         <source>NULL collapsible model!</source>
         <translation>NULL collapsible model!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2128"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2054"/>
         <source>Go To</source>
         <translation>Go To</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2169"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2095"/>
         <source>NULL msa object!</source>
         <translation>NULL msa object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2282"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2208"/>
         <source>Warning!</source>
         <translation>Warning!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2282"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2208"/>
         <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="2324"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2250"/>
         <source>warning</source>
         <translation>warning</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2324"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2250"/>
         <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="2579"/>
+        <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 type="unfinished"></translation>
+        <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="2635"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2638"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2590"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2593"/>
         <source>Open file with sequences</source>
         <translation>Open file with sequences</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2644"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2599"/>
         <source>A problem occurred during adding sequences. The multiple alignment is no more available.</source>
-        <translation type="unfinished"></translation>
+        <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="2734"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2689"/>
         <source>NULL Msa Object!</source>
         <translation>NULL Msa Object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2739"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2694"/>
         <source>NULL document!</source>
         <translation>NULL document!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2762"/>
+        <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="2764"/>
+        <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="2923"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2878"/>
         <source>Incorrect pointer to MSACollapsibleItemModel</source>
         <translation>Incorrect pointer to MSACollapsibleItemModel</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAEditorSimilarityColumn</name>
-    <message>
-        <source>-</source>
-        <translation type="vanished">-</translation>
-    </message>
-    <message>
-        <source>score</source>
-        <translation type="vanished">score</translation>
-    </message>
-</context>
-<context>
     <name>U2::MSAEditorStatusWidget</name>
     <message>
         <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="46"/>
@@ -5760,29 +5708,29 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::MSAEditorTreeManager</name>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="112"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="113"/>
         <source>Calculate phy tree</source>
         <translation>Calculate phy tree</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="113"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="114"/>
         <source>No algorithms for building phylogenetic tree are available.</source>
         <translation>No algorithms for building phylogenetic tree are available.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="282"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="283"/>
         <source>Can not convert TreeViewer* to MSAEditorTreeViewer* in function MSAEditorTreeManager::sl_openTreeTaskFinished(Task* t)</source>
         <translation>Can not convert TreeViewer* to MSAEditorTreeViewer* in function MSAEditorTreeManager::sl_openTreeTaskFinished(Task* t)</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="317"/>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="320"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="318"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="321"/>
         <source>Select files to open...</source>
         <translation>Select files to open...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="379"/>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="381"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="380"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="382"/>
         <source>Incorrect reference to the MSAEditor</source>
         <translation>Incorrect reference to the MSAEditor</translation>
     </message>
@@ -5807,102 +5755,77 @@ Please, check external tools in the settings.</translation>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="225"/>
         <source>Alignment Modification Confirmation</source>
-        <translation type="unfinished"></translation>
+        <translation>Alignment Modification Confirmation</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="226"/>
         <source>The alignment has been modified.
 
 All phylogenetic tree(s), opened in the same view, will be no more synchronized with the alignment.</source>
-        <translation type="unfinished"></translation>
+        <translation>The alignment has been modified.
+
+All phylogenetic tree(s), opened in the same view, will be no more synchronized with the alignment.</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="229"/>
         <source>Do you want to confirm the modification?</source>
-        <translation type="unfinished"></translation>
+        <translation>Do you want to confirm the modification?</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="232"/>
         <source>Confirm</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>The alignment has been modified</source>
-        <translation type="vanished">The alignment has been modified</translation>
-    </message>
-    <message>
-        <source>The list of sequences in the alignment has been modified.
-If you confirm the modification, all phylogenetic tree(s), opened in the same view, will be no more synchronized with the alignment.</source>
-        <translation type="vanished">The list of sequences in the alignment has been modified.
-If you confirm the modification, all phylogenetic tree(s), opened in the same view, will be no more synchronized with the alignment.</translation>
+        <translation>Confirm</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="231"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
-    <message>
-        <source>Confirm the modification</source>
-        <translation type="vanished">Confirm the modification</translation>
-    </message>
 </context>
 <context>
     <name>U2::MSAEditorUI</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="914"/>
+        <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="923"/>
+        <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="932"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="942"/>
         <source>Paste</source>
-        <translation type="unfinished"></translation>
+        <translation>Paste</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="991"/>
+        <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="1066"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="1080"/>
         <source>Tree view</source>
         <translation>Tree view</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAEditorUpdatedTabWidget</name>
-    <message>
-        <source>Add existing tree</source>
-        <translation type="vanished">Add existing tree</translation>
-    </message>
-</context>
-<context>
     <name>U2::MSAExportConsensusTab</name>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp" line="78"/>
+        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp" line="132"/>
         <source>Save file</source>
         <translation>Save file</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp" line="94"/>
+        <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 type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAGapOverviewCalculationTask</name>
-    <message>
-        <source>MSA is NULL</source>
-        <translation type="vanished">MSA is NULL</translation>
-    </message>
-    <message>
-        <source>No sequences in MSA</source>
-        <translation type="vanished">No sequences in MSA</translation>
+        <translation>A problem occurred during export consensus. The multiple alignment is no more available.</translation>
     </message>
 </context>
 <context>
@@ -5928,7 +5851,7 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
     <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="48"/>
         <source>MSA is NULL</source>
-        <translation type="unfinished">MSA is NULL</translation>
+        <translation>MSA is NULL</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="69"/>
@@ -5944,17 +5867,17 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAGraphOverview</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="102"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="103"/>
         <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="107"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="108"/>
         <source>Waiting...</source>
         <translation>Waiting...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="116"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="117"/>
         <source>Overview is rendering...</source>
         <translation>Overview is rendering...</translation>
     </message>
@@ -5990,44 +5913,44 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAHighlightingTab</name>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="80"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="91"/>
         <source>Use dots</source>
         <translation>Use dots</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="84"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="95"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="92"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="103"/>
         <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="95"/>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="96"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="106"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="107"/>
         <source> threshold</source>
         <translation> threshold</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="109"/>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="255"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="120"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="286"/>
         <source>Threshold: %1%</source>
         <translation>Threshold: %1%</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="137"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="148"/>
         <source>Color</source>
         <translation>Color</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="140"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="151"/>
         <source>Highlighting</source>
         <translation>Highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="233"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="264"/>
         <source>Hint: select a reference above</source>
         <translation>Hint: select a reference above</translation>
     </message>
@@ -6048,7 +5971,7 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
         <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="245"/>
         <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="329"/>
         <source>MSA Collapsible Model is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>MSA Collapsible Model is NULL</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="278"/>
@@ -6248,14 +6171,14 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSASimpleOverview</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="101"/>
+        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="102"/>
         <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="149"/>
+        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="150"/>
         <source>Incorrect multiple alignment object!</source>
         <translation>Incorrect multiple alignment object!</translation>
     </message>
@@ -6286,16 +6209,16 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::MsaEditorSimilarityColumn</name>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="60"/>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="66"/>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="74"/>
+        <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"/>
         <source>-</source>
-        <translation type="unfinished">-</translation>
+        <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="117"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="119"/>
         <source>score</source>
-        <translation type="unfinished">score</translation>
+        <translation>score</translation>
     </message>
 </context>
 <context>
@@ -6303,22 +6226,22 @@ Simple overview is unavailable.</translation>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="43"/>
         <source>Add existing tree</source>
-        <translation type="unfinished">Add existing tree</translation>
+        <translation>Add existing tree</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="54"/>
         <source>Close other tabs</source>
-        <translation type="unfinished">Close other tabs</translation>
+        <translation>Close other tabs</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="58"/>
         <source>Close all tabs</source>
-        <translation type="unfinished">Close all tabs</translation>
+        <translation>Close all tabs</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="62"/>
         <source>Close tab</source>
-        <translation type="unfinished">Close tab</translation>
+        <translation>Close tab</translation>
     </message>
 </context>
 <context>
@@ -6494,56 +6417,51 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::PairAlign</name>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="106"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="108"/>
         <source>Sequences</source>
         <translation>Sequences</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="107"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="109"/>
         <source>Algorithm settings</source>
         <translation>Algorithm settings</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="108"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="110"/>
         <source>Output settings</source>
         <translation>Output settings</translation>
     </message>
     <message>
-        <source>Warning: Current alphabet does not correspond the requirements.</source>
-        <translation type="vanished">Warning: Current alphabet does not correspond the requirements.</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="155"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="156"/>
         <source>Pairwise alignment is not available for alignments with "%1" alphabet.</source>
-        <translation type="unfinished"></translation>
+        <translation>Pairwise alignment is not available for alignments with "%1" alphabet.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="199"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="218"/>
         <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="235"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="254"/>
         <source>Not defined</source>
         <translation>Not defined</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="313"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="166"/>
         <source>Save file</source>
         <translation>Save file</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="313"/>
         <source>Clustal format (*.aln)</source>
-        <translation>Clustal format (*.aln)</translation>
+        <translation type="vanished">Clustal format (*.aln)</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="352"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="363"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="352"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="363"/>
         <source>Please, change the output file.</source>
         <translation>Please, change the output file.</translation>
     </message>
@@ -6592,24 +6510,17 @@ Simple overview is unavailable.</translation>
     </message>
 </context>
 <context>
-    <name>U2::PanViewRenderArea</name>
-    <message>
-        <source>[%1 %2]</source>
-        <translation type="vanished">[%1 %2]</translation>
-    </message>
-</context>
-<context>
     <name>U2::PanViewRenderer</name>
     <message>
         <location filename="../src/ov_sequence/view_rendering/PanViewRenderer.cpp" line="266"/>
         <source>[%1 %2]</source>
-        <translation type="unfinished">[%1 %2]</translation>
+        <translation>[%1 %2]</translation>
     </message>
 </context>
 <context>
     <name>U2::PrepareMsaClipboardDataTask</name>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="64"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="58"/>
         <source>Copy formatted alignment to the clipboard</source>
         <translation>Copy formatted alignment to the clipboard</translation>
     </message>
@@ -6644,42 +6555,42 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::SaveSelectedSequenceFromMSADialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="14"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="14"/>
         <source>Export Selected Sequence from Alignment</source>
         <translation>Export Selected Sequence from Alignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="25"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="25"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="35"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="42"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="42"/>
         <source>File format to use</source>
         <translation>File format to use</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="54"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="54"/>
         <source>Add document to the project</source>
         <translation>Add document to the project</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="64"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="64"/>
         <source>Gap characters ('-')</source>
         <translation>Gap characters ('-')</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="70"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="70"/>
         <source>Keep</source>
         <translation>Keep</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="80"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="80"/>
         <source>Trim</source>
         <translation>Trim</translation>
     </message>
@@ -6687,17 +6598,17 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::SaveSelectedSequenceFromMSADialogController</name>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="42"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="45"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="43"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="63"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="59"/>
         <source>File name is empty!</source>
         <translation>File name is empty!</translation>
     </message>
@@ -6852,32 +6763,32 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::SequenceInfo</name>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="86"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="94"/>
         <source>Common Statistics</source>
         <translation>Common Statistics</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="95"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="102"/>
         <source>Characters Occurrence</source>
         <translation>Characters Occurrence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="103"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="110"/>
         <source>Dinucleotides</source>
         <translation>Dinucleotides</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="406"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="162"/>
         <source>Sequence context is NULL</source>
         <translation>Sequence context is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="407"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="163"/>
         <source>Sequence alphbet is NULL</source>
         <translation>Sequence alphbet is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="433"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="485"/>
         <source>%1</source>
         <translation>%1</translation>
     </message>
@@ -6932,113 +6843,113 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::SmithWatermanDialog</name>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="78"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="76"/>
         <source>Remote run</source>
         <translation>Remote run</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="79"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="77"/>
         <source>Search</source>
         <translation>Search</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="80"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="78"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="94"/>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="95"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="92"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="93"/>
         <source>No substitution matrices found.</source>
         <translation>No substitution matrices found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="102"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="100"/>
         <source>No filter registry found.</source>
         <translation>No filter registry found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="109"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="107"/>
         <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="116"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="114"/>
         <source>No algorithm registry found.</source>
         <translation>No algorithm registry found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="286"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="284"/>
         <source>Enter pattern here</source>
         <translation>Enter pattern here</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="288"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="286"/>
         <source>Pattern length: %1</source>
         <translation>Pattern length: %1</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="327"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="325"/>
         <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="422"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="420"/>
         <source>Choose folder</source>
         <translation>Choose folder</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="434"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="432"/>
         <source>Matrix not found.</source>
         <translation>Matrix not found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="485"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="483"/>
         <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="510"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="508"/>
         <source>SmithWatermanTask</source>
         <translation>SmithWatermanTask</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="553"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="551"/>
         <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="571"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="569"/>
         <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="583"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="581"/>
         <source>Algorithm is not found.</source>
         <translation>Algorithm is not found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="596"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="594"/>
         <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="629"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="627"/>
         <source>Filter is not found.</source>
         <translation>Filter is not found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="646"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="644"/>
         <source>Internal error</source>
         <translation>Internal error</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="654"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="652"/>
         <source>Pattern is empty</source>
         <translation>Pattern is empty</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="666"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="664"/>
         <source>Pattern contains unknown symbol</source>
         <translation>Pattern contains unknown symbol</translation>
     </message>
@@ -7046,7 +6957,7 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::SubalignmentToClipboardTask</name>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="252"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="242"/>
         <source>Copy formatted alignment to the clipboard</source>
         <translation>Copy formatted alignment to the clipboard</translation>
     </message>
@@ -7263,37 +7174,6 @@ Please, load the corresponding plugins.</translation>
     </message>
 </context>
 <context>
-    <name>U2::UpdatedTabWidget</name>
-    <message>
-        <source>Refresh tab</source>
-        <translation type="vanished">Refresh tab</translation>
-    </message>
-    <message>
-        <source>Refresh all tabs</source>
-        <translation type="vanished">Refresh all tabs</translation>
-    </message>
-    <message>
-        <source>Close other tabs</source>
-        <translation type="vanished">Close other tabs</translation>
-    </message>
-    <message>
-        <source>Close all tabs</source>
-        <translation type="vanished">Close all tabs</translation>
-    </message>
-    <message>
-        <source>Close tab</source>
-        <translation type="vanished">Close tab</translation>
-    </message>
-    <message>
-        <source>Add horizontal splitter</source>
-        <translation type="vanished">Add horizontal splitter</translation>
-    </message>
-    <message>
-        <source>Add vertical splitter</source>
-        <translation type="vanished">Add vertical splitter</translation>
-    </message>
-</context>
-<context>
     <name>U2::WindowStepSelectorDialog</name>
     <message>
         <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="161"/>
@@ -7381,22 +7261,22 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>annotHighlightSettings</name>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui" line="14"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightSettings.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui" line="71"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightSettings.ui" line="71"/>
         <source>Show on translation</source>
         <translation>Show on translation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui" line="47"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightSettings.ui" line="47"/>
         <source>Show annotations</source>
         <translation>Show annotations</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui" line="95"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightSettings.ui" line="95"/>
         <source>Show value of qualifier:</source>
         <translation>Show value of qualifier:</translation>
     </message>
diff --git a/src/corelibs/U2View/transl/russian.ts b/src/corelibs/U2View/transl/russian.ts
index 34060d9..13d6e9e 100644
--- a/src/corelibs/U2View/transl/russian.ts
+++ b/src/corelibs/U2View/transl/russian.ts
@@ -14,103 +14,103 @@ Probably the data is too big.</source>
 <context>
     <name>AssemblyToRefDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="88"/>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="112"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="88"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="112"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="210"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="210"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="217"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="217"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="20"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="20"/>
         <source>Align Sequencing Reads</source>
         <translation>Выравнивание ридов</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="31"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="31"/>
         <source>Select a method to align short reads.</source>
         <translation>Выберите метод выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="34"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="34"/>
         <source>Alignment method</source>
         <translation>Метод выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="41"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="41"/>
         <source>Select required align short reads method</source>
         <translation>Выберите требуемый метод выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="71"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="71"/>
         <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/ui/AssemblyToRefDialog.ui" line="74"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="74"/>
         <source>Reference sequence</source>
         <translation>Референсная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="95"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="95"/>
         <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/ui/AssemblyToRefDialog.ui" line="98"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="98"/>
         <source>Result file name</source>
         <translation>Имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="123"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="123"/>
         <source>Library</source>
         <translation>Библиотека</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="131"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="131"/>
         <source>Single-end</source>
         <translation>Single-end</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="136"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="136"/>
         <source>Paired-end</source>
         <translation>Paired-end</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="157"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="157"/>
         <source>SAM output</source>
         <translation>Сохранить в формате SAM</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="166"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="166"/>
         <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/ui/AssemblyToRefDialog.ui" line="169"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="169"/>
         <source>Short reads</source>
         <translation>Короткие риды</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="177"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="177"/>
         <source>Path</source>
         <translation>Путь</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="182"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="182"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToRefDialog.ui" line="187"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="187"/>
         <source>Order</source>
         <translation>Порядок</translation>
     </message>
@@ -118,23 +118,23 @@ Probably the data is too big.</source>
 <context>
     <name>AssemblyToSamDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToSamDialog.ui" line="17"/>
+        <location filename="../src/util_dna_assembly/AssemblyToSamDialog.ui" line="17"/>
         <source>Convert UGENE Assembly Database to SAM Format</source>
         <translation>Конвертировать данные UGENE в формат SAM</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToSamDialog.ui" line="25"/>
+        <location filename="../src/util_dna_assembly/AssemblyToSamDialog.ui" line="25"/>
         <source>Assembly database:</source>
         <translation>База данных:</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToSamDialog.ui" line="35"/>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToSamDialog.ui" line="52"/>
+        <location filename="../src/util_dna_assembly/AssemblyToSamDialog.ui" line="35"/>
+        <location filename="../src/util_dna_assembly/AssemblyToSamDialog.ui" line="52"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/AssemblyToSamDialog.ui" line="42"/>
+        <location filename="../src/util_dna_assembly/AssemblyToSamDialog.ui" line="42"/>
         <source>Result SAM file:</source>
         <translation>Выходной SAM файл:</translation>
     </message>
@@ -142,17 +142,17 @@ Probably the data is too big.</source>
 <context>
     <name>BranchSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/ui/BranchSettingsDialog.ui" line="14"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.ui" line="14"/>
         <source>Branch Settings</source>
         <translation>Настройки ветвей дерева</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/BranchSettingsDialog.ui" line="22"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.ui" line="22"/>
         <source>Color</source>
         <translation>Цвет</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/BranchSettingsDialog.ui" line="61"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.ui" line="61"/>
         <source>Line Weight</source>
         <translation>Толщина линий</translation>
     </message>
@@ -160,46 +160,46 @@ Probably the data is too big.</source>
 <context>
     <name>BuildIndexFromRefDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="20"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="20"/>
         <source>Build Index</source>
         <translation>Построить индекс</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="39"/>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="49"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="39"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="49"/>
         <source>Select a method that would be used to align short reads.</source>
         <translation>Выберите метод выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="42"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="42"/>
         <source>Align short reads method</source>
         <translation>Метод выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="76"/>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="86"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="76"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="86"/>
         <source>Select a DNA sequence that would be used to align short reads to. This parameter is <b>required</b>.</source>
         <translation>Выберите последовательность на которую будут выравнены ваш риды. </translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="79"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="79"/>
         <source>Reference sequence</source>
         <translation>Референсная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="103"/>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="113"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="103"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="113"/>
         <source>Specify the index to build for the reference sequence. This parameter is <b>required</b>.</source>
         <translation>Индекс для референсной последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="106"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="106"/>
         <source>Index file name</source>
         <translation>Имя индекс файла</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="96"/>
-        <location filename="../src/util_dna_assembly/ui/BuildIndexFromRefDialog.ui" line="123"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="96"/>
+        <location filename="../src/util_dna_assembly/BuildIndexFromRefDialog.ui" line="123"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -207,17 +207,17 @@ Probably the data is too big.</source>
 <context>
     <name>ColorSchemaDialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaDialog.ui" line="17"/>
+        <location filename="../src/ov_msa/ColorSchemaDialog.ui" line="17"/>
         <source>Color Scheme </source>
         <translation>Цветовая схема</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaDialog.ui" line="43"/>
+        <location filename="../src/ov_msa/ColorSchemaDialog.ui" line="43"/>
         <source>Clear</source>
         <translation>Очистить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaDialog.ui" line="50"/>
+        <location filename="../src/ov_msa/ColorSchemaDialog.ui" line="50"/>
         <source>Restore last state</source>
         <translation>Вернуть последнее состояние</translation>
     </message>
@@ -225,37 +225,37 @@ Probably the data is too big.</source>
 <context>
     <name>ColorSchemaSettingsWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="17"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="17"/>
         <source>MSA Color Schemes Settings</source>
         <translation>Настройки цветовых схем</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="23"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="23"/>
         <source>Create and modify custom color schemes</source>
         <translation>Создание пользовательских цветовых схем</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="35"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="35"/>
         <source>Directory to save color scheme:</source>
         <translation>Директория для сохранения цветовой схемы:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="47"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="47"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="66"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="66"/>
         <source>Change color scheme</source>
         <translation>Изменить цветовую схему</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="73"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="73"/>
         <source>Create color scheme</source>
         <translation>Создать цветовую схему</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ColorSchemaSettingsWidget.ui" line="80"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="80"/>
         <source>Delete</source>
         <translation>Удалить</translation>
     </message>
@@ -263,22 +263,22 @@ Probably the data is too big.</source>
 <context>
     <name>CreateMSAScheme</name>
     <message>
-        <location filename="../src/ov_msa/ui/CreateMSAScheme.ui" line="23"/>
+        <location filename="../src/ov_msa/CreateMSAScheme.ui" line="23"/>
         <source>Create Alignment Color Scheme</source>
         <translation>Новая цветовая схема</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateMSAScheme.ui" line="50"/>
+        <location filename="../src/ov_msa/CreateMSAScheme.ui" line="50"/>
         <source>New scheme name</source>
         <translation>Имя новой схемы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateMSAScheme.ui" line="79"/>
+        <location filename="../src/ov_msa/CreateMSAScheme.ui" line="79"/>
         <source>Alphabet</source>
         <translation>Алфавит</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateMSAScheme.ui" line="110"/>
+        <location filename="../src/ov_msa/CreateMSAScheme.ui" line="110"/>
         <source>Use extended mode</source>
         <translation>Использовать расширенный режим</translation>
     </message>
@@ -286,32 +286,32 @@ Probably the data is too big.</source>
 <context>
     <name>CreatePhyTree</name>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="20"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="20"/>
         <source>Build Phylogenetic Tree</source>
         <translation>Построение филогенетического дерева</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="45"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="45"/>
         <source>Tree building method</source>
         <translation>Метод построения</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="86"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="86"/>
         <source>Save tree to</source>
         <translation>Сохранить дерево в</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="96"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="96"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="110"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="110"/>
         <source>Remember Settings</source>
         <translation>Сохранить настройки</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/CreatePhyTreeDialog.ui" line="117"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="117"/>
         <source>Restore Default</source>
         <translation>Восстановить настройки</translation>
     </message>
@@ -319,32 +319,32 @@ Probably the data is too big.</source>
 <context>
     <name>CreateRulerDialog</name>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="14"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="14"/>
         <source>Create New Ruler</source>
         <translation>Создать новую шкалу</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="28"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="28"/>
         <source>Ruler name</source>
         <translation>Имя шкалы</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="48"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="48"/>
         <source>Ruler start</source>
         <translation>Начало шкалы</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="68"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="68"/>
         <source>Ruler color</source>
         <translation>Цвет шкалы</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="75"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="75"/>
         <source>Sample Text</source>
         <translation>образец</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/CreateRulerDialog.ui" line="88"/>
+        <location filename="../src/ov_sequence/CreateRulerDialog.ui" line="88"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -352,224 +352,86 @@ Probably the data is too big.</source>
 <context>
     <name>CreateSubalignmentDialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="14"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="14"/>
         <source>Extract Selected as MSA</source>
-        <translation>Извлечь выравнивание</translation>
+        <translation>Сохранить участок выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="22"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="22"/>
         <source>From </source>
         <translation>От </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="48"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="48"/>
         <source> to </source>
         <translation> до </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="73"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="73"/>
         <source>Selected sequences</source>
         <translation>Выбранные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="102"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="102"/>
         <source>Invert selection</source>
         <translation>Инвертировать выбор</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="109"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="109"/>
         <source>Select all</source>
         <translation>Выбрать всё</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="116"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="116"/>
         <source>Clear selection</source>
         <translation>Снять выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="127"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="127"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="137"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="137"/>
         <source>File name</source>
         <translation>Имя файла</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="144"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="144"/>
         <source>File format to use</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/CreateSubalignmentDialog.ui" line="173"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="173"/>
         <source>Add to project</source>
         <translation>Добавить в проект</translation>
     </message>
 </context>
 <context>
-    <name>DasBlastSettingsWidget</name>
-    <message>
-        <source>Form</source>
-        <translation type="vanished">Форма</translation>
-    </message>
-    <message>
-        <source>Threshold:</source>
-        <translation type="vanished">Порог:</translation>
-    </message>
-    <message>
-        <source>Number of expected matches in a random database. The lower the value, the more likely the match is to be significant</source>
-        <translation type="vanished">Количество ожидаемых совпадений в случайной базе данных. Чем ниже значение, тем больше вероятность совпадения будет значимой</translation>
-    </message>
-    <message>
-        <source>Matrix:</source>
-        <translation type="vanished">Матрица:</translation>
-    </message>
-    <message>
-        <source>Assigns a probability score for each position in an alignment</source>
-        <translation type="vanished">Назначает вероятностный счет для каждой позиции в выравнивании</translation>
-    </message>
-    <message>
-        <source>Filtering:</source>
-        <translation type="vanished">Фильтрация:</translation>
-    </message>
-    <message>
-        <source>Filtering low-complexity regions replaces the regions with X's during the search to filter biologically unrelated results</source>
-        <translation type="vanished">Фильтрация простых регионов заменяет регионы с Х символами во время поиска для фильтрации биологически несвязанных результатов</translation>
-    </message>
-    <message>
-        <source>Gapped:</source>
-        <translation type="vanished">Пробел:</translation>
-    </message>
-    <message>
-        <source>Allows gaps to be introduced in the sequences when the comparison is done</source>
-        <translation type="vanished">Позволяет вставлять пробелы в последовательностях в процессе сравнения</translation>
-    </message>
-    <message>
-        <source>Maximum results:</source>
-        <translation type="vanished">Максимальное число результатов:</translation>
-    </message>
-    <message>
-        <source>Limits the number of returned results</source>
-        <translation type="vanished">Предел на число возвращаемых результатов</translation>
-    </message>
-</context>
-<context>
-    <name>DasOptionsPanelWidget</name>
-    <message>
-        <source>Form</source>
-        <translation type="vanished">Форма</translation>
-    </message>
-    <message>
-        <source>Database:</source>
-        <translation type="vanished">База данных:</translation>
-    </message>
-    <message>
-        <source>Database against which the search is performed: UniProtKB or clusters of sequences with 100%, 90% or 50% identity</source>
-        <translation type="vanished">База данных, по которой производится поиск: UniProtKB или кластеры последовательностей со 100%, 90% или 50% степенью совпадения</translation>
-    </message>
-    <message>
-        <source>Minimum Identity:</source>
-        <translation type="vanished">Минимальная степень совпадения:</translation>
-    </message>
-    <message>
-        <source>Minimum percent identity between the input sequence region and BLAST results</source>
-        <translation type="vanished">Минимальная степень совпадения между регионом входной последовательности и результатами BLAST</translation>
-    </message>
-    <message>
-        <source>%</source>
-        <translation type="vanished">%</translation>
-    </message>
-    <message>
-        <source>Show more option...</source>
-        <translation type="vanished">Показать дополнительные настройки...</translation>
-    </message>
-    <message>
-        <source>IDs of similar sequences:</source>
-        <translation type="vanished">Идентификаторы схожих последовательностей:</translation>
-    </message>
-    <message>
-        <source>Select ID(s) to fetch annotations from DAS</source>
-        <translation type="vanished">Выберите идентификатор(ы) для извлечения аннотаций из DAS</translation>
-    </message>
-    <message>
-        <source>ID</source>
-        <translation type="vanished">Идентификатор</translation>
-    </message>
-    <message>
-        <source>Identity</source>
-        <translation type="vanished">Схожесть</translation>
-    </message>
-    <message>
-        <source>Fetch annotations</source>
-        <translation type="vanished">Извлечь аннотации</translation>
-    </message>
-    <message>
-        <source>Send request to Uniprot BLAST to get IDs of similar sequences</source>
-        <translation type="vanished">Отправить запрос в Uniprot BLAST для получения ID схожих последовательностей</translation>
-    </message>
-    <message>
-        <source>Fetch IDs</source>
-        <translation type="vanished">Получить идентификаторы</translation>
-    </message>
-    <message>
-        <source>Info: Searching for annotations with DAS is available for amino acid sequences only</source>
-        <translation type="vanished">Информация: Поиск для аннотаций в DAS доступен только для аминных последовательностей</translation>
-    </message>
-    <message>
-        <source>BLAST</source>
-        <translation type="vanished">BLAST</translation>
-    </message>
-    <message>
-        <source>Algorithm settings</source>
-        <translation type="vanished">Настройки алгоритма</translation>
-    </message>
-    <message>
-        <source>Annotations settings</source>
-        <translation type="vanished">Настройки аннотаций</translation>
-    </message>
-    <message>
-        <source>DAS features sources</source>
-        <translation type="vanished">Источники аннотаций DAS</translation>
-    </message>
-    <message>
-        <source>Whole sequence</source>
-        <translation type="vanished">Вся последовательность</translation>
-    </message>
-    <message>
-        <source>Selected region</source>
-        <translation type="vanished">Выделенный регион</translation>
-    </message>
-    <message>
-        <source>Custom region</source>
-        <translation type="vanished">Указанный регион</translation>
-    </message>
-</context>
-<context>
     <name>DeleteGapsDialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/DeleteGapsDialog.ui" line="14"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.ui" line="14"/>
         <source>Remove Columns of Gaps</source>
         <translation>Удаление пробелов</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/DeleteGapsDialog.ui" line="22"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.ui" line="22"/>
         <source>Remove columns with number of gaps</source>
         <translation>Удалить столбцы с числом пробелов</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/DeleteGapsDialog.ui" line="32"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.ui" line="32"/>
         <source>Remove columns with percentage of gaps</source>
         <translation>Удалить столбцы с числом пробелов в процентах</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/DeleteGapsDialog.ui" line="39"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.ui" line="39"/>
         <source>%</source>
         <comment>%</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/DeleteGapsDialog.ui" line="52"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.ui" line="52"/>
         <source>Remove all gap-only columns</source>
         <translation>Удалить все пустые столбцы</translation>
     </message>
@@ -577,71 +439,66 @@ Probably the data is too big.</source>
 <context>
     <name>EditAnnotationDialog</name>
     <message>
-        <location filename="../src/ov_sequence/ui/EditAnnotationDialog.ui" line="14"/>
         <source>Edit Annotation</source>
-        <translation>Редактирование аннотации</translation>
+        <translation type="vanished">Редактирование аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/EditAnnotationDialog.ui" line="22"/>
         <source>Annotation name</source>
-        <translation>Имя аннотации</translation>
+        <translation type="vanished">Имя аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/EditAnnotationDialog.ui" line="32"/>
         <source>Location</source>
-        <translation>Позиция</translation>
+        <translation type="vanished">Позиция</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/EditAnnotationDialog.ui" line="52"/>
-        <location filename="../src/ov_sequence/ui/EditAnnotationDialog.ui" line="63"/>
         <source>...</source>
-        <translation>...</translation>
+        <translation type="vanished">...</translation>
     </message>
 </context>
 <context>
     <name>ExportConsensusDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="14"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="14"/>
         <source>Export Consensus</source>
         <translation>Экспорт консенсуса</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="22"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="22"/>
         <source>Export to file</source>
         <translation>Экспорт в файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="32"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="32"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="42"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="42"/>
         <source>Sequence name</source>
         <translation>Имя последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="81"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="81"/>
         <source>Keep gaps</source>
         <translation>Наличие пробелов</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="52"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="52"/>
         <source>Consensus algorithm</source>
         <translation>Алгоритм консенсуса</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="62"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="62"/>
         <source>File format</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="69"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="69"/>
         <source>Mode</source>
         <translation>Мода</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportConsensusDialog.ui" line="90"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="90"/>
         <source>Add to project</source>
         <translation>Добавить в проект</translation>
     </message>
@@ -649,37 +506,37 @@ Probably the data is too big.</source>
 <context>
     <name>ExportConsensusWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="14"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="34"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="34"/>
         <source>Export to file</source>
         <translation>Экспорт в файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="44"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="44"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="58"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="58"/>
         <source>File format</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="75"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="75"/>
         <source>Keep gaps</source>
         <translation>Наличие пробелов</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportConsensusWidget.ui" line="82"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="82"/>
         <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/ui/ExportConsensusWidget.ui" line="118"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="118"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
@@ -687,47 +544,46 @@ Probably the data is too big.</source>
 <context>
     <name>ExportCoverageDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="14"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="14"/>
         <source>Export the Assembly Coverage</source>
         <translation>Экспорт покрытия</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="26"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="23"/>
         <source>Export to:</source>
         <translation>Экспортировать в:</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="38"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="47"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="44"/>
         <source>Format:</source>
         <translation>Формат:</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="72"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="69"/>
         <source>Compress the file</source>
         <translation>Сжать файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="124"/>
         <source>Additional options</source>
-        <translation>Дополнительные параметры</translation>
+        <translation type="vanished">Дополнительные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="130"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="124"/>
         <source>Export coverage value</source>
         <translation>Экспортировать покрытие</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="140"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="134"/>
         <source>Export bases quantity</source>
         <translation>Эксспортировать количество оснований</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportCoverageDialog.ui" line="86"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="83"/>
         <source>Threshold:</source>
         <translation>Порог:</translation>
     </message>
@@ -735,57 +591,57 @@ Probably the data is too big.</source>
 <context>
     <name>ExportHighlightedDialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="20"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="20"/>
         <source>Export Highlighted to File</source>
         <translation>Экспорт подсвеченного в файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="31"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="31"/>
         <source>Export to file</source>
         <translation>Экспорт в файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="41"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="41"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="52"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="52"/>
         <source>Exported area:  from</source>
         <translation>Экспорт области: от</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="78"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="78"/>
         <source> to </source>
         <translation> до </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="109"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="109"/>
         <source>Indexing</source>
         <translation>Индексация</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="118"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="118"/>
         <source>1-based</source>
         <translation>нумеровать с 1</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="128"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="128"/>
         <source>0-based</source>
         <translation>нумеровать с 0</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="141"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="141"/>
         <source>Keep gaps</source>
         <translation>Наличие пробелов</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="151"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="151"/>
         <source>Dots instead not highlighted</source>
         <translation>Использовать точки где нет подсветки</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/ExportHighlightedDialog.ui" line="161"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialog.ui" line="161"/>
         <source>Transpose output</source>
         <translation>Транспонировать результат</translation>
     </message>
@@ -793,27 +649,59 @@ Probably the data is too big.</source>
 <context>
     <name>ExportReadsDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportReadsDialog.ui" line="14"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.ui" line="14"/>
         <source>Export Reads</source>
         <translation>Экспорт ридов</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportReadsDialog.ui" line="22"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.ui" line="22"/>
         <source>Export to file</source>
         <translation>Экспорт в файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportReadsDialog.ui" line="32"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.ui" line="32"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportReadsDialog.ui" line="39"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.ui" line="39"/>
         <source>File format</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ui/ExportReadsDialog.ui" line="51"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.ui" line="51"/>
+        <source>Add to project</source>
+        <translation>Добавить в проект</translation>
+    </message>
+</context>
+<context>
+    <name>ExtractAssemblyRegionDialog</name>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.ui" line="14"/>
+        <source>Export Assembly Region</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 type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.ui" line="32"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.ui" line="39"/>
+        <source>File format</source>
+        <translation>Формат файла</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.ui" line="72"/>
         <source>Add to project</source>
         <translation>Добавить в проект</translation>
     </message>
@@ -821,87 +709,87 @@ Probably the data is too big.</source>
 <context>
     <name>FindPatternForm</name>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="41"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="41"/>
         <source>Search for:</source>
         <translation>Искать:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="433"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="433"/>
         <source>Search in</source>
         <translation>Искать в</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="526"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="526"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="190"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="190"/>
         <source>Previous</source>
         <translation>Предыдущий</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="193"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="193"/>
         <source>Shift+Return</source>
         <translation>Shift+Return</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="234"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="234"/>
         <source>Next</source>
         <translation>Следующий</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="237"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="237"/>
         <source>Return</source>
         <translation>Возврат</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="446"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="446"/>
         <source>Strand</source>
         <translation>Прямая</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="459"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="459"/>
         <source>Region</source>
         <translation>Регион</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="668"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="668"/>
         <source>Create annotations</source>
         <translation>Создать аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="596"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="596"/>
         <source>Remove overlapped results</source>
         <translation>Удалить перекрывающиеся результаты</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="613"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="613"/>
         <source>Limit results number to:</source>
         <translation>Ограничить число результатов:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="82"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="82"/>
         <source>Find file with newline-separated patterns</source>
         <translation>Искать файл с разделенными паттернами</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="85"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="85"/>
         <source>Load patterns from file</source>
         <translation>Загрузить паттерны с файла</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="100"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="100"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="107"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="107"/>
         <source>Path:</source>
         <translation>Путь:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/ui/FindPatternForm.ui" line="295"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="295"/>
         <source>Algorithm</source>
         <translation>Алгоритм</translation>
     </message>
@@ -909,47 +797,47 @@ Probably the data is too big.</source>
 <context>
     <name>GeneralTabOptionsPanelWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="14"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="56"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="56"/>
         <source>Length:</source>
         <translation>Длина:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="85"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="85"/>
         <source>Sequence number:</source>
         <translation>Номер последовательности:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="117"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="117"/>
         <source>Consensus type:</source>
         <translation>Тип консенсуса:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="129"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="129"/>
         <source>Threshold:</source>
         <translation>Порог:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="136"/>
+        <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/ui/GeneralTabOptionsPanelWidget.ui" line="176"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="176"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="203"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="203"/>
         <source>Format:</source>
         <translation>Формат:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/GeneralTabOptionsPanelWidget.ui" line="213"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="213"/>
         <source>Copy</source>
         <translation>Копировать</translation>
     </message>
@@ -957,90 +845,90 @@ Probably the data is too big.</source>
 <context>
     <name>GenomeAssemblyDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="20"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="20"/>
         <source>Assemble Genomes</source>
         <translation>Геномы сборки</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="28"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="28"/>
         <source>Select a method to align short reads.</source>
         <translation>Выберите метод выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="31"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="31"/>
         <source>Assembly method</source>
         <translation>Метод сборки</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="38"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="38"/>
         <source>Select required align short reads method</source>
         <translation>Выберите требуемый метод выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="65"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="65"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="79"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.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/ui/GenomeAssemblyDialog.ui" line="82"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="82"/>
         <source>Output directory</source>
         <translation>Выходная директория</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="93"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="93"/>
         <source>Library</source>
         <translation>Библиотека</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="121"/>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="155"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="121"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="155"/>
         <source>Path</source>
         <translation>Путь</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="136"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="136"/>
         <source>#</source>
         <translation>#</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="141"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="141"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="146"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="146"/>
         <source>Orientation</source>
         <translation>Ориентация</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="165"/>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="196"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="165"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="196"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="172"/>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="203"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="172"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="203"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="225"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="225"/>
         <source>Properties</source>
         <translation>Свойства</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="232"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="232"/>
         <source>Left reads</source>
         <translation>Левые риды</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ui/GenomeAssemblyDialog.ui" line="239"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="239"/>
         <source>Right reads</source>
         <translation>Правые риды</translation>
     </message>
@@ -1048,22 +936,22 @@ Probably the data is too big.</source>
 <context>
     <name>LicenseDialog</name>
     <message>
-        <location filename="../src/ui/LicenseDialog.ui" line="14"/>
+        <location filename="../src/LicenseDialog.ui" line="14"/>
         <source>License Agreement</source>
         <translation>Лицензионное соглашение</translation>
     </message>
     <message>
-        <location filename="../src/ui/LicenseDialog.ui" line="20"/>
+        <location filename="../src/LicenseDialog.ui" line="20"/>
         <source>To use this algorithm need accept following license agreement:</source>
         <translation>Чтобы использовать этот алгоритм необходимо принять следующее лицензионное соглашение:</translation>
     </message>
     <message>
-        <location filename="../src/ui/LicenseDialog.ui" line="45"/>
+        <location filename="../src/LicenseDialog.ui" line="45"/>
         <source>Accept</source>
         <translation>Принять</translation>
     </message>
     <message>
-        <location filename="../src/ui/LicenseDialog.ui" line="52"/>
+        <location filename="../src/LicenseDialog.ui" line="52"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
@@ -1071,62 +959,62 @@ Probably the data is too big.</source>
 <context>
     <name>MSADistanceColumnSettingsForm</name>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="23"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="23"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="77"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="77"/>
         <source>Show distances column</source>
         <translation>Показать колонки расстояний</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="104"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="104"/>
         <source>Distance algorithm:</source>
         <translation>Алгоритм построения:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="147"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="147"/>
         <source>Automatic updating</source>
         <translation>Автоматическое обновление</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="162"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="162"/>
         <source><dataState></source>
         <translation><dataState></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="169"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="169"/>
         <source>Refresh distances</source>
         <translation>Обновить расстояния</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="172"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="172"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="191"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="191"/>
         <source><hint></source>
         <translation><hint></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="114"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="114"/>
         <source>Profile mode</source>
         <translation>Способ профилирования</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="123"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="123"/>
         <source>Counts</source>
         <translation>Значения</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="130"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="130"/>
         <source>Percents</source>
         <translation>Проценты</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSADistancesColumnSettingsWidget.ui" line="137"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="137"/>
         <source>Exclude gaps</source>
         <translation>Исключить пробелы</translation>
     </message>
@@ -1134,42 +1022,42 @@ Probably the data is too big.</source>
 <context>
     <name>MSAExportSettings</name>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="14"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="40"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="40"/>
         <source>Region</source>
         <translation>Регион</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="54"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="54"/>
         <source>Whole alignment</source>
         <translation>Все выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="59"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="59"/>
         <source>Custom region</source>
         <translation>Указанный регион</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="73"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="73"/>
         <source>Select</source>
         <translation>Выделить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="82"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="82"/>
         <source>Include sequences' names</source>
         <translation>Включить имена последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="89"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="89"/>
         <source>Include consensus</source>
         <translation>Включить консенсус</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/MSAExportSettings.ui" line="96"/>
+        <location filename="../src/ov_msa/Export/MSAExportSettings.ui" line="96"/>
         <source>Include ruler</source>
         <translation>Включить шкалу</translation>
     </message>
@@ -1177,62 +1065,62 @@ Probably the data is too big.</source>
 <context>
     <name>PairwiseAlignmentOptionsPanelWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="20"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="20"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="148"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="148"/>
         <source>Similarity:</source>
         <translation>Схожесть:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="161"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="161"/>
         <source>Not defined</source>
         <translation>Не найдено</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="196"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="196"/>
         <source>Algorithm:</source>
         <translation>Алгоритм:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="251"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="251"/>
         <source>Open the alignment result in the new editor</source>
         <translation>Открыть результат в новом окне</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="254"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="254"/>
         <source>In new window</source>
         <translation>В новом окне</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="283"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="283"/>
         <source>Output file:</source>
         <translation>Выходной файл:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="301"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="301"/>
         <source>Select file to save result of the alignment. If it is not defined, default file name will be used.</source>
         <translation>Выберите  файл для сохранения результатов. Если не указан, то будет использовано имя по умолчанию.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="304"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="304"/>
         <source>Default</source>
         <translation>Значение по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="311"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="311"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="343"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="343"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/PairwiseAlignmentOptionsPanelWidget.ui" line="352"/>
+        <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="352"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
@@ -1240,22 +1128,22 @@ Probably the data is too big.</source>
 <context>
     <name>PhyTreeDisplayOptionsWidget</name>
     <message>
-        <location filename="../src/phyltree/ui/PhyTreeDisplayOptionsWidget.ui" line="14"/>
+        <location filename="../src/phyltree/PhyTreeDisplayOptionsWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/PhyTreeDisplayOptionsWidget.ui" line="41"/>
+        <location filename="../src/phyltree/PhyTreeDisplayOptionsWidget.ui" line="41"/>
         <source>Display tree in new window</source>
         <translation>Отобразить дерево в новом окне</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/PhyTreeDisplayOptionsWidget.ui" line="57"/>
+        <location filename="../src/phyltree/PhyTreeDisplayOptionsWidget.ui" line="57"/>
         <source>Display tree with alignment editor</source>
         <translation>Отобразить дерево рядом с выравниванием</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/PhyTreeDisplayOptionsWidget.ui" line="76"/>
+        <location filename="../src/phyltree/PhyTreeDisplayOptionsWidget.ui" line="76"/>
         <source>Synchronize alignment with tree</source>
         <translation>Синхронизовать выравнивание с деревом</translation>
     </message>
@@ -1354,137 +1242,137 @@ Double-click to collapse the branch</source>
         <translation>Навигация</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="161"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="166"/>
         <source>Lock here</source>
         <translation>Заблокировать здесь</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="312"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="317"/>
         <source>Shift+move mouse</source>
         <translation>Shift+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="312"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="317"/>
         <source>Zoom the Assembly Overview to selection</source>
         <translation>Увеличить выделенное</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="313"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="318"/>
         <source>Ctrl+wheel</source>
         <translation>Ctrl+wheel</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="313"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="318"/>
         <source>Zoom the Assembly Overview</source>
         <translation>Увеличить общий вид сборки</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="314"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="319"/>
         <source>Alt+click</source>
         <translation>Alt+click</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="314"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="319"/>
         <source>Zoom the Assembly Overview in 100x</source>
         <translation>Увеличить общий вид сборки в 100 раз</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="315"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="320"/>
         <source>Wheel+move mouse</source>
         <translation>Wheel+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="315"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="320"/>
         <source>Move the Assembly Overview</source>
         <translation>Переместить общий вид сборки</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="316"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="321"/>
         <source>Wheel</source>
         <translation>Wheel</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="316"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="321"/>
         <source>Zoom the Reads Area</source>
         <translation>Увеличить область с ридами</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="317"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="322"/>
         <source>Double-click</source>
         <translation>Double-click</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="317"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="322"/>
         <source>Zoom in the Reads Area</source>
         <translation>Увеличить в область с ридами</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="318"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="323"/>
         <source>+/-</source>
         <translation>+/-</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="318"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="323"/>
         <source>Zoom in/Zoom out the Reads Area</source>
         <translation>Увеличить/уменьшить область с ридами</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="319"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="324"/>
         <source>Click+move mouse</source>
         <translation>Click+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="319"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="324"/>
         <source>Move the Reads Area</source>
         <translation>Переместить област с ридами</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="320"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="325"/>
         <source>Arrow</source>
         <translation>Arrow</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="320"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="325"/>
         <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="321"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="326"/>
         <source>Ctrl+arrow</source>
         <translation>Ctrl+arrow</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="321"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="326"/>
         <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="322"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="327"/>
         <source>Page up/Page down</source>
         <translation>Вверх/Вниз</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="322"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="327"/>
         <source>Move one page up/down in the Reads Area</source>
         <translation>Переместить одну область видимости в области с ридами вверх/вниз</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="323"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="328"/>
         <source>Home/End</source>
         <translation>В начало/в конец</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="323"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="328"/>
         <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="324"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="329"/>
         <source>Ctrl+G</source>
         <translation>Ctrl+G</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="324"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="329"/>
         <source>Focus to the <i>Go to position</i> field on the toolbar</source>
         <translation>Перейти к полю <i>Переместиться в позицию</i> на панели инструментов</translation>
     </message>
@@ -1529,17 +1417,17 @@ Double-click to collapse the branch</source>
         <translation>Выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="39"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="41"/>
         <source>Data is outdated</source>
         <translation>Данные устарели</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="40"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="42"/>
         <source>Data is valid</source>
         <translation>Данные корректны</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="41"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="43"/>
         <source>Data is being updated</source>
         <translation>Данные обновляются</translation>
     </message>
@@ -1582,10 +1470,6 @@ Double-click to collapse the branch</source>
         <translation>Выделение аннотаций</translation>
     </message>
     <message>
-        <source>DAS Annotations</source>
-        <translation type="vanished">Аннотации DAS</translation>
-    </message>
-    <message>
         <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="218"/>
         <source>Search algorithm</source>
         <translation>Алгоритм поиска</translation>
@@ -1634,32 +1518,32 @@ Double-click to collapse the branch</source>
 <context>
     <name>SaveGraphCutoffsDialog</name>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="14"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="14"/>
         <source>Save Graph Cutoffs as Annotations</source>
         <translation>Сохранить график порогов как аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="141"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="141"/>
         <source>Maximum cutoff</source>
         <translation>Максимальный порог</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="154"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="154"/>
         <source>Minimum cutoff</source>
         <translation>Минимальный порог</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="52"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="52"/>
         <source>Area to annotate</source>
         <translation>Область аннотирования</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="64"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="64"/>
         <source>Around cutoff values</source>
         <translation>Близкие к пороговым значения</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SaveGraphCutoffsDialog.ui" line="77"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialog.ui" line="77"/>
         <source>Between cutoff values</source>
         <translation>Значения между пороговыми</translation>
     </message>
@@ -1667,47 +1551,47 @@ Double-click to collapse the branch</source>
 <context>
     <name>SearchQualifierDialog</name>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="14"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="14"/>
         <source>Find Qualifier</source>
         <translation>Поиск квалификатора</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="58"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="58"/>
         <source>Qualifier</source>
         <translation>Квалификатор</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="67"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="67"/>
         <source>Name:</source>
         <translation>Имя:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="77"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="77"/>
         <source>Value:</source>
         <translation>Значение:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="23"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="23"/>
         <source>Match Parameter</source>
         <translation>Параметры совпадения</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="32"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="32"/>
         <source>Contains substring</source>
         <translation>Содержит подстроку</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="45"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="45"/>
         <source>Exact match</source>
         <translation>Точное совпадение</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="96"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="96"/>
         <source>Group Name</source>
         <translation>Имя группы</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ui/SearchQualifierDialog.ui" line="122"/>
+        <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="122"/>
         <source>Search in:</source>
         <translation>Искать в:</translation>
     </message>
@@ -1715,37 +1599,37 @@ Double-click to collapse the branch</source>
 <context>
     <name>SecStructDialog</name>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="14"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="14"/>
         <source>Secondary Structure Prediction</source>
         <translation>Предсказание вторичной структуры</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="22"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="22"/>
         <source>Algorithm</source>
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="36"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="36"/>
         <source>Range Start:</source>
         <translation>Начало региона:</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="59"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="59"/>
         <source>Range End:</source>
         <translation>Конец региона:</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="86"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="86"/>
         <source>Results:</source>
         <translation>Результаты:</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="120"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="120"/>
         <source>Total predicted:</source>
         <translation>Всего предсказано:</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/ui/SecStructDialog.ui" line="127"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.ui" line="127"/>
         <source>0</source>
         <translation>0</translation>
     </message>
@@ -1753,37 +1637,37 @@ Double-click to collapse the branch</source>
 <context>
     <name>SelectSubalignmentDialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="14"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="14"/>
         <source>Select Subalignment</source>
         <translation>Выделение участка выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="22"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="22"/>
         <source>From </source>
         <translation>От </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="48"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="48"/>
         <source> to </source>
         <translation> до </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="73"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="73"/>
         <source>Selected sequences</source>
         <translation>Выбранные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="102"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="102"/>
         <source>Invert selection</source>
         <translation>Инвертировать выбор</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="109"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="109"/>
         <source>Select all</source>
         <translation>Выбрать всё</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SelectSubalignmentDialog.ui" line="116"/>
+        <location filename="../src/ov_msa/SelectSubalignmentDialog.ui" line="116"/>
         <source>Clear selection</source>
         <translation>Снять выделение</translation>
     </message>
@@ -1814,32 +1698,32 @@ Double-click to collapse the branch</source>
 <context>
     <name>SequenceSelectorWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="14"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="40"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="40"/>
         <source>Add selected sequence</source>
         <translation>Добавить выбранную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="43"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="43"/>
         <source>></source>
         <translation>></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="88"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="88"/>
         <source>Select and add</source>
         <translation>Выбрать и добавить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="123"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="123"/>
         <source>Clear</source>
         <translation>Очистить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SequenceSelectorWidget.ui" line="126"/>
+        <location filename="../src/ov_msa/SequenceSelectorWidget.ui" line="126"/>
         <source>x</source>
         <translation>x</translation>
     </message>
@@ -1847,162 +1731,162 @@ Double-click to collapse the branch</source>
 <context>
     <name>SmithWatermanDialogBase</name>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="32"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="32"/>
         <source>Smith-Waterman Search</source>
         <translation>Поиск Смита-Ватермана</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="478"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="478"/>
         <source>Input and output</source>
         <translation>Ввод и вывод</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="42"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="42"/>
         <source>Smith-Waterman parameters</source>
         <translation>Параметры алгоритма Смита-Ватермана</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="48"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="48"/>
         <source>Pattern</source>
         <translation>Паттерн</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="217"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="217"/>
         <source>Smith-Waterman algorithm parameters</source>
         <translation>Параметры поиска</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="223"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="223"/>
         <source>Algorithm version</source>
         <translation>Версия алгоритма</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="273"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="273"/>
         <source>Advanced..</source>
         <translation>Дополнительно..</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="289"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="289"/>
         <source>Scoring matrix</source>
         <translation>Матрица весов</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="339"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="339"/>
         <source>View..</source>
         <translation>Смотреть..</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="352"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="352"/>
         <source>Gap scores</source>
         <translation>Веса пробелов</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="358"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="358"/>
         <source>Gap open</source>
         <translation>Открытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="365"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="365"/>
         <source>Gap  extension </source>
         <translation>Продление пробела</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="398"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="398"/>
         <source>Results filtering strategy</source>
         <translation>Фильтрация результатов</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="406"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="406"/>
         <source>Minimal score</source>
         <translation>Минимальная оценка</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="432"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="432"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="452"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="452"/>
         <source>Report results</source>
         <translation>Фильтровать</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="510"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="510"/>
         <source>Save results as</source>
         <translation>Сохранить результаты как</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="559"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="559"/>
         <source>Aligner options</source>
         <translation>Параметры выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="576"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="576"/>
         <source>Alignment files directory path</source>
         <translation>Путь до файлов выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="611"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="611"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="621"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="621"/>
         <source>Set advanced options</source>
         <translation>Установить дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="639"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="639"/>
         <source>Template for alignment files names</source>
         <translation>Пример для имен файлов выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="652"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="652"/>
         <source>Template for reference subsequences names</source>
         <translation>Пример для имен референсных последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="691"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="691"/>
         <source>Template for pattern subsequences names</source>
         <translation>Пример для имен подпоследовательностей</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="721"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="721"/>
         <source>Pattern sequence name</source>
         <translation>Имя подстроки</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="100"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="100"/>
         <source>Search in</source>
         <translation>Искать в</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="115"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="115"/>
         <source>Sequence</source>
         <translation>Последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="134"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="134"/>
         <source>Translation</source>
         <translation>Трансляции</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="169"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="169"/>
         <source>Strand</source>
         <translation>Направление</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="178"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="178"/>
         <source>Both</source>
         <translation>Оба</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="188"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="188"/>
         <source>Direct</source>
         <translation>Прямое</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/ui/SmithWatermanDialogBase.ui" line="198"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="198"/>
         <source>Complement</source>
         <translation>Комплементарное</translation>
     </message>
@@ -2010,47 +1894,47 @@ Double-click to collapse the branch</source>
 <context>
     <name>TextSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="14"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="14"/>
         <source>Labels Formatting</source>
         <translation>Форматирование надписей</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="22"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="22"/>
         <source>Color</source>
         <translation>Цвет</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="29"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="29"/>
         <source>Size</source>
         <translation>Размер</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="75"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="75"/>
         <source>Font</source>
         <translation>Шрифт</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="85"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="85"/>
         <source>Attributes</source>
         <translation>Аттрибуты</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="100"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="100"/>
         <source>B</source>
         <translation>B</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="115"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="115"/>
         <source>I</source>
         <translation>I</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="130"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="130"/>
         <source>U</source>
         <translation>U</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TextSettingsDialog.ui" line="145"/>
+        <location filename="../src/phyltree/TextSettingsDialog.ui" line="145"/>
         <source>S</source>
         <translation>S</translation>
     </message>
@@ -2058,113 +1942,113 @@ Double-click to collapse the branch</source>
 <context>
     <name>TreeOptionWidget</name>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="23"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="23"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="58"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="58"/>
         <source>Tree layout</source>
         <translation>Представление</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="78"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="78"/>
         <source>Tree view</source>
         <translation>Дерево</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="120"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="120"/>
         <source>Show names</source>
         <translation>Показать имена</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="127"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="127"/>
         <source>Show distances</source>
         <translation>Показать расстояния</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="134"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="134"/>
         <source>Show node labels</source>
         <translation>Показать метки узлов</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="141"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="141"/>
         <source>Align labels</source>
         <translation>Выровнять надписи</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="163"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="163"/>
         <source>Show font settings</source>
         <translation>Показать настройки шрифта</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="192"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="192"/>
         <source>Font</source>
         <translation>Шрифт</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="199"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="199"/>
         <source>Size</source>
         <translation>Размер</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="229"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="229"/>
         <source>Color  </source>
         <translation>Цвет </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="262"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="262"/>
         <source>Attributes</source>
         <translation>Аттрибуты</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="288"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="288"/>
         <source>B</source>
         <translation>B</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="300"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="300"/>
         <source>I</source>
         <translation>I</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="316"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="316"/>
         <source>U</source>
         <translation>U</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="345"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="345"/>
         <source>Font size</source>
         <translation>Размер шрифта</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="374"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="374"/>
         <source>Scale range</source>
         <translation>Диапазон шкалы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="381"/>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="544"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="381"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="544"/>
         <source>Line width</source>
         <translation>Толщина линии</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="465"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="465"/>
         <source>Width</source>
         <translation>Ширина</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="472"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="472"/>
         <source>Height</source>
         <translation>Высота</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="509"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="509"/>
         <source>Show pen settings</source>
         <translation>Показать настройки пера</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/TreeOptionsWidget.ui" line="561"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.ui" line="561"/>
         <source>Color</source>
         <translation>Цвет</translation>
     </message>
@@ -2172,27 +2056,27 @@ Double-click to collapse the branch</source>
 <context>
     <name>TreeSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/ui/TreeSettingsDialog.ui" line="14"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.ui" line="14"/>
         <source>Tree Settings</source>
         <translation>Настройки дерева</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TreeSettingsDialog.ui" line="76"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.ui" line="76"/>
         <source>Width</source>
         <translation>Ширина</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TreeSettingsDialog.ui" line="83"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.ui" line="83"/>
         <source>Height (Rectangular)</source>
         <translation>Высота (для прямоугольного)</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TreeSettingsDialog.ui" line="93"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.ui" line="93"/>
         <source>Tree View</source>
         <translation>Тип дерева</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/ui/TreeSettingsDialog.ui" line="103"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.ui" line="103"/>
         <source>Scale Range</source>
         <translation>Диапазон шкалы</translation>
     </message>
@@ -2223,23 +2107,19 @@ Double-click to collapse the branch</source>
         <translation>Копировать транслированную обратно-комплементарную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="90"/>
+        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="319"/>
         <source>Paste sequence</source>
-        <translation type="unfinished"></translation>
+        <translation>Вставить последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="150"/>
+        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="147"/>
         <source>An error occurred during getting sequence data: %1</source>
         <translation>В процессе получения данных последовательности произошла ошибка: %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="307"/>
+        <location filename="../src/ov_sequence/ADVClipboard.cpp" line="304"/>
         <source>Copy/Paste</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Copy</source>
-        <translation type="vanished">Копирование</translation>
+        <translation>Копирование/Вставка</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/ADVClipboard.cpp" line="85"/>
@@ -2268,70 +2148,93 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::ADVSequenceObjectContext</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="206"/>
+        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="207"/>
         <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>Таблицы трансляции</translation>
+        <translation type="vanished">Таблицы трансляции</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="218"/>
         <source>Translation frames</source>
-        <translation>Рамки трансляций</translation>
+        <translation type="vanished">Рамки трансляций</translation>
     </message>
 </context>
 <context>
     <name>U2::ADVSingleSequenceHeaderWidget</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="967"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="971"/>
         <source>Alphabet: <b>%1</b></source>
         <translation>Алфавит: <b>%1</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="968"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="972"/>
         <source> Sequence size: <b>%1</b></source>
         <translation>Размер последовательности: <b>%1</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="969"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="973"/>
         <source> File:&nbsp;<b>%1</b></source>
         <translation>Файл:&nbsp;<b>%1</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1054"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1058"/>
         <source>raw</source>
         <translation>raw</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1058"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1062"/>
         <source>amino ext</source>
         <translation>amino ext</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1060"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1064"/>
         <source>amino</source>
         <translation>амино</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1065"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1069"/>
         <source>dna</source>
         <translation>днк</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1067"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1071"/>
         <source>dna ext</source>
         <translation>dna ext</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1071"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1075"/>
         <source>rna ext</source>
         <translation>rna ext</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1069"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="1073"/>
         <source>rna</source>
         <translation>rna</translation>
     </message>
@@ -2339,12 +2242,12 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::ADVSingleSequenceWidget</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="449"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="443"/>
         <source>Zoom</source>
         <translation>Масштаб</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="703"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="707"/>
         <source>Zoom to range</source>
         <translation>Выбор масштаба</translation>
     </message>
@@ -2354,12 +2257,12 @@ Double-click to collapse the branch</source>
         <translation>Создать новую шкалу...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="541"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="535"/>
         <source>Rulers...</source>
         <translation>Шкала обзора...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="552"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="546"/>
         <source>Remove '%1'</source>
         <translation>Удалить "%1"</translation>
     </message>
@@ -2389,63 +2292,63 @@ Double-click to collapse the branch</source>
         <translation>Выбрать масштаб...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="209"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="203"/>
         <source>Export image</source>
         <translation>Экспорт изображения</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="225"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="219"/>
         <source>Remove sequence</source>
         <translation>Удалить последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="526"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="520"/>
         <source>Select</source>
         <translation>Выделить</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="315"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="309"/>
         <source>Show all views</source>
         <translation>Показать всё</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="315"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="309"/>
         <source>Hide all views</source>
         <translation>Скрыть всё</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="243"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="921"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="237"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="925"/>
         <source>Show zoom view</source>
         <translation>Показать масштабируемое представление</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="243"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="921"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="237"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="925"/>
         <source>Hide zoom view</source>
         <translation>Скрыть масштабируемое представление</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="244"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="926"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="930"/>
         <source>Show details view</source>
         <translation>Показать детали</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="244"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="926"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="930"/>
         <source>Hide details view</source>
         <translation>Скрыть детали</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="245"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="931"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="935"/>
         <source>Show overview</source>
         <translation>Показать панораму</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="245"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="931"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="935"/>
         <source>Hide overview</source>
         <translation>Скрыть панораму</translation>
     </message>
@@ -2638,117 +2541,121 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AnnotatedDNAView</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="142"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="141"/>
         <source>Find pattern...</source>
         <translation>Поиск подстроки...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="120"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="122"/>
         <source>Go to position...</source>
         <translation>Перейти...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="133"/>
         <source>Rename item</source>
-        <translation>Переименовать элемент</translation>
+        <translation type="vanished">Переименовать элемент</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="147"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="146"/>
         <source>Insert subsequence...</source>
         <translation>Вставить подпоследовательность...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="152"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="151"/>
         <source>Remove subsequence...</source>
         <translation>Удалить подпоследовательность...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="156"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="155"/>
         <source>Replace subsequence...</source>
         <translation>Заменить подпоследовательность...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="161"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="160"/>
         <source>Selected sequence from view</source>
         <translation>Удалить выделенную последовательность из отображения</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="165"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="164"/>
         <source>Reverse-complement sequence</source>
         <translation>Заменить на обратно-комплементарную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="173"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="172"/>
         <source>Complement sequence</source>
         <translation>Заменить на комплементарную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="358"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="363"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="539"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="544"/>
         <source>Analyze</source>
         <translation>Анализ</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="549"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="554"/>
         <source>Add</source>
         <translation>Аннотация</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="555"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="560"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="561"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="566"/>
         <source>Align</source>
         <translation>Выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="567"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="572"/>
         <source>Remove</source>
         <translation>Удаление</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="580"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="585"/>
         <source>Edit</source>
         <translation>Редактирование</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1339"/>
-        <source>No sequence in focus</source>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1095"/>
+        <source>Show codon table</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="169"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1346"/>
+        <source>No sequence in focus</source>
+        <translation>No sequence in focus</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="168"/>
         <source>Reverse sequence</source>
         <translation>Заменить на обратную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="818"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="816"/>
         <source>Select sequence to associate annotations with:</source>
         <translation>Установить связь аннотаций с последовательностью:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="836"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="834"/>
         <source>No sequence object found for annotations</source>
         <translation>Не найдена связанная с аннотациями последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="763"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="764"/>
         <source>Disable '%1' highlighting</source>
         <translation>Не использовать подсветку для '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="765"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="766"/>
         <source>Enable '%1' highlighting</source>
         <translation>Задействовать подсветку для '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="905"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="903"/>
         <source>Go To</source>
         <translation>Выбор позиции</translation>
     </message>
@@ -2764,164 +2671,186 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AnnotationsTreeView</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="123"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="124"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="123"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="275"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="124"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="265"/>
         <source>Value</source>
         <translation>Значение</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="176"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="179"/>
         <source>Selected objects with annotations from view</source>
         <translation>Удалить выбранные объекты с аннотациями</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="189"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1119"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="192"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1133"/>
         <source>Copy qualifier text</source>
         <translation>Копировать значение квалификатора</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="192"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1123"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="195"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
         <source>Copy qualifier URL</source>
         <translation>Копировать ссылку</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="195"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1128"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="198"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1142"/>
         <source>Toggle column</source>
         <translation>Переключить столбец</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="199"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="202"/>
         <source>Hide column</source>
         <translation>Убрать столбец</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="203"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="206"/>
         <source>Find qualifier...</source>
         <translation>Поиск квалификатора...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="208"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="211"/>
         <source>Invert annotation selection</source>
         <translation>Инвертировать выделенную аннотацию</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="212"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="788"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="215"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="798"/>
         <source>Copy column text</source>
         <translation>Копировать значение</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="215"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="802"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="218"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="812"/>
         <source>copy column URL</source>
         <translation>Копировать ссылку</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="173"/>
+        <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"/>
+        <source>Annotation</source>
+        <translation type="unfinished">Аннотация</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1773"/>
+        <source>Edit Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1820"/>
+        <source>Edit Annotation</source>
+        <translation type="unfinished">Редактирование аннотации</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1820"/>
+        <source>Edit</source>
+        <translation type="unfinished">Редактирование</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="176"/>
         <source>Objects with annotations...</source>
         <translation>Добавить объекты с аннотациями...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="123"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="124"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="166"/>
-        <source>Paste annotations</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="183"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="186"/>
         <source>Selected annotations and qualifiers</source>
         <translation>Удалить выбранные аннотации и квалификаторы</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="218"/>
         <source>Rename item</source>
-        <translation>Переименовать элемент</translation>
+        <translation type="vanished">Переименовать элемент</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="225"/>
         <source>Edit qualifier</source>
-        <translation>Редактировать квалификатор</translation>
+        <translation type="vanished">Редактировать квалификатор</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="232"/>
         <source>View qualifier</source>
-        <translation>Просмотреть квалификатор</translation>
+        <translation type="vanished">Просмотреть квалификатор</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="238"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="228"/>
         <source>Qualifier...</source>
         <translation>Добавить квалификатор...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="245"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="235"/>
         <source>Make auto-annotations persistent</source>
         <translation>Сделать автоаннотации постоянными</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="559"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="393"/>
+        <source>Group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="396"/>
+        <source>Qualifier</source>
+        <translation type="unfinished">Квалификатор</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="568"/>
         <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="794"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="804"/>
         <source>Copy column '%1' text</source>
         <translation>Копировать значение "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="797"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="807"/>
         <source>Copy '%1' annotation location</source>
         <translation>Копировать позицию аннотации "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="806"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="816"/>
         <source>Copy column '%1' URL</source>
         <translation>Копировать ссылку "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="828"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1129"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="838"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1143"/>
         <source>Hide '%1' column</source>
         <translation>Скрыть столбец "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1119"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1133"/>
         <source>Copy qualifier '%1' value</source>
         <translation>Копировать значение "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1123"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
         <source>Copy qualifier '%1' URL</source>
         <translation>Копировать ссылку "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1129"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1143"/>
         <source>Add '%1' column</source>
         <translation>Добавить столбец "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1848"/>
         <source>Rename Group</source>
-        <translation>Переименовать группу</translation>
+        <translation type="vanished">Переименовать группу</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1889"/>
         <source>Rename Qualifier</source>
-        <translation>Переименовать квалификатор</translation>
+        <translation type="vanished">Переименовать квалификатор</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1948"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1970"/>
         <source>Create Permanent Annotation</source>
         <translation>Создать постоянную аннотацию</translation>
     </message>
@@ -2929,181 +2858,150 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AssemblyBrowser</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="206"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="208"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="150"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="152"/>
         <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="140"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="142"/>
         <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="217"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="219"/>
         <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="221"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="223"/>
         <source>Internal error: broken sequence object</source>
         <translation>Internal error: broken sequence object</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="222"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="224"/>
         <source>Internal error: empty document format</source>
         <translation>Internal error: empty document format</translation>
     </message>
     <message>
-        <source>- Reference sequence is %1 than assembly</source>
-        <translation type="vanished">- Reference sequence is %1 than assembly</translation>
-    </message>
-    <message>
-        <source>lesser</source>
-        <translation type="vanished">lesser</translation>
-    </message>
-    <message>
-        <source>bigger</source>
-        <translation type="vanished">bigger</translation>
-    </message>
-    <message>
-        <source>- Reference and assembly names not match</source>
-        <translation type="vanished">- Reference and assembly names not match</translation>
-    </message>
-    <message>
-        <source>
-  Continue?</source>
-        <translation type="vanished">
-  Продолжить?</translation>
-    </message>
-    <message>
-        <source>Errors</source>
-        <translation type="vanished">Ошибки</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="229"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="231"/>
         <source>The lengths of the sequence and assembly are different.</source>
         <translation>Длины последовательноси и сборки не совпадают.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="232"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="234"/>
         <source>The sequence and assembly names are different.</source>
         <translation>Имена последовательности и сборки не совпадают.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="250"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="252"/>
         <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="288"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="290"/>
         <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="294"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="296"/>
         <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="303"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="305"/>
         <source>Warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="304"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="306"/>
         <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="643"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="647"/>
         <source>Zoom in</source>
         <translation>Приблизить</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="646"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="650"/>
         <source>Zoom out</source>
         <translation>Отдалить</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="649"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="653"/>
         <source>Linear</source>
         <translation>Линейная</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="651"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="655"/>
         <source>Logarithmic</source>
         <translation>Логарифмическая</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="657"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="661"/>
         <source>Show coordinates on ruler</source>
         <translation>Показывать координаты на шкале</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="661"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="665"/>
         <source>Show coverage under ruler cursor</source>
         <translation>Показывать покрытие под шкалой курсора</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="665"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="669"/>
         <source>Show information about read under cursor in pop-up hint</source>
         <translation>Показывать информацию о риде в сплывающей подсказке под курсором</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="670"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="674"/>
         <source>Export as image</source>
         <translation>Экспорт изображения</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="673"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="677"/>
         <source>Export assembly to SAM format</source>
         <translation>Экспортировать сборку в формат SAM</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="676"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="680"/>
         <source>Set reference</source>
         <translation>Выбрать референсную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="993"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="684"/>
+        <source>Export assembly region</source>
+        <translation>Экспорт региона сборки</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1001"/>
         <source>Open file with a sequence</source>
         <translation>Открыть файл с последовательностью</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1004"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1012"/>
         <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="1006"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1014"/>
         <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 type="unfinished"></translation>
+        <translation>Возникла ошибка при попытке установить референсную последовтельность для сборки "%1". В файле "%2" содержится более одной последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1067"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1075"/>
         <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 type="unfinished"></translation>
-    </message>
-    <message>
-        <source>There are several sequences in file "%1". Select the required sequence object in the Project View and click the "Set reference" button.</source>
-        <translation type="vanished">Есть несколько последовательностей в файле "%1". Выберите необходимую последовательность в проекте и нажмите кнопку "Установить референсную последовательность".</translation>
+        <translation>Возникла ошибка при попытке установить референсную последовтельность для сборки "%1". В проекте выделено более одной последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1066"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1074"/>
         <source>Choose Reference Sequence</source>
         <translation>Выбрать референсную последовательность</translation>
     </message>
-    <message>
-        <source>You have more than one sequence object selected in the Project View. To set a sequence from the current project as reference, please select only one sequence object in the Project View and click the "Set reference" item again.
-
-Alternatively, to set a sequence from a file as reference, deselect the objects in the Project View, click the "Set reference" item and browse for the file.</source>
-        <translation type="vanished">Вы выделили более одного объекта. Для того, чтобы выбрать референсную последовательность из текущего проекта, выберите только одну последовательность и нажмите на кнопку "Выбрать референсную последоваетельность"снова.</translation>
-    </message>
 </context>
 <context>
     <name>U2::AssemblyBrowserFactory</name>
@@ -3121,7 +3019,7 @@ Alternatively, to set a sequence from a file as reference, deselect the objects
 <context>
     <name>U2::AssemblyBrowserUi</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1169"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1194"/>
         <source>Assembly has no mapped reads. Nothing to visualize.</source>
         <translation>Сборка не имеет ридов.</translation>
     </message>
@@ -3373,62 +3271,62 @@ You don't have enough rights to change file</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="124"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="115"/>
         <source>Coverage</source>
         <translation>Покрытие</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="130"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="135"/>
         <source>Reads highlighting</source>
         <translation>Выделение ридов</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="155"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="160"/>
         <source>Optimize rendering when scrolling</source>
         <translation>Оптимизировать отображение в процессе перемещения</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="164"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="169"/>
         <source>Reads shadowing</source>
         <translation>Центрирование ридов в позиции</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="166"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="171"/>
         <source>Disabled</source>
         <translation>Запрещено</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="168"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="173"/>
         <source>Free</source>
         <translation>Свободное перемещение</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="170"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="175"/>
         <source>Centered</source>
         <translation>В центре</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="178"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="183"/>
         <source>Jump to locked base</source>
         <translation>Вернуться к сохраненной позиции</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="332"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="337"/>
         <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="336"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="341"/>
         <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="338"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="343"/>
         <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="925"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="930"/>
         <source>Locked to base</source>
         <translation>Сохранить позицию</translation>
     </message>
@@ -3730,9 +3628,22 @@ You don't have enough rights to change file</source>
     </message>
 </context>
 <context>
+    <name>U2::ColorSchemaDialogController</name>
+    <message>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="52"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="53"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+</context>
+<context>
     <name>U2::ColorSchemaSettingsPageController</name>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaSettingsController.cpp" line="97"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsController.cpp" line="99"/>
         <source>Alignment Color Scheme</source>
         <translation>Цветовая схема</translation>
     </message>
@@ -3740,7 +3651,7 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::ColorSchemaSettingsPageWidget</name>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="362"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="370"/>
         <source>Choose Directory</source>
         <translation>Выбрать директорию</translation>
     </message>
@@ -3748,38 +3659,38 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::ConvertAssemblyToSamDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="51"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="49"/>
         <source>Convert</source>
         <translation>Конвертировать</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="52"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="50"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="79"/>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="82"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="71"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="74"/>
         <source>Data base to SAM converter</source>
         <translation>Конвертер базы данных в SAM</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="80"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="72"/>
         <source>Data base file url is not set!</source>
         <translation>Путь файла базы данных не указан!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="83"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="75"/>
         <source>SAM file url is not set!</source>
         <translation>Путь для SAM файла не указан!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="108"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="114"/>
         <source>Open an Assembly Database File</source>
         <translation>Открыть файл сборки</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="119"/>
+        <location filename="../src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp" line="102"/>
         <source>Set a result SAM file name</source>
         <translation>Укажите имя результирующего SAM файла</translation>
     </message>
@@ -3805,47 +3716,53 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CreateColorSchemaDialog</name>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="176"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="182"/>
         <source>Create</source>
         <translation>Создать</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="177"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="183"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="197"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="179"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="185"/>
         <source>Amino acid</source>
         <translation>Аминокислота</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="180"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="186"/>
         <source>Nucleotide</source>
         <translation>Нуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="215"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="196"/>
+        <source>Ok</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="223"/>
         <source>Name of scheme is empty.</source>
         <translation>Имя схемы путо.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="225"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="233"/>
         <source>Name can't contain only spaces.</source>
         <translation>Имя не может содержать только пробелы.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="230"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="238"/>
         <source>Name has to consist of letters, digits, spaces</source>
         <translation>Имя может состоять только из букв, цифр, пробелов</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="231"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="239"/>
         <source>or underscore symbols only.</source>
         <translation>или символов подчеркивания.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="236"/>
+        <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="244"/>
         <source>Color scheme with the same name already exists.</source>
         <translation>Цветовая схема с таким именем уже существует.</translation>
     </message>
@@ -3853,7 +3770,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="159"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="161"/>
         <source>Generate distance matrix</source>
         <translation>Рассчитать матрицу расстояний</translation>
     </message>
@@ -3861,39 +3778,39 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CreatePhyTreeDialogController</name>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="69"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="70"/>
         <source>Build</source>
         <translation>Построить</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="70"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="71"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="108"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="199"/>
         <source>Choose file name</source>
         <translation>Имя файла</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="160"/>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="181"/>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="195"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="147"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="168"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="182"/>
         <source>Warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="160"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="147"/>
         <source>Please, input the file name.</source>
         <translation>Пожалуйста, введите имя файла.</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="169"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="156"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="169"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="156"/>
         <source>Please, change the output file.</source>
         <translation>Измените выходной файл.</translation>
     </message>
@@ -3943,7 +3860,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="230"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="235"/>
         <source>Create sub-alignment and open view: %1</source>
         <translation>Создать выравнивание и открыть: %1</translation>
     </message>
@@ -3951,52 +3868,52 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CreateSubalignmentDialogController</name>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="60"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="52"/>
         <source>Extract</source>
-        <translation>Извлечь</translation>
+        <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="61"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="53"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="168"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="169"/>
         <source>Directory to save does not exist</source>
         <translation>Директория для сохранения не существует</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="172"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="173"/>
         <source>No write permission to '%1' directory</source>
         <translation>Недостаточно прав для записи в директорию '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="176"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="177"/>
         <source>No path specified</source>
         <translation>Не задан путь</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="180"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="181"/>
         <source>Filename to save is empty</source>
         <translation>Имя сохраняемого файла пусто</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="184"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="185"/>
         <source>No write permission to '%1' file</source>
         <translation>Недостаточно прав для записи в файл '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="194"/>
+        <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="200"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="201"/>
         <source>Entered region not contained in current sequence</source>
         <translation>Указанный регион не содержит последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="207"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="208"/>
         <source>You must select at least one sequence</source>
         <translation>Выберите хотябы одну последовательность</translation>
     </message>
@@ -4042,33 +3959,14 @@ You don't have enough rights to change file</source>
     </message>
 </context>
 <context>
-    <name>U2::DasOptionsPanelWidget</name>
-    <message>
-        <source>Show more options</source>
-        <translation type="vanished">Показать дополнительные настройки</translation>
-    </message>
-    <message>
-        <source>Show less options</source>
-        <translation type="vanished">Скрыть дополнительные настройки</translation>
-    </message>
-    <message>
-        <source>Warning: Selected region is too short. It should be from 4 to 1900 amino acids.</source>
-        <translation type="vanished">Предупреждение: Выделенный регион слишком короткий. Он должен быть от 4 до 1900 аминокислот.</translation>
-    </message>
-    <message>
-        <source>Warning: Selected region is too long. It should be from 4 to 1900 amino acids.</source>
-        <translation type="vanished">Предупреждение: Выделенный регион слишком длинный. Он должен быть от 4 до 1900 аминокислот.</translation>
-    </message>
-</context>
-<context>
     <name>U2::DeleteGapsDialog</name>
     <message>
-        <location filename="../src/ov_msa/DeleteGapsDialog.cpp" line="36"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.cpp" line="34"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/DeleteGapsDialog.cpp" line="37"/>
+        <location filename="../src/ov_msa/DeleteGapsDialog.cpp" line="35"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -4082,13 +3980,17 @@ You don't have enough rights to change file</source>
     </message>
     <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>Показывать транслированную последовательность</translation>
+        <translation type="vanished">Показывать транслированную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/DetView.cpp" line="72"/>
+        <location filename="../src/ov_sequence/DetView.cpp" line="71"/>
         <source>Wrap sequence</source>
-        <translation type="unfinished"></translation>
+        <translation>Свернуть последовательность</translation>
     </message>
 </context>
 <context>
@@ -4122,61 +4024,59 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::DnaAssemblyDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="75"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="77"/>
         <source>Start</source>
         <translation>Собрать</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="76"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="78"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="142"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="145"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="137"/>
         <source>Add short reads</source>
         <translation>Добавить выравниваемые последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="165"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="169"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="154"/>
         <source>Open reference sequence</source>
         <translation>Выбрать реферируемый геном</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="192"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="176"/>
         <source>Align short reads</source>
         <translation>Выравнивание на геном</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="198"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="203"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="210"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="213"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="216"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="235"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="246"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="253"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="182"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="187"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="194"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="197"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="200"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="219"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="230"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="237"/>
         <source>DNA Assembly</source>
         <translation>Сборка контигов</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="211"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="195"/>
         <source>Reference sequence url is not set!</source>
         <translation>Путь к геному не указан!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="214"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="198"/>
         <source>Result alignment file name is not set!</source>
         <translation>Имя для результирующего выравнивания не указано!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="217"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="201"/>
         <source>Short reads list is empty!</source>
         <translation>Список выравниваемых последовательностей пуст!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="236"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="220"/>
         <source>You set the index as a reference and the index files are corrupted.
 
 Try to build it again or choose a reference sequence.</source>
@@ -4185,7 +4085,7 @@ Try to build it again or choose a reference sequence.</source>
 Попробуйте построить его снова или укажите референсную последовательность.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="247"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="231"/>
         <source>These files have the unknown format:
 
 </source>
@@ -4194,7 +4094,7 @@ Try to build it again or choose a reference sequence.</source>
 </translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="254"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="238"/>
         <source>These files have the incompatible format:
 
 </source>
@@ -4203,7 +4103,7 @@ Try to build it again or choose a reference sequence.</source>
 </translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="255"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="239"/>
         <source>
 
 Do you want to convert the files and run the aligner?</source>
@@ -4212,7 +4112,7 @@ Do you want to convert the files and run the aligner?</source>
 Вы хотите сконвертировать файлы и запустить выравнивание?</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="296"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyDialog.cpp" line="255"/>
         <source>Set result alignment file name</source>
         <translation>Укажите имя для результата</translation>
     </message>
@@ -4267,36 +4167,28 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::EditAnnotationDialogController</name>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="66"/>
         <source>Location is empty!</source>
-        <translation>Регион пуст!</translation>
+        <translation type="vanished">Регион пуст!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="68"/>
         <source>Invalid location!</source>
-        <translation>Неверная позиция!</translation>
+        <translation type="vanished">Неверная позиция!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="80"/>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="89"/>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="92"/>
         <source>Error!</source>
-        <translation>Ошибка!</translation>
+        <translation type="vanished">Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="80"/>
         <source>Annotation location empty or invalid!</source>
-        <translation>Расположение аннотации пусто или некорректно!</translation>
+        <translation type="vanished">Расположение аннотации пусто или некорректно!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="89"/>
         <source>Wrong annotation name!</source>
-        <translation>Нелегальные символы в имени аннотации. Допустимы только цифры, буквы и подчёркивания!</translation>
+        <translation type="vanished">Нелегальные символы в имени аннотации. Допустимы только цифры, буквы и подчёркивания!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/EditAnnotationDialogController.cpp" line="92"/>
         <source>New annotation locations is out of sequence bounds!</source>
-        <translation>Набор (список) аннотированных регионов биологической последовательности!</translation>
+        <translation type="vanished">Набор (список) аннотированных регионов биологической последовательности!</translation>
     </message>
 </context>
 <context>
@@ -4310,38 +4202,38 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExportConsensusDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="48"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="46"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="49"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="47"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="62"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="121"/>
         <source>Export consensus</source>
         <translation>Экспорт консенсуса</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="67"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="55"/>
         <source>Visible</source>
         <translation>Видимый</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="117"/>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="122"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="102"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="107"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="117"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="102"/>
         <source>Select destination file</source>
         <translation>Выбрать файл назначения</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="122"/>
+        <location filename="../src/ov_assembly/ExportConsensusDialog.cpp" line="107"/>
         <source>Sequence name cannot be empty</source>
         <translation>Имя последовательности не может быть пустым</translation>
     </message>
@@ -4367,60 +4259,60 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExportConsensusVariationsDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="49"/>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="65"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="43"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="138"/>
         <source>Export Consensus Variations</source>
         <translation>Экспорт вариаций</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="51"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="45"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="52"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="70"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="54"/>
         <source>Visible</source>
         <translation>Видимый</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="87"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="70"/>
         <source>Variations</source>
         <translation>Вариации</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="88"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="71"/>
         <source>Similar</source>
         <translation>Схожие</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="89"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="72"/>
         <source>All</source>
         <translation>Все</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="117"/>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="130"/>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="135"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="100"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="113"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="118"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="117"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="100"/>
         <source>Select consensus variation mode</source>
         <translation>Выберите режим вариации консенсуса</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="130"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="113"/>
         <source>Select destination file</source>
         <translation>Выберите файл назначения</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="135"/>
+        <location filename="../src/ov_assembly/ExportConsensusVariationsDialog.cpp" line="118"/>
         <source>Sequence name cannot be empty</source>
         <translation>Имя последовательности не может быть пусто</translation>
     </message>
@@ -4446,39 +4338,42 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExportCoverageDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="84"/>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="89"/>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="93"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="74"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="79"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="83"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="84"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="74"/>
         <source>The output file path is not specified.</source>
         <translation>Путь для выходного файла не задан.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="89"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="79"/>
         <source>Not enough permissions to write here. Please set another output file.</source>
         <translation>Недостаточно прав для записи. Укажите другой выходной файл.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="93"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="83"/>
         <source>Nothing to export</source>
         <translation>Экспортировать нечего</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="114"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="112"/>
+        <source>Export coverage</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Compressed </source>
-        <translation>Сжат </translation>
+        <translation type="vanished">Сжат </translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="124"/>
         <source>Export to...</source>
-        <translation>Экспортировать в...</translation>
+        <translation type="vanished">Экспортировать в...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="173"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="99"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
@@ -4545,47 +4440,70 @@ Please, check external tools in the settings.</source>
     </message>
 </context>
 <context>
+    <name>U2::ExportHighligtingDialogController</name>
+    <message>
+        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="49"/>
+        <source>Export</source>
+        <translation type="unfinished">Экспорт</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="50"/>
+        <source>Cancel</source>
+        <translation type="unfinished"></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>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="47"/>
         <source>Export</source>
-        <translation>Экспорт</translation>
+        <translation type="vanished">Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="48"/>
         <source>Cancel</source>
-        <translation>Отмена</translation>
+        <translation type="vanished">Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="91"/>
         <source>Warning</source>
-        <translation>Внимание</translation>
+        <translation type="vanished">Внимание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="91"/>
         <source>Export to file URL is empty!</source>
-        <translation>Путь для экспорта пуст!</translation>
+        <translation type="vanished">Путь для экспорта пуст!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="105"/>
         <source>Select file to save...</source>
-        <translation>Сохранение файла...</translation>
+        <translation type="vanished">Сохранение файла...</translation>
     </message>
 </context>
 <context>
     <name>U2::ExportHighligtningTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3069"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3027"/>
         <source>Export highlighting</source>
         <translation>Экспорт подсвеченного</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3097"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3055"/>
         <source>Export highligtning finished successfully</source>
         <translation>Export highligtning finished successfully</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3097"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3055"/>
         <source>Result file:</source>
         <translation>Выходной файл:</translation>
     </message>
@@ -4601,38 +4519,102 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExportReadsDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="51"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="45"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="52"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="64"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="67"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="64"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="67"/>
         <source>Select destination file</source>
         <translation>Выберите файл назначения</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="74"/>
+        <location filename="../src/ov_assembly/ExportReadsDialog.cpp" line="54"/>
         <source>Select file to save</source>
         <translation>Выберите файл для сохранения</translation>
     </message>
 </context>
 <context>
+    <name>U2::ExtractAssemblyRegionAndOpenViewTask</name>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionTask.cpp" line="45"/>
+        <source>Extract Assembly Region And Open View Task</source>
+        <translation>Extract Assembly Region And Open View Task</translation>
+    </message>
+</context>
+<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>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="47"/>
+        <source>Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="51"/>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="53"/>
+        <source>Visible</source>
+        <translation>Видимый</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="87"/>
+        <source>Export Assembly Region</source>
+        <translation type="unfinished">Экспорт региона сборки</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="110"/>
+        <source>Error!</source>
+        <translation>Ошибка!</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="110"/>
+        <source>Select destination file</source>
+        <translation>Выбрать файл назначения</translation>
+    </message>
+</context>
+<context>
+    <name>U2::ExtractAssemblyRegionTask</name>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionTask.cpp" line="75"/>
+        <source>Extract Assembly Region Task</source>
+        <translation>Extract Assembly Region Task</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_assembly/ExtractAssemblyRegionTask.cpp" line="93"/>
+        <source>Unsupported assembly format</source>
+        <translation>Unsupported assembly format</translation>
+    </message>
+</context>
+<context>
     <name>U2::ExtractConsensusTask</name>
     <message>
         <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="274"/>
         <source>Export consensus to MSA</source>
         <translation>Экспортировать консенсус в MSA</translation>
     </message>
+    <message>
+        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="293"/>
+        <source>No sequences in alignment</source>
+        <translation>No sequences in alignment</translation>
+    </message>
 </context>
 <context>
     <name>U2::FindPatternListTask</name>
@@ -4846,7 +4828,7 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::FindQualifierTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2309"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2331"/>
         <source>Searching for a qualifier</source>
         <translation>Поиск квалификатора</translation>
     </message>
@@ -4854,22 +4836,22 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::FormatsMsaClipboardTask</name>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="126"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="120"/>
         <source>No temporary document.</source>
         <translation>No temporary document.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="130"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="124"/>
         <source>Cannot read the temporary file.</source>
         <translation>Cannot read the temporary file.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="153"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="147"/>
         <source>Invalid applications settings detected</source>
         <translation>Invalid applications settings detected</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="156"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="150"/>
         <source>Invalid users applications settings detected</source>
         <translation>Invalid users applications settings detected</translation>
     </message>
@@ -5083,10 +5065,6 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::MSAClustalOverviewCalculationTask</name>
     <message>
-        <source>MAlignmentObject is NULL</source>
-        <translation type="vanished">MAlignmentObject is NULL</translation>
-    </message>
-    <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="169"/>
         <source>MSAConsensusAlgorithmRegistry is NULL!</source>
         <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
@@ -5099,16 +5077,12 @@ Please, check external tools in the settings.</source>
     <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="174"/>
         <source>MSA is NULL</source>
-        <translation type="unfinished">MSA is NULL</translation>
+        <translation>MSA is NULL</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAConsensusOverviewCalculationTask</name>
     <message>
-        <source>MAlignmentObject is NULL</source>
-        <translation type="vanished">MAlignmentObject is NULL</translation>
-    </message>
-    <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="132"/>
         <source>MSAConsensusAlgorithmRegistry is NULL!</source>
         <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
@@ -5121,144 +5095,138 @@ Please, check external tools in the settings.</source>
     <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="137"/>
         <source>MSA is NULL</source>
-        <translation type="unfinished">MSA is NULL</translation>
-    </message>
-    <message>
-        <source>No sequences in MSA</source>
-        <translation type="vanished">No sequences in MSA</translation>
+        <translation>MSA is NULL</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAEditor</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="133"/>
+        <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="137"/>
+        <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="141"/>
+        <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="145"/>
+        <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="505"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="508"/>
         <source>Export as image</source>
         <translation>Экспортировать выравнивание в изображение</translation>
     </message>
     <message>
-        <source>Copy</source>
-        <translation type="vanished">Копирование</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="125"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="221"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="128"/>
+        <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="129"/>
+        <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="181"/>
+        <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="430"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="433"/>
         <source>Copy/Paste</source>
-        <translation type="unfinished"></translation>
+        <translation>Копирование/Вставка</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="435"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="438"/>
         <source>Edit</source>
         <translation>Редактирование</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="440"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="443"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="461"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="509"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="464"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="512"/>
         <source>Align</source>
         <translation>Выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="467"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="470"/>
         <source>Tree</source>
         <translation>Дерево</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="474"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="477"/>
         <source>Advanced</source>
         <translation>Дополнительные операции</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="485"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="488"/>
         <source>Add</source>
         <translation>Добавление</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="513"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="516"/>
         <source>Align sequence to this alignment</source>
         <translation>Выровнять последовательность на это выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="517"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="520"/>
         <source>Set this sequence as reference</source>
         <translation>Сделать референсной</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="521"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="524"/>
         <source>Unset reference sequence</source>
         <translation>Отменить референсную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="711"/>
+        <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"/>
         <source>A problem occurred during adding sequences. The multiple alignment is no more available.</source>
-        <translation type="unfinished"></translation>
+        <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="797"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="800"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="801"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="804"/>
         <source>Open file with sequences</source>
         <translation>Открыть</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="453"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="456"/>
         <source>View</source>
         <translation>Вид</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="149"/>
+        <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="153"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="156"/>
         <source>Build Tree</source>
         <translation>Построить дерево</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="367"/>
+        <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="479"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="482"/>
         <source>Statistics</source>
         <translation>Статистика</translation>
     </message>
@@ -5331,39 +5299,38 @@ Please, check external tools in the settings.</source>
     </message>
     <message>
         <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="74"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="81"/>
-        <source>Remove sequence</source>
-        <translation type="unfinished">Удалить последовательность</translation>
+        <source>Remove sequence(s)</source>
+        <translation>Удалить последовательность(и)</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="122"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="151"/>
+        <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="124"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="153"/>
+        <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="139"/>
+        <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="144"/>
+        <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="868"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="859"/>
         <source>Rename</source>
         <translation>Переименовать</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="869"/>
+        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="860"/>
         <source>New sequence name:</source>
         <translation>Новое имя:</translation>
     </message>
@@ -5379,317 +5346,300 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::MSAEditorSequenceArea</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="120"/>
-        <source>Remove selection</source>
-        <translation>Удалить выделение</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="133"/>
+        <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="154"/>
+        <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="161"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="160"/>
         <source>Remove all gaps</source>
         <translation>Удалить все пробелы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="165"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="164"/>
         <source>Sequence from file...</source>
         <translation>Добавить последовательность из файла...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="169"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="168"/>
         <source>Sequence from current project...</source>
         <translation>Добавить последовательность из проекта...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="173"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="172"/>
         <source>Sort sequences by name</source>
         <translation>Отсортировать последовательности по имени</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="187"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="186"/>
         <source>Replace selected rows with reverse-complement</source>
         <translation>Заменить выделенные строки обратно-комплементарными</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="191"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="190"/>
         <source>Replace selected character</source>
-        <translation type="unfinished"></translation>
+        <translation>Заменить выделенный символ</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="198"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="197"/>
         <source>Replace selected rows with reverse</source>
         <translation>Заменить выделенные строки обратными</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="202"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="201"/>
         <source>Replace selected rows with complement</source>
         <translation>Заменить выделенные строки комплементарными</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="234"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="352"/>
+        <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="298"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="577"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="633"/>
+        <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="444"/>
+        <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="446"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="449"/>
         <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="615"/>
+        <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="739"/>
+        <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="878"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="973"/>
+        <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="904"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="982"/>
+        <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="941"/>
+        <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="942"/>
+        <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="963"/>
+        <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="964"/>
+        <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="996"/>
+        <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="1021"/>
+        <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="1068"/>
+        <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="1099"/>
+        <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="1100"/>
+        <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="1133"/>
+        <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="1134"/>
+        <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="1157"/>
+        <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="1792"/>
+        <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="2013"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1939"/>
         <source>Custom schemes</source>
         <translation>Пользовательские схемы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2024"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1950"/>
         <source>Create new color scheme</source>
         <translation>Создать новую цветовую схему</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2032"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1958"/>
         <source>Highlighting</source>
         <translation>Выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2055"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1981"/>
         <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 type="unfinished"></translation>
+        <translation>Выравнивание было изменено. Алфавит переключен с "%1" на "%2". Используйте опцию "Назад" если хотите вернуться к исходному выравниванию.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2074"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2173"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2234"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2717"/>
+        <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"/>
         <source>NULL collapsible model!</source>
         <translation>NULL collapsible model!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2169"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2095"/>
         <source>NULL msa object!</source>
         <translation>NULL msa object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2282"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2208"/>
         <source>Warning!</source>
         <translation>Внимание!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2282"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2208"/>
         <source>You must select only one sequence for export.</source>
         <translation>Необходимо выбрать только одну последовательность для экспорта.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2324"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2250"/>
         <source>warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2324"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2250"/>
         <source>The document already in the project</source>
         <translation>Документ уже содержится в проекте</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2579"/>
+        <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 type="unfinished"></translation>
+        <translation>Невозможно вставить символ в выравнивание. Используйте символы A-Z или символы пробела ("Пробел", "-", "%1").</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2635"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2638"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2590"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2593"/>
         <source>Open file with sequences</source>
         <translation>Открыть</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2644"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2599"/>
         <source>A problem occurred during adding sequences. The multiple alignment is no more available.</source>
-        <translation type="unfinished"></translation>
+        <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="2734"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2689"/>
         <source>NULL Msa Object!</source>
         <translation>NULL Msa Object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2739"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2694"/>
         <source>NULL document!</source>
         <translation>NULL document!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2762"/>
+        <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="2764"/>
+        <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="2923"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2878"/>
         <source>Incorrect pointer to MSACollapsibleItemModel</source>
         <translation>Incorrect pointer to MSACollapsibleItemModel</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2128"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2054"/>
         <source>Go To</source>
         <translation>Выбор позиции</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="140"/>
+        <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="146"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="145"/>
         <source>Save subalignment</source>
         <translation>Сохранить область выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="150"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="149"/>
         <source>Save sequence</source>
         <translation>Сохранить последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="177"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="176"/>
         <source>Switch on/off collapsing</source>
         <translation>Включить/выключить режим схлопывания</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="182"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="181"/>
         <source>Update collapsed groups</source>
         <translation>Обновить схлопнутые группы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="616"/>
+        <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="2006"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1932"/>
         <source>Colors</source>
         <translation>Раскраска</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAEditorSimilarityColumn</name>
-    <message>
-        <source>-</source>
-        <translation type="vanished">-</translation>
-    </message>
-    <message>
-        <source>score</source>
-        <translation type="vanished">счет</translation>
-    </message>
-</context>
-<context>
     <name>U2::MSAEditorStatusWidget</name>
     <message>
         <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="46"/>
@@ -5755,29 +5705,29 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::MSAEditorTreeManager</name>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="112"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="113"/>
         <source>Calculate phy tree</source>
         <translation>Построение филогенетического дерева</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="113"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="114"/>
         <source>No algorithms for building phylogenetic tree are available.</source>
         <translation>Нет доступных алгоритмов для построения дерева.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="282"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="283"/>
         <source>Can not convert TreeViewer* to MSAEditorTreeViewer* in function MSAEditorTreeManager::sl_openTreeTaskFinished(Task* t)</source>
         <translation>Can not convert TreeViewer* to MSAEditorTreeViewer* in function MSAEditorTreeManager::sl_openTreeTaskFinished(Task* t)</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="317"/>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="320"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="318"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="321"/>
         <source>Select files to open...</source>
         <translation>Выберите файлы...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="379"/>
-        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="381"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="380"/>
+        <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp" line="382"/>
         <source>Incorrect reference to the MSAEditor</source>
         <translation>Incorrect reference to the MSAEditor</translation>
     </message>
@@ -5802,102 +5752,77 @@ Please, check external tools in the settings.</source>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="225"/>
         <source>Alignment Modification Confirmation</source>
-        <translation type="unfinished"></translation>
+        <translation>Подтверждение изменения выравнивания</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="226"/>
         <source>The alignment has been modified.
 
 All phylogenetic tree(s), opened in the same view, will be no more synchronized with the alignment.</source>
-        <translation type="unfinished"></translation>
+        <translation>Выравнивание было изменено.
+
+Все филогенетические деревья, синхронизованные с данным выравниванием более не будут синхронизованы.</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="229"/>
         <source>Do you want to confirm the modification?</source>
-        <translation type="unfinished"></translation>
+        <translation>Вы подтверждаете изменение?</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="232"/>
         <source>Confirm</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>The alignment has been modified</source>
-        <translation type="vanished">Список последовательностей был изменен</translation>
-    </message>
-    <message>
-        <source>The list of sequences in the alignment has been modified.
-If you confirm the modification, all phylogenetic tree(s), opened in the same view, will be no more synchronized with the alignment.</source>
-        <translation type="vanished">Список последовательностей в множественном выравнивании был изменен.
-Если вы подтвердите изменения, синхронизация между данным выравниванием и соответствующими филогенетическими деревьями будет потеряна.</translation>
+        <translation>Подтвердить</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp" line="231"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
-    <message>
-        <source>Confirm the modification</source>
-        <translation type="vanished">Применить изменения</translation>
-    </message>
 </context>
 <context>
     <name>U2::MSAEditorUI</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="914"/>
+        <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="923"/>
+        <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="932"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="942"/>
         <source>Paste</source>
-        <translation type="unfinished"></translation>
+        <translation>Вставить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="1066"/>
+        <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="991"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="1001"/>
         <source>Consensus</source>
         <translation>Консенсус</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAEditorUpdatedTabWidget</name>
-    <message>
-        <source>Add existing tree</source>
-        <translation type="vanished">Добавить существующее дерево</translation>
-    </message>
-</context>
-<context>
     <name>U2::MSAExportConsensusTab</name>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp" line="78"/>
+        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp" line="132"/>
         <source>Save file</source>
         <translation>Сохранить файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp" line="94"/>
+        <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 type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAGapOverviewCalculationTask</name>
-    <message>
-        <source>MSA is NULL</source>
-        <translation type="vanished">MSA is NULL</translation>
-    </message>
-    <message>
-        <source>No sequences in MSA</source>
-        <translation type="vanished">No sequences in MSA</translation>
+        <translation>A problem occurred during export consensus. The multiple alignment is no more available.</translation>
     </message>
 </context>
 <context>
@@ -5923,7 +5848,7 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
     <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="48"/>
         <source>MSA is NULL</source>
-        <translation type="unfinished">MSA is NULL</translation>
+        <translation>MSA is NULL</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="69"/>
@@ -5939,17 +5864,17 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAGraphOverview</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="102"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="103"/>
         <source>Multiple sequence alignment is too big. Overview is unavailable.</source>
         <translation>Множественное выравнивание слишком большое. Обзорные график недоступен.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="107"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="108"/>
         <source>Waiting...</source>
         <translation>Ожидание...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="116"/>
+        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="117"/>
         <source>Overview is rendering...</source>
         <translation>Панорама рассчитывается...</translation>
     </message>
@@ -5985,44 +5910,44 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSAHighlightingTab</name>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="80"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="91"/>
         <source>Use dots</source>
         <translation>Использовать точки</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="84"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="95"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="92"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="103"/>
         <source>Highlight characters with conservation level:</source>
         <translation>Подсветить символы с уровнем сохранения:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="95"/>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="96"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="106"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="107"/>
         <source> threshold</source>
         <translation> порог</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="109"/>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="255"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="120"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="286"/>
         <source>Threshold: %1%</source>
         <translation>Порог: %1%</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="137"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="148"/>
         <source>Color</source>
         <translation>Цвет</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="140"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="151"/>
         <source>Highlighting</source>
         <translation>Выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="233"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="264"/>
         <source>Hint: select a reference above</source>
         <translation>Подсказка: выберите референсную последовательность</translation>
     </message>
@@ -6043,7 +5968,7 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
         <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="245"/>
         <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="329"/>
         <source>MSA Collapsible Model is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>MSA Collapsible Model is NULL</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="278"/>
@@ -6243,14 +6168,14 @@ If you confirm the modification, all phylogenetic tree(s), opened in the same vi
 <context>
     <name>U2::MSASimpleOverview</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="101"/>
+        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="102"/>
         <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="149"/>
+        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="150"/>
         <source>Incorrect multiple alignment object!</source>
         <translation>Incorrect multiple alignment object!</translation>
     </message>
@@ -6281,16 +6206,16 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::MsaEditorSimilarityColumn</name>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="60"/>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="66"/>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="74"/>
+        <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"/>
         <source>-</source>
-        <translation type="unfinished">-</translation>
+        <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="117"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="119"/>
         <source>score</source>
-        <translation type="unfinished">счет</translation>
+        <translation>счет</translation>
     </message>
 </context>
 <context>
@@ -6298,22 +6223,22 @@ Simple overview is unavailable.</source>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="43"/>
         <source>Add existing tree</source>
-        <translation type="unfinished">Добавить существующее дерево</translation>
+        <translation>Добавить существующее дерево</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="54"/>
         <source>Close other tabs</source>
-        <translation type="unfinished">Закрыть все вкладки</translation>
+        <translation>Закрыть все вкладки</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="58"/>
         <source>Close all tabs</source>
-        <translation type="unfinished">Закрыть все вкладки</translation>
+        <translation>Закрыть все вкладки</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="62"/>
         <source>Close tab</source>
-        <translation type="unfinished">Закрыть вкладку</translation>
+        <translation>Закрыть вкладку</translation>
     </message>
 </context>
 <context>
@@ -6489,56 +6414,51 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::PairAlign</name>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="106"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="108"/>
         <source>Sequences</source>
         <translation>Последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="107"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="109"/>
         <source>Algorithm settings</source>
         <translation>Настройки алгоритма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="108"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="110"/>
         <source>Output settings</source>
         <translation>Выходные настройки</translation>
     </message>
     <message>
-        <source>Warning: Current alphabet does not correspond the requirements.</source>
-        <translation type="vanished">Предупреждение: текущий алфавит не соответствует требованиям.</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="155"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="156"/>
         <source>Pairwise alignment is not available for alignments with "%1" alphabet.</source>
-        <translation type="unfinished"></translation>
+        <translation>Парное выравнивание недоступно для выравниваний алфавита "%1".</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="199"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="218"/>
         <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="235"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="254"/>
         <source>Not defined</source>
         <translation>Не найдено</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="313"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="166"/>
         <source>Save file</source>
         <translation>Сохранить файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="313"/>
         <source>Clustal format (*.aln)</source>
-        <translation>Формат Clustal (*.aln)</translation>
+        <translation type="vanished">Формат Clustal (*.aln)</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="352"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="363"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="352"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="363"/>
         <source>Please, change the output file.</source>
         <translation>Измените выходной файл.</translation>
     </message>
@@ -6587,24 +6507,17 @@ Simple overview is unavailable.</source>
     </message>
 </context>
 <context>
-    <name>U2::PanViewRenderArea</name>
-    <message>
-        <source>[%1 %2]</source>
-        <translation type="vanished">[%1 %2]</translation>
-    </message>
-</context>
-<context>
     <name>U2::PanViewRenderer</name>
     <message>
         <location filename="../src/ov_sequence/view_rendering/PanViewRenderer.cpp" line="266"/>
         <source>[%1 %2]</source>
-        <translation type="unfinished">[%1 %2]</translation>
+        <translation>[%1 %2]</translation>
     </message>
 </context>
 <context>
     <name>U2::PrepareMsaClipboardDataTask</name>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="64"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="58"/>
         <source>Copy formatted alignment to the clipboard</source>
         <translation>Copy formatted alignment to the clipboard</translation>
     </message>
@@ -6639,42 +6552,42 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::SaveSelectedSequenceFromMSADialog</name>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="14"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="14"/>
         <source>Export Selected Sequence from Alignment</source>
-        <translation>Екпорт выделенных последовательностей</translation>
+        <translation>Экспорт выделенных последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="25"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="25"/>
         <source>Export to file</source>
         <translation>Экспорт в файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="35"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="42"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="42"/>
         <source>File format to use</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="54"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="54"/>
         <source>Add document to the project</source>
         <translation>Добавить документ в проект</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="64"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="64"/>
         <source>Gap characters ('-')</source>
         <translation>Символы пробела ('-')</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="70"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="70"/>
         <source>Keep</source>
         <translation>Оставить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ui/SaveSelectedSequenceFromMSADialog.ui" line="80"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialog.ui" line="80"/>
         <source>Trim</source>
         <translation>Убрать</translation>
     </message>
@@ -6682,17 +6595,17 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::SaveSelectedSequenceFromMSADialogController</name>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="42"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="45"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="43"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="63"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="59"/>
         <source>File name is empty!</source>
         <translation>Имя файла пусто!</translation>
     </message>
@@ -6846,32 +6759,32 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::SequenceInfo</name>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="86"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="94"/>
         <source>Common Statistics</source>
         <translation>Общая статистика</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="95"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="102"/>
         <source>Characters Occurrence</source>
         <translation>Characters Occurrence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="103"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="110"/>
         <source>Dinucleotides</source>
         <translation>Динуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="406"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="162"/>
         <source>Sequence context is NULL</source>
         <translation>Sequence context is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="407"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="163"/>
         <source>Sequence alphbet is NULL</source>
         <translation>Sequence alphbet is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="433"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="485"/>
         <source>%1</source>
         <translation>%1</translation>
     </message>
@@ -6926,113 +6839,113 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::SmithWatermanDialog</name>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="94"/>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="95"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="92"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="93"/>
         <source>No substitution matrices found.</source>
         <translation>Не найдены матрицы подстановки.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="78"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="76"/>
         <source>Remote run</source>
         <translation>Удаленный запуск</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="79"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="77"/>
         <source>Search</source>
         <translation>Искать</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="80"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="78"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="102"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="100"/>
         <source>No filter registry found.</source>
         <translation>No filter registry found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="109"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="107"/>
         <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="116"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="114"/>
         <source>No algorithm registry found.</source>
         <translation>No algorithm registry found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="286"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="284"/>
         <source>Enter pattern here</source>
         <translation>Введите паттерн</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="288"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="286"/>
         <source>Pattern length: %1</source>
         <translation>Длина паттерна: %1</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="327"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="325"/>
         <source>Add qualifier with corresponding pattern subsequences to result annotations</source>
         <translation>Добавьте квалификатор с соответствующими подпоследовательностями для результирующих аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="422"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="420"/>
         <source>Choose folder</source>
         <translation>Выбор папки</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="434"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="432"/>
         <source>Matrix not found.</source>
         <translation>Не найдена матрица подстановки.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="485"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="483"/>
         <source>Cannot create an annotation object. Please check settings.</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="510"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="508"/>
         <source>SmithWatermanTask</source>
         <translation>Поиск алгоритмом Смита-Ватермана</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="553"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="551"/>
         <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="583"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="581"/>
         <source>Algorithm is not found.</source>
         <translation>Алгоритм не найден.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="596"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="594"/>
         <source>Matrix %1 is not found.</source>
         <translation>Матрица %1 не найдена.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="629"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="627"/>
         <source>Filter is not found.</source>
         <translation>Фильтр не найден.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="646"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="644"/>
         <source>Internal error</source>
         <translation>Внутренняя ошибка</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="654"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="652"/>
         <source>Pattern is empty</source>
         <translation>Не указан паттерн</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="666"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="664"/>
         <source>Pattern contains unknown symbol</source>
         <translation>Паттерн содержит символы не входящие в алфавит последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="571"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="569"/>
         <source>Complement translation is not found.</source>
         <translation>Комплементарная трансляция не найдена.</translation>
     </message>
@@ -7040,7 +6953,7 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::SubalignmentToClipboardTask</name>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="252"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="242"/>
         <source>Copy formatted alignment to the clipboard</source>
         <translation>Copy formatted alignment to the clipboard</translation>
     </message>
@@ -7257,37 +7170,6 @@ Please, load the corresponding plugins.</source>
     </message>
 </context>
 <context>
-    <name>U2::UpdatedTabWidget</name>
-    <message>
-        <source>Refresh tab</source>
-        <translation type="vanished">Обновить вкладку</translation>
-    </message>
-    <message>
-        <source>Refresh all tabs</source>
-        <translation type="vanished">Обновить все вкладки</translation>
-    </message>
-    <message>
-        <source>Close other tabs</source>
-        <translation type="vanished">Закрыть все вкладки</translation>
-    </message>
-    <message>
-        <source>Close all tabs</source>
-        <translation type="vanished">Закрыть все вкладки</translation>
-    </message>
-    <message>
-        <source>Close tab</source>
-        <translation type="vanished">Закрыть вкладку</translation>
-    </message>
-    <message>
-        <source>Add horizontal splitter</source>
-        <translation type="vanished">Добавить горизонтальный разрыв</translation>
-    </message>
-    <message>
-        <source>Add vertical splitter</source>
-        <translation type="vanished">Добавить вертикальный разрыв</translation>
-    </message>
-</context>
-<context>
     <name>U2::WindowStepSelectorDialog</name>
     <message>
         <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="161"/>
@@ -7375,22 +7257,22 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>annotHighlightSettings</name>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui" line="14"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightSettings.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui" line="71"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightSettings.ui" line="71"/>
         <source>Show on translation</source>
         <translation>Показать на трансляции</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui" line="47"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightSettings.ui" line="47"/>
         <source>Show annotations</source>
         <translation>Показать аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/ui/AnnotHighlightSettings.ui" line="95"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightSettings.ui" line="95"/>
         <source>Show value of qualifier:</source>
         <translation>Показать значение квалификатора:</translation>
     </message>
diff --git a/src/include/3rdparty/sqlite3/sqlite3.h b/src/include/3rdparty/sqlite3/sqlite3.h
new file mode 100644
index 0000000..9e7d13b
--- /dev/null
+++ b/src/include/3rdparty/sqlite3/sqlite3.h
@@ -0,0 +1 @@
+#include "../../../libs_3rdparty/sqlite3/src/sqlite3.h"
\ No newline at end of file
diff --git a/src/include/3rdparty/zlib/zlib.h b/src/include/3rdparty/zlib/zlib.h
new file mode 100644
index 0000000..354877d
--- /dev/null
+++ b/src/include/3rdparty/zlib/zlib.h
@@ -0,0 +1,7 @@
+#ifdef UGENE_USE_BUNDLED_ZLIB
+#include "../../../libs_3rdparty/zlib/src/zlib.h"
+#else
+#include <zlib.h>
+#endif
+
+
diff --git a/src/include/U2Algorithm/ColorSchemeUtils.h b/src/include/U2Algorithm/ColorSchemeUtils.h
new file mode 100644
index 0000000..4e20628
--- /dev/null
+++ b/src/include/U2Algorithm/ColorSchemeUtils.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.h"
diff --git a/src/include/U2Algorithm/MSAColorScheme.h b/src/include/U2Algorithm/MSAColorScheme.h
deleted file mode 100644
index d0867cc..0000000
--- a/src/include/U2Algorithm/MSAColorScheme.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Algorithm/src/util_msaedit/MSAColorScheme.h"
diff --git a/src/include/U2Algorithm/MsaColorScheme.h b/src/include/U2Algorithm/MsaColorScheme.h
new file mode 100644
index 0000000..9c70779
--- /dev/null
+++ b/src/include/U2Algorithm/MsaColorScheme.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.h"
diff --git a/src/include/U2Algorithm/MsaHighlightingScheme.h b/src/include/U2Algorithm/MsaHighlightingScheme.h
new file mode 100644
index 0000000..5332e81
--- /dev/null
+++ b/src/include/U2Algorithm/MsaHighlightingScheme.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.h"
diff --git a/src/include/U2Core/CmdlineInOutTaskRunner.h b/src/include/U2Core/CmdlineInOutTaskRunner.h
new file mode 100644
index 0000000..0ab4792
--- /dev/null
+++ b/src/include/U2Core/CmdlineInOutTaskRunner.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.h"
diff --git a/src/include/U2Core/CmdlineTaskRunner.h b/src/include/U2Core/CmdlineTaskRunner.h
new file mode 100644
index 0000000..dfdaa09
--- /dev/null
+++ b/src/include/U2Core/CmdlineTaskRunner.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/tasks/CmdlineTaskRunner.h"
diff --git a/src/include/U2Core/SyncHttp.h b/src/include/U2Core/SyncHttp.h
new file mode 100644
index 0000000..beb3009
--- /dev/null
+++ b/src/include/U2Core/SyncHttp.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/SyncHttp.h"
\ No newline at end of file
diff --git a/src/include/U2Gui/EditableTreeView.h b/src/include/U2Gui/EditableTreeView.h
new file mode 100644
index 0000000..c7b72ea
--- /dev/null
+++ b/src/include/U2Gui/EditableTreeView.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Gui/src/util/project/EditableTreeView.h"
diff --git a/src/include/U2Gui/MultiClickMenu.h b/src/include/U2Gui/MultiClickMenu.h
new file mode 100644
index 0000000..2bcc372
--- /dev/null
+++ b/src/include/U2Gui/MultiClickMenu.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Gui/src/util/MultiClickMenu.h"
diff --git a/src/include/U2Gui/RegionSelectorWithExcludedRegion.h b/src/include/U2Gui/RegionSelectorWithExcludedRegion.h
new file mode 100644
index 0000000..43e1ea4
--- /dev/null
+++ b/src/include/U2Gui/RegionSelectorWithExcludedRegion.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.h"
diff --git a/src/include/U2Gui/SaveDocumentController.h b/src/include/U2Gui/SaveDocumentController.h
new file mode 100644
index 0000000..9d3729e
--- /dev/null
+++ b/src/include/U2Gui/SaveDocumentController.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Gui/src/util/SaveDocumentController.h"
diff --git a/src/include/U2Gui/SaveDocumentGroupController.h b/src/include/U2Gui/SaveDocumentGroupController.h
deleted file mode 100644
index 0eb17a9..0000000
--- a/src/include/U2Gui/SaveDocumentGroupController.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Gui/src/util/SaveDocumentGroupController.h"
diff --git a/src/include/U2Lang/DatasetFetcher.h b/src/include/U2Lang/DatasetFetcher.h
new file mode 100644
index 0000000..3d69ec8
--- /dev/null
+++ b/src/include/U2Lang/DatasetFetcher.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Lang/src/support/DatasetFetcher.h"
diff --git a/src/include/U2Remote/DistributedComputingUtil.h b/src/include/U2Remote/DistributedComputingUtil.h
deleted file mode 100644
index a8a7a5a..0000000
--- a/src/include/U2Remote/DistributedComputingUtil.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/DistributedComputingUtil.h"
diff --git a/src/include/U2Remote/PingTask.h b/src/include/U2Remote/PingTask.h
deleted file mode 100644
index 98b1cdc..0000000
--- a/src/include/U2Remote/PingTask.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/PingTask.h"
diff --git a/src/include/U2Remote/ProtocolInfo.h b/src/include/U2Remote/ProtocolInfo.h
deleted file mode 100644
index 9eb8b93..0000000
--- a/src/include/U2Remote/ProtocolInfo.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/ProtocolInfo.h"
diff --git a/src/include/U2Remote/ProtocolUI.h b/src/include/U2Remote/ProtocolUI.h
deleted file mode 100644
index e8d6cb9..0000000
--- a/src/include/U2Remote/ProtocolUI.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/ProtocolUI.h"
diff --git a/src/include/U2Remote/RemoteMachine.h b/src/include/U2Remote/RemoteMachine.h
deleted file mode 100644
index b5001dd..0000000
--- a/src/include/U2Remote/RemoteMachine.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/RemoteMachine.h"
diff --git a/src/include/U2Remote/RemoteMachineMonitor.h b/src/include/U2Remote/RemoteMachineMonitor.h
deleted file mode 100644
index 27c81a2..0000000
--- a/src/include/U2Remote/RemoteMachineMonitor.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/RemoteMachineMonitor.h"
diff --git a/src/include/U2Remote/RemoteMachineMonitorDialogController.h b/src/include/U2Remote/RemoteMachineMonitorDialogController.h
deleted file mode 100644
index 24676bb..0000000
--- a/src/include/U2Remote/RemoteMachineMonitorDialogController.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/RemoteMachineMonitorDialogController.h"
diff --git a/src/include/U2Remote/RemoteMachineScanner.h b/src/include/U2Remote/RemoteMachineScanner.h
deleted file mode 100644
index a96b8e1..0000000
--- a/src/include/U2Remote/RemoteMachineScanner.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/RemoteMachineScanner.h"
diff --git a/src/include/U2Remote/RemoteMachineTasks.h b/src/include/U2Remote/RemoteMachineTasks.h
deleted file mode 100644
index 5836ed2..0000000
--- a/src/include/U2Remote/RemoteMachineTasks.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/RemoteMachineTasks.h"
diff --git a/src/include/U2Remote/RemoteWorkflowRunTask.h b/src/include/U2Remote/RemoteWorkflowRunTask.h
deleted file mode 100644
index e3e77b3..0000000
--- a/src/include/U2Remote/RemoteWorkflowRunTask.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/RemoteWorkflowRunTask.h"
diff --git a/src/include/U2Remote/Serializable.h b/src/include/U2Remote/Serializable.h
deleted file mode 100644
index eb0121e..0000000
--- a/src/include/U2Remote/Serializable.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/Serializable.h"
diff --git a/src/include/U2Remote/SerializeUtils.h b/src/include/U2Remote/SerializeUtils.h
deleted file mode 100644
index 79bb3a7..0000000
--- a/src/include/U2Remote/SerializeUtils.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/SerializeUtils.h"
diff --git a/src/include/U2Remote/SynchHttp.h b/src/include/U2Remote/SynchHttp.h
deleted file mode 100644
index 8a945e9..0000000
--- a/src/include/U2Remote/SynchHttp.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/SynchHttp.h"
diff --git a/src/include/U2Remote/TaskDistributor.h b/src/include/U2Remote/TaskDistributor.h
deleted file mode 100644
index f773cdc..0000000
--- a/src/include/U2Remote/TaskDistributor.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Remote/src/TaskDistributor.h"
diff --git a/src/include/U2View/EditAnnotationDialogController.h b/src/include/U2View/EditAnnotationDialogController.h
deleted file mode 100644
index 1d5ca94..0000000
--- a/src/include/U2View/EditAnnotationDialogController.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_sequence/EditAnnotationDialogController.h"
diff --git a/src/libs_3rdparty/breakpad/CMakeLists.txt b/src/libs_3rdparty/breakpad/CMakeLists.txt
new file mode 100644
index 0000000..31f0f63
--- /dev/null
+++ b/src/libs_3rdparty/breakpad/CMakeLists.txt
@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.4)
+project(breakpad)
+
+include_directories(src)
+
+
+file(GLOB COMMON_SRCS src/client/*.cc src/common/*.cc src/common/*.c)
+file(GLOB COMMON_HDRS src/client/*.h src/common/*.h)
+
+if (WIN32)
+    file(GLOB_RECURSE SRCS src/client/windows/*.cc src/common/windows/*.cc)
+    file(GLOB_RECURSE HDRS src/client/windows/*.h src/common/windows/*.h)
+elseif (APPLE)
+    file(GLOB_RECURSE SRCS src/client/mac/*.cc src/common/mac/*.cc src/common/mac/*.mm)
+    file(GLOB_RECURSE HDRS src/client/mac/*.h src/common/mac/*.h)
+elseif (UNIX)
+    file(GLOB_RECURSE SRCS src/client/linux/*.cc src/common/linux/*.cc)
+    file(GLOB_RECURSE HDRS src/client/linux/*.h src/common/linux/*.h)
+endif ()
+
+add_library(breakpad SHARED ${COMMON_HDRS} ${HDRS} ${COMMON_SRCS} ${SRCS})
+
+target_link_libraries(breakpad)
+
+if (APPLE)
+    target_link_libraries(breakpad "-framework CoreFoundation")
+    target_link_libraries(breakpad "-framework Security")
+endif ()
diff --git a/src/libs_3rdparty/breakpad/breakpad.pri b/src/libs_3rdparty/breakpad/breakpad.pri
index 7ed4b98..19a5b5e 100644
--- a/src/libs_3rdparty/breakpad/breakpad.pri
+++ b/src/libs_3rdparty/breakpad/breakpad.pri
@@ -8,11 +8,6 @@ TARGET = breakpad
 DESTDIR = ../../_release
 QT -= gui
 
-!win32 {
-    QMAKE_CC = g++
-    QMAKE_CXX = g++
-}
-
 !debug_and_release|build_pass {
     CONFIG(debug, debug|release) {
         TARGET = breakpadd
diff --git a/src/libs_3rdparty/gtest/gtest.pri b/src/libs_3rdparty/gtest/gtest.pri
deleted file mode 100644
index 65caa77..0000000
--- a/src/libs_3rdparty/gtest/gtest.pri
+++ /dev/null
@@ -1,47 +0,0 @@
-# include (gtest.pri)
-include( ../../ugene_globals.pri )
-UGENE_RELATIVE_DESTDIR = ''
-
-TARGET = gtest
-TEMPLATE = lib
-CONFIG +=thread debug_and_release warn_off
-INCLUDEPATH += src
-LIBS += -L../../_release
-
-DEFINES+=GTEST_CREATE_SHARED_LIBRARY=1
-#DEFINES+=GTEST_LINKED_AS_SHARED_LIBRARY=1
-
-!debug_and_release|build_pass {
-
-    CONFIG(debug, debug|release) {
-        TARGET = gtestd
-        DEFINES+=_DEBUG
-        CONFIG +=console
-        DESTDIR=../../_debug/
-        OBJECTS_DIR=_tmp/obj/debug
-        LIBS -= -L../../_release 
-        LIBS += -L../../_debug
-    }
-
-    CONFIG(release, debug|release) {
-        TARGET = gtest
-        DEFINES+=NDEBUG
-        DESTDIR=../../_release/
-        OBJECTS_DIR=_tmp/obj/release
-    }
-}
-
-
-win32 {
-
-    QMAKE_CXXFLAGS_WARN_ON = -W3
-    QMAKE_CFLAGS_WARN_ON = -W3
-
-    QMAKE_MSVC_PROJECT_NAME=lib_3rd_gtest
-}
-
-
-unix {
-    target.path = $$UGENE_INSTALL_DIR/$$UGENE_RELATIVE_DESTDIR
-    INSTALLS += target
-}
diff --git a/src/libs_3rdparty/gtest/gtest.pro b/src/libs_3rdparty/gtest/gtest.pro
deleted file mode 100644
index fce7df9..0000000
--- a/src/libs_3rdparty/gtest/gtest.pro
+++ /dev/null
@@ -1,37 +0,0 @@
-include (gtest.pri)
-# Input
-HEADERS += src/gtest/gtest-death-test.h \
-           src/gtest/gtest-message.h \
-           src/gtest/gtest-param-test.h \
-           src/gtest/gtest-printers.h \
-           src/gtest/gtest-spi.h \
-           src/gtest/gtest-test-part.h \
-           src/gtest/gtest-typed-test.h \
-           src/gtest/gtest.h \
-           src/gtest/gtest_pred_impl.h \
-           src/gtest/gtest_prod.h \
-           src/src/gtest-internal-inl.h \
-           src/test/production.h \
-           src/gtest/internal/gtest-death-test-internal.h \
-           src/gtest/internal/gtest-filepath.h \
-           src/gtest/internal/gtest-internal.h \
-           src/gtest/internal/gtest-linked_ptr.h \
-           src/gtest/internal/gtest-param-util-generated.h \
-           src/gtest/internal/gtest-param-util.h \
-           src/gtest/internal/gtest-port.h \
-           src/gtest/internal/gtest-string.h \
-           src/gtest/internal/gtest-tuple.h \
-           src/gtest/internal/gtest-type-util.h
-
-SOURCES += src/gtest-all.cc \
-           src/gtest_main.cc \
-           src/gtest_prod_test.cc \
-           src/gtest_unittest.cc \
-           src/src/gtest-death-test.cc \
-           src/src/gtest-filepath.cc \
-           src/src/gtest-port.cc \
-           src/src/gtest-printers.cc \
-           src/src/gtest-test-part.cc \
-           src/src/gtest-typed-test.cc \
-           src/src/gtest.cc \
-           src/test/production.cc
diff --git a/src/libs_3rdparty/gtest/src/gtest-all.cc b/src/libs_3rdparty/gtest/src/gtest-all.cc
deleted file mode 100644
index 0a9cee5..0000000
--- a/src/libs_3rdparty/gtest/src/gtest-all.cc
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2008, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: mheule at google.com (Markus Heule)
-//
-// Google C++ Testing Framework (Google Test)
-//
-// Sometimes it's desirable to build Google Test by compiling a single file.
-// This file serves this purpose.
-
-// This line ensures that gtest.h can be compiled on its own, even
-// when it's fused.
-#include "gtest/gtest.h"
-
-// The following lines pull in the real gtest *.cc files.
-#include "src/gtest.cc"
-#include "src/gtest-death-test.cc"
-#include "src/gtest-filepath.cc"
-#include "src/gtest-port.cc"
-#include "src/gtest-printers.cc"
-#include "src/gtest-test-part.cc"
-#include "src/gtest-typed-test.cc"
diff --git a/src/libs_3rdparty/gtest/src/gtest/gtest-death-test.h b/src/libs_3rdparty/gtest/src/gtest/gtest-death-test.h
deleted file mode 100644
index a27883f..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/gtest-death-test.h
+++ /dev/null
@@ -1,283 +0,0 @@
-// Copyright 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-//
-// The Google C++ Testing Framework (Google Test)
-//
-// This header file defines the public API for death tests.  It is
-// #included by gtest.h so a user doesn't need to include this
-// directly.
-
-#ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
-#define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
-
-#include "gtest/internal/gtest-death-test-internal.h"
-
-namespace testing {
-
-// This flag controls the style of death tests.  Valid values are "threadsafe",
-// meaning that the death test child process will re-execute the test binary
-// from the start, running only a single death test, or "fast",
-// meaning that the child process will execute the test logic immediately
-// after forking.
-GTEST_DECLARE_string_(death_test_style);
-
-#if GTEST_HAS_DEATH_TEST
-
-// The following macros are useful for writing death tests.
-
-// Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is
-// executed:
-//
-//   1. It generates a warning if there is more than one active
-//   thread.  This is because it's safe to fork() or clone() only
-//   when there is a single thread.
-//
-//   2. The parent process clone()s a sub-process and runs the death
-//   test in it; the sub-process exits with code 0 at the end of the
-//   death test, if it hasn't exited already.
-//
-//   3. The parent process waits for the sub-process to terminate.
-//
-//   4. The parent process checks the exit code and error message of
-//   the sub-process.
-//
-// Examples:
-//
-//   ASSERT_DEATH(server.SendMessage(56, "Hello"), "Invalid port number");
-//   for (int i = 0; i < 5; i++) {
-//     EXPECT_DEATH(server.ProcessRequest(i),
-//                  "Invalid request .* in ProcessRequest()")
-//         << "Failed to die on request " << i);
-//   }
-//
-//   ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting");
-//
-//   bool KilledBySIGHUP(int exit_code) {
-//     return WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGHUP;
-//   }
-//
-//   ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, "Hanging up!");
-//
-// On the regular expressions used in death tests:
-//
-//   On POSIX-compliant systems (*nix), we use the <regex.h> library,
-//   which uses the POSIX extended regex syntax.
-//
-//   On other platforms (e.g. Windows), we only support a simple regex
-//   syntax implemented as part of Google Test.  This limited
-//   implementation should be enough most of the time when writing
-//   death tests; though it lacks many features you can find in PCRE
-//   or POSIX extended regex syntax.  For example, we don't support
-//   union ("x|y"), grouping ("(xy)"), brackets ("[xy]"), and
-//   repetition count ("x{5,7}"), among others.
-//
-//   Below is the syntax that we do support.  We chose it to be a
-//   subset of both PCRE and POSIX extended regex, so it's easy to
-//   learn wherever you come from.  In the following: 'A' denotes a
-//   literal character, period (.), or a single \\ escape sequence;
-//   'x' and 'y' denote regular expressions; 'm' and 'n' are for
-//   natural numbers.
-//
-//     c     matches any literal character c
-//     \\d   matches any decimal digit
-//     \\D   matches any character that's not a decimal digit
-//     \\f   matches \f
-//     \\n   matches \n
-//     \\r   matches \r
-//     \\s   matches any ASCII whitespace, including \n
-//     \\S   matches any character that's not a whitespace
-//     \\t   matches \t
-//     \\v   matches \v
-//     \\w   matches any letter, _, or decimal digit
-//     \\W   matches any character that \\w doesn't match
-//     \\c   matches any literal character c, which must be a punctuation
-//     .     matches any single character except \n
-//     A?    matches 0 or 1 occurrences of A
-//     A*    matches 0 or many occurrences of A
-//     A+    matches 1 or many occurrences of A
-//     ^     matches the beginning of a string (not that of each line)
-//     $     matches the end of a string (not that of each line)
-//     xy    matches x followed by y
-//
-//   If you accidentally use PCRE or POSIX extended regex features
-//   not implemented by us, you will get a run-time failure.  In that
-//   case, please try to rewrite your regular expression within the
-//   above syntax.
-//
-//   This implementation is *not* meant to be as highly tuned or robust
-//   as a compiled regex library, but should perform well enough for a
-//   death test, which already incurs significant overhead by launching
-//   a child process.
-//
-// Known caveats:
-//
-//   A "threadsafe" style death test obtains the path to the test
-//   program from argv[0] and re-executes it in the sub-process.  For
-//   simplicity, the current implementation doesn't search the PATH
-//   when launching the sub-process.  This means that the user must
-//   invoke the test program via a path that contains at least one
-//   path separator (e.g. path/to/foo_test and
-//   /absolute/path/to/bar_test are fine, but foo_test is not).  This
-//   is rarely a problem as people usually don't put the test binary
-//   directory in PATH.
-//
-// TODO(wan at google.com): make thread-safe death tests search the PATH.
-
-// Asserts that a given statement causes the program to exit, with an
-// integer exit status that satisfies predicate, and emitting error output
-// that matches regex.
-# define ASSERT_EXIT(statement, predicate, regex) \
-    GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_)
-
-// Like ASSERT_EXIT, but continues on to successive tests in the
-// test case, if any:
-# define EXPECT_EXIT(statement, predicate, regex) \
-    GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_)
-
-// Asserts that a given statement causes the program to exit, either by
-// explicitly exiting with a nonzero exit code or being killed by a
-// signal, and emitting error output that matches regex.
-# define ASSERT_DEATH(statement, regex) \
-    ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)
-
-// Like ASSERT_DEATH, but continues on to successive tests in the
-// test case, if any:
-# define EXPECT_DEATH(statement, regex) \
-    EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)
-
-// Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*:
-
-// Tests that an exit code describes a normal exit with a given exit code.
-class GTEST_API_ ExitedWithCode {
- public:
-  explicit ExitedWithCode(int exit_code);
-  bool operator()(int exit_status) const;
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ExitedWithCode& other);
-
-  const int exit_code_;
-};
-
-# if !GTEST_OS_WINDOWS
-// Tests that an exit code describes an exit due to termination by a
-// given signal.
-class GTEST_API_ KilledBySignal {
- public:
-  explicit KilledBySignal(int signum);
-  bool operator()(int exit_status) const;
- private:
-  const int signum_;
-};
-# endif  // !GTEST_OS_WINDOWS
-
-// EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode.
-// The death testing framework causes this to have interesting semantics,
-// since the sideeffects of the call are only visible in opt mode, and not
-// in debug mode.
-//
-// In practice, this can be used to test functions that utilize the
-// LOG(DFATAL) macro using the following style:
-//
-// int DieInDebugOr12(int* sideeffect) {
-//   if (sideeffect) {
-//     *sideeffect = 12;
-//   }
-//   LOG(DFATAL) << "death";
-//   return 12;
-// }
-//
-// TEST(TestCase, TestDieOr12WorksInDgbAndOpt) {
-//   int sideeffect = 0;
-//   // Only asserts in dbg.
-//   EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), "death");
-//
-// #ifdef NDEBUG
-//   // opt-mode has sideeffect visible.
-//   EXPECT_EQ(12, sideeffect);
-// #else
-//   // dbg-mode no visible sideeffect.
-//   EXPECT_EQ(0, sideeffect);
-// #endif
-// }
-//
-// This will assert that DieInDebugReturn12InOpt() crashes in debug
-// mode, usually due to a DCHECK or LOG(DFATAL), but returns the
-// appropriate fallback value (12 in this case) in opt mode. If you
-// need to test that a function has appropriate side-effects in opt
-// mode, include assertions against the side-effects.  A general
-// pattern for this is:
-//
-// EXPECT_DEBUG_DEATH({
-//   // Side-effects here will have an effect after this statement in
-//   // opt mode, but none in debug mode.
-//   EXPECT_EQ(12, DieInDebugOr12(&sideeffect));
-// }, "death");
-//
-# ifdef NDEBUG
-
-#  define EXPECT_DEBUG_DEATH(statement, regex) \
-  do { statement; } while (::testing::internal::AlwaysFalse())
-
-#  define ASSERT_DEBUG_DEATH(statement, regex) \
-  do { statement; } while (::testing::internal::AlwaysFalse())
-
-# else
-
-#  define EXPECT_DEBUG_DEATH(statement, regex) \
-  EXPECT_DEATH(statement, regex)
-
-#  define ASSERT_DEBUG_DEATH(statement, regex) \
-  ASSERT_DEATH(statement, regex)
-
-# endif  // NDEBUG for EXPECT_DEBUG_DEATH
-#endif  // GTEST_HAS_DEATH_TEST
-
-// EXPECT_DEATH_IF_SUPPORTED(statement, regex) and
-// ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if
-// death tests are supported; otherwise they just issue a warning.  This is
-// useful when you are combining death test assertions with normal test
-// assertions in one test.
-#if GTEST_HAS_DEATH_TEST
-# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
-    EXPECT_DEATH(statement, regex)
-# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \
-    ASSERT_DEATH(statement, regex)
-#else
-# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
-    GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, )
-# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \
-    GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return)
-#endif
-
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/gtest-message.h b/src/libs_3rdparty/gtest/src/gtest/gtest-message.h
deleted file mode 100644
index 9b7142f..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/gtest-message.h
+++ /dev/null
@@ -1,230 +0,0 @@
-// Copyright 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-//
-// The Google C++ Testing Framework (Google Test)
-//
-// This header file defines the Message class.
-//
-// IMPORTANT NOTE: Due to limitation of the C++ language, we have to
-// leave some internal implementation details in this header file.
-// They are clearly marked by comments like this:
-//
-//   // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-//
-// Such code is NOT meant to be used by a user directly, and is subject
-// to CHANGE WITHOUT NOTICE.  Therefore DO NOT DEPEND ON IT in a user
-// program!
-
-#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
-#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
-
-#include <limits>
-
-#include "gtest/internal/gtest-string.h"
-#include "gtest/internal/gtest-internal.h"
-
-namespace testing {
-
-// The Message class works like an ostream repeater.
-//
-// Typical usage:
-//
-//   1. You stream a bunch of values to a Message object.
-//      It will remember the text in a stringstream.
-//   2. Then you stream the Message object to an ostream.
-//      This causes the text in the Message to be streamed
-//      to the ostream.
-//
-// For example;
-//
-//   testing::Message foo;
-//   foo << 1 << " != " << 2;
-//   std::cout << foo;
-//
-// will print "1 != 2".
-//
-// Message is not intended to be inherited from.  In particular, its
-// destructor is not virtual.
-//
-// Note that stringstream behaves differently in gcc and in MSVC.  You
-// can stream a NULL char pointer to it in the former, but not in the
-// latter (it causes an access violation if you do).  The Message
-// class hides this difference by treating a NULL char pointer as
-// "(null)".
-class GTEST_API_ Message {
- private:
-  // The type of basic IO manipulators (endl, ends, and flush) for
-  // narrow streams.
-  typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&);
-
- public:
-  // Constructs an empty Message.
-  // We allocate the stringstream separately because otherwise each use of
-  // ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's
-  // stack frame leading to huge stack frames in some cases; gcc does not reuse
-  // the stack space.
-  Message() : ss_(new ::std::stringstream) {
-    // By default, we want there to be enough precision when printing
-    // a double to a Message.
-    *ss_ << std::setprecision(std::numeric_limits<double>::digits10 + 2);
-  }
-
-  // Copy constructor.
-  Message(const Message& msg) : ss_(new ::std::stringstream) {  // NOLINT
-    *ss_ << msg.GetString();
-  }
-
-  // Constructs a Message from a C-string.
-  explicit Message(const char* str) : ss_(new ::std::stringstream) {
-    *ss_ << str;
-  }
-
-#if GTEST_OS_SYMBIAN
-  // Streams a value (either a pointer or not) to this object.
-  template <typename T>
-  inline Message& operator <<(const T& value) {
-    StreamHelper(typename internal::is_pointer<T>::type(), value);
-    return *this;
-  }
-#else
-  // Streams a non-pointer value to this object.
-  template <typename T>
-  inline Message& operator <<(const T& val) {
-    ::GTestStreamToHelper(ss_.get(), val);
-    return *this;
-  }
-
-  // Streams a pointer value to this object.
-  //
-  // This function is an overload of the previous one.  When you
-  // stream a pointer to a Message, this definition will be used as it
-  // is more specialized.  (The C++ Standard, section
-  // [temp.func.order].)  If you stream a non-pointer, then the
-  // previous definition will be used.
-  //
-  // The reason for this overload is that streaming a NULL pointer to
-  // ostream is undefined behavior.  Depending on the compiler, you
-  // may get "0", "(nil)", "(null)", or an access violation.  To
-  // ensure consistent result across compilers, we always treat NULL
-  // as "(null)".
-  template <typename T>
-  inline Message& operator <<(T* const& pointer) {  // NOLINT
-    if (pointer == NULL) {
-      *ss_ << "(null)";
-    } else {
-      ::GTestStreamToHelper(ss_.get(), pointer);
-    }
-    return *this;
-  }
-#endif  // GTEST_OS_SYMBIAN
-
-  // Since the basic IO manipulators are overloaded for both narrow
-  // and wide streams, we have to provide this specialized definition
-  // of operator <<, even though its body is the same as the
-  // templatized version above.  Without this definition, streaming
-  // endl or other basic IO manipulators to Message will confuse the
-  // compiler.
-  Message& operator <<(BasicNarrowIoManip val) {
-    *ss_ << val;
-    return *this;
-  }
-
-  // Instead of 1/0, we want to see true/false for bool values.
-  Message& operator <<(bool b) {
-    return *this << (b ? "true" : "false");
-  }
-
-  // These two overloads allow streaming a wide C string to a Message
-  // using the UTF-8 encoding.
-  Message& operator <<(const wchar_t* wide_c_str) {
-    return *this << internal::String::ShowWideCString(wide_c_str);
-  }
-  Message& operator <<(wchar_t* wide_c_str) {
-    return *this << internal::String::ShowWideCString(wide_c_str);
-  }
-
-#if GTEST_HAS_STD_WSTRING
-  // Converts the given wide string to a narrow string using the UTF-8
-  // encoding, and streams the result to this Message object.
-  Message& operator <<(const ::std::wstring& wstr);
-#endif  // GTEST_HAS_STD_WSTRING
-
-#if GTEST_HAS_GLOBAL_WSTRING
-  // Converts the given wide string to a narrow string using the UTF-8
-  // encoding, and streams the result to this Message object.
-  Message& operator <<(const ::wstring& wstr);
-#endif  // GTEST_HAS_GLOBAL_WSTRING
-
-  // Gets the text streamed to this object so far as a String.
-  // Each '\0' character in the buffer is replaced with "\\0".
-  //
-  // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-  internal::String GetString() const {
-    return internal::StringStreamToString(ss_.get());
-  }
-
- private:
-
-#if GTEST_OS_SYMBIAN
-  // These are needed as the Nokia Symbian Compiler cannot decide between
-  // const T& and const T* in a function template. The Nokia compiler _can_
-  // decide between class template specializations for T and T*, so a
-  // tr1::type_traits-like is_pointer works, and we can overload on that.
-  template <typename T>
-  inline void StreamHelper(internal::true_type /*dummy*/, T* pointer) {
-    if (pointer == NULL) {
-      *ss_ << "(null)";
-    } else {
-      ::GTestStreamToHelper(ss_.get(), pointer);
-    }
-  }
-  template <typename T>
-  inline void StreamHelper(internal::false_type /*dummy*/, const T& value) {
-    ::GTestStreamToHelper(ss_.get(), value);
-  }
-#endif  // GTEST_OS_SYMBIAN
-
-  // We'll hold the text streamed to this object here.
-  const internal::scoped_ptr< ::std::stringstream> ss_;
-
-  // We declare (but don't implement) this to prevent the compiler
-  // from implementing the assignment operator.
-  void operator=(const Message&);
-};
-
-// Streams a Message to an ostream.
-inline std::ostream& operator <<(std::ostream& os, const Message& sb) {
-  return os << sb.GetString();
-}
-
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/gtest-param-test.h b/src/libs_3rdparty/gtest/src/gtest/gtest-param-test.h
deleted file mode 100644
index 6407cfd..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/gtest-param-test.h
+++ /dev/null
@@ -1,1421 +0,0 @@
-// This file was GENERATED by command:
-//     pump.py gtest-param-test.h.pump
-// DO NOT EDIT BY HAND!!!
-
-// Copyright 2008, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Authors: vladl at google.com (Vlad Losev)
-//
-// Macros and functions for implementing parameterized tests
-// in Google C++ Testing Framework (Google Test)
-//
-// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
-//
-#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
-#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
-
-
-// Value-parameterized tests allow you to test your code with different
-// parameters without writing multiple copies of the same test.
-//
-// Here is how you use value-parameterized tests:
-
-#if 0
-
-// To write value-parameterized tests, first you should define a fixture
-// class. It is usually derived from testing::TestWithParam<T> (see below for
-// another inheritance scheme that's sometimes useful in more complicated
-// class hierarchies), where the type of your parameter values.
-// TestWithParam<T> is itself derived from testing::Test. T can be any
-// copyable type. If it's a raw pointer, you are responsible for managing the
-// lifespan of the pointed values.
-
-class FooTest : public ::testing::TestWithParam<const char*> {
-  // You can implement all the usual class fixture members here.
-};
-
-// Then, use the TEST_P macro to define as many parameterized tests
-// for this fixture as you want. The _P suffix is for "parameterized"
-// or "pattern", whichever you prefer to think.
-
-TEST_P(FooTest, DoesBlah) {
-  // Inside a test, access the test parameter with the GetParam() method
-  // of the TestWithParam<T> class:
-  EXPECT_TRUE(foo.Blah(GetParam()));
-  ...
-}
-
-TEST_P(FooTest, HasBlahBlah) {
-  ...
-}
-
-// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test
-// case with any set of parameters you want. Google Test defines a number
-// of functions for generating test parameters. They return what we call
-// (surprise!) parameter generators. Here is a  summary of them, which
-// are all in the testing namespace:
-//
-//
-//  Range(begin, end [, step]) - Yields values {begin, begin+step,
-//                               begin+step+step, ...}. The values do not
-//                               include end. step defaults to 1.
-//  Values(v1, v2, ..., vN)    - Yields values {v1, v2, ..., vN}.
-//  ValuesIn(container)        - Yields values from a C-style array, an STL
-//  ValuesIn(begin,end)          container, or an iterator range [begin, end).
-//  Bool()                     - Yields sequence {false, true}.
-//  Combine(g1, g2, ..., gN)   - Yields all combinations (the Cartesian product
-//                               for the math savvy) of the values generated
-//                               by the N generators.
-//
-// For more details, see comments at the definitions of these functions below
-// in this file.
-//
-// The following statement will instantiate tests from the FooTest test case
-// each with parameter values "meeny", "miny", and "moe".
-
-INSTANTIATE_TEST_CASE_P(InstantiationName,
-                        FooTest,
-                        Values("meeny", "miny", "moe"));
-
-// To distinguish different instances of the pattern, (yes, you
-// can instantiate it more then once) the first argument to the
-// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the
-// actual test case name. Remember to pick unique prefixes for different
-// instantiations. The tests from the instantiation above will have
-// these names:
-//
-//    * InstantiationName/FooTest.DoesBlah/0 for "meeny"
-//    * InstantiationName/FooTest.DoesBlah/1 for "miny"
-//    * InstantiationName/FooTest.DoesBlah/2 for "moe"
-//    * InstantiationName/FooTest.HasBlahBlah/0 for "meeny"
-//    * InstantiationName/FooTest.HasBlahBlah/1 for "miny"
-//    * InstantiationName/FooTest.HasBlahBlah/2 for "moe"
-//
-// You can use these names in --gtest_filter.
-//
-// This statement will instantiate all tests from FooTest again, each
-// with parameter values "cat" and "dog":
-
-const char* pets[] = {"cat", "dog"};
-INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets));
-
-// The tests from the instantiation above will have these names:
-//
-//    * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat"
-//    * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog"
-//    * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat"
-//    * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog"
-//
-// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests
-// in the given test case, whether their definitions come before or
-// AFTER the INSTANTIATE_TEST_CASE_P statement.
-//
-// Please also note that generator expressions (including parameters to the
-// generators) are evaluated in InitGoogleTest(), after main() has started.
-// This allows the user on one hand, to adjust generator parameters in order
-// to dynamically determine a set of tests to run and on the other hand,
-// give the user a chance to inspect the generated tests with Google Test
-// reflection API before RUN_ALL_TESTS() is executed.
-//
-// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc
-// for more examples.
-//
-// In the future, we plan to publish the API for defining new parameter
-// generators. But for now this interface remains part of the internal
-// implementation and is subject to change.
-//
-//
-// A parameterized test fixture must be derived from testing::Test and from
-// testing::WithParamInterface<T>, where T is the type of the parameter
-// values. Inheriting from TestWithParam<T> satisfies that requirement because
-// TestWithParam<T> inherits from both Test and WithParamInterface. In more
-// complicated hierarchies, however, it is occasionally useful to inherit
-// separately from Test and WithParamInterface. For example:
-
-class BaseTest : public ::testing::Test {
-  // You can inherit all the usual members for a non-parameterized test
-  // fixture here.
-};
-
-class DerivedTest : public BaseTest, public ::testing::WithParamInterface<int> {
-  // The usual test fixture members go here too.
-};
-
-TEST_F(BaseTest, HasFoo) {
-  // This is an ordinary non-parameterized test.
-}
-
-TEST_P(DerivedTest, DoesBlah) {
-  // GetParam works just the same here as if you inherit from TestWithParam.
-  EXPECT_TRUE(foo.Blah(GetParam()));
-}
-
-#endif  // 0
-
-#include "gtest/internal/gtest-port.h"
-
-#if !GTEST_OS_SYMBIAN
-# include <utility>
-#endif
-
-// scripts/fuse_gtest.py depends on gtest's own header being #included
-// *unconditionally*.  Therefore these #includes cannot be moved
-// inside #if GTEST_HAS_PARAM_TEST.
-#include "gtest/internal/gtest-internal.h"
-#include "gtest/internal/gtest-param-util.h"
-#include "gtest/internal/gtest-param-util-generated.h"
-
-#if GTEST_HAS_PARAM_TEST
-
-namespace testing {
-
-// Functions producing parameter generators.
-//
-// Google Test uses these generators to produce parameters for value-
-// parameterized tests. When a parameterized test case is instantiated
-// with a particular generator, Google Test creates and runs tests
-// for each element in the sequence produced by the generator.
-//
-// In the following sample, tests from test case FooTest are instantiated
-// each three times with parameter values 3, 5, and 8:
-//
-// class FooTest : public TestWithParam<int> { ... };
-//
-// TEST_P(FooTest, TestThis) {
-// }
-// TEST_P(FooTest, TestThat) {
-// }
-// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8));
-//
-
-// Range() returns generators providing sequences of values in a range.
-//
-// Synopsis:
-// Range(start, end)
-//   - returns a generator producing a sequence of values {start, start+1,
-//     start+2, ..., }.
-// Range(start, end, step)
-//   - returns a generator producing a sequence of values {start, start+step,
-//     start+step+step, ..., }.
-// Notes:
-//   * The generated sequences never include end. For example, Range(1, 5)
-//     returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2)
-//     returns a generator producing {1, 3, 5, 7}.
-//   * start and end must have the same type. That type may be any integral or
-//     floating-point type or a user defined type satisfying these conditions:
-//     * It must be assignable (have operator=() defined).
-//     * It must have operator+() (operator+(int-compatible type) for
-//       two-operand version).
-//     * It must have operator<() defined.
-//     Elements in the resulting sequences will also have that type.
-//   * Condition start < end must be satisfied in order for resulting sequences
-//     to contain any elements.
-//
-template <typename T, typename IncrementT>
-internal::ParamGenerator<T> Range(T start, T end, IncrementT step) {
-  return internal::ParamGenerator<T>(
-      new internal::RangeGenerator<T, IncrementT>(start, end, step));
-}
-
-template <typename T>
-internal::ParamGenerator<T> Range(T start, T end) {
-  return Range(start, end, 1);
-}
-
-// ValuesIn() function allows generation of tests with parameters coming from
-// a container.
-//
-// Synopsis:
-// ValuesIn(const T (&array)[N])
-//   - returns a generator producing sequences with elements from
-//     a C-style array.
-// ValuesIn(const Container& container)
-//   - returns a generator producing sequences with elements from
-//     an STL-style container.
-// ValuesIn(Iterator begin, Iterator end)
-//   - returns a generator producing sequences with elements from
-//     a range [begin, end) defined by a pair of STL-style iterators. These
-//     iterators can also be plain C pointers.
-//
-// Please note that ValuesIn copies the values from the containers
-// passed in and keeps them to generate tests in RUN_ALL_TESTS().
-//
-// Examples:
-//
-// This instantiates tests from test case StringTest
-// each with C-string values of "foo", "bar", and "baz":
-//
-// const char* strings[] = {"foo", "bar", "baz"};
-// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings));
-//
-// This instantiates tests from test case StlStringTest
-// each with STL strings with values "a" and "b":
-//
-// ::std::vector< ::std::string> GetParameterStrings() {
-//   ::std::vector< ::std::string> v;
-//   v.push_back("a");
-//   v.push_back("b");
-//   return v;
-// }
-//
-// INSTANTIATE_TEST_CASE_P(CharSequence,
-//                         StlStringTest,
-//                         ValuesIn(GetParameterStrings()));
-//
-//
-// This will also instantiate tests from CharTest
-// each with parameter values 'a' and 'b':
-//
-// ::std::list<char> GetParameterChars() {
-//   ::std::list<char> list;
-//   list.push_back('a');
-//   list.push_back('b');
-//   return list;
-// }
-// ::std::list<char> l = GetParameterChars();
-// INSTANTIATE_TEST_CASE_P(CharSequence2,
-//                         CharTest,
-//                         ValuesIn(l.begin(), l.end()));
-//
-template <typename ForwardIterator>
-internal::ParamGenerator<
-  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
-ValuesIn(ForwardIterator begin, ForwardIterator end) {
-  typedef typename ::testing::internal::IteratorTraits<ForwardIterator>
-      ::value_type ParamType;
-  return internal::ParamGenerator<ParamType>(
-      new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end));
-}
-
-template <typename T, size_t N>
-internal::ParamGenerator<T> ValuesIn(const T (&array)[N]) {
-  return ValuesIn(array, array + N);
-}
-
-template <class Container>
-internal::ParamGenerator<typename Container::value_type> ValuesIn(
-    const Container& container) {
-  return ValuesIn(container.begin(), container.end());
-}
-
-// Values() allows generating tests from explicitly specified list of
-// parameters.
-//
-// Synopsis:
-// Values(T v1, T v2, ..., T vN)
-//   - returns a generator producing sequences with elements v1, v2, ..., vN.
-//
-// For example, this instantiates tests from test case BarTest each
-// with values "one", "two", and "three":
-//
-// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three"));
-//
-// This instantiates tests from test case BazTest each with values 1, 2, 3.5.
-// The exact type of values will depend on the type of parameter in BazTest.
-//
-// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5));
-//
-// Currently, Values() supports from 1 to 50 parameters.
-//
-template <typename T1>
-internal::ValueArray1<T1> Values(T1 v1) {
-  return internal::ValueArray1<T1>(v1);
-}
-
-template <typename T1, typename T2>
-internal::ValueArray2<T1, T2> Values(T1 v1, T2 v2) {
-  return internal::ValueArray2<T1, T2>(v1, v2);
-}
-
-template <typename T1, typename T2, typename T3>
-internal::ValueArray3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) {
-  return internal::ValueArray3<T1, T2, T3>(v1, v2, v3);
-}
-
-template <typename T1, typename T2, typename T3, typename T4>
-internal::ValueArray4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) {
-  return internal::ValueArray4<T1, T2, T3, T4>(v1, v2, v3, v4);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5>
-internal::ValueArray5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4,
-    T5 v5) {
-  return internal::ValueArray5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6>
-internal::ValueArray6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3,
-    T4 v4, T5 v5, T6 v6) {
-  return internal::ValueArray6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7>
-internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7> Values(T1 v1, T2 v2, T3 v3,
-    T4 v4, T5 v5, T6 v6, T7 v7) {
-  return internal::ValueArray7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5,
-      v6, v7);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8>
-internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8> Values(T1 v1, T2 v2,
-    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) {
-  return internal::ValueArray8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4,
-      v5, v6, v7, v8);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9>
-internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2,
-    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) {
-  return internal::ValueArray9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3,
-      v4, v5, v6, v7, v8, v9);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10>
-internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1,
-    T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) {
-  return internal::ValueArray10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1,
-      v2, v3, v4, v5, v6, v7, v8, v9, v10);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11>
-internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
-    T11> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11) {
-  return internal::ValueArray11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
-      T11>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12>
-internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-    T12> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11, T12 v12) {
-  return internal::ValueArray12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13>
-internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-    T13> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11, T12 v12, T13 v13) {
-  return internal::ValueArray13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14>
-internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) {
-  return internal::ValueArray14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
-      v14);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15>
-internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
-    T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) {
-  return internal::ValueArray15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
-      v13, v14, v15);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16>
-internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
-    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
-    T16 v16) {
-  return internal::ValueArray16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
-      v12, v13, v14, v15, v16);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17>
-internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
-    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
-    T16 v16, T17 v17) {
-  return internal::ValueArray17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
-      v11, v12, v13, v14, v15, v16, v17);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18>
-internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
-    T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
-    T16 v16, T17 v17, T18 v18) {
-  return internal::ValueArray18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
-      v10, v11, v12, v13, v14, v15, v16, v17, v18);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19>
-internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
-    T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
-    T15 v15, T16 v16, T17 v17, T18 v18, T19 v19) {
-  return internal::ValueArray19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19>(v1, v2, v3, v4, v5, v6, v7, v8,
-      v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20>
-internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20> Values(T1 v1, T2 v2, T3 v3, T4 v4,
-    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
-    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20) {
-  return internal::ValueArray20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20>(v1, v2, v3, v4, v5, v6, v7,
-      v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21>
-internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21> Values(T1 v1, T2 v2, T3 v3, T4 v4,
-    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
-    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21) {
-  return internal::ValueArray21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21>(v1, v2, v3, v4, v5, v6,
-      v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22>
-internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22> Values(T1 v1, T2 v2, T3 v3,
-    T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
-    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
-    T21 v21, T22 v22) {
-  return internal::ValueArray22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22>(v1, v2, v3, v4,
-      v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
-      v20, v21, v22);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23>
-internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> Values(T1 v1, T2 v2,
-    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
-    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
-    T21 v21, T22 v22, T23 v23) {
-  return internal::ValueArray23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23>(v1, v2, v3,
-      v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
-      v20, v21, v22, v23);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24>
-internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Values(T1 v1, T2 v2,
-    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
-    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
-    T21 v21, T22 v22, T23 v23, T24 v24) {
-  return internal::ValueArray24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24>(v1, v2,
-      v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
-      v19, v20, v21, v22, v23, v24);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25>
-internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Values(T1 v1,
-    T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
-    T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
-    T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25) {
-  return internal::ValueArray25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25>(v1,
-      v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
-      v18, v19, v20, v21, v22, v23, v24, v25);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26>
-internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-    T26> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-    T26 v26) {
-  return internal::ValueArray26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
-      v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27>
-internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-    T27> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-    T26 v26, T27 v27) {
-  return internal::ValueArray27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
-      v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28>
-internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-    T28> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-    T26 v26, T27 v27, T28 v28) {
-  return internal::ValueArray28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
-      v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
-      v28);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29>
-internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-    T26 v26, T27 v27, T28 v28, T29 v29) {
-  return internal::ValueArray29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
-      v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
-      v27, v28, v29);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30>
-internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
-    T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
-    T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
-    T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) {
-  return internal::ValueArray30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
-      v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
-      v26, v27, v28, v29, v30);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31>
-internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
-    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
-    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
-    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) {
-  return internal::ValueArray31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
-      v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
-      v25, v26, v27, v28, v29, v30, v31);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32>
-internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
-    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
-    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
-    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
-    T32 v32) {
-  return internal::ValueArray32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
-      v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
-      v24, v25, v26, v27, v28, v29, v30, v31, v32);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33>
-internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
-    T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
-    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
-    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
-    T32 v32, T33 v33) {
-  return internal::ValueArray33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33>(v1, v2, v3, v4, v5, v6, v7, v8,
-      v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
-      v24, v25, v26, v27, v28, v29, v30, v31, v32, v33);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34>
-internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
-    T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
-    T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
-    T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
-    T31 v31, T32 v32, T33 v33, T34 v34) {
-  return internal::ValueArray34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34>(v1, v2, v3, v4, v5, v6, v7,
-      v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
-      v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35>
-internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35> Values(T1 v1, T2 v2, T3 v3, T4 v4,
-    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
-    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
-    T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
-    T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35) {
-  return internal::ValueArray35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35>(v1, v2, v3, v4, v5, v6,
-      v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
-      v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36>
-internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36> Values(T1 v1, T2 v2, T3 v3, T4 v4,
-    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
-    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
-    T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
-    T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36) {
-  return internal::ValueArray36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36>(v1, v2, v3, v4,
-      v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
-      v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
-      v34, v35, v36);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37>
-internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37> Values(T1 v1, T2 v2, T3 v3,
-    T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
-    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
-    T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
-    T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
-    T37 v37) {
-  return internal::ValueArray37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37>(v1, v2, v3,
-      v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
-      v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
-      v34, v35, v36, v37);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38>
-internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Values(T1 v1, T2 v2,
-    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
-    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
-    T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
-    T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
-    T37 v37, T38 v38) {
-  return internal::ValueArray38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38>(v1, v2,
-      v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18,
-      v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32,
-      v33, v34, v35, v36, v37, v38);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39>
-internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Values(T1 v1, T2 v2,
-    T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12,
-    T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20,
-    T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28,
-    T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36,
-    T37 v37, T38 v38, T39 v39) {
-  return internal::ValueArray39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39>(v1,
-      v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17,
-      v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31,
-      v32, v33, v34, v35, v36, v37, v38, v39);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40>
-internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Values(T1 v1,
-    T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11,
-    T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19,
-    T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27,
-    T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35,
-    T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) {
-  return internal::ValueArray40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15,
-      v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29,
-      v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41>
-internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-    T41> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41) {
-  return internal::ValueArray41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40, T41>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14,
-      v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28,
-      v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42>
-internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
-    T42> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-    T42 v42) {
-  return internal::ValueArray42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40, T41, T42>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13,
-      v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27,
-      v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41,
-      v42);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43>
-internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
-    T43> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-    T42 v42, T43 v43) {
-  return internal::ValueArray43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40, T41, T42, T43>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12,
-      v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26,
-      v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,
-      v41, v42, v43);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44>
-internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-    T44> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-    T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-    T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-    T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-    T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-    T42 v42, T43 v43, T44 v44) {
-  return internal::ValueArray44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40, T41, T42, T43, T44>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11,
-      v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25,
-      v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39,
-      v40, v41, v42, v43, v44);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45>
-internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-    T44, T45> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
-    T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
-    T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
-    T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
-    T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
-    T41 v41, T42 v42, T43 v43, T44 v44, T45 v45) {
-  return internal::ValueArray45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40, T41, T42, T43, T44, T45>(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
-      v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24,
-      v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38,
-      v39, v40, v41, v42, v43, v44, v45);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46>
-internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-    T44, T45, T46> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
-    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
-    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
-    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
-    T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
-    T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) {
-  return internal::ValueArray46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40, T41, T42, T43, T44, T45, T46>(v1, v2, v3, v4, v5, v6, v7, v8, v9,
-      v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
-      v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
-      v38, v39, v40, v41, v42, v43, v44, v45, v46);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47>
-internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-    T44, T45, T46, T47> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
-    T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
-    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
-    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
-    T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
-    T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) {
-  return internal::ValueArray47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40, T41, T42, T43, T44, T45, T46, T47>(v1, v2, v3, v4, v5, v6, v7, v8,
-      v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23,
-      v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37,
-      v38, v39, v40, v41, v42, v43, v44, v45, v46, v47);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48>
-internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-    T44, T45, T46, T47, T48> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
-    T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15,
-    T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23,
-    T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31,
-    T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39,
-    T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47,
-    T48 v48) {
-  return internal::ValueArray48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40, T41, T42, T43, T44, T45, T46, T47, T48>(v1, v2, v3, v4, v5, v6, v7,
-      v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22,
-      v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36,
-      v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48, typename T49>
-internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-    T44, T45, T46, T47, T48, T49> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
-    T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13, T14 v14,
-    T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21, T22 v22,
-    T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29, T30 v30,
-    T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37, T38 v38,
-    T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45, T46 v46,
-    T47 v47, T48 v48, T49 v49) {
-  return internal::ValueArray49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40, T41, T42, T43, T44, T45, T46, T47, T48, T49>(v1, v2, v3, v4, v5, v6,
-      v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21,
-      v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35,
-      v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48, typename T49, typename T50>
-internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-    T44, T45, T46, T47, T48, T49, T50> Values(T1 v1, T2 v2, T3 v3, T4 v4,
-    T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10, T11 v11, T12 v12, T13 v13,
-    T14 v14, T15 v15, T16 v16, T17 v17, T18 v18, T19 v19, T20 v20, T21 v21,
-    T22 v22, T23 v23, T24 v24, T25 v25, T26 v26, T27 v27, T28 v28, T29 v29,
-    T30 v30, T31 v31, T32 v32, T33 v33, T34 v34, T35 v35, T36 v36, T37 v37,
-    T38 v38, T39 v39, T40 v40, T41 v41, T42 v42, T43 v43, T44 v44, T45 v45,
-    T46 v46, T47 v47, T48 v48, T49 v49, T50 v50) {
-  return internal::ValueArray50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12, T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26, T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40, T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>(v1, v2, v3, v4,
-      v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19,
-      v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33,
-      v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47,
-      v48, v49, v50);
-}
-
-// Bool() allows generating tests with parameters in a set of (false, true).
-//
-// Synopsis:
-// Bool()
-//   - returns a generator producing sequences with elements {false, true}.
-//
-// It is useful when testing code that depends on Boolean flags. Combinations
-// of multiple flags can be tested when several Bool()'s are combined using
-// Combine() function.
-//
-// In the following example all tests in the test case FlagDependentTest
-// will be instantiated twice with parameters false and true.
-//
-// class FlagDependentTest : public testing::TestWithParam<bool> {
-//   virtual void SetUp() {
-//     external_flag = GetParam();
-//   }
-// }
-// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool());
-//
-inline internal::ParamGenerator<bool> Bool() {
-  return Values(false, true);
-}
-
-# if GTEST_HAS_COMBINE
-// Combine() allows the user to combine two or more sequences to produce
-// values of a Cartesian product of those sequences' elements.
-//
-// Synopsis:
-// Combine(gen1, gen2, ..., genN)
-//   - returns a generator producing sequences with elements coming from
-//     the Cartesian product of elements from the sequences generated by
-//     gen1, gen2, ..., genN. The sequence elements will have a type of
-//     tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types
-//     of elements from sequences produces by gen1, gen2, ..., genN.
-//
-// Combine can have up to 10 arguments. This number is currently limited
-// by the maximum number of elements in the tuple implementation used by Google
-// Test.
-//
-// Example:
-//
-// This will instantiate tests in test case AnimalTest each one with
-// the parameter values tuple("cat", BLACK), tuple("cat", WHITE),
-// tuple("dog", BLACK), and tuple("dog", WHITE):
-//
-// enum Color { BLACK, GRAY, WHITE };
-// class AnimalTest
-//     : public testing::TestWithParam<tuple<const char*, Color> > {...};
-//
-// TEST_P(AnimalTest, AnimalLooksNice) {...}
-//
-// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest,
-//                         Combine(Values("cat", "dog"),
-//                                 Values(BLACK, WHITE)));
-//
-// This will instantiate tests in FlagDependentTest with all variations of two
-// Boolean flags:
-//
-// class FlagDependentTest
-//     : public testing::TestWithParam<tuple(bool, bool)> > {
-//   virtual void SetUp() {
-//     // Assigns external_flag_1 and external_flag_2 values from the tuple.
-//     tie(external_flag_1, external_flag_2) = GetParam();
-//   }
-// };
-//
-// TEST_P(FlagDependentTest, TestFeature1) {
-//   // Test your code using external_flag_1 and external_flag_2 here.
-// }
-// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest,
-//                         Combine(Bool(), Bool()));
-//
-template <typename Generator1, typename Generator2>
-internal::CartesianProductHolder2<Generator1, Generator2> Combine(
-    const Generator1& g1, const Generator2& g2) {
-  return internal::CartesianProductHolder2<Generator1, Generator2>(
-      g1, g2);
-}
-
-template <typename Generator1, typename Generator2, typename Generator3>
-internal::CartesianProductHolder3<Generator1, Generator2, Generator3> Combine(
-    const Generator1& g1, const Generator2& g2, const Generator3& g3) {
-  return internal::CartesianProductHolder3<Generator1, Generator2, Generator3>(
-      g1, g2, g3);
-}
-
-template <typename Generator1, typename Generator2, typename Generator3,
-    typename Generator4>
-internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
-    Generator4> Combine(
-    const Generator1& g1, const Generator2& g2, const Generator3& g3,
-        const Generator4& g4) {
-  return internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
-      Generator4>(
-      g1, g2, g3, g4);
-}
-
-template <typename Generator1, typename Generator2, typename Generator3,
-    typename Generator4, typename Generator5>
-internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
-    Generator4, Generator5> Combine(
-    const Generator1& g1, const Generator2& g2, const Generator3& g3,
-        const Generator4& g4, const Generator5& g5) {
-  return internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
-      Generator4, Generator5>(
-      g1, g2, g3, g4, g5);
-}
-
-template <typename Generator1, typename Generator2, typename Generator3,
-    typename Generator4, typename Generator5, typename Generator6>
-internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
-    Generator4, Generator5, Generator6> Combine(
-    const Generator1& g1, const Generator2& g2, const Generator3& g3,
-        const Generator4& g4, const Generator5& g5, const Generator6& g6) {
-  return internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
-      Generator4, Generator5, Generator6>(
-      g1, g2, g3, g4, g5, g6);
-}
-
-template <typename Generator1, typename Generator2, typename Generator3,
-    typename Generator4, typename Generator5, typename Generator6,
-    typename Generator7>
-internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
-    Generator4, Generator5, Generator6, Generator7> Combine(
-    const Generator1& g1, const Generator2& g2, const Generator3& g3,
-        const Generator4& g4, const Generator5& g5, const Generator6& g6,
-        const Generator7& g7) {
-  return internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
-      Generator4, Generator5, Generator6, Generator7>(
-      g1, g2, g3, g4, g5, g6, g7);
-}
-
-template <typename Generator1, typename Generator2, typename Generator3,
-    typename Generator4, typename Generator5, typename Generator6,
-    typename Generator7, typename Generator8>
-internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
-    Generator4, Generator5, Generator6, Generator7, Generator8> Combine(
-    const Generator1& g1, const Generator2& g2, const Generator3& g3,
-        const Generator4& g4, const Generator5& g5, const Generator6& g6,
-        const Generator7& g7, const Generator8& g8) {
-  return internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
-      Generator4, Generator5, Generator6, Generator7, Generator8>(
-      g1, g2, g3, g4, g5, g6, g7, g8);
-}
-
-template <typename Generator1, typename Generator2, typename Generator3,
-    typename Generator4, typename Generator5, typename Generator6,
-    typename Generator7, typename Generator8, typename Generator9>
-internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
-    Generator4, Generator5, Generator6, Generator7, Generator8,
-    Generator9> Combine(
-    const Generator1& g1, const Generator2& g2, const Generator3& g3,
-        const Generator4& g4, const Generator5& g5, const Generator6& g6,
-        const Generator7& g7, const Generator8& g8, const Generator9& g9) {
-  return internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
-      Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>(
-      g1, g2, g3, g4, g5, g6, g7, g8, g9);
-}
-
-template <typename Generator1, typename Generator2, typename Generator3,
-    typename Generator4, typename Generator5, typename Generator6,
-    typename Generator7, typename Generator8, typename Generator9,
-    typename Generator10>
-internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
-    Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
-    Generator10> Combine(
-    const Generator1& g1, const Generator2& g2, const Generator3& g3,
-        const Generator4& g4, const Generator5& g5, const Generator6& g6,
-        const Generator7& g7, const Generator8& g8, const Generator9& g9,
-        const Generator10& g10) {
-  return internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
-      Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
-      Generator10>(
-      g1, g2, g3, g4, g5, g6, g7, g8, g9, g10);
-}
-# endif  // GTEST_HAS_COMBINE
-
-
-
-# define TEST_P(test_case_name, test_name) \
-  class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
-      : public test_case_name { \
-   public: \
-    GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \
-    virtual void TestBody(); \
-   private: \
-    static int AddToRegistry() { \
-      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
-          GetTestCasePatternHolder<test_case_name>(\
-              #test_case_name, __FILE__, __LINE__)->AddTestPattern(\
-                  #test_case_name, \
-                  #test_name, \
-                  new ::testing::internal::TestMetaFactory< \
-                      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \
-      return 0; \
-    } \
-    static int gtest_registering_dummy_; \
-    GTEST_DISALLOW_COPY_AND_ASSIGN_(\
-        GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \
-  }; \
-  int GTEST_TEST_CLASS_NAME_(test_case_name, \
-                             test_name)::gtest_registering_dummy_ = \
-      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \
-  void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
-
-# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \
-  ::testing::internal::ParamGenerator<test_case_name::ParamType> \
-      gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \
-  int gtest_##prefix##test_case_name##_dummy_ = \
-      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
-          GetTestCasePatternHolder<test_case_name>(\
-              #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\
-                  #prefix, \
-                  &gtest_##prefix##test_case_name##_EvalGenerator_, \
-                  __FILE__, __LINE__)
-
-}  // namespace testing
-
-#endif  // GTEST_HAS_PARAM_TEST
-
-#endif  // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/gtest-printers.h b/src/libs_3rdparty/gtest/src/gtest/gtest-printers.h
deleted file mode 100644
index 9cbab3f..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/gtest-printers.h
+++ /dev/null
@@ -1,796 +0,0 @@
-// Copyright 2007, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-
-// Google Test - The Google C++ Testing Framework
-//
-// This file implements a universal value printer that can print a
-// value of any type T:
-//
-//   void ::testing::internal::UniversalPrinter<T>::Print(value, ostream_ptr);
-//
-// A user can teach this function how to print a class type T by
-// defining either operator<<() or PrintTo() in the namespace that
-// defines T.  More specifically, the FIRST defined function in the
-// following list will be used (assuming T is defined in namespace
-// foo):
-//
-//   1. foo::PrintTo(const T&, ostream*)
-//   2. operator<<(ostream&, const T&) defined in either foo or the
-//      global namespace.
-//
-// If none of the above is defined, it will print the debug string of
-// the value if it is a protocol buffer, or print the raw bytes in the
-// value otherwise.
-//
-// To aid debugging: when T is a reference type, the address of the
-// value is also printed; when T is a (const) char pointer, both the
-// pointer value and the NUL-terminated string it points to are
-// printed.
-//
-// We also provide some convenient wrappers:
-//
-//   // Prints a value to a string.  For a (const or not) char
-//   // pointer, the NUL-terminated string (but not the pointer) is
-//   // printed.
-//   std::string ::testing::PrintToString(const T& value);
-//
-//   // Prints a value tersely: for a reference type, the referenced
-//   // value (but not the address) is printed; for a (const or not) char
-//   // pointer, the NUL-terminated string (but not the pointer) is
-//   // printed.
-//   void ::testing::internal::UniversalTersePrint(const T& value, ostream*);
-//
-//   // Prints value using the type inferred by the compiler.  The difference
-//   // from UniversalTersePrint() is that this function prints both the
-//   // pointer and the NUL-terminated string for a (const or not) char pointer.
-//   void ::testing::internal::UniversalPrint(const T& value, ostream*);
-//
-//   // Prints the fields of a tuple tersely to a string vector, one
-//   // element for each field. Tuple support must be enabled in
-//   // gtest-port.h.
-//   std::vector<string> UniversalTersePrintTupleFieldsToStrings(
-//       const Tuple& value);
-//
-// Known limitation:
-//
-// The print primitives print the elements of an STL-style container
-// using the compiler-inferred type of *iter where iter is a
-// const_iterator of the container.  When const_iterator is an input
-// iterator but not a forward iterator, this inferred type may not
-// match value_type, and the print output may be incorrect.  In
-// practice, this is rarely a problem as for most containers
-// const_iterator is a forward iterator.  We'll fix this if there's an
-// actual need for it.  Note that this fix cannot rely on value_type
-// being defined as many user-defined container types don't have
-// value_type.
-
-#ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
-#define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
-
-#include <ostream>  // NOLINT
-#include <sstream>
-#include <string>
-#include <utility>
-#include <vector>
-#include "gtest/internal/gtest-port.h"
-#include "gtest/internal/gtest-internal.h"
-
-namespace testing {
-
-// Definitions in the 'internal' and 'internal2' name spaces are
-// subject to change without notice.  DO NOT USE THEM IN USER CODE!
-namespace internal2 {
-
-// Prints the given number of bytes in the given object to the given
-// ostream.
-GTEST_API_ void PrintBytesInObjectTo(const unsigned char* obj_bytes,
-                                     size_t count,
-                                     ::std::ostream* os);
-
-// For selecting which printer to use when a given type has neither <<
-// nor PrintTo().
-enum TypeKind {
-  kProtobuf,              // a protobuf type
-  kConvertibleToInteger,  // a type implicitly convertible to BiggestInt
-                          // (e.g. a named or unnamed enum type)
-  kOtherType              // anything else
-};
-
-// TypeWithoutFormatter<T, kTypeKind>::PrintValue(value, os) is called
-// by the universal printer to print a value of type T when neither
-// operator<< nor PrintTo() is defined for T, where kTypeKind is the
-// "kind" of T as defined by enum TypeKind.
-template <typename T, TypeKind kTypeKind>
-class TypeWithoutFormatter {
- public:
-  // This default version is called when kTypeKind is kOtherType.
-  static void PrintValue(const T& value, ::std::ostream* os) {
-    PrintBytesInObjectTo(reinterpret_cast<const unsigned char*>(&value),
-                         sizeof(value), os);
-  }
-};
-
-// We print a protobuf using its ShortDebugString() when the string
-// doesn't exceed this many characters; otherwise we print it using
-// DebugString() for better readability.
-const size_t kProtobufOneLinerMaxLength = 50;
-
-template <typename T>
-class TypeWithoutFormatter<T, kProtobuf> {
- public:
-  static void PrintValue(const T& value, ::std::ostream* os) {
-    const ::testing::internal::string short_str = value.ShortDebugString();
-    const ::testing::internal::string pretty_str =
-        short_str.length() <= kProtobufOneLinerMaxLength ?
-        short_str : ("\n" + value.DebugString());
-    *os << ("<" + pretty_str + ">");
-  }
-};
-
-template <typename T>
-class TypeWithoutFormatter<T, kConvertibleToInteger> {
- public:
-  // Since T has no << operator or PrintTo() but can be implicitly
-  // converted to BiggestInt, we print it as a BiggestInt.
-  //
-  // Most likely T is an enum type (either named or unnamed), in which
-  // case printing it as an integer is the desired behavior.  In case
-  // T is not an enum, printing it as an integer is the best we can do
-  // given that it has no user-defined printer.
-  static void PrintValue(const T& value, ::std::ostream* os) {
-    const internal::BiggestInt kBigInt = value;
-    *os << kBigInt;
-  }
-};
-
-// Prints the given value to the given ostream.  If the value is a
-// protocol message, its debug string is printed; if it's an enum or
-// of a type implicitly convertible to BiggestInt, it's printed as an
-// integer; otherwise the bytes in the value are printed.  This is
-// what UniversalPrinter<T>::Print() does when it knows nothing about
-// type T and T has neither << operator nor PrintTo().
-//
-// A user can override this behavior for a class type Foo by defining
-// a << operator in the namespace where Foo is defined.
-//
-// We put this operator in namespace 'internal2' instead of 'internal'
-// to simplify the implementation, as much code in 'internal' needs to
-// use << in STL, which would conflict with our own << were it defined
-// in 'internal'.
-//
-// Note that this operator<< takes a generic std::basic_ostream<Char,
-// CharTraits> type instead of the more restricted std::ostream.  If
-// we define it to take an std::ostream instead, we'll get an
-// "ambiguous overloads" compiler error when trying to print a type
-// Foo that supports streaming to std::basic_ostream<Char,
-// CharTraits>, as the compiler cannot tell whether
-// operator<<(std::ostream&, const T&) or
-// operator<<(std::basic_stream<Char, CharTraits>, const Foo&) is more
-// specific.
-template <typename Char, typename CharTraits, typename T>
-::std::basic_ostream<Char, CharTraits>& operator<<(
-    ::std::basic_ostream<Char, CharTraits>& os, const T& x) {
-  TypeWithoutFormatter<T,
-      (internal::IsAProtocolMessage<T>::value ? kProtobuf :
-       internal::ImplicitlyConvertible<const T&, internal::BiggestInt>::value ?
-       kConvertibleToInteger : kOtherType)>::PrintValue(x, &os);
-  return os;
-}
-
-}  // namespace internal2
-}  // namespace testing
-
-// This namespace MUST NOT BE NESTED IN ::testing, or the name look-up
-// magic needed for implementing UniversalPrinter won't work.
-namespace testing_internal {
-
-// Used to print a value that is not an STL-style container when the
-// user doesn't define PrintTo() for it.
-template <typename T>
-void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) {
-  // With the following statement, during unqualified name lookup,
-  // testing::internal2::operator<< appears as if it was declared in
-  // the nearest enclosing namespace that contains both
-  // ::testing_internal and ::testing::internal2, i.e. the global
-  // namespace.  For more details, refer to the C++ Standard section
-  // 7.3.4-1 [namespace.udir].  This allows us to fall back onto
-  // testing::internal2::operator<< in case T doesn't come with a <<
-  // operator.
-  //
-  // We cannot write 'using ::testing::internal2::operator<<;', which
-  // gcc 3.3 fails to compile due to a compiler bug.
-  using namespace ::testing::internal2;  // NOLINT
-
-  // Assuming T is defined in namespace foo, in the next statement,
-  // the compiler will consider all of:
-  //
-  //   1. foo::operator<< (thanks to Koenig look-up),
-  //   2. ::operator<< (as the current namespace is enclosed in ::),
-  //   3. testing::internal2::operator<< (thanks to the using statement above).
-  //
-  // The operator<< whose type matches T best will be picked.
-  //
-  // We deliberately allow #2 to be a candidate, as sometimes it's
-  // impossible to define #1 (e.g. when foo is ::std, defining
-  // anything in it is undefined behavior unless you are a compiler
-  // vendor.).
-  *os << value;
-}
-
-}  // namespace testing_internal
-
-namespace testing {
-namespace internal {
-
-// UniversalPrinter<T>::Print(value, ostream_ptr) prints the given
-// value to the given ostream.  The caller must ensure that
-// 'ostream_ptr' is not NULL, or the behavior is undefined.
-//
-// We define UniversalPrinter as a class template (as opposed to a
-// function template), as we need to partially specialize it for
-// reference types, which cannot be done with function templates.
-template <typename T>
-class UniversalPrinter;
-
-template <typename T>
-void UniversalPrint(const T& value, ::std::ostream* os);
-
-// Used to print an STL-style container when the user doesn't define
-// a PrintTo() for it.
-template <typename C>
-void DefaultPrintTo(IsContainer /* dummy */,
-                    false_type /* is not a pointer */,
-                    const C& container, ::std::ostream* os) {
-  const size_t kMaxCount = 32;  // The maximum number of elements to print.
-  *os << '{';
-  size_t count = 0;
-  for (typename C::const_iterator it = container.begin();
-       it != container.end(); ++it, ++count) {
-    if (count > 0) {
-      *os << ',';
-      if (count == kMaxCount) {  // Enough has been printed.
-        *os << " ...";
-        break;
-      }
-    }
-    *os << ' ';
-    // We cannot call PrintTo(*it, os) here as PrintTo() doesn't
-    // handle *it being a native array.
-    internal::UniversalPrint(*it, os);
-  }
-
-  if (count > 0) {
-    *os << ' ';
-  }
-  *os << '}';
-}
-
-// Used to print a pointer that is neither a char pointer nor a member
-// pointer, when the user doesn't define PrintTo() for it.  (A member
-// variable pointer or member function pointer doesn't really point to
-// a location in the address space.  Their representation is
-// implementation-defined.  Therefore they will be printed as raw
-// bytes.)
-template <typename T>
-void DefaultPrintTo(IsNotContainer /* dummy */,
-                    true_type /* is a pointer */,
-                    T* p, ::std::ostream* os) {
-  if (p == NULL) {
-    *os << "NULL";
-  } else {
-    // C++ doesn't allow casting from a function pointer to any object
-    // pointer.
-    //
-    // IsTrue() silences warnings: "Condition is always true",
-    // "unreachable code".
-    if (IsTrue(ImplicitlyConvertible<T*, const void*>::value)) {
-      // T is not a function type.  We just call << to print p,
-      // relying on ADL to pick up user-defined << for their pointer
-      // types, if any.
-      *os << p;
-    } else {
-      // T is a function type, so '*os << p' doesn't do what we want
-      // (it just prints p as bool).  We want to print p as a const
-      // void*.  However, we cannot cast it to const void* directly,
-      // even using reinterpret_cast, as earlier versions of gcc
-      // (e.g. 3.4.5) cannot compile the cast when p is a function
-      // pointer.  Casting to UInt64 first solves the problem.
-      *os << reinterpret_cast<const void*>(
-          reinterpret_cast<internal::UInt64>(p));
-    }
-  }
-}
-
-// Used to print a non-container, non-pointer value when the user
-// doesn't define PrintTo() for it.
-template <typename T>
-void DefaultPrintTo(IsNotContainer /* dummy */,
-                    false_type /* is not a pointer */,
-                    const T& value, ::std::ostream* os) {
-  ::testing_internal::DefaultPrintNonContainerTo(value, os);
-}
-
-// Prints the given value using the << operator if it has one;
-// otherwise prints the bytes in it.  This is what
-// UniversalPrinter<T>::Print() does when PrintTo() is not specialized
-// or overloaded for type T.
-//
-// A user can override this behavior for a class type Foo by defining
-// an overload of PrintTo() in the namespace where Foo is defined.  We
-// give the user this option as sometimes defining a << operator for
-// Foo is not desirable (e.g. the coding style may prevent doing it,
-// or there is already a << operator but it doesn't do what the user
-// wants).
-template <typename T>
-void PrintTo(const T& value, ::std::ostream* os) {
-  // DefaultPrintTo() is overloaded.  The type of its first two
-  // arguments determine which version will be picked.  If T is an
-  // STL-style container, the version for container will be called; if
-  // T is a pointer, the pointer version will be called; otherwise the
-  // generic version will be called.
-  //
-  // Note that we check for container types here, prior to we check
-  // for protocol message types in our operator<<.  The rationale is:
-  //
-  // For protocol messages, we want to give people a chance to
-  // override Google Mock's format by defining a PrintTo() or
-  // operator<<.  For STL containers, other formats can be
-  // incompatible with Google Mock's format for the container
-  // elements; therefore we check for container types here to ensure
-  // that our format is used.
-  //
-  // The second argument of DefaultPrintTo() is needed to bypass a bug
-  // in Symbian's C++ compiler that prevents it from picking the right
-  // overload between:
-  //
-  //   PrintTo(const T& x, ...);
-  //   PrintTo(T* x, ...);
-  DefaultPrintTo(IsContainerTest<T>(0), is_pointer<T>(), value, os);
-}
-
-// The following list of PrintTo() overloads tells
-// UniversalPrinter<T>::Print() how to print standard types (built-in
-// types, strings, plain arrays, and pointers).
-
-// Overloads for various char types.
-GTEST_API_ void PrintTo(unsigned char c, ::std::ostream* os);
-GTEST_API_ void PrintTo(signed char c, ::std::ostream* os);
-inline void PrintTo(char c, ::std::ostream* os) {
-  // When printing a plain char, we always treat it as unsigned.  This
-  // way, the output won't be affected by whether the compiler thinks
-  // char is signed or not.
-  PrintTo(static_cast<unsigned char>(c), os);
-}
-
-// Overloads for other simple built-in types.
-inline void PrintTo(bool x, ::std::ostream* os) {
-  *os << (x ? "true" : "false");
-}
-
-// Overload for wchar_t type.
-// Prints a wchar_t as a symbol if it is printable or as its internal
-// code otherwise and also as its decimal code (except for L'\0').
-// The L'\0' char is printed as "L'\\0'". The decimal code is printed
-// as signed integer when wchar_t is implemented by the compiler
-// as a signed type and is printed as an unsigned integer when wchar_t
-// is implemented as an unsigned type.
-GTEST_API_ void PrintTo(wchar_t wc, ::std::ostream* os);
-
-// Overloads for C strings.
-GTEST_API_ void PrintTo(const char* s, ::std::ostream* os);
-inline void PrintTo(char* s, ::std::ostream* os) {
-  PrintTo(ImplicitCast_<const char*>(s), os);
-}
-
-// signed/unsigned char is often used for representing binary data, so
-// we print pointers to it as void* to be safe.
-inline void PrintTo(const signed char* s, ::std::ostream* os) {
-  PrintTo(ImplicitCast_<const void*>(s), os);
-}
-inline void PrintTo(signed char* s, ::std::ostream* os) {
-  PrintTo(ImplicitCast_<const void*>(s), os);
-}
-inline void PrintTo(const unsigned char* s, ::std::ostream* os) {
-  PrintTo(ImplicitCast_<const void*>(s), os);
-}
-inline void PrintTo(unsigned char* s, ::std::ostream* os) {
-  PrintTo(ImplicitCast_<const void*>(s), os);
-}
-
-// MSVC can be configured to define wchar_t as a typedef of unsigned
-// short.  It defines _NATIVE_WCHAR_T_DEFINED when wchar_t is a native
-// type.  When wchar_t is a typedef, defining an overload for const
-// wchar_t* would cause unsigned short* be printed as a wide string,
-// possibly causing invalid memory accesses.
-#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)
-// Overloads for wide C strings
-GTEST_API_ void PrintTo(const wchar_t* s, ::std::ostream* os);
-inline void PrintTo(wchar_t* s, ::std::ostream* os) {
-  PrintTo(ImplicitCast_<const wchar_t*>(s), os);
-}
-#endif
-
-// Overload for C arrays.  Multi-dimensional arrays are printed
-// properly.
-
-// Prints the given number of elements in an array, without printing
-// the curly braces.
-template <typename T>
-void PrintRawArrayTo(const T a[], size_t count, ::std::ostream* os) {
-  UniversalPrint(a[0], os);
-  for (size_t i = 1; i != count; i++) {
-    *os << ", ";
-    UniversalPrint(a[i], os);
-  }
-}
-
-// Overloads for ::string and ::std::string.
-#if GTEST_HAS_GLOBAL_STRING
-GTEST_API_ void PrintStringTo(const ::string&s, ::std::ostream* os);
-inline void PrintTo(const ::string& s, ::std::ostream* os) {
-  PrintStringTo(s, os);
-}
-#endif  // GTEST_HAS_GLOBAL_STRING
-
-GTEST_API_ void PrintStringTo(const ::std::string&s, ::std::ostream* os);
-inline void PrintTo(const ::std::string& s, ::std::ostream* os) {
-  PrintStringTo(s, os);
-}
-
-// Overloads for ::wstring and ::std::wstring.
-#if GTEST_HAS_GLOBAL_WSTRING
-GTEST_API_ void PrintWideStringTo(const ::wstring&s, ::std::ostream* os);
-inline void PrintTo(const ::wstring& s, ::std::ostream* os) {
-  PrintWideStringTo(s, os);
-}
-#endif  // GTEST_HAS_GLOBAL_WSTRING
-
-#if GTEST_HAS_STD_WSTRING
-GTEST_API_ void PrintWideStringTo(const ::std::wstring&s, ::std::ostream* os);
-inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) {
-  PrintWideStringTo(s, os);
-}
-#endif  // GTEST_HAS_STD_WSTRING
-
-#if GTEST_HAS_TR1_TUPLE
-// Overload for ::std::tr1::tuple.  Needed for printing function arguments,
-// which are packed as tuples.
-
-// Helper function for printing a tuple.  T must be instantiated with
-// a tuple type.
-template <typename T>
-void PrintTupleTo(const T& t, ::std::ostream* os);
-
-// Overloaded PrintTo() for tuples of various arities.  We support
-// tuples of up-to 10 fields.  The following implementation works
-// regardless of whether tr1::tuple is implemented using the
-// non-standard variadic template feature or not.
-
-inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) {
-  PrintTupleTo(t, os);
-}
-
-template <typename T1>
-void PrintTo(const ::std::tr1::tuple<T1>& t, ::std::ostream* os) {
-  PrintTupleTo(t, os);
-}
-
-template <typename T1, typename T2>
-void PrintTo(const ::std::tr1::tuple<T1, T2>& t, ::std::ostream* os) {
-  PrintTupleTo(t, os);
-}
-
-template <typename T1, typename T2, typename T3>
-void PrintTo(const ::std::tr1::tuple<T1, T2, T3>& t, ::std::ostream* os) {
-  PrintTupleTo(t, os);
-}
-
-template <typename T1, typename T2, typename T3, typename T4>
-void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4>& t, ::std::ostream* os) {
-  PrintTupleTo(t, os);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5>
-void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5>& t,
-             ::std::ostream* os) {
-  PrintTupleTo(t, os);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6>
-void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6>& t,
-             ::std::ostream* os) {
-  PrintTupleTo(t, os);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7>
-void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7>& t,
-             ::std::ostream* os) {
-  PrintTupleTo(t, os);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8>
-void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8>& t,
-             ::std::ostream* os) {
-  PrintTupleTo(t, os);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9>
-void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t,
-             ::std::ostream* os) {
-  PrintTupleTo(t, os);
-}
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-          typename T6, typename T7, typename T8, typename T9, typename T10>
-void PrintTo(
-    const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>& t,
-    ::std::ostream* os) {
-  PrintTupleTo(t, os);
-}
-#endif  // GTEST_HAS_TR1_TUPLE
-
-// Overload for std::pair.
-template <typename T1, typename T2>
-void PrintTo(const ::std::pair<T1, T2>& value, ::std::ostream* os) {
-  *os << '(';
-  // We cannot use UniversalPrint(value.first, os) here, as T1 may be
-  // a reference type.  The same for printing value.second.
-  UniversalPrinter<T1>::Print(value.first, os);
-  *os << ", ";
-  UniversalPrinter<T2>::Print(value.second, os);
-  *os << ')';
-}
-
-// Implements printing a non-reference type T by letting the compiler
-// pick the right overload of PrintTo() for T.
-template <typename T>
-class UniversalPrinter {
- public:
-  // MSVC warns about adding const to a function type, so we want to
-  // disable the warning.
-#ifdef _MSC_VER
-# pragma warning(push)          // Saves the current warning state.
-# pragma warning(disable:4180)  // Temporarily disables warning 4180.
-#endif  // _MSC_VER
-
-  // Note: we deliberately don't call this PrintTo(), as that name
-  // conflicts with ::testing::internal::PrintTo in the body of the
-  // function.
-  static void Print(const T& value, ::std::ostream* os) {
-    // By default, ::testing::internal::PrintTo() is used for printing
-    // the value.
-    //
-    // Thanks to Koenig look-up, if T is a class and has its own
-    // PrintTo() function defined in its namespace, that function will
-    // be visible here.  Since it is more specific than the generic ones
-    // in ::testing::internal, it will be picked by the compiler in the
-    // following statement - exactly what we want.
-    PrintTo(value, os);
-  }
-
-#ifdef _MSC_VER
-# pragma warning(pop)           // Restores the warning state.
-#endif  // _MSC_VER
-};
-
-// UniversalPrintArray(begin, len, os) prints an array of 'len'
-// elements, starting at address 'begin'.
-template <typename T>
-void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) {
-  if (len == 0) {
-    *os << "{}";
-  } else {
-    *os << "{ ";
-    const size_t kThreshold = 18;
-    const size_t kChunkSize = 8;
-    // If the array has more than kThreshold elements, we'll have to
-    // omit some details by printing only the first and the last
-    // kChunkSize elements.
-    // TODO(wan at google.com): let the user control the threshold using a flag.
-    if (len <= kThreshold) {
-      PrintRawArrayTo(begin, len, os);
-    } else {
-      PrintRawArrayTo(begin, kChunkSize, os);
-      *os << ", ..., ";
-      PrintRawArrayTo(begin + len - kChunkSize, kChunkSize, os);
-    }
-    *os << " }";
-  }
-}
-// This overload prints a (const) char array compactly.
-GTEST_API_ void UniversalPrintArray(const char* begin,
-                                    size_t len,
-                                    ::std::ostream* os);
-
-// Implements printing an array type T[N].
-template <typename T, size_t N>
-class UniversalPrinter<T[N]> {
- public:
-  // Prints the given array, omitting some elements when there are too
-  // many.
-  static void Print(const T (&a)[N], ::std::ostream* os) {
-    UniversalPrintArray(a, N, os);
-  }
-};
-
-// Implements printing a reference type T&.
-template <typename T>
-class UniversalPrinter<T&> {
- public:
-  // MSVC warns about adding const to a function type, so we want to
-  // disable the warning.
-#ifdef _MSC_VER
-# pragma warning(push)          // Saves the current warning state.
-# pragma warning(disable:4180)  // Temporarily disables warning 4180.
-#endif  // _MSC_VER
-
-  static void Print(const T& value, ::std::ostream* os) {
-    // Prints the address of the value.  We use reinterpret_cast here
-    // as static_cast doesn't compile when T is a function type.
-    *os << "@" << reinterpret_cast<const void*>(&value) << " ";
-
-    // Then prints the value itself.
-    UniversalPrint(value, os);
-  }
-
-#ifdef _MSC_VER
-# pragma warning(pop)           // Restores the warning state.
-#endif  // _MSC_VER
-};
-
-// Prints a value tersely: for a reference type, the referenced value
-// (but not the address) is printed; for a (const) char pointer, the
-// NUL-terminated string (but not the pointer) is printed.
-template <typename T>
-void UniversalTersePrint(const T& value, ::std::ostream* os) {
-  UniversalPrint(value, os);
-}
-inline void UniversalTersePrint(const char* str, ::std::ostream* os) {
-  if (str == NULL) {
-    *os << "NULL";
-  } else {
-    UniversalPrint(string(str), os);
-  }
-}
-inline void UniversalTersePrint(char* str, ::std::ostream* os) {
-  UniversalTersePrint(static_cast<const char*>(str), os);
-}
-
-// Prints a value using the type inferred by the compiler.  The
-// difference between this and UniversalTersePrint() is that for a
-// (const) char pointer, this prints both the pointer and the
-// NUL-terminated string.
-template <typename T>
-void UniversalPrint(const T& value, ::std::ostream* os) {
-  UniversalPrinter<T>::Print(value, os);
-}
-
-#if GTEST_HAS_TR1_TUPLE
-typedef ::std::vector<string> Strings;
-
-// This helper template allows PrintTo() for tuples and
-// UniversalTersePrintTupleFieldsToStrings() to be defined by
-// induction on the number of tuple fields.  The idea is that
-// TuplePrefixPrinter<N>::PrintPrefixTo(t, os) prints the first N
-// fields in tuple t, and can be defined in terms of
-// TuplePrefixPrinter<N - 1>.
-
-// The inductive case.
-template <size_t N>
-struct TuplePrefixPrinter {
-  // Prints the first N fields of a tuple.
-  template <typename Tuple>
-  static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) {
-    TuplePrefixPrinter<N - 1>::PrintPrefixTo(t, os);
-    *os << ", ";
-    UniversalPrinter<typename ::std::tr1::tuple_element<N - 1, Tuple>::type>
-        ::Print(::std::tr1::get<N - 1>(t), os);
-  }
-
-  // Tersely prints the first N fields of a tuple to a string vector,
-  // one element for each field.
-  template <typename Tuple>
-  static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) {
-    TuplePrefixPrinter<N - 1>::TersePrintPrefixToStrings(t, strings);
-    ::std::stringstream ss;
-    UniversalTersePrint(::std::tr1::get<N - 1>(t), &ss);
-    strings->push_back(ss.str());
-  }
-};
-
-// Base cases.
-template <>
-struct TuplePrefixPrinter<0> {
-  template <typename Tuple>
-  static void PrintPrefixTo(const Tuple&, ::std::ostream*) {}
-
-  template <typename Tuple>
-  static void TersePrintPrefixToStrings(const Tuple&, Strings*) {}
-};
-// We have to specialize the entire TuplePrefixPrinter<> class
-// template here, even though the definition of
-// TersePrintPrefixToStrings() is the same as the generic version, as
-// Embarcadero (formerly CodeGear, formerly Borland) C++ doesn't
-// support specializing a method template of a class template.
-template <>
-struct TuplePrefixPrinter<1> {
-  template <typename Tuple>
-  static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) {
-    UniversalPrinter<typename ::std::tr1::tuple_element<0, Tuple>::type>::
-        Print(::std::tr1::get<0>(t), os);
-  }
-
-  template <typename Tuple>
-  static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) {
-    ::std::stringstream ss;
-    UniversalTersePrint(::std::tr1::get<0>(t), &ss);
-    strings->push_back(ss.str());
-  }
-};
-
-// Helper function for printing a tuple.  T must be instantiated with
-// a tuple type.
-template <typename T>
-void PrintTupleTo(const T& t, ::std::ostream* os) {
-  *os << "(";
-  TuplePrefixPrinter< ::std::tr1::tuple_size<T>::value>::
-      PrintPrefixTo(t, os);
-  *os << ")";
-}
-
-// Prints the fields of a tuple tersely to a string vector, one
-// element for each field.  See the comment before
-// UniversalTersePrint() for how we define "tersely".
-template <typename Tuple>
-Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) {
-  Strings result;
-  TuplePrefixPrinter< ::std::tr1::tuple_size<Tuple>::value>::
-      TersePrintPrefixToStrings(value, &result);
-  return result;
-}
-#endif  // GTEST_HAS_TR1_TUPLE
-
-}  // namespace internal
-
-template <typename T>
-::std::string PrintToString(const T& value) {
-  ::std::stringstream ss;
-  internal::UniversalTersePrint(value, &ss);
-  return ss.str();
-}
-
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/gtest-spi.h b/src/libs_3rdparty/gtest/src/gtest/gtest-spi.h
deleted file mode 100644
index b226e55..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/gtest-spi.h
+++ /dev/null
@@ -1,232 +0,0 @@
-// Copyright 2007, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-//
-// Utilities for testing Google Test itself and code that uses Google Test
-// (e.g. frameworks built on top of Google Test).
-
-#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_
-#define GTEST_INCLUDE_GTEST_GTEST_SPI_H_
-
-#include "gtest/gtest.h"
-
-namespace testing {
-
-// This helper class can be used to mock out Google Test failure reporting
-// so that we can test Google Test or code that builds on Google Test.
-//
-// An object of this class appends a TestPartResult object to the
-// TestPartResultArray object given in the constructor whenever a Google Test
-// failure is reported. It can either intercept only failures that are
-// generated in the same thread that created this object or it can intercept
-// all generated failures. The scope of this mock object can be controlled with
-// the second argument to the two arguments constructor.
-class GTEST_API_ ScopedFakeTestPartResultReporter
-    : public TestPartResultReporterInterface {
- public:
-  // The two possible mocking modes of this object.
-  enum InterceptMode {
-    INTERCEPT_ONLY_CURRENT_THREAD,  // Intercepts only thread local failures.
-    INTERCEPT_ALL_THREADS           // Intercepts all failures.
-  };
-
-  // The c'tor sets this object as the test part result reporter used
-  // by Google Test.  The 'result' parameter specifies where to report the
-  // results. This reporter will only catch failures generated in the current
-  // thread. DEPRECATED
-  explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result);
-
-  // Same as above, but you can choose the interception scope of this object.
-  ScopedFakeTestPartResultReporter(InterceptMode intercept_mode,
-                                   TestPartResultArray* result);
-
-  // The d'tor restores the previous test part result reporter.
-  virtual ~ScopedFakeTestPartResultReporter();
-
-  // Appends the TestPartResult object to the TestPartResultArray
-  // received in the constructor.
-  //
-  // This method is from the TestPartResultReporterInterface
-  // interface.
-  virtual void ReportTestPartResult(const TestPartResult& result);
- private:
-  void Init();
-
-  const InterceptMode intercept_mode_;
-  TestPartResultReporterInterface* old_reporter_;
-  TestPartResultArray* const result_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter);
-};
-
-namespace internal {
-
-// A helper class for implementing EXPECT_FATAL_FAILURE() and
-// EXPECT_NONFATAL_FAILURE().  Its destructor verifies that the given
-// TestPartResultArray contains exactly one failure that has the given
-// type and contains the given substring.  If that's not the case, a
-// non-fatal failure will be generated.
-class GTEST_API_ SingleFailureChecker {
- public:
-  // The constructor remembers the arguments.
-  SingleFailureChecker(const TestPartResultArray* results,
-                       TestPartResult::Type type,
-                       const string& substr);
-  ~SingleFailureChecker();
- private:
-  const TestPartResultArray* const results_;
-  const TestPartResult::Type type_;
-  const string substr_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker);
-};
-
-}  // namespace internal
-
-}  // namespace testing
-
-// A set of macros for testing Google Test assertions or code that's expected
-// to generate Google Test fatal failures.  It verifies that the given
-// statement will cause exactly one fatal Google Test failure with 'substr'
-// being part of the failure message.
-//
-// There are two different versions of this macro. EXPECT_FATAL_FAILURE only
-// affects and considers failures generated in the current thread and
-// EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads.
-//
-// The verification of the assertion is done correctly even when the statement
-// throws an exception or aborts the current function.
-//
-// Known restrictions:
-//   - 'statement' cannot reference local non-static variables or
-//     non-static members of the current object.
-//   - 'statement' cannot return a value.
-//   - You cannot stream a failure message to this macro.
-//
-// Note that even though the implementations of the following two
-// macros are much alike, we cannot refactor them to use a common
-// helper macro, due to some peculiarity in how the preprocessor
-// works.  The AcceptsMacroThatExpandsToUnprotectedComma test in
-// gtest_unittest.cc will fail to compile if we do that.
-#define EXPECT_FATAL_FAILURE(statement, substr) \
-  do { \
-    class GTestExpectFatalFailureHelper {\
-     public:\
-      static void Execute() { statement; }\
-    };\
-    ::testing::TestPartResultArray gtest_failures;\
-    ::testing::internal::SingleFailureChecker gtest_checker(\
-        &gtest_failures, ::testing::TestPartResult::kFatalFailure, (substr));\
-    {\
-      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
-          ::testing::ScopedFakeTestPartResultReporter:: \
-          INTERCEPT_ONLY_CURRENT_THREAD, &gtest_failures);\
-      GTestExpectFatalFailureHelper::Execute();\
-    }\
-  } while (::testing::internal::AlwaysFalse())
-
-#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \
-  do { \
-    class GTestExpectFatalFailureHelper {\
-     public:\
-      static void Execute() { statement; }\
-    };\
-    ::testing::TestPartResultArray gtest_failures;\
-    ::testing::internal::SingleFailureChecker gtest_checker(\
-        &gtest_failures, ::testing::TestPartResult::kFatalFailure, (substr));\
-    {\
-      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
-          ::testing::ScopedFakeTestPartResultReporter:: \
-          INTERCEPT_ALL_THREADS, &gtest_failures);\
-      GTestExpectFatalFailureHelper::Execute();\
-    }\
-  } while (::testing::internal::AlwaysFalse())
-
-// A macro for testing Google Test assertions or code that's expected to
-// generate Google Test non-fatal failures.  It asserts that the given
-// statement will cause exactly one non-fatal Google Test failure with 'substr'
-// being part of the failure message.
-//
-// There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only
-// affects and considers failures generated in the current thread and
-// EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads.
-//
-// 'statement' is allowed to reference local variables and members of
-// the current object.
-//
-// The verification of the assertion is done correctly even when the statement
-// throws an exception or aborts the current function.
-//
-// Known restrictions:
-//   - You cannot stream a failure message to this macro.
-//
-// Note that even though the implementations of the following two
-// macros are much alike, we cannot refactor them to use a common
-// helper macro, due to some peculiarity in how the preprocessor
-// works.  If we do that, the code won't compile when the user gives
-// EXPECT_NONFATAL_FAILURE() a statement that contains a macro that
-// expands to code containing an unprotected comma.  The
-// AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc
-// catches that.
-//
-// For the same reason, we have to write
-//   if (::testing::internal::AlwaysTrue()) { statement; }
-// instead of
-//   GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)
-// to avoid an MSVC warning on unreachable code.
-#define EXPECT_NONFATAL_FAILURE(statement, substr) \
-  do {\
-    ::testing::TestPartResultArray gtest_failures;\
-    ::testing::internal::SingleFailureChecker gtest_checker(\
-        &gtest_failures, ::testing::TestPartResult::kNonFatalFailure, \
-        (substr));\
-    {\
-      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
-          ::testing::ScopedFakeTestPartResultReporter:: \
-          INTERCEPT_ONLY_CURRENT_THREAD, &gtest_failures);\
-      if (::testing::internal::AlwaysTrue()) { statement; }\
-    }\
-  } while (::testing::internal::AlwaysFalse())
-
-#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \
-  do {\
-    ::testing::TestPartResultArray gtest_failures;\
-    ::testing::internal::SingleFailureChecker gtest_checker(\
-        &gtest_failures, ::testing::TestPartResult::kNonFatalFailure, \
-        (substr));\
-    {\
-      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
-          ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS,\
-          &gtest_failures);\
-      if (::testing::internal::AlwaysTrue()) { statement; }\
-    }\
-  } while (::testing::internal::AlwaysFalse())
-
-#endif  // GTEST_INCLUDE_GTEST_GTEST_SPI_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/gtest-test-part.h b/src/libs_3rdparty/gtest/src/gtest/gtest-test-part.h
deleted file mode 100644
index 8aeea14..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/gtest-test-part.h
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright 2008, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: mheule at google.com (Markus Heule)
-//
-
-#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
-#define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
-
-#include <iosfwd>
-#include <vector>
-#include "gtest/internal/gtest-internal.h"
-#include "gtest/internal/gtest-string.h"
-
-namespace testing {
-
-// A copyable object representing the result of a test part (i.e. an
-// assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()).
-//
-// Don't inherit from TestPartResult as its destructor is not virtual.
-class GTEST_API_ TestPartResult {
- public:
-  // The possible outcomes of a test part (i.e. an assertion or an
-  // explicit SUCCEED(), FAIL(), or ADD_FAILURE()).
-  enum Type {
-    kSuccess,          // Succeeded.
-    kNonFatalFailure,  // Failed but the test can continue.
-    kFatalFailure      // Failed and the test should be terminated.
-  };
-
-  // C'tor.  TestPartResult does NOT have a default constructor.
-  // Always use this constructor (with parameters) to create a
-  // TestPartResult object.
-  TestPartResult(Type a_type,
-                 const char* a_file_name,
-                 int a_line_number,
-                 const char* a_message)
-      : type_(a_type),
-        file_name_(a_file_name),
-        line_number_(a_line_number),
-        summary_(ExtractSummary(a_message)),
-        message_(a_message) {
-  }
-
-  // Gets the outcome of the test part.
-  Type type() const { return type_; }
-
-  // Gets the name of the source file where the test part took place, or
-  // NULL if it's unknown.
-  const char* file_name() const { return file_name_.c_str(); }
-
-  // Gets the line in the source file where the test part took place,
-  // or -1 if it's unknown.
-  int line_number() const { return line_number_; }
-
-  // Gets the summary of the failure message.
-  const char* summary() const { return summary_.c_str(); }
-
-  // Gets the message associated with the test part.
-  const char* message() const { return message_.c_str(); }
-
-  // Returns true iff the test part passed.
-  bool passed() const { return type_ == kSuccess; }
-
-  // Returns true iff the test part failed.
-  bool failed() const { return type_ != kSuccess; }
-
-  // Returns true iff the test part non-fatally failed.
-  bool nonfatally_failed() const { return type_ == kNonFatalFailure; }
-
-  // Returns true iff the test part fatally failed.
-  bool fatally_failed() const { return type_ == kFatalFailure; }
- private:
-  Type type_;
-
-  // Gets the summary of the failure message by omitting the stack
-  // trace in it.
-  static internal::String ExtractSummary(const char* message);
-
-  // The name of the source file where the test part took place, or
-  // NULL if the source file is unknown.
-  internal::String file_name_;
-  // The line in the source file where the test part took place, or -1
-  // if the line number is unknown.
-  int line_number_;
-  internal::String summary_;  // The test failure summary.
-  internal::String message_;  // The test failure message.
-};
-
-// Prints a TestPartResult object.
-std::ostream& operator<<(std::ostream& os, const TestPartResult& result);
-
-// An array of TestPartResult objects.
-//
-// Don't inherit from TestPartResultArray as its destructor is not
-// virtual.
-class GTEST_API_ TestPartResultArray {
- public:
-  TestPartResultArray() {}
-
-  // Appends the given TestPartResult to the array.
-  void Append(const TestPartResult& result);
-
-  // Returns the TestPartResult at the given index (0-based).
-  const TestPartResult& GetTestPartResult(int index) const;
-
-  // Returns the number of TestPartResult objects in the array.
-  int size() const;
-
- private:
-  std::vector<TestPartResult> array_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestPartResultArray);
-};
-
-// This interface knows how to report a test part result.
-class TestPartResultReporterInterface {
- public:
-  virtual ~TestPartResultReporterInterface() {}
-
-  virtual void ReportTestPartResult(const TestPartResult& result) = 0;
-};
-
-namespace internal {
-
-// This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a
-// statement generates new fatal failures. To do so it registers itself as the
-// current test part result reporter. Besides checking if fatal failures were
-// reported, it only delegates the reporting to the former result reporter.
-// The original result reporter is restored in the destructor.
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-class GTEST_API_ HasNewFatalFailureHelper
-    : public TestPartResultReporterInterface {
- public:
-  HasNewFatalFailureHelper();
-  virtual ~HasNewFatalFailureHelper();
-  virtual void ReportTestPartResult(const TestPartResult& result);
-  bool has_new_fatal_failure() const { return has_new_fatal_failure_; }
- private:
-  bool has_new_fatal_failure_;
-  TestPartResultReporterInterface* original_reporter_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(HasNewFatalFailureHelper);
-};
-
-}  // namespace internal
-
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/gtest-typed-test.h b/src/libs_3rdparty/gtest/src/gtest/gtest-typed-test.h
deleted file mode 100644
index fe1e83b..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/gtest-typed-test.h
+++ /dev/null
@@ -1,259 +0,0 @@
-// Copyright 2008 Google Inc.
-// All Rights Reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-
-#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
-#define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
-
-// This header implements typed tests and type-parameterized tests.
-
-// Typed (aka type-driven) tests repeat the same test for types in a
-// list.  You must know which types you want to test with when writing
-// typed tests. Here's how you do it:
-
-#if 0
-
-// First, define a fixture class template.  It should be parameterized
-// by a type.  Remember to derive it from testing::Test.
-template <typename T>
-class FooTest : public testing::Test {
- public:
-  ...
-  typedef std::list<T> List;
-  static T shared_;
-  T value_;
-};
-
-// Next, associate a list of types with the test case, which will be
-// repeated for each type in the list.  The typedef is necessary for
-// the macro to parse correctly.
-typedef testing::Types<char, int, unsigned int> MyTypes;
-TYPED_TEST_CASE(FooTest, MyTypes);
-
-// If the type list contains only one type, you can write that type
-// directly without Types<...>:
-//   TYPED_TEST_CASE(FooTest, int);
-
-// Then, use TYPED_TEST() instead of TEST_F() to define as many typed
-// tests for this test case as you want.
-TYPED_TEST(FooTest, DoesBlah) {
-  // Inside a test, refer to TypeParam to get the type parameter.
-  // Since we are inside a derived class template, C++ requires use to
-  // visit the members of FooTest via 'this'.
-  TypeParam n = this->value_;
-
-  // To visit static members of the fixture, add the TestFixture::
-  // prefix.
-  n += TestFixture::shared_;
-
-  // To refer to typedefs in the fixture, add the "typename
-  // TestFixture::" prefix.
-  typename TestFixture::List values;
-  values.push_back(n);
-  ...
-}
-
-TYPED_TEST(FooTest, HasPropertyA) { ... }
-
-#endif  // 0
-
-// Type-parameterized tests are abstract test patterns parameterized
-// by a type.  Compared with typed tests, type-parameterized tests
-// allow you to define the test pattern without knowing what the type
-// parameters are.  The defined pattern can be instantiated with
-// different types any number of times, in any number of translation
-// units.
-//
-// If you are designing an interface or concept, you can define a
-// suite of type-parameterized tests to verify properties that any
-// valid implementation of the interface/concept should have.  Then,
-// each implementation can easily instantiate the test suite to verify
-// that it conforms to the requirements, without having to write
-// similar tests repeatedly.  Here's an example:
-
-#if 0
-
-// First, define a fixture class template.  It should be parameterized
-// by a type.  Remember to derive it from testing::Test.
-template <typename T>
-class FooTest : public testing::Test {
-  ...
-};
-
-// Next, declare that you will define a type-parameterized test case
-// (the _P suffix is for "parameterized" or "pattern", whichever you
-// prefer):
-TYPED_TEST_CASE_P(FooTest);
-
-// Then, use TYPED_TEST_P() to define as many type-parameterized tests
-// for this type-parameterized test case as you want.
-TYPED_TEST_P(FooTest, DoesBlah) {
-  // Inside a test, refer to TypeParam to get the type parameter.
-  TypeParam n = 0;
-  ...
-}
-
-TYPED_TEST_P(FooTest, HasPropertyA) { ... }
-
-// Now the tricky part: you need to register all test patterns before
-// you can instantiate them.  The first argument of the macro is the
-// test case name; the rest are the names of the tests in this test
-// case.
-REGISTER_TYPED_TEST_CASE_P(FooTest,
-                           DoesBlah, HasPropertyA);
-
-// Finally, you are free to instantiate the pattern with the types you
-// want.  If you put the above code in a header file, you can #include
-// it in multiple C++ source files and instantiate it multiple times.
-//
-// To distinguish different instances of the pattern, the first
-// argument to the INSTANTIATE_* macro is a prefix that will be added
-// to the actual test case name.  Remember to pick unique prefixes for
-// different instances.
-typedef testing::Types<char, int, unsigned int> MyTypes;
-INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes);
-
-// If the type list contains only one type, you can write that type
-// directly without Types<...>:
-//   INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, int);
-
-#endif  // 0
-
-#include "gtest/internal/gtest-port.h"
-#include "gtest/internal/gtest-type-util.h"
-
-// Implements typed tests.
-
-#if GTEST_HAS_TYPED_TEST
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// Expands to the name of the typedef for the type parameters of the
-// given test case.
-# define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_
-
-// The 'Types' template argument below must have spaces around it
-// since some compilers may choke on '>>' when passing a template
-// instance (e.g. Types<int>)
-# define TYPED_TEST_CASE(CaseName, Types) \
-  typedef ::testing::internal::TypeList< Types >::type \
-      GTEST_TYPE_PARAMS_(CaseName)
-
-# define TYPED_TEST(CaseName, TestName) \
-  template <typename gtest_TypeParam_> \
-  class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
-      : public CaseName<gtest_TypeParam_> { \
-   private: \
-    typedef CaseName<gtest_TypeParam_> TestFixture; \
-    typedef gtest_TypeParam_ TypeParam; \
-    virtual void TestBody(); \
-  }; \
-  bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \
-      ::testing::internal::TypeParameterizedTest< \
-          CaseName, \
-          ::testing::internal::TemplateSel< \
-              GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \
-          GTEST_TYPE_PARAMS_(CaseName)>::Register(\
-              "", #CaseName, #TestName, 0); \
-  template <typename gtest_TypeParam_> \
-  void GTEST_TEST_CLASS_NAME_(CaseName, TestName)<gtest_TypeParam_>::TestBody()
-
-#endif  // GTEST_HAS_TYPED_TEST
-
-// Implements type-parameterized tests.
-
-#if GTEST_HAS_TYPED_TEST_P
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// Expands to the namespace name that the type-parameterized tests for
-// the given type-parameterized test case are defined in.  The exact
-// name of the namespace is subject to change without notice.
-# define GTEST_CASE_NAMESPACE_(TestCaseName) \
-  gtest_case_##TestCaseName##_
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// Expands to the name of the variable used to remember the names of
-// the defined tests in the given test case.
-# define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \
-  gtest_typed_test_case_p_state_##TestCaseName##_
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY.
-//
-// Expands to the name of the variable used to remember the names of
-// the registered tests in the given test case.
-# define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \
-  gtest_registered_test_names_##TestCaseName##_
-
-// The variables defined in the type-parameterized test macros are
-// static as typically these macros are used in a .h file that can be
-// #included in multiple translation units linked together.
-# define TYPED_TEST_CASE_P(CaseName) \
-  static ::testing::internal::TypedTestCasePState \
-      GTEST_TYPED_TEST_CASE_P_STATE_(CaseName)
-
-# define TYPED_TEST_P(CaseName, TestName) \
-  namespace GTEST_CASE_NAMESPACE_(CaseName) { \
-  template <typename gtest_TypeParam_> \
-  class TestName : public CaseName<gtest_TypeParam_> { \
-   private: \
-    typedef CaseName<gtest_TypeParam_> TestFixture; \
-    typedef gtest_TypeParam_ TypeParam; \
-    virtual void TestBody(); \
-  }; \
-  static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \
-      GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\
-          __FILE__, __LINE__, #CaseName, #TestName); \
-  } \
-  template <typename gtest_TypeParam_> \
-  void GTEST_CASE_NAMESPACE_(CaseName)::TestName<gtest_TypeParam_>::TestBody()
-
-# define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \
-  namespace GTEST_CASE_NAMESPACE_(CaseName) { \
-  typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \
-  } \
-  static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \
-      GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\
-          __FILE__, __LINE__, #__VA_ARGS__)
-
-// The 'Types' template argument below must have spaces around it
-// since some compilers may choke on '>>' when passing a template
-// instance (e.g. Types<int>)
-# define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \
-  bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \
-      ::testing::internal::TypeParameterizedTestCase<CaseName, \
-          GTEST_CASE_NAMESPACE_(CaseName)::gtest_AllTests_, \
-          ::testing::internal::TypeList< Types >::type>::Register(\
-              #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName))
-
-#endif  // GTEST_HAS_TYPED_TEST_P
-
-#endif  // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/gtest.h b/src/libs_3rdparty/gtest/src/gtest/gtest.h
deleted file mode 100644
index cd01c7b..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/gtest.h
+++ /dev/null
@@ -1,2155 +0,0 @@
-// Copyright 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-//
-// The Google C++ Testing Framework (Google Test)
-//
-// This header file defines the public API for Google Test.  It should be
-// included by any test program that uses Google Test.
-//
-// IMPORTANT NOTE: Due to limitation of the C++ language, we have to
-// leave some internal implementation details in this header file.
-// They are clearly marked by comments like this:
-//
-//   // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-//
-// Such code is NOT meant to be used by a user directly, and is subject
-// to CHANGE WITHOUT NOTICE.  Therefore DO NOT DEPEND ON IT in a user
-// program!
-//
-// Acknowledgment: Google Test borrowed the idea of automatic test
-// registration from Barthelemy Dagenais' (barthelemy at prologique.com)
-// easyUnit framework.
-
-#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
-#define GTEST_INCLUDE_GTEST_GTEST_H_
-
-#include <limits>
-#include <vector>
-
-#include "gtest/internal/gtest-internal.h"
-#include "gtest/internal/gtest-string.h"
-#include "gtest/gtest-death-test.h"
-#include "gtest/gtest-message.h"
-#include "gtest/gtest-param-test.h"
-#include "gtest/gtest-printers.h"
-#include "gtest/gtest_prod.h"
-#include "gtest/gtest-test-part.h"
-#include "gtest/gtest-typed-test.h"
-
-// Depending on the platform, different string classes are available.
-// On Linux, in addition to ::std::string, Google also makes use of
-// class ::string, which has the same interface as ::std::string, but
-// has a different implementation.
-//
-// The user can define GTEST_HAS_GLOBAL_STRING to 1 to indicate that
-// ::string is available AND is a distinct type to ::std::string, or
-// define it to 0 to indicate otherwise.
-//
-// If the user's ::std::string and ::string are the same class due to
-// aliasing, he should define GTEST_HAS_GLOBAL_STRING to 0.
-//
-// If the user doesn't define GTEST_HAS_GLOBAL_STRING, it is defined
-// heuristically.
-
-namespace testing {
-
-// Declares the flags.
-
-// This flag temporary enables the disabled tests.
-GTEST_DECLARE_bool_(also_run_disabled_tests);
-
-// This flag brings the debugger on an assertion failure.
-GTEST_DECLARE_bool_(break_on_failure);
-
-// This flag controls whether Google Test catches all test-thrown exceptions
-// and logs them as failures.
-GTEST_DECLARE_bool_(catch_exceptions);
-
-// This flag enables using colors in terminal output. Available values are
-// "yes" to enable colors, "no" (disable colors), or "auto" (the default)
-// to let Google Test decide.
-GTEST_DECLARE_string_(color);
-
-// This flag sets up the filter to select by name using a glob pattern
-// the tests to run. If the filter is not given all tests are executed.
-GTEST_DECLARE_string_(filter);
-
-// This flag causes the Google Test to list tests. None of the tests listed
-// are actually run if the flag is provided.
-GTEST_DECLARE_bool_(list_tests);
-
-// This flag controls whether Google Test emits a detailed XML report to a file
-// in addition to its normal textual output.
-GTEST_DECLARE_string_(output);
-
-// This flags control whether Google Test prints the elapsed time for each
-// test.
-GTEST_DECLARE_bool_(print_time);
-
-// This flag specifies the random number seed.
-GTEST_DECLARE_int32_(random_seed);
-
-// This flag sets how many times the tests are repeated. The default value
-// is 1. If the value is -1 the tests are repeating forever.
-GTEST_DECLARE_int32_(repeat);
-
-// This flag controls whether Google Test includes Google Test internal
-// stack frames in failure stack traces.
-GTEST_DECLARE_bool_(show_internal_stack_frames);
-
-// When this flag is specified, tests' order is randomized on every iteration.
-GTEST_DECLARE_bool_(shuffle);
-
-// This flag specifies the maximum number of stack frames to be
-// printed in a failure message.
-GTEST_DECLARE_int32_(stack_trace_depth);
-
-// When this flag is specified, a failed assertion will throw an
-// exception if exceptions are enabled, or exit the program with a
-// non-zero code otherwise.
-GTEST_DECLARE_bool_(throw_on_failure);
-
-// When this flag is set with a "host:port" string, on supported
-// platforms test results are streamed to the specified port on
-// the specified host machine.
-GTEST_DECLARE_string_(stream_result_to);
-
-// The upper limit for valid stack trace depths.
-const int kMaxStackTraceDepth = 100;
-
-namespace internal {
-
-class AssertHelper;
-class DefaultGlobalTestPartResultReporter;
-class ExecDeathTest;
-class NoExecDeathTest;
-class FinalSuccessChecker;
-class GTestFlagSaver;
-class TestResultAccessor;
-class TestEventListenersAccessor;
-class TestEventRepeater;
-class WindowsDeathTest;
-class UnitTestImpl* GetUnitTestImpl();
-void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
-                                    const String& message);
-
-// Converts a streamable value to a String.  A NULL pointer is
-// converted to "(null)".  When the input value is a ::string,
-// ::std::string, ::wstring, or ::std::wstring object, each NUL
-// character in it is replaced with "\\0".
-// Declared in gtest-internal.h but defined here, so that it has access
-// to the definition of the Message class, required by the ARM
-// compiler.
-template <typename T>
-String StreamableToString(const T& streamable) {
-  return (Message() << streamable).GetString();
-}
-
-}  // namespace internal
-
-// The friend relationship of some of these classes is cyclic.
-// If we don't forward declare them the compiler might confuse the classes
-// in friendship clauses with same named classes on the scope.
-class Test;
-class TestCase;
-class TestInfo;
-class UnitTest;
-
-// A class for indicating whether an assertion was successful.  When
-// the assertion wasn't successful, the AssertionResult object
-// remembers a non-empty message that describes how it failed.
-//
-// To create an instance of this class, use one of the factory functions
-// (AssertionSuccess() and AssertionFailure()).
-//
-// This class is useful for two purposes:
-//   1. Defining predicate functions to be used with Boolean test assertions
-//      EXPECT_TRUE/EXPECT_FALSE and their ASSERT_ counterparts
-//   2. Defining predicate-format functions to be
-//      used with predicate assertions (ASSERT_PRED_FORMAT*, etc).
-//
-// For example, if you define IsEven predicate:
-//
-//   testing::AssertionResult IsEven(int n) {
-//     if ((n % 2) == 0)
-//       return testing::AssertionSuccess();
-//     else
-//       return testing::AssertionFailure() << n << " is odd";
-//   }
-//
-// Then the failed expectation EXPECT_TRUE(IsEven(Fib(5)))
-// will print the message
-//
-//   Value of: IsEven(Fib(5))
-//     Actual: false (5 is odd)
-//   Expected: true
-//
-// instead of a more opaque
-//
-//   Value of: IsEven(Fib(5))
-//     Actual: false
-//   Expected: true
-//
-// in case IsEven is a simple Boolean predicate.
-//
-// If you expect your predicate to be reused and want to support informative
-// messages in EXPECT_FALSE and ASSERT_FALSE (negative assertions show up
-// about half as often as positive ones in our tests), supply messages for
-// both success and failure cases:
-//
-//   testing::AssertionResult IsEven(int n) {
-//     if ((n % 2) == 0)
-//       return testing::AssertionSuccess() << n << " is even";
-//     else
-//       return testing::AssertionFailure() << n << " is odd";
-//   }
-//
-// Then a statement EXPECT_FALSE(IsEven(Fib(6))) will print
-//
-//   Value of: IsEven(Fib(6))
-//     Actual: true (8 is even)
-//   Expected: false
-//
-// NB: Predicates that support negative Boolean assertions have reduced
-// performance in positive ones so be careful not to use them in tests
-// that have lots (tens of thousands) of positive Boolean assertions.
-//
-// To use this class with EXPECT_PRED_FORMAT assertions such as:
-//
-//   // Verifies that Foo() returns an even number.
-//   EXPECT_PRED_FORMAT1(IsEven, Foo());
-//
-// you need to define:
-//
-//   testing::AssertionResult IsEven(const char* expr, int n) {
-//     if ((n % 2) == 0)
-//       return testing::AssertionSuccess();
-//     else
-//       return testing::AssertionFailure()
-//         << "Expected: " << expr << " is even\n  Actual: it's " << n;
-//   }
-//
-// If Foo() returns 5, you will see the following message:
-//
-//   Expected: Foo() is even
-//     Actual: it's 5
-//
-class GTEST_API_ AssertionResult {
- public:
-  // Copy constructor.
-  // Used in EXPECT_TRUE/FALSE(assertion_result).
-  AssertionResult(const AssertionResult& other);
-  // Used in the EXPECT_TRUE/FALSE(bool_expression).
-  explicit AssertionResult(bool success) : success_(success) {}
-
-  // Returns true iff the assertion succeeded.
-  operator bool() const { return success_; }  // NOLINT
-
-  // Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE.
-  AssertionResult operator!() const;
-
-  // Returns the text streamed into this AssertionResult. Test assertions
-  // use it when they fail (i.e., the predicate's outcome doesn't match the
-  // assertion's expectation). When nothing has been streamed into the
-  // object, returns an empty string.
-  const char* message() const {
-    return message_.get() != NULL ?  message_->c_str() : "";
-  }
-  // TODO(vladl at google.com): Remove this after making sure no clients use it.
-  // Deprecated; please use message() instead.
-  const char* failure_message() const { return message(); }
-
-  // Streams a custom failure message into this object.
-  template <typename T> AssertionResult& operator<<(const T& value) {
-    AppendMessage(Message() << value);
-    return *this;
-  }
-
-  // Allows streaming basic output manipulators such as endl or flush into
-  // this object.
-  AssertionResult& operator<<(
-      ::std::ostream& (*basic_manipulator)(::std::ostream& stream)) {
-    AppendMessage(Message() << basic_manipulator);
-    return *this;
-  }
-
- private:
-  // Appends the contents of message to message_.
-  void AppendMessage(const Message& a_message) {
-    if (message_.get() == NULL)
-      message_.reset(new ::std::string);
-    message_->append(a_message.GetString().c_str());
-  }
-
-  // Stores result of the assertion predicate.
-  bool success_;
-  // Stores the message describing the condition in case the expectation
-  // construct is not satisfied with the predicate's outcome.
-  // Referenced via a pointer to avoid taking too much stack frame space
-  // with test assertions.
-  internal::scoped_ptr< ::std::string> message_;
-
-  GTEST_DISALLOW_ASSIGN_(AssertionResult);
-};
-
-// Makes a successful assertion result.
-GTEST_API_ AssertionResult AssertionSuccess();
-
-// Makes a failed assertion result.
-GTEST_API_ AssertionResult AssertionFailure();
-
-// Makes a failed assertion result with the given failure message.
-// Deprecated; use AssertionFailure() << msg.
-GTEST_API_ AssertionResult AssertionFailure(const Message& msg);
-
-// The abstract class that all tests inherit from.
-//
-// In Google Test, a unit test program contains one or many TestCases, and
-// each TestCase contains one or many Tests.
-//
-// When you define a test using the TEST macro, you don't need to
-// explicitly derive from Test - the TEST macro automatically does
-// this for you.
-//
-// The only time you derive from Test is when defining a test fixture
-// to be used a TEST_F.  For example:
-//
-//   class FooTest : public testing::Test {
-//    protected:
-//     virtual void SetUp() { ... }
-//     virtual void TearDown() { ... }
-//     ...
-//   };
-//
-//   TEST_F(FooTest, Bar) { ... }
-//   TEST_F(FooTest, Baz) { ... }
-//
-// Test is not copyable.
-class GTEST_API_ Test {
- public:
-  friend class TestInfo;
-
-  // Defines types for pointers to functions that set up and tear down
-  // a test case.
-  typedef internal::SetUpTestCaseFunc SetUpTestCaseFunc;
-  typedef internal::TearDownTestCaseFunc TearDownTestCaseFunc;
-
-  // The d'tor is virtual as we intend to inherit from Test.
-  virtual ~Test();
-
-  // Sets up the stuff shared by all tests in this test case.
-  //
-  // Google Test will call Foo::SetUpTestCase() before running the first
-  // test in test case Foo.  Hence a sub-class can define its own
-  // SetUpTestCase() method to shadow the one defined in the super
-  // class.
-  static void SetUpTestCase() {}
-
-  // Tears down the stuff shared by all tests in this test case.
-  //
-  // Google Test will call Foo::TearDownTestCase() after running the last
-  // test in test case Foo.  Hence a sub-class can define its own
-  // TearDownTestCase() method to shadow the one defined in the super
-  // class.
-  static void TearDownTestCase() {}
-
-  // Returns true iff the current test has a fatal failure.
-  static bool HasFatalFailure();
-
-  // Returns true iff the current test has a non-fatal failure.
-  static bool HasNonfatalFailure();
-
-  // Returns true iff the current test has a (either fatal or
-  // non-fatal) failure.
-  static bool HasFailure() { return HasFatalFailure() || HasNonfatalFailure(); }
-
-  // Logs a property for the current test.  Only the last value for a given
-  // key is remembered.
-  // These are public static so they can be called from utility functions
-  // that are not members of the test fixture.
-  // The arguments are const char* instead strings, as Google Test is used
-  // on platforms where string doesn't compile.
-  //
-  // Note that a driving consideration for these RecordProperty methods
-  // was to produce xml output suited to the Greenspan charting utility,
-  // which at present will only chart values that fit in a 32-bit int. It
-  // is the user's responsibility to restrict their values to 32-bit ints
-  // if they intend them to be used with Greenspan.
-  static void RecordProperty(const char* key, const char* value);
-  static void RecordProperty(const char* key, int value);
-
- protected:
-  // Creates a Test object.
-  Test();
-
-  // Sets up the test fixture.
-  virtual void SetUp();
-
-  // Tears down the test fixture.
-  virtual void TearDown();
-
- private:
-  // Returns true iff the current test has the same fixture class as
-  // the first test in the current test case.
-  static bool HasSameFixtureClass();
-
-  // Runs the test after the test fixture has been set up.
-  //
-  // A sub-class must implement this to define the test logic.
-  //
-  // DO NOT OVERRIDE THIS FUNCTION DIRECTLY IN A USER PROGRAM.
-  // Instead, use the TEST or TEST_F macro.
-  virtual void TestBody() = 0;
-
-  // Sets up, executes, and tears down the test.
-  void Run();
-
-  // Deletes self.  We deliberately pick an unusual name for this
-  // internal method to avoid clashing with names used in user TESTs.
-  void DeleteSelf_() { delete this; }
-
-  // Uses a GTestFlagSaver to save and restore all Google Test flags.
-  const internal::GTestFlagSaver* const gtest_flag_saver_;
-
-  // Often a user mis-spells SetUp() as Setup() and spends a long time
-  // wondering why it is never called by Google Test.  The declaration of
-  // the following method is solely for catching such an error at
-  // compile time:
-  //
-  //   - The return type is deliberately chosen to be not void, so it
-  //   will be a conflict if a user declares void Setup() in his test
-  //   fixture.
-  //
-  //   - This method is private, so it will be another compiler error
-  //   if a user calls it from his test fixture.
-  //
-  // DO NOT OVERRIDE THIS FUNCTION.
-  //
-  // If you see an error about overriding the following function or
-  // about it being private, you have mis-spelled SetUp() as Setup().
-  struct Setup_should_be_spelled_SetUp {};
-  virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; }
-
-  // We disallow copying Tests.
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(Test);
-};
-
-typedef internal::TimeInMillis TimeInMillis;
-
-// A copyable object representing a user specified test property which can be
-// output as a key/value string pair.
-//
-// Don't inherit from TestProperty as its destructor is not virtual.
-class TestProperty {
- public:
-  // C'tor.  TestProperty does NOT have a default constructor.
-  // Always use this constructor (with parameters) to create a
-  // TestProperty object.
-  TestProperty(const char* a_key, const char* a_value) :
-    key_(a_key), value_(a_value) {
-  }
-
-  // Gets the user supplied key.
-  const char* key() const {
-    return key_.c_str();
-  }
-
-  // Gets the user supplied value.
-  const char* value() const {
-    return value_.c_str();
-  }
-
-  // Sets a new value, overriding the one supplied in the constructor.
-  void SetValue(const char* new_value) {
-    value_ = new_value;
-  }
-
- private:
-  // The key supplied by the user.
-  internal::String key_;
-  // The value supplied by the user.
-  internal::String value_;
-};
-
-// The result of a single Test.  This includes a list of
-// TestPartResults, a list of TestProperties, a count of how many
-// death tests there are in the Test, and how much time it took to run
-// the Test.
-//
-// TestResult is not copyable.
-class GTEST_API_ TestResult {
- public:
-  // Creates an empty TestResult.
-  TestResult();
-
-  // D'tor.  Do not inherit from TestResult.
-  ~TestResult();
-
-  // Gets the number of all test parts.  This is the sum of the number
-  // of successful test parts and the number of failed test parts.
-  int total_part_count() const;
-
-  // Returns the number of the test properties.
-  int test_property_count() const;
-
-  // Returns true iff the test passed (i.e. no test part failed).
-  bool Passed() const { return !Failed(); }
-
-  // Returns true iff the test failed.
-  bool Failed() const;
-
-  // Returns true iff the test fatally failed.
-  bool HasFatalFailure() const;
-
-  // Returns true iff the test has a non-fatal failure.
-  bool HasNonfatalFailure() const;
-
-  // Returns the elapsed time, in milliseconds.
-  TimeInMillis elapsed_time() const { return elapsed_time_; }
-
-  // Returns the i-th test part result among all the results. i can range
-  // from 0 to test_property_count() - 1. If i is not in that range, aborts
-  // the program.
-  const TestPartResult& GetTestPartResult(int i) const;
-
-  // Returns the i-th test property. i can range from 0 to
-  // test_property_count() - 1. If i is not in that range, aborts the
-  // program.
-  const TestProperty& GetTestProperty(int i) const;
-
- private:
-  friend class TestInfo;
-  friend class UnitTest;
-  friend class internal::DefaultGlobalTestPartResultReporter;
-  friend class internal::ExecDeathTest;
-  friend class internal::TestResultAccessor;
-  friend class internal::UnitTestImpl;
-  friend class internal::WindowsDeathTest;
-
-  // Gets the vector of TestPartResults.
-  const std::vector<TestPartResult>& test_part_results() const {
-    return test_part_results_;
-  }
-
-  // Gets the vector of TestProperties.
-  const std::vector<TestProperty>& test_properties() const {
-    return test_properties_;
-  }
-
-  // Sets the elapsed time.
-  void set_elapsed_time(TimeInMillis elapsed) { elapsed_time_ = elapsed; }
-
-  // Adds a test property to the list. The property is validated and may add
-  // a non-fatal failure if invalid (e.g., if it conflicts with reserved
-  // key names). If a property is already recorded for the same key, the
-  // value will be updated, rather than storing multiple values for the same
-  // key.
-  void RecordProperty(const TestProperty& test_property);
-
-  // Adds a failure if the key is a reserved attribute of Google Test
-  // testcase tags.  Returns true if the property is valid.
-  // TODO(russr): Validate attribute names are legal and human readable.
-  static bool ValidateTestProperty(const TestProperty& test_property);
-
-  // Adds a test part result to the list.
-  void AddTestPartResult(const TestPartResult& test_part_result);
-
-  // Returns the death test count.
-  int death_test_count() const { return death_test_count_; }
-
-  // Increments the death test count, returning the new count.
-  int increment_death_test_count() { return ++death_test_count_; }
-
-  // Clears the test part results.
-  void ClearTestPartResults();
-
-  // Clears the object.
-  void Clear();
-
-  // Protects mutable state of the property vector and of owned
-  // properties, whose values may be updated.
-  internal::Mutex test_properites_mutex_;
-
-  // The vector of TestPartResults
-  std::vector<TestPartResult> test_part_results_;
-  // The vector of TestProperties
-  std::vector<TestProperty> test_properties_;
-  // Running count of death tests.
-  int death_test_count_;
-  // The elapsed time, in milliseconds.
-  TimeInMillis elapsed_time_;
-
-  // We disallow copying TestResult.
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestResult);
-};  // class TestResult
-
-// A TestInfo object stores the following information about a test:
-//
-//   Test case name
-//   Test name
-//   Whether the test should be run
-//   A function pointer that creates the test object when invoked
-//   Test result
-//
-// The constructor of TestInfo registers itself with the UnitTest
-// singleton such that the RUN_ALL_TESTS() macro knows which tests to
-// run.
-class GTEST_API_ TestInfo {
- public:
-  // Destructs a TestInfo object.  This function is not virtual, so
-  // don't inherit from TestInfo.
-  ~TestInfo();
-
-  // Returns the test case name.
-  const char* test_case_name() const { return test_case_name_.c_str(); }
-
-  // Returns the test name.
-  const char* name() const { return name_.c_str(); }
-
-  // Returns the name of the parameter type, or NULL if this is not a typed
-  // or a type-parameterized test.
-  const char* type_param() const {
-    if (type_param_.get() != NULL)
-      return type_param_->c_str();
-    return NULL;
-  }
-
-  // Returns the text representation of the value parameter, or NULL if this
-  // is not a value-parameterized test.
-  const char* value_param() const {
-    if (value_param_.get() != NULL)
-      return value_param_->c_str();
-    return NULL;
-  }
-
-  // Returns true if this test should run, that is if the test is not disabled
-  // (or it is disabled but the also_run_disabled_tests flag has been specified)
-  // and its full name matches the user-specified filter.
-  //
-  // Google Test allows the user to filter the tests by their full names.
-  // The full name of a test Bar in test case Foo is defined as
-  // "Foo.Bar".  Only the tests that match the filter will run.
-  //
-  // A filter is a colon-separated list of glob (not regex) patterns,
-  // optionally followed by a '-' and a colon-separated list of
-  // negative patterns (tests to exclude).  A test is run if it
-  // matches one of the positive patterns and does not match any of
-  // the negative patterns.
-  //
-  // For example, *A*:Foo.* is a filter that matches any string that
-  // contains the character 'A' or starts with "Foo.".
-  bool should_run() const { return should_run_; }
-
-  // Returns the result of the test.
-  const TestResult* result() const { return &result_; }
-
- private:
-
-#if GTEST_HAS_DEATH_TEST
-  friend class internal::DefaultDeathTestFactory;
-#endif  // GTEST_HAS_DEATH_TEST
-  friend class Test;
-  friend class TestCase;
-  friend class internal::UnitTestImpl;
-  friend TestInfo* internal::MakeAndRegisterTestInfo(
-      const char* test_case_name, const char* name,
-      const char* type_param,
-      const char* value_param,
-      internal::TypeId fixture_class_id,
-      Test::SetUpTestCaseFunc set_up_tc,
-      Test::TearDownTestCaseFunc tear_down_tc,
-      internal::TestFactoryBase* factory);
-
-  // Constructs a TestInfo object. The newly constructed instance assumes
-  // ownership of the factory object.
-  TestInfo(const char* test_case_name, const char* name,
-           const char* a_type_param,
-           const char* a_value_param,
-           internal::TypeId fixture_class_id,
-           internal::TestFactoryBase* factory);
-
-  // Increments the number of death tests encountered in this test so
-  // far.
-  int increment_death_test_count() {
-    return result_.increment_death_test_count();
-  }
-
-  // Creates the test object, runs it, records its result, and then
-  // deletes it.
-  void Run();
-
-  static void ClearTestResult(TestInfo* test_info) {
-    test_info->result_.Clear();
-  }
-
-  // These fields are immutable properties of the test.
-  const std::string test_case_name_;     // Test case name
-  const std::string name_;               // Test name
-  // Name of the parameter type, or NULL if this is not a typed or a
-  // type-parameterized test.
-  const internal::scoped_ptr<const ::std::string> type_param_;
-  // Text representation of the value parameter, or NULL if this is not a
-  // value-parameterized test.
-  const internal::scoped_ptr<const ::std::string> value_param_;
-  const internal::TypeId fixture_class_id_;   // ID of the test fixture class
-  bool should_run_;                 // True iff this test should run
-  bool is_disabled_;                // True iff this test is disabled
-  bool matches_filter_;             // True if this test matches the
-                                    // user-specified filter.
-  internal::TestFactoryBase* const factory_;  // The factory that creates
-                                              // the test object
-
-  // This field is mutable and needs to be reset before running the
-  // test for the second time.
-  TestResult result_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestInfo);
-};
-
-// A test case, which consists of a vector of TestInfos.
-//
-// TestCase is not copyable.
-class GTEST_API_ TestCase {
- public:
-  // Creates a TestCase with the given name.
-  //
-  // TestCase does NOT have a default constructor.  Always use this
-  // constructor to create a TestCase object.
-  //
-  // Arguments:
-  //
-  //   name:         name of the test case
-  //   a_type_param: the name of the test's type parameter, or NULL if
-  //                 this is not a type-parameterized test.
-  //   set_up_tc:    pointer to the function that sets up the test case
-  //   tear_down_tc: pointer to the function that tears down the test case
-  TestCase(const char* name, const char* a_type_param,
-           Test::SetUpTestCaseFunc set_up_tc,
-           Test::TearDownTestCaseFunc tear_down_tc);
-
-  // Destructor of TestCase.
-  virtual ~TestCase();
-
-  // Gets the name of the TestCase.
-  const char* name() const { return name_.c_str(); }
-
-  // Returns the name of the parameter type, or NULL if this is not a
-  // type-parameterized test case.
-  const char* type_param() const {
-    if (type_param_.get() != NULL)
-      return type_param_->c_str();
-    return NULL;
-  }
-
-  // Returns true if any test in this test case should run.
-  bool should_run() const { return should_run_; }
-
-  // Gets the number of successful tests in this test case.
-  int successful_test_count() const;
-
-  // Gets the number of failed tests in this test case.
-  int failed_test_count() const;
-
-  // Gets the number of disabled tests in this test case.
-  int disabled_test_count() const;
-
-  // Get the number of tests in this test case that should run.
-  int test_to_run_count() const;
-
-  // Gets the number of all tests in this test case.
-  int total_test_count() const;
-
-  // Returns true iff the test case passed.
-  bool Passed() const { return !Failed(); }
-
-  // Returns true iff the test case failed.
-  bool Failed() const { return failed_test_count() > 0; }
-
-  // Returns the elapsed time, in milliseconds.
-  TimeInMillis elapsed_time() const { return elapsed_time_; }
-
-  // Returns the i-th test among all the tests. i can range from 0 to
-  // total_test_count() - 1. If i is not in that range, returns NULL.
-  const TestInfo* GetTestInfo(int i) const;
-
- private:
-  friend class Test;
-  friend class internal::UnitTestImpl;
-
-  // Gets the (mutable) vector of TestInfos in this TestCase.
-  std::vector<TestInfo*>& test_info_list() { return test_info_list_; }
-
-  // Gets the (immutable) vector of TestInfos in this TestCase.
-  const std::vector<TestInfo*>& test_info_list() const {
-    return test_info_list_;
-  }
-
-  // Returns the i-th test among all the tests. i can range from 0 to
-  // total_test_count() - 1. If i is not in that range, returns NULL.
-  TestInfo* GetMutableTestInfo(int i);
-
-  // Sets the should_run member.
-  void set_should_run(bool should) { should_run_ = should; }
-
-  // Adds a TestInfo to this test case.  Will delete the TestInfo upon
-  // destruction of the TestCase object.
-  void AddTestInfo(TestInfo * test_info);
-
-  // Clears the results of all tests in this test case.
-  void ClearResult();
-
-  // Clears the results of all tests in the given test case.
-  static void ClearTestCaseResult(TestCase* test_case) {
-    test_case->ClearResult();
-  }
-
-  // Runs every test in this TestCase.
-  void Run();
-
-  // Runs SetUpTestCase() for this TestCase.  This wrapper is needed
-  // for catching exceptions thrown from SetUpTestCase().
-  void RunSetUpTestCase() { (*set_up_tc_)(); }
-
-  // Runs TearDownTestCase() for this TestCase.  This wrapper is
-  // needed for catching exceptions thrown from TearDownTestCase().
-  void RunTearDownTestCase() { (*tear_down_tc_)(); }
-
-  // Returns true iff test passed.
-  static bool TestPassed(const TestInfo* test_info) {
-    return test_info->should_run() && test_info->result()->Passed();
-  }
-
-  // Returns true iff test failed.
-  static bool TestFailed(const TestInfo* test_info) {
-    return test_info->should_run() && test_info->result()->Failed();
-  }
-
-  // Returns true iff test is disabled.
-  static bool TestDisabled(const TestInfo* test_info) {
-    return test_info->is_disabled_;
-  }
-
-  // Returns true if the given test should run.
-  static bool ShouldRunTest(const TestInfo* test_info) {
-    return test_info->should_run();
-  }
-
-  // Shuffles the tests in this test case.
-  void ShuffleTests(internal::Random* random);
-
-  // Restores the test order to before the first shuffle.
-  void UnshuffleTests();
-
-  // Name of the test case.
-  internal::String name_;
-  // Name of the parameter type, or NULL if this is not a typed or a
-  // type-parameterized test.
-  const internal::scoped_ptr<const ::std::string> type_param_;
-  // The vector of TestInfos in their original order.  It owns the
-  // elements in the vector.
-  std::vector<TestInfo*> test_info_list_;
-  // Provides a level of indirection for the test list to allow easy
-  // shuffling and restoring the test order.  The i-th element in this
-  // vector is the index of the i-th test in the shuffled test list.
-  std::vector<int> test_indices_;
-  // Pointer to the function that sets up the test case.
-  Test::SetUpTestCaseFunc set_up_tc_;
-  // Pointer to the function that tears down the test case.
-  Test::TearDownTestCaseFunc tear_down_tc_;
-  // True iff any test in this test case should run.
-  bool should_run_;
-  // Elapsed time, in milliseconds.
-  TimeInMillis elapsed_time_;
-
-  // We disallow copying TestCases.
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestCase);
-};
-
-// An Environment object is capable of setting up and tearing down an
-// environment.  The user should subclass this to define his own
-// environment(s).
-//
-// An Environment object does the set-up and tear-down in virtual
-// methods SetUp() and TearDown() instead of the constructor and the
-// destructor, as:
-//
-//   1. You cannot safely throw from a destructor.  This is a problem
-//      as in some cases Google Test is used where exceptions are enabled, and
-//      we may want to implement ASSERT_* using exceptions where they are
-//      available.
-//   2. You cannot use ASSERT_* directly in a constructor or
-//      destructor.
-class Environment {
- public:
-  // The d'tor is virtual as we need to subclass Environment.
-  virtual ~Environment() {}
-
-  // Override this to define how to set up the environment.
-  virtual void SetUp() {}
-
-  // Override this to define how to tear down the environment.
-  virtual void TearDown() {}
- private:
-  // If you see an error about overriding the following function or
-  // about it being private, you have mis-spelled SetUp() as Setup().
-  struct Setup_should_be_spelled_SetUp {};
-  virtual Setup_should_be_spelled_SetUp* Setup() { return NULL; }
-};
-
-// The interface for tracing execution of tests. The methods are organized in
-// the order the corresponding events are fired.
-class TestEventListener {
- public:
-  virtual ~TestEventListener() {}
-
-  // Fired before any test activity starts.
-  virtual void OnTestProgramStart(const UnitTest& unit_test) = 0;
-
-  // Fired before each iteration of tests starts.  There may be more than
-  // one iteration if GTEST_FLAG(repeat) is set. iteration is the iteration
-  // index, starting from 0.
-  virtual void OnTestIterationStart(const UnitTest& unit_test,
-                                    int iteration) = 0;
-
-  // Fired before environment set-up for each iteration of tests starts.
-  virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test) = 0;
-
-  // Fired after environment set-up for each iteration of tests ends.
-  virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test) = 0;
-
-  // Fired before the test case starts.
-  virtual void OnTestCaseStart(const TestCase& test_case) = 0;
-
-  // Fired before the test starts.
-  virtual void OnTestStart(const TestInfo& test_info) = 0;
-
-  // Fired after a failed assertion or a SUCCEED() invocation.
-  virtual void OnTestPartResult(const TestPartResult& test_part_result) = 0;
-
-  // Fired after the test ends.
-  virtual void OnTestEnd(const TestInfo& test_info) = 0;
-
-  // Fired after the test case ends.
-  virtual void OnTestCaseEnd(const TestCase& test_case) = 0;
-
-  // Fired before environment tear-down for each iteration of tests starts.
-  virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test) = 0;
-
-  // Fired after environment tear-down for each iteration of tests ends.
-  virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test) = 0;
-
-  // Fired after each iteration of tests finishes.
-  virtual void OnTestIterationEnd(const UnitTest& unit_test,
-                                  int iteration) = 0;
-
-  // Fired after all test activities have ended.
-  virtual void OnTestProgramEnd(const UnitTest& unit_test) = 0;
-};
-
-// The convenience class for users who need to override just one or two
-// methods and are not concerned that a possible change to a signature of
-// the methods they override will not be caught during the build.  For
-// comments about each method please see the definition of TestEventListener
-// above.
-class EmptyTestEventListener : public TestEventListener {
- public:
-  virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {}
-  virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,
-                                    int /*iteration*/) {}
-  virtual void OnEnvironmentsSetUpStart(const UnitTest& /*unit_test*/) {}
-  virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {}
-  virtual void OnTestCaseStart(const TestCase& /*test_case*/) {}
-  virtual void OnTestStart(const TestInfo& /*test_info*/) {}
-  virtual void OnTestPartResult(const TestPartResult& /*test_part_result*/) {}
-  virtual void OnTestEnd(const TestInfo& /*test_info*/) {}
-  virtual void OnTestCaseEnd(const TestCase& /*test_case*/) {}
-  virtual void OnEnvironmentsTearDownStart(const UnitTest& /*unit_test*/) {}
-  virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {}
-  virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/,
-                                  int /*iteration*/) {}
-  virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {}
-};
-
-// TestEventListeners lets users add listeners to track events in Google Test.
-class GTEST_API_ TestEventListeners {
- public:
-  TestEventListeners();
-  ~TestEventListeners();
-
-  // Appends an event listener to the end of the list. Google Test assumes
-  // the ownership of the listener (i.e. it will delete the listener when
-  // the test program finishes).
-  void Append(TestEventListener* listener);
-
-  // Removes the given event listener from the list and returns it.  It then
-  // becomes the caller's responsibility to delete the listener. Returns
-  // NULL if the listener is not found in the list.
-  TestEventListener* Release(TestEventListener* listener);
-
-  // Returns the standard listener responsible for the default console
-  // output.  Can be removed from the listeners list to shut down default
-  // console output.  Note that removing this object from the listener list
-  // with Release transfers its ownership to the caller and makes this
-  // function return NULL the next time.
-  TestEventListener* default_result_printer() const {
-    return default_result_printer_;
-  }
-
-  // Returns the standard listener responsible for the default XML output
-  // controlled by the --gtest_output=xml flag.  Can be removed from the
-  // listeners list by users who want to shut down the default XML output
-  // controlled by this flag and substitute it with custom one.  Note that
-  // removing this object from the listener list with Release transfers its
-  // ownership to the caller and makes this function return NULL the next
-  // time.
-  TestEventListener* default_xml_generator() const {
-    return default_xml_generator_;
-  }
-
- private:
-  friend class TestCase;
-  friend class TestInfo;
-  friend class internal::DefaultGlobalTestPartResultReporter;
-  friend class internal::NoExecDeathTest;
-  friend class internal::TestEventListenersAccessor;
-  friend class internal::UnitTestImpl;
-
-  // Returns repeater that broadcasts the TestEventListener events to all
-  // subscribers.
-  TestEventListener* repeater();
-
-  // Sets the default_result_printer attribute to the provided listener.
-  // The listener is also added to the listener list and previous
-  // default_result_printer is removed from it and deleted. The listener can
-  // also be NULL in which case it will not be added to the list. Does
-  // nothing if the previous and the current listener objects are the same.
-  void SetDefaultResultPrinter(TestEventListener* listener);
-
-  // Sets the default_xml_generator attribute to the provided listener.  The
-  // listener is also added to the listener list and previous
-  // default_xml_generator is removed from it and deleted. The listener can
-  // also be NULL in which case it will not be added to the list. Does
-  // nothing if the previous and the current listener objects are the same.
-  void SetDefaultXmlGenerator(TestEventListener* listener);
-
-  // Controls whether events will be forwarded by the repeater to the
-  // listeners in the list.
-  bool EventForwardingEnabled() const;
-  void SuppressEventForwarding();
-
-  // The actual list of listeners.
-  internal::TestEventRepeater* repeater_;
-  // Listener responsible for the standard result output.
-  TestEventListener* default_result_printer_;
-  // Listener responsible for the creation of the XML output file.
-  TestEventListener* default_xml_generator_;
-
-  // We disallow copying TestEventListeners.
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventListeners);
-};
-
-// A UnitTest consists of a vector of TestCases.
-//
-// This is a singleton class.  The only instance of UnitTest is
-// created when UnitTest::GetInstance() is first called.  This
-// instance is never deleted.
-//
-// UnitTest is not copyable.
-//
-// This class is thread-safe as long as the methods are called
-// according to their specification.
-class GTEST_API_ UnitTest {
- public:
-  // Gets the singleton UnitTest object.  The first time this method
-  // is called, a UnitTest object is constructed and returned.
-  // Consecutive calls will return the same object.
-  static UnitTest* GetInstance();
-
-  // Runs all tests in this UnitTest object and prints the result.
-  // Returns 0 if successful, or 1 otherwise.
-  //
-  // This method can only be called from the main thread.
-  //
-  // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-  int Run() GTEST_MUST_USE_RESULT_;
-
-  // Returns the working directory when the first TEST() or TEST_F()
-  // was executed.  The UnitTest object owns the string.
-  const char* original_working_dir() const;
-
-  // Returns the TestCase object for the test that's currently running,
-  // or NULL if no test is running.
-  const TestCase* current_test_case() const;
-
-  // Returns the TestInfo object for the test that's currently running,
-  // or NULL if no test is running.
-  const TestInfo* current_test_info() const;
-
-  // Returns the random seed used at the start of the current test run.
-  int random_seed() const;
-
-#if GTEST_HAS_PARAM_TEST
-  // Returns the ParameterizedTestCaseRegistry object used to keep track of
-  // value-parameterized tests and instantiate and register them.
-  //
-  // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-  internal::ParameterizedTestCaseRegistry& parameterized_test_registry();
-#endif  // GTEST_HAS_PARAM_TEST
-
-  // Gets the number of successful test cases.
-  int successful_test_case_count() const;
-
-  // Gets the number of failed test cases.
-  int failed_test_case_count() const;
-
-  // Gets the number of all test cases.
-  int total_test_case_count() const;
-
-  // Gets the number of all test cases that contain at least one test
-  // that should run.
-  int test_case_to_run_count() const;
-
-  // Gets the number of successful tests.
-  int successful_test_count() const;
-
-  // Gets the number of failed tests.
-  int failed_test_count() const;
-
-  // Gets the number of disabled tests.
-  int disabled_test_count() const;
-
-  // Gets the number of all tests.
-  int total_test_count() const;
-
-  // Gets the number of tests that should run.
-  int test_to_run_count() const;
-
-  // Gets the elapsed time, in milliseconds.
-  TimeInMillis elapsed_time() const;
-
-  // Returns true iff the unit test passed (i.e. all test cases passed).
-  bool Passed() const;
-
-  // Returns true iff the unit test failed (i.e. some test case failed
-  // or something outside of all tests failed).
-  bool Failed() const;
-
-  // Gets the i-th test case among all the test cases. i can range from 0 to
-  // total_test_case_count() - 1. If i is not in that range, returns NULL.
-  const TestCase* GetTestCase(int i) const;
-
-  // Returns the list of event listeners that can be used to track events
-  // inside Google Test.
-  TestEventListeners& listeners();
-
- private:
-  // Registers and returns a global test environment.  When a test
-  // program is run, all global test environments will be set-up in
-  // the order they were registered.  After all tests in the program
-  // have finished, all global test environments will be torn-down in
-  // the *reverse* order they were registered.
-  //
-  // The UnitTest object takes ownership of the given environment.
-  //
-  // This method can only be called from the main thread.
-  Environment* AddEnvironment(Environment* env);
-
-  // Adds a TestPartResult to the current TestResult object.  All
-  // Google Test assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc)
-  // eventually call this to report their results.  The user code
-  // should use the assertion macros instead of calling this directly.
-  void AddTestPartResult(TestPartResult::Type result_type,
-                         const char* file_name,
-                         int line_number,
-                         const internal::String& message,
-                         const internal::String& os_stack_trace);
-
-  // Adds a TestProperty to the current TestResult object. If the result already
-  // contains a property with the same key, the value will be updated.
-  void RecordPropertyForCurrentTest(const char* key, const char* value);
-
-  // Gets the i-th test case among all the test cases. i can range from 0 to
-  // total_test_case_count() - 1. If i is not in that range, returns NULL.
-  TestCase* GetMutableTestCase(int i);
-
-  // Accessors for the implementation object.
-  internal::UnitTestImpl* impl() { return impl_; }
-  const internal::UnitTestImpl* impl() const { return impl_; }
-
-  // These classes and funcions are friends as they need to access private
-  // members of UnitTest.
-  friend class Test;
-  friend class internal::AssertHelper;
-  friend class internal::ScopedTrace;
-  friend Environment* AddGlobalTestEnvironment(Environment* env);
-  friend internal::UnitTestImpl* internal::GetUnitTestImpl();
-  friend void internal::ReportFailureInUnknownLocation(
-      TestPartResult::Type result_type,
-      const internal::String& message);
-
-  // Creates an empty UnitTest.
-  UnitTest();
-
-  // D'tor
-  virtual ~UnitTest();
-
-  // Pushes a trace defined by SCOPED_TRACE() on to the per-thread
-  // Google Test trace stack.
-  void PushGTestTrace(const internal::TraceInfo& trace);
-
-  // Pops a trace from the per-thread Google Test trace stack.
-  void PopGTestTrace();
-
-  // Protects mutable state in *impl_.  This is mutable as some const
-  // methods need to lock it too.
-  mutable internal::Mutex mutex_;
-
-  // Opaque implementation object.  This field is never changed once
-  // the object is constructed.  We don't mark it as const here, as
-  // doing so will cause a warning in the constructor of UnitTest.
-  // Mutable state in *impl_ is protected by mutex_.
-  internal::UnitTestImpl* impl_;
-
-  // We disallow copying UnitTest.
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTest);
-};
-
-// A convenient wrapper for adding an environment for the test
-// program.
-//
-// You should call this before RUN_ALL_TESTS() is called, probably in
-// main().  If you use gtest_main, you need to call this before main()
-// starts for it to take effect.  For example, you can define a global
-// variable like this:
-//
-//   testing::Environment* const foo_env =
-//       testing::AddGlobalTestEnvironment(new FooEnvironment);
-//
-// However, we strongly recommend you to write your own main() and
-// call AddGlobalTestEnvironment() there, as relying on initialization
-// of global variables makes the code harder to read and may cause
-// problems when you register multiple environments from different
-// translation units and the environments have dependencies among them
-// (remember that the compiler doesn't guarantee the order in which
-// global variables from different translation units are initialized).
-inline Environment* AddGlobalTestEnvironment(Environment* env) {
-  return UnitTest::GetInstance()->AddEnvironment(env);
-}
-
-// Initializes Google Test.  This must be called before calling
-// RUN_ALL_TESTS().  In particular, it parses a command line for the
-// flags that Google Test recognizes.  Whenever a Google Test flag is
-// seen, it is removed from argv, and *argc is decremented.
-//
-// No value is returned.  Instead, the Google Test flag variables are
-// updated.
-//
-// Calling the function for the second time has no user-visible effect.
-GTEST_API_ void InitGoogleTest(int* argc, char** argv);
-
-// This overloaded version can be used in Windows programs compiled in
-// UNICODE mode.
-GTEST_API_ void InitGoogleTest(int* argc, wchar_t** argv);
-
-namespace internal {
-
-// Formats a comparison assertion (e.g. ASSERT_EQ, EXPECT_LT, and etc)
-// operand to be used in a failure message.  The type (but not value)
-// of the other operand may affect the format.  This allows us to
-// print a char* as a raw pointer when it is compared against another
-// char*, and print it as a C string when it is compared against an
-// std::string object, for example.
-//
-// The default implementation ignores the type of the other operand.
-// Some specialized versions are used to handle formatting wide or
-// narrow C strings.
-//
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-template <typename T1, typename T2>
-String FormatForComparisonFailureMessage(const T1& value,
-                                         const T2& /* other_operand */) {
-  // C++Builder compiles this incorrectly if the namespace isn't explicitly
-  // given.
-  return ::testing::PrintToString(value);
-}
-
-// The helper function for {ASSERT|EXPECT}_EQ.
-template <typename T1, typename T2>
-AssertionResult CmpHelperEQ(const char* expected_expression,
-                            const char* actual_expression,
-                            const T1& expected,
-                            const T2& actual) {
-#ifdef _MSC_VER
-# pragma warning(push)          // Saves the current warning state.
-# pragma warning(disable:4389)  // Temporarily disables warning on
-                               // signed/unsigned mismatch.
-#endif
-
-  if (expected == actual) {
-    return AssertionSuccess();
-  }
-
-#ifdef _MSC_VER
-# pragma warning(pop)          // Restores the warning state.
-#endif
-
-  return EqFailure(expected_expression,
-                   actual_expression,
-                   FormatForComparisonFailureMessage(expected, actual),
-                   FormatForComparisonFailureMessage(actual, expected),
-                   false);
-}
-
-// With this overloaded version, we allow anonymous enums to be used
-// in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous enums
-// can be implicitly cast to BiggestInt.
-GTEST_API_ AssertionResult CmpHelperEQ(const char* expected_expression,
-                                       const char* actual_expression,
-                                       BiggestInt expected,
-                                       BiggestInt actual);
-
-// The helper class for {ASSERT|EXPECT}_EQ.  The template argument
-// lhs_is_null_literal is true iff the first argument to ASSERT_EQ()
-// is a null pointer literal.  The following default implementation is
-// for lhs_is_null_literal being false.
-template <bool lhs_is_null_literal>
-class EqHelper {
- public:
-  // This templatized version is for the general case.
-  template <typename T1, typename T2>
-  static AssertionResult Compare(const char* expected_expression,
-                                 const char* actual_expression,
-                                 const T1& expected,
-                                 const T2& actual) {
-    return CmpHelperEQ(expected_expression, actual_expression, expected,
-                       actual);
-  }
-
-  // With this overloaded version, we allow anonymous enums to be used
-  // in {ASSERT|EXPECT}_EQ when compiled with gcc 4, as anonymous
-  // enums can be implicitly cast to BiggestInt.
-  //
-  // Even though its body looks the same as the above version, we
-  // cannot merge the two, as it will make anonymous enums unhappy.
-  static AssertionResult Compare(const char* expected_expression,
-                                 const char* actual_expression,
-                                 BiggestInt expected,
-                                 BiggestInt actual) {
-    return CmpHelperEQ(expected_expression, actual_expression, expected,
-                       actual);
-  }
-};
-
-// This specialization is used when the first argument to ASSERT_EQ()
-// is a null pointer literal, like NULL, false, or 0.
-template <>
-class EqHelper<true> {
- public:
-  // We define two overloaded versions of Compare().  The first
-  // version will be picked when the second argument to ASSERT_EQ() is
-  // NOT a pointer, e.g. ASSERT_EQ(0, AnIntFunction()) or
-  // EXPECT_EQ(false, a_bool).
-  template <typename T1, typename T2>
-  static AssertionResult Compare(
-      const char* expected_expression,
-      const char* actual_expression,
-      const T1& expected,
-      const T2& actual,
-      // The following line prevents this overload from being considered if T2
-      // is not a pointer type.  We need this because ASSERT_EQ(NULL, my_ptr)
-      // expands to Compare("", "", NULL, my_ptr), which requires a conversion
-      // to match the Secret* in the other overload, which would otherwise make
-      // this template match better.
-      typename EnableIf<!is_pointer<T2>::value>::type* = 0) {
-    return CmpHelperEQ(expected_expression, actual_expression, expected,
-                       actual);
-  }
-
-  // This version will be picked when the second argument to ASSERT_EQ() is a
-  // pointer, e.g. ASSERT_EQ(NULL, a_pointer).
-  template <typename T>
-  static AssertionResult Compare(
-      const char* expected_expression,
-      const char* actual_expression,
-      // We used to have a second template parameter instead of Secret*.  That
-      // template parameter would deduce to 'long', making this a better match
-      // than the first overload even without the first overload's EnableIf.
-      // Unfortunately, gcc with -Wconversion-null warns when "passing NULL to
-      // non-pointer argument" (even a deduced integral argument), so the old
-      // implementation caused warnings in user code.
-      Secret* /* expected (NULL) */,
-      T* actual) {
-    // We already know that 'expected' is a null pointer.
-    return CmpHelperEQ(expected_expression, actual_expression,
-                       static_cast<T*>(NULL), actual);
-  }
-};
-
-// A macro for implementing the helper functions needed to implement
-// ASSERT_?? and EXPECT_??.  It is here just to avoid copy-and-paste
-// of similar code.
-//
-// For each templatized helper function, we also define an overloaded
-// version for BiggestInt in order to reduce code bloat and allow
-// anonymous enums to be used with {ASSERT|EXPECT}_?? when compiled
-// with gcc 4.
-//
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-#define GTEST_IMPL_CMP_HELPER_(op_name, op)\
-template <typename T1, typename T2>\
-AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \
-                                   const T1& val1, const T2& val2) {\
-  if (val1 op val2) {\
-    return AssertionSuccess();\
-  } else {\
-    return AssertionFailure() \
-        << "Expected: (" << expr1 << ") " #op " (" << expr2\
-        << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\
-        << " vs " << FormatForComparisonFailureMessage(val2, val1);\
-  }\
-}\
-GTEST_API_ AssertionResult CmpHelper##op_name(\
-    const char* expr1, const char* expr2, BiggestInt val1, BiggestInt val2)
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-
-// Implements the helper function for {ASSERT|EXPECT}_NE
-GTEST_IMPL_CMP_HELPER_(NE, !=);
-// Implements the helper function for {ASSERT|EXPECT}_LE
-GTEST_IMPL_CMP_HELPER_(LE, <=);
-// Implements the helper function for {ASSERT|EXPECT}_LT
-GTEST_IMPL_CMP_HELPER_(LT, < );
-// Implements the helper function for {ASSERT|EXPECT}_GE
-GTEST_IMPL_CMP_HELPER_(GE, >=);
-// Implements the helper function for {ASSERT|EXPECT}_GT
-GTEST_IMPL_CMP_HELPER_(GT, > );
-
-#undef GTEST_IMPL_CMP_HELPER_
-
-// The helper function for {ASSERT|EXPECT}_STREQ.
-//
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression,
-                                          const char* actual_expression,
-                                          const char* expected,
-                                          const char* actual);
-
-// The helper function for {ASSERT|EXPECT}_STRCASEEQ.
-//
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-GTEST_API_ AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression,
-                                              const char* actual_expression,
-                                              const char* expected,
-                                              const char* actual);
-
-// The helper function for {ASSERT|EXPECT}_STRNE.
-//
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression,
-                                          const char* s2_expression,
-                                          const char* s1,
-                                          const char* s2);
-
-// The helper function for {ASSERT|EXPECT}_STRCASENE.
-//
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-GTEST_API_ AssertionResult CmpHelperSTRCASENE(const char* s1_expression,
-                                              const char* s2_expression,
-                                              const char* s1,
-                                              const char* s2);
-
-
-// Helper function for *_STREQ on wide strings.
-//
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-GTEST_API_ AssertionResult CmpHelperSTREQ(const char* expected_expression,
-                                          const char* actual_expression,
-                                          const wchar_t* expected,
-                                          const wchar_t* actual);
-
-// Helper function for *_STRNE on wide strings.
-//
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-GTEST_API_ AssertionResult CmpHelperSTRNE(const char* s1_expression,
-                                          const char* s2_expression,
-                                          const wchar_t* s1,
-                                          const wchar_t* s2);
-
-}  // namespace internal
-
-// IsSubstring() and IsNotSubstring() are intended to be used as the
-// first argument to {EXPECT,ASSERT}_PRED_FORMAT2(), not by
-// themselves.  They check whether needle is a substring of haystack
-// (NULL is considered a substring of itself only), and return an
-// appropriate error message when they fail.
-//
-// The {needle,haystack}_expr arguments are the stringified
-// expressions that generated the two real arguments.
-GTEST_API_ AssertionResult IsSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const char* needle, const char* haystack);
-GTEST_API_ AssertionResult IsSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const wchar_t* needle, const wchar_t* haystack);
-GTEST_API_ AssertionResult IsNotSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const char* needle, const char* haystack);
-GTEST_API_ AssertionResult IsNotSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const wchar_t* needle, const wchar_t* haystack);
-GTEST_API_ AssertionResult IsSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const ::std::string& needle, const ::std::string& haystack);
-GTEST_API_ AssertionResult IsNotSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const ::std::string& needle, const ::std::string& haystack);
-
-#if GTEST_HAS_STD_WSTRING
-GTEST_API_ AssertionResult IsSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const ::std::wstring& needle, const ::std::wstring& haystack);
-GTEST_API_ AssertionResult IsNotSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const ::std::wstring& needle, const ::std::wstring& haystack);
-#endif  // GTEST_HAS_STD_WSTRING
-
-namespace internal {
-
-// Helper template function for comparing floating-points.
-//
-// Template parameter:
-//
-//   RawType: the raw floating-point type (either float or double)
-//
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-template <typename RawType>
-AssertionResult CmpHelperFloatingPointEQ(const char* expected_expression,
-                                         const char* actual_expression,
-                                         RawType expected,
-                                         RawType actual) {
-  const FloatingPoint<RawType> lhs(expected), rhs(actual);
-
-  if (lhs.AlmostEquals(rhs)) {
-    return AssertionSuccess();
-  }
-
-  ::std::stringstream expected_ss;
-  expected_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
-              << expected;
-
-  ::std::stringstream actual_ss;
-  actual_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
-            << actual;
-
-  return EqFailure(expected_expression,
-                   actual_expression,
-                   StringStreamToString(&expected_ss),
-                   StringStreamToString(&actual_ss),
-                   false);
-}
-
-// Helper function for implementing ASSERT_NEAR.
-//
-// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
-GTEST_API_ AssertionResult DoubleNearPredFormat(const char* expr1,
-                                                const char* expr2,
-                                                const char* abs_error_expr,
-                                                double val1,
-                                                double val2,
-                                                double abs_error);
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-// A class that enables one to stream messages to assertion macros
-class GTEST_API_ AssertHelper {
- public:
-  // Constructor.
-  AssertHelper(TestPartResult::Type type,
-               const char* file,
-               int line,
-               const char* message);
-  ~AssertHelper();
-
-  // Message assignment is a semantic trick to enable assertion
-  // streaming; see the GTEST_MESSAGE_ macro below.
-  void operator=(const Message& message) const;
-
- private:
-  // We put our data in a struct so that the size of the AssertHelper class can
-  // be as small as possible.  This is important because gcc is incapable of
-  // re-using stack space even for temporary variables, so every EXPECT_EQ
-  // reserves stack space for another AssertHelper.
-  struct AssertHelperData {
-    AssertHelperData(TestPartResult::Type t,
-                     const char* srcfile,
-                     int line_num,
-                     const char* msg)
-        : type(t), file(srcfile), line(line_num), message(msg) { }
-
-    TestPartResult::Type const type;
-    const char*        const file;
-    int                const line;
-    String             const message;
-
-   private:
-    GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelperData);
-  };
-
-  AssertHelperData* const data_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(AssertHelper);
-};
-
-}  // namespace internal
-
-#if GTEST_HAS_PARAM_TEST
-// The pure interface class that all value-parameterized tests inherit from.
-// A value-parameterized class must inherit from both ::testing::Test and
-// ::testing::WithParamInterface. In most cases that just means inheriting
-// from ::testing::TestWithParam, but more complicated test hierarchies
-// may need to inherit from Test and WithParamInterface at different levels.
-//
-// This interface has support for accessing the test parameter value via
-// the GetParam() method.
-//
-// Use it with one of the parameter generator defining functions, like Range(),
-// Values(), ValuesIn(), Bool(), and Combine().
-//
-// class FooTest : public ::testing::TestWithParam<int> {
-//  protected:
-//   FooTest() {
-//     // Can use GetParam() here.
-//   }
-//   virtual ~FooTest() {
-//     // Can use GetParam() here.
-//   }
-//   virtual void SetUp() {
-//     // Can use GetParam() here.
-//   }
-//   virtual void TearDown {
-//     // Can use GetParam() here.
-//   }
-// };
-// TEST_P(FooTest, DoesBar) {
-//   // Can use GetParam() method here.
-//   Foo foo;
-//   ASSERT_TRUE(foo.DoesBar(GetParam()));
-// }
-// INSTANTIATE_TEST_CASE_P(OneToTenRange, FooTest, ::testing::Range(1, 10));
-
-template <typename T>
-class WithParamInterface {
- public:
-  typedef T ParamType;
-  virtual ~WithParamInterface() {}
-
-  // The current parameter value. Is also available in the test fixture's
-  // constructor. This member function is non-static, even though it only
-  // references static data, to reduce the opportunity for incorrect uses
-  // like writing 'WithParamInterface<bool>::GetParam()' for a test that
-  // uses a fixture whose parameter type is int.
-  const ParamType& GetParam() const { return *parameter_; }
-
- private:
-  // Sets parameter value. The caller is responsible for making sure the value
-  // remains alive and unchanged throughout the current test.
-  static void SetParam(const ParamType* parameter) {
-    parameter_ = parameter;
-  }
-
-  // Static value used for accessing parameter during a test lifetime.
-  static const ParamType* parameter_;
-
-  // TestClass must be a subclass of WithParamInterface<T> and Test.
-  template <class TestClass> friend class internal::ParameterizedTestFactory;
-};
-
-template <typename T>
-const T* WithParamInterface<T>::parameter_ = NULL;
-
-// Most value-parameterized classes can ignore the existence of
-// WithParamInterface, and can just inherit from ::testing::TestWithParam.
-
-template <typename T>
-class TestWithParam : public Test, public WithParamInterface<T> {
-};
-
-#endif  // GTEST_HAS_PARAM_TEST
-
-// Macros for indicating success/failure in test code.
-
-// ADD_FAILURE unconditionally adds a failure to the current test.
-// SUCCEED generates a success - it doesn't automatically make the
-// current test successful, as a test is only successful when it has
-// no failure.
-//
-// EXPECT_* verifies that a certain condition is satisfied.  If not,
-// it behaves like ADD_FAILURE.  In particular:
-//
-//   EXPECT_TRUE  verifies that a Boolean condition is true.
-//   EXPECT_FALSE verifies that a Boolean condition is false.
-//
-// FAIL and ASSERT_* are similar to ADD_FAILURE and EXPECT_*, except
-// that they will also abort the current function on failure.  People
-// usually want the fail-fast behavior of FAIL and ASSERT_*, but those
-// writing data-driven tests often find themselves using ADD_FAILURE
-// and EXPECT_* more.
-//
-// Examples:
-//
-//   EXPECT_TRUE(server.StatusIsOK());
-//   ASSERT_FALSE(server.HasPendingRequest(port))
-//       << "There are still pending requests " << "on port " << port;
-
-// Generates a nonfatal failure with a generic message.
-#define ADD_FAILURE() GTEST_NONFATAL_FAILURE_("Failed")
-
-// Generates a nonfatal failure at the given source file location with
-// a generic message.
-#define ADD_FAILURE_AT(file, line) \
-  GTEST_MESSAGE_AT_(file, line, "Failed", \
-                    ::testing::TestPartResult::kNonFatalFailure)
-
-// Generates a fatal failure with a generic message.
-#define GTEST_FAIL() GTEST_FATAL_FAILURE_("Failed")
-
-// Define this macro to 1 to omit the definition of FAIL(), which is a
-// generic name and clashes with some other libraries.
-#if !GTEST_DONT_DEFINE_FAIL
-# define FAIL() GTEST_FAIL()
-#endif
-
-// Generates a success with a generic message.
-#define GTEST_SUCCEED() GTEST_SUCCESS_("Succeeded")
-
-// Define this macro to 1 to omit the definition of SUCCEED(), which
-// is a generic name and clashes with some other libraries.
-#if !GTEST_DONT_DEFINE_SUCCEED
-# define SUCCEED() GTEST_SUCCEED()
-#endif
-
-// Macros for testing exceptions.
-//
-//    * {ASSERT|EXPECT}_THROW(statement, expected_exception):
-//         Tests that the statement throws the expected exception.
-//    * {ASSERT|EXPECT}_NO_THROW(statement):
-//         Tests that the statement doesn't throw any exception.
-//    * {ASSERT|EXPECT}_ANY_THROW(statement):
-//         Tests that the statement throws an exception.
-
-#define EXPECT_THROW(statement, expected_exception) \
-  GTEST_TEST_THROW_(statement, expected_exception, GTEST_NONFATAL_FAILURE_)
-#define EXPECT_NO_THROW(statement) \
-  GTEST_TEST_NO_THROW_(statement, GTEST_NONFATAL_FAILURE_)
-#define EXPECT_ANY_THROW(statement) \
-  GTEST_TEST_ANY_THROW_(statement, GTEST_NONFATAL_FAILURE_)
-#define ASSERT_THROW(statement, expected_exception) \
-  GTEST_TEST_THROW_(statement, expected_exception, GTEST_FATAL_FAILURE_)
-#define ASSERT_NO_THROW(statement) \
-  GTEST_TEST_NO_THROW_(statement, GTEST_FATAL_FAILURE_)
-#define ASSERT_ANY_THROW(statement) \
-  GTEST_TEST_ANY_THROW_(statement, GTEST_FATAL_FAILURE_)
-
-// Boolean assertions. Condition can be either a Boolean expression or an
-// AssertionResult. For more information on how to use AssertionResult with
-// these macros see comments on that class.
-#define EXPECT_TRUE(condition) \
-  GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \
-                      GTEST_NONFATAL_FAILURE_)
-#define EXPECT_FALSE(condition) \
-  GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
-                      GTEST_NONFATAL_FAILURE_)
-#define ASSERT_TRUE(condition) \
-  GTEST_TEST_BOOLEAN_(condition, #condition, false, true, \
-                      GTEST_FATAL_FAILURE_)
-#define ASSERT_FALSE(condition) \
-  GTEST_TEST_BOOLEAN_(!(condition), #condition, true, false, \
-                      GTEST_FATAL_FAILURE_)
-
-// Includes the auto-generated header that implements a family of
-// generic predicate assertion macros.
-#include "gtest/gtest_pred_impl.h"
-
-// Macros for testing equalities and inequalities.
-//
-//    * {ASSERT|EXPECT}_EQ(expected, actual): Tests that expected == actual
-//    * {ASSERT|EXPECT}_NE(v1, v2):           Tests that v1 != v2
-//    * {ASSERT|EXPECT}_LT(v1, v2):           Tests that v1 < v2
-//    * {ASSERT|EXPECT}_LE(v1, v2):           Tests that v1 <= v2
-//    * {ASSERT|EXPECT}_GT(v1, v2):           Tests that v1 > v2
-//    * {ASSERT|EXPECT}_GE(v1, v2):           Tests that v1 >= v2
-//
-// When they are not, Google Test prints both the tested expressions and
-// their actual values.  The values must be compatible built-in types,
-// or you will get a compiler error.  By "compatible" we mean that the
-// values can be compared by the respective operator.
-//
-// Note:
-//
-//   1. It is possible to make a user-defined type work with
-//   {ASSERT|EXPECT}_??(), but that requires overloading the
-//   comparison operators and is thus discouraged by the Google C++
-//   Usage Guide.  Therefore, you are advised to use the
-//   {ASSERT|EXPECT}_TRUE() macro to assert that two objects are
-//   equal.
-//
-//   2. The {ASSERT|EXPECT}_??() macros do pointer comparisons on
-//   pointers (in particular, C strings).  Therefore, if you use it
-//   with two C strings, you are testing how their locations in memory
-//   are related, not how their content is related.  To compare two C
-//   strings by content, use {ASSERT|EXPECT}_STR*().
-//
-//   3. {ASSERT|EXPECT}_EQ(expected, actual) is preferred to
-//   {ASSERT|EXPECT}_TRUE(expected == actual), as the former tells you
-//   what the actual value is when it fails, and similarly for the
-//   other comparisons.
-//
-//   4. Do not depend on the order in which {ASSERT|EXPECT}_??()
-//   evaluate their arguments, which is undefined.
-//
-//   5. These macros evaluate their arguments exactly once.
-//
-// Examples:
-//
-//   EXPECT_NE(5, Foo());
-//   EXPECT_EQ(NULL, a_pointer);
-//   ASSERT_LT(i, array_size);
-//   ASSERT_GT(records.size(), 0) << "There is no record left.";
-
-#define EXPECT_EQ(expected, actual) \
-  EXPECT_PRED_FORMAT2(::testing::internal:: \
-                      EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \
-                      expected, actual)
-#define EXPECT_NE(expected, actual) \
-  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperNE, expected, actual)
-#define EXPECT_LE(val1, val2) \
-  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)
-#define EXPECT_LT(val1, val2) \
-  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)
-#define EXPECT_GE(val1, val2) \
-  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)
-#define EXPECT_GT(val1, val2) \
-  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)
-
-#define GTEST_ASSERT_EQ(expected, actual) \
-  ASSERT_PRED_FORMAT2(::testing::internal:: \
-                      EqHelper<GTEST_IS_NULL_LITERAL_(expected)>::Compare, \
-                      expected, actual)
-#define GTEST_ASSERT_NE(val1, val2) \
-  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperNE, val1, val2)
-#define GTEST_ASSERT_LE(val1, val2) \
-  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLE, val1, val2)
-#define GTEST_ASSERT_LT(val1, val2) \
-  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperLT, val1, val2)
-#define GTEST_ASSERT_GE(val1, val2) \
-  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGE, val1, val2)
-#define GTEST_ASSERT_GT(val1, val2) \
-  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperGT, val1, val2)
-
-// Define macro GTEST_DONT_DEFINE_ASSERT_XY to 1 to omit the definition of
-// ASSERT_XY(), which clashes with some users' own code.
-
-#if !GTEST_DONT_DEFINE_ASSERT_EQ
-# define ASSERT_EQ(val1, val2) GTEST_ASSERT_EQ(val1, val2)
-#endif
-
-#if !GTEST_DONT_DEFINE_ASSERT_NE
-# define ASSERT_NE(val1, val2) GTEST_ASSERT_NE(val1, val2)
-#endif
-
-#if !GTEST_DONT_DEFINE_ASSERT_LE
-# define ASSERT_LE(val1, val2) GTEST_ASSERT_LE(val1, val2)
-#endif
-
-#if !GTEST_DONT_DEFINE_ASSERT_LT
-# define ASSERT_LT(val1, val2) GTEST_ASSERT_LT(val1, val2)
-#endif
-
-#if !GTEST_DONT_DEFINE_ASSERT_GE
-# define ASSERT_GE(val1, val2) GTEST_ASSERT_GE(val1, val2)
-#endif
-
-#if !GTEST_DONT_DEFINE_ASSERT_GT
-# define ASSERT_GT(val1, val2) GTEST_ASSERT_GT(val1, val2)
-#endif
-
-// C String Comparisons.  All tests treat NULL and any non-NULL string
-// as different.  Two NULLs are equal.
-//
-//    * {ASSERT|EXPECT}_STREQ(s1, s2):     Tests that s1 == s2
-//    * {ASSERT|EXPECT}_STRNE(s1, s2):     Tests that s1 != s2
-//    * {ASSERT|EXPECT}_STRCASEEQ(s1, s2): Tests that s1 == s2, ignoring case
-//    * {ASSERT|EXPECT}_STRCASENE(s1, s2): Tests that s1 != s2, ignoring case
-//
-// For wide or narrow string objects, you can use the
-// {ASSERT|EXPECT}_??() macros.
-//
-// Don't depend on the order in which the arguments are evaluated,
-// which is undefined.
-//
-// These macros evaluate their arguments exactly once.
-
-#define EXPECT_STREQ(expected, actual) \
-  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual)
-#define EXPECT_STRNE(s1, s2) \
-  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
-#define EXPECT_STRCASEEQ(expected, actual) \
-  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual)
-#define EXPECT_STRCASENE(s1, s2)\
-  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
-
-#define ASSERT_STREQ(expected, actual) \
-  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTREQ, expected, actual)
-#define ASSERT_STRNE(s1, s2) \
-  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRNE, s1, s2)
-#define ASSERT_STRCASEEQ(expected, actual) \
-  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASEEQ, expected, actual)
-#define ASSERT_STRCASENE(s1, s2)\
-  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperSTRCASENE, s1, s2)
-
-// Macros for comparing floating-point numbers.
-//
-//    * {ASSERT|EXPECT}_FLOAT_EQ(expected, actual):
-//         Tests that two float values are almost equal.
-//    * {ASSERT|EXPECT}_DOUBLE_EQ(expected, actual):
-//         Tests that two double values are almost equal.
-//    * {ASSERT|EXPECT}_NEAR(v1, v2, abs_error):
-//         Tests that v1 and v2 are within the given distance to each other.
-//
-// Google Test uses ULP-based comparison to automatically pick a default
-// error bound that is appropriate for the operands.  See the
-// FloatingPoint template class in gtest-internal.h if you are
-// interested in the implementation details.
-
-#define EXPECT_FLOAT_EQ(expected, actual)\
-  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
-                      expected, actual)
-
-#define EXPECT_DOUBLE_EQ(expected, actual)\
-  EXPECT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
-                      expected, actual)
-
-#define ASSERT_FLOAT_EQ(expected, actual)\
-  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<float>, \
-                      expected, actual)
-
-#define ASSERT_DOUBLE_EQ(expected, actual)\
-  ASSERT_PRED_FORMAT2(::testing::internal::CmpHelperFloatingPointEQ<double>, \
-                      expected, actual)
-
-#define EXPECT_NEAR(val1, val2, abs_error)\
-  EXPECT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \
-                      val1, val2, abs_error)
-
-#define ASSERT_NEAR(val1, val2, abs_error)\
-  ASSERT_PRED_FORMAT3(::testing::internal::DoubleNearPredFormat, \
-                      val1, val2, abs_error)
-
-// These predicate format functions work on floating-point values, and
-// can be used in {ASSERT|EXPECT}_PRED_FORMAT2*(), e.g.
-//
-//   EXPECT_PRED_FORMAT2(testing::DoubleLE, Foo(), 5.0);
-
-// Asserts that val1 is less than, or almost equal to, val2.  Fails
-// otherwise.  In particular, it fails if either val1 or val2 is NaN.
-GTEST_API_ AssertionResult FloatLE(const char* expr1, const char* expr2,
-                                   float val1, float val2);
-GTEST_API_ AssertionResult DoubleLE(const char* expr1, const char* expr2,
-                                    double val1, double val2);
-
-
-#if GTEST_OS_WINDOWS
-
-// Macros that test for HRESULT failure and success, these are only useful
-// on Windows, and rely on Windows SDK macros and APIs to compile.
-//
-//    * {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}(expr)
-//
-// When expr unexpectedly fails or succeeds, Google Test prints the
-// expected result and the actual result with both a human-readable
-// string representation of the error, if available, as well as the
-// hex result code.
-# define EXPECT_HRESULT_SUCCEEDED(expr) \
-    EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))
-
-# define ASSERT_HRESULT_SUCCEEDED(expr) \
-    ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTSuccess, (expr))
-
-# define EXPECT_HRESULT_FAILED(expr) \
-    EXPECT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))
-
-# define ASSERT_HRESULT_FAILED(expr) \
-    ASSERT_PRED_FORMAT1(::testing::internal::IsHRESULTFailure, (expr))
-
-#endif  // GTEST_OS_WINDOWS
-
-// Macros that execute statement and check that it doesn't generate new fatal
-// failures in the current thread.
-//
-//   * {ASSERT|EXPECT}_NO_FATAL_FAILURE(statement);
-//
-// Examples:
-//
-//   EXPECT_NO_FATAL_FAILURE(Process());
-//   ASSERT_NO_FATAL_FAILURE(Process()) << "Process() failed";
-//
-#define ASSERT_NO_FATAL_FAILURE(statement) \
-    GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_FATAL_FAILURE_)
-#define EXPECT_NO_FATAL_FAILURE(statement) \
-    GTEST_TEST_NO_FATAL_FAILURE_(statement, GTEST_NONFATAL_FAILURE_)
-
-// Causes a trace (including the source file path, the current line
-// number, and the given message) to be included in every test failure
-// message generated by code in the current scope.  The effect is
-// undone when the control leaves the current scope.
-//
-// The message argument can be anything streamable to std::ostream.
-//
-// In the implementation, we include the current line number as part
-// of the dummy variable name, thus allowing multiple SCOPED_TRACE()s
-// to appear in the same block - as long as they are on different
-// lines.
-#define SCOPED_TRACE(message) \
-  ::testing::internal::ScopedTrace GTEST_CONCAT_TOKEN_(gtest_trace_, __LINE__)(\
-    __FILE__, __LINE__, ::testing::Message() << (message))
-
-// Compile-time assertion for type equality.
-// StaticAssertTypeEq<type1, type2>() compiles iff type1 and type2 are
-// the same type.  The value it returns is not interesting.
-//
-// Instead of making StaticAssertTypeEq a class template, we make it a
-// function template that invokes a helper class template.  This
-// prevents a user from misusing StaticAssertTypeEq<T1, T2> by
-// defining objects of that type.
-//
-// CAVEAT:
-//
-// When used inside a method of a class template,
-// StaticAssertTypeEq<T1, T2>() is effective ONLY IF the method is
-// instantiated.  For example, given:
-//
-//   template <typename T> class Foo {
-//    public:
-//     void Bar() { testing::StaticAssertTypeEq<int, T>(); }
-//   };
-//
-// the code:
-//
-//   void Test1() { Foo<bool> foo; }
-//
-// will NOT generate a compiler error, as Foo<bool>::Bar() is never
-// actually instantiated.  Instead, you need:
-//
-//   void Test2() { Foo<bool> foo; foo.Bar(); }
-//
-// to cause a compiler error.
-template <typename T1, typename T2>
-bool StaticAssertTypeEq() {
-  (void)internal::StaticAssertTypeEqHelper<T1, T2>();
-  return true;
-}
-
-// Defines a test.
-//
-// The first parameter is the name of the test case, and the second
-// parameter is the name of the test within the test case.
-//
-// The convention is to end the test case name with "Test".  For
-// example, a test case for the Foo class can be named FooTest.
-//
-// The user should put his test code between braces after using this
-// macro.  Example:
-//
-//   TEST(FooTest, InitializesCorrectly) {
-//     Foo foo;
-//     EXPECT_TRUE(foo.StatusIsOK());
-//   }
-
-// Note that we call GetTestTypeId() instead of GetTypeId<
-// ::testing::Test>() here to get the type ID of testing::Test.  This
-// is to work around a suspected linker bug when using Google Test as
-// a framework on Mac OS X.  The bug causes GetTypeId<
-// ::testing::Test>() to return different values depending on whether
-// the call is from the Google Test framework itself or from user test
-// code.  GetTestTypeId() is guaranteed to always return the same
-// value, as it always calls GetTypeId<>() from the Google Test
-// framework.
-#define GTEST_TEST(test_case_name, test_name)\
-  GTEST_TEST_(test_case_name, test_name, \
-              ::testing::Test, ::testing::internal::GetTestTypeId())
-
-// Define this macro to 1 to omit the definition of TEST(), which
-// is a generic name and clashes with some other libraries.
-#if !GTEST_DONT_DEFINE_TEST
-# define TEST(test_case_name, test_name) GTEST_TEST(test_case_name, test_name)
-#endif
-
-// Defines a test that uses a test fixture.
-//
-// The first parameter is the name of the test fixture class, which
-// also doubles as the test case name.  The second parameter is the
-// name of the test within the test case.
-//
-// A test fixture class must be declared earlier.  The user should put
-// his test code between braces after using this macro.  Example:
-//
-//   class FooTest : public testing::Test {
-//    protected:
-//     virtual void SetUp() { b_.AddElement(3); }
-//
-//     Foo a_;
-//     Foo b_;
-//   };
-//
-//   TEST_F(FooTest, InitializesCorrectly) {
-//     EXPECT_TRUE(a_.StatusIsOK());
-//   }
-//
-//   TEST_F(FooTest, ReturnsElementCountCorrectly) {
-//     EXPECT_EQ(0, a_.size());
-//     EXPECT_EQ(1, b_.size());
-//   }
-
-#define TEST_F(test_fixture, test_name)\
-  GTEST_TEST_(test_fixture, test_name, test_fixture, \
-              ::testing::internal::GetTypeId<test_fixture>())
-
-// Use this macro in main() to run all tests.  It returns 0 if all
-// tests are successful, or 1 otherwise.
-//
-// RUN_ALL_TESTS() should be invoked after the command line has been
-// parsed by InitGoogleTest().
-
-#define RUN_ALL_TESTS()\
-  (::testing::UnitTest::GetInstance()->Run())
-
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_GTEST_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/gtest_pred_impl.h b/src/libs_3rdparty/gtest/src/gtest/gtest_pred_impl.h
deleted file mode 100644
index 3805f85..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/gtest_pred_impl.h
+++ /dev/null
@@ -1,358 +0,0 @@
-// Copyright 2006, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-
-// This file is AUTOMATICALLY GENERATED on 09/24/2010 by command
-// 'gen_gtest_pred_impl.py 5'.  DO NOT EDIT BY HAND!
-//
-// Implements a family of generic predicate assertion macros.
-
-#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
-#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
-
-// Makes sure this header is not included before gtest.h.
-#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
-# error Do not include gtest_pred_impl.h directly.  Include gtest.h instead.
-#endif  // GTEST_INCLUDE_GTEST_GTEST_H_
-
-// This header implements a family of generic predicate assertion
-// macros:
-//
-//   ASSERT_PRED_FORMAT1(pred_format, v1)
-//   ASSERT_PRED_FORMAT2(pred_format, v1, v2)
-//   ...
-//
-// where pred_format is a function or functor that takes n (in the
-// case of ASSERT_PRED_FORMATn) values and their source expression
-// text, and returns a testing::AssertionResult.  See the definition
-// of ASSERT_EQ in gtest.h for an example.
-//
-// If you don't care about formatting, you can use the more
-// restrictive version:
-//
-//   ASSERT_PRED1(pred, v1)
-//   ASSERT_PRED2(pred, v1, v2)
-//   ...
-//
-// where pred is an n-ary function or functor that returns bool,
-// and the values v1, v2, ..., must support the << operator for
-// streaming to std::ostream.
-//
-// We also define the EXPECT_* variations.
-//
-// For now we only support predicates whose arity is at most 5.
-// Please email googletestframework at googlegroups.com if you need
-// support for higher arities.
-
-// GTEST_ASSERT_ is the basic statement to which all of the assertions
-// in this file reduce.  Don't use this in your code.
-
-#define GTEST_ASSERT_(expression, on_failure) \
-  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
-  if (const ::testing::AssertionResult gtest_ar = (expression)) \
-    ; \
-  else \
-    on_failure(gtest_ar.failure_message())
-
-
-// Helper function for implementing {EXPECT|ASSERT}_PRED1.  Don't use
-// this in your code.
-template <typename Pred,
-          typename T1>
-AssertionResult AssertPred1Helper(const char* pred_text,
-                                  const char* e1,
-                                  Pred pred,
-                                  const T1& v1) {
-  if (pred(v1)) return AssertionSuccess();
-
-  return AssertionFailure() << pred_text << "("
-                            << e1 << ") evaluates to false, where"
-                            << "\n" << e1 << " evaluates to " << v1;
-}
-
-// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1.
-// Don't use this in your code.
-#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\
-  GTEST_ASSERT_(pred_format(#v1, v1),\
-                on_failure)
-
-// Internal macro for implementing {EXPECT|ASSERT}_PRED1.  Don't use
-// this in your code.
-#define GTEST_PRED1_(pred, v1, on_failure)\
-  GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \
-                                             #v1, \
-                                             pred, \
-                                             v1), on_failure)
-
-// Unary predicate assertion macros.
-#define EXPECT_PRED_FORMAT1(pred_format, v1) \
-  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_)
-#define EXPECT_PRED1(pred, v1) \
-  GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_)
-#define ASSERT_PRED_FORMAT1(pred_format, v1) \
-  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)
-#define ASSERT_PRED1(pred, v1) \
-  GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_)
-
-
-
-// Helper function for implementing {EXPECT|ASSERT}_PRED2.  Don't use
-// this in your code.
-template <typename Pred,
-          typename T1,
-          typename T2>
-AssertionResult AssertPred2Helper(const char* pred_text,
-                                  const char* e1,
-                                  const char* e2,
-                                  Pred pred,
-                                  const T1& v1,
-                                  const T2& v2) {
-  if (pred(v1, v2)) return AssertionSuccess();
-
-  return AssertionFailure() << pred_text << "("
-                            << e1 << ", "
-                            << e2 << ") evaluates to false, where"
-                            << "\n" << e1 << " evaluates to " << v1
-                            << "\n" << e2 << " evaluates to " << v2;
-}
-
-// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2.
-// Don't use this in your code.
-#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\
-  GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2),\
-                on_failure)
-
-// Internal macro for implementing {EXPECT|ASSERT}_PRED2.  Don't use
-// this in your code.
-#define GTEST_PRED2_(pred, v1, v2, on_failure)\
-  GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \
-                                             #v1, \
-                                             #v2, \
-                                             pred, \
-                                             v1, \
-                                             v2), on_failure)
-
-// Binary predicate assertion macros.
-#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \
-  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)
-#define EXPECT_PRED2(pred, v1, v2) \
-  GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_)
-#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \
-  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
-#define ASSERT_PRED2(pred, v1, v2) \
-  GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_)
-
-
-
-// Helper function for implementing {EXPECT|ASSERT}_PRED3.  Don't use
-// this in your code.
-template <typename Pred,
-          typename T1,
-          typename T2,
-          typename T3>
-AssertionResult AssertPred3Helper(const char* pred_text,
-                                  const char* e1,
-                                  const char* e2,
-                                  const char* e3,
-                                  Pred pred,
-                                  const T1& v1,
-                                  const T2& v2,
-                                  const T3& v3) {
-  if (pred(v1, v2, v3)) return AssertionSuccess();
-
-  return AssertionFailure() << pred_text << "("
-                            << e1 << ", "
-                            << e2 << ", "
-                            << e3 << ") evaluates to false, where"
-                            << "\n" << e1 << " evaluates to " << v1
-                            << "\n" << e2 << " evaluates to " << v2
-                            << "\n" << e3 << " evaluates to " << v3;
-}
-
-// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3.
-// Don't use this in your code.
-#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\
-  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3),\
-                on_failure)
-
-// Internal macro for implementing {EXPECT|ASSERT}_PRED3.  Don't use
-// this in your code.
-#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\
-  GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \
-                                             #v1, \
-                                             #v2, \
-                                             #v3, \
-                                             pred, \
-                                             v1, \
-                                             v2, \
-                                             v3), on_failure)
-
-// Ternary predicate assertion macros.
-#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \
-  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
-#define EXPECT_PRED3(pred, v1, v2, v3) \
-  GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
-#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \
-  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_)
-#define ASSERT_PRED3(pred, v1, v2, v3) \
-  GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_)
-
-
-
-// Helper function for implementing {EXPECT|ASSERT}_PRED4.  Don't use
-// this in your code.
-template <typename Pred,
-          typename T1,
-          typename T2,
-          typename T3,
-          typename T4>
-AssertionResult AssertPred4Helper(const char* pred_text,
-                                  const char* e1,
-                                  const char* e2,
-                                  const char* e3,
-                                  const char* e4,
-                                  Pred pred,
-                                  const T1& v1,
-                                  const T2& v2,
-                                  const T3& v3,
-                                  const T4& v4) {
-  if (pred(v1, v2, v3, v4)) return AssertionSuccess();
-
-  return AssertionFailure() << pred_text << "("
-                            << e1 << ", "
-                            << e2 << ", "
-                            << e3 << ", "
-                            << e4 << ") evaluates to false, where"
-                            << "\n" << e1 << " evaluates to " << v1
-                            << "\n" << e2 << " evaluates to " << v2
-                            << "\n" << e3 << " evaluates to " << v3
-                            << "\n" << e4 << " evaluates to " << v4;
-}
-
-// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4.
-// Don't use this in your code.
-#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\
-  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4),\
-                on_failure)
-
-// Internal macro for implementing {EXPECT|ASSERT}_PRED4.  Don't use
-// this in your code.
-#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\
-  GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \
-                                             #v1, \
-                                             #v2, \
-                                             #v3, \
-                                             #v4, \
-                                             pred, \
-                                             v1, \
-                                             v2, \
-                                             v3, \
-                                             v4), on_failure)
-
-// 4-ary predicate assertion macros.
-#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
-  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
-#define EXPECT_PRED4(pred, v1, v2, v3, v4) \
-  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
-#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
-  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
-#define ASSERT_PRED4(pred, v1, v2, v3, v4) \
-  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
-
-
-
-// Helper function for implementing {EXPECT|ASSERT}_PRED5.  Don't use
-// this in your code.
-template <typename Pred,
-          typename T1,
-          typename T2,
-          typename T3,
-          typename T4,
-          typename T5>
-AssertionResult AssertPred5Helper(const char* pred_text,
-                                  const char* e1,
-                                  const char* e2,
-                                  const char* e3,
-                                  const char* e4,
-                                  const char* e5,
-                                  Pred pred,
-                                  const T1& v1,
-                                  const T2& v2,
-                                  const T3& v3,
-                                  const T4& v4,
-                                  const T5& v5) {
-  if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess();
-
-  return AssertionFailure() << pred_text << "("
-                            << e1 << ", "
-                            << e2 << ", "
-                            << e3 << ", "
-                            << e4 << ", "
-                            << e5 << ") evaluates to false, where"
-                            << "\n" << e1 << " evaluates to " << v1
-                            << "\n" << e2 << " evaluates to " << v2
-                            << "\n" << e3 << " evaluates to " << v3
-                            << "\n" << e4 << " evaluates to " << v4
-                            << "\n" << e5 << " evaluates to " << v5;
-}
-
-// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5.
-// Don't use this in your code.
-#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\
-  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\
-                on_failure)
-
-// Internal macro for implementing {EXPECT|ASSERT}_PRED5.  Don't use
-// this in your code.
-#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\
-  GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \
-                                             #v1, \
-                                             #v2, \
-                                             #v3, \
-                                             #v4, \
-                                             #v5, \
-                                             pred, \
-                                             v1, \
-                                             v2, \
-                                             v3, \
-                                             v4, \
-                                             v5), on_failure)
-
-// 5-ary predicate assertion macros.
-#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
-  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
-#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \
-  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
-#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
-  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
-#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \
-  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
-
-
-
-#endif  // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/gtest_prod.h b/src/libs_3rdparty/gtest/src/gtest/gtest_prod.h
deleted file mode 100644
index da80ddc..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/gtest_prod.h
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2006, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-//
-// Google C++ Testing Framework definitions useful in production code.
-
-#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_
-#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_
-
-// When you need to test the private or protected members of a class,
-// use the FRIEND_TEST macro to declare your tests as friends of the
-// class.  For example:
-//
-// class MyClass {
-//  private:
-//   void MyMethod();
-//   FRIEND_TEST(MyClassTest, MyMethod);
-// };
-//
-// class MyClassTest : public testing::Test {
-//   // ...
-// };
-//
-// TEST_F(MyClassTest, MyMethod) {
-//   // Can call MyClass::MyMethod() here.
-// }
-
-#define FRIEND_TEST(test_case_name, test_name)\
-friend class test_case_name##_##test_name##_Test
-
-#endif  // GTEST_INCLUDE_GTEST_GTEST_PROD_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-death-test-internal.h b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-death-test-internal.h
deleted file mode 100644
index 1d9f83b..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-death-test-internal.h
+++ /dev/null
@@ -1,308 +0,0 @@
-// Copyright 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Authors: wan at google.com (Zhanyong Wan), eefacm at gmail.com (Sean Mcafee)
-//
-// The Google C++ Testing Framework (Google Test)
-//
-// This header file defines internal utilities needed for implementing
-// death tests.  They are subject to change without notice.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
-
-#include "gtest/internal/gtest-internal.h"
-
-#include <stdio.h>
-
-namespace testing {
-namespace internal {
-
-GTEST_DECLARE_string_(internal_run_death_test);
-
-// Names of the flags (needed for parsing Google Test flags).
-const char kDeathTestStyleFlag[] = "death_test_style";
-const char kDeathTestUseFork[] = "death_test_use_fork";
-const char kInternalRunDeathTestFlag[] = "internal_run_death_test";
-
-#if GTEST_HAS_DEATH_TEST
-
-// DeathTest is a class that hides much of the complexity of the
-// GTEST_DEATH_TEST_ macro.  It is abstract; its static Create method
-// returns a concrete class that depends on the prevailing death test
-// style, as defined by the --gtest_death_test_style and/or
-// --gtest_internal_run_death_test flags.
-
-// In describing the results of death tests, these terms are used with
-// the corresponding definitions:
-//
-// exit status:  The integer exit information in the format specified
-//               by wait(2)
-// exit code:    The integer code passed to exit(3), _exit(2), or
-//               returned from main()
-class GTEST_API_ DeathTest {
- public:
-  // Create returns false if there was an error determining the
-  // appropriate action to take for the current death test; for example,
-  // if the gtest_death_test_style flag is set to an invalid value.
-  // The LastMessage method will return a more detailed message in that
-  // case.  Otherwise, the DeathTest pointer pointed to by the "test"
-  // argument is set.  If the death test should be skipped, the pointer
-  // is set to NULL; otherwise, it is set to the address of a new concrete
-  // DeathTest object that controls the execution of the current test.
-  static bool Create(const char* statement, const RE* regex,
-                     const char* file, int line, DeathTest** test);
-  DeathTest();
-  virtual ~DeathTest() { }
-
-  // A helper class that aborts a death test when it's deleted.
-  class ReturnSentinel {
-   public:
-    explicit ReturnSentinel(DeathTest* test) : test_(test) { }
-    ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); }
-   private:
-    DeathTest* const test_;
-    GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel);
-  } GTEST_ATTRIBUTE_UNUSED_;
-
-  // An enumeration of possible roles that may be taken when a death
-  // test is encountered.  EXECUTE means that the death test logic should
-  // be executed immediately.  OVERSEE means that the program should prepare
-  // the appropriate environment for a child process to execute the death
-  // test, then wait for it to complete.
-  enum TestRole { OVERSEE_TEST, EXECUTE_TEST };
-
-  // An enumeration of the three reasons that a test might be aborted.
-  enum AbortReason {
-    TEST_ENCOUNTERED_RETURN_STATEMENT,
-    TEST_THREW_EXCEPTION,
-    TEST_DID_NOT_DIE
-  };
-
-  // Assumes one of the above roles.
-  virtual TestRole AssumeRole() = 0;
-
-  // Waits for the death test to finish and returns its status.
-  virtual int Wait() = 0;
-
-  // Returns true if the death test passed; that is, the test process
-  // exited during the test, its exit status matches a user-supplied
-  // predicate, and its stderr output matches a user-supplied regular
-  // expression.
-  // The user-supplied predicate may be a macro expression rather
-  // than a function pointer or functor, or else Wait and Passed could
-  // be combined.
-  virtual bool Passed(bool exit_status_ok) = 0;
-
-  // Signals that the death test did not die as expected.
-  virtual void Abort(AbortReason reason) = 0;
-
-  // Returns a human-readable outcome message regarding the outcome of
-  // the last death test.
-  static const char* LastMessage();
-
-  static void set_last_death_test_message(const String& message);
-
- private:
-  // A string containing a description of the outcome of the last death test.
-  static String last_death_test_message_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest);
-};
-
-// Factory interface for death tests.  May be mocked out for testing.
-class DeathTestFactory {
- public:
-  virtual ~DeathTestFactory() { }
-  virtual bool Create(const char* statement, const RE* regex,
-                      const char* file, int line, DeathTest** test) = 0;
-};
-
-// A concrete DeathTestFactory implementation for normal use.
-class DefaultDeathTestFactory : public DeathTestFactory {
- public:
-  virtual bool Create(const char* statement, const RE* regex,
-                      const char* file, int line, DeathTest** test);
-};
-
-// Returns true if exit_status describes a process that was terminated
-// by a signal, or exited normally with a nonzero exit code.
-GTEST_API_ bool ExitedUnsuccessfully(int exit_status);
-
-// Traps C++ exceptions escaping statement and reports them as test
-// failures. Note that trapping SEH exceptions is not implemented here.
-# if GTEST_HAS_EXCEPTIONS
-#  define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \
-  try { \
-    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
-  } catch (const ::std::exception& gtest_exception) { \
-    fprintf(\
-        stderr, \
-        "\n%s: Caught std::exception-derived exception escaping the " \
-        "death test statement. Exception message: %s\n", \
-        ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \
-        gtest_exception.what()); \
-    fflush(stderr); \
-    death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
-  } catch (...) { \
-    death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
-  }
-
-# else
-#  define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \
-  GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)
-
-# endif
-
-// This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*,
-// ASSERT_EXIT*, and EXPECT_EXIT*.
-# define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \
-  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
-  if (::testing::internal::AlwaysTrue()) { \
-    const ::testing::internal::RE& gtest_regex = (regex); \
-    ::testing::internal::DeathTest* gtest_dt; \
-    if (!::testing::internal::DeathTest::Create(#statement, &gtest_regex, \
-        __FILE__, __LINE__, &gtest_dt)) { \
-      goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
-    } \
-    if (gtest_dt != NULL) { \
-      ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \
-          gtest_dt_ptr(gtest_dt); \
-      switch (gtest_dt->AssumeRole()) { \
-        case ::testing::internal::DeathTest::OVERSEE_TEST: \
-          if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \
-            goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
-          } \
-          break; \
-        case ::testing::internal::DeathTest::EXECUTE_TEST: { \
-          ::testing::internal::DeathTest::ReturnSentinel \
-              gtest_sentinel(gtest_dt); \
-          GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \
-          gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \
-          break; \
-        } \
-        default: \
-          break; \
-      } \
-    } \
-  } else \
-    GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \
-      fail(::testing::internal::DeathTest::LastMessage())
-// The symbol "fail" here expands to something into which a message
-// can be streamed.
-
-// A class representing the parsed contents of the
-// --gtest_internal_run_death_test flag, as it existed when
-// RUN_ALL_TESTS was called.
-class InternalRunDeathTestFlag {
- public:
-  InternalRunDeathTestFlag(const String& a_file,
-                           int a_line,
-                           int an_index,
-                           int a_write_fd)
-      : file_(a_file), line_(a_line), index_(an_index),
-        write_fd_(a_write_fd) {}
-
-  ~InternalRunDeathTestFlag() {
-    if (write_fd_ >= 0)
-      posix::Close(write_fd_);
-  }
-
-  String file() const { return file_; }
-  int line() const { return line_; }
-  int index() const { return index_; }
-  int write_fd() const { return write_fd_; }
-
- private:
-  String file_;
-  int line_;
-  int index_;
-  int write_fd_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag);
-};
-
-// Returns a newly created InternalRunDeathTestFlag object with fields
-// initialized from the GTEST_FLAG(internal_run_death_test) flag if
-// the flag is specified; otherwise returns NULL.
-InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();
-
-#else  // GTEST_HAS_DEATH_TEST
-
-// This macro is used for implementing macros such as
-// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where
-// death tests are not supported. Those macros must compile on such systems
-// iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on
-// systems that support death tests. This allows one to write such a macro
-// on a system that does not support death tests and be sure that it will
-// compile on a death-test supporting system.
-//
-// Parameters:
-//   statement -  A statement that a macro such as EXPECT_DEATH would test
-//                for program termination. This macro has to make sure this
-//                statement is compiled but not executed, to ensure that
-//                EXPECT_DEATH_IF_SUPPORTED compiles with a certain
-//                parameter iff EXPECT_DEATH compiles with it.
-//   regex     -  A regex that a macro such as EXPECT_DEATH would use to test
-//                the output of statement.  This parameter has to be
-//                compiled but not evaluated by this macro, to ensure that
-//                this macro only accepts expressions that a macro such as
-//                EXPECT_DEATH would accept.
-//   terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED
-//                and a return statement for ASSERT_DEATH_IF_SUPPORTED.
-//                This ensures that ASSERT_DEATH_IF_SUPPORTED will not
-//                compile inside functions where ASSERT_DEATH doesn't
-//                compile.
-//
-//  The branch that has an always false condition is used to ensure that
-//  statement and regex are compiled (and thus syntactically correct) but
-//  never executed. The unreachable code macro protects the terminator
-//  statement from generating an 'unreachable code' warning in case
-//  statement unconditionally returns or throws. The Message constructor at
-//  the end allows the syntax of streaming additional messages into the
-//  macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH.
-# define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \
-    GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
-    if (::testing::internal::AlwaysTrue()) { \
-      GTEST_LOG_(WARNING) \
-          << "Death tests are not supported on this platform.\n" \
-          << "Statement '" #statement "' cannot be verified."; \
-    } else if (::testing::internal::AlwaysFalse()) { \
-      ::testing::internal::RE::PartialMatch(".*", (regex)); \
-      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
-      terminator; \
-    } else \
-      ::testing::Message()
-
-#endif  // GTEST_HAS_DEATH_TEST
-
-}  // namespace internal
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-filepath.h b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-filepath.h
deleted file mode 100644
index b36b3cf..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-filepath.h
+++ /dev/null
@@ -1,210 +0,0 @@
-// Copyright 2008, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: keith.ray at gmail.com (Keith Ray)
-//
-// Google Test filepath utilities
-//
-// This header file declares classes and functions used internally by
-// Google Test.  They are subject to change without notice.
-//
-// This file is #included in <gtest/internal/gtest-internal.h>.
-// Do not include this header file separately!
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
-
-#include "gtest/internal/gtest-string.h"
-
-namespace testing {
-namespace internal {
-
-// FilePath - a class for file and directory pathname manipulation which
-// handles platform-specific conventions (like the pathname separator).
-// Used for helper functions for naming files in a directory for xml output.
-// Except for Set methods, all methods are const or static, which provides an
-// "immutable value object" -- useful for peace of mind.
-// A FilePath with a value ending in a path separator ("like/this/") represents
-// a directory, otherwise it is assumed to represent a file. In either case,
-// it may or may not represent an actual file or directory in the file system.
-// Names are NOT checked for syntax correctness -- no checking for illegal
-// characters, malformed paths, etc.
-
-class GTEST_API_ FilePath {
- public:
-  FilePath() : pathname_("") { }
-  FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { }
-
-  explicit FilePath(const char* pathname) : pathname_(pathname) {
-    Normalize();
-  }
-
-  explicit FilePath(const String& pathname) : pathname_(pathname) {
-    Normalize();
-  }
-
-  FilePath& operator=(const FilePath& rhs) {
-    Set(rhs);
-    return *this;
-  }
-
-  void Set(const FilePath& rhs) {
-    pathname_ = rhs.pathname_;
-  }
-
-  String ToString() const { return pathname_; }
-  const char* c_str() const { return pathname_.c_str(); }
-
-  // Returns the current working directory, or "" if unsuccessful.
-  static FilePath GetCurrentDir();
-
-  // Given directory = "dir", base_name = "test", number = 0,
-  // extension = "xml", returns "dir/test.xml". If number is greater
-  // than zero (e.g., 12), returns "dir/test_12.xml".
-  // On Windows platform, uses \ as the separator rather than /.
-  static FilePath MakeFileName(const FilePath& directory,
-                               const FilePath& base_name,
-                               int number,
-                               const char* extension);
-
-  // Given directory = "dir", relative_path = "test.xml",
-  // returns "dir/test.xml".
-  // On Windows, uses \ as the separator rather than /.
-  static FilePath ConcatPaths(const FilePath& directory,
-                              const FilePath& relative_path);
-
-  // Returns a pathname for a file that does not currently exist. The pathname
-  // will be directory/base_name.extension or
-  // directory/base_name_<number>.extension if directory/base_name.extension
-  // already exists. The number will be incremented until a pathname is found
-  // that does not already exist.
-  // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'.
-  // There could be a race condition if two or more processes are calling this
-  // function at the same time -- they could both pick the same filename.
-  static FilePath GenerateUniqueFileName(const FilePath& directory,
-                                         const FilePath& base_name,
-                                         const char* extension);
-
-  // Returns true iff the path is NULL or "".
-  bool IsEmpty() const { return c_str() == NULL || *c_str() == '\0'; }
-
-  // If input name has a trailing separator character, removes it and returns
-  // the name, otherwise return the name string unmodified.
-  // On Windows platform, uses \ as the separator, other platforms use /.
-  FilePath RemoveTrailingPathSeparator() const;
-
-  // Returns a copy of the FilePath with the directory part removed.
-  // Example: FilePath("path/to/file").RemoveDirectoryName() returns
-  // FilePath("file"). If there is no directory part ("just_a_file"), it returns
-  // the FilePath unmodified. If there is no file part ("just_a_dir/") it
-  // returns an empty FilePath ("").
-  // On Windows platform, '\' is the path separator, otherwise it is '/'.
-  FilePath RemoveDirectoryName() const;
-
-  // RemoveFileName returns the directory path with the filename removed.
-  // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/".
-  // If the FilePath is "a_file" or "/a_file", RemoveFileName returns
-  // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does
-  // not have a file, like "just/a/dir/", it returns the FilePath unmodified.
-  // On Windows platform, '\' is the path separator, otherwise it is '/'.
-  FilePath RemoveFileName() const;
-
-  // Returns a copy of the FilePath with the case-insensitive extension removed.
-  // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns
-  // FilePath("dir/file"). If a case-insensitive extension is not
-  // found, returns a copy of the original FilePath.
-  FilePath RemoveExtension(const char* extension) const;
-
-  // Creates directories so that path exists. Returns true if successful or if
-  // the directories already exist; returns false if unable to create
-  // directories for any reason. Will also return false if the FilePath does
-  // not represent a directory (that is, it doesn't end with a path separator).
-  bool CreateDirectoriesRecursively() const;
-
-  // Create the directory so that path exists. Returns true if successful or
-  // if the directory already exists; returns false if unable to create the
-  // directory for any reason, including if the parent directory does not
-  // exist. Not named "CreateDirectory" because that's a macro on Windows.
-  bool CreateFolder() const;
-
-  // Returns true if FilePath describes something in the file-system,
-  // either a file, directory, or whatever, and that something exists.
-  bool FileOrDirectoryExists() const;
-
-  // Returns true if pathname describes a directory in the file-system
-  // that exists.
-  bool DirectoryExists() const;
-
-  // Returns true if FilePath ends with a path separator, which indicates that
-  // it is intended to represent a directory. Returns false otherwise.
-  // This does NOT check that a directory (or file) actually exists.
-  bool IsDirectory() const;
-
-  // Returns true if pathname describes a root directory. (Windows has one
-  // root directory per disk drive.)
-  bool IsRootDirectory() const;
-
-  // Returns true if pathname describes an absolute path.
-  bool IsAbsolutePath() const;
-
- private:
-  // Replaces multiple consecutive separators with a single separator.
-  // For example, "bar///foo" becomes "bar/foo". Does not eliminate other
-  // redundancies that might be in a pathname involving "." or "..".
-  //
-  // A pathname with multiple consecutive separators may occur either through
-  // user error or as a result of some scripts or APIs that generate a pathname
-  // with a trailing separator. On other platforms the same API or script
-  // may NOT generate a pathname with a trailing "/". Then elsewhere that
-  // pathname may have another "/" and pathname components added to it,
-  // without checking for the separator already being there.
-  // The script language and operating system may allow paths like "foo//bar"
-  // but some of the functions in FilePath will not handle that correctly. In
-  // particular, RemoveTrailingPathSeparator() only removes one separator, and
-  // it is called in CreateDirectoriesRecursively() assuming that it will change
-  // a pathname from directory syntax (trailing separator) to filename syntax.
-  //
-  // On Windows this method also replaces the alternate path separator '/' with
-  // the primary path separator '\\', so that for example "bar\\/\\foo" becomes
-  // "bar\\foo".
-
-  void Normalize();
-
-  // Returns a pointer to the last occurence of a valid path separator in
-  // the FilePath. On Windows, for example, both '/' and '\' are valid path
-  // separators. Returns NULL if no path separator was found.
-  const char* FindLastPathSeparator() const;
-
-  String pathname_;
-};  // class FilePath
-
-}  // namespace internal
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-internal.h b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-internal.h
deleted file mode 100644
index 7aa1197..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-internal.h
+++ /dev/null
@@ -1,1226 +0,0 @@
-// Copyright 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Authors: wan at google.com (Zhanyong Wan), eefacm at gmail.com (Sean Mcafee)
-//
-// The Google C++ Testing Framework (Google Test)
-//
-// This header file declares functions and macros used internally by
-// Google Test.  They are subject to change without notice.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
-
-#include "gtest/internal/gtest-port.h"
-
-#if GTEST_OS_LINUX
-# include <stdlib.h>
-# include <sys/types.h>
-# include <sys/wait.h>
-# include <unistd.h>
-#endif  // GTEST_OS_LINUX
-
-#include <ctype.h>
-#include <string.h>
-#include <iomanip>
-#include <limits>
-#include <set>
-
-#include "gtest/internal/gtest-string.h"
-#include "gtest/internal/gtest-filepath.h"
-#include "gtest/internal/gtest-type-util.h"
-
-// Due to C++ preprocessor weirdness, we need double indirection to
-// concatenate two tokens when one of them is __LINE__.  Writing
-//
-//   foo ## __LINE__
-//
-// will result in the token foo__LINE__, instead of foo followed by
-// the current line number.  For more details, see
-// http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.6
-#define GTEST_CONCAT_TOKEN_(foo, bar) GTEST_CONCAT_TOKEN_IMPL_(foo, bar)
-#define GTEST_CONCAT_TOKEN_IMPL_(foo, bar) foo ## bar
-
-// Google Test defines the testing::Message class to allow construction of
-// test messages via the << operator.  The idea is that anything
-// streamable to std::ostream can be streamed to a testing::Message.
-// This allows a user to use his own types in Google Test assertions by
-// overloading the << operator.
-//
-// util/gtl/stl_logging-inl.h overloads << for STL containers.  These
-// overloads cannot be defined in the std namespace, as that will be
-// undefined behavior.  Therefore, they are defined in the global
-// namespace instead.
-//
-// C++'s symbol lookup rule (i.e. Koenig lookup) says that these
-// overloads are visible in either the std namespace or the global
-// namespace, but not other namespaces, including the testing
-// namespace which Google Test's Message class is in.
-//
-// To allow STL containers (and other types that has a << operator
-// defined in the global namespace) to be used in Google Test assertions,
-// testing::Message must access the custom << operator from the global
-// namespace.  Hence this helper function.
-//
-// Note: Jeffrey Yasskin suggested an alternative fix by "using
-// ::operator<<;" in the definition of Message's operator<<.  That fix
-// doesn't require a helper function, but unfortunately doesn't
-// compile with MSVC.
-template <typename T>
-inline void GTestStreamToHelper(std::ostream* os, const T& val) {
-  *os << val;
-}
-
-class ProtocolMessage;
-namespace proto2 { class Message; }
-
-namespace testing {
-
-// Forward declarations.
-
-class AssertionResult;                 // Result of an assertion.
-class Message;                         // Represents a failure message.
-class Test;                            // Represents a test.
-class TestInfo;                        // Information about a test.
-class TestPartResult;                  // Result of a test part.
-class UnitTest;                        // A collection of test cases.
-
-template <typename T>
-::std::string PrintToString(const T& value);
-
-namespace internal {
-
-struct TraceInfo;                      // Information about a trace point.
-class ScopedTrace;                     // Implements scoped trace.
-class TestInfoImpl;                    // Opaque implementation of TestInfo
-class UnitTestImpl;                    // Opaque implementation of UnitTest
-
-// How many times InitGoogleTest() has been called.
-extern int g_init_gtest_count;
-
-// The text used in failure messages to indicate the start of the
-// stack trace.
-GTEST_API_ extern const char kStackTraceMarker[];
-
-// A secret type that Google Test users don't know about.  It has no
-// definition on purpose.  Therefore it's impossible to create a
-// Secret object, which is what we want.
-class Secret;
-
-// Two overloaded helpers for checking at compile time whether an
-// expression is a null pointer literal (i.e. NULL or any 0-valued
-// compile-time integral constant).  Their return values have
-// different sizes, so we can use sizeof() to test which version is
-// picked by the compiler.  These helpers have no implementations, as
-// we only need their signatures.
-//
-// Given IsNullLiteralHelper(x), the compiler will pick the first
-// version if x can be implicitly converted to Secret*, and pick the
-// second version otherwise.  Since Secret is a secret and incomplete
-// type, the only expression a user can write that has type Secret* is
-// a null pointer literal.  Therefore, we know that x is a null
-// pointer literal if and only if the first version is picked by the
-// compiler.
-char IsNullLiteralHelper(Secret* p);
-char (&IsNullLiteralHelper(...))[2];  // NOLINT
-
-// A compile-time bool constant that is true if and only if x is a
-// null pointer literal (i.e. NULL or any 0-valued compile-time
-// integral constant).
-#ifdef GTEST_ELLIPSIS_NEEDS_POD_
-// We lose support for NULL detection where the compiler doesn't like
-// passing non-POD classes through ellipsis (...).
-# define GTEST_IS_NULL_LITERAL_(x) false
-#else
-# define GTEST_IS_NULL_LITERAL_(x) \
-    (sizeof(::testing::internal::IsNullLiteralHelper(x)) == 1)
-#endif  // GTEST_ELLIPSIS_NEEDS_POD_
-
-// Appends the user-supplied message to the Google-Test-generated message.
-GTEST_API_ String AppendUserMessage(const String& gtest_msg,
-                                    const Message& user_msg);
-
-// A helper class for creating scoped traces in user programs.
-class GTEST_API_ ScopedTrace {
- public:
-  // The c'tor pushes the given source file location and message onto
-  // a trace stack maintained by Google Test.
-  ScopedTrace(const char* file, int line, const Message& message);
-
-  // The d'tor pops the info pushed by the c'tor.
-  //
-  // Note that the d'tor is not virtual in order to be efficient.
-  // Don't inherit from ScopedTrace!
-  ~ScopedTrace();
-
- private:
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedTrace);
-} GTEST_ATTRIBUTE_UNUSED_;  // A ScopedTrace object does its job in its
-                            // c'tor and d'tor.  Therefore it doesn't
-                            // need to be used otherwise.
-
-// Converts a streamable value to a String.  A NULL pointer is
-// converted to "(null)".  When the input value is a ::string,
-// ::std::string, ::wstring, or ::std::wstring object, each NUL
-// character in it is replaced with "\\0".
-// Declared here but defined in gtest.h, so that it has access
-// to the definition of the Message class, required by the ARM
-// compiler.
-template <typename T>
-String StreamableToString(const T& streamable);
-
-// The Symbian compiler has a bug that prevents it from selecting the
-// correct overload of FormatForComparisonFailureMessage (see below)
-// unless we pass the first argument by reference.  If we do that,
-// however, Visual Age C++ 10.1 generates a compiler error.  Therefore
-// we only apply the work-around for Symbian.
-#if defined(__SYMBIAN32__)
-# define GTEST_CREF_WORKAROUND_ const&
-#else
-# define GTEST_CREF_WORKAROUND_
-#endif
-
-// When this operand is a const char* or char*, if the other operand
-// is a ::std::string or ::string, we print this operand as a C string
-// rather than a pointer (we do the same for wide strings); otherwise
-// we print it as a pointer to be safe.
-
-// This internal macro is used to avoid duplicated code.
-#define GTEST_FORMAT_IMPL_(operand2_type, operand1_printer)\
-inline String FormatForComparisonFailureMessage(\
-    operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
-    const operand2_type& /*operand2*/) {\
-  return operand1_printer(str);\
-}\
-inline String FormatForComparisonFailureMessage(\
-    const operand2_type::value_type* GTEST_CREF_WORKAROUND_ str, \
-    const operand2_type& /*operand2*/) {\
-  return operand1_printer(str);\
-}
-
-GTEST_FORMAT_IMPL_(::std::string, String::ShowCStringQuoted)
-#if GTEST_HAS_STD_WSTRING
-GTEST_FORMAT_IMPL_(::std::wstring, String::ShowWideCStringQuoted)
-#endif  // GTEST_HAS_STD_WSTRING
-
-#if GTEST_HAS_GLOBAL_STRING
-GTEST_FORMAT_IMPL_(::string, String::ShowCStringQuoted)
-#endif  // GTEST_HAS_GLOBAL_STRING
-#if GTEST_HAS_GLOBAL_WSTRING
-GTEST_FORMAT_IMPL_(::wstring, String::ShowWideCStringQuoted)
-#endif  // GTEST_HAS_GLOBAL_WSTRING
-
-#undef GTEST_FORMAT_IMPL_
-
-// The next four overloads handle the case where the operand being
-// printed is a char/wchar_t pointer and the other operand is not a
-// string/wstring object.  In such cases, we just print the operand as
-// a pointer to be safe.
-#define GTEST_FORMAT_CHAR_PTR_IMPL_(CharType)                       \
-  template <typename T>                                             \
-  String FormatForComparisonFailureMessage(CharType* GTEST_CREF_WORKAROUND_ p, \
-                                           const T&) { \
-    return PrintToString(static_cast<const void*>(p));              \
-  }
-
-GTEST_FORMAT_CHAR_PTR_IMPL_(char)
-GTEST_FORMAT_CHAR_PTR_IMPL_(const char)
-GTEST_FORMAT_CHAR_PTR_IMPL_(wchar_t)
-GTEST_FORMAT_CHAR_PTR_IMPL_(const wchar_t)
-
-#undef GTEST_FORMAT_CHAR_PTR_IMPL_
-
-// Constructs and returns the message for an equality assertion
-// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.
-//
-// The first four parameters are the expressions used in the assertion
-// and their values, as strings.  For example, for ASSERT_EQ(foo, bar)
-// where foo is 5 and bar is 6, we have:
-//
-//   expected_expression: "foo"
-//   actual_expression:   "bar"
-//   expected_value:      "5"
-//   actual_value:        "6"
-//
-// The ignoring_case parameter is true iff the assertion is a
-// *_STRCASEEQ*.  When it's true, the string " (ignoring case)" will
-// be inserted into the message.
-GTEST_API_ AssertionResult EqFailure(const char* expected_expression,
-                                     const char* actual_expression,
-                                     const String& expected_value,
-                                     const String& actual_value,
-                                     bool ignoring_case);
-
-// Constructs a failure message for Boolean assertions such as EXPECT_TRUE.
-GTEST_API_ String GetBoolAssertionFailureMessage(
-    const AssertionResult& assertion_result,
-    const char* expression_text,
-    const char* actual_predicate_value,
-    const char* expected_predicate_value);
-
-// This template class represents an IEEE floating-point number
-// (either single-precision or double-precision, depending on the
-// template parameters).
-//
-// The purpose of this class is to do more sophisticated number
-// comparison.  (Due to round-off error, etc, it's very unlikely that
-// two floating-points will be equal exactly.  Hence a naive
-// comparison by the == operation often doesn't work.)
-//
-// Format of IEEE floating-point:
-//
-//   The most-significant bit being the leftmost, an IEEE
-//   floating-point looks like
-//
-//     sign_bit exponent_bits fraction_bits
-//
-//   Here, sign_bit is a single bit that designates the sign of the
-//   number.
-//
-//   For float, there are 8 exponent bits and 23 fraction bits.
-//
-//   For double, there are 11 exponent bits and 52 fraction bits.
-//
-//   More details can be found at
-//   http://en.wikipedia.org/wiki/IEEE_floating-point_standard.
-//
-// Template parameter:
-//
-//   RawType: the raw floating-point type (either float or double)
-template <typename RawType>
-class FloatingPoint {
- public:
-  // Defines the unsigned integer type that has the same size as the
-  // floating point number.
-  typedef typename TypeWithSize<sizeof(RawType)>::UInt Bits;
-
-  // Constants.
-
-  // # of bits in a number.
-  static const size_t kBitCount = 8*sizeof(RawType);
-
-  // # of fraction bits in a number.
-  static const size_t kFractionBitCount =
-    std::numeric_limits<RawType>::digits - 1;
-
-  // # of exponent bits in a number.
-  static const size_t kExponentBitCount = kBitCount - 1 - kFractionBitCount;
-
-  // The mask for the sign bit.
-  static const Bits kSignBitMask = static_cast<Bits>(1) << (kBitCount - 1);
-
-  // The mask for the fraction bits.
-  static const Bits kFractionBitMask =
-    ~static_cast<Bits>(0) >> (kExponentBitCount + 1);
-
-  // The mask for the exponent bits.
-  static const Bits kExponentBitMask = ~(kSignBitMask | kFractionBitMask);
-
-  // How many ULP's (Units in the Last Place) we want to tolerate when
-  // comparing two numbers.  The larger the value, the more error we
-  // allow.  A 0 value means that two numbers must be exactly the same
-  // to be considered equal.
-  //
-  // The maximum error of a single floating-point operation is 0.5
-  // units in the last place.  On Intel CPU's, all floating-point
-  // calculations are done with 80-bit precision, while double has 64
-  // bits.  Therefore, 4 should be enough for ordinary use.
-  //
-  // See the following article for more details on ULP:
-  // http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm.
-  static const size_t kMaxUlps = 4;
-
-  // Constructs a FloatingPoint from a raw floating-point number.
-  //
-  // On an Intel CPU, passing a non-normalized NAN (Not a Number)
-  // around may change its bits, although the new value is guaranteed
-  // to be also a NAN.  Therefore, don't expect this constructor to
-  // preserve the bits in x when x is a NAN.
-  explicit FloatingPoint(const RawType& x) { u_.value_ = x; }
-
-  // Static methods
-
-  // Reinterprets a bit pattern as a floating-point number.
-  //
-  // This function is needed to test the AlmostEquals() method.
-  static RawType ReinterpretBits(const Bits bits) {
-    FloatingPoint fp(0);
-    fp.u_.bits_ = bits;
-    return fp.u_.value_;
-  }
-
-  // Returns the floating-point number that represent positive infinity.
-  static RawType Infinity() {
-    return ReinterpretBits(kExponentBitMask);
-  }
-
-  // Non-static methods
-
-  // Returns the bits that represents this number.
-  const Bits &bits() const { return u_.bits_; }
-
-  // Returns the exponent bits of this number.
-  Bits exponent_bits() const { return kExponentBitMask & u_.bits_; }
-
-  // Returns the fraction bits of this number.
-  Bits fraction_bits() const { return kFractionBitMask & u_.bits_; }
-
-  // Returns the sign bit of this number.
-  Bits sign_bit() const { return kSignBitMask & u_.bits_; }
-
-  // Returns true iff this is NAN (not a number).
-  bool is_nan() const {
-    // It's a NAN if the exponent bits are all ones and the fraction
-    // bits are not entirely zeros.
-    return (exponent_bits() == kExponentBitMask) && (fraction_bits() != 0);
-  }
-
-  // Returns true iff this number is at most kMaxUlps ULP's away from
-  // rhs.  In particular, this function:
-  //
-  //   - returns false if either number is (or both are) NAN.
-  //   - treats really large numbers as almost equal to infinity.
-  //   - thinks +0.0 and -0.0 are 0 DLP's apart.
-  bool AlmostEquals(const FloatingPoint& rhs) const {
-    // The IEEE standard says that any comparison operation involving
-    // a NAN must return false.
-    if (is_nan() || rhs.is_nan()) return false;
-
-    return DistanceBetweenSignAndMagnitudeNumbers(u_.bits_, rhs.u_.bits_)
-        <= kMaxUlps;
-  }
-
- private:
-  // The data type used to store the actual floating-point number.
-  union FloatingPointUnion {
-    RawType value_;  // The raw floating-point number.
-    Bits bits_;      // The bits that represent the number.
-  };
-
-  // Converts an integer from the sign-and-magnitude representation to
-  // the biased representation.  More precisely, let N be 2 to the
-  // power of (kBitCount - 1), an integer x is represented by the
-  // unsigned number x + N.
-  //
-  // For instance,
-  //
-  //   -N + 1 (the most negative number representable using
-  //          sign-and-magnitude) is represented by 1;
-  //   0      is represented by N; and
-  //   N - 1  (the biggest number representable using
-  //          sign-and-magnitude) is represented by 2N - 1.
-  //
-  // Read http://en.wikipedia.org/wiki/Signed_number_representations
-  // for more details on signed number representations.
-  static Bits SignAndMagnitudeToBiased(const Bits &sam) {
-    if (kSignBitMask & sam) {
-      // sam represents a negative number.
-      return ~sam + 1;
-    } else {
-      // sam represents a positive number.
-      return kSignBitMask | sam;
-    }
-  }
-
-  // Given two numbers in the sign-and-magnitude representation,
-  // returns the distance between them as an unsigned number.
-  static Bits DistanceBetweenSignAndMagnitudeNumbers(const Bits &sam1,
-                                                     const Bits &sam2) {
-    const Bits biased1 = SignAndMagnitudeToBiased(sam1);
-    const Bits biased2 = SignAndMagnitudeToBiased(sam2);
-    return (biased1 >= biased2) ? (biased1 - biased2) : (biased2 - biased1);
-  }
-
-  FloatingPointUnion u_;
-};
-
-// Typedefs the instances of the FloatingPoint template class that we
-// care to use.
-typedef FloatingPoint<float> Float;
-typedef FloatingPoint<double> Double;
-
-// In order to catch the mistake of putting tests that use different
-// test fixture classes in the same test case, we need to assign
-// unique IDs to fixture classes and compare them.  The TypeId type is
-// used to hold such IDs.  The user should treat TypeId as an opaque
-// type: the only operation allowed on TypeId values is to compare
-// them for equality using the == operator.
-typedef const void* TypeId;
-
-template <typename T>
-class TypeIdHelper {
- public:
-  // dummy_ must not have a const type.  Otherwise an overly eager
-  // compiler (e.g. MSVC 7.1 & 8.0) may try to merge
-  // TypeIdHelper<T>::dummy_ for different Ts as an "optimization".
-  static bool dummy_;
-};
-
-template <typename T>
-bool TypeIdHelper<T>::dummy_ = false;
-
-// GetTypeId<T>() returns the ID of type T.  Different values will be
-// returned for different types.  Calling the function twice with the
-// same type argument is guaranteed to return the same ID.
-template <typename T>
-TypeId GetTypeId() {
-  // The compiler is required to allocate a different
-  // TypeIdHelper<T>::dummy_ variable for each T used to instantiate
-  // the template.  Therefore, the address of dummy_ is guaranteed to
-  // be unique.
-  return &(TypeIdHelper<T>::dummy_);
-}
-
-// Returns the type ID of ::testing::Test.  Always call this instead
-// of GetTypeId< ::testing::Test>() to get the type ID of
-// ::testing::Test, as the latter may give the wrong result due to a
-// suspected linker bug when compiling Google Test as a Mac OS X
-// framework.
-GTEST_API_ TypeId GetTestTypeId();
-
-// Defines the abstract factory interface that creates instances
-// of a Test object.
-class TestFactoryBase {
- public:
-  virtual ~TestFactoryBase() {}
-
-  // Creates a test instance to run. The instance is both created and destroyed
-  // within TestInfoImpl::Run()
-  virtual Test* CreateTest() = 0;
-
- protected:
-  TestFactoryBase() {}
-
- private:
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestFactoryBase);
-};
-
-// This class provides implementation of TeastFactoryBase interface.
-// It is used in TEST and TEST_F macros.
-template <class TestClass>
-class TestFactoryImpl : public TestFactoryBase {
- public:
-  virtual Test* CreateTest() { return new TestClass; }
-};
-
-#if GTEST_OS_WINDOWS
-
-// Predicate-formatters for implementing the HRESULT checking macros
-// {ASSERT|EXPECT}_HRESULT_{SUCCEEDED|FAILED}
-// We pass a long instead of HRESULT to avoid causing an
-// include dependency for the HRESULT type.
-GTEST_API_ AssertionResult IsHRESULTSuccess(const char* expr,
-                                            long hr);  // NOLINT
-GTEST_API_ AssertionResult IsHRESULTFailure(const char* expr,
-                                            long hr);  // NOLINT
-
-#endif  // GTEST_OS_WINDOWS
-
-// Types of SetUpTestCase() and TearDownTestCase() functions.
-typedef void (*SetUpTestCaseFunc)();
-typedef void (*TearDownTestCaseFunc)();
-
-// Creates a new TestInfo object and registers it with Google Test;
-// returns the created object.
-//
-// Arguments:
-//
-//   test_case_name:   name of the test case
-//   name:             name of the test
-//   type_param        the name of the test's type parameter, or NULL if
-//                     this is not  a typed or a type-parameterized test.
-//   value_param       text representation of the test's value parameter,
-//                     or NULL if this is not a type-parameterized test.
-//   fixture_class_id: ID of the test fixture class
-//   set_up_tc:        pointer to the function that sets up the test case
-//   tear_down_tc:     pointer to the function that tears down the test case
-//   factory:          pointer to the factory that creates a test object.
-//                     The newly created TestInfo instance will assume
-//                     ownership of the factory object.
-GTEST_API_ TestInfo* MakeAndRegisterTestInfo(
-    const char* test_case_name, const char* name,
-    const char* type_param,
-    const char* value_param,
-    TypeId fixture_class_id,
-    SetUpTestCaseFunc set_up_tc,
-    TearDownTestCaseFunc tear_down_tc,
-    TestFactoryBase* factory);
-
-// If *pstr starts with the given prefix, modifies *pstr to be right
-// past the prefix and returns true; otherwise leaves *pstr unchanged
-// and returns false.  None of pstr, *pstr, and prefix can be NULL.
-GTEST_API_ bool SkipPrefix(const char* prefix, const char** pstr);
-
-#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
-
-// State of the definition of a type-parameterized test case.
-class GTEST_API_ TypedTestCasePState {
- public:
-  TypedTestCasePState() : registered_(false) {}
-
-  // Adds the given test name to defined_test_names_ and return true
-  // if the test case hasn't been registered; otherwise aborts the
-  // program.
-  bool AddTestName(const char* file, int line, const char* case_name,
-                   const char* test_name) {
-    if (registered_) {
-      fprintf(stderr, "%s Test %s must be defined before "
-              "REGISTER_TYPED_TEST_CASE_P(%s, ...).\n",
-              FormatFileLocation(file, line).c_str(), test_name, case_name);
-      fflush(stderr);
-      posix::Abort();
-    }
-    defined_test_names_.insert(test_name);
-    return true;
-  }
-
-  // Verifies that registered_tests match the test names in
-  // defined_test_names_; returns registered_tests if successful, or
-  // aborts the program otherwise.
-  const char* VerifyRegisteredTestNames(
-      const char* file, int line, const char* registered_tests);
-
- private:
-  bool registered_;
-  ::std::set<const char*> defined_test_names_;
-};
-
-// Skips to the first non-space char after the first comma in 'str';
-// returns NULL if no comma is found in 'str'.
-inline const char* SkipComma(const char* str) {
-  const char* comma = strchr(str, ',');
-  if (comma == NULL) {
-    return NULL;
-  }
-  while (IsSpace(*(++comma))) {}
-  return comma;
-}
-
-// Returns the prefix of 'str' before the first comma in it; returns
-// the entire string if it contains no comma.
-inline String GetPrefixUntilComma(const char* str) {
-  const char* comma = strchr(str, ',');
-  return comma == NULL ? String(str) : String(str, comma - str);
-}
-
-// TypeParameterizedTest<Fixture, TestSel, Types>::Register()
-// registers a list of type-parameterized tests with Google Test.  The
-// return value is insignificant - we just need to return something
-// such that we can call this function in a namespace scope.
-//
-// Implementation note: The GTEST_TEMPLATE_ macro declares a template
-// template parameter.  It's defined in gtest-type-util.h.
-template <GTEST_TEMPLATE_ Fixture, class TestSel, typename Types>
-class TypeParameterizedTest {
- public:
-  // 'index' is the index of the test in the type list 'Types'
-  // specified in INSTANTIATE_TYPED_TEST_CASE_P(Prefix, TestCase,
-  // Types).  Valid values for 'index' are [0, N - 1] where N is the
-  // length of Types.
-  static bool Register(const char* prefix, const char* case_name,
-                       const char* test_names, int index) {
-    typedef typename Types::Head Type;
-    typedef Fixture<Type> FixtureClass;
-    typedef typename GTEST_BIND_(TestSel, Type) TestClass;
-
-    // First, registers the first type-parameterized test in the type
-    // list.
-    MakeAndRegisterTestInfo(
-        String::Format("%s%s%s/%d", prefix, prefix[0] == '\0' ? "" : "/",
-                       case_name, index).c_str(),
-        GetPrefixUntilComma(test_names).c_str(),
-        GetTypeName<Type>().c_str(),
-        NULL,  // No value parameter.
-        GetTypeId<FixtureClass>(),
-        TestClass::SetUpTestCase,
-        TestClass::TearDownTestCase,
-        new TestFactoryImpl<TestClass>);
-
-    // Next, recurses (at compile time) with the tail of the type list.
-    return TypeParameterizedTest<Fixture, TestSel, typename Types::Tail>
-        ::Register(prefix, case_name, test_names, index + 1);
-  }
-};
-
-// The base case for the compile time recursion.
-template <GTEST_TEMPLATE_ Fixture, class TestSel>
-class TypeParameterizedTest<Fixture, TestSel, Types0> {
- public:
-  static bool Register(const char* /*prefix*/, const char* /*case_name*/,
-                       const char* /*test_names*/, int /*index*/) {
-    return true;
-  }
-};
-
-// TypeParameterizedTestCase<Fixture, Tests, Types>::Register()
-// registers *all combinations* of 'Tests' and 'Types' with Google
-// Test.  The return value is insignificant - we just need to return
-// something such that we can call this function in a namespace scope.
-template <GTEST_TEMPLATE_ Fixture, typename Tests, typename Types>
-class TypeParameterizedTestCase {
- public:
-  static bool Register(const char* prefix, const char* case_name,
-                       const char* test_names) {
-    typedef typename Tests::Head Head;
-
-    // First, register the first test in 'Test' for each type in 'Types'.
-    TypeParameterizedTest<Fixture, Head, Types>::Register(
-        prefix, case_name, test_names, 0);
-
-    // Next, recurses (at compile time) with the tail of the test list.
-    return TypeParameterizedTestCase<Fixture, typename Tests::Tail, Types>
-        ::Register(prefix, case_name, SkipComma(test_names));
-  }
-};
-
-// The base case for the compile time recursion.
-template <GTEST_TEMPLATE_ Fixture, typename Types>
-class TypeParameterizedTestCase<Fixture, Templates0, Types> {
- public:
-  static bool Register(const char* /*prefix*/, const char* /*case_name*/,
-                       const char* /*test_names*/) {
-    return true;
-  }
-};
-
-#endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
-
-// Returns the current OS stack trace as a String.
-//
-// The maximum number of stack frames to be included is specified by
-// the gtest_stack_trace_depth flag.  The skip_count parameter
-// specifies the number of top frames to be skipped, which doesn't
-// count against the number of frames to be included.
-//
-// For example, if Foo() calls Bar(), which in turn calls
-// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in
-// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't.
-GTEST_API_ String GetCurrentOsStackTraceExceptTop(UnitTest* unit_test,
-                                                  int skip_count);
-
-// Helpers for suppressing warnings on unreachable code or constant
-// condition.
-
-// Always returns true.
-GTEST_API_ bool AlwaysTrue();
-
-// Always returns false.
-inline bool AlwaysFalse() { return !AlwaysTrue(); }
-
-// Helper for suppressing false warning from Clang on a const char*
-// variable declared in a conditional expression always being NULL in
-// the else branch.
-struct GTEST_API_ ConstCharPtr {
-  ConstCharPtr(const char* str) : value(str) {}
-  operator bool() const { return true; }
-  const char* value;
-};
-
-// A simple Linear Congruential Generator for generating random
-// numbers with a uniform distribution.  Unlike rand() and srand(), it
-// doesn't use global state (and therefore can't interfere with user
-// code).  Unlike rand_r(), it's portable.  An LCG isn't very random,
-// but it's good enough for our purposes.
-class GTEST_API_ Random {
- public:
-  static const UInt32 kMaxRange = 1u << 31;
-
-  explicit Random(UInt32 seed) : state_(seed) {}
-
-  void Reseed(UInt32 seed) { state_ = seed; }
-
-  // Generates a random number from [0, range).  Crashes if 'range' is
-  // 0 or greater than kMaxRange.
-  UInt32 Generate(UInt32 range);
-
- private:
-  UInt32 state_;
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(Random);
-};
-
-// Defining a variable of type CompileAssertTypesEqual<T1, T2> will cause a
-// compiler error iff T1 and T2 are different types.
-template <typename T1, typename T2>
-struct CompileAssertTypesEqual;
-
-template <typename T>
-struct CompileAssertTypesEqual<T, T> {
-};
-
-// Removes the reference from a type if it is a reference type,
-// otherwise leaves it unchanged.  This is the same as
-// tr1::remove_reference, which is not widely available yet.
-template <typename T>
-struct RemoveReference { typedef T type; };  // NOLINT
-template <typename T>
-struct RemoveReference<T&> { typedef T type; };  // NOLINT
-
-// A handy wrapper around RemoveReference that works when the argument
-// T depends on template parameters.
-#define GTEST_REMOVE_REFERENCE_(T) \
-    typename ::testing::internal::RemoveReference<T>::type
-
-// Removes const from a type if it is a const type, otherwise leaves
-// it unchanged.  This is the same as tr1::remove_const, which is not
-// widely available yet.
-template <typename T>
-struct RemoveConst { typedef T type; };  // NOLINT
-template <typename T>
-struct RemoveConst<const T> { typedef T type; };  // NOLINT
-
-// MSVC 8.0, Sun C++, and IBM XL C++ have a bug which causes the above
-// definition to fail to remove the const in 'const int[3]' and 'const
-// char[3][4]'.  The following specialization works around the bug.
-// However, it causes trouble with GCC and thus needs to be
-// conditionally compiled.
-#if defined(_MSC_VER) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
-template <typename T, size_t N>
-struct RemoveConst<const T[N]> {
-  typedef typename RemoveConst<T>::type type[N];
-};
-#endif
-
-// A handy wrapper around RemoveConst that works when the argument
-// T depends on template parameters.
-#define GTEST_REMOVE_CONST_(T) \
-    typename ::testing::internal::RemoveConst<T>::type
-
-// Turns const U&, U&, const U, and U all into U.
-#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \
-    GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T))
-
-// Adds reference to a type if it is not a reference type,
-// otherwise leaves it unchanged.  This is the same as
-// tr1::add_reference, which is not widely available yet.
-template <typename T>
-struct AddReference { typedef T& type; };  // NOLINT
-template <typename T>
-struct AddReference<T&> { typedef T& type; };  // NOLINT
-
-// A handy wrapper around AddReference that works when the argument T
-// depends on template parameters.
-#define GTEST_ADD_REFERENCE_(T) \
-    typename ::testing::internal::AddReference<T>::type
-
-// Adds a reference to const on top of T as necessary.  For example,
-// it transforms
-//
-//   char         ==> const char&
-//   const char   ==> const char&
-//   char&        ==> const char&
-//   const char&  ==> const char&
-//
-// The argument T must depend on some template parameters.
-#define GTEST_REFERENCE_TO_CONST_(T) \
-    GTEST_ADD_REFERENCE_(const GTEST_REMOVE_REFERENCE_(T))
-
-// ImplicitlyConvertible<From, To>::value is a compile-time bool
-// constant that's true iff type From can be implicitly converted to
-// type To.
-template <typename From, typename To>
-class ImplicitlyConvertible {
- private:
-  // We need the following helper functions only for their types.
-  // They have no implementations.
-
-  // MakeFrom() is an expression whose type is From.  We cannot simply
-  // use From(), as the type From may not have a public default
-  // constructor.
-  static From MakeFrom();
-
-  // These two functions are overloaded.  Given an expression
-  // Helper(x), the compiler will pick the first version if x can be
-  // implicitly converted to type To; otherwise it will pick the
-  // second version.
-  //
-  // The first version returns a value of size 1, and the second
-  // version returns a value of size 2.  Therefore, by checking the
-  // size of Helper(x), which can be done at compile time, we can tell
-  // which version of Helper() is used, and hence whether x can be
-  // implicitly converted to type To.
-  static char Helper(To);
-  static char (&Helper(...))[2];  // NOLINT
-
-  // We have to put the 'public' section after the 'private' section,
-  // or MSVC refuses to compile the code.
- public:
-  // MSVC warns about implicitly converting from double to int for
-  // possible loss of data, so we need to temporarily disable the
-  // warning.
-#ifdef _MSC_VER
-# pragma warning(push)          // Saves the current warning state.
-# pragma warning(disable:4244)  // Temporarily disables warning 4244.
-
-  static const bool value =
-      sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;
-# pragma warning(pop)           // Restores the warning state.
-#elif defined(__BORLANDC__)
-  // C++Builder cannot use member overload resolution during template
-  // instantiation.  The simplest workaround is to use its C++0x type traits
-  // functions (C++Builder 2009 and above only).
-  static const bool value = __is_convertible(From, To);
-#else
-  static const bool value =
-      sizeof(Helper(ImplicitlyConvertible::MakeFrom())) == 1;
-#endif  // _MSV_VER
-};
-template <typename From, typename To>
-const bool ImplicitlyConvertible<From, To>::value;
-
-// IsAProtocolMessage<T>::value is a compile-time bool constant that's
-// true iff T is type ProtocolMessage, proto2::Message, or a subclass
-// of those.
-template <typename T>
-struct IsAProtocolMessage
-    : public bool_constant<
-  ImplicitlyConvertible<const T*, const ::ProtocolMessage*>::value ||
-  ImplicitlyConvertible<const T*, const ::proto2::Message*>::value> {
-};
-
-// When the compiler sees expression IsContainerTest<C>(0), if C is an
-// STL-style container class, the first overload of IsContainerTest
-// will be viable (since both C::iterator* and C::const_iterator* are
-// valid types and NULL can be implicitly converted to them).  It will
-// be picked over the second overload as 'int' is a perfect match for
-// the type of argument 0.  If C::iterator or C::const_iterator is not
-// a valid type, the first overload is not viable, and the second
-// overload will be picked.  Therefore, we can determine whether C is
-// a container class by checking the type of IsContainerTest<C>(0).
-// The value of the expression is insignificant.
-//
-// Note that we look for both C::iterator and C::const_iterator.  The
-// reason is that C++ injects the name of a class as a member of the
-// class itself (e.g. you can refer to class iterator as either
-// 'iterator' or 'iterator::iterator').  If we look for C::iterator
-// only, for example, we would mistakenly think that a class named
-// iterator is an STL container.
-//
-// Also note that the simpler approach of overloading
-// IsContainerTest(typename C::const_iterator*) and
-// IsContainerTest(...) doesn't work with Visual Age C++ and Sun C++.
-typedef int IsContainer;
-template <class C>
-IsContainer IsContainerTest(int /* dummy */,
-                            typename C::iterator* /* it */ = NULL,
-                            typename C::const_iterator* /* const_it */ = NULL) {
-  return 0;
-}
-
-typedef char IsNotContainer;
-template <class C>
-IsNotContainer IsContainerTest(long /* dummy */) { return '\0'; }
-
-// EnableIf<condition>::type is void when 'Cond' is true, and
-// undefined when 'Cond' is false.  To use SFINAE to make a function
-// overload only apply when a particular expression is true, add
-// "typename EnableIf<expression>::type* = 0" as the last parameter.
-template<bool> struct EnableIf;
-template<> struct EnableIf<true> { typedef void type; };  // NOLINT
-
-// Utilities for native arrays.
-
-// ArrayEq() compares two k-dimensional native arrays using the
-// elements' operator==, where k can be any integer >= 0.  When k is
-// 0, ArrayEq() degenerates into comparing a single pair of values.
-
-template <typename T, typename U>
-bool ArrayEq(const T* lhs, size_t size, const U* rhs);
-
-// This generic version is used when k is 0.
-template <typename T, typename U>
-inline bool ArrayEq(const T& lhs, const U& rhs) { return lhs == rhs; }
-
-// This overload is used when k >= 1.
-template <typename T, typename U, size_t N>
-inline bool ArrayEq(const T(&lhs)[N], const U(&rhs)[N]) {
-  return internal::ArrayEq(lhs, N, rhs);
-}
-
-// This helper reduces code bloat.  If we instead put its logic inside
-// the previous ArrayEq() function, arrays with different sizes would
-// lead to different copies of the template code.
-template <typename T, typename U>
-bool ArrayEq(const T* lhs, size_t size, const U* rhs) {
-  for (size_t i = 0; i != size; i++) {
-    if (!internal::ArrayEq(lhs[i], rhs[i]))
-      return false;
-  }
-  return true;
-}
-
-// Finds the first element in the iterator range [begin, end) that
-// equals elem.  Element may be a native array type itself.
-template <typename Iter, typename Element>
-Iter ArrayAwareFind(Iter begin, Iter end, const Element& elem) {
-  for (Iter it = begin; it != end; ++it) {
-    if (internal::ArrayEq(*it, elem))
-      return it;
-  }
-  return end;
-}
-
-// CopyArray() copies a k-dimensional native array using the elements'
-// operator=, where k can be any integer >= 0.  When k is 0,
-// CopyArray() degenerates into copying a single value.
-
-template <typename T, typename U>
-void CopyArray(const T* from, size_t size, U* to);
-
-// This generic version is used when k is 0.
-template <typename T, typename U>
-inline void CopyArray(const T& from, U* to) { *to = from; }
-
-// This overload is used when k >= 1.
-template <typename T, typename U, size_t N>
-inline void CopyArray(const T(&from)[N], U(*to)[N]) {
-  internal::CopyArray(from, N, *to);
-}
-
-// This helper reduces code bloat.  If we instead put its logic inside
-// the previous CopyArray() function, arrays with different sizes
-// would lead to different copies of the template code.
-template <typename T, typename U>
-void CopyArray(const T* from, size_t size, U* to) {
-  for (size_t i = 0; i != size; i++) {
-    internal::CopyArray(from[i], to + i);
-  }
-}
-
-// The relation between an NativeArray object (see below) and the
-// native array it represents.
-enum RelationToSource {
-  kReference,  // The NativeArray references the native array.
-  kCopy        // The NativeArray makes a copy of the native array and
-               // owns the copy.
-};
-
-// Adapts a native array to a read-only STL-style container.  Instead
-// of the complete STL container concept, this adaptor only implements
-// members useful for Google Mock's container matchers.  New members
-// should be added as needed.  To simplify the implementation, we only
-// support Element being a raw type (i.e. having no top-level const or
-// reference modifier).  It's the client's responsibility to satisfy
-// this requirement.  Element can be an array type itself (hence
-// multi-dimensional arrays are supported).
-template <typename Element>
-class NativeArray {
- public:
-  // STL-style container typedefs.
-  typedef Element value_type;
-  typedef Element* iterator;
-  typedef const Element* const_iterator;
-
-  // Constructs from a native array.
-  NativeArray(const Element* array, size_t count, RelationToSource relation) {
-    Init(array, count, relation);
-  }
-
-  // Copy constructor.
-  NativeArray(const NativeArray& rhs) {
-    Init(rhs.array_, rhs.size_, rhs.relation_to_source_);
-  }
-
-  ~NativeArray() {
-    // Ensures that the user doesn't instantiate NativeArray with a
-    // const or reference type.
-    static_cast<void>(StaticAssertTypeEqHelper<Element,
-        GTEST_REMOVE_REFERENCE_AND_CONST_(Element)>());
-    if (relation_to_source_ == kCopy)
-      delete[] array_;
-  }
-
-  // STL-style container methods.
-  size_t size() const { return size_; }
-  const_iterator begin() const { return array_; }
-  const_iterator end() const { return array_ + size_; }
-  bool operator==(const NativeArray& rhs) const {
-    return size() == rhs.size() &&
-        ArrayEq(begin(), size(), rhs.begin());
-  }
-
- private:
-  // Initializes this object; makes a copy of the input array if
-  // 'relation' is kCopy.
-  void Init(const Element* array, size_t a_size, RelationToSource relation) {
-    if (relation == kReference) {
-      array_ = array;
-    } else {
-      Element* const copy = new Element[a_size];
-      CopyArray(array, a_size, copy);
-      array_ = copy;
-    }
-    size_ = a_size;
-    relation_to_source_ = relation;
-  }
-
-  const Element* array_;
-  size_t size_;
-  RelationToSource relation_to_source_;
-
-  GTEST_DISALLOW_ASSIGN_(NativeArray);
-};
-
-}  // namespace internal
-}  // namespace testing
-
-#define GTEST_MESSAGE_AT_(file, line, message, result_type) \
-  ::testing::internal::AssertHelper(result_type, file, line, message) \
-    = ::testing::Message()
-
-#define GTEST_MESSAGE_(message, result_type) \
-  GTEST_MESSAGE_AT_(__FILE__, __LINE__, message, result_type)
-
-#define GTEST_FATAL_FAILURE_(message) \
-  return GTEST_MESSAGE_(message, ::testing::TestPartResult::kFatalFailure)
-
-#define GTEST_NONFATAL_FAILURE_(message) \
-  GTEST_MESSAGE_(message, ::testing::TestPartResult::kNonFatalFailure)
-
-#define GTEST_SUCCESS_(message) \
-  GTEST_MESSAGE_(message, ::testing::TestPartResult::kSuccess)
-
-// Suppresses MSVC warnings 4072 (unreachable code) for the code following
-// statement if it returns or throws (or doesn't return or throw in some
-// situations).
-#define GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement) \
-  if (::testing::internal::AlwaysTrue()) { statement; }
-
-#define GTEST_TEST_THROW_(statement, expected_exception, fail) \
-  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
-  if (::testing::internal::ConstCharPtr gtest_msg = "") { \
-    bool gtest_caught_expected = false; \
-    try { \
-      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
-    } \
-    catch (expected_exception const&) { \
-      gtest_caught_expected = true; \
-    } \
-    catch (...) { \
-      gtest_msg.value = \
-          "Expected: " #statement " throws an exception of type " \
-          #expected_exception ".\n  Actual: it throws a different type."; \
-      goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
-    } \
-    if (!gtest_caught_expected) { \
-      gtest_msg.value = \
-          "Expected: " #statement " throws an exception of type " \
-          #expected_exception ".\n  Actual: it throws nothing."; \
-      goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
-    } \
-  } else \
-    GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \
-      fail(gtest_msg.value)
-
-#define GTEST_TEST_NO_THROW_(statement, fail) \
-  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
-  if (::testing::internal::AlwaysTrue()) { \
-    try { \
-      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
-    } \
-    catch (...) { \
-      goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
-    } \
-  } else \
-    GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \
-      fail("Expected: " #statement " doesn't throw an exception.\n" \
-           "  Actual: it throws.")
-
-#define GTEST_TEST_ANY_THROW_(statement, fail) \
-  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
-  if (::testing::internal::AlwaysTrue()) { \
-    bool gtest_caught_any = false; \
-    try { \
-      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
-    } \
-    catch (...) { \
-      gtest_caught_any = true; \
-    } \
-    if (!gtest_caught_any) { \
-      goto GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__); \
-    } \
-  } else \
-    GTEST_CONCAT_TOKEN_(gtest_label_testanythrow_, __LINE__): \
-      fail("Expected: " #statement " throws an exception.\n" \
-           "  Actual: it doesn't.")
-
-
-// Implements Boolean test assertions such as EXPECT_TRUE. expression can be
-// either a boolean expression or an AssertionResult. text is a textual
-// represenation of expression as it was passed into the EXPECT_TRUE.
-#define GTEST_TEST_BOOLEAN_(expression, text, actual, expected, fail) \
-  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
-  if (const ::testing::AssertionResult gtest_ar_ = \
-      ::testing::AssertionResult(expression)) \
-    ; \
-  else \
-    fail(::testing::internal::GetBoolAssertionFailureMessage(\
-        gtest_ar_, text, #actual, #expected).c_str())
-
-#define GTEST_TEST_NO_FATAL_FAILURE_(statement, fail) \
-  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
-  if (::testing::internal::AlwaysTrue()) { \
-    ::testing::internal::HasNewFatalFailureHelper gtest_fatal_failure_checker; \
-    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
-    if (gtest_fatal_failure_checker.has_new_fatal_failure()) { \
-      goto GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__); \
-    } \
-  } else \
-    GTEST_CONCAT_TOKEN_(gtest_label_testnofatal_, __LINE__): \
-      fail("Expected: " #statement " doesn't generate new fatal " \
-           "failures in the current thread.\n" \
-           "  Actual: it does.")
-
-// Expands to the name of the class that implements the given test.
-#define GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
-  test_case_name##_##test_name##_Test
-
-// Helper macro for defining tests.
-#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\
-class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\
- public:\
-  GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\
- private:\
-  virtual void TestBody();\
-  static ::testing::TestInfo* const test_info_ GTEST_ATTRIBUTE_UNUSED_;\
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(\
-      GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\
-};\
-\
-::testing::TestInfo* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\
-  ::test_info_ =\
-    ::testing::internal::MakeAndRegisterTestInfo(\
-        #test_case_name, #test_name, NULL, NULL, \
-        (parent_id), \
-        parent_class::SetUpTestCase, \
-        parent_class::TearDownTestCase, \
-        new ::testing::internal::TestFactoryImpl<\
-            GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>);\
-void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_INTERNAL_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-linked_ptr.h b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-linked_ptr.h
deleted file mode 100644
index 57147b4..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-linked_ptr.h
+++ /dev/null
@@ -1,233 +0,0 @@
-// Copyright 2003 Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Authors: Dan Egnor (egnor at google.com)
-//
-// A "smart" pointer type with reference tracking.  Every pointer to a
-// particular object is kept on a circular linked list.  When the last pointer
-// to an object is destroyed or reassigned, the object is deleted.
-//
-// Used properly, this deletes the object when the last reference goes away.
-// There are several caveats:
-// - Like all reference counting schemes, cycles lead to leaks.
-// - Each smart pointer is actually two pointers (8 bytes instead of 4).
-// - Every time a pointer is assigned, the entire list of pointers to that
-//   object is traversed.  This class is therefore NOT SUITABLE when there
-//   will often be more than two or three pointers to a particular object.
-// - References are only tracked as long as linked_ptr<> objects are copied.
-//   If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS
-//   will happen (double deletion).
-//
-// A good use of this class is storing object references in STL containers.
-// You can safely put linked_ptr<> in a vector<>.
-// Other uses may not be as good.
-//
-// Note: If you use an incomplete type with linked_ptr<>, the class
-// *containing* linked_ptr<> must have a constructor and destructor (even
-// if they do nothing!).
-//
-// Bill Gibbons suggested we use something like this.
-//
-// Thread Safety:
-//   Unlike other linked_ptr implementations, in this implementation
-//   a linked_ptr object is thread-safe in the sense that:
-//     - it's safe to copy linked_ptr objects concurrently,
-//     - it's safe to copy *from* a linked_ptr and read its underlying
-//       raw pointer (e.g. via get()) concurrently, and
-//     - it's safe to write to two linked_ptrs that point to the same
-//       shared object concurrently.
-// TODO(wan at google.com): rename this to safe_linked_ptr to avoid
-// confusion with normal linked_ptr.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
-
-#include <stdlib.h>
-#include <assert.h>
-
-#include "gtest/internal/gtest-port.h"
-
-namespace testing {
-namespace internal {
-
-// Protects copying of all linked_ptr objects.
-GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex);
-
-// This is used internally by all instances of linked_ptr<>.  It needs to be
-// a non-template class because different types of linked_ptr<> can refer to
-// the same object (linked_ptr<Superclass>(obj) vs linked_ptr<Subclass>(obj)).
-// So, it needs to be possible for different types of linked_ptr to participate
-// in the same circular linked list, so we need a single class type here.
-//
-// DO NOT USE THIS CLASS DIRECTLY YOURSELF.  Use linked_ptr<T>.
-class linked_ptr_internal {
- public:
-  // Create a new circle that includes only this instance.
-  void join_new() {
-    next_ = this;
-  }
-
-  // Many linked_ptr operations may change p.link_ for some linked_ptr
-  // variable p in the same circle as this object.  Therefore we need
-  // to prevent two such operations from occurring concurrently.
-  //
-  // Note that different types of linked_ptr objects can coexist in a
-  // circle (e.g. linked_ptr<Base>, linked_ptr<Derived1>, and
-  // linked_ptr<Derived2>).  Therefore we must use a single mutex to
-  // protect all linked_ptr objects.  This can create serious
-  // contention in production code, but is acceptable in a testing
-  // framework.
-
-  // Join an existing circle.
-  // L < g_linked_ptr_mutex
-  void join(linked_ptr_internal const* ptr) {
-    MutexLock lock(&g_linked_ptr_mutex);
-
-    linked_ptr_internal const* p = ptr;
-    while (p->next_ != ptr) p = p->next_;
-    p->next_ = this;
-    next_ = ptr;
-  }
-
-  // Leave whatever circle we're part of.  Returns true if we were the
-  // last member of the circle.  Once this is done, you can join() another.
-  // L < g_linked_ptr_mutex
-  bool depart() {
-    MutexLock lock(&g_linked_ptr_mutex);
-
-    if (next_ == this) return true;
-    linked_ptr_internal const* p = next_;
-    while (p->next_ != this) p = p->next_;
-    p->next_ = next_;
-    return false;
-  }
-
- private:
-  mutable linked_ptr_internal const* next_;
-};
-
-template <typename T>
-class linked_ptr {
- public:
-  typedef T element_type;
-
-  // Take over ownership of a raw pointer.  This should happen as soon as
-  // possible after the object is created.
-  explicit linked_ptr(T* ptr = NULL) { capture(ptr); }
-  ~linked_ptr() { depart(); }
-
-  // Copy an existing linked_ptr<>, adding ourselves to the list of references.
-  template <typename U> linked_ptr(linked_ptr<U> const& ptr) { copy(&ptr); }
-  linked_ptr(linked_ptr const& ptr) {  // NOLINT
-    assert(&ptr != this);
-    copy(&ptr);
-  }
-
-  // Assignment releases the old value and acquires the new.
-  template <typename U> linked_ptr& operator=(linked_ptr<U> const& ptr) {
-    depart();
-    copy(&ptr);
-    return *this;
-  }
-
-  linked_ptr& operator=(linked_ptr const& ptr) {
-    if (&ptr != this) {
-      depart();
-      copy(&ptr);
-    }
-    return *this;
-  }
-
-  // Smart pointer members.
-  void reset(T* ptr = NULL) {
-    depart();
-    capture(ptr);
-  }
-  T* get() const { return value_; }
-  T* operator->() const { return value_; }
-  T& operator*() const { return *value_; }
-
-  bool operator==(T* p) const { return value_ == p; }
-  bool operator!=(T* p) const { return value_ != p; }
-  template <typename U>
-  bool operator==(linked_ptr<U> const& ptr) const {
-    return value_ == ptr.get();
-  }
-  template <typename U>
-  bool operator!=(linked_ptr<U> const& ptr) const {
-    return value_ != ptr.get();
-  }
-
- private:
-  template <typename U>
-  friend class linked_ptr;
-
-  T* value_;
-  linked_ptr_internal link_;
-
-  void depart() {
-    if (link_.depart()) delete value_;
-  }
-
-  void capture(T* ptr) {
-    value_ = ptr;
-    link_.join_new();
-  }
-
-  template <typename U> void copy(linked_ptr<U> const* ptr) {
-    value_ = ptr->get();
-    if (value_)
-      link_.join(&ptr->link_);
-    else
-      link_.join_new();
-  }
-};
-
-template<typename T> inline
-bool operator==(T* ptr, const linked_ptr<T>& x) {
-  return ptr == x.get();
-}
-
-template<typename T> inline
-bool operator!=(T* ptr, const linked_ptr<T>& x) {
-  return ptr != x.get();
-}
-
-// A function to convert T* into linked_ptr<T>
-// Doing e.g. make_linked_ptr(new FooBarBaz<type>(arg)) is a shorter notation
-// for linked_ptr<FooBarBaz<type> >(new FooBarBaz<type>(arg))
-template <typename T>
-linked_ptr<T> make_linked_ptr(T* ptr) {
-  return linked_ptr<T>(ptr);
-}
-
-}  // namespace internal
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-param-util-generated.h b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-param-util-generated.h
deleted file mode 100644
index 2582675..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-param-util-generated.h
+++ /dev/null
@@ -1,4822 +0,0 @@
-// This file was GENERATED by command:
-//     pump.py gtest-param-util-generated.h.pump
-// DO NOT EDIT BY HAND!!!
-
-// Copyright 2008 Google Inc.
-// All Rights Reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: vladl at google.com (Vlad Losev)
-
-// Type and function utilities for implementing parameterized tests.
-// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
-//
-// Currently Google Test supports at most 50 arguments in Values,
-// and at most 10 arguments in Combine. Please contact
-// googletestframework at googlegroups.com if you need more.
-// Please note that the number of arguments to Combine is limited
-// by the maximum arity of the implementation of tr1::tuple which is
-// currently set at 10.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
-
-// scripts/fuse_gtest.py depends on gtest's own header being #included
-// *unconditionally*.  Therefore these #includes cannot be moved
-// inside #if GTEST_HAS_PARAM_TEST.
-#include "gtest/internal/gtest-param-util.h"
-#include "gtest/internal/gtest-port.h"
-
-#if GTEST_HAS_PARAM_TEST
-
-namespace testing {
-
-// Forward declarations of ValuesIn(), which is implemented in
-// include/gtest/gtest-param-test.h.
-template <typename ForwardIterator>
-internal::ParamGenerator<
-  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
-ValuesIn(ForwardIterator begin, ForwardIterator end);
-
-template <typename T, size_t N>
-internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
-
-template <class Container>
-internal::ParamGenerator<typename Container::value_type> ValuesIn(
-    const Container& container);
-
-namespace internal {
-
-// Used in the Values() function to provide polymorphic capabilities.
-template <typename T1>
-class ValueArray1 {
- public:
-  explicit ValueArray1(T1 v1) : v1_(v1) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray1& other);
-
-  const T1 v1_;
-};
-
-template <typename T1, typename T2>
-class ValueArray2 {
- public:
-  ValueArray2(T1 v1, T2 v2) : v1_(v1), v2_(v2) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray2& other);
-
-  const T1 v1_;
-  const T2 v2_;
-};
-
-template <typename T1, typename T2, typename T3>
-class ValueArray3 {
- public:
-  ValueArray3(T1 v1, T2 v2, T3 v3) : v1_(v1), v2_(v2), v3_(v3) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray3& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4>
-class ValueArray4 {
- public:
-  ValueArray4(T1 v1, T2 v2, T3 v3, T4 v4) : v1_(v1), v2_(v2), v3_(v3),
-      v4_(v4) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray4& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5>
-class ValueArray5 {
- public:
-  ValueArray5(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) : v1_(v1), v2_(v2), v3_(v3),
-      v4_(v4), v5_(v5) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray5& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6>
-class ValueArray6 {
- public:
-  ValueArray6(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) : v1_(v1), v2_(v2),
-      v3_(v3), v4_(v4), v5_(v5), v6_(v6) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray6& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7>
-class ValueArray7 {
- public:
-  ValueArray7(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) : v1_(v1),
-      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray7& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8>
-class ValueArray8 {
- public:
-  ValueArray8(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7,
-      T8 v8) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray8& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9>
-class ValueArray9 {
- public:
-  ValueArray9(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8,
-      T9 v9) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray9& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10>
-class ValueArray10 {
- public:
-  ValueArray10(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9), v10_(v10) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray10& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11>
-class ValueArray11 {
- public:
-  ValueArray11(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
-      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray11& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12>
-class ValueArray12 {
- public:
-  ValueArray12(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
-      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray12& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13>
-class ValueArray13 {
- public:
-  ValueArray13(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
-      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
-      v12_(v12), v13_(v13) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray13& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14>
-class ValueArray14 {
- public:
-  ValueArray14(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14) : v1_(v1), v2_(v2), v3_(v3),
-      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
-      v11_(v11), v12_(v12), v13_(v13), v14_(v14) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray14& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15>
-class ValueArray15 {
- public:
-  ValueArray15(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15) : v1_(v1), v2_(v2),
-      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
-      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray15& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16>
-class ValueArray16 {
- public:
-  ValueArray16(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16) : v1_(v1),
-      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
-      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
-      v16_(v16) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray16& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17>
-class ValueArray17 {
- public:
-  ValueArray17(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16,
-      T17 v17) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
-      v15_(v15), v16_(v16), v17_(v17) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray17& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18>
-class ValueArray18 {
- public:
-  ValueArray18(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
-      v15_(v15), v16_(v16), v17_(v17), v18_(v18) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray18& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19>
-class ValueArray19 {
- public:
-  ValueArray19(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
-      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
-      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray19& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20>
-class ValueArray20 {
- public:
-  ValueArray20(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
-      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
-      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
-      v19_(v19), v20_(v20) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray20& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21>
-class ValueArray21 {
- public:
-  ValueArray21(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
-      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
-      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
-      v18_(v18), v19_(v19), v20_(v20), v21_(v21) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray21& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22>
-class ValueArray22 {
- public:
-  ValueArray22(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22) : v1_(v1), v2_(v2), v3_(v3),
-      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
-      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
-      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray22& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23>
-class ValueArray23 {
- public:
-  ValueArray23(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23) : v1_(v1), v2_(v2),
-      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
-      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
-      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
-      v23_(v23) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_,
-        v23_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray23& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24>
-class ValueArray24 {
- public:
-  ValueArray24(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24) : v1_(v1),
-      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
-      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
-      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
-      v22_(v22), v23_(v23), v24_(v24) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray24& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25>
-class ValueArray25 {
- public:
-  ValueArray25(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24,
-      T25 v25) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
-      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
-      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray25& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26>
-class ValueArray26 {
- public:
-  ValueArray26(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
-      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
-      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray26& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27>
-class ValueArray27 {
- public:
-  ValueArray27(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
-      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
-      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
-      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
-      v26_(v26), v27_(v27) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray27& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28>
-class ValueArray28 {
- public:
-  ValueArray28(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
-      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
-      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
-      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
-      v25_(v25), v26_(v26), v27_(v27), v28_(v28) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray28& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29>
-class ValueArray29 {
- public:
-  ValueArray29(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
-      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
-      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
-      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
-      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray29& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30>
-class ValueArray30 {
- public:
-  ValueArray30(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30) : v1_(v1), v2_(v2), v3_(v3),
-      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
-      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
-      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
-      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
-      v29_(v29), v30_(v30) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray30& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31>
-class ValueArray31 {
- public:
-  ValueArray31(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31) : v1_(v1), v2_(v2),
-      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
-      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
-      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
-      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
-      v29_(v29), v30_(v30), v31_(v31) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray31& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32>
-class ValueArray32 {
- public:
-  ValueArray32(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32) : v1_(v1),
-      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
-      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
-      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
-      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
-      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray32& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33>
-class ValueArray33 {
- public:
-  ValueArray33(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32,
-      T33 v33) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
-      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
-      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
-      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
-      v33_(v33) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray33& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34>
-class ValueArray34 {
- public:
-  ValueArray34(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
-      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
-      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
-      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
-      v33_(v33), v34_(v34) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray34& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35>
-class ValueArray35 {
- public:
-  ValueArray35(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
-      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
-      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
-      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
-      v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
-      v32_(v32), v33_(v33), v34_(v34), v35_(v35) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_,
-        v35_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray35& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36>
-class ValueArray36 {
- public:
-  ValueArray36(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
-      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
-      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
-      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
-      v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
-      v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray36& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37>
-class ValueArray37 {
- public:
-  ValueArray37(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
-      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
-      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
-      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
-      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
-      v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
-      v36_(v36), v37_(v37) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray37& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38>
-class ValueArray38 {
- public:
-  ValueArray38(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38) : v1_(v1), v2_(v2), v3_(v3),
-      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
-      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
-      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
-      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
-      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
-      v35_(v35), v36_(v36), v37_(v37), v38_(v38) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray38& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39>
-class ValueArray39 {
- public:
-  ValueArray39(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39) : v1_(v1), v2_(v2),
-      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
-      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
-      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
-      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
-      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
-      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray39& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40>
-class ValueArray40 {
- public:
-  ValueArray40(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40) : v1_(v1),
-      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
-      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
-      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
-      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
-      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
-      v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
-      v40_(v40) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_, v40_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray40& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-  const T40 v40_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41>
-class ValueArray41 {
- public:
-  ValueArray41(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40,
-      T41 v41) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
-      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
-      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
-      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
-      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
-      v39_(v39), v40_(v40), v41_(v41) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_, v40_, v41_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray41& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-  const T40 v40_;
-  const T41 v41_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42>
-class ValueArray42 {
- public:
-  ValueArray42(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-      T42 v42) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
-      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
-      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
-      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
-      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
-      v39_(v39), v40_(v40), v41_(v41), v42_(v42) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_, v40_, v41_, v42_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray42& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-  const T40 v40_;
-  const T41 v41_;
-  const T42 v42_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43>
-class ValueArray43 {
- public:
-  ValueArray43(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-      T42 v42, T43 v43) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6),
-      v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13),
-      v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19),
-      v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25),
-      v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31),
-      v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37),
-      v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray43& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-  const T40 v40_;
-  const T41 v41_;
-  const T42 v42_;
-  const T43 v43_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44>
-class ValueArray44 {
- public:
-  ValueArray44(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-      T42 v42, T43 v43, T44 v44) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5),
-      v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12),
-      v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17), v18_(v18),
-      v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23), v24_(v24),
-      v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29), v30_(v30),
-      v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35), v36_(v36),
-      v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41), v42_(v42),
-      v43_(v43), v44_(v44) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray44& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-  const T40 v40_;
-  const T41 v41_;
-  const T42 v42_;
-  const T43 v43_;
-  const T44 v44_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45>
-class ValueArray45 {
- public:
-  ValueArray45(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-      T42 v42, T43 v43, T44 v44, T45 v45) : v1_(v1), v2_(v2), v3_(v3), v4_(v4),
-      v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10), v11_(v11),
-      v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16), v17_(v17),
-      v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22), v23_(v23),
-      v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28), v29_(v29),
-      v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34), v35_(v35),
-      v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40), v41_(v41),
-      v42_(v42), v43_(v43), v44_(v44), v45_(v45) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray45& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-  const T40 v40_;
-  const T41 v41_;
-  const T42 v42_;
-  const T43 v43_;
-  const T44 v44_;
-  const T45 v45_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46>
-class ValueArray46 {
- public:
-  ValueArray46(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46) : v1_(v1), v2_(v2), v3_(v3),
-      v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
-      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
-      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
-      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
-      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
-      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
-      v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray46& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-  const T40 v40_;
-  const T41 v41_;
-  const T42 v42_;
-  const T43 v43_;
-  const T44 v44_;
-  const T45 v45_;
-  const T46 v46_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47>
-class ValueArray47 {
- public:
-  ValueArray47(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47) : v1_(v1), v2_(v2),
-      v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9), v10_(v10),
-      v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15), v16_(v16),
-      v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21), v22_(v22),
-      v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27), v28_(v28),
-      v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33), v34_(v34),
-      v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39), v40_(v40),
-      v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45), v46_(v46),
-      v47_(v47) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_,
-        v47_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray47& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-  const T40 v40_;
-  const T41 v41_;
-  const T42 v42_;
-  const T43 v43_;
-  const T44 v44_;
-  const T45 v45_;
-  const T46 v46_;
-  const T47 v47_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48>
-class ValueArray48 {
- public:
-  ValueArray48(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48) : v1_(v1),
-      v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7), v8_(v8), v9_(v9),
-      v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14), v15_(v15),
-      v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20), v21_(v21),
-      v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26), v27_(v27),
-      v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32), v33_(v33),
-      v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38), v39_(v39),
-      v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44), v45_(v45),
-      v46_(v46), v47_(v47), v48_(v48) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
-        v48_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray48& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-  const T40 v40_;
-  const T41 v41_;
-  const T42 v42_;
-  const T43 v43_;
-  const T44 v44_;
-  const T45 v45_;
-  const T46 v46_;
-  const T47 v47_;
-  const T48 v48_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48, typename T49>
-class ValueArray49 {
- public:
-  ValueArray49(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48,
-      T49 v49) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
-      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
-      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
-      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
-      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
-      v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
-      v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
-        v48_, v49_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray49& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-  const T40 v40_;
-  const T41 v41_;
-  const T42 v42_;
-  const T43 v43_;
-  const T44 v44_;
-  const T45 v45_;
-  const T46 v46_;
-  const T47 v47_;
-  const T48 v48_;
-  const T49 v49_;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48, typename T49, typename T50>
-class ValueArray50 {
- public:
-  ValueArray50(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9,
-      T10 v10, T11 v11, T12 v12, T13 v13, T14 v14, T15 v15, T16 v16, T17 v17,
-      T18 v18, T19 v19, T20 v20, T21 v21, T22 v22, T23 v23, T24 v24, T25 v25,
-      T26 v26, T27 v27, T28 v28, T29 v29, T30 v30, T31 v31, T32 v32, T33 v33,
-      T34 v34, T35 v35, T36 v36, T37 v37, T38 v38, T39 v39, T40 v40, T41 v41,
-      T42 v42, T43 v43, T44 v44, T45 v45, T46 v46, T47 v47, T48 v48, T49 v49,
-      T50 v50) : v1_(v1), v2_(v2), v3_(v3), v4_(v4), v5_(v5), v6_(v6), v7_(v7),
-      v8_(v8), v9_(v9), v10_(v10), v11_(v11), v12_(v12), v13_(v13), v14_(v14),
-      v15_(v15), v16_(v16), v17_(v17), v18_(v18), v19_(v19), v20_(v20),
-      v21_(v21), v22_(v22), v23_(v23), v24_(v24), v25_(v25), v26_(v26),
-      v27_(v27), v28_(v28), v29_(v29), v30_(v30), v31_(v31), v32_(v32),
-      v33_(v33), v34_(v34), v35_(v35), v36_(v36), v37_(v37), v38_(v38),
-      v39_(v39), v40_(v40), v41_(v41), v42_(v42), v43_(v43), v44_(v44),
-      v45_(v45), v46_(v46), v47_(v47), v48_(v48), v49_(v49), v50_(v50) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {v1_, v2_, v3_, v4_, v5_, v6_, v7_, v8_, v9_, v10_, v11_,
-        v12_, v13_, v14_, v15_, v16_, v17_, v18_, v19_, v20_, v21_, v22_, v23_,
-        v24_, v25_, v26_, v27_, v28_, v29_, v30_, v31_, v32_, v33_, v34_, v35_,
-        v36_, v37_, v38_, v39_, v40_, v41_, v42_, v43_, v44_, v45_, v46_, v47_,
-        v48_, v49_, v50_};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray50& other);
-
-  const T1 v1_;
-  const T2 v2_;
-  const T3 v3_;
-  const T4 v4_;
-  const T5 v5_;
-  const T6 v6_;
-  const T7 v7_;
-  const T8 v8_;
-  const T9 v9_;
-  const T10 v10_;
-  const T11 v11_;
-  const T12 v12_;
-  const T13 v13_;
-  const T14 v14_;
-  const T15 v15_;
-  const T16 v16_;
-  const T17 v17_;
-  const T18 v18_;
-  const T19 v19_;
-  const T20 v20_;
-  const T21 v21_;
-  const T22 v22_;
-  const T23 v23_;
-  const T24 v24_;
-  const T25 v25_;
-  const T26 v26_;
-  const T27 v27_;
-  const T28 v28_;
-  const T29 v29_;
-  const T30 v30_;
-  const T31 v31_;
-  const T32 v32_;
-  const T33 v33_;
-  const T34 v34_;
-  const T35 v35_;
-  const T36 v36_;
-  const T37 v37_;
-  const T38 v38_;
-  const T39 v39_;
-  const T40 v40_;
-  const T41 v41_;
-  const T42 v42_;
-  const T43 v43_;
-  const T44 v44_;
-  const T45 v45_;
-  const T46 v46_;
-  const T47 v47_;
-  const T48 v48_;
-  const T49 v49_;
-  const T50 v50_;
-};
-
-# if GTEST_HAS_COMBINE
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// Generates values from the Cartesian product of values produced
-// by the argument generators.
-//
-template <typename T1, typename T2>
-class CartesianProductGenerator2
-    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2> > {
- public:
-  typedef ::std::tr1::tuple<T1, T2> ParamType;
-
-  CartesianProductGenerator2(const ParamGenerator<T1>& g1,
-      const ParamGenerator<T2>& g2)
-      : g1_(g1), g2_(g2) {}
-  virtual ~CartesianProductGenerator2() {}
-
-  virtual ParamIteratorInterface<ParamType>* Begin() const {
-    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin());
-  }
-  virtual ParamIteratorInterface<ParamType>* End() const {
-    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end());
-  }
-
- private:
-  class Iterator : public ParamIteratorInterface<ParamType> {
-   public:
-    Iterator(const ParamGeneratorInterface<ParamType>* base,
-      const ParamGenerator<T1>& g1,
-      const typename ParamGenerator<T1>::iterator& current1,
-      const ParamGenerator<T2>& g2,
-      const typename ParamGenerator<T2>::iterator& current2)
-        : base_(base),
-          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
-          begin2_(g2.begin()), end2_(g2.end()), current2_(current2)    {
-      ComputeCurrentValue();
-    }
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
-      return base_;
-    }
-    // Advance should not be called on beyond-of-range iterators
-    // so no component iterators must be beyond end of range, either.
-    virtual void Advance() {
-      assert(!AtEnd());
-      ++current2_;
-      if (current2_ == end2_) {
-        current2_ = begin2_;
-        ++current1_;
-      }
-      ComputeCurrentValue();
-    }
-    virtual ParamIteratorInterface<ParamType>* Clone() const {
-      return new Iterator(*this);
-    }
-    virtual const ParamType* Current() const { return &current_value_; }
-    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      const Iterator* typed_other =
-          CheckedDowncastToActualType<const Iterator>(&other);
-      // We must report iterators equal if they both point beyond their
-      // respective ranges. That can happen in a variety of fashions,
-      // so we have to consult AtEnd().
-      return (AtEnd() && typed_other->AtEnd()) ||
-         (
-          current1_ == typed_other->current1_ &&
-          current2_ == typed_other->current2_);
-    }
-
-   private:
-    Iterator(const Iterator& other)
-        : base_(other.base_),
-        begin1_(other.begin1_),
-        end1_(other.end1_),
-        current1_(other.current1_),
-        begin2_(other.begin2_),
-        end2_(other.end2_),
-        current2_(other.current2_) {
-      ComputeCurrentValue();
-    }
-
-    void ComputeCurrentValue() {
-      if (!AtEnd())
-        current_value_ = ParamType(*current1_, *current2_);
-    }
-    bool AtEnd() const {
-      // We must report iterator past the end of the range when either of the
-      // component iterators has reached the end of its range.
-      return
-          current1_ == end1_ ||
-          current2_ == end2_;
-    }
-
-    // No implementation - assignment is unsupported.
-    void operator=(const Iterator& other);
-
-    const ParamGeneratorInterface<ParamType>* const base_;
-    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
-    // current[i]_ is the actual traversing iterator.
-    const typename ParamGenerator<T1>::iterator begin1_;
-    const typename ParamGenerator<T1>::iterator end1_;
-    typename ParamGenerator<T1>::iterator current1_;
-    const typename ParamGenerator<T2>::iterator begin2_;
-    const typename ParamGenerator<T2>::iterator end2_;
-    typename ParamGenerator<T2>::iterator current2_;
-    ParamType current_value_;
-  };  // class CartesianProductGenerator2::Iterator
-
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductGenerator2& other);
-
-  const ParamGenerator<T1> g1_;
-  const ParamGenerator<T2> g2_;
-};  // class CartesianProductGenerator2
-
-
-template <typename T1, typename T2, typename T3>
-class CartesianProductGenerator3
-    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3> > {
- public:
-  typedef ::std::tr1::tuple<T1, T2, T3> ParamType;
-
-  CartesianProductGenerator3(const ParamGenerator<T1>& g1,
-      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3)
-      : g1_(g1), g2_(g2), g3_(g3) {}
-  virtual ~CartesianProductGenerator3() {}
-
-  virtual ParamIteratorInterface<ParamType>* Begin() const {
-    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
-        g3_.begin());
-  }
-  virtual ParamIteratorInterface<ParamType>* End() const {
-    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end());
-  }
-
- private:
-  class Iterator : public ParamIteratorInterface<ParamType> {
-   public:
-    Iterator(const ParamGeneratorInterface<ParamType>* base,
-      const ParamGenerator<T1>& g1,
-      const typename ParamGenerator<T1>::iterator& current1,
-      const ParamGenerator<T2>& g2,
-      const typename ParamGenerator<T2>::iterator& current2,
-      const ParamGenerator<T3>& g3,
-      const typename ParamGenerator<T3>::iterator& current3)
-        : base_(base),
-          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
-          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
-          begin3_(g3.begin()), end3_(g3.end()), current3_(current3)    {
-      ComputeCurrentValue();
-    }
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
-      return base_;
-    }
-    // Advance should not be called on beyond-of-range iterators
-    // so no component iterators must be beyond end of range, either.
-    virtual void Advance() {
-      assert(!AtEnd());
-      ++current3_;
-      if (current3_ == end3_) {
-        current3_ = begin3_;
-        ++current2_;
-      }
-      if (current2_ == end2_) {
-        current2_ = begin2_;
-        ++current1_;
-      }
-      ComputeCurrentValue();
-    }
-    virtual ParamIteratorInterface<ParamType>* Clone() const {
-      return new Iterator(*this);
-    }
-    virtual const ParamType* Current() const { return &current_value_; }
-    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      const Iterator* typed_other =
-          CheckedDowncastToActualType<const Iterator>(&other);
-      // We must report iterators equal if they both point beyond their
-      // respective ranges. That can happen in a variety of fashions,
-      // so we have to consult AtEnd().
-      return (AtEnd() && typed_other->AtEnd()) ||
-         (
-          current1_ == typed_other->current1_ &&
-          current2_ == typed_other->current2_ &&
-          current3_ == typed_other->current3_);
-    }
-
-   private:
-    Iterator(const Iterator& other)
-        : base_(other.base_),
-        begin1_(other.begin1_),
-        end1_(other.end1_),
-        current1_(other.current1_),
-        begin2_(other.begin2_),
-        end2_(other.end2_),
-        current2_(other.current2_),
-        begin3_(other.begin3_),
-        end3_(other.end3_),
-        current3_(other.current3_) {
-      ComputeCurrentValue();
-    }
-
-    void ComputeCurrentValue() {
-      if (!AtEnd())
-        current_value_ = ParamType(*current1_, *current2_, *current3_);
-    }
-    bool AtEnd() const {
-      // We must report iterator past the end of the range when either of the
-      // component iterators has reached the end of its range.
-      return
-          current1_ == end1_ ||
-          current2_ == end2_ ||
-          current3_ == end3_;
-    }
-
-    // No implementation - assignment is unsupported.
-    void operator=(const Iterator& other);
-
-    const ParamGeneratorInterface<ParamType>* const base_;
-    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
-    // current[i]_ is the actual traversing iterator.
-    const typename ParamGenerator<T1>::iterator begin1_;
-    const typename ParamGenerator<T1>::iterator end1_;
-    typename ParamGenerator<T1>::iterator current1_;
-    const typename ParamGenerator<T2>::iterator begin2_;
-    const typename ParamGenerator<T2>::iterator end2_;
-    typename ParamGenerator<T2>::iterator current2_;
-    const typename ParamGenerator<T3>::iterator begin3_;
-    const typename ParamGenerator<T3>::iterator end3_;
-    typename ParamGenerator<T3>::iterator current3_;
-    ParamType current_value_;
-  };  // class CartesianProductGenerator3::Iterator
-
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductGenerator3& other);
-
-  const ParamGenerator<T1> g1_;
-  const ParamGenerator<T2> g2_;
-  const ParamGenerator<T3> g3_;
-};  // class CartesianProductGenerator3
-
-
-template <typename T1, typename T2, typename T3, typename T4>
-class CartesianProductGenerator4
-    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4> > {
- public:
-  typedef ::std::tr1::tuple<T1, T2, T3, T4> ParamType;
-
-  CartesianProductGenerator4(const ParamGenerator<T1>& g1,
-      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
-      const ParamGenerator<T4>& g4)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
-  virtual ~CartesianProductGenerator4() {}
-
-  virtual ParamIteratorInterface<ParamType>* Begin() const {
-    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
-        g3_.begin(), g4_, g4_.begin());
-  }
-  virtual ParamIteratorInterface<ParamType>* End() const {
-    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
-        g4_, g4_.end());
-  }
-
- private:
-  class Iterator : public ParamIteratorInterface<ParamType> {
-   public:
-    Iterator(const ParamGeneratorInterface<ParamType>* base,
-      const ParamGenerator<T1>& g1,
-      const typename ParamGenerator<T1>::iterator& current1,
-      const ParamGenerator<T2>& g2,
-      const typename ParamGenerator<T2>::iterator& current2,
-      const ParamGenerator<T3>& g3,
-      const typename ParamGenerator<T3>::iterator& current3,
-      const ParamGenerator<T4>& g4,
-      const typename ParamGenerator<T4>::iterator& current4)
-        : base_(base),
-          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
-          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
-          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
-          begin4_(g4.begin()), end4_(g4.end()), current4_(current4)    {
-      ComputeCurrentValue();
-    }
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
-      return base_;
-    }
-    // Advance should not be called on beyond-of-range iterators
-    // so no component iterators must be beyond end of range, either.
-    virtual void Advance() {
-      assert(!AtEnd());
-      ++current4_;
-      if (current4_ == end4_) {
-        current4_ = begin4_;
-        ++current3_;
-      }
-      if (current3_ == end3_) {
-        current3_ = begin3_;
-        ++current2_;
-      }
-      if (current2_ == end2_) {
-        current2_ = begin2_;
-        ++current1_;
-      }
-      ComputeCurrentValue();
-    }
-    virtual ParamIteratorInterface<ParamType>* Clone() const {
-      return new Iterator(*this);
-    }
-    virtual const ParamType* Current() const { return &current_value_; }
-    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      const Iterator* typed_other =
-          CheckedDowncastToActualType<const Iterator>(&other);
-      // We must report iterators equal if they both point beyond their
-      // respective ranges. That can happen in a variety of fashions,
-      // so we have to consult AtEnd().
-      return (AtEnd() && typed_other->AtEnd()) ||
-         (
-          current1_ == typed_other->current1_ &&
-          current2_ == typed_other->current2_ &&
-          current3_ == typed_other->current3_ &&
-          current4_ == typed_other->current4_);
-    }
-
-   private:
-    Iterator(const Iterator& other)
-        : base_(other.base_),
-        begin1_(other.begin1_),
-        end1_(other.end1_),
-        current1_(other.current1_),
-        begin2_(other.begin2_),
-        end2_(other.end2_),
-        current2_(other.current2_),
-        begin3_(other.begin3_),
-        end3_(other.end3_),
-        current3_(other.current3_),
-        begin4_(other.begin4_),
-        end4_(other.end4_),
-        current4_(other.current4_) {
-      ComputeCurrentValue();
-    }
-
-    void ComputeCurrentValue() {
-      if (!AtEnd())
-        current_value_ = ParamType(*current1_, *current2_, *current3_,
-            *current4_);
-    }
-    bool AtEnd() const {
-      // We must report iterator past the end of the range when either of the
-      // component iterators has reached the end of its range.
-      return
-          current1_ == end1_ ||
-          current2_ == end2_ ||
-          current3_ == end3_ ||
-          current4_ == end4_;
-    }
-
-    // No implementation - assignment is unsupported.
-    void operator=(const Iterator& other);
-
-    const ParamGeneratorInterface<ParamType>* const base_;
-    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
-    // current[i]_ is the actual traversing iterator.
-    const typename ParamGenerator<T1>::iterator begin1_;
-    const typename ParamGenerator<T1>::iterator end1_;
-    typename ParamGenerator<T1>::iterator current1_;
-    const typename ParamGenerator<T2>::iterator begin2_;
-    const typename ParamGenerator<T2>::iterator end2_;
-    typename ParamGenerator<T2>::iterator current2_;
-    const typename ParamGenerator<T3>::iterator begin3_;
-    const typename ParamGenerator<T3>::iterator end3_;
-    typename ParamGenerator<T3>::iterator current3_;
-    const typename ParamGenerator<T4>::iterator begin4_;
-    const typename ParamGenerator<T4>::iterator end4_;
-    typename ParamGenerator<T4>::iterator current4_;
-    ParamType current_value_;
-  };  // class CartesianProductGenerator4::Iterator
-
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductGenerator4& other);
-
-  const ParamGenerator<T1> g1_;
-  const ParamGenerator<T2> g2_;
-  const ParamGenerator<T3> g3_;
-  const ParamGenerator<T4> g4_;
-};  // class CartesianProductGenerator4
-
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5>
-class CartesianProductGenerator5
-    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5> > {
- public:
-  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5> ParamType;
-
-  CartesianProductGenerator5(const ParamGenerator<T1>& g1,
-      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
-      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
-  virtual ~CartesianProductGenerator5() {}
-
-  virtual ParamIteratorInterface<ParamType>* Begin() const {
-    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
-        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin());
-  }
-  virtual ParamIteratorInterface<ParamType>* End() const {
-    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
-        g4_, g4_.end(), g5_, g5_.end());
-  }
-
- private:
-  class Iterator : public ParamIteratorInterface<ParamType> {
-   public:
-    Iterator(const ParamGeneratorInterface<ParamType>* base,
-      const ParamGenerator<T1>& g1,
-      const typename ParamGenerator<T1>::iterator& current1,
-      const ParamGenerator<T2>& g2,
-      const typename ParamGenerator<T2>::iterator& current2,
-      const ParamGenerator<T3>& g3,
-      const typename ParamGenerator<T3>::iterator& current3,
-      const ParamGenerator<T4>& g4,
-      const typename ParamGenerator<T4>::iterator& current4,
-      const ParamGenerator<T5>& g5,
-      const typename ParamGenerator<T5>::iterator& current5)
-        : base_(base),
-          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
-          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
-          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
-          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
-          begin5_(g5.begin()), end5_(g5.end()), current5_(current5)    {
-      ComputeCurrentValue();
-    }
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
-      return base_;
-    }
-    // Advance should not be called on beyond-of-range iterators
-    // so no component iterators must be beyond end of range, either.
-    virtual void Advance() {
-      assert(!AtEnd());
-      ++current5_;
-      if (current5_ == end5_) {
-        current5_ = begin5_;
-        ++current4_;
-      }
-      if (current4_ == end4_) {
-        current4_ = begin4_;
-        ++current3_;
-      }
-      if (current3_ == end3_) {
-        current3_ = begin3_;
-        ++current2_;
-      }
-      if (current2_ == end2_) {
-        current2_ = begin2_;
-        ++current1_;
-      }
-      ComputeCurrentValue();
-    }
-    virtual ParamIteratorInterface<ParamType>* Clone() const {
-      return new Iterator(*this);
-    }
-    virtual const ParamType* Current() const { return &current_value_; }
-    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      const Iterator* typed_other =
-          CheckedDowncastToActualType<const Iterator>(&other);
-      // We must report iterators equal if they both point beyond their
-      // respective ranges. That can happen in a variety of fashions,
-      // so we have to consult AtEnd().
-      return (AtEnd() && typed_other->AtEnd()) ||
-         (
-          current1_ == typed_other->current1_ &&
-          current2_ == typed_other->current2_ &&
-          current3_ == typed_other->current3_ &&
-          current4_ == typed_other->current4_ &&
-          current5_ == typed_other->current5_);
-    }
-
-   private:
-    Iterator(const Iterator& other)
-        : base_(other.base_),
-        begin1_(other.begin1_),
-        end1_(other.end1_),
-        current1_(other.current1_),
-        begin2_(other.begin2_),
-        end2_(other.end2_),
-        current2_(other.current2_),
-        begin3_(other.begin3_),
-        end3_(other.end3_),
-        current3_(other.current3_),
-        begin4_(other.begin4_),
-        end4_(other.end4_),
-        current4_(other.current4_),
-        begin5_(other.begin5_),
-        end5_(other.end5_),
-        current5_(other.current5_) {
-      ComputeCurrentValue();
-    }
-
-    void ComputeCurrentValue() {
-      if (!AtEnd())
-        current_value_ = ParamType(*current1_, *current2_, *current3_,
-            *current4_, *current5_);
-    }
-    bool AtEnd() const {
-      // We must report iterator past the end of the range when either of the
-      // component iterators has reached the end of its range.
-      return
-          current1_ == end1_ ||
-          current2_ == end2_ ||
-          current3_ == end3_ ||
-          current4_ == end4_ ||
-          current5_ == end5_;
-    }
-
-    // No implementation - assignment is unsupported.
-    void operator=(const Iterator& other);
-
-    const ParamGeneratorInterface<ParamType>* const base_;
-    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
-    // current[i]_ is the actual traversing iterator.
-    const typename ParamGenerator<T1>::iterator begin1_;
-    const typename ParamGenerator<T1>::iterator end1_;
-    typename ParamGenerator<T1>::iterator current1_;
-    const typename ParamGenerator<T2>::iterator begin2_;
-    const typename ParamGenerator<T2>::iterator end2_;
-    typename ParamGenerator<T2>::iterator current2_;
-    const typename ParamGenerator<T3>::iterator begin3_;
-    const typename ParamGenerator<T3>::iterator end3_;
-    typename ParamGenerator<T3>::iterator current3_;
-    const typename ParamGenerator<T4>::iterator begin4_;
-    const typename ParamGenerator<T4>::iterator end4_;
-    typename ParamGenerator<T4>::iterator current4_;
-    const typename ParamGenerator<T5>::iterator begin5_;
-    const typename ParamGenerator<T5>::iterator end5_;
-    typename ParamGenerator<T5>::iterator current5_;
-    ParamType current_value_;
-  };  // class CartesianProductGenerator5::Iterator
-
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductGenerator5& other);
-
-  const ParamGenerator<T1> g1_;
-  const ParamGenerator<T2> g2_;
-  const ParamGenerator<T3> g3_;
-  const ParamGenerator<T4> g4_;
-  const ParamGenerator<T5> g5_;
-};  // class CartesianProductGenerator5
-
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6>
-class CartesianProductGenerator6
-    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5,
-        T6> > {
- public:
-  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> ParamType;
-
-  CartesianProductGenerator6(const ParamGenerator<T1>& g1,
-      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
-      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
-      const ParamGenerator<T6>& g6)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
-  virtual ~CartesianProductGenerator6() {}
-
-  virtual ParamIteratorInterface<ParamType>* Begin() const {
-    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
-        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin());
-  }
-  virtual ParamIteratorInterface<ParamType>* End() const {
-    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
-        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end());
-  }
-
- private:
-  class Iterator : public ParamIteratorInterface<ParamType> {
-   public:
-    Iterator(const ParamGeneratorInterface<ParamType>* base,
-      const ParamGenerator<T1>& g1,
-      const typename ParamGenerator<T1>::iterator& current1,
-      const ParamGenerator<T2>& g2,
-      const typename ParamGenerator<T2>::iterator& current2,
-      const ParamGenerator<T3>& g3,
-      const typename ParamGenerator<T3>::iterator& current3,
-      const ParamGenerator<T4>& g4,
-      const typename ParamGenerator<T4>::iterator& current4,
-      const ParamGenerator<T5>& g5,
-      const typename ParamGenerator<T5>::iterator& current5,
-      const ParamGenerator<T6>& g6,
-      const typename ParamGenerator<T6>::iterator& current6)
-        : base_(base),
-          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
-          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
-          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
-          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
-          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
-          begin6_(g6.begin()), end6_(g6.end()), current6_(current6)    {
-      ComputeCurrentValue();
-    }
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
-      return base_;
-    }
-    // Advance should not be called on beyond-of-range iterators
-    // so no component iterators must be beyond end of range, either.
-    virtual void Advance() {
-      assert(!AtEnd());
-      ++current6_;
-      if (current6_ == end6_) {
-        current6_ = begin6_;
-        ++current5_;
-      }
-      if (current5_ == end5_) {
-        current5_ = begin5_;
-        ++current4_;
-      }
-      if (current4_ == end4_) {
-        current4_ = begin4_;
-        ++current3_;
-      }
-      if (current3_ == end3_) {
-        current3_ = begin3_;
-        ++current2_;
-      }
-      if (current2_ == end2_) {
-        current2_ = begin2_;
-        ++current1_;
-      }
-      ComputeCurrentValue();
-    }
-    virtual ParamIteratorInterface<ParamType>* Clone() const {
-      return new Iterator(*this);
-    }
-    virtual const ParamType* Current() const { return &current_value_; }
-    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      const Iterator* typed_other =
-          CheckedDowncastToActualType<const Iterator>(&other);
-      // We must report iterators equal if they both point beyond their
-      // respective ranges. That can happen in a variety of fashions,
-      // so we have to consult AtEnd().
-      return (AtEnd() && typed_other->AtEnd()) ||
-         (
-          current1_ == typed_other->current1_ &&
-          current2_ == typed_other->current2_ &&
-          current3_ == typed_other->current3_ &&
-          current4_ == typed_other->current4_ &&
-          current5_ == typed_other->current5_ &&
-          current6_ == typed_other->current6_);
-    }
-
-   private:
-    Iterator(const Iterator& other)
-        : base_(other.base_),
-        begin1_(other.begin1_),
-        end1_(other.end1_),
-        current1_(other.current1_),
-        begin2_(other.begin2_),
-        end2_(other.end2_),
-        current2_(other.current2_),
-        begin3_(other.begin3_),
-        end3_(other.end3_),
-        current3_(other.current3_),
-        begin4_(other.begin4_),
-        end4_(other.end4_),
-        current4_(other.current4_),
-        begin5_(other.begin5_),
-        end5_(other.end5_),
-        current5_(other.current5_),
-        begin6_(other.begin6_),
-        end6_(other.end6_),
-        current6_(other.current6_) {
-      ComputeCurrentValue();
-    }
-
-    void ComputeCurrentValue() {
-      if (!AtEnd())
-        current_value_ = ParamType(*current1_, *current2_, *current3_,
-            *current4_, *current5_, *current6_);
-    }
-    bool AtEnd() const {
-      // We must report iterator past the end of the range when either of the
-      // component iterators has reached the end of its range.
-      return
-          current1_ == end1_ ||
-          current2_ == end2_ ||
-          current3_ == end3_ ||
-          current4_ == end4_ ||
-          current5_ == end5_ ||
-          current6_ == end6_;
-    }
-
-    // No implementation - assignment is unsupported.
-    void operator=(const Iterator& other);
-
-    const ParamGeneratorInterface<ParamType>* const base_;
-    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
-    // current[i]_ is the actual traversing iterator.
-    const typename ParamGenerator<T1>::iterator begin1_;
-    const typename ParamGenerator<T1>::iterator end1_;
-    typename ParamGenerator<T1>::iterator current1_;
-    const typename ParamGenerator<T2>::iterator begin2_;
-    const typename ParamGenerator<T2>::iterator end2_;
-    typename ParamGenerator<T2>::iterator current2_;
-    const typename ParamGenerator<T3>::iterator begin3_;
-    const typename ParamGenerator<T3>::iterator end3_;
-    typename ParamGenerator<T3>::iterator current3_;
-    const typename ParamGenerator<T4>::iterator begin4_;
-    const typename ParamGenerator<T4>::iterator end4_;
-    typename ParamGenerator<T4>::iterator current4_;
-    const typename ParamGenerator<T5>::iterator begin5_;
-    const typename ParamGenerator<T5>::iterator end5_;
-    typename ParamGenerator<T5>::iterator current5_;
-    const typename ParamGenerator<T6>::iterator begin6_;
-    const typename ParamGenerator<T6>::iterator end6_;
-    typename ParamGenerator<T6>::iterator current6_;
-    ParamType current_value_;
-  };  // class CartesianProductGenerator6::Iterator
-
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductGenerator6& other);
-
-  const ParamGenerator<T1> g1_;
-  const ParamGenerator<T2> g2_;
-  const ParamGenerator<T3> g3_;
-  const ParamGenerator<T4> g4_;
-  const ParamGenerator<T5> g5_;
-  const ParamGenerator<T6> g6_;
-};  // class CartesianProductGenerator6
-
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7>
-class CartesianProductGenerator7
-    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
-        T7> > {
- public:
-  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> ParamType;
-
-  CartesianProductGenerator7(const ParamGenerator<T1>& g1,
-      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
-      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
-      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
-  virtual ~CartesianProductGenerator7() {}
-
-  virtual ParamIteratorInterface<ParamType>* Begin() const {
-    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
-        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
-        g7_.begin());
-  }
-  virtual ParamIteratorInterface<ParamType>* End() const {
-    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
-        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end());
-  }
-
- private:
-  class Iterator : public ParamIteratorInterface<ParamType> {
-   public:
-    Iterator(const ParamGeneratorInterface<ParamType>* base,
-      const ParamGenerator<T1>& g1,
-      const typename ParamGenerator<T1>::iterator& current1,
-      const ParamGenerator<T2>& g2,
-      const typename ParamGenerator<T2>::iterator& current2,
-      const ParamGenerator<T3>& g3,
-      const typename ParamGenerator<T3>::iterator& current3,
-      const ParamGenerator<T4>& g4,
-      const typename ParamGenerator<T4>::iterator& current4,
-      const ParamGenerator<T5>& g5,
-      const typename ParamGenerator<T5>::iterator& current5,
-      const ParamGenerator<T6>& g6,
-      const typename ParamGenerator<T6>::iterator& current6,
-      const ParamGenerator<T7>& g7,
-      const typename ParamGenerator<T7>::iterator& current7)
-        : base_(base),
-          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
-          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
-          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
-          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
-          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
-          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
-          begin7_(g7.begin()), end7_(g7.end()), current7_(current7)    {
-      ComputeCurrentValue();
-    }
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
-      return base_;
-    }
-    // Advance should not be called on beyond-of-range iterators
-    // so no component iterators must be beyond end of range, either.
-    virtual void Advance() {
-      assert(!AtEnd());
-      ++current7_;
-      if (current7_ == end7_) {
-        current7_ = begin7_;
-        ++current6_;
-      }
-      if (current6_ == end6_) {
-        current6_ = begin6_;
-        ++current5_;
-      }
-      if (current5_ == end5_) {
-        current5_ = begin5_;
-        ++current4_;
-      }
-      if (current4_ == end4_) {
-        current4_ = begin4_;
-        ++current3_;
-      }
-      if (current3_ == end3_) {
-        current3_ = begin3_;
-        ++current2_;
-      }
-      if (current2_ == end2_) {
-        current2_ = begin2_;
-        ++current1_;
-      }
-      ComputeCurrentValue();
-    }
-    virtual ParamIteratorInterface<ParamType>* Clone() const {
-      return new Iterator(*this);
-    }
-    virtual const ParamType* Current() const { return &current_value_; }
-    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      const Iterator* typed_other =
-          CheckedDowncastToActualType<const Iterator>(&other);
-      // We must report iterators equal if they both point beyond their
-      // respective ranges. That can happen in a variety of fashions,
-      // so we have to consult AtEnd().
-      return (AtEnd() && typed_other->AtEnd()) ||
-         (
-          current1_ == typed_other->current1_ &&
-          current2_ == typed_other->current2_ &&
-          current3_ == typed_other->current3_ &&
-          current4_ == typed_other->current4_ &&
-          current5_ == typed_other->current5_ &&
-          current6_ == typed_other->current6_ &&
-          current7_ == typed_other->current7_);
-    }
-
-   private:
-    Iterator(const Iterator& other)
-        : base_(other.base_),
-        begin1_(other.begin1_),
-        end1_(other.end1_),
-        current1_(other.current1_),
-        begin2_(other.begin2_),
-        end2_(other.end2_),
-        current2_(other.current2_),
-        begin3_(other.begin3_),
-        end3_(other.end3_),
-        current3_(other.current3_),
-        begin4_(other.begin4_),
-        end4_(other.end4_),
-        current4_(other.current4_),
-        begin5_(other.begin5_),
-        end5_(other.end5_),
-        current5_(other.current5_),
-        begin6_(other.begin6_),
-        end6_(other.end6_),
-        current6_(other.current6_),
-        begin7_(other.begin7_),
-        end7_(other.end7_),
-        current7_(other.current7_) {
-      ComputeCurrentValue();
-    }
-
-    void ComputeCurrentValue() {
-      if (!AtEnd())
-        current_value_ = ParamType(*current1_, *current2_, *current3_,
-            *current4_, *current5_, *current6_, *current7_);
-    }
-    bool AtEnd() const {
-      // We must report iterator past the end of the range when either of the
-      // component iterators has reached the end of its range.
-      return
-          current1_ == end1_ ||
-          current2_ == end2_ ||
-          current3_ == end3_ ||
-          current4_ == end4_ ||
-          current5_ == end5_ ||
-          current6_ == end6_ ||
-          current7_ == end7_;
-    }
-
-    // No implementation - assignment is unsupported.
-    void operator=(const Iterator& other);
-
-    const ParamGeneratorInterface<ParamType>* const base_;
-    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
-    // current[i]_ is the actual traversing iterator.
-    const typename ParamGenerator<T1>::iterator begin1_;
-    const typename ParamGenerator<T1>::iterator end1_;
-    typename ParamGenerator<T1>::iterator current1_;
-    const typename ParamGenerator<T2>::iterator begin2_;
-    const typename ParamGenerator<T2>::iterator end2_;
-    typename ParamGenerator<T2>::iterator current2_;
-    const typename ParamGenerator<T3>::iterator begin3_;
-    const typename ParamGenerator<T3>::iterator end3_;
-    typename ParamGenerator<T3>::iterator current3_;
-    const typename ParamGenerator<T4>::iterator begin4_;
-    const typename ParamGenerator<T4>::iterator end4_;
-    typename ParamGenerator<T4>::iterator current4_;
-    const typename ParamGenerator<T5>::iterator begin5_;
-    const typename ParamGenerator<T5>::iterator end5_;
-    typename ParamGenerator<T5>::iterator current5_;
-    const typename ParamGenerator<T6>::iterator begin6_;
-    const typename ParamGenerator<T6>::iterator end6_;
-    typename ParamGenerator<T6>::iterator current6_;
-    const typename ParamGenerator<T7>::iterator begin7_;
-    const typename ParamGenerator<T7>::iterator end7_;
-    typename ParamGenerator<T7>::iterator current7_;
-    ParamType current_value_;
-  };  // class CartesianProductGenerator7::Iterator
-
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductGenerator7& other);
-
-  const ParamGenerator<T1> g1_;
-  const ParamGenerator<T2> g2_;
-  const ParamGenerator<T3> g3_;
-  const ParamGenerator<T4> g4_;
-  const ParamGenerator<T5> g5_;
-  const ParamGenerator<T6> g6_;
-  const ParamGenerator<T7> g7_;
-};  // class CartesianProductGenerator7
-
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8>
-class CartesianProductGenerator8
-    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
-        T7, T8> > {
- public:
-  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> ParamType;
-
-  CartesianProductGenerator8(const ParamGenerator<T1>& g1,
-      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
-      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
-      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
-      const ParamGenerator<T8>& g8)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
-          g8_(g8) {}
-  virtual ~CartesianProductGenerator8() {}
-
-  virtual ParamIteratorInterface<ParamType>* Begin() const {
-    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
-        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
-        g7_.begin(), g8_, g8_.begin());
-  }
-  virtual ParamIteratorInterface<ParamType>* End() const {
-    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
-        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
-        g8_.end());
-  }
-
- private:
-  class Iterator : public ParamIteratorInterface<ParamType> {
-   public:
-    Iterator(const ParamGeneratorInterface<ParamType>* base,
-      const ParamGenerator<T1>& g1,
-      const typename ParamGenerator<T1>::iterator& current1,
-      const ParamGenerator<T2>& g2,
-      const typename ParamGenerator<T2>::iterator& current2,
-      const ParamGenerator<T3>& g3,
-      const typename ParamGenerator<T3>::iterator& current3,
-      const ParamGenerator<T4>& g4,
-      const typename ParamGenerator<T4>::iterator& current4,
-      const ParamGenerator<T5>& g5,
-      const typename ParamGenerator<T5>::iterator& current5,
-      const ParamGenerator<T6>& g6,
-      const typename ParamGenerator<T6>::iterator& current6,
-      const ParamGenerator<T7>& g7,
-      const typename ParamGenerator<T7>::iterator& current7,
-      const ParamGenerator<T8>& g8,
-      const typename ParamGenerator<T8>::iterator& current8)
-        : base_(base),
-          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
-          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
-          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
-          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
-          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
-          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
-          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
-          begin8_(g8.begin()), end8_(g8.end()), current8_(current8)    {
-      ComputeCurrentValue();
-    }
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
-      return base_;
-    }
-    // Advance should not be called on beyond-of-range iterators
-    // so no component iterators must be beyond end of range, either.
-    virtual void Advance() {
-      assert(!AtEnd());
-      ++current8_;
-      if (current8_ == end8_) {
-        current8_ = begin8_;
-        ++current7_;
-      }
-      if (current7_ == end7_) {
-        current7_ = begin7_;
-        ++current6_;
-      }
-      if (current6_ == end6_) {
-        current6_ = begin6_;
-        ++current5_;
-      }
-      if (current5_ == end5_) {
-        current5_ = begin5_;
-        ++current4_;
-      }
-      if (current4_ == end4_) {
-        current4_ = begin4_;
-        ++current3_;
-      }
-      if (current3_ == end3_) {
-        current3_ = begin3_;
-        ++current2_;
-      }
-      if (current2_ == end2_) {
-        current2_ = begin2_;
-        ++current1_;
-      }
-      ComputeCurrentValue();
-    }
-    virtual ParamIteratorInterface<ParamType>* Clone() const {
-      return new Iterator(*this);
-    }
-    virtual const ParamType* Current() const { return &current_value_; }
-    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      const Iterator* typed_other =
-          CheckedDowncastToActualType<const Iterator>(&other);
-      // We must report iterators equal if they both point beyond their
-      // respective ranges. That can happen in a variety of fashions,
-      // so we have to consult AtEnd().
-      return (AtEnd() && typed_other->AtEnd()) ||
-         (
-          current1_ == typed_other->current1_ &&
-          current2_ == typed_other->current2_ &&
-          current3_ == typed_other->current3_ &&
-          current4_ == typed_other->current4_ &&
-          current5_ == typed_other->current5_ &&
-          current6_ == typed_other->current6_ &&
-          current7_ == typed_other->current7_ &&
-          current8_ == typed_other->current8_);
-    }
-
-   private:
-    Iterator(const Iterator& other)
-        : base_(other.base_),
-        begin1_(other.begin1_),
-        end1_(other.end1_),
-        current1_(other.current1_),
-        begin2_(other.begin2_),
-        end2_(other.end2_),
-        current2_(other.current2_),
-        begin3_(other.begin3_),
-        end3_(other.end3_),
-        current3_(other.current3_),
-        begin4_(other.begin4_),
-        end4_(other.end4_),
-        current4_(other.current4_),
-        begin5_(other.begin5_),
-        end5_(other.end5_),
-        current5_(other.current5_),
-        begin6_(other.begin6_),
-        end6_(other.end6_),
-        current6_(other.current6_),
-        begin7_(other.begin7_),
-        end7_(other.end7_),
-        current7_(other.current7_),
-        begin8_(other.begin8_),
-        end8_(other.end8_),
-        current8_(other.current8_) {
-      ComputeCurrentValue();
-    }
-
-    void ComputeCurrentValue() {
-      if (!AtEnd())
-        current_value_ = ParamType(*current1_, *current2_, *current3_,
-            *current4_, *current5_, *current6_, *current7_, *current8_);
-    }
-    bool AtEnd() const {
-      // We must report iterator past the end of the range when either of the
-      // component iterators has reached the end of its range.
-      return
-          current1_ == end1_ ||
-          current2_ == end2_ ||
-          current3_ == end3_ ||
-          current4_ == end4_ ||
-          current5_ == end5_ ||
-          current6_ == end6_ ||
-          current7_ == end7_ ||
-          current8_ == end8_;
-    }
-
-    // No implementation - assignment is unsupported.
-    void operator=(const Iterator& other);
-
-    const ParamGeneratorInterface<ParamType>* const base_;
-    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
-    // current[i]_ is the actual traversing iterator.
-    const typename ParamGenerator<T1>::iterator begin1_;
-    const typename ParamGenerator<T1>::iterator end1_;
-    typename ParamGenerator<T1>::iterator current1_;
-    const typename ParamGenerator<T2>::iterator begin2_;
-    const typename ParamGenerator<T2>::iterator end2_;
-    typename ParamGenerator<T2>::iterator current2_;
-    const typename ParamGenerator<T3>::iterator begin3_;
-    const typename ParamGenerator<T3>::iterator end3_;
-    typename ParamGenerator<T3>::iterator current3_;
-    const typename ParamGenerator<T4>::iterator begin4_;
-    const typename ParamGenerator<T4>::iterator end4_;
-    typename ParamGenerator<T4>::iterator current4_;
-    const typename ParamGenerator<T5>::iterator begin5_;
-    const typename ParamGenerator<T5>::iterator end5_;
-    typename ParamGenerator<T5>::iterator current5_;
-    const typename ParamGenerator<T6>::iterator begin6_;
-    const typename ParamGenerator<T6>::iterator end6_;
-    typename ParamGenerator<T6>::iterator current6_;
-    const typename ParamGenerator<T7>::iterator begin7_;
-    const typename ParamGenerator<T7>::iterator end7_;
-    typename ParamGenerator<T7>::iterator current7_;
-    const typename ParamGenerator<T8>::iterator begin8_;
-    const typename ParamGenerator<T8>::iterator end8_;
-    typename ParamGenerator<T8>::iterator current8_;
-    ParamType current_value_;
-  };  // class CartesianProductGenerator8::Iterator
-
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductGenerator8& other);
-
-  const ParamGenerator<T1> g1_;
-  const ParamGenerator<T2> g2_;
-  const ParamGenerator<T3> g3_;
-  const ParamGenerator<T4> g4_;
-  const ParamGenerator<T5> g5_;
-  const ParamGenerator<T6> g6_;
-  const ParamGenerator<T7> g7_;
-  const ParamGenerator<T8> g8_;
-};  // class CartesianProductGenerator8
-
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9>
-class CartesianProductGenerator9
-    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
-        T7, T8, T9> > {
- public:
-  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9> ParamType;
-
-  CartesianProductGenerator9(const ParamGenerator<T1>& g1,
-      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
-      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
-      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
-      const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
-          g9_(g9) {}
-  virtual ~CartesianProductGenerator9() {}
-
-  virtual ParamIteratorInterface<ParamType>* Begin() const {
-    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
-        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
-        g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin());
-  }
-  virtual ParamIteratorInterface<ParamType>* End() const {
-    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
-        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
-        g8_.end(), g9_, g9_.end());
-  }
-
- private:
-  class Iterator : public ParamIteratorInterface<ParamType> {
-   public:
-    Iterator(const ParamGeneratorInterface<ParamType>* base,
-      const ParamGenerator<T1>& g1,
-      const typename ParamGenerator<T1>::iterator& current1,
-      const ParamGenerator<T2>& g2,
-      const typename ParamGenerator<T2>::iterator& current2,
-      const ParamGenerator<T3>& g3,
-      const typename ParamGenerator<T3>::iterator& current3,
-      const ParamGenerator<T4>& g4,
-      const typename ParamGenerator<T4>::iterator& current4,
-      const ParamGenerator<T5>& g5,
-      const typename ParamGenerator<T5>::iterator& current5,
-      const ParamGenerator<T6>& g6,
-      const typename ParamGenerator<T6>::iterator& current6,
-      const ParamGenerator<T7>& g7,
-      const typename ParamGenerator<T7>::iterator& current7,
-      const ParamGenerator<T8>& g8,
-      const typename ParamGenerator<T8>::iterator& current8,
-      const ParamGenerator<T9>& g9,
-      const typename ParamGenerator<T9>::iterator& current9)
-        : base_(base),
-          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
-          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
-          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
-          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
-          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
-          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
-          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
-          begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
-          begin9_(g9.begin()), end9_(g9.end()), current9_(current9)    {
-      ComputeCurrentValue();
-    }
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
-      return base_;
-    }
-    // Advance should not be called on beyond-of-range iterators
-    // so no component iterators must be beyond end of range, either.
-    virtual void Advance() {
-      assert(!AtEnd());
-      ++current9_;
-      if (current9_ == end9_) {
-        current9_ = begin9_;
-        ++current8_;
-      }
-      if (current8_ == end8_) {
-        current8_ = begin8_;
-        ++current7_;
-      }
-      if (current7_ == end7_) {
-        current7_ = begin7_;
-        ++current6_;
-      }
-      if (current6_ == end6_) {
-        current6_ = begin6_;
-        ++current5_;
-      }
-      if (current5_ == end5_) {
-        current5_ = begin5_;
-        ++current4_;
-      }
-      if (current4_ == end4_) {
-        current4_ = begin4_;
-        ++current3_;
-      }
-      if (current3_ == end3_) {
-        current3_ = begin3_;
-        ++current2_;
-      }
-      if (current2_ == end2_) {
-        current2_ = begin2_;
-        ++current1_;
-      }
-      ComputeCurrentValue();
-    }
-    virtual ParamIteratorInterface<ParamType>* Clone() const {
-      return new Iterator(*this);
-    }
-    virtual const ParamType* Current() const { return &current_value_; }
-    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      const Iterator* typed_other =
-          CheckedDowncastToActualType<const Iterator>(&other);
-      // We must report iterators equal if they both point beyond their
-      // respective ranges. That can happen in a variety of fashions,
-      // so we have to consult AtEnd().
-      return (AtEnd() && typed_other->AtEnd()) ||
-         (
-          current1_ == typed_other->current1_ &&
-          current2_ == typed_other->current2_ &&
-          current3_ == typed_other->current3_ &&
-          current4_ == typed_other->current4_ &&
-          current5_ == typed_other->current5_ &&
-          current6_ == typed_other->current6_ &&
-          current7_ == typed_other->current7_ &&
-          current8_ == typed_other->current8_ &&
-          current9_ == typed_other->current9_);
-    }
-
-   private:
-    Iterator(const Iterator& other)
-        : base_(other.base_),
-        begin1_(other.begin1_),
-        end1_(other.end1_),
-        current1_(other.current1_),
-        begin2_(other.begin2_),
-        end2_(other.end2_),
-        current2_(other.current2_),
-        begin3_(other.begin3_),
-        end3_(other.end3_),
-        current3_(other.current3_),
-        begin4_(other.begin4_),
-        end4_(other.end4_),
-        current4_(other.current4_),
-        begin5_(other.begin5_),
-        end5_(other.end5_),
-        current5_(other.current5_),
-        begin6_(other.begin6_),
-        end6_(other.end6_),
-        current6_(other.current6_),
-        begin7_(other.begin7_),
-        end7_(other.end7_),
-        current7_(other.current7_),
-        begin8_(other.begin8_),
-        end8_(other.end8_),
-        current8_(other.current8_),
-        begin9_(other.begin9_),
-        end9_(other.end9_),
-        current9_(other.current9_) {
-      ComputeCurrentValue();
-    }
-
-    void ComputeCurrentValue() {
-      if (!AtEnd())
-        current_value_ = ParamType(*current1_, *current2_, *current3_,
-            *current4_, *current5_, *current6_, *current7_, *current8_,
-            *current9_);
-    }
-    bool AtEnd() const {
-      // We must report iterator past the end of the range when either of the
-      // component iterators has reached the end of its range.
-      return
-          current1_ == end1_ ||
-          current2_ == end2_ ||
-          current3_ == end3_ ||
-          current4_ == end4_ ||
-          current5_ == end5_ ||
-          current6_ == end6_ ||
-          current7_ == end7_ ||
-          current8_ == end8_ ||
-          current9_ == end9_;
-    }
-
-    // No implementation - assignment is unsupported.
-    void operator=(const Iterator& other);
-
-    const ParamGeneratorInterface<ParamType>* const base_;
-    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
-    // current[i]_ is the actual traversing iterator.
-    const typename ParamGenerator<T1>::iterator begin1_;
-    const typename ParamGenerator<T1>::iterator end1_;
-    typename ParamGenerator<T1>::iterator current1_;
-    const typename ParamGenerator<T2>::iterator begin2_;
-    const typename ParamGenerator<T2>::iterator end2_;
-    typename ParamGenerator<T2>::iterator current2_;
-    const typename ParamGenerator<T3>::iterator begin3_;
-    const typename ParamGenerator<T3>::iterator end3_;
-    typename ParamGenerator<T3>::iterator current3_;
-    const typename ParamGenerator<T4>::iterator begin4_;
-    const typename ParamGenerator<T4>::iterator end4_;
-    typename ParamGenerator<T4>::iterator current4_;
-    const typename ParamGenerator<T5>::iterator begin5_;
-    const typename ParamGenerator<T5>::iterator end5_;
-    typename ParamGenerator<T5>::iterator current5_;
-    const typename ParamGenerator<T6>::iterator begin6_;
-    const typename ParamGenerator<T6>::iterator end6_;
-    typename ParamGenerator<T6>::iterator current6_;
-    const typename ParamGenerator<T7>::iterator begin7_;
-    const typename ParamGenerator<T7>::iterator end7_;
-    typename ParamGenerator<T7>::iterator current7_;
-    const typename ParamGenerator<T8>::iterator begin8_;
-    const typename ParamGenerator<T8>::iterator end8_;
-    typename ParamGenerator<T8>::iterator current8_;
-    const typename ParamGenerator<T9>::iterator begin9_;
-    const typename ParamGenerator<T9>::iterator end9_;
-    typename ParamGenerator<T9>::iterator current9_;
-    ParamType current_value_;
-  };  // class CartesianProductGenerator9::Iterator
-
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductGenerator9& other);
-
-  const ParamGenerator<T1> g1_;
-  const ParamGenerator<T2> g2_;
-  const ParamGenerator<T3> g3_;
-  const ParamGenerator<T4> g4_;
-  const ParamGenerator<T5> g5_;
-  const ParamGenerator<T6> g6_;
-  const ParamGenerator<T7> g7_;
-  const ParamGenerator<T8> g8_;
-  const ParamGenerator<T9> g9_;
-};  // class CartesianProductGenerator9
-
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10>
-class CartesianProductGenerator10
-    : public ParamGeneratorInterface< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
-        T7, T8, T9, T10> > {
- public:
-  typedef ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> ParamType;
-
-  CartesianProductGenerator10(const ParamGenerator<T1>& g1,
-      const ParamGenerator<T2>& g2, const ParamGenerator<T3>& g3,
-      const ParamGenerator<T4>& g4, const ParamGenerator<T5>& g5,
-      const ParamGenerator<T6>& g6, const ParamGenerator<T7>& g7,
-      const ParamGenerator<T8>& g8, const ParamGenerator<T9>& g9,
-      const ParamGenerator<T10>& g10)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
-          g9_(g9), g10_(g10) {}
-  virtual ~CartesianProductGenerator10() {}
-
-  virtual ParamIteratorInterface<ParamType>* Begin() const {
-    return new Iterator(this, g1_, g1_.begin(), g2_, g2_.begin(), g3_,
-        g3_.begin(), g4_, g4_.begin(), g5_, g5_.begin(), g6_, g6_.begin(), g7_,
-        g7_.begin(), g8_, g8_.begin(), g9_, g9_.begin(), g10_, g10_.begin());
-  }
-  virtual ParamIteratorInterface<ParamType>* End() const {
-    return new Iterator(this, g1_, g1_.end(), g2_, g2_.end(), g3_, g3_.end(),
-        g4_, g4_.end(), g5_, g5_.end(), g6_, g6_.end(), g7_, g7_.end(), g8_,
-        g8_.end(), g9_, g9_.end(), g10_, g10_.end());
-  }
-
- private:
-  class Iterator : public ParamIteratorInterface<ParamType> {
-   public:
-    Iterator(const ParamGeneratorInterface<ParamType>* base,
-      const ParamGenerator<T1>& g1,
-      const typename ParamGenerator<T1>::iterator& current1,
-      const ParamGenerator<T2>& g2,
-      const typename ParamGenerator<T2>::iterator& current2,
-      const ParamGenerator<T3>& g3,
-      const typename ParamGenerator<T3>::iterator& current3,
-      const ParamGenerator<T4>& g4,
-      const typename ParamGenerator<T4>::iterator& current4,
-      const ParamGenerator<T5>& g5,
-      const typename ParamGenerator<T5>::iterator& current5,
-      const ParamGenerator<T6>& g6,
-      const typename ParamGenerator<T6>::iterator& current6,
-      const ParamGenerator<T7>& g7,
-      const typename ParamGenerator<T7>::iterator& current7,
-      const ParamGenerator<T8>& g8,
-      const typename ParamGenerator<T8>::iterator& current8,
-      const ParamGenerator<T9>& g9,
-      const typename ParamGenerator<T9>::iterator& current9,
-      const ParamGenerator<T10>& g10,
-      const typename ParamGenerator<T10>::iterator& current10)
-        : base_(base),
-          begin1_(g1.begin()), end1_(g1.end()), current1_(current1),
-          begin2_(g2.begin()), end2_(g2.end()), current2_(current2),
-          begin3_(g3.begin()), end3_(g3.end()), current3_(current3),
-          begin4_(g4.begin()), end4_(g4.end()), current4_(current4),
-          begin5_(g5.begin()), end5_(g5.end()), current5_(current5),
-          begin6_(g6.begin()), end6_(g6.end()), current6_(current6),
-          begin7_(g7.begin()), end7_(g7.end()), current7_(current7),
-          begin8_(g8.begin()), end8_(g8.end()), current8_(current8),
-          begin9_(g9.begin()), end9_(g9.end()), current9_(current9),
-          begin10_(g10.begin()), end10_(g10.end()), current10_(current10)    {
-      ComputeCurrentValue();
-    }
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
-      return base_;
-    }
-    // Advance should not be called on beyond-of-range iterators
-    // so no component iterators must be beyond end of range, either.
-    virtual void Advance() {
-      assert(!AtEnd());
-      ++current10_;
-      if (current10_ == end10_) {
-        current10_ = begin10_;
-        ++current9_;
-      }
-      if (current9_ == end9_) {
-        current9_ = begin9_;
-        ++current8_;
-      }
-      if (current8_ == end8_) {
-        current8_ = begin8_;
-        ++current7_;
-      }
-      if (current7_ == end7_) {
-        current7_ = begin7_;
-        ++current6_;
-      }
-      if (current6_ == end6_) {
-        current6_ = begin6_;
-        ++current5_;
-      }
-      if (current5_ == end5_) {
-        current5_ = begin5_;
-        ++current4_;
-      }
-      if (current4_ == end4_) {
-        current4_ = begin4_;
-        ++current3_;
-      }
-      if (current3_ == end3_) {
-        current3_ = begin3_;
-        ++current2_;
-      }
-      if (current2_ == end2_) {
-        current2_ = begin2_;
-        ++current1_;
-      }
-      ComputeCurrentValue();
-    }
-    virtual ParamIteratorInterface<ParamType>* Clone() const {
-      return new Iterator(*this);
-    }
-    virtual const ParamType* Current() const { return &current_value_; }
-    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      const Iterator* typed_other =
-          CheckedDowncastToActualType<const Iterator>(&other);
-      // We must report iterators equal if they both point beyond their
-      // respective ranges. That can happen in a variety of fashions,
-      // so we have to consult AtEnd().
-      return (AtEnd() && typed_other->AtEnd()) ||
-         (
-          current1_ == typed_other->current1_ &&
-          current2_ == typed_other->current2_ &&
-          current3_ == typed_other->current3_ &&
-          current4_ == typed_other->current4_ &&
-          current5_ == typed_other->current5_ &&
-          current6_ == typed_other->current6_ &&
-          current7_ == typed_other->current7_ &&
-          current8_ == typed_other->current8_ &&
-          current9_ == typed_other->current9_ &&
-          current10_ == typed_other->current10_);
-    }
-
-   private:
-    Iterator(const Iterator& other)
-        : base_(other.base_),
-        begin1_(other.begin1_),
-        end1_(other.end1_),
-        current1_(other.current1_),
-        begin2_(other.begin2_),
-        end2_(other.end2_),
-        current2_(other.current2_),
-        begin3_(other.begin3_),
-        end3_(other.end3_),
-        current3_(other.current3_),
-        begin4_(other.begin4_),
-        end4_(other.end4_),
-        current4_(other.current4_),
-        begin5_(other.begin5_),
-        end5_(other.end5_),
-        current5_(other.current5_),
-        begin6_(other.begin6_),
-        end6_(other.end6_),
-        current6_(other.current6_),
-        begin7_(other.begin7_),
-        end7_(other.end7_),
-        current7_(other.current7_),
-        begin8_(other.begin8_),
-        end8_(other.end8_),
-        current8_(other.current8_),
-        begin9_(other.begin9_),
-        end9_(other.end9_),
-        current9_(other.current9_),
-        begin10_(other.begin10_),
-        end10_(other.end10_),
-        current10_(other.current10_) {
-      ComputeCurrentValue();
-    }
-
-    void ComputeCurrentValue() {
-      if (!AtEnd())
-        current_value_ = ParamType(*current1_, *current2_, *current3_,
-            *current4_, *current5_, *current6_, *current7_, *current8_,
-            *current9_, *current10_);
-    }
-    bool AtEnd() const {
-      // We must report iterator past the end of the range when either of the
-      // component iterators has reached the end of its range.
-      return
-          current1_ == end1_ ||
-          current2_ == end2_ ||
-          current3_ == end3_ ||
-          current4_ == end4_ ||
-          current5_ == end5_ ||
-          current6_ == end6_ ||
-          current7_ == end7_ ||
-          current8_ == end8_ ||
-          current9_ == end9_ ||
-          current10_ == end10_;
-    }
-
-    // No implementation - assignment is unsupported.
-    void operator=(const Iterator& other);
-
-    const ParamGeneratorInterface<ParamType>* const base_;
-    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
-    // current[i]_ is the actual traversing iterator.
-    const typename ParamGenerator<T1>::iterator begin1_;
-    const typename ParamGenerator<T1>::iterator end1_;
-    typename ParamGenerator<T1>::iterator current1_;
-    const typename ParamGenerator<T2>::iterator begin2_;
-    const typename ParamGenerator<T2>::iterator end2_;
-    typename ParamGenerator<T2>::iterator current2_;
-    const typename ParamGenerator<T3>::iterator begin3_;
-    const typename ParamGenerator<T3>::iterator end3_;
-    typename ParamGenerator<T3>::iterator current3_;
-    const typename ParamGenerator<T4>::iterator begin4_;
-    const typename ParamGenerator<T4>::iterator end4_;
-    typename ParamGenerator<T4>::iterator current4_;
-    const typename ParamGenerator<T5>::iterator begin5_;
-    const typename ParamGenerator<T5>::iterator end5_;
-    typename ParamGenerator<T5>::iterator current5_;
-    const typename ParamGenerator<T6>::iterator begin6_;
-    const typename ParamGenerator<T6>::iterator end6_;
-    typename ParamGenerator<T6>::iterator current6_;
-    const typename ParamGenerator<T7>::iterator begin7_;
-    const typename ParamGenerator<T7>::iterator end7_;
-    typename ParamGenerator<T7>::iterator current7_;
-    const typename ParamGenerator<T8>::iterator begin8_;
-    const typename ParamGenerator<T8>::iterator end8_;
-    typename ParamGenerator<T8>::iterator current8_;
-    const typename ParamGenerator<T9>::iterator begin9_;
-    const typename ParamGenerator<T9>::iterator end9_;
-    typename ParamGenerator<T9>::iterator current9_;
-    const typename ParamGenerator<T10>::iterator begin10_;
-    const typename ParamGenerator<T10>::iterator end10_;
-    typename ParamGenerator<T10>::iterator current10_;
-    ParamType current_value_;
-  };  // class CartesianProductGenerator10::Iterator
-
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductGenerator10& other);
-
-  const ParamGenerator<T1> g1_;
-  const ParamGenerator<T2> g2_;
-  const ParamGenerator<T3> g3_;
-  const ParamGenerator<T4> g4_;
-  const ParamGenerator<T5> g5_;
-  const ParamGenerator<T6> g6_;
-  const ParamGenerator<T7> g7_;
-  const ParamGenerator<T8> g8_;
-  const ParamGenerator<T9> g9_;
-  const ParamGenerator<T10> g10_;
-};  // class CartesianProductGenerator10
-
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// Helper classes providing Combine() with polymorphic features. They allow
-// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
-// convertible to U.
-//
-template <class Generator1, class Generator2>
-class CartesianProductHolder2 {
- public:
-CartesianProductHolder2(const Generator1& g1, const Generator2& g2)
-      : g1_(g1), g2_(g2) {}
-  template <typename T1, typename T2>
-  operator ParamGenerator< ::std::tr1::tuple<T1, T2> >() const {
-    return ParamGenerator< ::std::tr1::tuple<T1, T2> >(
-        new CartesianProductGenerator2<T1, T2>(
-        static_cast<ParamGenerator<T1> >(g1_),
-        static_cast<ParamGenerator<T2> >(g2_)));
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductHolder2& other);
-
-  const Generator1 g1_;
-  const Generator2 g2_;
-};  // class CartesianProductHolder2
-
-template <class Generator1, class Generator2, class Generator3>
-class CartesianProductHolder3 {
- public:
-CartesianProductHolder3(const Generator1& g1, const Generator2& g2,
-    const Generator3& g3)
-      : g1_(g1), g2_(g2), g3_(g3) {}
-  template <typename T1, typename T2, typename T3>
-  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >() const {
-    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3> >(
-        new CartesianProductGenerator3<T1, T2, T3>(
-        static_cast<ParamGenerator<T1> >(g1_),
-        static_cast<ParamGenerator<T2> >(g2_),
-        static_cast<ParamGenerator<T3> >(g3_)));
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductHolder3& other);
-
-  const Generator1 g1_;
-  const Generator2 g2_;
-  const Generator3 g3_;
-};  // class CartesianProductHolder3
-
-template <class Generator1, class Generator2, class Generator3,
-    class Generator4>
-class CartesianProductHolder4 {
- public:
-CartesianProductHolder4(const Generator1& g1, const Generator2& g2,
-    const Generator3& g3, const Generator4& g4)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4) {}
-  template <typename T1, typename T2, typename T3, typename T4>
-  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >() const {
-    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4> >(
-        new CartesianProductGenerator4<T1, T2, T3, T4>(
-        static_cast<ParamGenerator<T1> >(g1_),
-        static_cast<ParamGenerator<T2> >(g2_),
-        static_cast<ParamGenerator<T3> >(g3_),
-        static_cast<ParamGenerator<T4> >(g4_)));
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductHolder4& other);
-
-  const Generator1 g1_;
-  const Generator2 g2_;
-  const Generator3 g3_;
-  const Generator4 g4_;
-};  // class CartesianProductHolder4
-
-template <class Generator1, class Generator2, class Generator3,
-    class Generator4, class Generator5>
-class CartesianProductHolder5 {
- public:
-CartesianProductHolder5(const Generator1& g1, const Generator2& g2,
-    const Generator3& g3, const Generator4& g4, const Generator5& g5)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5) {}
-  template <typename T1, typename T2, typename T3, typename T4, typename T5>
-  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >() const {
-    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5> >(
-        new CartesianProductGenerator5<T1, T2, T3, T4, T5>(
-        static_cast<ParamGenerator<T1> >(g1_),
-        static_cast<ParamGenerator<T2> >(g2_),
-        static_cast<ParamGenerator<T3> >(g3_),
-        static_cast<ParamGenerator<T4> >(g4_),
-        static_cast<ParamGenerator<T5> >(g5_)));
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductHolder5& other);
-
-  const Generator1 g1_;
-  const Generator2 g2_;
-  const Generator3 g3_;
-  const Generator4 g4_;
-  const Generator5 g5_;
-};  // class CartesianProductHolder5
-
-template <class Generator1, class Generator2, class Generator3,
-    class Generator4, class Generator5, class Generator6>
-class CartesianProductHolder6 {
- public:
-CartesianProductHolder6(const Generator1& g1, const Generator2& g2,
-    const Generator3& g3, const Generator4& g4, const Generator5& g5,
-    const Generator6& g6)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6) {}
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-      typename T6>
-  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >() const {
-    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6> >(
-        new CartesianProductGenerator6<T1, T2, T3, T4, T5, T6>(
-        static_cast<ParamGenerator<T1> >(g1_),
-        static_cast<ParamGenerator<T2> >(g2_),
-        static_cast<ParamGenerator<T3> >(g3_),
-        static_cast<ParamGenerator<T4> >(g4_),
-        static_cast<ParamGenerator<T5> >(g5_),
-        static_cast<ParamGenerator<T6> >(g6_)));
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductHolder6& other);
-
-  const Generator1 g1_;
-  const Generator2 g2_;
-  const Generator3 g3_;
-  const Generator4 g4_;
-  const Generator5 g5_;
-  const Generator6 g6_;
-};  // class CartesianProductHolder6
-
-template <class Generator1, class Generator2, class Generator3,
-    class Generator4, class Generator5, class Generator6, class Generator7>
-class CartesianProductHolder7 {
- public:
-CartesianProductHolder7(const Generator1& g1, const Generator2& g2,
-    const Generator3& g3, const Generator4& g4, const Generator5& g5,
-    const Generator6& g6, const Generator7& g7)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7) {}
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-      typename T6, typename T7>
-  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6,
-      T7> >() const {
-    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7> >(
-        new CartesianProductGenerator7<T1, T2, T3, T4, T5, T6, T7>(
-        static_cast<ParamGenerator<T1> >(g1_),
-        static_cast<ParamGenerator<T2> >(g2_),
-        static_cast<ParamGenerator<T3> >(g3_),
-        static_cast<ParamGenerator<T4> >(g4_),
-        static_cast<ParamGenerator<T5> >(g5_),
-        static_cast<ParamGenerator<T6> >(g6_),
-        static_cast<ParamGenerator<T7> >(g7_)));
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductHolder7& other);
-
-  const Generator1 g1_;
-  const Generator2 g2_;
-  const Generator3 g3_;
-  const Generator4 g4_;
-  const Generator5 g5_;
-  const Generator6 g6_;
-  const Generator7 g7_;
-};  // class CartesianProductHolder7
-
-template <class Generator1, class Generator2, class Generator3,
-    class Generator4, class Generator5, class Generator6, class Generator7,
-    class Generator8>
-class CartesianProductHolder8 {
- public:
-CartesianProductHolder8(const Generator1& g1, const Generator2& g2,
-    const Generator3& g3, const Generator4& g4, const Generator5& g5,
-    const Generator6& g6, const Generator7& g7, const Generator8& g8)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7),
-          g8_(g8) {}
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-      typename T6, typename T7, typename T8>
-  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7,
-      T8> >() const {
-    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8> >(
-        new CartesianProductGenerator8<T1, T2, T3, T4, T5, T6, T7, T8>(
-        static_cast<ParamGenerator<T1> >(g1_),
-        static_cast<ParamGenerator<T2> >(g2_),
-        static_cast<ParamGenerator<T3> >(g3_),
-        static_cast<ParamGenerator<T4> >(g4_),
-        static_cast<ParamGenerator<T5> >(g5_),
-        static_cast<ParamGenerator<T6> >(g6_),
-        static_cast<ParamGenerator<T7> >(g7_),
-        static_cast<ParamGenerator<T8> >(g8_)));
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductHolder8& other);
-
-  const Generator1 g1_;
-  const Generator2 g2_;
-  const Generator3 g3_;
-  const Generator4 g4_;
-  const Generator5 g5_;
-  const Generator6 g6_;
-  const Generator7 g7_;
-  const Generator8 g8_;
-};  // class CartesianProductHolder8
-
-template <class Generator1, class Generator2, class Generator3,
-    class Generator4, class Generator5, class Generator6, class Generator7,
-    class Generator8, class Generator9>
-class CartesianProductHolder9 {
- public:
-CartesianProductHolder9(const Generator1& g1, const Generator2& g2,
-    const Generator3& g3, const Generator4& g4, const Generator5& g5,
-    const Generator6& g6, const Generator7& g7, const Generator8& g8,
-    const Generator9& g9)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
-          g9_(g9) {}
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-      typename T6, typename T7, typename T8, typename T9>
-  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
-      T9> >() const {
-    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
-        T9> >(
-        new CartesianProductGenerator9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
-        static_cast<ParamGenerator<T1> >(g1_),
-        static_cast<ParamGenerator<T2> >(g2_),
-        static_cast<ParamGenerator<T3> >(g3_),
-        static_cast<ParamGenerator<T4> >(g4_),
-        static_cast<ParamGenerator<T5> >(g5_),
-        static_cast<ParamGenerator<T6> >(g6_),
-        static_cast<ParamGenerator<T7> >(g7_),
-        static_cast<ParamGenerator<T8> >(g8_),
-        static_cast<ParamGenerator<T9> >(g9_)));
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductHolder9& other);
-
-  const Generator1 g1_;
-  const Generator2 g2_;
-  const Generator3 g3_;
-  const Generator4 g4_;
-  const Generator5 g5_;
-  const Generator6 g6_;
-  const Generator7 g7_;
-  const Generator8 g8_;
-  const Generator9 g9_;
-};  // class CartesianProductHolder9
-
-template <class Generator1, class Generator2, class Generator3,
-    class Generator4, class Generator5, class Generator6, class Generator7,
-    class Generator8, class Generator9, class Generator10>
-class CartesianProductHolder10 {
- public:
-CartesianProductHolder10(const Generator1& g1, const Generator2& g2,
-    const Generator3& g3, const Generator4& g4, const Generator5& g5,
-    const Generator6& g6, const Generator7& g7, const Generator8& g8,
-    const Generator9& g9, const Generator10& g10)
-      : g1_(g1), g2_(g2), g3_(g3), g4_(g4), g5_(g5), g6_(g6), g7_(g7), g8_(g8),
-          g9_(g9), g10_(g10) {}
-  template <typename T1, typename T2, typename T3, typename T4, typename T5,
-      typename T6, typename T7, typename T8, typename T9, typename T10>
-  operator ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
-      T9, T10> >() const {
-    return ParamGenerator< ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8,
-        T9, T10> >(
-        new CartesianProductGenerator10<T1, T2, T3, T4, T5, T6, T7, T8, T9,
-            T10>(
-        static_cast<ParamGenerator<T1> >(g1_),
-        static_cast<ParamGenerator<T2> >(g2_),
-        static_cast<ParamGenerator<T3> >(g3_),
-        static_cast<ParamGenerator<T4> >(g4_),
-        static_cast<ParamGenerator<T5> >(g5_),
-        static_cast<ParamGenerator<T6> >(g6_),
-        static_cast<ParamGenerator<T7> >(g7_),
-        static_cast<ParamGenerator<T8> >(g8_),
-        static_cast<ParamGenerator<T9> >(g9_),
-        static_cast<ParamGenerator<T10> >(g10_)));
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductHolder10& other);
-
-  const Generator1 g1_;
-  const Generator2 g2_;
-  const Generator3 g3_;
-  const Generator4 g4_;
-  const Generator5 g5_;
-  const Generator6 g6_;
-  const Generator7 g7_;
-  const Generator8 g8_;
-  const Generator9 g9_;
-  const Generator10 g10_;
-};  // class CartesianProductHolder10
-
-# endif  // GTEST_HAS_COMBINE
-
-}  // namespace internal
-}  // namespace testing
-
-#endif  //  GTEST_HAS_PARAM_TEST
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-param-util-generated.h.pump b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-param-util-generated.h.pump
deleted file mode 100644
index dbe9386..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-param-util-generated.h.pump
+++ /dev/null
@@ -1,301 +0,0 @@
-$$ -*- mode: c++; -*-
-$var n = 50  $$ Maximum length of Values arguments we want to support.
-$var maxtuple = 10  $$ Maximum number of Combine arguments we want to support.
-// Copyright 2008 Google Inc.
-// All Rights Reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: vladl at google.com (Vlad Losev)
-
-// Type and function utilities for implementing parameterized tests.
-// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
-//
-// Currently Google Test supports at most $n arguments in Values,
-// and at most $maxtuple arguments in Combine. Please contact
-// googletestframework at googlegroups.com if you need more.
-// Please note that the number of arguments to Combine is limited
-// by the maximum arity of the implementation of tr1::tuple which is
-// currently set at $maxtuple.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
-
-// scripts/fuse_gtest.py depends on gtest's own header being #included
-// *unconditionally*.  Therefore these #includes cannot be moved
-// inside #if GTEST_HAS_PARAM_TEST.
-#include "gtest/internal/gtest-param-util.h"
-#include "gtest/internal/gtest-port.h"
-
-#if GTEST_HAS_PARAM_TEST
-
-namespace testing {
-
-// Forward declarations of ValuesIn(), which is implemented in
-// include/gtest/gtest-param-test.h.
-template <typename ForwardIterator>
-internal::ParamGenerator<
-  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
-ValuesIn(ForwardIterator begin, ForwardIterator end);
-
-template <typename T, size_t N>
-internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
-
-template <class Container>
-internal::ParamGenerator<typename Container::value_type> ValuesIn(
-    const Container& container);
-
-namespace internal {
-
-// Used in the Values() function to provide polymorphic capabilities.
-template <typename T1>
-class ValueArray1 {
- public:
-  explicit ValueArray1(T1 v1) : v1_(v1) {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray1& other);
-
-  const T1 v1_;
-};
-
-$range i 2..n
-$for i [[
-$range j 1..i
-
-template <$for j, [[typename T$j]]>
-class ValueArray$i {
- public:
-  ValueArray$i($for j, [[T$j v$j]]) : $for j, [[v$(j)_(v$j)]] {}
-
-  template <typename T>
-  operator ParamGenerator<T>() const {
-    const T array[] = {$for j, [[v$(j)_]]};
-    return ValuesIn(array);
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const ValueArray$i& other);
-
-$for j [[
-
-  const T$j v$(j)_;
-]]
-
-};
-
-]]
-
-# if GTEST_HAS_COMBINE
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// Generates values from the Cartesian product of values produced
-// by the argument generators.
-//
-$range i 2..maxtuple
-$for i [[
-$range j 1..i
-$range k 2..i
-
-template <$for j, [[typename T$j]]>
-class CartesianProductGenerator$i
-    : public ParamGeneratorInterface< ::std::tr1::tuple<$for j, [[T$j]]> > {
- public:
-  typedef ::std::tr1::tuple<$for j, [[T$j]]> ParamType;
-
-  CartesianProductGenerator$i($for j, [[const ParamGenerator<T$j>& g$j]])
-      : $for j, [[g$(j)_(g$j)]] {}
-  virtual ~CartesianProductGenerator$i() {}
-
-  virtual ParamIteratorInterface<ParamType>* Begin() const {
-    return new Iterator(this, $for j, [[g$(j)_, g$(j)_.begin()]]);
-  }
-  virtual ParamIteratorInterface<ParamType>* End() const {
-    return new Iterator(this, $for j, [[g$(j)_, g$(j)_.end()]]);
-  }
-
- private:
-  class Iterator : public ParamIteratorInterface<ParamType> {
-   public:
-    Iterator(const ParamGeneratorInterface<ParamType>* base, $for j, [[
-
-      const ParamGenerator<T$j>& g$j,
-      const typename ParamGenerator<T$j>::iterator& current$(j)]])
-        : base_(base),
-$for j, [[
-
-          begin$(j)_(g$j.begin()), end$(j)_(g$j.end()), current$(j)_(current$j)
-]]    {
-      ComputeCurrentValue();
-    }
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
-      return base_;
-    }
-    // Advance should not be called on beyond-of-range iterators
-    // so no component iterators must be beyond end of range, either.
-    virtual void Advance() {
-      assert(!AtEnd());
-      ++current$(i)_;
-
-$for k [[
-      if (current$(i+2-k)_ == end$(i+2-k)_) {
-        current$(i+2-k)_ = begin$(i+2-k)_;
-        ++current$(i+2-k-1)_;
-      }
-
-]]
-      ComputeCurrentValue();
-    }
-    virtual ParamIteratorInterface<ParamType>* Clone() const {
-      return new Iterator(*this);
-    }
-    virtual const ParamType* Current() const { return &current_value_; }
-    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      const Iterator* typed_other =
-          CheckedDowncastToActualType<const Iterator>(&other);
-      // We must report iterators equal if they both point beyond their
-      // respective ranges. That can happen in a variety of fashions,
-      // so we have to consult AtEnd().
-      return (AtEnd() && typed_other->AtEnd()) ||
-         ($for j  && [[
-
-          current$(j)_ == typed_other->current$(j)_
-]]);
-    }
-
-   private:
-    Iterator(const Iterator& other)
-        : base_(other.base_), $for j, [[
-
-        begin$(j)_(other.begin$(j)_),
-        end$(j)_(other.end$(j)_),
-        current$(j)_(other.current$(j)_)
-]] {
-      ComputeCurrentValue();
-    }
-
-    void ComputeCurrentValue() {
-      if (!AtEnd())
-        current_value_ = ParamType($for j, [[*current$(j)_]]);
-    }
-    bool AtEnd() const {
-      // We must report iterator past the end of the range when either of the
-      // component iterators has reached the end of its range.
-      return
-$for j  || [[
-
-          current$(j)_ == end$(j)_
-]];
-    }
-
-    // No implementation - assignment is unsupported.
-    void operator=(const Iterator& other);
-
-    const ParamGeneratorInterface<ParamType>* const base_;
-    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
-    // current[i]_ is the actual traversing iterator.
-$for j [[
-
-    const typename ParamGenerator<T$j>::iterator begin$(j)_;
-    const typename ParamGenerator<T$j>::iterator end$(j)_;
-    typename ParamGenerator<T$j>::iterator current$(j)_;
-]]
-
-    ParamType current_value_;
-  };  // class CartesianProductGenerator$i::Iterator
-
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductGenerator$i& other);
-
-
-$for j [[
-  const ParamGenerator<T$j> g$(j)_;
-
-]]
-};  // class CartesianProductGenerator$i
-
-
-]]
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// Helper classes providing Combine() with polymorphic features. They allow
-// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
-// convertible to U.
-//
-$range i 2..maxtuple
-$for i [[
-$range j 1..i
-
-template <$for j, [[class Generator$j]]>
-class CartesianProductHolder$i {
- public:
-CartesianProductHolder$i($for j, [[const Generator$j& g$j]])
-      : $for j, [[g$(j)_(g$j)]] {}
-  template <$for j, [[typename T$j]]>
-  operator ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >() const {
-    return ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >(
-        new CartesianProductGenerator$i<$for j, [[T$j]]>(
-$for j,[[
-
-        static_cast<ParamGenerator<T$j> >(g$(j)_)
-]]));
-  }
-
- private:
-  // No implementation - assignment is unsupported.
-  void operator=(const CartesianProductHolder$i& other);
-
-
-$for j [[
-  const Generator$j g$(j)_;
-
-]]
-};  // class CartesianProductHolder$i
-
-]]
-
-# endif  // GTEST_HAS_COMBINE
-
-}  // namespace internal
-}  // namespace testing
-
-#endif  //  GTEST_HAS_PARAM_TEST
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-param-util.h b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-param-util.h
deleted file mode 100644
index 0ef9718..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-param-util.h
+++ /dev/null
@@ -1,619 +0,0 @@
-// Copyright 2008 Google Inc.
-// All Rights Reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: vladl at google.com (Vlad Losev)
-
-// Type and function utilities for implementing parameterized tests.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
-
-#include <iterator>
-#include <utility>
-#include <vector>
-
-// scripts/fuse_gtest.py depends on gtest's own header being #included
-// *unconditionally*.  Therefore these #includes cannot be moved
-// inside #if GTEST_HAS_PARAM_TEST.
-#include "gtest/internal/gtest-internal.h"
-#include "gtest/internal/gtest-linked_ptr.h"
-#include "gtest/internal/gtest-port.h"
-#include "gtest/gtest-printers.h"
-
-#if GTEST_HAS_PARAM_TEST
-
-namespace testing {
-namespace internal {
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// Outputs a message explaining invalid registration of different
-// fixture class for the same test case. This may happen when
-// TEST_P macro is used to define two tests with the same name
-// but in different namespaces.
-GTEST_API_ void ReportInvalidTestCaseType(const char* test_case_name,
-                                          const char* file, int line);
-
-template <typename> class ParamGeneratorInterface;
-template <typename> class ParamGenerator;
-
-// Interface for iterating over elements provided by an implementation
-// of ParamGeneratorInterface<T>.
-template <typename T>
-class ParamIteratorInterface {
- public:
-  virtual ~ParamIteratorInterface() {}
-  // A pointer to the base generator instance.
-  // Used only for the purposes of iterator comparison
-  // to make sure that two iterators belong to the same generator.
-  virtual const ParamGeneratorInterface<T>* BaseGenerator() const = 0;
-  // Advances iterator to point to the next element
-  // provided by the generator. The caller is responsible
-  // for not calling Advance() on an iterator equal to
-  // BaseGenerator()->End().
-  virtual void Advance() = 0;
-  // Clones the iterator object. Used for implementing copy semantics
-  // of ParamIterator<T>.
-  virtual ParamIteratorInterface* Clone() const = 0;
-  // Dereferences the current iterator and provides (read-only) access
-  // to the pointed value. It is the caller's responsibility not to call
-  // Current() on an iterator equal to BaseGenerator()->End().
-  // Used for implementing ParamGenerator<T>::operator*().
-  virtual const T* Current() const = 0;
-  // Determines whether the given iterator and other point to the same
-  // element in the sequence generated by the generator.
-  // Used for implementing ParamGenerator<T>::operator==().
-  virtual bool Equals(const ParamIteratorInterface& other) const = 0;
-};
-
-// Class iterating over elements provided by an implementation of
-// ParamGeneratorInterface<T>. It wraps ParamIteratorInterface<T>
-// and implements the const forward iterator concept.
-template <typename T>
-class ParamIterator {
- public:
-  typedef T value_type;
-  typedef const T& reference;
-  typedef ptrdiff_t difference_type;
-
-  // ParamIterator assumes ownership of the impl_ pointer.
-  ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {}
-  ParamIterator& operator=(const ParamIterator& other) {
-    if (this != &other)
-      impl_.reset(other.impl_->Clone());
-    return *this;
-  }
-
-  const T& operator*() const { return *impl_->Current(); }
-  const T* operator->() const { return impl_->Current(); }
-  // Prefix version of operator++.
-  ParamIterator& operator++() {
-    impl_->Advance();
-    return *this;
-  }
-  // Postfix version of operator++.
-  ParamIterator operator++(int /*unused*/) {
-    ParamIteratorInterface<T>* clone = impl_->Clone();
-    impl_->Advance();
-    return ParamIterator(clone);
-  }
-  bool operator==(const ParamIterator& other) const {
-    return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_);
-  }
-  bool operator!=(const ParamIterator& other) const {
-    return !(*this == other);
-  }
-
- private:
-  friend class ParamGenerator<T>;
-  explicit ParamIterator(ParamIteratorInterface<T>* impl) : impl_(impl) {}
-  scoped_ptr<ParamIteratorInterface<T> > impl_;
-};
-
-// ParamGeneratorInterface<T> is the binary interface to access generators
-// defined in other translation units.
-template <typename T>
-class ParamGeneratorInterface {
- public:
-  typedef T ParamType;
-
-  virtual ~ParamGeneratorInterface() {}
-
-  // Generator interface definition
-  virtual ParamIteratorInterface<T>* Begin() const = 0;
-  virtual ParamIteratorInterface<T>* End() const = 0;
-};
-
-// Wraps ParamGeneratorInterface<T> and provides general generator syntax
-// compatible with the STL Container concept.
-// This class implements copy initialization semantics and the contained
-// ParamGeneratorInterface<T> instance is shared among all copies
-// of the original object. This is possible because that instance is immutable.
-template<typename T>
-class ParamGenerator {
- public:
-  typedef ParamIterator<T> iterator;
-
-  explicit ParamGenerator(ParamGeneratorInterface<T>* impl) : impl_(impl) {}
-  ParamGenerator(const ParamGenerator& other) : impl_(other.impl_) {}
-
-  ParamGenerator& operator=(const ParamGenerator& other) {
-    impl_ = other.impl_;
-    return *this;
-  }
-
-  iterator begin() const { return iterator(impl_->Begin()); }
-  iterator end() const { return iterator(impl_->End()); }
-
- private:
-  linked_ptr<const ParamGeneratorInterface<T> > impl_;
-};
-
-// Generates values from a range of two comparable values. Can be used to
-// generate sequences of user-defined types that implement operator+() and
-// operator<().
-// This class is used in the Range() function.
-template <typename T, typename IncrementT>
-class RangeGenerator : public ParamGeneratorInterface<T> {
- public:
-  RangeGenerator(T begin, T end, IncrementT step)
-      : begin_(begin), end_(end),
-        step_(step), end_index_(CalculateEndIndex(begin, end, step)) {}
-  virtual ~RangeGenerator() {}
-
-  virtual ParamIteratorInterface<T>* Begin() const {
-    return new Iterator(this, begin_, 0, step_);
-  }
-  virtual ParamIteratorInterface<T>* End() const {
-    return new Iterator(this, end_, end_index_, step_);
-  }
-
- private:
-  class Iterator : public ParamIteratorInterface<T> {
-   public:
-    Iterator(const ParamGeneratorInterface<T>* base, T value, int index,
-             IncrementT step)
-        : base_(base), value_(value), index_(index), step_(step) {}
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<T>* BaseGenerator() const {
-      return base_;
-    }
-    virtual void Advance() {
-      value_ = value_ + step_;
-      index_++;
-    }
-    virtual ParamIteratorInterface<T>* Clone() const {
-      return new Iterator(*this);
-    }
-    virtual const T* Current() const { return &value_; }
-    virtual bool Equals(const ParamIteratorInterface<T>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      const int other_index =
-          CheckedDowncastToActualType<const Iterator>(&other)->index_;
-      return index_ == other_index;
-    }
-
-   private:
-    Iterator(const Iterator& other)
-        : ParamIteratorInterface<T>(),
-          base_(other.base_), value_(other.value_), index_(other.index_),
-          step_(other.step_) {}
-
-    // No implementation - assignment is unsupported.
-    void operator=(const Iterator& other);
-
-    const ParamGeneratorInterface<T>* const base_;
-    T value_;
-    int index_;
-    const IncrementT step_;
-  };  // class RangeGenerator::Iterator
-
-  static int CalculateEndIndex(const T& begin,
-                               const T& end,
-                               const IncrementT& step) {
-    int end_index = 0;
-    for (T i = begin; i < end; i = i + step)
-      end_index++;
-    return end_index;
-  }
-
-  // No implementation - assignment is unsupported.
-  void operator=(const RangeGenerator& other);
-
-  const T begin_;
-  const T end_;
-  const IncrementT step_;
-  // The index for the end() iterator. All the elements in the generated
-  // sequence are indexed (0-based) to aid iterator comparison.
-  const int end_index_;
-};  // class RangeGenerator
-
-
-// Generates values from a pair of STL-style iterators. Used in the
-// ValuesIn() function. The elements are copied from the source range
-// since the source can be located on the stack, and the generator
-// is likely to persist beyond that stack frame.
-template <typename T>
-class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface<T> {
- public:
-  template <typename ForwardIterator>
-  ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end)
-      : container_(begin, end) {}
-  virtual ~ValuesInIteratorRangeGenerator() {}
-
-  virtual ParamIteratorInterface<T>* Begin() const {
-    return new Iterator(this, container_.begin());
-  }
-  virtual ParamIteratorInterface<T>* End() const {
-    return new Iterator(this, container_.end());
-  }
-
- private:
-  typedef typename ::std::vector<T> ContainerType;
-
-  class Iterator : public ParamIteratorInterface<T> {
-   public:
-    Iterator(const ParamGeneratorInterface<T>* base,
-             typename ContainerType::const_iterator iterator)
-        : base_(base), iterator_(iterator) {}
-    virtual ~Iterator() {}
-
-    virtual const ParamGeneratorInterface<T>* BaseGenerator() const {
-      return base_;
-    }
-    virtual void Advance() {
-      ++iterator_;
-      value_.reset();
-    }
-    virtual ParamIteratorInterface<T>* Clone() const {
-      return new Iterator(*this);
-    }
-    // We need to use cached value referenced by iterator_ because *iterator_
-    // can return a temporary object (and of type other then T), so just
-    // having "return &*iterator_;" doesn't work.
-    // value_ is updated here and not in Advance() because Advance()
-    // can advance iterator_ beyond the end of the range, and we cannot
-    // detect that fact. The client code, on the other hand, is
-    // responsible for not calling Current() on an out-of-range iterator.
-    virtual const T* Current() const {
-      if (value_.get() == NULL)
-        value_.reset(new T(*iterator_));
-      return value_.get();
-    }
-    virtual bool Equals(const ParamIteratorInterface<T>& other) const {
-      // Having the same base generator guarantees that the other
-      // iterator is of the same type and we can downcast.
-      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
-          << "The program attempted to compare iterators "
-          << "from different generators." << std::endl;
-      return iterator_ ==
-          CheckedDowncastToActualType<const Iterator>(&other)->iterator_;
-    }
-
-   private:
-    Iterator(const Iterator& other)
-          // The explicit constructor call suppresses a false warning
-          // emitted by gcc when supplied with the -Wextra option.
-        : ParamIteratorInterface<T>(),
-          base_(other.base_),
-          iterator_(other.iterator_) {}
-
-    const ParamGeneratorInterface<T>* const base_;
-    typename ContainerType::const_iterator iterator_;
-    // A cached value of *iterator_. We keep it here to allow access by
-    // pointer in the wrapping iterator's operator->().
-    // value_ needs to be mutable to be accessed in Current().
-    // Use of scoped_ptr helps manage cached value's lifetime,
-    // which is bound by the lifespan of the iterator itself.
-    mutable scoped_ptr<const T> value_;
-  };  // class ValuesInIteratorRangeGenerator::Iterator
-
-  // No implementation - assignment is unsupported.
-  void operator=(const ValuesInIteratorRangeGenerator& other);
-
-  const ContainerType container_;
-};  // class ValuesInIteratorRangeGenerator
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// Stores a parameter value and later creates tests parameterized with that
-// value.
-template <class TestClass>
-class ParameterizedTestFactory : public TestFactoryBase {
- public:
-  typedef typename TestClass::ParamType ParamType;
-  explicit ParameterizedTestFactory(ParamType parameter) :
-      parameter_(parameter) {}
-  virtual Test* CreateTest() {
-    TestClass::SetParam(&parameter_);
-    return new TestClass();
-  }
-
- private:
-  const ParamType parameter_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory);
-};
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// TestMetaFactoryBase is a base class for meta-factories that create
-// test factories for passing into MakeAndRegisterTestInfo function.
-template <class ParamType>
-class TestMetaFactoryBase {
- public:
-  virtual ~TestMetaFactoryBase() {}
-
-  virtual TestFactoryBase* CreateTestFactory(ParamType parameter) = 0;
-};
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// TestMetaFactory creates test factories for passing into
-// MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives
-// ownership of test factory pointer, same factory object cannot be passed
-// into that method twice. But ParameterizedTestCaseInfo is going to call
-// it for each Test/Parameter value combination. Thus it needs meta factory
-// creator class.
-template <class TestCase>
-class TestMetaFactory
-    : public TestMetaFactoryBase<typename TestCase::ParamType> {
- public:
-  typedef typename TestCase::ParamType ParamType;
-
-  TestMetaFactory() {}
-
-  virtual TestFactoryBase* CreateTestFactory(ParamType parameter) {
-    return new ParameterizedTestFactory<TestCase>(parameter);
-  }
-
- private:
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestMetaFactory);
-};
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// ParameterizedTestCaseInfoBase is a generic interface
-// to ParameterizedTestCaseInfo classes. ParameterizedTestCaseInfoBase
-// accumulates test information provided by TEST_P macro invocations
-// and generators provided by INSTANTIATE_TEST_CASE_P macro invocations
-// and uses that information to register all resulting test instances
-// in RegisterTests method. The ParameterizeTestCaseRegistry class holds
-// a collection of pointers to the ParameterizedTestCaseInfo objects
-// and calls RegisterTests() on each of them when asked.
-class ParameterizedTestCaseInfoBase {
- public:
-  virtual ~ParameterizedTestCaseInfoBase() {}
-
-  // Base part of test case name for display purposes.
-  virtual const string& GetTestCaseName() const = 0;
-  // Test case id to verify identity.
-  virtual TypeId GetTestCaseTypeId() const = 0;
-  // UnitTest class invokes this method to register tests in this
-  // test case right before running them in RUN_ALL_TESTS macro.
-  // This method should not be called more then once on any single
-  // instance of a ParameterizedTestCaseInfoBase derived class.
-  virtual void RegisterTests() = 0;
-
- protected:
-  ParameterizedTestCaseInfoBase() {}
-
- private:
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfoBase);
-};
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// ParameterizedTestCaseInfo accumulates tests obtained from TEST_P
-// macro invocations for a particular test case and generators
-// obtained from INSTANTIATE_TEST_CASE_P macro invocations for that
-// test case. It registers tests with all values generated by all
-// generators when asked.
-template <class TestCase>
-class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase {
- public:
-  // ParamType and GeneratorCreationFunc are private types but are required
-  // for declarations of public methods AddTestPattern() and
-  // AddTestCaseInstantiation().
-  typedef typename TestCase::ParamType ParamType;
-  // A function that returns an instance of appropriate generator type.
-  typedef ParamGenerator<ParamType>(GeneratorCreationFunc)();
-
-  explicit ParameterizedTestCaseInfo(const char* name)
-      : test_case_name_(name) {}
-
-  // Test case base name for display purposes.
-  virtual const string& GetTestCaseName() const { return test_case_name_; }
-  // Test case id to verify identity.
-  virtual TypeId GetTestCaseTypeId() const { return GetTypeId<TestCase>(); }
-  // TEST_P macro uses AddTestPattern() to record information
-  // about a single test in a LocalTestInfo structure.
-  // test_case_name is the base name of the test case (without invocation
-  // prefix). test_base_name is the name of an individual test without
-  // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is
-  // test case base name and DoBar is test base name.
-  void AddTestPattern(const char* test_case_name,
-                      const char* test_base_name,
-                      TestMetaFactoryBase<ParamType>* meta_factory) {
-    tests_.push_back(linked_ptr<TestInfo>(new TestInfo(test_case_name,
-                                                       test_base_name,
-                                                       meta_factory)));
-  }
-  // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information
-  // about a generator.
-  int AddTestCaseInstantiation(const string& instantiation_name,
-                               GeneratorCreationFunc* func,
-                               const char* /* file */,
-                               int /* line */) {
-    instantiations_.push_back(::std::make_pair(instantiation_name, func));
-    return 0;  // Return value used only to run this method in namespace scope.
-  }
-  // UnitTest class invokes this method to register tests in this test case
-  // test cases right before running tests in RUN_ALL_TESTS macro.
-  // This method should not be called more then once on any single
-  // instance of a ParameterizedTestCaseInfoBase derived class.
-  // UnitTest has a guard to prevent from calling this method more then once.
-  virtual void RegisterTests() {
-    for (typename TestInfoContainer::iterator test_it = tests_.begin();
-         test_it != tests_.end(); ++test_it) {
-      linked_ptr<TestInfo> test_info = *test_it;
-      for (typename InstantiationContainer::iterator gen_it =
-               instantiations_.begin(); gen_it != instantiations_.end();
-               ++gen_it) {
-        const string& instantiation_name = gen_it->first;
-        ParamGenerator<ParamType> generator((*gen_it->second)());
-
-        Message test_case_name_stream;
-        if ( !instantiation_name.empty() )
-          test_case_name_stream << instantiation_name << "/";
-        test_case_name_stream << test_info->test_case_base_name;
-
-        int i = 0;
-        for (typename ParamGenerator<ParamType>::iterator param_it =
-                 generator.begin();
-             param_it != generator.end(); ++param_it, ++i) {
-          Message test_name_stream;
-          test_name_stream << test_info->test_base_name << "/" << i;
-          MakeAndRegisterTestInfo(
-              test_case_name_stream.GetString().c_str(),
-              test_name_stream.GetString().c_str(),
-              NULL,  // No type parameter.
-              PrintToString(*param_it).c_str(),
-              GetTestCaseTypeId(),
-              TestCase::SetUpTestCase,
-              TestCase::TearDownTestCase,
-              test_info->test_meta_factory->CreateTestFactory(*param_it));
-        }  // for param_it
-      }  // for gen_it
-    }  // for test_it
-  }  // RegisterTests
-
- private:
-  // LocalTestInfo structure keeps information about a single test registered
-  // with TEST_P macro.
-  struct TestInfo {
-    TestInfo(const char* a_test_case_base_name,
-             const char* a_test_base_name,
-             TestMetaFactoryBase<ParamType>* a_test_meta_factory) :
-        test_case_base_name(a_test_case_base_name),
-        test_base_name(a_test_base_name),
-        test_meta_factory(a_test_meta_factory) {}
-
-    const string test_case_base_name;
-    const string test_base_name;
-    const scoped_ptr<TestMetaFactoryBase<ParamType> > test_meta_factory;
-  };
-  typedef ::std::vector<linked_ptr<TestInfo> > TestInfoContainer;
-  // Keeps pairs of <Instantiation name, Sequence generator creation function>
-  // received from INSTANTIATE_TEST_CASE_P macros.
-  typedef ::std::vector<std::pair<string, GeneratorCreationFunc*> >
-      InstantiationContainer;
-
-  const string test_case_name_;
-  TestInfoContainer tests_;
-  InstantiationContainer instantiations_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfo);
-};  // class ParameterizedTestCaseInfo
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// ParameterizedTestCaseRegistry contains a map of ParameterizedTestCaseInfoBase
-// classes accessed by test case names. TEST_P and INSTANTIATE_TEST_CASE_P
-// macros use it to locate their corresponding ParameterizedTestCaseInfo
-// descriptors.
-class ParameterizedTestCaseRegistry {
- public:
-  ParameterizedTestCaseRegistry() {}
-  ~ParameterizedTestCaseRegistry() {
-    for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
-         it != test_case_infos_.end(); ++it) {
-      delete *it;
-    }
-  }
-
-  // Looks up or creates and returns a structure containing information about
-  // tests and instantiations of a particular test case.
-  template <class TestCase>
-  ParameterizedTestCaseInfo<TestCase>* GetTestCasePatternHolder(
-      const char* test_case_name,
-      const char* file,
-      int line) {
-    ParameterizedTestCaseInfo<TestCase>* typed_test_info = NULL;
-    for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
-         it != test_case_infos_.end(); ++it) {
-      if ((*it)->GetTestCaseName() == test_case_name) {
-        if ((*it)->GetTestCaseTypeId() != GetTypeId<TestCase>()) {
-          // Complain about incorrect usage of Google Test facilities
-          // and terminate the program since we cannot guaranty correct
-          // test case setup and tear-down in this case.
-          ReportInvalidTestCaseType(test_case_name,  file, line);
-          posix::Abort();
-        } else {
-          // At this point we are sure that the object we found is of the same
-          // type we are looking for, so we downcast it to that type
-          // without further checks.
-          typed_test_info = CheckedDowncastToActualType<
-              ParameterizedTestCaseInfo<TestCase> >(*it);
-        }
-        break;
-      }
-    }
-    if (typed_test_info == NULL) {
-      typed_test_info = new ParameterizedTestCaseInfo<TestCase>(test_case_name);
-      test_case_infos_.push_back(typed_test_info);
-    }
-    return typed_test_info;
-  }
-  void RegisterTests() {
-    for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
-         it != test_case_infos_.end(); ++it) {
-      (*it)->RegisterTests();
-    }
-  }
-
- private:
-  typedef ::std::vector<ParameterizedTestCaseInfoBase*> TestCaseInfoContainer;
-
-  TestCaseInfoContainer test_case_infos_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseRegistry);
-};
-
-}  // namespace internal
-}  // namespace testing
-
-#endif  //  GTEST_HAS_PARAM_TEST
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-port.h b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-port.h
deleted file mode 100644
index f38222d..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-port.h
+++ /dev/null
@@ -1,1788 +0,0 @@
-// Copyright 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Authors: wan at google.com (Zhanyong Wan)
-//
-// Low-level types and utilities for porting Google Test to various
-// platforms.  They are subject to change without notice.  DO NOT USE
-// THEM IN USER CODE.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
-
-// The user can define the following macros in the build script to
-// control Google Test's behavior.  If the user doesn't define a macro
-// in this list, Google Test will define it.
-//
-//   GTEST_HAS_CLONE          - Define it to 1/0 to indicate that clone(2)
-//                              is/isn't available.
-//   GTEST_HAS_EXCEPTIONS     - Define it to 1/0 to indicate that exceptions
-//                              are enabled.
-//   GTEST_HAS_GLOBAL_STRING  - Define it to 1/0 to indicate that ::string
-//                              is/isn't available (some systems define
-//                              ::string, which is different to std::string).
-//   GTEST_HAS_GLOBAL_WSTRING - Define it to 1/0 to indicate that ::string
-//                              is/isn't available (some systems define
-//                              ::wstring, which is different to std::wstring).
-//   GTEST_HAS_POSIX_RE       - Define it to 1/0 to indicate that POSIX regular
-//                              expressions are/aren't available.
-//   GTEST_HAS_PTHREAD        - Define it to 1/0 to indicate that <pthread.h>
-//                              is/isn't available.
-//   GTEST_HAS_RTTI           - Define it to 1/0 to indicate that RTTI is/isn't
-//                              enabled.
-//   GTEST_HAS_STD_WSTRING    - Define it to 1/0 to indicate that
-//                              std::wstring does/doesn't work (Google Test can
-//                              be used where std::wstring is unavailable).
-//   GTEST_HAS_TR1_TUPLE      - Define it to 1/0 to indicate tr1::tuple
-//                              is/isn't available.
-//   GTEST_HAS_SEH            - Define it to 1/0 to indicate whether the
-//                              compiler supports Microsoft's "Structured
-//                              Exception Handling".
-//   GTEST_HAS_STREAM_REDIRECTION
-//                            - Define it to 1/0 to indicate whether the
-//                              platform supports I/O stream redirection using
-//                              dup() and dup2().
-//   GTEST_USE_OWN_TR1_TUPLE  - Define it to 1/0 to indicate whether Google
-//                              Test's own tr1 tuple implementation should be
-//                              used.  Unused when the user sets
-//                              GTEST_HAS_TR1_TUPLE to 0.
-//   GTEST_LINKED_AS_SHARED_LIBRARY
-//                            - Define to 1 when compiling tests that use
-//                              Google Test as a shared library (known as
-//                              DLL on Windows).
-//   GTEST_CREATE_SHARED_LIBRARY
-//                            - Define to 1 when compiling Google Test itself
-//                              as a shared library.
-
-// This header defines the following utilities:
-//
-// Macros indicating the current platform (defined to 1 if compiled on
-// the given platform; otherwise undefined):
-//   GTEST_OS_AIX      - IBM AIX
-//   GTEST_OS_CYGWIN   - Cygwin
-//   GTEST_OS_HPUX     - HP-UX
-//   GTEST_OS_LINUX    - Linux
-//     GTEST_OS_LINUX_ANDROID - Google Android
-//   GTEST_OS_MAC      - Mac OS X
-//   GTEST_OS_NACL     - Google Native Client (NaCl)
-//   GTEST_OS_SOLARIS  - Sun Solaris
-//   GTEST_OS_SYMBIAN  - Symbian
-//   GTEST_OS_WINDOWS  - Windows (Desktop, MinGW, or Mobile)
-//     GTEST_OS_WINDOWS_DESKTOP  - Windows Desktop
-//     GTEST_OS_WINDOWS_MINGW    - MinGW
-//     GTEST_OS_WINDOWS_MOBILE   - Windows Mobile
-//   GTEST_OS_ZOS      - z/OS
-//
-// Among the platforms, Cygwin, Linux, Max OS X, and Windows have the
-// most stable support.  Since core members of the Google Test project
-// don't have access to other platforms, support for them may be less
-// stable.  If you notice any problems on your platform, please notify
-// googletestframework at googlegroups.com (patches for fixing them are
-// even more welcome!).
-//
-// Note that it is possible that none of the GTEST_OS_* macros are defined.
-//
-// Macros indicating available Google Test features (defined to 1 if
-// the corresponding feature is supported; otherwise undefined):
-//   GTEST_HAS_COMBINE      - the Combine() function (for value-parameterized
-//                            tests)
-//   GTEST_HAS_DEATH_TEST   - death tests
-//   GTEST_HAS_PARAM_TEST   - value-parameterized tests
-//   GTEST_HAS_TYPED_TEST   - typed tests
-//   GTEST_HAS_TYPED_TEST_P - type-parameterized tests
-//   GTEST_USES_POSIX_RE    - enhanced POSIX regex is used. Do not confuse with
-//                            GTEST_HAS_POSIX_RE (see above) which users can
-//                            define themselves.
-//   GTEST_USES_SIMPLE_RE   - our own simple regex is used;
-//                            the above two are mutually exclusive.
-//   GTEST_CAN_COMPARE_NULL - accepts untyped NULL in EXPECT_EQ().
-//
-// Macros for basic C++ coding:
-//   GTEST_AMBIGUOUS_ELSE_BLOCKER_ - for disabling a gcc warning.
-//   GTEST_ATTRIBUTE_UNUSED_  - declares that a class' instances or a
-//                              variable don't have to be used.
-//   GTEST_DISALLOW_ASSIGN_   - disables operator=.
-//   GTEST_DISALLOW_COPY_AND_ASSIGN_ - disables copy ctor and operator=.
-//   GTEST_MUST_USE_RESULT_   - declares that a function's result must be used.
-//
-// Synchronization:
-//   Mutex, MutexLock, ThreadLocal, GetThreadCount()
-//                  - synchronization primitives.
-//   GTEST_IS_THREADSAFE - defined to 1 to indicate that the above
-//                         synchronization primitives have real implementations
-//                         and Google Test is thread-safe; or 0 otherwise.
-//
-// Template meta programming:
-//   is_pointer     - as in TR1; needed on Symbian and IBM XL C/C++ only.
-//   IteratorTraits - partial implementation of std::iterator_traits, which
-//                    is not available in libCstd when compiled with Sun C++.
-//
-// Smart pointers:
-//   scoped_ptr     - as in TR2.
-//
-// Regular expressions:
-//   RE             - a simple regular expression class using the POSIX
-//                    Extended Regular Expression syntax on UNIX-like
-//                    platforms, or a reduced regular exception syntax on
-//                    other platforms, including Windows.
-//
-// Logging:
-//   GTEST_LOG_()   - logs messages at the specified severity level.
-//   LogToStderr()  - directs all log messages to stderr.
-//   FlushInfoLog() - flushes informational log messages.
-//
-// Stdout and stderr capturing:
-//   CaptureStdout()     - starts capturing stdout.
-//   GetCapturedStdout() - stops capturing stdout and returns the captured
-//                         string.
-//   CaptureStderr()     - starts capturing stderr.
-//   GetCapturedStderr() - stops capturing stderr and returns the captured
-//                         string.
-//
-// Integer types:
-//   TypeWithSize   - maps an integer to a int type.
-//   Int32, UInt32, Int64, UInt64, TimeInMillis
-//                  - integers of known sizes.
-//   BiggestInt     - the biggest signed integer type.
-//
-// Command-line utilities:
-//   GTEST_FLAG()       - references a flag.
-//   GTEST_DECLARE_*()  - declares a flag.
-//   GTEST_DEFINE_*()   - defines a flag.
-//   GetArgvs()         - returns the command line as a vector of strings.
-//
-// Environment variable utilities:
-//   GetEnv()             - gets the value of an environment variable.
-//   BoolFromGTestEnv()   - parses a bool environment variable.
-//   Int32FromGTestEnv()  - parses an Int32 environment variable.
-//   StringFromGTestEnv() - parses a string environment variable.
-
-#include <ctype.h>   // for isspace, etc
-#include <stddef.h>  // for ptrdiff_t
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#ifndef _WIN32_WCE
-# include <sys/types.h>
-# include <sys/stat.h>
-#endif  // !_WIN32_WCE
-
-#include <iostream>  // NOLINT
-#include <sstream>  // NOLINT
-#include <string>  // NOLINT
-
-#define GTEST_DEV_EMAIL_ "googletestframework@@googlegroups.com"
-#define GTEST_FLAG_PREFIX_ "gtest_"
-#define GTEST_FLAG_PREFIX_DASH_ "gtest-"
-#define GTEST_FLAG_PREFIX_UPPER_ "GTEST_"
-#define GTEST_NAME_ "Google Test"
-#define GTEST_PROJECT_URL_ "http://code.google.com/p/googletest/"
-
-// Determines the version of gcc that is used to compile this.
-#ifdef __GNUC__
-// 40302 means version 4.3.2.
-# define GTEST_GCC_VER_ \
-    (__GNUC__*10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__)
-#endif  // __GNUC__
-
-// Determines the platform on which Google Test is compiled.
-#ifdef __CYGWIN__
-# define GTEST_OS_CYGWIN 1
-#elif defined __SYMBIAN32__
-# define GTEST_OS_SYMBIAN 1
-#elif defined _WIN32
-# define GTEST_OS_WINDOWS 1
-# ifdef _WIN32_WCE
-#  define GTEST_OS_WINDOWS_MOBILE 1
-# elif defined(__MINGW__) || defined(__MINGW32__)
-#  define GTEST_OS_WINDOWS_MINGW 1
-# else
-#  define GTEST_OS_WINDOWS_DESKTOP 1
-# endif  // _WIN32_WCE
-#elif defined __APPLE__
-# define GTEST_OS_MAC 1
-#elif defined __linux__
-# define GTEST_OS_LINUX 1
-# ifdef ANDROID
-#  define GTEST_OS_LINUX_ANDROID 1
-# endif  // ANDROID
-#elif defined __MVS__
-# define GTEST_OS_ZOS 1
-#elif defined(__sun) && defined(__SVR4)
-# define GTEST_OS_SOLARIS 1
-#elif defined(_AIX)
-# define GTEST_OS_AIX 1
-#elif defined(__hpux)
-# define GTEST_OS_HPUX 1
-#elif defined __native_client__
-# define GTEST_OS_NACL 1
-#endif  // __CYGWIN__
-
-// Brings in definitions for functions used in the testing::internal::posix
-// namespace (read, write, close, chdir, isatty, stat). We do not currently
-// use them on Windows Mobile.
-#if !GTEST_OS_WINDOWS
-// This assumes that non-Windows OSes provide unistd.h. For OSes where this
-// is not the case, we need to include headers that provide the functions
-// mentioned above.
-# include <unistd.h>
-# if !GTEST_OS_NACL
-// TODO(vladl at google.com): Remove this condition when Native Client SDK adds
-// strings.h (tracked in
-// http://code.google.com/p/nativeclient/issues/detail?id=1175).
-#  include <strings.h>  // Native Client doesn't provide strings.h.
-# endif
-#elif !GTEST_OS_WINDOWS_MOBILE
-# include <direct.h>
-# include <io.h>
-#endif
-
-// Defines this to true iff Google Test can use POSIX regular expressions.
-#ifndef GTEST_HAS_POSIX_RE
-# define GTEST_HAS_POSIX_RE (!GTEST_OS_WINDOWS)
-#endif
-
-#if GTEST_HAS_POSIX_RE
-
-// On some platforms, <regex.h> needs someone to define size_t, and
-// won't compile otherwise.  We can #include it here as we already
-// included <stdlib.h>, which is guaranteed to define size_t through
-// <stddef.h>.
-# include <regex.h>  // NOLINT
-
-# define GTEST_USES_POSIX_RE 1
-
-#elif GTEST_OS_WINDOWS
-
-// <regex.h> is not available on Windows.  Use our own simple regex
-// implementation instead.
-# define GTEST_USES_SIMPLE_RE 1
-
-#else
-
-// <regex.h> may not be available on this platform.  Use our own
-// simple regex implementation instead.
-# define GTEST_USES_SIMPLE_RE 1
-
-#endif  // GTEST_HAS_POSIX_RE
-
-#ifndef GTEST_HAS_EXCEPTIONS
-// The user didn't tell us whether exceptions are enabled, so we need
-// to figure it out.
-# if defined(_MSC_VER) || defined(__BORLANDC__)
-// MSVC's and C++Builder's implementations of the STL use the _HAS_EXCEPTIONS
-// macro to enable exceptions, so we'll do the same.
-// Assumes that exceptions are enabled by default.
-#  ifndef _HAS_EXCEPTIONS
-#   define _HAS_EXCEPTIONS 1
-#  endif  // _HAS_EXCEPTIONS
-#  define GTEST_HAS_EXCEPTIONS _HAS_EXCEPTIONS
-# elif defined(__GNUC__) && __EXCEPTIONS
-// gcc defines __EXCEPTIONS to 1 iff exceptions are enabled.
-#  define GTEST_HAS_EXCEPTIONS 1
-# elif defined(__SUNPRO_CC)
-// Sun Pro CC supports exceptions.  However, there is no compile-time way of
-// detecting whether they are enabled or not.  Therefore, we assume that
-// they are enabled unless the user tells us otherwise.
-#  define GTEST_HAS_EXCEPTIONS 1
-# elif defined(__IBMCPP__) && __EXCEPTIONS
-// xlC defines __EXCEPTIONS to 1 iff exceptions are enabled.
-#  define GTEST_HAS_EXCEPTIONS 1
-# elif defined(__HP_aCC)
-// Exception handling is in effect by default in HP aCC compiler. It has to
-// be turned of by +noeh compiler option if desired.
-#  define GTEST_HAS_EXCEPTIONS 1
-# else
-// For other compilers, we assume exceptions are disabled to be
-// conservative.
-#  define GTEST_HAS_EXCEPTIONS 0
-# endif  // defined(_MSC_VER) || defined(__BORLANDC__)
-#endif  // GTEST_HAS_EXCEPTIONS
-
-#if !defined(GTEST_HAS_STD_STRING)
-// Even though we don't use this macro any longer, we keep it in case
-// some clients still depend on it.
-# define GTEST_HAS_STD_STRING 1
-#elif !GTEST_HAS_STD_STRING
-// The user told us that ::std::string isn't available.
-# error "Google Test cannot be used where ::std::string isn't available."
-#endif  // !defined(GTEST_HAS_STD_STRING)
-
-#ifndef GTEST_HAS_GLOBAL_STRING
-// The user didn't tell us whether ::string is available, so we need
-// to figure it out.
-
-# define GTEST_HAS_GLOBAL_STRING 0
-
-#endif  // GTEST_HAS_GLOBAL_STRING
-
-#ifndef GTEST_HAS_STD_WSTRING
-// The user didn't tell us whether ::std::wstring is available, so we need
-// to figure it out.
-// TODO(wan at google.com): uses autoconf to detect whether ::std::wstring
-//   is available.
-
-// Cygwin 1.7 and below doesn't support ::std::wstring.
-// Solaris' libc++ doesn't support it either.  Android has
-// no support for it at least as recent as Froyo (2.2).
-# define GTEST_HAS_STD_WSTRING \
-    (!(GTEST_OS_LINUX_ANDROID || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS))
-
-#endif  // GTEST_HAS_STD_WSTRING
-
-#ifndef GTEST_HAS_GLOBAL_WSTRING
-// The user didn't tell us whether ::wstring is available, so we need
-// to figure it out.
-# define GTEST_HAS_GLOBAL_WSTRING \
-    (GTEST_HAS_STD_WSTRING && GTEST_HAS_GLOBAL_STRING)
-#endif  // GTEST_HAS_GLOBAL_WSTRING
-
-// Determines whether RTTI is available.
-#ifndef GTEST_HAS_RTTI
-// The user didn't tell us whether RTTI is enabled, so we need to
-// figure it out.
-
-# ifdef _MSC_VER
-
-#  ifdef _CPPRTTI  // MSVC defines this macro iff RTTI is enabled.
-#   define GTEST_HAS_RTTI 1
-#  else
-#   define GTEST_HAS_RTTI 0
-#  endif
-
-// Starting with version 4.3.2, gcc defines __GXX_RTTI iff RTTI is enabled.
-# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40302)
-
-#  ifdef __GXX_RTTI
-#   define GTEST_HAS_RTTI 1
-#  else
-#   define GTEST_HAS_RTTI 0
-#  endif  // __GXX_RTTI
-
-// Starting with version 9.0 IBM Visual Age defines __RTTI_ALL__ to 1 if
-// both the typeid and dynamic_cast features are present.
-# elif defined(__IBMCPP__) && (__IBMCPP__ >= 900)
-
-#  ifdef __RTTI_ALL__
-#   define GTEST_HAS_RTTI 1
-#  else
-#   define GTEST_HAS_RTTI 0
-#  endif
-
-# else
-
-// For all other compilers, we assume RTTI is enabled.
-#  define GTEST_HAS_RTTI 1
-
-# endif  // _MSC_VER
-
-#endif  // GTEST_HAS_RTTI
-
-// It's this header's responsibility to #include <typeinfo> when RTTI
-// is enabled.
-#if GTEST_HAS_RTTI
-# include <typeinfo>
-#endif
-
-// Determines whether Google Test can use the pthreads library.
-#ifndef GTEST_HAS_PTHREAD
-// The user didn't tell us explicitly, so we assume pthreads support is
-// available on Linux and Mac.
-//
-// To disable threading support in Google Test, add -DGTEST_HAS_PTHREAD=0
-// to your compiler flags.
-# define GTEST_HAS_PTHREAD (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_HPUX)
-#endif  // GTEST_HAS_PTHREAD
-
-#if GTEST_HAS_PTHREAD
-// gtest-port.h guarantees to #include <pthread.h> when GTEST_HAS_PTHREAD is
-// true.
-# include <pthread.h>  // NOLINT
-
-// For timespec and nanosleep, used below.
-# include <time.h>  // NOLINT
-#endif
-
-// Determines whether Google Test can use tr1/tuple.  You can define
-// this macro to 0 to prevent Google Test from using tuple (any
-// feature depending on tuple with be disabled in this mode).
-#ifndef GTEST_HAS_TR1_TUPLE
-// The user didn't tell us not to do it, so we assume it's OK.
-# define GTEST_HAS_TR1_TUPLE 1
-#endif  // GTEST_HAS_TR1_TUPLE
-
-// Determines whether Google Test's own tr1 tuple implementation
-// should be used.
-#ifndef GTEST_USE_OWN_TR1_TUPLE
-// The user didn't tell us, so we need to figure it out.
-
-// We use our own TR1 tuple if we aren't sure the user has an
-// implementation of it already.  At this time, GCC 4.0.0+ and MSVC
-// 2010 are the only mainstream compilers that come with a TR1 tuple
-// implementation.  NVIDIA's CUDA NVCC compiler pretends to be GCC by
-// defining __GNUC__ and friends, but cannot compile GCC's tuple
-// implementation.  MSVC 2008 (9.0) provides TR1 tuple in a 323 MB
-// Feature Pack download, which we cannot assume the user has.
-# if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000)) \
-    || _MSC_VER >= 1600
-#  define GTEST_USE_OWN_TR1_TUPLE 0
-# else
-#  define GTEST_USE_OWN_TR1_TUPLE 1
-# endif
-
-#endif  // GTEST_USE_OWN_TR1_TUPLE
-
-// To avoid conditional compilation everywhere, we make it
-// gtest-port.h's responsibility to #include the header implementing
-// tr1/tuple.
-#if GTEST_HAS_TR1_TUPLE
-
-# if GTEST_USE_OWN_TR1_TUPLE
-#  include "gtest/internal/gtest-tuple.h"
-# elif GTEST_OS_SYMBIAN
-
-// On Symbian, BOOST_HAS_TR1_TUPLE causes Boost's TR1 tuple library to
-// use STLport's tuple implementation, which unfortunately doesn't
-// work as the copy of STLport distributed with Symbian is incomplete.
-// By making sure BOOST_HAS_TR1_TUPLE is undefined, we force Boost to
-// use its own tuple implementation.
-#  ifdef BOOST_HAS_TR1_TUPLE
-#   undef BOOST_HAS_TR1_TUPLE
-#  endif  // BOOST_HAS_TR1_TUPLE
-
-// This prevents <boost/tr1/detail/config.hpp>, which defines
-// BOOST_HAS_TR1_TUPLE, from being #included by Boost's <tuple>.
-#  define BOOST_TR1_DETAIL_CONFIG_HPP_INCLUDED
-#  include <tuple>
-
-# elif defined(__GNUC__) && (GTEST_GCC_VER_ >= 40000)
-// GCC 4.0+ implements tr1/tuple in the <tr1/tuple> header.  This does
-// not conform to the TR1 spec, which requires the header to be <tuple>.
-
-#  if !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302
-// Until version 4.3.2, gcc has a bug that causes <tr1/functional>,
-// which is #included by <tr1/tuple>, to not compile when RTTI is
-// disabled.  _TR1_FUNCTIONAL is the header guard for
-// <tr1/functional>.  Hence the following #define is a hack to prevent
-// <tr1/functional> from being included.
-#   define _TR1_FUNCTIONAL 1
-#   include <tr1/tuple>
-#   undef _TR1_FUNCTIONAL  // Allows the user to #include
-                        // <tr1/functional> if he chooses to.
-#  else
-#  if defined (__cplusplus) && __cplusplus > 199711L
-#   include <tuple>
-namespace std {
-    namespace tr1 {
-        using std::tuple;
-        using std::tuple_element;
-        using std::get;
-        using std::tuple_size;
-        using std::make_tuple;
-    }
-}
-#  else
-#   include <tr1/tuple>  // NOLINT
-#  endif
-#  endif  // !GTEST_HAS_RTTI && GTEST_GCC_VER_ < 40302
-
-# else
-// If the compiler is not GCC 4.0+, we assume the user is using a
-// spec-conforming TR1 implementation.
-#  include <tuple>  // NOLINT
-# endif  // GTEST_USE_OWN_TR1_TUPLE
-
-#endif  // GTEST_HAS_TR1_TUPLE
-
-// Determines whether clone(2) is supported.
-// Usually it will only be available on Linux, excluding
-// Linux on the Itanium architecture.
-// Also see http://linux.die.net/man/2/clone.
-#ifndef GTEST_HAS_CLONE
-// The user didn't tell us, so we need to figure it out.
-
-# if GTEST_OS_LINUX && !defined(__ia64__)
-#  define GTEST_HAS_CLONE 1
-# else
-#  define GTEST_HAS_CLONE 0
-# endif  // GTEST_OS_LINUX && !defined(__ia64__)
-
-#endif  // GTEST_HAS_CLONE
-
-// Determines whether to support stream redirection. This is used to test
-// output correctness and to implement death tests.
-#ifndef GTEST_HAS_STREAM_REDIRECTION
-// By default, we assume that stream redirection is supported on all
-// platforms except known mobile ones.
-# if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN
-#  define GTEST_HAS_STREAM_REDIRECTION 0
-# else
-#  define GTEST_HAS_STREAM_REDIRECTION 1
-# endif  // !GTEST_OS_WINDOWS_MOBILE && !GTEST_OS_SYMBIAN
-#endif  // GTEST_HAS_STREAM_REDIRECTION
-
-// Determines whether to support death tests.
-// Google Test does not support death tests for VC 7.1 and earlier as
-// abort() in a VC 7.1 application compiled as GUI in debug config
-// pops up a dialog window that cannot be suppressed programmatically.
-#if (GTEST_OS_LINUX || GTEST_OS_MAC || GTEST_OS_CYGWIN || GTEST_OS_SOLARIS || \
-     (GTEST_OS_WINDOWS_DESKTOP && _MSC_VER >= 1400) || \
-     GTEST_OS_WINDOWS_MINGW || GTEST_OS_AIX || GTEST_OS_HPUX)
-# define GTEST_HAS_DEATH_TEST 1
-# include <vector>  // NOLINT
-#endif
-
-// We don't support MSVC 7.1 with exceptions disabled now.  Therefore
-// all the compilers we care about are adequate for supporting
-// value-parameterized tests.
-#define GTEST_HAS_PARAM_TEST 1
-
-// Determines whether to support type-driven tests.
-
-// Typed tests need <typeinfo> and variadic macros, which GCC, VC++ 8.0,
-// Sun Pro CC, IBM Visual Age, and HP aCC support.
-#if defined(__GNUC__) || (_MSC_VER >= 1400) || defined(__SUNPRO_CC) || \
-    defined(__IBMCPP__) || defined(__HP_aCC)
-# define GTEST_HAS_TYPED_TEST 1
-# define GTEST_HAS_TYPED_TEST_P 1
-#endif
-
-// Determines whether to support Combine(). This only makes sense when
-// value-parameterized tests are enabled.  The implementation doesn't
-// work on Sun Studio since it doesn't understand templated conversion
-// operators.
-#if GTEST_HAS_PARAM_TEST && GTEST_HAS_TR1_TUPLE && !defined(__SUNPRO_CC)
-# define GTEST_HAS_COMBINE 1
-#endif
-
-// Determines whether the system compiler uses UTF-16 for encoding wide strings.
-#define GTEST_WIDE_STRING_USES_UTF16_ \
-    (GTEST_OS_WINDOWS || GTEST_OS_CYGWIN || GTEST_OS_SYMBIAN || GTEST_OS_AIX)
-
-// Determines whether test results can be streamed to a socket.
-#if GTEST_OS_LINUX
-# define GTEST_CAN_STREAM_RESULTS_ 1
-#endif
-
-// Defines some utility macros.
-
-// The GNU compiler emits a warning if nested "if" statements are followed by
-// an "else" statement and braces are not used to explicitly disambiguate the
-// "else" binding.  This leads to problems with code like:
-//
-//   if (gate)
-//     ASSERT_*(condition) << "Some message";
-//
-// The "switch (0) case 0:" idiom is used to suppress this.
-#ifdef __INTEL_COMPILER
-# define GTEST_AMBIGUOUS_ELSE_BLOCKER_
-#else
-# define GTEST_AMBIGUOUS_ELSE_BLOCKER_ switch (0) case 0: default:  // NOLINT
-#endif
-
-// Use this annotation at the end of a struct/class definition to
-// prevent the compiler from optimizing away instances that are never
-// used.  This is useful when all interesting logic happens inside the
-// c'tor and / or d'tor.  Example:
-//
-//   struct Foo {
-//     Foo() { ... }
-//   } GTEST_ATTRIBUTE_UNUSED_;
-//
-// Also use it after a variable or parameter declaration to tell the
-// compiler the variable/parameter does not have to be used.
-#if defined(__GNUC__) && !defined(COMPILER_ICC)
-# define GTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused))
-#else
-# define GTEST_ATTRIBUTE_UNUSED_
-#endif
-
-// A macro to disallow operator=
-// This should be used in the private: declarations for a class.
-#define GTEST_DISALLOW_ASSIGN_(type)\
-  void operator=(type const &)
-
-// A macro to disallow copy constructor and operator=
-// This should be used in the private: declarations for a class.
-#define GTEST_DISALLOW_COPY_AND_ASSIGN_(type)\
-  type(type const &);\
-  GTEST_DISALLOW_ASSIGN_(type)
-
-// Tell the compiler to warn about unused return values for functions declared
-// with this macro.  The macro should be used on function declarations
-// following the argument list:
-//
-//   Sprocket* AllocateSprocket() GTEST_MUST_USE_RESULT_;
-#if defined(__GNUC__) && (GTEST_GCC_VER_ >= 30400) && !defined(COMPILER_ICC)
-# define GTEST_MUST_USE_RESULT_ __attribute__ ((warn_unused_result))
-#else
-# define GTEST_MUST_USE_RESULT_
-#endif  // __GNUC__ && (GTEST_GCC_VER_ >= 30400) && !COMPILER_ICC
-
-// Determine whether the compiler supports Microsoft's Structured Exception
-// Handling.  This is supported by several Windows compilers but generally
-// does not exist on any other system.
-#ifndef GTEST_HAS_SEH
-// The user didn't tell us, so we need to figure it out.
-
-# if defined(_MSC_VER) || defined(__BORLANDC__)
-// These two compilers are known to support SEH.
-#  define GTEST_HAS_SEH 1
-# else
-// Assume no SEH.
-#  define GTEST_HAS_SEH 0
-# endif
-
-#endif  // GTEST_HAS_SEH
-
-#ifdef _MSC_VER
-
-# if GTEST_LINKED_AS_SHARED_LIBRARY
-#  define GTEST_API_ __declspec(dllimport)
-# elif GTEST_CREATE_SHARED_LIBRARY
-#  define GTEST_API_ __declspec(dllexport)
-# endif
-
-#endif  // _MSC_VER
-
-#ifndef GTEST_API_
-# define GTEST_API_
-#endif
-
-#ifdef __GNUC__
-// Ask the compiler to never inline a given function.
-# define GTEST_NO_INLINE_ __attribute__((noinline))
-#else
-# define GTEST_NO_INLINE_
-#endif
-
-namespace testing {
-
-class Message;
-
-namespace internal {
-
-class String;
-
-// The GTEST_COMPILE_ASSERT_ macro can be used to verify that a compile time
-// expression is true. For example, you could use it to verify the
-// size of a static array:
-//
-//   GTEST_COMPILE_ASSERT_(ARRAYSIZE(content_type_names) == CONTENT_NUM_TYPES,
-//                         content_type_names_incorrect_size);
-//
-// or to make sure a struct is smaller than a certain size:
-//
-//   GTEST_COMPILE_ASSERT_(sizeof(foo) < 128, foo_too_large);
-//
-// The second argument to the macro is the name of the variable. If
-// the expression is false, most compilers will issue a warning/error
-// containing the name of the variable.
-
-template <bool>
-struct CompileAssert {
-};
-
-#define GTEST_COMPILE_ASSERT_(expr, msg) \
-  typedef ::testing::internal::CompileAssert<(bool(expr))> \
-      msg[bool(expr) ? 1 : -1]
-
-// Implementation details of GTEST_COMPILE_ASSERT_:
-//
-// - GTEST_COMPILE_ASSERT_ works by defining an array type that has -1
-//   elements (and thus is invalid) when the expression is false.
-//
-// - The simpler definition
-//
-//    #define GTEST_COMPILE_ASSERT_(expr, msg) typedef char msg[(expr) ? 1 : -1]
-//
-//   does not work, as gcc supports variable-length arrays whose sizes
-//   are determined at run-time (this is gcc's extension and not part
-//   of the C++ standard).  As a result, gcc fails to reject the
-//   following code with the simple definition:
-//
-//     int foo;
-//     GTEST_COMPILE_ASSERT_(foo, msg); // not supposed to compile as foo is
-//                                      // not a compile-time constant.
-//
-// - By using the type CompileAssert<(bool(expr))>, we ensures that
-//   expr is a compile-time constant.  (Template arguments must be
-//   determined at compile-time.)
-//
-// - The outter parentheses in CompileAssert<(bool(expr))> are necessary
-//   to work around a bug in gcc 3.4.4 and 4.0.1.  If we had written
-//
-//     CompileAssert<bool(expr)>
-//
-//   instead, these compilers will refuse to compile
-//
-//     GTEST_COMPILE_ASSERT_(5 > 0, some_message);
-//
-//   (They seem to think the ">" in "5 > 0" marks the end of the
-//   template argument list.)
-//
-// - The array size is (bool(expr) ? 1 : -1), instead of simply
-//
-//     ((expr) ? 1 : -1).
-//
-//   This is to avoid running into a bug in MS VC 7.1, which
-//   causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1.
-
-// StaticAssertTypeEqHelper is used by StaticAssertTypeEq defined in gtest.h.
-//
-// This template is declared, but intentionally undefined.
-template <typename T1, typename T2>
-struct StaticAssertTypeEqHelper;
-
-template <typename T>
-struct StaticAssertTypeEqHelper<T, T> {};
-
-#if GTEST_HAS_GLOBAL_STRING
-typedef ::string string;
-#else
-typedef ::std::string string;
-#endif  // GTEST_HAS_GLOBAL_STRING
-
-#if GTEST_HAS_GLOBAL_WSTRING
-typedef ::wstring wstring;
-#elif GTEST_HAS_STD_WSTRING
-typedef ::std::wstring wstring;
-#endif  // GTEST_HAS_GLOBAL_WSTRING
-
-// A helper for suppressing warnings on constant condition.  It just
-// returns 'condition'.
-GTEST_API_ bool IsTrue(bool condition);
-
-// Defines scoped_ptr.
-
-// This implementation of scoped_ptr is PARTIAL - it only contains
-// enough stuff to satisfy Google Test's need.
-template <typename T>
-class scoped_ptr {
- public:
-  typedef T element_type;
-
-  explicit scoped_ptr(T* p = NULL) : ptr_(p) {}
-  ~scoped_ptr() { reset(); }
-
-  T& operator*() const { return *ptr_; }
-  T* operator->() const { return ptr_; }
-  T* get() const { return ptr_; }
-
-  T* release() {
-    T* const ptr = ptr_;
-    ptr_ = NULL;
-    return ptr;
-  }
-
-  void reset(T* p = NULL) {
-    if (p != ptr_) {
-      if (IsTrue(sizeof(T) > 0)) {  // Makes sure T is a complete type.
-        delete ptr_;
-      }
-      ptr_ = p;
-    }
-  }
- private:
-  T* ptr_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(scoped_ptr);
-};
-
-// Defines RE.
-
-// A simple C++ wrapper for <regex.h>.  It uses the POSIX Extended
-// Regular Expression syntax.
-class GTEST_API_ RE {
- public:
-  // A copy constructor is required by the Standard to initialize object
-  // references from r-values.
-  RE(const RE& other) { Init(other.pattern()); }
-
-  // Constructs an RE from a string.
-  RE(const ::std::string& regex) { Init(regex.c_str()); }  // NOLINT
-
-#if GTEST_HAS_GLOBAL_STRING
-
-  RE(const ::string& regex) { Init(regex.c_str()); }  // NOLINT
-
-#endif  // GTEST_HAS_GLOBAL_STRING
-
-  RE(const char* regex) { Init(regex); }  // NOLINT
-  ~RE();
-
-  // Returns the string representation of the regex.
-  const char* pattern() const { return pattern_; }
-
-  // FullMatch(str, re) returns true iff regular expression re matches
-  // the entire str.
-  // PartialMatch(str, re) returns true iff regular expression re
-  // matches a substring of str (including str itself).
-  //
-  // TODO(wan at google.com): make FullMatch() and PartialMatch() work
-  // when str contains NUL characters.
-  static bool FullMatch(const ::std::string& str, const RE& re) {
-    return FullMatch(str.c_str(), re);
-  }
-  static bool PartialMatch(const ::std::string& str, const RE& re) {
-    return PartialMatch(str.c_str(), re);
-  }
-
-#if GTEST_HAS_GLOBAL_STRING
-
-  static bool FullMatch(const ::string& str, const RE& re) {
-    return FullMatch(str.c_str(), re);
-  }
-  static bool PartialMatch(const ::string& str, const RE& re) {
-    return PartialMatch(str.c_str(), re);
-  }
-
-#endif  // GTEST_HAS_GLOBAL_STRING
-
-  static bool FullMatch(const char* str, const RE& re);
-  static bool PartialMatch(const char* str, const RE& re);
-
- private:
-  void Init(const char* regex);
-
-  // We use a const char* instead of a string, as Google Test may be used
-  // where string is not available.  We also do not use Google Test's own
-  // String type here, in order to simplify dependencies between the
-  // files.
-  const char* pattern_;
-  bool is_valid_;
-
-#if GTEST_USES_POSIX_RE
-
-  regex_t full_regex_;     // For FullMatch().
-  regex_t partial_regex_;  // For PartialMatch().
-
-#else  // GTEST_USES_SIMPLE_RE
-
-  const char* full_pattern_;  // For FullMatch();
-
-#endif
-
-  GTEST_DISALLOW_ASSIGN_(RE);
-};
-
-// Formats a source file path and a line number as they would appear
-// in an error message from the compiler used to compile this code.
-GTEST_API_ ::std::string FormatFileLocation(const char* file, int line);
-
-// Formats a file location for compiler-independent XML output.
-// Although this function is not platform dependent, we put it next to
-// FormatFileLocation in order to contrast the two functions.
-GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(const char* file,
-                                                               int line);
-
-// Defines logging utilities:
-//   GTEST_LOG_(severity) - logs messages at the specified severity level. The
-//                          message itself is streamed into the macro.
-//   LogToStderr()  - directs all log messages to stderr.
-//   FlushInfoLog() - flushes informational log messages.
-
-enum GTestLogSeverity {
-  GTEST_INFO,
-  GTEST_WARNING,
-  GTEST_ERROR,
-  GTEST_FATAL
-};
-
-// Formats log entry severity, provides a stream object for streaming the
-// log message, and terminates the message with a newline when going out of
-// scope.
-class GTEST_API_ GTestLog {
- public:
-  GTestLog(GTestLogSeverity severity, const char* file, int line);
-
-  // Flushes the buffers and, if severity is GTEST_FATAL, aborts the program.
-  ~GTestLog();
-
-  ::std::ostream& GetStream() { return ::std::cerr; }
-
- private:
-  const GTestLogSeverity severity_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestLog);
-};
-
-#define GTEST_LOG_(severity) \
-    ::testing::internal::GTestLog(::testing::internal::GTEST_##severity, \
-                                  __FILE__, __LINE__).GetStream()
-
-inline void LogToStderr() {}
-inline void FlushInfoLog() { fflush(NULL); }
-
-// INTERNAL IMPLEMENTATION - DO NOT USE.
-//
-// GTEST_CHECK_ is an all-mode assert. It aborts the program if the condition
-// is not satisfied.
-//  Synopsys:
-//    GTEST_CHECK_(boolean_condition);
-//     or
-//    GTEST_CHECK_(boolean_condition) << "Additional message";
-//
-//    This checks the condition and if the condition is not satisfied
-//    it prints message about the condition violation, including the
-//    condition itself, plus additional message streamed into it, if any,
-//    and then it aborts the program. It aborts the program irrespective of
-//    whether it is built in the debug mode or not.
-#define GTEST_CHECK_(condition) \
-    GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
-    if (::testing::internal::IsTrue(condition)) \
-      ; \
-    else \
-      GTEST_LOG_(FATAL) << "Condition " #condition " failed. "
-
-// An all-mode assert to verify that the given POSIX-style function
-// call returns 0 (indicating success).  Known limitation: this
-// doesn't expand to a balanced 'if' statement, so enclose the macro
-// in {} if you need to use it as the only statement in an 'if'
-// branch.
-#define GTEST_CHECK_POSIX_SUCCESS_(posix_call) \
-  if (const int gtest_error = (posix_call)) \
-    GTEST_LOG_(FATAL) << #posix_call << "failed with error " \
-                      << gtest_error
-
-// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
-//
-// Use ImplicitCast_ as a safe version of static_cast for upcasting in
-// the type hierarchy (e.g. casting a Foo* to a SuperclassOfFoo* or a
-// const Foo*).  When you use ImplicitCast_, the compiler checks that
-// the cast is safe.  Such explicit ImplicitCast_s are necessary in
-// surprisingly many situations where C++ demands an exact type match
-// instead of an argument type convertable to a target type.
-//
-// The syntax for using ImplicitCast_ is the same as for static_cast:
-//
-//   ImplicitCast_<ToType>(expr)
-//
-// ImplicitCast_ would have been part of the C++ standard library,
-// but the proposal was submitted too late.  It will probably make
-// its way into the language in the future.
-//
-// This relatively ugly name is intentional. It prevents clashes with
-// similar functions users may have (e.g., implicit_cast). The internal
-// namespace alone is not enough because the function can be found by ADL.
-template<typename To>
-inline To ImplicitCast_(To x) { return x; }
-
-// When you upcast (that is, cast a pointer from type Foo to type
-// SuperclassOfFoo), it's fine to use ImplicitCast_<>, since upcasts
-// always succeed.  When you downcast (that is, cast a pointer from
-// type Foo to type SubclassOfFoo), static_cast<> isn't safe, because
-// how do you know the pointer is really of type SubclassOfFoo?  It
-// could be a bare Foo, or of type DifferentSubclassOfFoo.  Thus,
-// when you downcast, you should use this macro.  In debug mode, we
-// use dynamic_cast<> to double-check the downcast is legal (we die
-// if it's not).  In normal mode, we do the efficient static_cast<>
-// instead.  Thus, it's important to test in debug mode to make sure
-// the cast is legal!
-//    This is the only place in the code we should use dynamic_cast<>.
-// In particular, you SHOULDN'T be using dynamic_cast<> in order to
-// do RTTI (eg code like this:
-//    if (dynamic_cast<Subclass1>(foo)) HandleASubclass1Object(foo);
-//    if (dynamic_cast<Subclass2>(foo)) HandleASubclass2Object(foo);
-// You should design the code some other way not to need this.
-//
-// This relatively ugly name is intentional. It prevents clashes with
-// similar functions users may have (e.g., down_cast). The internal
-// namespace alone is not enough because the function can be found by ADL.
-template<typename To, typename From>  // use like this: DownCast_<T*>(foo);
-inline To DownCast_(From* f) {  // so we only accept pointers
-  // Ensures that To is a sub-type of From *.  This test is here only
-  // for compile-time type checking, and has no overhead in an
-  // optimized build at run-time, as it will be optimized away
-  // completely.
-  if (false) {
-    const To to = NULL;
-    ::testing::internal::ImplicitCast_<From*>(to);
-  }
-
-#if GTEST_HAS_RTTI
-  // RTTI: debug mode only!
-  GTEST_CHECK_(f == NULL || dynamic_cast<To>(f) != NULL);
-#endif
-  return static_cast<To>(f);
-}
-
-// Downcasts the pointer of type Base to Derived.
-// Derived must be a subclass of Base. The parameter MUST
-// point to a class of type Derived, not any subclass of it.
-// When RTTI is available, the function performs a runtime
-// check to enforce this.
-template <class Derived, class Base>
-Derived* CheckedDowncastToActualType(Base* base) {
-#if GTEST_HAS_RTTI
-  GTEST_CHECK_(typeid(*base) == typeid(Derived));
-  return dynamic_cast<Derived*>(base);  // NOLINT
-#else
-  return static_cast<Derived*>(base);  // Poor man's downcast.
-#endif
-}
-
-#if GTEST_HAS_STREAM_REDIRECTION
-
-// Defines the stderr capturer:
-//   CaptureStdout     - starts capturing stdout.
-//   GetCapturedStdout - stops capturing stdout and returns the captured string.
-//   CaptureStderr     - starts capturing stderr.
-//   GetCapturedStderr - stops capturing stderr and returns the captured string.
-//
-GTEST_API_ void CaptureStdout();
-GTEST_API_ String GetCapturedStdout();
-GTEST_API_ void CaptureStderr();
-GTEST_API_ String GetCapturedStderr();
-
-#endif  // GTEST_HAS_STREAM_REDIRECTION
-
-
-#if GTEST_HAS_DEATH_TEST
-
-// A copy of all command line arguments.  Set by InitGoogleTest().
-extern ::std::vector<String> g_argvs;
-
-// GTEST_HAS_DEATH_TEST implies we have ::std::string.
-const ::std::vector<String>& GetArgvs();
-
-#endif  // GTEST_HAS_DEATH_TEST
-
-// Defines synchronization primitives.
-
-#if GTEST_HAS_PTHREAD
-
-// Sleeps for (roughly) n milli-seconds.  This function is only for
-// testing Google Test's own constructs.  Don't use it in user tests,
-// either directly or indirectly.
-inline void SleepMilliseconds(int n) {
-  const timespec time = {
-    0,                  // 0 seconds.
-    n * 1000L * 1000L,  // And n ms.
-  };
-  nanosleep(&time, NULL);
-}
-
-// Allows a controller thread to pause execution of newly created
-// threads until notified.  Instances of this class must be created
-// and destroyed in the controller thread.
-//
-// This class is only for testing Google Test's own constructs. Do not
-// use it in user tests, either directly or indirectly.
-class Notification {
- public:
-  Notification() : notified_(false) {}
-
-  // Notifies all threads created with this notification to start. Must
-  // be called from the controller thread.
-  void Notify() { notified_ = true; }
-
-  // Blocks until the controller thread notifies. Must be called from a test
-  // thread.
-  void WaitForNotification() {
-    while(!notified_) {
-      SleepMilliseconds(10);
-    }
-  }
-
- private:
-  volatile bool notified_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(Notification);
-};
-
-// As a C-function, ThreadFuncWithCLinkage cannot be templated itself.
-// Consequently, it cannot select a correct instantiation of ThreadWithParam
-// in order to call its Run(). Introducing ThreadWithParamBase as a
-// non-templated base class for ThreadWithParam allows us to bypass this
-// problem.
-class ThreadWithParamBase {
- public:
-  virtual ~ThreadWithParamBase() {}
-  virtual void Run() = 0;
-};
-
-// pthread_create() accepts a pointer to a function type with the C linkage.
-// According to the Standard (7.5/1), function types with different linkages
-// are different even if they are otherwise identical.  Some compilers (for
-// example, SunStudio) treat them as different types.  Since class methods
-// cannot be defined with C-linkage we need to define a free C-function to
-// pass into pthread_create().
-extern "C" inline void* ThreadFuncWithCLinkage(void* thread) {
-  static_cast<ThreadWithParamBase*>(thread)->Run();
-  return NULL;
-}
-
-// Helper class for testing Google Test's multi-threading constructs.
-// To use it, write:
-//
-//   void ThreadFunc(int param) { /* Do things with param */ }
-//   Notification thread_can_start;
-//   ...
-//   // The thread_can_start parameter is optional; you can supply NULL.
-//   ThreadWithParam<int> thread(&ThreadFunc, 5, &thread_can_start);
-//   thread_can_start.Notify();
-//
-// These classes are only for testing Google Test's own constructs. Do
-// not use them in user tests, either directly or indirectly.
-template <typename T>
-class ThreadWithParam : public ThreadWithParamBase {
- public:
-  typedef void (*UserThreadFunc)(T);
-
-  ThreadWithParam(
-      UserThreadFunc func, T param, Notification* thread_can_start)
-      : func_(func),
-        param_(param),
-        thread_can_start_(thread_can_start),
-        finished_(false) {
-    ThreadWithParamBase* const base = this;
-    // The thread can be created only after all fields except thread_
-    // have been initialized.
-    GTEST_CHECK_POSIX_SUCCESS_(
-        pthread_create(&thread_, 0, &ThreadFuncWithCLinkage, base));
-  }
-  ~ThreadWithParam() { Join(); }
-
-  void Join() {
-    if (!finished_) {
-      GTEST_CHECK_POSIX_SUCCESS_(pthread_join(thread_, 0));
-      finished_ = true;
-    }
-  }
-
-  virtual void Run() {
-    if (thread_can_start_ != NULL)
-      thread_can_start_->WaitForNotification();
-    func_(param_);
-  }
-
- private:
-  const UserThreadFunc func_;  // User-supplied thread function.
-  const T param_;  // User-supplied parameter to the thread function.
-  // When non-NULL, used to block execution until the controller thread
-  // notifies.
-  Notification* const thread_can_start_;
-  bool finished_;  // true iff we know that the thread function has finished.
-  pthread_t thread_;  // The native thread object.
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadWithParam);
-};
-
-// MutexBase and Mutex implement mutex on pthreads-based platforms. They
-// are used in conjunction with class MutexLock:
-//
-//   Mutex mutex;
-//   ...
-//   MutexLock lock(&mutex);  // Acquires the mutex and releases it at the end
-//                            // of the current scope.
-//
-// MutexBase implements behavior for both statically and dynamically
-// allocated mutexes.  Do not use MutexBase directly.  Instead, write
-// the following to define a static mutex:
-//
-//   GTEST_DEFINE_STATIC_MUTEX_(g_some_mutex);
-//
-// You can forward declare a static mutex like this:
-//
-//   GTEST_DECLARE_STATIC_MUTEX_(g_some_mutex);
-//
-// To create a dynamic mutex, just define an object of type Mutex.
-class MutexBase {
- public:
-  // Acquires this mutex.
-  void Lock() {
-    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_lock(&mutex_));
-    owner_ = pthread_self();
-  }
-
-  // Releases this mutex.
-  void Unlock() {
-    // We don't protect writing to owner_ here, as it's the caller's
-    // responsibility to ensure that the current thread holds the
-    // mutex when this is called.
-    owner_ = 0;
-    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_unlock(&mutex_));
-  }
-
-  // Does nothing if the current thread holds the mutex. Otherwise, crashes
-  // with high probability.
-  void AssertHeld() const {
-    GTEST_CHECK_(owner_ == pthread_self())
-        << "The current thread is not holding the mutex @" << this;
-  }
-
-  // A static mutex may be used before main() is entered.  It may even
-  // be used before the dynamic initialization stage.  Therefore we
-  // must be able to initialize a static mutex object at link time.
-  // This means MutexBase has to be a POD and its member variables
-  // have to be public.
- public:
-  pthread_mutex_t mutex_;  // The underlying pthread mutex.
-  pthread_t owner_;  // The thread holding the mutex; 0 means no one holds it.
-};
-
-// Forward-declares a static mutex.
-# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \
-    extern ::testing::internal::MutexBase mutex
-
-// Defines and statically (i.e. at link time) initializes a static mutex.
-# define GTEST_DEFINE_STATIC_MUTEX_(mutex) \
-    ::testing::internal::MutexBase mutex = { PTHREAD_MUTEX_INITIALIZER, 0 }
-
-// The Mutex class can only be used for mutexes created at runtime. It
-// shares its API with MutexBase otherwise.
-class Mutex : public MutexBase {
- public:
-  Mutex() {
-    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_init(&mutex_, NULL));
-    owner_ = 0;
-  }
-  ~Mutex() {
-    GTEST_CHECK_POSIX_SUCCESS_(pthread_mutex_destroy(&mutex_));
-  }
-
- private:
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(Mutex);
-};
-
-// We cannot name this class MutexLock as the ctor declaration would
-// conflict with a macro named MutexLock, which is defined on some
-// platforms.  Hence the typedef trick below.
-class GTestMutexLock {
- public:
-  explicit GTestMutexLock(MutexBase* mutex)
-      : mutex_(mutex) { mutex_->Lock(); }
-
-  ~GTestMutexLock() { mutex_->Unlock(); }
-
- private:
-  MutexBase* const mutex_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(GTestMutexLock);
-};
-
-typedef GTestMutexLock MutexLock;
-
-// Helpers for ThreadLocal.
-
-// pthread_key_create() requires DeleteThreadLocalValue() to have
-// C-linkage.  Therefore it cannot be templatized to access
-// ThreadLocal<T>.  Hence the need for class
-// ThreadLocalValueHolderBase.
-class ThreadLocalValueHolderBase {
- public:
-  virtual ~ThreadLocalValueHolderBase() {}
-};
-
-// Called by pthread to delete thread-local data stored by
-// pthread_setspecific().
-extern "C" inline void DeleteThreadLocalValue(void* value_holder) {
-  delete static_cast<ThreadLocalValueHolderBase*>(value_holder);
-}
-
-// Implements thread-local storage on pthreads-based systems.
-//
-//   // Thread 1
-//   ThreadLocal<int> tl(100);  // 100 is the default value for each thread.
-//
-//   // Thread 2
-//   tl.set(150);  // Changes the value for thread 2 only.
-//   EXPECT_EQ(150, tl.get());
-//
-//   // Thread 1
-//   EXPECT_EQ(100, tl.get());  // In thread 1, tl has the original value.
-//   tl.set(200);
-//   EXPECT_EQ(200, tl.get());
-//
-// The template type argument T must have a public copy constructor.
-// In addition, the default ThreadLocal constructor requires T to have
-// a public default constructor.
-//
-// An object managed for a thread by a ThreadLocal instance is deleted
-// when the thread exits.  Or, if the ThreadLocal instance dies in
-// that thread, when the ThreadLocal dies.  It's the user's
-// responsibility to ensure that all other threads using a ThreadLocal
-// have exited when it dies, or the per-thread objects for those
-// threads will not be deleted.
-//
-// Google Test only uses global ThreadLocal objects.  That means they
-// will die after main() has returned.  Therefore, no per-thread
-// object managed by Google Test will be leaked as long as all threads
-// using Google Test have exited when main() returns.
-template <typename T>
-class ThreadLocal {
- public:
-  ThreadLocal() : key_(CreateKey()),
-                  default_() {}
-  explicit ThreadLocal(const T& value) : key_(CreateKey()),
-                                         default_(value) {}
-
-  ~ThreadLocal() {
-    // Destroys the managed object for the current thread, if any.
-    DeleteThreadLocalValue(pthread_getspecific(key_));
-
-    // Releases resources associated with the key.  This will *not*
-    // delete managed objects for other threads.
-    GTEST_CHECK_POSIX_SUCCESS_(pthread_key_delete(key_));
-  }
-
-  T* pointer() { return GetOrCreateValue(); }
-  const T* pointer() const { return GetOrCreateValue(); }
-  const T& get() const { return *pointer(); }
-  void set(const T& value) { *pointer() = value; }
-
- private:
-  // Holds a value of type T.
-  class ValueHolder : public ThreadLocalValueHolderBase {
-   public:
-    explicit ValueHolder(const T& value) : value_(value) {}
-
-    T* pointer() { return &value_; }
-
-   private:
-    T value_;
-    GTEST_DISALLOW_COPY_AND_ASSIGN_(ValueHolder);
-  };
-
-  static pthread_key_t CreateKey() {
-    pthread_key_t key;
-    // When a thread exits, DeleteThreadLocalValue() will be called on
-    // the object managed for that thread.
-    GTEST_CHECK_POSIX_SUCCESS_(
-        pthread_key_create(&key, &DeleteThreadLocalValue));
-    return key;
-  }
-
-  T* GetOrCreateValue() const {
-    ThreadLocalValueHolderBase* const holder =
-        static_cast<ThreadLocalValueHolderBase*>(pthread_getspecific(key_));
-    if (holder != NULL) {
-      return CheckedDowncastToActualType<ValueHolder>(holder)->pointer();
-    }
-
-    ValueHolder* const new_holder = new ValueHolder(default_);
-    ThreadLocalValueHolderBase* const holder_base = new_holder;
-    GTEST_CHECK_POSIX_SUCCESS_(pthread_setspecific(key_, holder_base));
-    return new_holder->pointer();
-  }
-
-  // A key pthreads uses for looking up per-thread values.
-  const pthread_key_t key_;
-  const T default_;  // The default value for each thread.
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(ThreadLocal);
-};
-
-# define GTEST_IS_THREADSAFE 1
-
-#else  // GTEST_HAS_PTHREAD
-
-// A dummy implementation of synchronization primitives (mutex, lock,
-// and thread-local variable).  Necessary for compiling Google Test where
-// mutex is not supported - using Google Test in multiple threads is not
-// supported on such platforms.
-
-class Mutex {
- public:
-  Mutex() {}
-  void AssertHeld() const {}
-};
-
-# define GTEST_DECLARE_STATIC_MUTEX_(mutex) \
-  extern ::testing::internal::Mutex mutex
-
-# define GTEST_DEFINE_STATIC_MUTEX_(mutex) ::testing::internal::Mutex mutex
-
-class GTestMutexLock {
- public:
-  explicit GTestMutexLock(Mutex*) {}  // NOLINT
-};
-
-typedef GTestMutexLock MutexLock;
-
-template <typename T>
-class ThreadLocal {
- public:
-  ThreadLocal() : value_() {}
-  explicit ThreadLocal(const T& value) : value_(value) {}
-  T* pointer() { return &value_; }
-  const T* pointer() const { return &value_; }
-  const T& get() const { return value_; }
-  void set(const T& value) { value_ = value; }
- private:
-  T value_;
-};
-
-// The above synchronization primitives have dummy implementations.
-// Therefore Google Test is not thread-safe.
-# define GTEST_IS_THREADSAFE 0
-
-#endif  // GTEST_HAS_PTHREAD
-
-// Returns the number of threads running in the process, or 0 to indicate that
-// we cannot detect it.
-GTEST_API_ size_t GetThreadCount();
-
-// Passing non-POD classes through ellipsis (...) crashes the ARM
-// compiler and generates a warning in Sun Studio.  The Nokia Symbian
-// and the IBM XL C/C++ compiler try to instantiate a copy constructor
-// for objects passed through ellipsis (...), failing for uncopyable
-// objects.  We define this to ensure that only POD is passed through
-// ellipsis on these systems.
-#if defined(__SYMBIAN32__) || defined(__IBMCPP__) || defined(__SUNPRO_CC)
-// We lose support for NULL detection where the compiler doesn't like
-// passing non-POD classes through ellipsis (...).
-# define GTEST_ELLIPSIS_NEEDS_POD_ 1
-#else
-# define GTEST_CAN_COMPARE_NULL 1
-#endif
-
-// The Nokia Symbian and IBM XL C/C++ compilers cannot decide between
-// const T& and const T* in a function template.  These compilers
-// _can_ decide between class template specializations for T and T*,
-// so a tr1::type_traits-like is_pointer works.
-#if defined(__SYMBIAN32__) || defined(__IBMCPP__)
-# define GTEST_NEEDS_IS_POINTER_ 1
-#endif
-
-template <bool bool_value>
-struct bool_constant {
-  typedef bool_constant<bool_value> type;
-  static const bool value = bool_value;
-};
-template <bool bool_value> const bool bool_constant<bool_value>::value;
-
-typedef bool_constant<false> false_type;
-typedef bool_constant<true> true_type;
-
-template <typename T>
-struct is_pointer : public false_type {};
-
-template <typename T>
-struct is_pointer<T*> : public true_type {};
-
-template <typename Iterator>
-struct IteratorTraits {
-  typedef typename Iterator::value_type value_type;
-};
-
-template <typename T>
-struct IteratorTraits<T*> {
-  typedef T value_type;
-};
-
-template <typename T>
-struct IteratorTraits<const T*> {
-  typedef T value_type;
-};
-
-#if GTEST_OS_WINDOWS
-# define GTEST_PATH_SEP_ "\\"
-# define GTEST_HAS_ALT_PATH_SEP_ 1
-// The biggest signed integer type the compiler supports.
-typedef __int64 BiggestInt;
-#else
-# define GTEST_PATH_SEP_ "/"
-# define GTEST_HAS_ALT_PATH_SEP_ 0
-typedef long long BiggestInt;  // NOLINT
-#endif  // GTEST_OS_WINDOWS
-
-// Utilities for char.
-
-// isspace(int ch) and friends accept an unsigned char or EOF.  char
-// may be signed, depending on the compiler (or compiler flags).
-// Therefore we need to cast a char to unsigned char before calling
-// isspace(), etc.
-
-inline bool IsAlpha(char ch) {
-  return isalpha(static_cast<unsigned char>(ch)) != 0;
-}
-inline bool IsAlNum(char ch) {
-  return isalnum(static_cast<unsigned char>(ch)) != 0;
-}
-inline bool IsDigit(char ch) {
-  return isdigit(static_cast<unsigned char>(ch)) != 0;
-}
-inline bool IsLower(char ch) {
-  return islower(static_cast<unsigned char>(ch)) != 0;
-}
-inline bool IsSpace(char ch) {
-  return isspace(static_cast<unsigned char>(ch)) != 0;
-}
-inline bool IsUpper(char ch) {
-  return isupper(static_cast<unsigned char>(ch)) != 0;
-}
-inline bool IsXDigit(char ch) {
-  return isxdigit(static_cast<unsigned char>(ch)) != 0;
-}
-
-inline char ToLower(char ch) {
-  return static_cast<char>(tolower(static_cast<unsigned char>(ch)));
-}
-inline char ToUpper(char ch) {
-  return static_cast<char>(toupper(static_cast<unsigned char>(ch)));
-}
-
-// The testing::internal::posix namespace holds wrappers for common
-// POSIX functions.  These wrappers hide the differences between
-// Windows/MSVC and POSIX systems.  Since some compilers define these
-// standard functions as macros, the wrapper cannot have the same name
-// as the wrapped function.
-
-namespace posix {
-
-// Functions with a different name on Windows.
-
-#if GTEST_OS_WINDOWS
-
-typedef struct _stat StatStruct;
-
-# ifdef __BORLANDC__
-inline int IsATTY(int fd) { return isatty(fd); }
-inline int StrCaseCmp(const char* s1, const char* s2) {
-  return stricmp(s1, s2);
-}
-inline char* StrDup(const char* src) { return strdup(src); }
-# else  // !__BORLANDC__
-#  if GTEST_OS_WINDOWS_MOBILE
-inline int IsATTY(int /* fd */) { return 0; }
-#  else
-inline int IsATTY(int fd) { return _isatty(fd); }
-#  endif  // GTEST_OS_WINDOWS_MOBILE
-inline int StrCaseCmp(const char* s1, const char* s2) {
-  return _stricmp(s1, s2);
-}
-inline char* StrDup(const char* src) { return _strdup(src); }
-# endif  // __BORLANDC__
-
-# if GTEST_OS_WINDOWS_MOBILE
-inline int FileNo(FILE* file) { return reinterpret_cast<int>(_fileno(file)); }
-// Stat(), RmDir(), and IsDir() are not needed on Windows CE at this
-// time and thus not defined there.
-# else
-inline int FileNo(FILE* file) { return _fileno(file); }
-inline int Stat(const char* path, StatStruct* buf) { return _stat(path, buf); }
-inline int RmDir(const char* dir) { return _rmdir(dir); }
-inline bool IsDir(const StatStruct& st) {
-  return (_S_IFDIR & st.st_mode) != 0;
-}
-# endif  // GTEST_OS_WINDOWS_MOBILE
-
-#else
-
-typedef struct stat StatStruct;
-
-inline int FileNo(FILE* file) { return fileno(file); }
-inline int IsATTY(int fd) { return isatty(fd); }
-inline int Stat(const char* path, StatStruct* buf) { return stat(path, buf); }
-inline int StrCaseCmp(const char* s1, const char* s2) {
-  return strcasecmp(s1, s2);
-}
-inline char* StrDup(const char* src) { return strdup(src); }
-inline int RmDir(const char* dir) { return rmdir(dir); }
-inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); }
-
-#endif  // GTEST_OS_WINDOWS
-
-// Functions deprecated by MSVC 8.0.
-
-#ifdef _MSC_VER
-// Temporarily disable warning 4996 (deprecated function).
-# pragma warning(push)
-# pragma warning(disable:4996)
-#endif
-
-inline const char* StrNCpy(char* dest, const char* src, size_t n) {
-  return strncpy(dest, src, n);
-}
-
-// ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and
-// StrError() aren't needed on Windows CE at this time and thus not
-// defined there.
-
-#if !GTEST_OS_WINDOWS_MOBILE
-inline int ChDir(const char* dir) { return chdir(dir); }
-#endif
-inline FILE* FOpen(const char* path, const char* mode) {
-  return fopen(path, mode);
-}
-#if !GTEST_OS_WINDOWS_MOBILE
-inline FILE *FReopen(const char* path, const char* mode, FILE* stream) {
-  return freopen(path, mode, stream);
-}
-inline FILE* FDOpen(int fd, const char* mode) { return fdopen(fd, mode); }
-#endif
-inline int FClose(FILE* fp) { return fclose(fp); }
-#if !GTEST_OS_WINDOWS_MOBILE
-inline int Read(int fd, void* buf, unsigned int count) {
-  return static_cast<int>(read(fd, buf, count));
-}
-inline int Write(int fd, const void* buf, unsigned int count) {
-  return static_cast<int>(write(fd, buf, count));
-}
-inline int Close(int fd) { return close(fd); }
-inline const char* StrError(int errnum) { return strerror(errnum); }
-#endif
-inline const char* GetEnv(const char* name) {
-#if GTEST_OS_WINDOWS_MOBILE
-  // We are on Windows CE, which has no environment variables.
-  return NULL;
-#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)
-  // Environment variables which we programmatically clear will be set to the
-  // empty string rather than unset (NULL).  Handle that case.
-  const char* const env = getenv(name);
-  return (env != NULL && env[0] != '\0') ? env : NULL;
-#else
-  return getenv(name);
-#endif
-}
-
-#ifdef _MSC_VER
-# pragma warning(pop)  // Restores the warning state.
-#endif
-
-#if GTEST_OS_WINDOWS_MOBILE
-// Windows CE has no C library. The abort() function is used in
-// several places in Google Test. This implementation provides a reasonable
-// imitation of standard behaviour.
-void Abort();
-#else
-inline void Abort() { abort(); }
-#endif  // GTEST_OS_WINDOWS_MOBILE
-
-}  // namespace posix
-
-// The maximum number a BiggestInt can represent.  This definition
-// works no matter BiggestInt is represented in one's complement or
-// two's complement.
-//
-// We cannot rely on numeric_limits in STL, as __int64 and long long
-// are not part of standard C++ and numeric_limits doesn't need to be
-// defined for them.
-const BiggestInt kMaxBiggestInt =
-    ~(static_cast<BiggestInt>(1) << (8*sizeof(BiggestInt) - 1));
-
-// This template class serves as a compile-time function from size to
-// type.  It maps a size in bytes to a primitive type with that
-// size. e.g.
-//
-//   TypeWithSize<4>::UInt
-//
-// is typedef-ed to be unsigned int (unsigned integer made up of 4
-// bytes).
-//
-// Such functionality should belong to STL, but I cannot find it
-// there.
-//
-// Google Test uses this class in the implementation of floating-point
-// comparison.
-//
-// For now it only handles UInt (unsigned int) as that's all Google Test
-// needs.  Other types can be easily added in the future if need
-// arises.
-template <size_t size>
-class TypeWithSize {
- public:
-  // This prevents the user from using TypeWithSize<N> with incorrect
-  // values of N.
-  typedef void UInt;
-};
-
-// The specialization for size 4.
-template <>
-class TypeWithSize<4> {
- public:
-  // unsigned int has size 4 in both gcc and MSVC.
-  //
-  // As base/basictypes.h doesn't compile on Windows, we cannot use
-  // uint32, uint64, and etc here.
-  typedef int Int;
-  typedef unsigned int UInt;
-};
-
-// The specialization for size 8.
-template <>
-class TypeWithSize<8> {
- public:
-
-#if GTEST_OS_WINDOWS
-  typedef __int64 Int;
-  typedef unsigned __int64 UInt;
-#else
-  typedef long long Int;  // NOLINT
-  typedef unsigned long long UInt;  // NOLINT
-#endif  // GTEST_OS_WINDOWS
-};
-
-// Integer types of known sizes.
-typedef TypeWithSize<4>::Int Int32;
-typedef TypeWithSize<4>::UInt UInt32;
-typedef TypeWithSize<8>::Int Int64;
-typedef TypeWithSize<8>::UInt UInt64;
-typedef TypeWithSize<8>::Int TimeInMillis;  // Represents time in milliseconds.
-
-// Utilities for command line flags and environment variables.
-
-// Macro for referencing flags.
-#define GTEST_FLAG(name) FLAGS_gtest_##name
-
-// Macros for declaring flags.
-#define GTEST_DECLARE_bool_(name) GTEST_API_ extern bool GTEST_FLAG(name)
-#define GTEST_DECLARE_int32_(name) \
-    GTEST_API_ extern ::testing::internal::Int32 GTEST_FLAG(name)
-#define GTEST_DECLARE_string_(name) \
-    GTEST_API_ extern ::testing::internal::String GTEST_FLAG(name)
-
-// Macros for defining flags.
-#define GTEST_DEFINE_bool_(name, default_val, doc) \
-    GTEST_API_ bool GTEST_FLAG(name) = (default_val)
-#define GTEST_DEFINE_int32_(name, default_val, doc) \
-    GTEST_API_ ::testing::internal::Int32 GTEST_FLAG(name) = (default_val)
-#define GTEST_DEFINE_string_(name, default_val, doc) \
-    GTEST_API_ ::testing::internal::String GTEST_FLAG(name) = (default_val)
-
-// Parses 'str' for a 32-bit signed integer.  If successful, writes the result
-// to *value and returns true; otherwise leaves *value unchanged and returns
-// false.
-// TODO(chandlerc): Find a better way to refactor flag and environment parsing
-// out of both gtest-port.cc and gtest.cc to avoid exporting this utility
-// function.
-bool ParseInt32(const Message& src_text, const char* str, Int32* value);
-
-// Parses a bool/Int32/string from the environment variable
-// corresponding to the given Google Test flag.
-bool BoolFromGTestEnv(const char* flag, bool default_val);
-GTEST_API_ Int32 Int32FromGTestEnv(const char* flag, Int32 default_val);
-const char* StringFromGTestEnv(const char* flag, const char* default_val);
-
-}  // namespace internal
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PORT_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-string.h b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-string.h
deleted file mode 100644
index dc3a07b..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-string.h
+++ /dev/null
@@ -1,350 +0,0 @@
-// Copyright 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Authors: wan at google.com (Zhanyong Wan), eefacm at gmail.com (Sean Mcafee)
-//
-// The Google C++ Testing Framework (Google Test)
-//
-// This header file declares the String class and functions used internally by
-// Google Test.  They are subject to change without notice. They should not used
-// by code external to Google Test.
-//
-// This header file is #included by <gtest/internal/gtest-internal.h>.
-// It should not be #included by other files.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
-
-#ifdef __BORLANDC__
-// string.h is not guaranteed to provide strcpy on C++ Builder.
-# include <mem.h>
-#endif
-
-#include <string.h>
-#include "gtest/internal/gtest-port.h"
-
-#include <string>
-
-namespace testing {
-namespace internal {
-
-// String - a UTF-8 string class.
-//
-// For historic reasons, we don't use std::string.
-//
-// TODO(wan at google.com): replace this class with std::string or
-// implement it in terms of the latter.
-//
-// Note that String can represent both NULL and the empty string,
-// while std::string cannot represent NULL.
-//
-// NULL and the empty string are considered different.  NULL is less
-// than anything (including the empty string) except itself.
-//
-// This class only provides minimum functionality necessary for
-// implementing Google Test.  We do not intend to implement a full-fledged
-// string class here.
-//
-// Since the purpose of this class is to provide a substitute for
-// std::string on platforms where it cannot be used, we define a copy
-// constructor and assignment operators such that we don't need
-// conditional compilation in a lot of places.
-//
-// In order to make the representation efficient, the d'tor of String
-// is not virtual.  Therefore DO NOT INHERIT FROM String.
-class GTEST_API_ String {
- public:
-  // Static utility methods
-
-  // Returns the input enclosed in double quotes if it's not NULL;
-  // otherwise returns "(null)".  For example, "\"Hello\"" is returned
-  // for input "Hello".
-  //
-  // This is useful for printing a C string in the syntax of a literal.
-  //
-  // Known issue: escape sequences are not handled yet.
-  static String ShowCStringQuoted(const char* c_str);
-
-  // Clones a 0-terminated C string, allocating memory using new.  The
-  // caller is responsible for deleting the return value using
-  // delete[].  Returns the cloned string, or NULL if the input is
-  // NULL.
-  //
-  // This is different from strdup() in string.h, which allocates
-  // memory using malloc().
-  static const char* CloneCString(const char* c_str);
-
-#if GTEST_OS_WINDOWS_MOBILE
-  // Windows CE does not have the 'ANSI' versions of Win32 APIs. To be
-  // able to pass strings to Win32 APIs on CE we need to convert them
-  // to 'Unicode', UTF-16.
-
-  // Creates a UTF-16 wide string from the given ANSI string, allocating
-  // memory using new. The caller is responsible for deleting the return
-  // value using delete[]. Returns the wide string, or NULL if the
-  // input is NULL.
-  //
-  // The wide string is created using the ANSI codepage (CP_ACP) to
-  // match the behaviour of the ANSI versions of Win32 calls and the
-  // C runtime.
-  static LPCWSTR AnsiToUtf16(const char* c_str);
-
-  // Creates an ANSI string from the given wide string, allocating
-  // memory using new. The caller is responsible for deleting the return
-  // value using delete[]. Returns the ANSI string, or NULL if the
-  // input is NULL.
-  //
-  // The returned string is created using the ANSI codepage (CP_ACP) to
-  // match the behaviour of the ANSI versions of Win32 calls and the
-  // C runtime.
-  static const char* Utf16ToAnsi(LPCWSTR utf16_str);
-#endif
-
-  // Compares two C strings.  Returns true iff they have the same content.
-  //
-  // Unlike strcmp(), this function can handle NULL argument(s).  A
-  // NULL C string is considered different to any non-NULL C string,
-  // including the empty string.
-  static bool CStringEquals(const char* lhs, const char* rhs);
-
-  // Converts a wide C string to a String using the UTF-8 encoding.
-  // NULL will be converted to "(null)".  If an error occurred during
-  // the conversion, "(failed to convert from wide string)" is
-  // returned.
-  static String ShowWideCString(const wchar_t* wide_c_str);
-
-  // Similar to ShowWideCString(), except that this function encloses
-  // the converted string in double quotes.
-  static String ShowWideCStringQuoted(const wchar_t* wide_c_str);
-
-  // Compares two wide C strings.  Returns true iff they have the same
-  // content.
-  //
-  // Unlike wcscmp(), this function can handle NULL argument(s).  A
-  // NULL C string is considered different to any non-NULL C string,
-  // including the empty string.
-  static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs);
-
-  // Compares two C strings, ignoring case.  Returns true iff they
-  // have the same content.
-  //
-  // Unlike strcasecmp(), this function can handle NULL argument(s).
-  // A NULL C string is considered different to any non-NULL C string,
-  // including the empty string.
-  static bool CaseInsensitiveCStringEquals(const char* lhs,
-                                           const char* rhs);
-
-  // Compares two wide C strings, ignoring case.  Returns true iff they
-  // have the same content.
-  //
-  // Unlike wcscasecmp(), this function can handle NULL argument(s).
-  // A NULL C string is considered different to any non-NULL wide C string,
-  // including the empty string.
-  // NB: The implementations on different platforms slightly differ.
-  // On windows, this method uses _wcsicmp which compares according to LC_CTYPE
-  // environment variable. On GNU platform this method uses wcscasecmp
-  // which compares according to LC_CTYPE category of the current locale.
-  // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the
-  // current locale.
-  static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs,
-                                               const wchar_t* rhs);
-
-  // Formats a list of arguments to a String, using the same format
-  // spec string as for printf.
-  //
-  // We do not use the StringPrintf class as it is not universally
-  // available.
-  //
-  // The result is limited to 4096 characters (including the tailing
-  // 0).  If 4096 characters are not enough to format the input,
-  // "<buffer exceeded>" is returned.
-  static String Format(const char* format, ...);
-
-  // C'tors
-
-  // The default c'tor constructs a NULL string.
-  String() : c_str_(NULL), length_(0) {}
-
-  // Constructs a String by cloning a 0-terminated C string.
-  String(const char* a_c_str) {  // NOLINT
-    if (a_c_str == NULL) {
-      c_str_ = NULL;
-      length_ = 0;
-    } else {
-      ConstructNonNull(a_c_str, strlen(a_c_str));
-    }
-  }
-
-  // Constructs a String by copying a given number of chars from a
-  // buffer.  E.g. String("hello", 3) creates the string "hel",
-  // String("a\0bcd", 4) creates "a\0bc", String(NULL, 0) creates "",
-  // and String(NULL, 1) results in access violation.
-  String(const char* buffer, size_t a_length) {
-    ConstructNonNull(buffer, a_length);
-  }
-
-  // The copy c'tor creates a new copy of the string.  The two
-  // String objects do not share content.
-  String(const String& str) : c_str_(NULL), length_(0) { *this = str; }
-
-  // D'tor.  String is intended to be a final class, so the d'tor
-  // doesn't need to be virtual.
-  ~String() { delete[] c_str_; }
-
-  // Allows a String to be implicitly converted to an ::std::string or
-  // ::string, and vice versa.  Converting a String containing a NULL
-  // pointer to ::std::string or ::string is undefined behavior.
-  // Converting a ::std::string or ::string containing an embedded NUL
-  // character to a String will result in the prefix up to the first
-  // NUL character.
-  String(const ::std::string& str) {
-    ConstructNonNull(str.c_str(), str.length());
-  }
-
-  operator ::std::string() const { return ::std::string(c_str(), length()); }
-
-#if GTEST_HAS_GLOBAL_STRING
-  String(const ::string& str) {
-    ConstructNonNull(str.c_str(), str.length());
-  }
-
-  operator ::string() const { return ::string(c_str(), length()); }
-#endif  // GTEST_HAS_GLOBAL_STRING
-
-  // Returns true iff this is an empty string (i.e. "").
-  bool empty() const { return (c_str() != NULL) && (length() == 0); }
-
-  // Compares this with another String.
-  // Returns < 0 if this is less than rhs, 0 if this is equal to rhs, or > 0
-  // if this is greater than rhs.
-  int Compare(const String& rhs) const;
-
-  // Returns true iff this String equals the given C string.  A NULL
-  // string and a non-NULL string are considered not equal.
-  bool operator==(const char* a_c_str) const { return Compare(a_c_str) == 0; }
-
-  // Returns true iff this String is less than the given String.  A
-  // NULL string is considered less than "".
-  bool operator<(const String& rhs) const { return Compare(rhs) < 0; }
-
-  // Returns true iff this String doesn't equal the given C string.  A NULL
-  // string and a non-NULL string are considered not equal.
-  bool operator!=(const char* a_c_str) const { return !(*this == a_c_str); }
-
-  // Returns true iff this String ends with the given suffix.  *Any*
-  // String is considered to end with a NULL or empty suffix.
-  bool EndsWith(const char* suffix) const;
-
-  // Returns true iff this String ends with the given suffix, not considering
-  // case. Any String is considered to end with a NULL or empty suffix.
-  bool EndsWithCaseInsensitive(const char* suffix) const;
-
-  // Returns the length of the encapsulated string, or 0 if the
-  // string is NULL.
-  size_t length() const { return length_; }
-
-  // Gets the 0-terminated C string this String object represents.
-  // The String object still owns the string.  Therefore the caller
-  // should NOT delete the return value.
-  const char* c_str() const { return c_str_; }
-
-  // Assigns a C string to this object.  Self-assignment works.
-  const String& operator=(const char* a_c_str) {
-    return *this = String(a_c_str);
-  }
-
-  // Assigns a String object to this object.  Self-assignment works.
-  const String& operator=(const String& rhs) {
-    if (this != &rhs) {
-      delete[] c_str_;
-      if (rhs.c_str() == NULL) {
-        c_str_ = NULL;
-        length_ = 0;
-      } else {
-        ConstructNonNull(rhs.c_str(), rhs.length());
-      }
-    }
-
-    return *this;
-  }
-
- private:
-  // Constructs a non-NULL String from the given content.  This
-  // function can only be called when c_str_ has not been allocated.
-  // ConstructNonNull(NULL, 0) results in an empty string ("").
-  // ConstructNonNull(NULL, non_zero) is undefined behavior.
-  void ConstructNonNull(const char* buffer, size_t a_length) {
-    char* const str = new char[a_length + 1];
-    memcpy(str, buffer, a_length);
-    str[a_length] = '\0';
-    c_str_ = str;
-    length_ = a_length;
-  }
-
-  const char* c_str_;
-  size_t length_;
-};  // class String
-
-// Streams a String to an ostream.  Each '\0' character in the String
-// is replaced with "\\0".
-inline ::std::ostream& operator<<(::std::ostream& os, const String& str) {
-  if (str.c_str() == NULL) {
-    os << "(null)";
-  } else {
-    const char* const c_str = str.c_str();
-    for (size_t i = 0; i != str.length(); i++) {
-      if (c_str[i] == '\0') {
-        os << "\\0";
-      } else {
-        os << c_str[i];
-      }
-    }
-  }
-  return os;
-}
-
-// Gets the content of the stringstream's buffer as a String.  Each '\0'
-// character in the buffer is replaced with "\\0".
-GTEST_API_ String StringStreamToString(::std::stringstream* stream);
-
-// Converts a streamable value to a String.  A NULL pointer is
-// converted to "(null)".  When the input value is a ::string,
-// ::std::string, ::wstring, or ::std::wstring object, each NUL
-// character in it is replaced with "\\0".
-
-// Declared here but defined in gtest.h, so that it has access
-// to the definition of the Message class, required by the ARM
-// compiler.
-template <typename T>
-String StreamableToString(const T& streamable);
-
-}  // namespace internal
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-tuple.h b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-tuple.h
deleted file mode 100644
index d1af50e..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-tuple.h
+++ /dev/null
@@ -1,968 +0,0 @@
-// This file was GENERATED by a script.  DO NOT EDIT BY HAND!!!
-
-// Copyright 2009 Google Inc.
-// All Rights Reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-
-// Implements a subset of TR1 tuple needed by Google Test and Google Mock.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
-
-#include <utility>  // For ::std::pair.
-
-// The compiler used in Symbian has a bug that prevents us from declaring the
-// tuple template as a friend (it complains that tuple is redefined).  This
-// hack bypasses the bug by declaring the members that should otherwise be
-// private as public.
-// Sun Studio versions < 12 also have the above bug.
-#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
-# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
-#else
-# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
-    template <GTEST_10_TYPENAMES_(U)> friend class tuple; \
-   private:
-#endif
-
-// GTEST_n_TUPLE_(T) is the type of an n-tuple.
-#define GTEST_0_TUPLE_(T) tuple<>
-#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \
-    void, void, void>
-#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \
-    void, void, void>
-#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \
-    void, void, void>
-#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \
-    void, void, void>
-#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \
-    void, void, void>
-#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \
-    void, void, void>
-#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
-    void, void, void>
-#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
-    T##7, void, void>
-#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
-    T##7, T##8, void>
-#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
-    T##7, T##8, T##9>
-
-// GTEST_n_TYPENAMES_(T) declares a list of n typenames.
-#define GTEST_0_TYPENAMES_(T)
-#define GTEST_1_TYPENAMES_(T) typename T##0
-#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1
-#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2
-#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
-    typename T##3
-#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
-    typename T##3, typename T##4
-#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
-    typename T##3, typename T##4, typename T##5
-#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
-    typename T##3, typename T##4, typename T##5, typename T##6
-#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
-    typename T##3, typename T##4, typename T##5, typename T##6, typename T##7
-#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
-    typename T##3, typename T##4, typename T##5, typename T##6, \
-    typename T##7, typename T##8
-#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
-    typename T##3, typename T##4, typename T##5, typename T##6, \
-    typename T##7, typename T##8, typename T##9
-
-// In theory, defining stuff in the ::std namespace is undefined
-// behavior.  We can do this as we are playing the role of a standard
-// library vendor.
-namespace std {
-namespace tr1 {
-
-template <typename T0 = void, typename T1 = void, typename T2 = void,
-    typename T3 = void, typename T4 = void, typename T5 = void,
-    typename T6 = void, typename T7 = void, typename T8 = void,
-    typename T9 = void>
-class tuple;
-
-// Anything in namespace gtest_internal is Google Test's INTERNAL
-// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.
-namespace gtest_internal {
-
-// ByRef<T>::type is T if T is a reference; otherwise it's const T&.
-template <typename T>
-struct ByRef { typedef const T& type; };  // NOLINT
-template <typename T>
-struct ByRef<T&> { typedef T& type; };  // NOLINT
-
-// A handy wrapper for ByRef.
-#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type
-
-// AddRef<T>::type is T if T is a reference; otherwise it's T&.  This
-// is the same as tr1::add_reference<T>::type.
-template <typename T>
-struct AddRef { typedef T& type; };  // NOLINT
-template <typename T>
-struct AddRef<T&> { typedef T& type; };  // NOLINT
-
-// A handy wrapper for AddRef.
-#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type
-
-// A helper for implementing get<k>().
-template <int k> class Get;
-
-// A helper for implementing tuple_element<k, T>.  kIndexValid is true
-// iff k < the number of fields in tuple type T.
-template <bool kIndexValid, int kIndex, class Tuple>
-struct TupleElement;
-
-template <GTEST_10_TYPENAMES_(T)>
-struct TupleElement<true, 0, GTEST_10_TUPLE_(T)> { typedef T0 type; };
-
-template <GTEST_10_TYPENAMES_(T)>
-struct TupleElement<true, 1, GTEST_10_TUPLE_(T)> { typedef T1 type; };
-
-template <GTEST_10_TYPENAMES_(T)>
-struct TupleElement<true, 2, GTEST_10_TUPLE_(T)> { typedef T2 type; };
-
-template <GTEST_10_TYPENAMES_(T)>
-struct TupleElement<true, 3, GTEST_10_TUPLE_(T)> { typedef T3 type; };
-
-template <GTEST_10_TYPENAMES_(T)>
-struct TupleElement<true, 4, GTEST_10_TUPLE_(T)> { typedef T4 type; };
-
-template <GTEST_10_TYPENAMES_(T)>
-struct TupleElement<true, 5, GTEST_10_TUPLE_(T)> { typedef T5 type; };
-
-template <GTEST_10_TYPENAMES_(T)>
-struct TupleElement<true, 6, GTEST_10_TUPLE_(T)> { typedef T6 type; };
-
-template <GTEST_10_TYPENAMES_(T)>
-struct TupleElement<true, 7, GTEST_10_TUPLE_(T)> { typedef T7 type; };
-
-template <GTEST_10_TYPENAMES_(T)>
-struct TupleElement<true, 8, GTEST_10_TUPLE_(T)> { typedef T8 type; };
-
-template <GTEST_10_TYPENAMES_(T)>
-struct TupleElement<true, 9, GTEST_10_TUPLE_(T)> { typedef T9 type; };
-
-}  // namespace gtest_internal
-
-template <>
-class tuple<> {
- public:
-  tuple() {}
-  tuple(const tuple& /* t */)  {}
-  tuple& operator=(const tuple& /* t */) { return *this; }
-};
-
-template <GTEST_1_TYPENAMES_(T)>
-class GTEST_1_TUPLE_(T) {
- public:
-  template <int k> friend class gtest_internal::Get;
-
-  tuple() : f0_() {}
-
-  explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {}
-
-  tuple(const tuple& t) : f0_(t.f0_) {}
-
-  template <GTEST_1_TYPENAMES_(U)>
-  tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {}
-
-  tuple& operator=(const tuple& t) { return CopyFrom(t); }
-
-  template <GTEST_1_TYPENAMES_(U)>
-  tuple& operator=(const GTEST_1_TUPLE_(U)& t) {
-    return CopyFrom(t);
-  }
-
-  GTEST_DECLARE_TUPLE_AS_FRIEND_
-
-  template <GTEST_1_TYPENAMES_(U)>
-  tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) {
-    f0_ = t.f0_;
-    return *this;
-  }
-
-  T0 f0_;
-};
-
-template <GTEST_2_TYPENAMES_(T)>
-class GTEST_2_TUPLE_(T) {
- public:
-  template <int k> friend class gtest_internal::Get;
-
-  tuple() : f0_(), f1_() {}
-
-  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0),
-      f1_(f1) {}
-
-  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {}
-
-  template <GTEST_2_TYPENAMES_(U)>
-  tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {}
-  template <typename U0, typename U1>
-  tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}
-
-  tuple& operator=(const tuple& t) { return CopyFrom(t); }
-
-  template <GTEST_2_TYPENAMES_(U)>
-  tuple& operator=(const GTEST_2_TUPLE_(U)& t) {
-    return CopyFrom(t);
-  }
-  template <typename U0, typename U1>
-  tuple& operator=(const ::std::pair<U0, U1>& p) {
-    f0_ = p.first;
-    f1_ = p.second;
-    return *this;
-  }
-
-  GTEST_DECLARE_TUPLE_AS_FRIEND_
-
-  template <GTEST_2_TYPENAMES_(U)>
-  tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) {
-    f0_ = t.f0_;
-    f1_ = t.f1_;
-    return *this;
-  }
-
-  T0 f0_;
-  T1 f1_;
-};
-
-template <GTEST_3_TYPENAMES_(T)>
-class GTEST_3_TUPLE_(T) {
- public:
-  template <int k> friend class gtest_internal::Get;
-
-  tuple() : f0_(), f1_(), f2_() {}
-
-  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
-      GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {}
-
-  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
-
-  template <GTEST_3_TYPENAMES_(U)>
-  tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
-
-  tuple& operator=(const tuple& t) { return CopyFrom(t); }
-
-  template <GTEST_3_TYPENAMES_(U)>
-  tuple& operator=(const GTEST_3_TUPLE_(U)& t) {
-    return CopyFrom(t);
-  }
-
-  GTEST_DECLARE_TUPLE_AS_FRIEND_
-
-  template <GTEST_3_TYPENAMES_(U)>
-  tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) {
-    f0_ = t.f0_;
-    f1_ = t.f1_;
-    f2_ = t.f2_;
-    return *this;
-  }
-
-  T0 f0_;
-  T1 f1_;
-  T2 f2_;
-};
-
-template <GTEST_4_TYPENAMES_(T)>
-class GTEST_4_TUPLE_(T) {
- public:
-  template <int k> friend class gtest_internal::Get;
-
-  tuple() : f0_(), f1_(), f2_(), f3_() {}
-
-  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
-      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2),
-      f3_(f3) {}
-
-  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {}
-
-  template <GTEST_4_TYPENAMES_(U)>
-  tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
-      f3_(t.f3_) {}
-
-  tuple& operator=(const tuple& t) { return CopyFrom(t); }
-
-  template <GTEST_4_TYPENAMES_(U)>
-  tuple& operator=(const GTEST_4_TUPLE_(U)& t) {
-    return CopyFrom(t);
-  }
-
-  GTEST_DECLARE_TUPLE_AS_FRIEND_
-
-  template <GTEST_4_TYPENAMES_(U)>
-  tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) {
-    f0_ = t.f0_;
-    f1_ = t.f1_;
-    f2_ = t.f2_;
-    f3_ = t.f3_;
-    return *this;
-  }
-
-  T0 f0_;
-  T1 f1_;
-  T2 f2_;
-  T3 f3_;
-};
-
-template <GTEST_5_TYPENAMES_(T)>
-class GTEST_5_TUPLE_(T) {
- public:
-  template <int k> friend class gtest_internal::Get;
-
-  tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}
-
-  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
-      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3,
-      GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {}
-
-  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
-      f4_(t.f4_) {}
-
-  template <GTEST_5_TYPENAMES_(U)>
-  tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
-      f3_(t.f3_), f4_(t.f4_) {}
-
-  tuple& operator=(const tuple& t) { return CopyFrom(t); }
-
-  template <GTEST_5_TYPENAMES_(U)>
-  tuple& operator=(const GTEST_5_TUPLE_(U)& t) {
-    return CopyFrom(t);
-  }
-
-  GTEST_DECLARE_TUPLE_AS_FRIEND_
-
-  template <GTEST_5_TYPENAMES_(U)>
-  tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) {
-    f0_ = t.f0_;
-    f1_ = t.f1_;
-    f2_ = t.f2_;
-    f3_ = t.f3_;
-    f4_ = t.f4_;
-    return *this;
-  }
-
-  T0 f0_;
-  T1 f1_;
-  T2 f2_;
-  T3 f3_;
-  T4 f4_;
-};
-
-template <GTEST_6_TYPENAMES_(T)>
-class GTEST_6_TUPLE_(T) {
- public:
-  template <int k> friend class gtest_internal::Get;
-
-  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}
-
-  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
-      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
-      GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
-      f5_(f5) {}
-
-  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
-      f4_(t.f4_), f5_(t.f5_) {}
-
-  template <GTEST_6_TYPENAMES_(U)>
-  tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
-      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}
-
-  tuple& operator=(const tuple& t) { return CopyFrom(t); }
-
-  template <GTEST_6_TYPENAMES_(U)>
-  tuple& operator=(const GTEST_6_TUPLE_(U)& t) {
-    return CopyFrom(t);
-  }
-
-  GTEST_DECLARE_TUPLE_AS_FRIEND_
-
-  template <GTEST_6_TYPENAMES_(U)>
-  tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) {
-    f0_ = t.f0_;
-    f1_ = t.f1_;
-    f2_ = t.f2_;
-    f3_ = t.f3_;
-    f4_ = t.f4_;
-    f5_ = t.f5_;
-    return *this;
-  }
-
-  T0 f0_;
-  T1 f1_;
-  T2 f2_;
-  T3 f3_;
-  T4 f4_;
-  T5 f5_;
-};
-
-template <GTEST_7_TYPENAMES_(T)>
-class GTEST_7_TUPLE_(T) {
- public:
-  template <int k> friend class gtest_internal::Get;
-
-  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}
-
-  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
-      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
-      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2),
-      f3_(f3), f4_(f4), f5_(f5), f6_(f6) {}
-
-  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
-      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
-
-  template <GTEST_7_TYPENAMES_(U)>
-  tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
-      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
-
-  tuple& operator=(const tuple& t) { return CopyFrom(t); }
-
-  template <GTEST_7_TYPENAMES_(U)>
-  tuple& operator=(const GTEST_7_TUPLE_(U)& t) {
-    return CopyFrom(t);
-  }
-
-  GTEST_DECLARE_TUPLE_AS_FRIEND_
-
-  template <GTEST_7_TYPENAMES_(U)>
-  tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) {
-    f0_ = t.f0_;
-    f1_ = t.f1_;
-    f2_ = t.f2_;
-    f3_ = t.f3_;
-    f4_ = t.f4_;
-    f5_ = t.f5_;
-    f6_ = t.f6_;
-    return *this;
-  }
-
-  T0 f0_;
-  T1 f1_;
-  T2 f2_;
-  T3 f3_;
-  T4 f4_;
-  T5 f5_;
-  T6 f6_;
-};
-
-template <GTEST_8_TYPENAMES_(T)>
-class GTEST_8_TUPLE_(T) {
- public:
-  template <int k> friend class gtest_internal::Get;
-
-  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}
-
-  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
-      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
-      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6,
-      GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
-      f5_(f5), f6_(f6), f7_(f7) {}
-
-  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
-      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
-
-  template <GTEST_8_TYPENAMES_(U)>
-  tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
-      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
-
-  tuple& operator=(const tuple& t) { return CopyFrom(t); }
-
-  template <GTEST_8_TYPENAMES_(U)>
-  tuple& operator=(const GTEST_8_TUPLE_(U)& t) {
-    return CopyFrom(t);
-  }
-
-  GTEST_DECLARE_TUPLE_AS_FRIEND_
-
-  template <GTEST_8_TYPENAMES_(U)>
-  tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) {
-    f0_ = t.f0_;
-    f1_ = t.f1_;
-    f2_ = t.f2_;
-    f3_ = t.f3_;
-    f4_ = t.f4_;
-    f5_ = t.f5_;
-    f6_ = t.f6_;
-    f7_ = t.f7_;
-    return *this;
-  }
-
-  T0 f0_;
-  T1 f1_;
-  T2 f2_;
-  T3 f3_;
-  T4 f4_;
-  T5 f5_;
-  T6 f6_;
-  T7 f7_;
-};
-
-template <GTEST_9_TYPENAMES_(T)>
-class GTEST_9_TUPLE_(T) {
- public:
-  template <int k> friend class gtest_internal::Get;
-
-  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}
-
-  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
-      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
-      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
-      GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
-      f5_(f5), f6_(f6), f7_(f7), f8_(f8) {}
-
-  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
-      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
-
-  template <GTEST_9_TYPENAMES_(U)>
-  tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
-      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
-
-  tuple& operator=(const tuple& t) { return CopyFrom(t); }
-
-  template <GTEST_9_TYPENAMES_(U)>
-  tuple& operator=(const GTEST_9_TUPLE_(U)& t) {
-    return CopyFrom(t);
-  }
-
-  GTEST_DECLARE_TUPLE_AS_FRIEND_
-
-  template <GTEST_9_TYPENAMES_(U)>
-  tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) {
-    f0_ = t.f0_;
-    f1_ = t.f1_;
-    f2_ = t.f2_;
-    f3_ = t.f3_;
-    f4_ = t.f4_;
-    f5_ = t.f5_;
-    f6_ = t.f6_;
-    f7_ = t.f7_;
-    f8_ = t.f8_;
-    return *this;
-  }
-
-  T0 f0_;
-  T1 f1_;
-  T2 f2_;
-  T3 f3_;
-  T4 f4_;
-  T5 f5_;
-  T6 f6_;
-  T7 f7_;
-  T8 f8_;
-};
-
-template <GTEST_10_TYPENAMES_(T)>
-class tuple {
- public:
-  template <int k> friend class gtest_internal::Get;
-
-  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),
-      f9_() {}
-
-  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
-      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
-      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
-      GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2),
-      f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {}
-
-  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
-      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}
-
-  template <GTEST_10_TYPENAMES_(U)>
-  tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
-      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),
-      f9_(t.f9_) {}
-
-  tuple& operator=(const tuple& t) { return CopyFrom(t); }
-
-  template <GTEST_10_TYPENAMES_(U)>
-  tuple& operator=(const GTEST_10_TUPLE_(U)& t) {
-    return CopyFrom(t);
-  }
-
-  GTEST_DECLARE_TUPLE_AS_FRIEND_
-
-  template <GTEST_10_TYPENAMES_(U)>
-  tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) {
-    f0_ = t.f0_;
-    f1_ = t.f1_;
-    f2_ = t.f2_;
-    f3_ = t.f3_;
-    f4_ = t.f4_;
-    f5_ = t.f5_;
-    f6_ = t.f6_;
-    f7_ = t.f7_;
-    f8_ = t.f8_;
-    f9_ = t.f9_;
-    return *this;
-  }
-
-  T0 f0_;
-  T1 f1_;
-  T2 f2_;
-  T3 f3_;
-  T4 f4_;
-  T5 f5_;
-  T6 f6_;
-  T7 f7_;
-  T8 f8_;
-  T9 f9_;
-};
-
-// 6.1.3.2 Tuple creation functions.
-
-// Known limitations: we don't support passing an
-// std::tr1::reference_wrapper<T> to make_tuple().  And we don't
-// implement tie().
-
-inline tuple<> make_tuple() { return tuple<>(); }
-
-template <GTEST_1_TYPENAMES_(T)>
-inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) {
-  return GTEST_1_TUPLE_(T)(f0);
-}
-
-template <GTEST_2_TYPENAMES_(T)>
-inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) {
-  return GTEST_2_TUPLE_(T)(f0, f1);
-}
-
-template <GTEST_3_TYPENAMES_(T)>
-inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) {
-  return GTEST_3_TUPLE_(T)(f0, f1, f2);
-}
-
-template <GTEST_4_TYPENAMES_(T)>
-inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
-    const T3& f3) {
-  return GTEST_4_TUPLE_(T)(f0, f1, f2, f3);
-}
-
-template <GTEST_5_TYPENAMES_(T)>
-inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
-    const T3& f3, const T4& f4) {
-  return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4);
-}
-
-template <GTEST_6_TYPENAMES_(T)>
-inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
-    const T3& f3, const T4& f4, const T5& f5) {
-  return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5);
-}
-
-template <GTEST_7_TYPENAMES_(T)>
-inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
-    const T3& f3, const T4& f4, const T5& f5, const T6& f6) {
-  return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6);
-}
-
-template <GTEST_8_TYPENAMES_(T)>
-inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
-    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) {
-  return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7);
-}
-
-template <GTEST_9_TYPENAMES_(T)>
-inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
-    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
-    const T8& f8) {
-  return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8);
-}
-
-template <GTEST_10_TYPENAMES_(T)>
-inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
-    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
-    const T8& f8, const T9& f9) {
-  return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);
-}
-
-// 6.1.3.3 Tuple helper classes.
-
-template <typename Tuple> struct tuple_size;
-
-template <GTEST_0_TYPENAMES_(T)>
-struct tuple_size<GTEST_0_TUPLE_(T)> { static const int value = 0; };
-
-template <GTEST_1_TYPENAMES_(T)>
-struct tuple_size<GTEST_1_TUPLE_(T)> { static const int value = 1; };
-
-template <GTEST_2_TYPENAMES_(T)>
-struct tuple_size<GTEST_2_TUPLE_(T)> { static const int value = 2; };
-
-template <GTEST_3_TYPENAMES_(T)>
-struct tuple_size<GTEST_3_TUPLE_(T)> { static const int value = 3; };
-
-template <GTEST_4_TYPENAMES_(T)>
-struct tuple_size<GTEST_4_TUPLE_(T)> { static const int value = 4; };
-
-template <GTEST_5_TYPENAMES_(T)>
-struct tuple_size<GTEST_5_TUPLE_(T)> { static const int value = 5; };
-
-template <GTEST_6_TYPENAMES_(T)>
-struct tuple_size<GTEST_6_TUPLE_(T)> { static const int value = 6; };
-
-template <GTEST_7_TYPENAMES_(T)>
-struct tuple_size<GTEST_7_TUPLE_(T)> { static const int value = 7; };
-
-template <GTEST_8_TYPENAMES_(T)>
-struct tuple_size<GTEST_8_TUPLE_(T)> { static const int value = 8; };
-
-template <GTEST_9_TYPENAMES_(T)>
-struct tuple_size<GTEST_9_TUPLE_(T)> { static const int value = 9; };
-
-template <GTEST_10_TYPENAMES_(T)>
-struct tuple_size<GTEST_10_TUPLE_(T)> { static const int value = 10; };
-
-template <int k, class Tuple>
-struct tuple_element {
-  typedef typename gtest_internal::TupleElement<
-      k < (tuple_size<Tuple>::value), k, Tuple>::type type;
-};
-
-#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type
-
-// 6.1.3.4 Element access.
-
-namespace gtest_internal {
-
-template <>
-class Get<0> {
- public:
-  template <class Tuple>
-  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
-  Field(Tuple& t) { return t.f0_; }  // NOLINT
-
-  template <class Tuple>
-  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
-  ConstField(const Tuple& t) { return t.f0_; }
-};
-
-template <>
-class Get<1> {
- public:
-  template <class Tuple>
-  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
-  Field(Tuple& t) { return t.f1_; }  // NOLINT
-
-  template <class Tuple>
-  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
-  ConstField(const Tuple& t) { return t.f1_; }
-};
-
-template <>
-class Get<2> {
- public:
-  template <class Tuple>
-  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
-  Field(Tuple& t) { return t.f2_; }  // NOLINT
-
-  template <class Tuple>
-  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
-  ConstField(const Tuple& t) { return t.f2_; }
-};
-
-template <>
-class Get<3> {
- public:
-  template <class Tuple>
-  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
-  Field(Tuple& t) { return t.f3_; }  // NOLINT
-
-  template <class Tuple>
-  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
-  ConstField(const Tuple& t) { return t.f3_; }
-};
-
-template <>
-class Get<4> {
- public:
-  template <class Tuple>
-  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
-  Field(Tuple& t) { return t.f4_; }  // NOLINT
-
-  template <class Tuple>
-  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
-  ConstField(const Tuple& t) { return t.f4_; }
-};
-
-template <>
-class Get<5> {
- public:
-  template <class Tuple>
-  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
-  Field(Tuple& t) { return t.f5_; }  // NOLINT
-
-  template <class Tuple>
-  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
-  ConstField(const Tuple& t) { return t.f5_; }
-};
-
-template <>
-class Get<6> {
- public:
-  template <class Tuple>
-  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
-  Field(Tuple& t) { return t.f6_; }  // NOLINT
-
-  template <class Tuple>
-  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
-  ConstField(const Tuple& t) { return t.f6_; }
-};
-
-template <>
-class Get<7> {
- public:
-  template <class Tuple>
-  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
-  Field(Tuple& t) { return t.f7_; }  // NOLINT
-
-  template <class Tuple>
-  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
-  ConstField(const Tuple& t) { return t.f7_; }
-};
-
-template <>
-class Get<8> {
- public:
-  template <class Tuple>
-  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
-  Field(Tuple& t) { return t.f8_; }  // NOLINT
-
-  template <class Tuple>
-  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
-  ConstField(const Tuple& t) { return t.f8_; }
-};
-
-template <>
-class Get<9> {
- public:
-  template <class Tuple>
-  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
-  Field(Tuple& t) { return t.f9_; }  // NOLINT
-
-  template <class Tuple>
-  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
-  ConstField(const Tuple& t) { return t.f9_; }
-};
-
-}  // namespace gtest_internal
-
-template <int k, GTEST_10_TYPENAMES_(T)>
-GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))
-get(GTEST_10_TUPLE_(T)& t) {
-  return gtest_internal::Get<k>::Field(t);
-}
-
-template <int k, GTEST_10_TYPENAMES_(T)>
-GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k,  GTEST_10_TUPLE_(T)))
-get(const GTEST_10_TUPLE_(T)& t) {
-  return gtest_internal::Get<k>::ConstField(t);
-}
-
-// 6.1.3.5 Relational operators
-
-// We only implement == and !=, as we don't have a need for the rest yet.
-
-namespace gtest_internal {
-
-// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the
-// first k fields of t1 equals the first k fields of t2.
-// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if
-// k1 != k2.
-template <int kSize1, int kSize2>
-struct SameSizeTuplePrefixComparator;
-
-template <>
-struct SameSizeTuplePrefixComparator<0, 0> {
-  template <class Tuple1, class Tuple2>
-  static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {
-    return true;
-  }
-};
-
-template <int k>
-struct SameSizeTuplePrefixComparator<k, k> {
-  template <class Tuple1, class Tuple2>
-  static bool Eq(const Tuple1& t1, const Tuple2& t2) {
-    return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&
-        ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);
-  }
-};
-
-}  // namespace gtest_internal
-
-template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
-inline bool operator==(const GTEST_10_TUPLE_(T)& t,
-                       const GTEST_10_TUPLE_(U)& u) {
-  return gtest_internal::SameSizeTuplePrefixComparator<
-      tuple_size<GTEST_10_TUPLE_(T)>::value,
-      tuple_size<GTEST_10_TUPLE_(U)>::value>::Eq(t, u);
-}
-
-template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
-inline bool operator!=(const GTEST_10_TUPLE_(T)& t,
-                       const GTEST_10_TUPLE_(U)& u) { return !(t == u); }
-
-// 6.1.4 Pairs.
-// Unimplemented.
-
-}  // namespace tr1
-}  // namespace std
-
-#undef GTEST_0_TUPLE_
-#undef GTEST_1_TUPLE_
-#undef GTEST_2_TUPLE_
-#undef GTEST_3_TUPLE_
-#undef GTEST_4_TUPLE_
-#undef GTEST_5_TUPLE_
-#undef GTEST_6_TUPLE_
-#undef GTEST_7_TUPLE_
-#undef GTEST_8_TUPLE_
-#undef GTEST_9_TUPLE_
-#undef GTEST_10_TUPLE_
-
-#undef GTEST_0_TYPENAMES_
-#undef GTEST_1_TYPENAMES_
-#undef GTEST_2_TYPENAMES_
-#undef GTEST_3_TYPENAMES_
-#undef GTEST_4_TYPENAMES_
-#undef GTEST_5_TYPENAMES_
-#undef GTEST_6_TYPENAMES_
-#undef GTEST_7_TYPENAMES_
-#undef GTEST_8_TYPENAMES_
-#undef GTEST_9_TYPENAMES_
-#undef GTEST_10_TYPENAMES_
-
-#undef GTEST_DECLARE_TUPLE_AS_FRIEND_
-#undef GTEST_BY_REF_
-#undef GTEST_ADD_REF_
-#undef GTEST_TUPLE_ELEMENT_
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-tuple.h.pump b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-tuple.h.pump
deleted file mode 100644
index ef51909..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-tuple.h.pump
+++ /dev/null
@@ -1,336 +0,0 @@
-$$ -*- mode: c++; -*-
-$var n = 10  $$ Maximum number of tuple fields we want to support.
-$$ This meta comment fixes auto-indentation in Emacs. }}
-// Copyright 2009 Google Inc.
-// All Rights Reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-
-// Implements a subset of TR1 tuple needed by Google Test and Google Mock.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
-
-#include <utility>  // For ::std::pair.
-
-// The compiler used in Symbian has a bug that prevents us from declaring the
-// tuple template as a friend (it complains that tuple is redefined).  This
-// hack bypasses the bug by declaring the members that should otherwise be
-// private as public.
-// Sun Studio versions < 12 also have the above bug.
-#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
-# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
-#else
-# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
-    template <GTEST_$(n)_TYPENAMES_(U)> friend class tuple; \
-   private:
-#endif
-
-
-$range i 0..n-1
-$range j 0..n
-$range k 1..n
-// GTEST_n_TUPLE_(T) is the type of an n-tuple.
-#define GTEST_0_TUPLE_(T) tuple<>
-
-$for k [[
-$range m 0..k-1
-$range m2 k..n-1
-#define GTEST_$(k)_TUPLE_(T) tuple<$for m, [[T##$m]]$for m2 [[, void]]>
-
-]]
-
-// GTEST_n_TYPENAMES_(T) declares a list of n typenames.
-
-$for j [[
-$range m 0..j-1
-#define GTEST_$(j)_TYPENAMES_(T) $for m, [[typename T##$m]]
-
-
-]]
-
-// In theory, defining stuff in the ::std namespace is undefined
-// behavior.  We can do this as we are playing the role of a standard
-// library vendor.
-namespace std {
-namespace tr1 {
-
-template <$for i, [[typename T$i = void]]>
-class tuple;
-
-// Anything in namespace gtest_internal is Google Test's INTERNAL
-// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.
-namespace gtest_internal {
-
-// ByRef<T>::type is T if T is a reference; otherwise it's const T&.
-template <typename T>
-struct ByRef { typedef const T& type; };  // NOLINT
-template <typename T>
-struct ByRef<T&> { typedef T& type; };  // NOLINT
-
-// A handy wrapper for ByRef.
-#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type
-
-// AddRef<T>::type is T if T is a reference; otherwise it's T&.  This
-// is the same as tr1::add_reference<T>::type.
-template <typename T>
-struct AddRef { typedef T& type; };  // NOLINT
-template <typename T>
-struct AddRef<T&> { typedef T& type; };  // NOLINT
-
-// A handy wrapper for AddRef.
-#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type
-
-// A helper for implementing get<k>().
-template <int k> class Get;
-
-// A helper for implementing tuple_element<k, T>.  kIndexValid is true
-// iff k < the number of fields in tuple type T.
-template <bool kIndexValid, int kIndex, class Tuple>
-struct TupleElement;
-
-
-$for i [[
-template <GTEST_$(n)_TYPENAMES_(T)>
-struct TupleElement<true, $i, GTEST_$(n)_TUPLE_(T)> [[]]
-{ typedef T$i type; };
-
-
-]]
-}  // namespace gtest_internal
-
-template <>
-class tuple<> {
- public:
-  tuple() {}
-  tuple(const tuple& /* t */)  {}
-  tuple& operator=(const tuple& /* t */) { return *this; }
-};
-
-
-$for k [[
-$range m 0..k-1
-template <GTEST_$(k)_TYPENAMES_(T)>
-class $if k < n [[GTEST_$(k)_TUPLE_(T)]] $else [[tuple]] {
- public:
-  template <int k> friend class gtest_internal::Get;
-
-  tuple() : $for m, [[f$(m)_()]] {}
-
-  explicit tuple($for m, [[GTEST_BY_REF_(T$m) f$m]]) : [[]]
-$for m, [[f$(m)_(f$m)]] {}
-
-  tuple(const tuple& t) : $for m, [[f$(m)_(t.f$(m)_)]] {}
-
-  template <GTEST_$(k)_TYPENAMES_(U)>
-  tuple(const GTEST_$(k)_TUPLE_(U)& t) : $for m, [[f$(m)_(t.f$(m)_)]] {}
-
-$if k == 2 [[
-  template <typename U0, typename U1>
-  tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}
-
-]]
-
-  tuple& operator=(const tuple& t) { return CopyFrom(t); }
-
-  template <GTEST_$(k)_TYPENAMES_(U)>
-  tuple& operator=(const GTEST_$(k)_TUPLE_(U)& t) {
-    return CopyFrom(t);
-  }
-
-$if k == 2 [[
-  template <typename U0, typename U1>
-  tuple& operator=(const ::std::pair<U0, U1>& p) {
-    f0_ = p.first;
-    f1_ = p.second;
-    return *this;
-  }
-
-]]
-
-  GTEST_DECLARE_TUPLE_AS_FRIEND_
-
-  template <GTEST_$(k)_TYPENAMES_(U)>
-  tuple& CopyFrom(const GTEST_$(k)_TUPLE_(U)& t) {
-
-$for m [[
-    f$(m)_ = t.f$(m)_;
-
-]]
-    return *this;
-  }
-
-
-$for m [[
-  T$m f$(m)_;
-
-]]
-};
-
-
-]]
-// 6.1.3.2 Tuple creation functions.
-
-// Known limitations: we don't support passing an
-// std::tr1::reference_wrapper<T> to make_tuple().  And we don't
-// implement tie().
-
-inline tuple<> make_tuple() { return tuple<>(); }
-
-$for k [[
-$range m 0..k-1
-
-template <GTEST_$(k)_TYPENAMES_(T)>
-inline GTEST_$(k)_TUPLE_(T) make_tuple($for m, [[const T$m& f$m]]) {
-  return GTEST_$(k)_TUPLE_(T)($for m, [[f$m]]);
-}
-
-]]
-
-// 6.1.3.3 Tuple helper classes.
-
-template <typename Tuple> struct tuple_size;
-
-
-$for j [[
-template <GTEST_$(j)_TYPENAMES_(T)>
-struct tuple_size<GTEST_$(j)_TUPLE_(T)> { static const int value = $j; };
-
-
-]]
-template <int k, class Tuple>
-struct tuple_element {
-  typedef typename gtest_internal::TupleElement<
-      k < (tuple_size<Tuple>::value), k, Tuple>::type type;
-};
-
-#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type
-
-// 6.1.3.4 Element access.
-
-namespace gtest_internal {
-
-
-$for i [[
-template <>
-class Get<$i> {
- public:
-  template <class Tuple>
-  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple))
-  Field(Tuple& t) { return t.f$(i)_; }  // NOLINT
-
-  template <class Tuple>
-  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple))
-  ConstField(const Tuple& t) { return t.f$(i)_; }
-};
-
-
-]]
-}  // namespace gtest_internal
-
-template <int k, GTEST_$(n)_TYPENAMES_(T)>
-GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_$(n)_TUPLE_(T)))
-get(GTEST_$(n)_TUPLE_(T)& t) {
-  return gtest_internal::Get<k>::Field(t);
-}
-
-template <int k, GTEST_$(n)_TYPENAMES_(T)>
-GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k,  GTEST_$(n)_TUPLE_(T)))
-get(const GTEST_$(n)_TUPLE_(T)& t) {
-  return gtest_internal::Get<k>::ConstField(t);
-}
-
-// 6.1.3.5 Relational operators
-
-// We only implement == and !=, as we don't have a need for the rest yet.
-
-namespace gtest_internal {
-
-// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the
-// first k fields of t1 equals the first k fields of t2.
-// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if
-// k1 != k2.
-template <int kSize1, int kSize2>
-struct SameSizeTuplePrefixComparator;
-
-template <>
-struct SameSizeTuplePrefixComparator<0, 0> {
-  template <class Tuple1, class Tuple2>
-  static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {
-    return true;
-  }
-};
-
-template <int k>
-struct SameSizeTuplePrefixComparator<k, k> {
-  template <class Tuple1, class Tuple2>
-  static bool Eq(const Tuple1& t1, const Tuple2& t2) {
-    return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&
-        ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);
-  }
-};
-
-}  // namespace gtest_internal
-
-template <GTEST_$(n)_TYPENAMES_(T), GTEST_$(n)_TYPENAMES_(U)>
-inline bool operator==(const GTEST_$(n)_TUPLE_(T)& t,
-                       const GTEST_$(n)_TUPLE_(U)& u) {
-  return gtest_internal::SameSizeTuplePrefixComparator<
-      tuple_size<GTEST_$(n)_TUPLE_(T)>::value,
-      tuple_size<GTEST_$(n)_TUPLE_(U)>::value>::Eq(t, u);
-}
-
-template <GTEST_$(n)_TYPENAMES_(T), GTEST_$(n)_TYPENAMES_(U)>
-inline bool operator!=(const GTEST_$(n)_TUPLE_(T)& t,
-                       const GTEST_$(n)_TUPLE_(U)& u) { return !(t == u); }
-
-// 6.1.4 Pairs.
-// Unimplemented.
-
-}  // namespace tr1
-}  // namespace std
-
-
-$for j [[
-#undef GTEST_$(j)_TUPLE_
-
-]]
-
-
-$for j [[
-#undef GTEST_$(j)_TYPENAMES_
-
-]]
-
-#undef GTEST_DECLARE_TUPLE_AS_FRIEND_
-#undef GTEST_BY_REF_
-#undef GTEST_ADD_REF_
-#undef GTEST_TUPLE_ELEMENT_
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-type-util.h b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-type-util.h
deleted file mode 100644
index b7b01b0..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-type-util.h
+++ /dev/null
@@ -1,3330 +0,0 @@
-// This file was GENERATED by command:
-//     pump.py gtest-type-util.h.pump
-// DO NOT EDIT BY HAND!!!
-
-// Copyright 2008 Google Inc.
-// All Rights Reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-
-// Type utilities needed for implementing typed and type-parameterized
-// tests.  This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
-//
-// Currently we support at most 50 types in a list, and at most 50
-// type-parameterized tests in one type-parameterized test case.
-// Please contact googletestframework at googlegroups.com if you need
-// more.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
-
-#include "gtest/internal/gtest-port.h"
-#include "gtest/internal/gtest-string.h"
-
-// #ifdef __GNUC__ is too general here.  It is possible to use gcc without using
-// libstdc++ (which is where cxxabi.h comes from).
-# ifdef __GLIBCXX__
-#  include <cxxabi.h>
-# elif defined(__HP_aCC)
-#  include <acxx_demangle.h>
-# endif  // __GLIBCXX__
-
-namespace testing {
-namespace internal {
-
-// GetTypeName<T>() returns a human-readable name of type T.
-// NB: This function is also used in Google Mock, so don't move it inside of
-// the typed-test-only section below.
-template <typename T>
-String GetTypeName() {
-# if GTEST_HAS_RTTI
-
-  const char* const name = typeid(T).name();
-#  if defined(__GLIBCXX__) || defined(__HP_aCC)
-  int status = 0;
-  // gcc's implementation of typeid(T).name() mangles the type name,
-  // so we have to demangle it.
-#   ifdef __GLIBCXX__
-  using abi::__cxa_demangle;
-#   endif // __GLIBCXX__
-  char* const readable_name = __cxa_demangle(name, 0, 0, &status);
-  const String name_str(status == 0 ? readable_name : name);
-  free(readable_name);
-  return name_str;
-#  else
-  return name;
-#  endif  // __GLIBCXX__ || __HP_aCC
-
-# else
-
-  return "<type>";
-
-# endif  // GTEST_HAS_RTTI
-}
-
-#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
-
-// AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same
-// type.  This can be used as a compile-time assertion to ensure that
-// two types are equal.
-
-template <typename T1, typename T2>
-struct AssertTypeEq;
-
-template <typename T>
-struct AssertTypeEq<T, T> {
-  typedef bool type;
-};
-
-// A unique type used as the default value for the arguments of class
-// template Types.  This allows us to simulate variadic templates
-// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
-// support directly.
-struct None {};
-
-// The following family of struct and struct templates are used to
-// represent type lists.  In particular, TypesN<T1, T2, ..., TN>
-// represents a type list with N types (T1, T2, ..., and TN) in it.
-// Except for Types0, every struct in the family has two member types:
-// Head for the first type in the list, and Tail for the rest of the
-// list.
-
-// The empty type list.
-struct Types0 {};
-
-// Type lists of length 1, 2, 3, and so on.
-
-template <typename T1>
-struct Types1 {
-  typedef T1 Head;
-  typedef Types0 Tail;
-};
-template <typename T1, typename T2>
-struct Types2 {
-  typedef T1 Head;
-  typedef Types1<T2> Tail;
-};
-
-template <typename T1, typename T2, typename T3>
-struct Types3 {
-  typedef T1 Head;
-  typedef Types2<T2, T3> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4>
-struct Types4 {
-  typedef T1 Head;
-  typedef Types3<T2, T3, T4> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5>
-struct Types5 {
-  typedef T1 Head;
-  typedef Types4<T2, T3, T4, T5> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6>
-struct Types6 {
-  typedef T1 Head;
-  typedef Types5<T2, T3, T4, T5, T6> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7>
-struct Types7 {
-  typedef T1 Head;
-  typedef Types6<T2, T3, T4, T5, T6, T7> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8>
-struct Types8 {
-  typedef T1 Head;
-  typedef Types7<T2, T3, T4, T5, T6, T7, T8> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9>
-struct Types9 {
-  typedef T1 Head;
-  typedef Types8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10>
-struct Types10 {
-  typedef T1 Head;
-  typedef Types9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11>
-struct Types11 {
-  typedef T1 Head;
-  typedef Types10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12>
-struct Types12 {
-  typedef T1 Head;
-  typedef Types11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13>
-struct Types13 {
-  typedef T1 Head;
-  typedef Types12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14>
-struct Types14 {
-  typedef T1 Head;
-  typedef Types13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15>
-struct Types15 {
-  typedef T1 Head;
-  typedef Types14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16>
-struct Types16 {
-  typedef T1 Head;
-  typedef Types15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17>
-struct Types17 {
-  typedef T1 Head;
-  typedef Types16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18>
-struct Types18 {
-  typedef T1 Head;
-  typedef Types17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19>
-struct Types19 {
-  typedef T1 Head;
-  typedef Types18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20>
-struct Types20 {
-  typedef T1 Head;
-  typedef Types19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21>
-struct Types21 {
-  typedef T1 Head;
-  typedef Types20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22>
-struct Types22 {
-  typedef T1 Head;
-  typedef Types21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23>
-struct Types23 {
-  typedef T1 Head;
-  typedef Types22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24>
-struct Types24 {
-  typedef T1 Head;
-  typedef Types23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25>
-struct Types25 {
-  typedef T1 Head;
-  typedef Types24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26>
-struct Types26 {
-  typedef T1 Head;
-  typedef Types25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27>
-struct Types27 {
-  typedef T1 Head;
-  typedef Types26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28>
-struct Types28 {
-  typedef T1 Head;
-  typedef Types27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29>
-struct Types29 {
-  typedef T1 Head;
-  typedef Types28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30>
-struct Types30 {
-  typedef T1 Head;
-  typedef Types29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31>
-struct Types31 {
-  typedef T1 Head;
-  typedef Types30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32>
-struct Types32 {
-  typedef T1 Head;
-  typedef Types31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33>
-struct Types33 {
-  typedef T1 Head;
-  typedef Types32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34>
-struct Types34 {
-  typedef T1 Head;
-  typedef Types33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35>
-struct Types35 {
-  typedef T1 Head;
-  typedef Types34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36>
-struct Types36 {
-  typedef T1 Head;
-  typedef Types35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37>
-struct Types37 {
-  typedef T1 Head;
-  typedef Types36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38>
-struct Types38 {
-  typedef T1 Head;
-  typedef Types37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39>
-struct Types39 {
-  typedef T1 Head;
-  typedef Types38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40>
-struct Types40 {
-  typedef T1 Head;
-  typedef Types39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41>
-struct Types41 {
-  typedef T1 Head;
-  typedef Types40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42>
-struct Types42 {
-  typedef T1 Head;
-  typedef Types41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43>
-struct Types43 {
-  typedef T1 Head;
-  typedef Types42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
-      T43> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44>
-struct Types44 {
-  typedef T1 Head;
-  typedef Types43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-      T44> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45>
-struct Types45 {
-  typedef T1 Head;
-  typedef Types44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-      T44, T45> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46>
-struct Types46 {
-  typedef T1 Head;
-  typedef Types45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-      T44, T45, T46> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47>
-struct Types47 {
-  typedef T1 Head;
-  typedef Types46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-      T44, T45, T46, T47> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48>
-struct Types48 {
-  typedef T1 Head;
-  typedef Types47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-      T44, T45, T46, T47, T48> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48, typename T49>
-struct Types49 {
-  typedef T1 Head;
-  typedef Types48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-      T44, T45, T46, T47, T48, T49> Tail;
-};
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48, typename T49, typename T50>
-struct Types50 {
-  typedef T1 Head;
-  typedef Types49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-      T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-      T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-      T44, T45, T46, T47, T48, T49, T50> Tail;
-};
-
-
-}  // namespace internal
-
-// We don't want to require the users to write TypesN<...> directly,
-// as that would require them to count the length.  Types<...> is much
-// easier to write, but generates horrible messages when there is a
-// compiler error, as gcc insists on printing out each template
-// argument, even if it has the default value (this means Types<int>
-// will appear as Types<int, None, None, ..., None> in the compiler
-// errors).
-//
-// Our solution is to combine the best part of the two approaches: a
-// user would write Types<T1, ..., TN>, and Google Test will translate
-// that to TypesN<T1, ..., TN> internally to make error messages
-// readable.  The translation is done by the 'type' member of the
-// Types template.
-template <typename T1 = internal::None, typename T2 = internal::None,
-    typename T3 = internal::None, typename T4 = internal::None,
-    typename T5 = internal::None, typename T6 = internal::None,
-    typename T7 = internal::None, typename T8 = internal::None,
-    typename T9 = internal::None, typename T10 = internal::None,
-    typename T11 = internal::None, typename T12 = internal::None,
-    typename T13 = internal::None, typename T14 = internal::None,
-    typename T15 = internal::None, typename T16 = internal::None,
-    typename T17 = internal::None, typename T18 = internal::None,
-    typename T19 = internal::None, typename T20 = internal::None,
-    typename T21 = internal::None, typename T22 = internal::None,
-    typename T23 = internal::None, typename T24 = internal::None,
-    typename T25 = internal::None, typename T26 = internal::None,
-    typename T27 = internal::None, typename T28 = internal::None,
-    typename T29 = internal::None, typename T30 = internal::None,
-    typename T31 = internal::None, typename T32 = internal::None,
-    typename T33 = internal::None, typename T34 = internal::None,
-    typename T35 = internal::None, typename T36 = internal::None,
-    typename T37 = internal::None, typename T38 = internal::None,
-    typename T39 = internal::None, typename T40 = internal::None,
-    typename T41 = internal::None, typename T42 = internal::None,
-    typename T43 = internal::None, typename T44 = internal::None,
-    typename T45 = internal::None, typename T46 = internal::None,
-    typename T47 = internal::None, typename T48 = internal::None,
-    typename T49 = internal::None, typename T50 = internal::None>
-struct Types {
-  typedef internal::Types50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41, T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
-};
-
-template <>
-struct Types<internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types0 type;
-};
-template <typename T1>
-struct Types<T1, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types1<T1> type;
-};
-template <typename T1, typename T2>
-struct Types<T1, T2, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types2<T1, T2> type;
-};
-template <typename T1, typename T2, typename T3>
-struct Types<T1, T2, T3, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None> {
-  typedef internal::Types3<T1, T2, T3> type;
-};
-template <typename T1, typename T2, typename T3, typename T4>
-struct Types<T1, T2, T3, T4, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None> {
-  typedef internal::Types4<T1, T2, T3, T4> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5>
-struct Types<T1, T2, T3, T4, T5, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None> {
-  typedef internal::Types5<T1, T2, T3, T4, T5> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6>
-struct Types<T1, T2, T3, T4, T5, T6, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types6<T1, T2, T3, T4, T5, T6> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7>
-struct Types<T1, T2, T3, T4, T5, T6, T7, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types7<T1, T2, T3, T4, T5, T6, T7> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None> {
-  typedef internal::Types8<T1, T2, T3, T4, T5, T6, T7, T8> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None> {
-  typedef internal::Types9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None> {
-  typedef internal::Types10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
-      T12> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None> {
-  typedef internal::Types14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None> {
-  typedef internal::Types15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None> {
-  typedef internal::Types19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None> {
-  typedef internal::Types20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None> {
-  typedef internal::Types21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None> {
-  typedef internal::Types25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None> {
-  typedef internal::Types26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25,
-      T26> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None> {
-  typedef internal::Types30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None> {
-  typedef internal::Types31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None> {
-  typedef internal::Types35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None> {
-  typedef internal::Types36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None> {
-  typedef internal::Types37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, T39, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39,
-      T40> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None, internal::None> {
-  typedef internal::Types41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, internal::None,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None> {
-  typedef internal::Types42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41, T42> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None, internal::None> {
-  typedef internal::Types43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41, T42, T43> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None, internal::None> {
-  typedef internal::Types44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41, T42, T43, T44> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
-    internal::None, internal::None, internal::None, internal::None,
-    internal::None> {
-  typedef internal::Types45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41, T42, T43, T44, T45> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
-    T46, internal::None, internal::None, internal::None, internal::None> {
-  typedef internal::Types46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41, T42, T43, T44, T45, T46> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
-    T46, T47, internal::None, internal::None, internal::None> {
-  typedef internal::Types47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41, T42, T43, T44, T45, T46, T47> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
-    T46, T47, T48, internal::None, internal::None> {
-  typedef internal::Types48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41, T42, T43, T44, T45, T46, T47, T48> type;
-};
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48, typename T49>
-struct Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15,
-    T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29, T30,
-    T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44, T45,
-    T46, T47, T48, T49, internal::None> {
-  typedef internal::Types49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41, T42, T43, T44, T45, T46, T47, T48, T49> type;
-};
-
-namespace internal {
-
-# define GTEST_TEMPLATE_ template <typename T> class
-
-// The template "selector" struct TemplateSel<Tmpl> is used to
-// represent Tmpl, which must be a class template with one type
-// parameter, as a type.  TemplateSel<Tmpl>::Bind<T>::type is defined
-// as the type Tmpl<T>.  This allows us to actually instantiate the
-// template "selected" by TemplateSel<Tmpl>.
-//
-// This trick is necessary for simulating typedef for class templates,
-// which C++ doesn't support directly.
-template <GTEST_TEMPLATE_ Tmpl>
-struct TemplateSel {
-  template <typename T>
-  struct Bind {
-    typedef Tmpl<T> type;
-  };
-};
-
-# define GTEST_BIND_(TmplSel, T) \
-  TmplSel::template Bind<T>::type
-
-// A unique struct template used as the default value for the
-// arguments of class template Templates.  This allows us to simulate
-// variadic templates (e.g. Templates<int>, Templates<int, double>,
-// and etc), which C++ doesn't support directly.
-template <typename T>
-struct NoneT {};
-
-// The following family of struct and struct templates are used to
-// represent template lists.  In particular, TemplatesN<T1, T2, ...,
-// TN> represents a list of N templates (T1, T2, ..., and TN).  Except
-// for Templates0, every struct in the family has two member types:
-// Head for the selector of the first template in the list, and Tail
-// for the rest of the list.
-
-// The empty template list.
-struct Templates0 {};
-
-// Template lists of length 1, 2, 3, and so on.
-
-template <GTEST_TEMPLATE_ T1>
-struct Templates1 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates0 Tail;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
-struct Templates2 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates1<T2> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
-struct Templates3 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates2<T2, T3> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4>
-struct Templates4 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates3<T2, T3, T4> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
-struct Templates5 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates4<T2, T3, T4, T5> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
-struct Templates6 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates5<T2, T3, T4, T5, T6> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7>
-struct Templates7 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates6<T2, T3, T4, T5, T6, T7> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
-struct Templates8 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates7<T2, T3, T4, T5, T6, T7, T8> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
-struct Templates9 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates8<T2, T3, T4, T5, T6, T7, T8, T9> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10>
-struct Templates10 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates9<T2, T3, T4, T5, T6, T7, T8, T9, T10> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
-struct Templates11 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates10<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
-struct Templates12 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates11<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13>
-struct Templates13 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates12<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
-struct Templates14 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates13<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
-struct Templates15 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates14<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16>
-struct Templates16 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates15<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
-struct Templates17 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates16<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
-struct Templates18 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates17<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19>
-struct Templates19 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates18<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
-struct Templates20 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates19<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
-struct Templates21 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates20<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22>
-struct Templates22 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates21<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
-struct Templates23 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates22<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
-struct Templates24 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates23<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25>
-struct Templates25 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates24<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
-struct Templates26 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates25<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
-struct Templates27 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates26<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28>
-struct Templates28 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates27<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
-struct Templates29 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates28<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
-struct Templates30 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates29<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31>
-struct Templates31 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates30<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
-struct Templates32 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates31<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
-struct Templates33 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates32<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34>
-struct Templates34 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates33<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
-struct Templates35 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates34<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
-struct Templates36 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates35<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37>
-struct Templates37 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates36<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
-struct Templates38 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates37<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
-struct Templates39 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates38<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40>
-struct Templates40 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates39<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
-struct Templates41 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates40<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
-struct Templates42 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates41<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
-      T42> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43>
-struct Templates43 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates42<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
-      T43> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
-struct Templates44 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates43<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
-      T43, T44> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
-struct Templates45 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates44<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
-      T43, T44, T45> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
-    GTEST_TEMPLATE_ T46>
-struct Templates46 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates45<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
-      T43, T44, T45, T46> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
-    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
-struct Templates47 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates46<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
-      T43, T44, T45, T46, T47> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
-    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
-struct Templates48 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates47<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
-      T43, T44, T45, T46, T47, T48> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
-    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
-    GTEST_TEMPLATE_ T49>
-struct Templates49 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates48<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
-      T43, T44, T45, T46, T47, T48, T49> Tail;
-};
-
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
-    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
-    GTEST_TEMPLATE_ T49, GTEST_TEMPLATE_ T50>
-struct Templates50 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates49<T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-      T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-      T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42,
-      T43, T44, T45, T46, T47, T48, T49, T50> Tail;
-};
-
-
-// We don't want to require the users to write TemplatesN<...> directly,
-// as that would require them to count the length.  Templates<...> is much
-// easier to write, but generates horrible messages when there is a
-// compiler error, as gcc insists on printing out each template
-// argument, even if it has the default value (this means Templates<list>
-// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler
-// errors).
-//
-// Our solution is to combine the best part of the two approaches: a
-// user would write Templates<T1, ..., TN>, and Google Test will translate
-// that to TemplatesN<T1, ..., TN> internally to make error messages
-// readable.  The translation is done by the 'type' member of the
-// Templates template.
-template <GTEST_TEMPLATE_ T1 = NoneT, GTEST_TEMPLATE_ T2 = NoneT,
-    GTEST_TEMPLATE_ T3 = NoneT, GTEST_TEMPLATE_ T4 = NoneT,
-    GTEST_TEMPLATE_ T5 = NoneT, GTEST_TEMPLATE_ T6 = NoneT,
-    GTEST_TEMPLATE_ T7 = NoneT, GTEST_TEMPLATE_ T8 = NoneT,
-    GTEST_TEMPLATE_ T9 = NoneT, GTEST_TEMPLATE_ T10 = NoneT,
-    GTEST_TEMPLATE_ T11 = NoneT, GTEST_TEMPLATE_ T12 = NoneT,
-    GTEST_TEMPLATE_ T13 = NoneT, GTEST_TEMPLATE_ T14 = NoneT,
-    GTEST_TEMPLATE_ T15 = NoneT, GTEST_TEMPLATE_ T16 = NoneT,
-    GTEST_TEMPLATE_ T17 = NoneT, GTEST_TEMPLATE_ T18 = NoneT,
-    GTEST_TEMPLATE_ T19 = NoneT, GTEST_TEMPLATE_ T20 = NoneT,
-    GTEST_TEMPLATE_ T21 = NoneT, GTEST_TEMPLATE_ T22 = NoneT,
-    GTEST_TEMPLATE_ T23 = NoneT, GTEST_TEMPLATE_ T24 = NoneT,
-    GTEST_TEMPLATE_ T25 = NoneT, GTEST_TEMPLATE_ T26 = NoneT,
-    GTEST_TEMPLATE_ T27 = NoneT, GTEST_TEMPLATE_ T28 = NoneT,
-    GTEST_TEMPLATE_ T29 = NoneT, GTEST_TEMPLATE_ T30 = NoneT,
-    GTEST_TEMPLATE_ T31 = NoneT, GTEST_TEMPLATE_ T32 = NoneT,
-    GTEST_TEMPLATE_ T33 = NoneT, GTEST_TEMPLATE_ T34 = NoneT,
-    GTEST_TEMPLATE_ T35 = NoneT, GTEST_TEMPLATE_ T36 = NoneT,
-    GTEST_TEMPLATE_ T37 = NoneT, GTEST_TEMPLATE_ T38 = NoneT,
-    GTEST_TEMPLATE_ T39 = NoneT, GTEST_TEMPLATE_ T40 = NoneT,
-    GTEST_TEMPLATE_ T41 = NoneT, GTEST_TEMPLATE_ T42 = NoneT,
-    GTEST_TEMPLATE_ T43 = NoneT, GTEST_TEMPLATE_ T44 = NoneT,
-    GTEST_TEMPLATE_ T45 = NoneT, GTEST_TEMPLATE_ T46 = NoneT,
-    GTEST_TEMPLATE_ T47 = NoneT, GTEST_TEMPLATE_ T48 = NoneT,
-    GTEST_TEMPLATE_ T49 = NoneT, GTEST_TEMPLATE_ T50 = NoneT>
-struct Templates {
-  typedef Templates50<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
-      T42, T43, T44, T45, T46, T47, T48, T49, T50> type;
-};
-
-template <>
-struct Templates<NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT> {
-  typedef Templates0 type;
-};
-template <GTEST_TEMPLATE_ T1>
-struct Templates<T1, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT> {
-  typedef Templates1<T1> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2>
-struct Templates<T1, T2, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT> {
-  typedef Templates2<T1, T2> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3>
-struct Templates<T1, T2, T3, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates3<T1, T2, T3> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4>
-struct Templates<T1, T2, T3, T4, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates4<T1, T2, T3, T4> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5>
-struct Templates<T1, T2, T3, T4, T5, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates5<T1, T2, T3, T4, T5> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6>
-struct Templates<T1, T2, T3, T4, T5, T6, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates6<T1, T2, T3, T4, T5, T6> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates7<T1, T2, T3, T4, T5, T6, T7> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates8<T1, T2, T3, T4, T5, T6, T7, T8> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates9<T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates12<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates13<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates14<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates15<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates16<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates17<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates18<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates19<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates20<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates21<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT> {
-  typedef Templates22<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT> {
-  typedef Templates23<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT> {
-  typedef Templates24<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT> {
-  typedef Templates25<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT> {
-  typedef Templates26<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT> {
-  typedef Templates27<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT> {
-  typedef Templates28<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT> {
-  typedef Templates29<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates30<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates31<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates32<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates33<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates34<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates35<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates36<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, NoneT, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates37<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, NoneT, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates38<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates39<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, NoneT, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates40<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, NoneT, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates41<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, NoneT,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates42<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
-      T42> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates43<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
-      T42, T43> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
-    NoneT, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates44<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
-      T42, T43, T44> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
-    T45, NoneT, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates45<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
-      T42, T43, T44, T45> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
-    GTEST_TEMPLATE_ T46>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
-    T45, T46, NoneT, NoneT, NoneT, NoneT> {
-  typedef Templates46<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
-      T42, T43, T44, T45, T46> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
-    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
-    T45, T46, T47, NoneT, NoneT, NoneT> {
-  typedef Templates47<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
-      T42, T43, T44, T45, T46, T47> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
-    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
-    T45, T46, T47, T48, NoneT, NoneT> {
-  typedef Templates48<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
-      T42, T43, T44, T45, T46, T47, T48> type;
-};
-template <GTEST_TEMPLATE_ T1, GTEST_TEMPLATE_ T2, GTEST_TEMPLATE_ T3,
-    GTEST_TEMPLATE_ T4, GTEST_TEMPLATE_ T5, GTEST_TEMPLATE_ T6,
-    GTEST_TEMPLATE_ T7, GTEST_TEMPLATE_ T8, GTEST_TEMPLATE_ T9,
-    GTEST_TEMPLATE_ T10, GTEST_TEMPLATE_ T11, GTEST_TEMPLATE_ T12,
-    GTEST_TEMPLATE_ T13, GTEST_TEMPLATE_ T14, GTEST_TEMPLATE_ T15,
-    GTEST_TEMPLATE_ T16, GTEST_TEMPLATE_ T17, GTEST_TEMPLATE_ T18,
-    GTEST_TEMPLATE_ T19, GTEST_TEMPLATE_ T20, GTEST_TEMPLATE_ T21,
-    GTEST_TEMPLATE_ T22, GTEST_TEMPLATE_ T23, GTEST_TEMPLATE_ T24,
-    GTEST_TEMPLATE_ T25, GTEST_TEMPLATE_ T26, GTEST_TEMPLATE_ T27,
-    GTEST_TEMPLATE_ T28, GTEST_TEMPLATE_ T29, GTEST_TEMPLATE_ T30,
-    GTEST_TEMPLATE_ T31, GTEST_TEMPLATE_ T32, GTEST_TEMPLATE_ T33,
-    GTEST_TEMPLATE_ T34, GTEST_TEMPLATE_ T35, GTEST_TEMPLATE_ T36,
-    GTEST_TEMPLATE_ T37, GTEST_TEMPLATE_ T38, GTEST_TEMPLATE_ T39,
-    GTEST_TEMPLATE_ T40, GTEST_TEMPLATE_ T41, GTEST_TEMPLATE_ T42,
-    GTEST_TEMPLATE_ T43, GTEST_TEMPLATE_ T44, GTEST_TEMPLATE_ T45,
-    GTEST_TEMPLATE_ T46, GTEST_TEMPLATE_ T47, GTEST_TEMPLATE_ T48,
-    GTEST_TEMPLATE_ T49>
-struct Templates<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
-    T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28, T29,
-    T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43, T44,
-    T45, T46, T47, T48, T49, NoneT> {
-  typedef Templates49<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-      T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27,
-      T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41,
-      T42, T43, T44, T45, T46, T47, T48, T49> type;
-};
-
-// The TypeList template makes it possible to use either a single type
-// or a Types<...> list in TYPED_TEST_CASE() and
-// INSTANTIATE_TYPED_TEST_CASE_P().
-
-template <typename T>
-struct TypeList { typedef Types1<T> type; };
-
-template <typename T1, typename T2, typename T3, typename T4, typename T5,
-    typename T6, typename T7, typename T8, typename T9, typename T10,
-    typename T11, typename T12, typename T13, typename T14, typename T15,
-    typename T16, typename T17, typename T18, typename T19, typename T20,
-    typename T21, typename T22, typename T23, typename T24, typename T25,
-    typename T26, typename T27, typename T28, typename T29, typename T30,
-    typename T31, typename T32, typename T33, typename T34, typename T35,
-    typename T36, typename T37, typename T38, typename T39, typename T40,
-    typename T41, typename T42, typename T43, typename T44, typename T45,
-    typename T46, typename T47, typename T48, typename T49, typename T50>
-struct TypeList<Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13,
-    T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26, T27, T28,
-    T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40, T41, T42, T43,
-    T44, T45, T46, T47, T48, T49, T50> > {
-  typedef typename Types<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
-      T13, T14, T15, T16, T17, T18, T19, T20, T21, T22, T23, T24, T25, T26,
-      T27, T28, T29, T30, T31, T32, T33, T34, T35, T36, T37, T38, T39, T40,
-      T41, T42, T43, T44, T45, T46, T47, T48, T49, T50>::type type;
-};
-
-#endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
-
-}  // namespace internal
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-type-util.h.pump b/src/libs_3rdparty/gtest/src/gtest/internal/gtest-type-util.h.pump
deleted file mode 100644
index 27f331d..0000000
--- a/src/libs_3rdparty/gtest/src/gtest/internal/gtest-type-util.h.pump
+++ /dev/null
@@ -1,296 +0,0 @@
-$$ -*- mode: c++; -*-
-$var n = 50  $$ Maximum length of type lists we want to support.
-// Copyright 2008 Google Inc.
-// All Rights Reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-
-// Type utilities needed for implementing typed and type-parameterized
-// tests.  This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
-//
-// Currently we support at most $n types in a list, and at most $n
-// type-parameterized tests in one type-parameterized test case.
-// Please contact googletestframework at googlegroups.com if you need
-// more.
-
-#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
-#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
-
-#include "gtest/internal/gtest-port.h"
-#include "gtest/internal/gtest-string.h"
-
-// #ifdef __GNUC__ is too general here.  It is possible to use gcc without using
-// libstdc++ (which is where cxxabi.h comes from).
-# ifdef __GLIBCXX__
-#  include <cxxabi.h>
-# elif defined(__HP_aCC)
-#  include <acxx_demangle.h>
-# endif  // __GLIBCXX__
-
-namespace testing {
-namespace internal {
-
-// GetTypeName<T>() returns a human-readable name of type T.
-// NB: This function is also used in Google Mock, so don't move it inside of
-// the typed-test-only section below.
-template <typename T>
-String GetTypeName() {
-# if GTEST_HAS_RTTI
-
-  const char* const name = typeid(T).name();
-#  if defined(__GLIBCXX__) || defined(__HP_aCC)
-  int status = 0;
-  // gcc's implementation of typeid(T).name() mangles the type name,
-  // so we have to demangle it.
-#   ifdef __GLIBCXX__
-  using abi::__cxa_demangle;
-#   endif // __GLIBCXX__
-  char* const readable_name = __cxa_demangle(name, 0, 0, &status);
-  const String name_str(status == 0 ? readable_name : name);
-  free(readable_name);
-  return name_str;
-#  else
-  return name;
-#  endif  // __GLIBCXX__ || __HP_aCC
-
-# else
-
-  return "<type>";
-
-# endif  // GTEST_HAS_RTTI
-}
-
-#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
-
-// AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same
-// type.  This can be used as a compile-time assertion to ensure that
-// two types are equal.
-
-template <typename T1, typename T2>
-struct AssertTypeEq;
-
-template <typename T>
-struct AssertTypeEq<T, T> {
-  typedef bool type;
-};
-
-// A unique type used as the default value for the arguments of class
-// template Types.  This allows us to simulate variadic templates
-// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
-// support directly.
-struct None {};
-
-// The following family of struct and struct templates are used to
-// represent type lists.  In particular, TypesN<T1, T2, ..., TN>
-// represents a type list with N types (T1, T2, ..., and TN) in it.
-// Except for Types0, every struct in the family has two member types:
-// Head for the first type in the list, and Tail for the rest of the
-// list.
-
-// The empty type list.
-struct Types0 {};
-
-// Type lists of length 1, 2, 3, and so on.
-
-template <typename T1>
-struct Types1 {
-  typedef T1 Head;
-  typedef Types0 Tail;
-};
-
-$range i 2..n
-
-$for i [[
-$range j 1..i
-$range k 2..i
-template <$for j, [[typename T$j]]>
-struct Types$i {
-  typedef T1 Head;
-  typedef Types$(i-1)<$for k, [[T$k]]> Tail;
-};
-
-
-]]
-
-}  // namespace internal
-
-// We don't want to require the users to write TypesN<...> directly,
-// as that would require them to count the length.  Types<...> is much
-// easier to write, but generates horrible messages when there is a
-// compiler error, as gcc insists on printing out each template
-// argument, even if it has the default value (this means Types<int>
-// will appear as Types<int, None, None, ..., None> in the compiler
-// errors).
-//
-// Our solution is to combine the best part of the two approaches: a
-// user would write Types<T1, ..., TN>, and Google Test will translate
-// that to TypesN<T1, ..., TN> internally to make error messages
-// readable.  The translation is done by the 'type' member of the
-// Types template.
-
-$range i 1..n
-template <$for i, [[typename T$i = internal::None]]>
-struct Types {
-  typedef internal::Types$n<$for i, [[T$i]]> type;
-};
-
-template <>
-struct Types<$for i, [[internal::None]]> {
-  typedef internal::Types0 type;
-};
-
-$range i 1..n-1
-$for i [[
-$range j 1..i
-$range k i+1..n
-template <$for j, [[typename T$j]]>
-struct Types<$for j, [[T$j]]$for k[[, internal::None]]> {
-  typedef internal::Types$i<$for j, [[T$j]]> type;
-};
-
-]]
-
-namespace internal {
-
-# define GTEST_TEMPLATE_ template <typename T> class
-
-// The template "selector" struct TemplateSel<Tmpl> is used to
-// represent Tmpl, which must be a class template with one type
-// parameter, as a type.  TemplateSel<Tmpl>::Bind<T>::type is defined
-// as the type Tmpl<T>.  This allows us to actually instantiate the
-// template "selected" by TemplateSel<Tmpl>.
-//
-// This trick is necessary for simulating typedef for class templates,
-// which C++ doesn't support directly.
-template <GTEST_TEMPLATE_ Tmpl>
-struct TemplateSel {
-  template <typename T>
-  struct Bind {
-    typedef Tmpl<T> type;
-  };
-};
-
-# define GTEST_BIND_(TmplSel, T) \
-  TmplSel::template Bind<T>::type
-
-// A unique struct template used as the default value for the
-// arguments of class template Templates.  This allows us to simulate
-// variadic templates (e.g. Templates<int>, Templates<int, double>,
-// and etc), which C++ doesn't support directly.
-template <typename T>
-struct NoneT {};
-
-// The following family of struct and struct templates are used to
-// represent template lists.  In particular, TemplatesN<T1, T2, ...,
-// TN> represents a list of N templates (T1, T2, ..., and TN).  Except
-// for Templates0, every struct in the family has two member types:
-// Head for the selector of the first template in the list, and Tail
-// for the rest of the list.
-
-// The empty template list.
-struct Templates0 {};
-
-// Template lists of length 1, 2, 3, and so on.
-
-template <GTEST_TEMPLATE_ T1>
-struct Templates1 {
-  typedef TemplateSel<T1> Head;
-  typedef Templates0 Tail;
-};
-
-$range i 2..n
-
-$for i [[
-$range j 1..i
-$range k 2..i
-template <$for j, [[GTEST_TEMPLATE_ T$j]]>
-struct Templates$i {
-  typedef TemplateSel<T1> Head;
-  typedef Templates$(i-1)<$for k, [[T$k]]> Tail;
-};
-
-
-]]
-
-// We don't want to require the users to write TemplatesN<...> directly,
-// as that would require them to count the length.  Templates<...> is much
-// easier to write, but generates horrible messages when there is a
-// compiler error, as gcc insists on printing out each template
-// argument, even if it has the default value (this means Templates<list>
-// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler
-// errors).
-//
-// Our solution is to combine the best part of the two approaches: a
-// user would write Templates<T1, ..., TN>, and Google Test will translate
-// that to TemplatesN<T1, ..., TN> internally to make error messages
-// readable.  The translation is done by the 'type' member of the
-// Templates template.
-
-$range i 1..n
-template <$for i, [[GTEST_TEMPLATE_ T$i = NoneT]]>
-struct Templates {
-  typedef Templates$n<$for i, [[T$i]]> type;
-};
-
-template <>
-struct Templates<$for i, [[NoneT]]> {
-  typedef Templates0 type;
-};
-
-$range i 1..n-1
-$for i [[
-$range j 1..i
-$range k i+1..n
-template <$for j, [[GTEST_TEMPLATE_ T$j]]>
-struct Templates<$for j, [[T$j]]$for k[[, NoneT]]> {
-  typedef Templates$i<$for j, [[T$j]]> type;
-};
-
-]]
-
-// The TypeList template makes it possible to use either a single type
-// or a Types<...> list in TYPED_TEST_CASE() and
-// INSTANTIATE_TYPED_TEST_CASE_P().
-
-template <typename T>
-struct TypeList { typedef Types1<T> type; };
-
-
-$range i 1..n
-template <$for i, [[typename T$i]]>
-struct TypeList<Types<$for i, [[T$i]]> > {
-  typedef typename Types<$for i, [[T$i]]>::type type;
-};
-
-#endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
-
-}  // namespace internal
-}  // namespace testing
-
-#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
diff --git a/src/libs_3rdparty/gtest/src/gtest_main.cc b/src/libs_3rdparty/gtest/src/gtest_main.cc
deleted file mode 100644
index ee67fd6..0000000
--- a/src/libs_3rdparty/gtest/src/gtest_main.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2006, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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 <iostream>
-//#define GTEST_CREATE_SHARED_LIBRARY 1
-//#define GTEST_LINKED_AS_SHARED_LIBRARY 1
-#include "gtest/gtest.h"
-
-GTEST_API_ int main(int argc, char **argv) {
-  std::cout << "Running main() from gtest_main.cc\n";
-
-  testing::InitGoogleTest(&argc, argv);
-  return RUN_ALL_TESTS();
-}
diff --git a/src/libs_3rdparty/gtest/src/gtest_prod_test.cc b/src/libs_3rdparty/gtest/src/gtest_prod_test.cc
deleted file mode 100644
index 060abce..0000000
--- a/src/libs_3rdparty/gtest/src/gtest_prod_test.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2006, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-//
-// Unit test for include/gtest/gtest_prod.h.
-
-#include "gtest/gtest.h"
-#include "test/production.h"
-
-// Tests that private members can be accessed from a TEST declared as
-// a friend of the class.
-TEST(PrivateCodeTest, CanAccessPrivateMembers) {
-  PrivateCode a;
-  EXPECT_EQ(0, a.x_);
-
-  a.set_x(1);
-  EXPECT_EQ(1, a.x_);
-}
-
-typedef testing::Test PrivateCodeFixtureTest;
-
-// Tests that private members can be accessed from a TEST_F declared
-// as a friend of the class.
-TEST_F(PrivateCodeFixtureTest, CanAccessPrivateMembers) {
-  PrivateCode a;
-  EXPECT_EQ(0, a.x_);
-
-  a.set_x(2);
-  EXPECT_EQ(2, a.x_);
-}
diff --git a/src/libs_3rdparty/gtest/src/gtest_unittest.cc b/src/libs_3rdparty/gtest/src/gtest_unittest.cc
deleted file mode 100644
index 23d6860..0000000
--- a/src/libs_3rdparty/gtest/src/gtest_unittest.cc
+++ /dev/null
@@ -1,7337 +0,0 @@
-// Copyright 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-//
-// Tests for Google Test itself.  This verifies that the basic constructs of
-// Google Test work.
-
-#include "gtest/gtest.h"
-#include <vector>
-#include <ostream>
-
-// Verifies that the command line flag variables can be accessed
-// in code once <gtest/gtest.h> has been #included.
-// Do not move it after other #includes.
-TEST(CommandLineFlagsTest, CanBeAccessedInCodeOnceGTestHIsIncluded) {
-  bool dummy = testing::GTEST_FLAG(also_run_disabled_tests)
-      || testing::GTEST_FLAG(break_on_failure)
-      || testing::GTEST_FLAG(catch_exceptions)
-      || testing::GTEST_FLAG(color) != "unknown"
-      || testing::GTEST_FLAG(filter) != "unknown"
-      || testing::GTEST_FLAG(list_tests)
-      || testing::GTEST_FLAG(output) != "unknown"
-      || testing::GTEST_FLAG(print_time)
-      || testing::GTEST_FLAG(random_seed)
-      || testing::GTEST_FLAG(repeat) > 0
-      || testing::GTEST_FLAG(show_internal_stack_frames)
-      || testing::GTEST_FLAG(shuffle)
-      || testing::GTEST_FLAG(stack_trace_depth) > 0
-      || testing::GTEST_FLAG(stream_result_to) != "unknown"
-      || testing::GTEST_FLAG(throw_on_failure);
-  EXPECT_TRUE(dummy || !dummy);  // Suppresses warning that dummy is unused.
-}
-
-#include "gtest/gtest-spi.h"
-
-// Indicates that this translation unit is part of Google Test's
-// implementation.  It must come before gtest-internal-inl.h is
-// included, or there will be a compiler error.  This trick is to
-// prevent a user from accidentally including gtest-internal-inl.h in
-// his code.
-#define GTEST_IMPLEMENTATION_ 1
-#include "src/gtest-internal-inl.h"
-#undef GTEST_IMPLEMENTATION_
-
-#include <limits.h>  // For INT_MAX.
-#include <stdlib.h>
-#include <time.h>
-
-#include <map>
-
-namespace testing {
-namespace internal {
-
-// Provides access to otherwise private parts of the TestEventListeners class
-// that are needed to test it.
-class TestEventListenersAccessor {
- public:
-  static TestEventListener* GetRepeater(TestEventListeners* listeners) {
-    return listeners->repeater();
-  }
-
-  static void SetDefaultResultPrinter(TestEventListeners* listeners,
-                                      TestEventListener* listener) {
-    listeners->SetDefaultResultPrinter(listener);
-  }
-  static void SetDefaultXmlGenerator(TestEventListeners* listeners,
-                                     TestEventListener* listener) {
-    listeners->SetDefaultXmlGenerator(listener);
-  }
-
-  static bool EventForwardingEnabled(const TestEventListeners& listeners) {
-    return listeners.EventForwardingEnabled();
-  }
-
-  static void SuppressEventForwarding(TestEventListeners* listeners) {
-    listeners->SuppressEventForwarding();
-  }
-};
-
-}  // namespace internal
-}  // namespace testing
-
-using testing::AssertionFailure;
-using testing::AssertionResult;
-using testing::AssertionSuccess;
-using testing::DoubleLE;
-using testing::EmptyTestEventListener;
-using testing::FloatLE;
-using testing::GTEST_FLAG(also_run_disabled_tests);
-using testing::GTEST_FLAG(break_on_failure);
-using testing::GTEST_FLAG(catch_exceptions);
-using testing::GTEST_FLAG(color);
-using testing::GTEST_FLAG(death_test_use_fork);
-using testing::GTEST_FLAG(filter);
-using testing::GTEST_FLAG(list_tests);
-using testing::GTEST_FLAG(output);
-using testing::GTEST_FLAG(print_time);
-using testing::GTEST_FLAG(random_seed);
-using testing::GTEST_FLAG(repeat);
-using testing::GTEST_FLAG(show_internal_stack_frames);
-using testing::GTEST_FLAG(shuffle);
-using testing::GTEST_FLAG(stack_trace_depth);
-using testing::GTEST_FLAG(stream_result_to);
-using testing::GTEST_FLAG(throw_on_failure);
-using testing::IsNotSubstring;
-using testing::IsSubstring;
-using testing::Message;
-using testing::ScopedFakeTestPartResultReporter;
-using testing::StaticAssertTypeEq;
-using testing::Test;
-using testing::TestCase;
-using testing::TestEventListeners;
-using testing::TestPartResult;
-using testing::TestPartResultArray;
-using testing::TestProperty;
-using testing::TestResult;
-using testing::UnitTest;
-using testing::kMaxStackTraceDepth;
-using testing::internal::AddReference;
-using testing::internal::AlwaysFalse;
-using testing::internal::AlwaysTrue;
-using testing::internal::AppendUserMessage;
-using testing::internal::ArrayAwareFind;
-using testing::internal::ArrayEq;
-using testing::internal::CodePointToUtf8;
-using testing::internal::CompileAssertTypesEqual;
-using testing::internal::CopyArray;
-using testing::internal::CountIf;
-using testing::internal::EqFailure;
-using testing::internal::FloatingPoint;
-using testing::internal::ForEach;
-using testing::internal::FormatTimeInMillisAsSeconds;
-using testing::internal::GTestFlagSaver;
-using testing::internal::GetCurrentOsStackTraceExceptTop;
-using testing::internal::GetElementOr;
-using testing::internal::GetNextRandomSeed;
-using testing::internal::GetRandomSeedFromFlag;
-using testing::internal::GetTestTypeId;
-using testing::internal::GetTypeId;
-using testing::internal::GetUnitTestImpl;
-using testing::internal::ImplicitlyConvertible;
-using testing::internal::Int32;
-using testing::internal::Int32FromEnvOrDie;
-using testing::internal::IsAProtocolMessage;
-using testing::internal::IsContainer;
-using testing::internal::IsContainerTest;
-using testing::internal::IsNotContainer;
-using testing::internal::NativeArray;
-using testing::internal::ParseInt32Flag;
-using testing::internal::RemoveConst;
-using testing::internal::RemoveReference;
-using testing::internal::ShouldRunTestOnShard;
-using testing::internal::ShouldShard;
-using testing::internal::ShouldUseColor;
-using testing::internal::Shuffle;
-using testing::internal::ShuffleRange;
-using testing::internal::SkipPrefix;
-using testing::internal::StreamableToString;
-using testing::internal::String;
-using testing::internal::TestEventListenersAccessor;
-using testing::internal::TestResultAccessor;
-using testing::internal::UInt32;
-using testing::internal::WideStringToUtf8;
-using testing::internal::kCopy;
-using testing::internal::kMaxRandomSeed;
-using testing::internal::kReference;
-using testing::internal::kTestTypeIdInGoogleTest;
-using testing::internal::scoped_ptr;
-
-#if GTEST_HAS_STREAM_REDIRECTION
-using testing::internal::CaptureStdout;
-using testing::internal::GetCapturedStdout;
-#endif
-
-#if GTEST_IS_THREADSAFE
-using testing::internal::ThreadWithParam;
-#endif
-
-class TestingVector : public std::vector<int> {
-};
-
-::std::ostream& operator<<(::std::ostream& os,
-                           const TestingVector& vector) {
-  os << "{ ";
-  for (size_t i = 0; i < vector.size(); i++) {
-    os << vector[i] << " ";
-  }
-  os << "}";
-  return os;
-}
-
-// This line tests that we can define tests in an unnamed namespace.
-namespace {
-
-TEST(GetRandomSeedFromFlagTest, HandlesZero) {
-  const int seed = GetRandomSeedFromFlag(0);
-  EXPECT_LE(1, seed);
-  EXPECT_LE(seed, static_cast<int>(kMaxRandomSeed));
-}
-
-TEST(GetRandomSeedFromFlagTest, PreservesValidSeed) {
-  EXPECT_EQ(1, GetRandomSeedFromFlag(1));
-  EXPECT_EQ(2, GetRandomSeedFromFlag(2));
-  EXPECT_EQ(kMaxRandomSeed - 1, GetRandomSeedFromFlag(kMaxRandomSeed - 1));
-  EXPECT_EQ(static_cast<int>(kMaxRandomSeed),
-            GetRandomSeedFromFlag(kMaxRandomSeed));
-}
-
-TEST(GetRandomSeedFromFlagTest, NormalizesInvalidSeed) {
-  const int seed1 = GetRandomSeedFromFlag(-1);
-  EXPECT_LE(1, seed1);
-  EXPECT_LE(seed1, static_cast<int>(kMaxRandomSeed));
-
-  const int seed2 = GetRandomSeedFromFlag(kMaxRandomSeed + 1);
-  EXPECT_LE(1, seed2);
-  EXPECT_LE(seed2, static_cast<int>(kMaxRandomSeed));
-}
-
-TEST(GetNextRandomSeedTest, WorksForValidInput) {
-  EXPECT_EQ(2, GetNextRandomSeed(1));
-  EXPECT_EQ(3, GetNextRandomSeed(2));
-  EXPECT_EQ(static_cast<int>(kMaxRandomSeed),
-            GetNextRandomSeed(kMaxRandomSeed - 1));
-  EXPECT_EQ(1, GetNextRandomSeed(kMaxRandomSeed));
-
-  // We deliberately don't test GetNextRandomSeed() with invalid
-  // inputs, as that requires death tests, which are expensive.  This
-  // is fine as GetNextRandomSeed() is internal and has a
-  // straightforward definition.
-}
-
-static void ClearCurrentTestPartResults() {
-  TestResultAccessor::ClearTestPartResults(
-      GetUnitTestImpl()->current_test_result());
-}
-
-// Tests GetTypeId.
-
-TEST(GetTypeIdTest, ReturnsSameValueForSameType) {
-  EXPECT_EQ(GetTypeId<int>(), GetTypeId<int>());
-  EXPECT_EQ(GetTypeId<Test>(), GetTypeId<Test>());
-}
-
-class SubClassOfTest : public Test {};
-class AnotherSubClassOfTest : public Test {};
-
-TEST(GetTypeIdTest, ReturnsDifferentValuesForDifferentTypes) {
-  EXPECT_NE(GetTypeId<int>(), GetTypeId<const int>());
-  EXPECT_NE(GetTypeId<int>(), GetTypeId<char>());
-  EXPECT_NE(GetTypeId<int>(), GetTestTypeId());
-  EXPECT_NE(GetTypeId<SubClassOfTest>(), GetTestTypeId());
-  EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTestTypeId());
-  EXPECT_NE(GetTypeId<AnotherSubClassOfTest>(), GetTypeId<SubClassOfTest>());
-}
-
-// Verifies that GetTestTypeId() returns the same value, no matter it
-// is called from inside Google Test or outside of it.
-TEST(GetTestTypeIdTest, ReturnsTheSameValueInsideOrOutsideOfGoogleTest) {
-  EXPECT_EQ(kTestTypeIdInGoogleTest, GetTestTypeId());
-}
-
-// Tests FormatTimeInMillisAsSeconds().
-
-TEST(FormatTimeInMillisAsSecondsTest, FormatsZero) {
-  EXPECT_EQ("0", FormatTimeInMillisAsSeconds(0));
-}
-
-TEST(FormatTimeInMillisAsSecondsTest, FormatsPositiveNumber) {
-  EXPECT_EQ("0.003", FormatTimeInMillisAsSeconds(3));
-  EXPECT_EQ("0.01", FormatTimeInMillisAsSeconds(10));
-  EXPECT_EQ("0.2", FormatTimeInMillisAsSeconds(200));
-  EXPECT_EQ("1.2", FormatTimeInMillisAsSeconds(1200));
-  EXPECT_EQ("3", FormatTimeInMillisAsSeconds(3000));
-}
-
-TEST(FormatTimeInMillisAsSecondsTest, FormatsNegativeNumber) {
-  EXPECT_EQ("-0.003", FormatTimeInMillisAsSeconds(-3));
-  EXPECT_EQ("-0.01", FormatTimeInMillisAsSeconds(-10));
-  EXPECT_EQ("-0.2", FormatTimeInMillisAsSeconds(-200));
-  EXPECT_EQ("-1.2", FormatTimeInMillisAsSeconds(-1200));
-  EXPECT_EQ("-3", FormatTimeInMillisAsSeconds(-3000));
-}
-
-#if GTEST_CAN_COMPARE_NULL
-
-# ifdef __BORLANDC__
-// Silences warnings: "Condition is always true", "Unreachable code"
-#  pragma option push -w-ccc -w-rch
-# endif
-
-// Tests that GTEST_IS_NULL_LITERAL_(x) is true when x is a null
-// pointer literal.
-TEST(NullLiteralTest, IsTrueForNullLiterals) {
-  EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(NULL));
-  EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0));
-  EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0U));
-  EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(0L));
-
-# ifndef __BORLANDC__
-
-  // Some compilers may fail to detect some null pointer literals;
-  // as long as users of the framework don't use such literals, this
-  // is harmless.
-  EXPECT_TRUE(GTEST_IS_NULL_LITERAL_(1 - 1));
-
-# endif
-}
-
-// Tests that GTEST_IS_NULL_LITERAL_(x) is false when x is not a null
-// pointer literal.
-TEST(NullLiteralTest, IsFalseForNonNullLiterals) {
-  EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(1));
-  EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(0.0));
-  EXPECT_FALSE(GTEST_IS_NULL_LITERAL_('a'));
-  EXPECT_FALSE(GTEST_IS_NULL_LITERAL_(static_cast<void*>(NULL)));
-}
-
-# ifdef __BORLANDC__
-// Restores warnings after previous "#pragma option push" suppressed them.
-#  pragma option pop
-# endif
-
-#endif  // GTEST_CAN_COMPARE_NULL
-//
-// Tests CodePointToUtf8().
-
-// Tests that the NUL character L'\0' is encoded correctly.
-TEST(CodePointToUtf8Test, CanEncodeNul) {
-  char buffer[32];
-  EXPECT_STREQ("", CodePointToUtf8(L'\0', buffer));
-}
-
-// Tests that ASCII characters are encoded correctly.
-TEST(CodePointToUtf8Test, CanEncodeAscii) {
-  char buffer[32];
-  EXPECT_STREQ("a", CodePointToUtf8(L'a', buffer));
-  EXPECT_STREQ("Z", CodePointToUtf8(L'Z', buffer));
-  EXPECT_STREQ("&", CodePointToUtf8(L'&', buffer));
-  EXPECT_STREQ("\x7F", CodePointToUtf8(L'\x7F', buffer));
-}
-
-// Tests that Unicode code-points that have 8 to 11 bits are encoded
-// as 110xxxxx 10xxxxxx.
-TEST(CodePointToUtf8Test, CanEncode8To11Bits) {
-  char buffer[32];
-  // 000 1101 0011 => 110-00011 10-010011
-  EXPECT_STREQ("\xC3\x93", CodePointToUtf8(L'\xD3', buffer));
-
-  // 101 0111 0110 => 110-10101 10-110110
-  // Some compilers (e.g., GCC on MinGW) cannot handle non-ASCII codepoints
-  // in wide strings and wide chars. In order to accomodate them, we have to
-  // introduce such character constants as integers.
-  EXPECT_STREQ("\xD5\xB6",
-               CodePointToUtf8(static_cast<wchar_t>(0x576), buffer));
-}
-
-// Tests that Unicode code-points that have 12 to 16 bits are encoded
-// as 1110xxxx 10xxxxxx 10xxxxxx.
-TEST(CodePointToUtf8Test, CanEncode12To16Bits) {
-  char buffer[32];
-  // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011
-  EXPECT_STREQ("\xE0\xA3\x93",
-               CodePointToUtf8(static_cast<wchar_t>(0x8D3), buffer));
-
-  // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101
-  EXPECT_STREQ("\xEC\x9D\x8D",
-               CodePointToUtf8(static_cast<wchar_t>(0xC74D), buffer));
-}
-
-#if !GTEST_WIDE_STRING_USES_UTF16_
-// Tests in this group require a wchar_t to hold > 16 bits, and thus
-// are skipped on Windows, Cygwin, and Symbian, where a wchar_t is
-// 16-bit wide. This code may not compile on those systems.
-
-// Tests that Unicode code-points that have 17 to 21 bits are encoded
-// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx.
-TEST(CodePointToUtf8Test, CanEncode17To21Bits) {
-  char buffer[32];
-  // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011
-  EXPECT_STREQ("\xF0\x90\xA3\x93", CodePointToUtf8(L'\x108D3', buffer));
-
-  // 0 0001 0000 0100 0000 0000 => 11110-000 10-010000 10-010000 10-000000
-  EXPECT_STREQ("\xF0\x90\x90\x80", CodePointToUtf8(L'\x10400', buffer));
-
-  // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100
-  EXPECT_STREQ("\xF4\x88\x98\xB4", CodePointToUtf8(L'\x108634', buffer));
-}
-
-// Tests that encoding an invalid code-point generates the expected result.
-TEST(CodePointToUtf8Test, CanEncodeInvalidCodePoint) {
-  char buffer[32];
-  EXPECT_STREQ("(Invalid Unicode 0x1234ABCD)",
-               CodePointToUtf8(L'\x1234ABCD', buffer));
-}
-
-#endif  // !GTEST_WIDE_STRING_USES_UTF16_
-
-// Tests WideStringToUtf8().
-
-// Tests that the NUL character L'\0' is encoded correctly.
-TEST(WideStringToUtf8Test, CanEncodeNul) {
-  EXPECT_STREQ("", WideStringToUtf8(L"", 0).c_str());
-  EXPECT_STREQ("", WideStringToUtf8(L"", -1).c_str());
-}
-
-// Tests that ASCII strings are encoded correctly.
-TEST(WideStringToUtf8Test, CanEncodeAscii) {
-  EXPECT_STREQ("a", WideStringToUtf8(L"a", 1).c_str());
-  EXPECT_STREQ("ab", WideStringToUtf8(L"ab", 2).c_str());
-  EXPECT_STREQ("a", WideStringToUtf8(L"a", -1).c_str());
-  EXPECT_STREQ("ab", WideStringToUtf8(L"ab", -1).c_str());
-}
-
-// Tests that Unicode code-points that have 8 to 11 bits are encoded
-// as 110xxxxx 10xxxxxx.
-TEST(WideStringToUtf8Test, CanEncode8To11Bits) {
-  // 000 1101 0011 => 110-00011 10-010011
-  EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", 1).c_str());
-  EXPECT_STREQ("\xC3\x93", WideStringToUtf8(L"\xD3", -1).c_str());
-
-  // 101 0111 0110 => 110-10101 10-110110
-  const wchar_t s[] = { 0x576, '\0' };
-  EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, 1).c_str());
-  EXPECT_STREQ("\xD5\xB6", WideStringToUtf8(s, -1).c_str());
-}
-
-// Tests that Unicode code-points that have 12 to 16 bits are encoded
-// as 1110xxxx 10xxxxxx 10xxxxxx.
-TEST(WideStringToUtf8Test, CanEncode12To16Bits) {
-  // 0000 1000 1101 0011 => 1110-0000 10-100011 10-010011
-  const wchar_t s1[] = { 0x8D3, '\0' };
-  EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, 1).c_str());
-  EXPECT_STREQ("\xE0\xA3\x93", WideStringToUtf8(s1, -1).c_str());
-
-  // 1100 0111 0100 1101 => 1110-1100 10-011101 10-001101
-  const wchar_t s2[] = { 0xC74D, '\0' };
-  EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, 1).c_str());
-  EXPECT_STREQ("\xEC\x9D\x8D", WideStringToUtf8(s2, -1).c_str());
-}
-
-// Tests that the conversion stops when the function encounters \0 character.
-TEST(WideStringToUtf8Test, StopsOnNulCharacter) {
-  EXPECT_STREQ("ABC", WideStringToUtf8(L"ABC\0XYZ", 100).c_str());
-}
-
-// Tests that the conversion stops when the function reaches the limit
-// specified by the 'length' parameter.
-TEST(WideStringToUtf8Test, StopsWhenLengthLimitReached) {
-  EXPECT_STREQ("ABC", WideStringToUtf8(L"ABCDEF", 3).c_str());
-}
-
-#if !GTEST_WIDE_STRING_USES_UTF16_
-// Tests that Unicode code-points that have 17 to 21 bits are encoded
-// as 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. This code may not compile
-// on the systems using UTF-16 encoding.
-TEST(WideStringToUtf8Test, CanEncode17To21Bits) {
-  // 0 0001 0000 1000 1101 0011 => 11110-000 10-010000 10-100011 10-010011
-  EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", 1).c_str());
-  EXPECT_STREQ("\xF0\x90\xA3\x93", WideStringToUtf8(L"\x108D3", -1).c_str());
-
-  // 1 0000 1000 0110 0011 0100 => 11110-100 10-001000 10-011000 10-110100
-  EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", 1).c_str());
-  EXPECT_STREQ("\xF4\x88\x98\xB4", WideStringToUtf8(L"\x108634", -1).c_str());
-}
-
-// Tests that encoding an invalid code-point generates the expected result.
-TEST(WideStringToUtf8Test, CanEncodeInvalidCodePoint) {
-  EXPECT_STREQ("(Invalid Unicode 0xABCDFF)",
-               WideStringToUtf8(L"\xABCDFF", -1).c_str());
-}
-#else  // !GTEST_WIDE_STRING_USES_UTF16_
-// Tests that surrogate pairs are encoded correctly on the systems using
-// UTF-16 encoding in the wide strings.
-TEST(WideStringToUtf8Test, CanEncodeValidUtf16SUrrogatePairs) {
-  const wchar_t s[] = { 0xD801, 0xDC00, '\0' };
-  EXPECT_STREQ("\xF0\x90\x90\x80", WideStringToUtf8(s, -1).c_str());
-}
-
-// Tests that encoding an invalid UTF-16 surrogate pair
-// generates the expected result.
-TEST(WideStringToUtf8Test, CanEncodeInvalidUtf16SurrogatePair) {
-  // Leading surrogate is at the end of the string.
-  const wchar_t s1[] = { 0xD800, '\0' };
-  EXPECT_STREQ("\xED\xA0\x80", WideStringToUtf8(s1, -1).c_str());
-  // Leading surrogate is not followed by the trailing surrogate.
-  const wchar_t s2[] = { 0xD800, 'M', '\0' };
-  EXPECT_STREQ("\xED\xA0\x80M", WideStringToUtf8(s2, -1).c_str());
-  // Trailing surrogate appearas without a leading surrogate.
-  const wchar_t s3[] = { 0xDC00, 'P', 'Q', 'R', '\0' };
-  EXPECT_STREQ("\xED\xB0\x80PQR", WideStringToUtf8(s3, -1).c_str());
-}
-#endif  // !GTEST_WIDE_STRING_USES_UTF16_
-
-// Tests that codepoint concatenation works correctly.
-#if !GTEST_WIDE_STRING_USES_UTF16_
-TEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) {
-  const wchar_t s[] = { 0x108634, 0xC74D, '\n', 0x576, 0x8D3, 0x108634, '\0'};
-  EXPECT_STREQ(
-      "\xF4\x88\x98\xB4"
-          "\xEC\x9D\x8D"
-          "\n"
-          "\xD5\xB6"
-          "\xE0\xA3\x93"
-          "\xF4\x88\x98\xB4",
-      WideStringToUtf8(s, -1).c_str());
-}
-#else
-TEST(WideStringToUtf8Test, ConcatenatesCodepointsCorrectly) {
-  const wchar_t s[] = { 0xC74D, '\n', 0x576, 0x8D3, '\0'};
-  EXPECT_STREQ(
-      "\xEC\x9D\x8D" "\n" "\xD5\xB6" "\xE0\xA3\x93",
-      WideStringToUtf8(s, -1).c_str());
-}
-#endif  // !GTEST_WIDE_STRING_USES_UTF16_
-
-// Tests the Random class.
-
-TEST(RandomDeathTest, GeneratesCrashesOnInvalidRange) {
-  testing::internal::Random random(42);
-  EXPECT_DEATH_IF_SUPPORTED(
-      random.Generate(0),
-      "Cannot generate a number in the range \\[0, 0\\)");
-  EXPECT_DEATH_IF_SUPPORTED(
-      random.Generate(testing::internal::Random::kMaxRange + 1),
-      "Generation of a number in \\[0, 2147483649\\) was requested, "
-      "but this can only generate numbers in \\[0, 2147483648\\)");
-}
-
-TEST(RandomTest, GeneratesNumbersWithinRange) {
-  const UInt32 kRange = 10000;
-  testing::internal::Random random(12345);
-  for (int i = 0; i < 10; i++) {
-    EXPECT_LT(random.Generate(kRange), kRange) << " for iteration " << i;
-  }
-
-  testing::internal::Random random2(testing::internal::Random::kMaxRange);
-  for (int i = 0; i < 10; i++) {
-    EXPECT_LT(random2.Generate(kRange), kRange) << " for iteration " << i;
-  }
-}
-
-TEST(RandomTest, RepeatsWhenReseeded) {
-  const int kSeed = 123;
-  const int kArraySize = 10;
-  const UInt32 kRange = 10000;
-  UInt32 values[kArraySize];
-
-  testing::internal::Random random(kSeed);
-  for (int i = 0; i < kArraySize; i++) {
-    values[i] = random.Generate(kRange);
-  }
-
-  random.Reseed(kSeed);
-  for (int i = 0; i < kArraySize; i++) {
-    EXPECT_EQ(values[i], random.Generate(kRange)) << " for iteration " << i;
-  }
-}
-
-// Tests STL container utilities.
-
-// Tests CountIf().
-
-static bool IsPositive(int n) { return n > 0; }
-
-TEST(ContainerUtilityTest, CountIf) {
-  std::vector<int> v;
-  EXPECT_EQ(0, CountIf(v, IsPositive));  // Works for an empty container.
-
-  v.push_back(-1);
-  v.push_back(0);
-  EXPECT_EQ(0, CountIf(v, IsPositive));  // Works when no value satisfies.
-
-  v.push_back(2);
-  v.push_back(-10);
-  v.push_back(10);
-  EXPECT_EQ(2, CountIf(v, IsPositive));
-}
-
-// Tests ForEach().
-
-static int g_sum = 0;
-static void Accumulate(int n) { g_sum += n; }
-
-TEST(ContainerUtilityTest, ForEach) {
-  std::vector<int> v;
-  g_sum = 0;
-  ForEach(v, Accumulate);
-  EXPECT_EQ(0, g_sum);  // Works for an empty container;
-
-  g_sum = 0;
-  v.push_back(1);
-  ForEach(v, Accumulate);
-  EXPECT_EQ(1, g_sum);  // Works for a container with one element.
-
-  g_sum = 0;
-  v.push_back(20);
-  v.push_back(300);
-  ForEach(v, Accumulate);
-  EXPECT_EQ(321, g_sum);
-}
-
-// Tests GetElementOr().
-TEST(ContainerUtilityTest, GetElementOr) {
-  std::vector<char> a;
-  EXPECT_EQ('x', GetElementOr(a, 0, 'x'));
-
-  a.push_back('a');
-  a.push_back('b');
-  EXPECT_EQ('a', GetElementOr(a, 0, 'x'));
-  EXPECT_EQ('b', GetElementOr(a, 1, 'x'));
-  EXPECT_EQ('x', GetElementOr(a, -2, 'x'));
-  EXPECT_EQ('x', GetElementOr(a, 2, 'x'));
-}
-
-TEST(ContainerUtilityDeathTest, ShuffleRange) {
-  std::vector<int> a;
-  a.push_back(0);
-  a.push_back(1);
-  a.push_back(2);
-  testing::internal::Random random(1);
-
-  EXPECT_DEATH_IF_SUPPORTED(
-      ShuffleRange(&random, -1, 1, &a),
-      "Invalid shuffle range start -1: must be in range \\[0, 3\\]");
-  EXPECT_DEATH_IF_SUPPORTED(
-      ShuffleRange(&random, 4, 4, &a),
-      "Invalid shuffle range start 4: must be in range \\[0, 3\\]");
-  EXPECT_DEATH_IF_SUPPORTED(
-      ShuffleRange(&random, 3, 2, &a),
-      "Invalid shuffle range finish 2: must be in range \\[3, 3\\]");
-  EXPECT_DEATH_IF_SUPPORTED(
-      ShuffleRange(&random, 3, 4, &a),
-      "Invalid shuffle range finish 4: must be in range \\[3, 3\\]");
-}
-
-class VectorShuffleTest : public Test {
- protected:
-  static const int kVectorSize = 20;
-
-  VectorShuffleTest() : random_(1) {
-    for (int i = 0; i < kVectorSize; i++) {
-      vector_.push_back(i);
-    }
-  }
-
-  static bool VectorIsCorrupt(const TestingVector& vector) {
-    if (kVectorSize != static_cast<int>(vector.size())) {
-      return true;
-    }
-
-    bool found_in_vector[kVectorSize] = { false };
-    for (size_t i = 0; i < vector.size(); i++) {
-      const int e = vector[i];
-      if (e < 0 || e >= kVectorSize || found_in_vector[e]) {
-        return true;
-      }
-      found_in_vector[e] = true;
-    }
-
-    // Vector size is correct, elements' range is correct, no
-    // duplicate elements.  Therefore no corruption has occurred.
-    return false;
-  }
-
-  static bool VectorIsNotCorrupt(const TestingVector& vector) {
-    return !VectorIsCorrupt(vector);
-  }
-
-  static bool RangeIsShuffled(const TestingVector& vector, int begin, int end) {
-    for (int i = begin; i < end; i++) {
-      if (i != vector[i]) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  static bool RangeIsUnshuffled(
-      const TestingVector& vector, int begin, int end) {
-    return !RangeIsShuffled(vector, begin, end);
-  }
-
-  static bool VectorIsShuffled(const TestingVector& vector) {
-    return RangeIsShuffled(vector, 0, static_cast<int>(vector.size()));
-  }
-
-  static bool VectorIsUnshuffled(const TestingVector& vector) {
-    return !VectorIsShuffled(vector);
-  }
-
-  testing::internal::Random random_;
-  TestingVector vector_;
-};  // class VectorShuffleTest
-
-const int VectorShuffleTest::kVectorSize;
-
-TEST_F(VectorShuffleTest, HandlesEmptyRange) {
-  // Tests an empty range at the beginning...
-  ShuffleRange(&random_, 0, 0, &vector_);
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  ASSERT_PRED1(VectorIsUnshuffled, vector_);
-
-  // ...in the middle...
-  ShuffleRange(&random_, kVectorSize/2, kVectorSize/2, &vector_);
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  ASSERT_PRED1(VectorIsUnshuffled, vector_);
-
-  // ...at the end...
-  ShuffleRange(&random_, kVectorSize - 1, kVectorSize - 1, &vector_);
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  ASSERT_PRED1(VectorIsUnshuffled, vector_);
-
-  // ...and past the end.
-  ShuffleRange(&random_, kVectorSize, kVectorSize, &vector_);
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  ASSERT_PRED1(VectorIsUnshuffled, vector_);
-}
-
-TEST_F(VectorShuffleTest, HandlesRangeOfSizeOne) {
-  // Tests a size one range at the beginning...
-  ShuffleRange(&random_, 0, 1, &vector_);
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  ASSERT_PRED1(VectorIsUnshuffled, vector_);
-
-  // ...in the middle...
-  ShuffleRange(&random_, kVectorSize/2, kVectorSize/2 + 1, &vector_);
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  ASSERT_PRED1(VectorIsUnshuffled, vector_);
-
-  // ...and at the end.
-  ShuffleRange(&random_, kVectorSize - 1, kVectorSize, &vector_);
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  ASSERT_PRED1(VectorIsUnshuffled, vector_);
-}
-
-// Because we use our own random number generator and a fixed seed,
-// we can guarantee that the following "random" tests will succeed.
-
-TEST_F(VectorShuffleTest, ShufflesEntireVector) {
-  Shuffle(&random_, &vector_);
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  EXPECT_FALSE(VectorIsUnshuffled(vector_)) << vector_;
-
-  // Tests the first and last elements in particular to ensure that
-  // there are no off-by-one problems in our shuffle algorithm.
-  EXPECT_NE(0, vector_[0]);
-  EXPECT_NE(kVectorSize - 1, vector_[kVectorSize - 1]);
-}
-
-TEST_F(VectorShuffleTest, ShufflesStartOfVector) {
-  const int kRangeSize = kVectorSize/2;
-
-  ShuffleRange(&random_, 0, kRangeSize, &vector_);
-
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  EXPECT_PRED3(RangeIsShuffled, vector_, 0, kRangeSize);
-  EXPECT_PRED3(RangeIsUnshuffled, vector_, kRangeSize, kVectorSize);
-}
-
-TEST_F(VectorShuffleTest, ShufflesEndOfVector) {
-  const int kRangeSize = kVectorSize / 2;
-  ShuffleRange(&random_, kRangeSize, kVectorSize, &vector_);
-
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize);
-  EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, kVectorSize);
-}
-
-TEST_F(VectorShuffleTest, ShufflesMiddleOfVector) {
-  int kRangeSize = kVectorSize/3;
-  ShuffleRange(&random_, kRangeSize, 2*kRangeSize, &vector_);
-
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  EXPECT_PRED3(RangeIsUnshuffled, vector_, 0, kRangeSize);
-  EXPECT_PRED3(RangeIsShuffled, vector_, kRangeSize, 2*kRangeSize);
-  EXPECT_PRED3(RangeIsUnshuffled, vector_, 2*kRangeSize, kVectorSize);
-}
-
-TEST_F(VectorShuffleTest, ShufflesRepeatably) {
-  TestingVector vector2;
-  for (int i = 0; i < kVectorSize; i++) {
-    vector2.push_back(i);
-  }
-
-  random_.Reseed(1234);
-  Shuffle(&random_, &vector_);
-  random_.Reseed(1234);
-  Shuffle(&random_, &vector2);
-
-  ASSERT_PRED1(VectorIsNotCorrupt, vector_);
-  ASSERT_PRED1(VectorIsNotCorrupt, vector2);
-
-  for (int i = 0; i < kVectorSize; i++) {
-    EXPECT_EQ(vector_[i], vector2[i]) << " where i is " << i;
-  }
-}
-
-// Tests the size of the AssertHelper class.
-
-TEST(AssertHelperTest, AssertHelperIsSmall) {
-  // To avoid breaking clients that use lots of assertions in one
-  // function, we cannot grow the size of AssertHelper.
-  EXPECT_LE(sizeof(testing::internal::AssertHelper), sizeof(void*));
-}
-
-// Tests the String class.
-
-// Tests String's constructors.
-TEST(StringTest, Constructors) {
-  // Default ctor.
-  String s1;
-  // We aren't using EXPECT_EQ(NULL, s1.c_str()) because comparing
-  // pointers with NULL isn't supported on all platforms.
-  EXPECT_EQ(0U, s1.length());
-  EXPECT_TRUE(NULL == s1.c_str());
-
-  // Implicitly constructs from a C-string.
-  String s2 = "Hi";
-  EXPECT_EQ(2U, s2.length());
-  EXPECT_STREQ("Hi", s2.c_str());
-
-  // Constructs from a C-string and a length.
-  String s3("hello", 3);
-  EXPECT_EQ(3U, s3.length());
-  EXPECT_STREQ("hel", s3.c_str());
-
-  // The empty String should be created when String is constructed with
-  // a NULL pointer and length 0.
-  EXPECT_EQ(0U, String(NULL, 0).length());
-  EXPECT_FALSE(String(NULL, 0).c_str() == NULL);
-
-  // Constructs a String that contains '\0'.
-  String s4("a\0bcd", 4);
-  EXPECT_EQ(4U, s4.length());
-  EXPECT_EQ('a', s4.c_str()[0]);
-  EXPECT_EQ('\0', s4.c_str()[1]);
-  EXPECT_EQ('b', s4.c_str()[2]);
-  EXPECT_EQ('c', s4.c_str()[3]);
-
-  // Copy ctor where the source is NULL.
-  const String null_str;
-  String s5 = null_str;
-  EXPECT_TRUE(s5.c_str() == NULL);
-
-  // Copy ctor where the source isn't NULL.
-  String s6 = s3;
-  EXPECT_EQ(3U, s6.length());
-  EXPECT_STREQ("hel", s6.c_str());
-
-  // Copy ctor where the source contains '\0'.
-  String s7 = s4;
-  EXPECT_EQ(4U, s7.length());
-  EXPECT_EQ('a', s7.c_str()[0]);
-  EXPECT_EQ('\0', s7.c_str()[1]);
-  EXPECT_EQ('b', s7.c_str()[2]);
-  EXPECT_EQ('c', s7.c_str()[3]);
-}
-
-TEST(StringTest, ConvertsFromStdString) {
-  // An empty std::string.
-  const std::string src1("");
-  const String dest1 = src1;
-  EXPECT_EQ(0U, dest1.length());
-  EXPECT_STREQ("", dest1.c_str());
-
-  // A normal std::string.
-  const std::string src2("Hi");
-  const String dest2 = src2;
-  EXPECT_EQ(2U, dest2.length());
-  EXPECT_STREQ("Hi", dest2.c_str());
-
-  // An std::string with an embedded NUL character.
-  const char src3[] = "a\0b";
-  const String dest3 = std::string(src3, sizeof(src3));
-  EXPECT_EQ(sizeof(src3), dest3.length());
-  EXPECT_EQ('a', dest3.c_str()[0]);
-  EXPECT_EQ('\0', dest3.c_str()[1]);
-  EXPECT_EQ('b', dest3.c_str()[2]);
-}
-
-TEST(StringTest, ConvertsToStdString) {
-  // An empty String.
-  const String src1("");
-  const std::string dest1 = src1;
-  EXPECT_EQ("", dest1);
-
-  // A normal String.
-  const String src2("Hi");
-  const std::string dest2 = src2;
-  EXPECT_EQ("Hi", dest2);
-
-  // A String containing a '\0'.
-  const String src3("x\0y", 3);
-  const std::string dest3 = src3;
-  EXPECT_EQ(std::string("x\0y", 3), dest3);
-}
-
-#if GTEST_HAS_GLOBAL_STRING
-
-TEST(StringTest, ConvertsFromGlobalString) {
-  // An empty ::string.
-  const ::string src1("");
-  const String dest1 = src1;
-  EXPECT_EQ(0U, dest1.length());
-  EXPECT_STREQ("", dest1.c_str());
-
-  // A normal ::string.
-  const ::string src2("Hi");
-  const String dest2 = src2;
-  EXPECT_EQ(2U, dest2.length());
-  EXPECT_STREQ("Hi", dest2.c_str());
-
-  // An ::string with an embedded NUL character.
-  const char src3[] = "x\0y";
-  const String dest3 = ::string(src3, sizeof(src3));
-  EXPECT_EQ(sizeof(src3), dest3.length());
-  EXPECT_EQ('x', dest3.c_str()[0]);
-  EXPECT_EQ('\0', dest3.c_str()[1]);
-  EXPECT_EQ('y', dest3.c_str()[2]);
-}
-
-TEST(StringTest, ConvertsToGlobalString) {
-  // An empty String.
-  const String src1("");
-  const ::string dest1 = src1;
-  EXPECT_EQ("", dest1);
-
-  // A normal String.
-  const String src2("Hi");
-  const ::string dest2 = src2;
-  EXPECT_EQ("Hi", dest2);
-
-  const String src3("x\0y", 3);
-  const ::string dest3 = src3;
-  EXPECT_EQ(::string("x\0y", 3), dest3);
-}
-
-#endif  // GTEST_HAS_GLOBAL_STRING
-
-// Tests String::ShowCStringQuoted().
-TEST(StringTest, ShowCStringQuoted) {
-  EXPECT_STREQ("(null)",
-               String::ShowCStringQuoted(NULL).c_str());
-  EXPECT_STREQ("\"\"",
-               String::ShowCStringQuoted("").c_str());
-  EXPECT_STREQ("\"foo\"",
-               String::ShowCStringQuoted("foo").c_str());
-}
-
-// Tests String::empty().
-TEST(StringTest, Empty) {
-  EXPECT_TRUE(String("").empty());
-  EXPECT_FALSE(String().empty());
-  EXPECT_FALSE(String(NULL).empty());
-  EXPECT_FALSE(String("a").empty());
-  EXPECT_FALSE(String("\0", 1).empty());
-}
-
-// Tests String::Compare().
-TEST(StringTest, Compare) {
-  // NULL vs NULL.
-  EXPECT_EQ(0, String().Compare(String()));
-
-  // NULL vs non-NULL.
-  EXPECT_EQ(-1, String().Compare(String("")));
-
-  // Non-NULL vs NULL.
-  EXPECT_EQ(1, String("").Compare(String()));
-
-  // The following covers non-NULL vs non-NULL.
-
-  // "" vs "".
-  EXPECT_EQ(0, String("").Compare(String("")));
-
-  // "" vs non-"".
-  EXPECT_EQ(-1, String("").Compare(String("\0", 1)));
-  EXPECT_EQ(-1, String("").Compare(" "));
-
-  // Non-"" vs "".
-  EXPECT_EQ(1, String("a").Compare(String("")));
-
-  // The following covers non-"" vs non-"".
-
-  // Same length and equal.
-  EXPECT_EQ(0, String("a").Compare(String("a")));
-
-  // Same length and different.
-  EXPECT_EQ(-1, String("a\0b", 3).Compare(String("a\0c", 3)));
-  EXPECT_EQ(1, String("b").Compare(String("a")));
-
-  // Different lengths.
-  EXPECT_EQ(-1, String("a").Compare(String("ab")));
-  EXPECT_EQ(-1, String("a").Compare(String("a\0", 2)));
-  EXPECT_EQ(1, String("abc").Compare(String("aacd")));
-}
-
-// Tests String::operator==().
-TEST(StringTest, Equals) {
-  const String null(NULL);
-  EXPECT_TRUE(null == NULL);  // NOLINT
-  EXPECT_FALSE(null == "");  // NOLINT
-  EXPECT_FALSE(null == "bar");  // NOLINT
-
-  const String empty("");
-  EXPECT_FALSE(empty == NULL);  // NOLINT
-  EXPECT_TRUE(empty == "");  // NOLINT
-  EXPECT_FALSE(empty == "bar");  // NOLINT
-
-  const String foo("foo");
-  EXPECT_FALSE(foo == NULL);  // NOLINT
-  EXPECT_FALSE(foo == "");  // NOLINT
-  EXPECT_FALSE(foo == "bar");  // NOLINT
-  EXPECT_TRUE(foo == "foo");  // NOLINT
-
-  const String bar("x\0y", 3);
-  EXPECT_FALSE(bar == "x");
-}
-
-// Tests String::operator!=().
-TEST(StringTest, NotEquals) {
-  const String null(NULL);
-  EXPECT_FALSE(null != NULL);  // NOLINT
-  EXPECT_TRUE(null != "");  // NOLINT
-  EXPECT_TRUE(null != "bar");  // NOLINT
-
-  const String empty("");
-  EXPECT_TRUE(empty != NULL);  // NOLINT
-  EXPECT_FALSE(empty != "");  // NOLINT
-  EXPECT_TRUE(empty != "bar");  // NOLINT
-
-  const String foo("foo");
-  EXPECT_TRUE(foo != NULL);  // NOLINT
-  EXPECT_TRUE(foo != "");  // NOLINT
-  EXPECT_TRUE(foo != "bar");  // NOLINT
-  EXPECT_FALSE(foo != "foo");  // NOLINT
-
-  const String bar("x\0y", 3);
-  EXPECT_TRUE(bar != "x");
-}
-
-// Tests String::length().
-TEST(StringTest, Length) {
-  EXPECT_EQ(0U, String().length());
-  EXPECT_EQ(0U, String("").length());
-  EXPECT_EQ(2U, String("ab").length());
-  EXPECT_EQ(3U, String("a\0b", 3).length());
-}
-
-// Tests String::EndsWith().
-TEST(StringTest, EndsWith) {
-  EXPECT_TRUE(String("foobar").EndsWith("bar"));
-  EXPECT_TRUE(String("foobar").EndsWith(""));
-  EXPECT_TRUE(String("").EndsWith(""));
-
-  EXPECT_FALSE(String("foobar").EndsWith("foo"));
-  EXPECT_FALSE(String("").EndsWith("foo"));
-}
-
-// Tests String::EndsWithCaseInsensitive().
-TEST(StringTest, EndsWithCaseInsensitive) {
-  EXPECT_TRUE(String("foobar").EndsWithCaseInsensitive("BAR"));
-  EXPECT_TRUE(String("foobaR").EndsWithCaseInsensitive("bar"));
-  EXPECT_TRUE(String("foobar").EndsWithCaseInsensitive(""));
-  EXPECT_TRUE(String("").EndsWithCaseInsensitive(""));
-
-  EXPECT_FALSE(String("Foobar").EndsWithCaseInsensitive("foo"));
-  EXPECT_FALSE(String("foobar").EndsWithCaseInsensitive("Foo"));
-  EXPECT_FALSE(String("").EndsWithCaseInsensitive("foo"));
-}
-
-// C++Builder's preprocessor is buggy; it fails to expand macros that
-// appear in macro parameters after wide char literals.  Provide an alias
-// for NULL as a workaround.
-static const wchar_t* const kNull = NULL;
-
-// Tests String::CaseInsensitiveWideCStringEquals
-TEST(StringTest, CaseInsensitiveWideCStringEquals) {
-  EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(NULL, NULL));
-  EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L""));
-  EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"", kNull));
-  EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(kNull, L"foobar"));
-  EXPECT_FALSE(String::CaseInsensitiveWideCStringEquals(L"foobar", kNull));
-  EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"foobar"));
-  EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"foobar", L"FOOBAR"));
-  EXPECT_TRUE(String::CaseInsensitiveWideCStringEquals(L"FOOBAR", L"foobar"));
-}
-
-// Tests that NULL can be assigned to a String.
-TEST(StringTest, CanBeAssignedNULL) {
-  const String src(NULL);
-  String dest;
-
-  dest = src;
-  EXPECT_STREQ(NULL, dest.c_str());
-}
-
-// Tests that the empty string "" can be assigned to a String.
-TEST(StringTest, CanBeAssignedEmpty) {
-  const String src("");
-  String dest;
-
-  dest = src;
-  EXPECT_STREQ("", dest.c_str());
-}
-
-// Tests that a non-empty string can be assigned to a String.
-TEST(StringTest, CanBeAssignedNonEmpty) {
-  const String src("hello");
-  String dest;
-  dest = src;
-  EXPECT_EQ(5U, dest.length());
-  EXPECT_STREQ("hello", dest.c_str());
-
-  const String src2("x\0y", 3);
-  String dest2;
-  dest2 = src2;
-  EXPECT_EQ(3U, dest2.length());
-  EXPECT_EQ('x', dest2.c_str()[0]);
-  EXPECT_EQ('\0', dest2.c_str()[1]);
-  EXPECT_EQ('y', dest2.c_str()[2]);
-}
-
-// Tests that a String can be assigned to itself.
-TEST(StringTest, CanBeAssignedSelf) {
-  String dest("hello");
-
-  // Use explicit function call notation here to suppress self-assign warning.
-  dest.operator=(dest);
-  EXPECT_STREQ("hello", dest.c_str());
-}
-
-// Sun Studio < 12 incorrectly rejects this code due to an overloading
-// ambiguity.
-#if !(defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
-// Tests streaming a String.
-TEST(StringTest, Streams) {
-  EXPECT_EQ(StreamableToString(String()), "(null)");
-  EXPECT_EQ(StreamableToString(String("")), "");
-  EXPECT_EQ(StreamableToString(String("a\0b", 3)), "a\\0b");
-}
-#endif
-
-// Tests that String::Format() works.
-TEST(StringTest, FormatWorks) {
-  // Normal case: the format spec is valid, the arguments match the
-  // spec, and the result is < 4095 characters.
-  EXPECT_STREQ("Hello, 42", String::Format("%s, %d", "Hello", 42).c_str());
-
-  // Edge case: the result is 4095 characters.
-  char buffer[4096];
-  const size_t kSize = sizeof(buffer);
-  memset(buffer, 'a', kSize - 1);
-  buffer[kSize - 1] = '\0';
-  EXPECT_STREQ(buffer, String::Format("%s", buffer).c_str());
-
-  // The result needs to be 4096 characters, exceeding Format()'s limit.
-  EXPECT_STREQ("<formatting error or buffer exceeded>",
-               String::Format("x%s", buffer).c_str());
-
-#if GTEST_OS_LINUX
-  // On Linux, invalid format spec should lead to an error message.
-  // In other environment (e.g. MSVC on Windows), String::Format() may
-  // simply ignore a bad format spec, so this assertion is run on
-  // Linux only.
-  EXPECT_STREQ("<formatting error or buffer exceeded>",
-               String::Format("%").c_str());
-#endif
-}
-
-#if GTEST_OS_WINDOWS
-
-// Tests String::ShowWideCString().
-TEST(StringTest, ShowWideCString) {
-  EXPECT_STREQ("(null)",
-               String::ShowWideCString(NULL).c_str());
-  EXPECT_STREQ("", String::ShowWideCString(L"").c_str());
-  EXPECT_STREQ("foo", String::ShowWideCString(L"foo").c_str());
-}
-
-// Tests String::ShowWideCStringQuoted().
-TEST(StringTest, ShowWideCStringQuoted) {
-  EXPECT_STREQ("(null)",
-               String::ShowWideCStringQuoted(NULL).c_str());
-  EXPECT_STREQ("L\"\"",
-               String::ShowWideCStringQuoted(L"").c_str());
-  EXPECT_STREQ("L\"foo\"",
-               String::ShowWideCStringQuoted(L"foo").c_str());
-}
-
-# if GTEST_OS_WINDOWS_MOBILE
-TEST(StringTest, AnsiAndUtf16Null) {
-  EXPECT_EQ(NULL, String::AnsiToUtf16(NULL));
-  EXPECT_EQ(NULL, String::Utf16ToAnsi(NULL));
-}
-
-TEST(StringTest, AnsiAndUtf16ConvertBasic) {
-  const char* ansi = String::Utf16ToAnsi(L"str");
-  EXPECT_STREQ("str", ansi);
-  delete [] ansi;
-  const WCHAR* utf16 = String::AnsiToUtf16("str");
-  EXPECT_EQ(0, wcsncmp(L"str", utf16, 3));
-  delete [] utf16;
-}
-
-TEST(StringTest, AnsiAndUtf16ConvertPathChars) {
-  const char* ansi = String::Utf16ToAnsi(L".:\\ \"*?");
-  EXPECT_STREQ(".:\\ \"*?", ansi);
-  delete [] ansi;
-  const WCHAR* utf16 = String::AnsiToUtf16(".:\\ \"*?");
-  EXPECT_EQ(0, wcsncmp(L".:\\ \"*?", utf16, 3));
-  delete [] utf16;
-}
-# endif  // GTEST_OS_WINDOWS_MOBILE
-
-#endif  // GTEST_OS_WINDOWS
-
-// Tests TestProperty construction.
-TEST(TestPropertyTest, StringValue) {
-  TestProperty property("key", "1");
-  EXPECT_STREQ("key", property.key());
-  EXPECT_STREQ("1", property.value());
-}
-
-// Tests TestProperty replacing a value.
-TEST(TestPropertyTest, ReplaceStringValue) {
-  TestProperty property("key", "1");
-  EXPECT_STREQ("1", property.value());
-  property.SetValue("2");
-  EXPECT_STREQ("2", property.value());
-}
-
-// AddFatalFailure() and AddNonfatalFailure() must be stand-alone
-// functions (i.e. their definitions cannot be inlined at the call
-// sites), or C++Builder won't compile the code.
-static void AddFatalFailure() {
-  FAIL() << "Expected fatal failure.";
-}
-
-static void AddNonfatalFailure() {
-  ADD_FAILURE() << "Expected non-fatal failure.";
-}
-
-class ScopedFakeTestPartResultReporterTest : public Test {
- public:  // Must be public and not protected due to a bug in g++ 3.4.2.
-  enum FailureMode {
-    FATAL_FAILURE,
-    NONFATAL_FAILURE
-  };
-  static void AddFailure(FailureMode failure) {
-    if (failure == FATAL_FAILURE) {
-      AddFatalFailure();
-    } else {
-      AddNonfatalFailure();
-    }
-  }
-};
-
-// Tests that ScopedFakeTestPartResultReporter intercepts test
-// failures.
-TEST_F(ScopedFakeTestPartResultReporterTest, InterceptsTestFailures) {
-  TestPartResultArray results;
-  {
-    ScopedFakeTestPartResultReporter reporter(
-        ScopedFakeTestPartResultReporter::INTERCEPT_ONLY_CURRENT_THREAD,
-        &results);
-    AddFailure(NONFATAL_FAILURE);
-    AddFailure(FATAL_FAILURE);
-  }
-
-  EXPECT_EQ(2, results.size());
-  EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed());
-  EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed());
-}
-
-TEST_F(ScopedFakeTestPartResultReporterTest, DeprecatedConstructor) {
-  TestPartResultArray results;
-  {
-    // Tests, that the deprecated constructor still works.
-    ScopedFakeTestPartResultReporter reporter(&results);
-    AddFailure(NONFATAL_FAILURE);
-  }
-  EXPECT_EQ(1, results.size());
-}
-
-#if GTEST_IS_THREADSAFE
-
-class ScopedFakeTestPartResultReporterWithThreadsTest
-  : public ScopedFakeTestPartResultReporterTest {
- protected:
-  static void AddFailureInOtherThread(FailureMode failure) {
-    ThreadWithParam<FailureMode> thread(&AddFailure, failure, NULL);
-    thread.Join();
-  }
-};
-
-TEST_F(ScopedFakeTestPartResultReporterWithThreadsTest,
-       InterceptsTestFailuresInAllThreads) {
-  TestPartResultArray results;
-  {
-    ScopedFakeTestPartResultReporter reporter(
-        ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS, &results);
-    AddFailure(NONFATAL_FAILURE);
-    AddFailure(FATAL_FAILURE);
-    AddFailureInOtherThread(NONFATAL_FAILURE);
-    AddFailureInOtherThread(FATAL_FAILURE);
-  }
-
-  EXPECT_EQ(4, results.size());
-  EXPECT_TRUE(results.GetTestPartResult(0).nonfatally_failed());
-  EXPECT_TRUE(results.GetTestPartResult(1).fatally_failed());
-  EXPECT_TRUE(results.GetTestPartResult(2).nonfatally_failed());
-  EXPECT_TRUE(results.GetTestPartResult(3).fatally_failed());
-}
-
-#endif  // GTEST_IS_THREADSAFE
-
-// Tests EXPECT_FATAL_FAILURE{,ON_ALL_THREADS}.  Makes sure that they
-// work even if the failure is generated in a called function rather than
-// the current context.
-
-typedef ScopedFakeTestPartResultReporterTest ExpectFatalFailureTest;
-
-TEST_F(ExpectFatalFailureTest, CatchesFatalFaliure) {
-  EXPECT_FATAL_FAILURE(AddFatalFailure(), "Expected fatal failure.");
-}
-
-#if GTEST_HAS_GLOBAL_STRING
-TEST_F(ExpectFatalFailureTest, AcceptsStringObject) {
-  EXPECT_FATAL_FAILURE(AddFatalFailure(), ::string("Expected fatal failure."));
-}
-#endif
-
-TEST_F(ExpectFatalFailureTest, AcceptsStdStringObject) {
-  EXPECT_FATAL_FAILURE(AddFatalFailure(),
-                       ::std::string("Expected fatal failure."));
-}
-
-TEST_F(ExpectFatalFailureTest, CatchesFatalFailureOnAllThreads) {
-  // We have another test below to verify that the macro catches fatal
-  // failures generated on another thread.
-  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFatalFailure(),
-                                      "Expected fatal failure.");
-}
-
-#ifdef __BORLANDC__
-// Silences warnings: "Condition is always true"
-# pragma option push -w-ccc
-#endif
-
-// Tests that EXPECT_FATAL_FAILURE() can be used in a non-void
-// function even when the statement in it contains ASSERT_*.
-
-int NonVoidFunction() {
-  EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), "");
-  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), "");
-  return 0;
-}
-
-TEST_F(ExpectFatalFailureTest, CanBeUsedInNonVoidFunction) {
-  NonVoidFunction();
-}
-
-// Tests that EXPECT_FATAL_FAILURE(statement, ...) doesn't abort the
-// current function even though 'statement' generates a fatal failure.
-
-void DoesNotAbortHelper(bool* aborted) {
-  EXPECT_FATAL_FAILURE(ASSERT_TRUE(false), "");
-  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(FAIL(), "");
-
-  *aborted = false;
-}
-
-#ifdef __BORLANDC__
-// Restores warnings after previous "#pragma option push" suppressed them.
-# pragma option pop
-#endif
-
-TEST_F(ExpectFatalFailureTest, DoesNotAbort) {
-  bool aborted = true;
-  DoesNotAbortHelper(&aborted);
-  EXPECT_FALSE(aborted);
-}
-
-// Tests that the EXPECT_FATAL_FAILURE{,_ON_ALL_THREADS} accepts a
-// statement that contains a macro which expands to code containing an
-// unprotected comma.
-
-static int global_var = 0;
-#define GTEST_USE_UNPROTECTED_COMMA_ global_var++, global_var++
-
-TEST_F(ExpectFatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) {
-#ifndef __BORLANDC__
-  // ICE's in C++Builder.
-  EXPECT_FATAL_FAILURE({
-    GTEST_USE_UNPROTECTED_COMMA_;
-    AddFatalFailure();
-  }, "");
-#endif
-
-  EXPECT_FATAL_FAILURE_ON_ALL_THREADS({
-    GTEST_USE_UNPROTECTED_COMMA_;
-    AddFatalFailure();
-  }, "");
-}
-
-// Tests EXPECT_NONFATAL_FAILURE{,ON_ALL_THREADS}.
-
-typedef ScopedFakeTestPartResultReporterTest ExpectNonfatalFailureTest;
-
-TEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailure) {
-  EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(),
-                          "Expected non-fatal failure.");
-}
-
-#if GTEST_HAS_GLOBAL_STRING
-TEST_F(ExpectNonfatalFailureTest, AcceptsStringObject) {
-  EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(),
-                          ::string("Expected non-fatal failure."));
-}
-#endif
-
-TEST_F(ExpectNonfatalFailureTest, AcceptsStdStringObject) {
-  EXPECT_NONFATAL_FAILURE(AddNonfatalFailure(),
-                          ::std::string("Expected non-fatal failure."));
-}
-
-TEST_F(ExpectNonfatalFailureTest, CatchesNonfatalFailureOnAllThreads) {
-  // We have another test below to verify that the macro catches
-  // non-fatal failures generated on another thread.
-  EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(AddNonfatalFailure(),
-                                         "Expected non-fatal failure.");
-}
-
-// Tests that the EXPECT_NONFATAL_FAILURE{,_ON_ALL_THREADS} accepts a
-// statement that contains a macro which expands to code containing an
-// unprotected comma.
-TEST_F(ExpectNonfatalFailureTest, AcceptsMacroThatExpandsToUnprotectedComma) {
-  EXPECT_NONFATAL_FAILURE({
-    GTEST_USE_UNPROTECTED_COMMA_;
-    AddNonfatalFailure();
-  }, "");
-
-  EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS({
-    GTEST_USE_UNPROTECTED_COMMA_;
-    AddNonfatalFailure();
-  }, "");
-}
-
-#if GTEST_IS_THREADSAFE
-
-typedef ScopedFakeTestPartResultReporterWithThreadsTest
-    ExpectFailureWithThreadsTest;
-
-TEST_F(ExpectFailureWithThreadsTest, ExpectFatalFailureOnAllThreads) {
-  EXPECT_FATAL_FAILURE_ON_ALL_THREADS(AddFailureInOtherThread(FATAL_FAILURE),
-                                      "Expected fatal failure.");
-}
-
-TEST_F(ExpectFailureWithThreadsTest, ExpectNonFatalFailureOnAllThreads) {
-  EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(
-      AddFailureInOtherThread(NONFATAL_FAILURE), "Expected non-fatal failure.");
-}
-
-#endif  // GTEST_IS_THREADSAFE
-
-// Tests the TestProperty class.
-
-TEST(TestPropertyTest, ConstructorWorks) {
-  const TestProperty property("key", "value");
-  EXPECT_STREQ("key", property.key());
-  EXPECT_STREQ("value", property.value());
-}
-
-TEST(TestPropertyTest, SetValue) {
-  TestProperty property("key", "value_1");
-  EXPECT_STREQ("key", property.key());
-  property.SetValue("value_2");
-  EXPECT_STREQ("key", property.key());
-  EXPECT_STREQ("value_2", property.value());
-}
-
-// Tests the TestResult class
-
-// The test fixture for testing TestResult.
-class TestResultTest : public Test {
- protected:
-  typedef std::vector<TestPartResult> TPRVector;
-
-  // We make use of 2 TestPartResult objects,
-  TestPartResult * pr1, * pr2;
-
-  // ... and 3 TestResult objects.
-  TestResult * r0, * r1, * r2;
-
-  virtual void SetUp() {
-    // pr1 is for success.
-    pr1 = new TestPartResult(TestPartResult::kSuccess,
-                             "foo/bar.cc",
-                             10,
-                             "Success!");
-
-    // pr2 is for fatal failure.
-    pr2 = new TestPartResult(TestPartResult::kFatalFailure,
-                             "foo/bar.cc",
-                             -1,  // This line number means "unknown"
-                             "Failure!");
-
-    // Creates the TestResult objects.
-    r0 = new TestResult();
-    r1 = new TestResult();
-    r2 = new TestResult();
-
-    // In order to test TestResult, we need to modify its internal
-    // state, in particular the TestPartResult vector it holds.
-    // test_part_results() returns a const reference to this vector.
-    // We cast it to a non-const object s.t. it can be modified (yes,
-    // this is a hack).
-    TPRVector* results1 = const_cast<TPRVector*>(
-        &TestResultAccessor::test_part_results(*r1));
-    TPRVector* results2 = const_cast<TPRVector*>(
-        &TestResultAccessor::test_part_results(*r2));
-
-    // r0 is an empty TestResult.
-
-    // r1 contains a single SUCCESS TestPartResult.
-    results1->push_back(*pr1);
-
-    // r2 contains a SUCCESS, and a FAILURE.
-    results2->push_back(*pr1);
-    results2->push_back(*pr2);
-  }
-
-  virtual void TearDown() {
-    delete pr1;
-    delete pr2;
-
-    delete r0;
-    delete r1;
-    delete r2;
-  }
-
-  // Helper that compares two two TestPartResults.
-  static void CompareTestPartResult(const TestPartResult& expected,
-                                    const TestPartResult& actual) {
-    EXPECT_EQ(expected.type(), actual.type());
-    EXPECT_STREQ(expected.file_name(), actual.file_name());
-    EXPECT_EQ(expected.line_number(), actual.line_number());
-    EXPECT_STREQ(expected.summary(), actual.summary());
-    EXPECT_STREQ(expected.message(), actual.message());
-    EXPECT_EQ(expected.passed(), actual.passed());
-    EXPECT_EQ(expected.failed(), actual.failed());
-    EXPECT_EQ(expected.nonfatally_failed(), actual.nonfatally_failed());
-    EXPECT_EQ(expected.fatally_failed(), actual.fatally_failed());
-  }
-};
-
-// Tests TestResult::total_part_count().
-TEST_F(TestResultTest, total_part_count) {
-  ASSERT_EQ(0, r0->total_part_count());
-  ASSERT_EQ(1, r1->total_part_count());
-  ASSERT_EQ(2, r2->total_part_count());
-}
-
-// Tests TestResult::Passed().
-TEST_F(TestResultTest, Passed) {
-  ASSERT_TRUE(r0->Passed());
-  ASSERT_TRUE(r1->Passed());
-  ASSERT_FALSE(r2->Passed());
-}
-
-// Tests TestResult::Failed().
-TEST_F(TestResultTest, Failed) {
-  ASSERT_FALSE(r0->Failed());
-  ASSERT_FALSE(r1->Failed());
-  ASSERT_TRUE(r2->Failed());
-}
-
-// Tests TestResult::GetTestPartResult().
-
-typedef TestResultTest TestResultDeathTest;
-
-TEST_F(TestResultDeathTest, GetTestPartResult) {
-  CompareTestPartResult(*pr1, r2->GetTestPartResult(0));
-  CompareTestPartResult(*pr2, r2->GetTestPartResult(1));
-  EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(2), "");
-  EXPECT_DEATH_IF_SUPPORTED(r2->GetTestPartResult(-1), "");
-}
-
-// Tests TestResult has no properties when none are added.
-TEST(TestResultPropertyTest, NoPropertiesFoundWhenNoneAreAdded) {
-  TestResult test_result;
-  ASSERT_EQ(0, test_result.test_property_count());
-}
-
-// Tests TestResult has the expected property when added.
-TEST(TestResultPropertyTest, OnePropertyFoundWhenAdded) {
-  TestResult test_result;
-  TestProperty property("key_1", "1");
-  TestResultAccessor::RecordProperty(&test_result, property);
-  ASSERT_EQ(1, test_result.test_property_count());
-  const TestProperty& actual_property = test_result.GetTestProperty(0);
-  EXPECT_STREQ("key_1", actual_property.key());
-  EXPECT_STREQ("1", actual_property.value());
-}
-
-// Tests TestResult has multiple properties when added.
-TEST(TestResultPropertyTest, MultiplePropertiesFoundWhenAdded) {
-  TestResult test_result;
-  TestProperty property_1("key_1", "1");
-  TestProperty property_2("key_2", "2");
-  TestResultAccessor::RecordProperty(&test_result, property_1);
-  TestResultAccessor::RecordProperty(&test_result, property_2);
-  ASSERT_EQ(2, test_result.test_property_count());
-  const TestProperty& actual_property_1 = test_result.GetTestProperty(0);
-  EXPECT_STREQ("key_1", actual_property_1.key());
-  EXPECT_STREQ("1", actual_property_1.value());
-
-  const TestProperty& actual_property_2 = test_result.GetTestProperty(1);
-  EXPECT_STREQ("key_2", actual_property_2.key());
-  EXPECT_STREQ("2", actual_property_2.value());
-}
-
-// Tests TestResult::RecordProperty() overrides values for duplicate keys.
-TEST(TestResultPropertyTest, OverridesValuesForDuplicateKeys) {
-  TestResult test_result;
-  TestProperty property_1_1("key_1", "1");
-  TestProperty property_2_1("key_2", "2");
-  TestProperty property_1_2("key_1", "12");
-  TestProperty property_2_2("key_2", "22");
-  TestResultAccessor::RecordProperty(&test_result, property_1_1);
-  TestResultAccessor::RecordProperty(&test_result, property_2_1);
-  TestResultAccessor::RecordProperty(&test_result, property_1_2);
-  TestResultAccessor::RecordProperty(&test_result, property_2_2);
-
-  ASSERT_EQ(2, test_result.test_property_count());
-  const TestProperty& actual_property_1 = test_result.GetTestProperty(0);
-  EXPECT_STREQ("key_1", actual_property_1.key());
-  EXPECT_STREQ("12", actual_property_1.value());
-
-  const TestProperty& actual_property_2 = test_result.GetTestProperty(1);
-  EXPECT_STREQ("key_2", actual_property_2.key());
-  EXPECT_STREQ("22", actual_property_2.value());
-}
-
-// Tests TestResult::GetTestProperty().
-TEST(TestResultPropertyDeathTest, GetTestProperty) {
-  TestResult test_result;
-  TestProperty property_1("key_1", "1");
-  TestProperty property_2("key_2", "2");
-  TestProperty property_3("key_3", "3");
-  TestResultAccessor::RecordProperty(&test_result, property_1);
-  TestResultAccessor::RecordProperty(&test_result, property_2);
-  TestResultAccessor::RecordProperty(&test_result, property_3);
-
-  const TestProperty& fetched_property_1 = test_result.GetTestProperty(0);
-  const TestProperty& fetched_property_2 = test_result.GetTestProperty(1);
-  const TestProperty& fetched_property_3 = test_result.GetTestProperty(2);
-
-  EXPECT_STREQ("key_1", fetched_property_1.key());
-  EXPECT_STREQ("1", fetched_property_1.value());
-
-  EXPECT_STREQ("key_2", fetched_property_2.key());
-  EXPECT_STREQ("2", fetched_property_2.value());
-
-  EXPECT_STREQ("key_3", fetched_property_3.key());
-  EXPECT_STREQ("3", fetched_property_3.value());
-
-  EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(3), "");
-  EXPECT_DEATH_IF_SUPPORTED(test_result.GetTestProperty(-1), "");
-}
-
-// When a property using a reserved key is supplied to this function, it tests
-// that a non-fatal failure is added, a fatal failure is not added, and that the
-// property is not recorded.
-void ExpectNonFatalFailureRecordingPropertyWithReservedKey(const char* key) {
-  TestResult test_result;
-  TestProperty property(key, "1");
-  EXPECT_NONFATAL_FAILURE(
-      TestResultAccessor::RecordProperty(&test_result, property),
-      "Reserved key");
-  ASSERT_EQ(0, test_result.test_property_count()) << "Not recorded";
-}
-
-// Attempting to recording a property with the Reserved literal "name"
-// should add a non-fatal failure and the property should not be recorded.
-TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledName) {
-  ExpectNonFatalFailureRecordingPropertyWithReservedKey("name");
-}
-
-// Attempting to recording a property with the Reserved literal "status"
-// should add a non-fatal failure and the property should not be recorded.
-TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledStatus) {
-  ExpectNonFatalFailureRecordingPropertyWithReservedKey("status");
-}
-
-// Attempting to recording a property with the Reserved literal "time"
-// should add a non-fatal failure and the property should not be recorded.
-TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledTime) {
-  ExpectNonFatalFailureRecordingPropertyWithReservedKey("time");
-}
-
-// Attempting to recording a property with the Reserved literal "classname"
-// should add a non-fatal failure and the property should not be recorded.
-TEST(TestResultPropertyTest, AddFailureWhenUsingReservedKeyCalledClassname) {
-  ExpectNonFatalFailureRecordingPropertyWithReservedKey("classname");
-}
-
-// Tests that GTestFlagSaver works on Windows and Mac.
-
-class GTestFlagSaverTest : public Test {
- protected:
-  // Saves the Google Test flags such that we can restore them later, and
-  // then sets them to their default values.  This will be called
-  // before the first test in this test case is run.
-  static void SetUpTestCase() {
-    saver_ = new GTestFlagSaver;
-
-    GTEST_FLAG(also_run_disabled_tests) = false;
-    GTEST_FLAG(break_on_failure) = false;
-    GTEST_FLAG(catch_exceptions) = false;
-    GTEST_FLAG(death_test_use_fork) = false;
-    GTEST_FLAG(color) = "auto";
-    GTEST_FLAG(filter) = "";
-    GTEST_FLAG(list_tests) = false;
-    GTEST_FLAG(output) = "";
-    GTEST_FLAG(print_time) = true;
-    GTEST_FLAG(random_seed) = 0;
-    GTEST_FLAG(repeat) = 1;
-    GTEST_FLAG(shuffle) = false;
-    GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth;
-    GTEST_FLAG(stream_result_to) = "";
-    GTEST_FLAG(throw_on_failure) = false;
-  }
-
-  // Restores the Google Test flags that the tests have modified.  This will
-  // be called after the last test in this test case is run.
-  static void TearDownTestCase() {
-    delete saver_;
-    saver_ = NULL;
-  }
-
-  // Verifies that the Google Test flags have their default values, and then
-  // modifies each of them.
-  void VerifyAndModifyFlags() {
-    EXPECT_FALSE(GTEST_FLAG(also_run_disabled_tests));
-    EXPECT_FALSE(GTEST_FLAG(break_on_failure));
-    EXPECT_FALSE(GTEST_FLAG(catch_exceptions));
-    EXPECT_STREQ("auto", GTEST_FLAG(color).c_str());
-    EXPECT_FALSE(GTEST_FLAG(death_test_use_fork));
-    EXPECT_STREQ("", GTEST_FLAG(filter).c_str());
-    EXPECT_FALSE(GTEST_FLAG(list_tests));
-    EXPECT_STREQ("", GTEST_FLAG(output).c_str());
-    EXPECT_TRUE(GTEST_FLAG(print_time));
-    EXPECT_EQ(0, GTEST_FLAG(random_seed));
-    EXPECT_EQ(1, GTEST_FLAG(repeat));
-    EXPECT_FALSE(GTEST_FLAG(shuffle));
-    EXPECT_EQ(kMaxStackTraceDepth, GTEST_FLAG(stack_trace_depth));
-    EXPECT_STREQ("", GTEST_FLAG(stream_result_to).c_str());
-    EXPECT_FALSE(GTEST_FLAG(throw_on_failure));
-
-    GTEST_FLAG(also_run_disabled_tests) = true;
-    GTEST_FLAG(break_on_failure) = true;
-    GTEST_FLAG(catch_exceptions) = true;
-    GTEST_FLAG(color) = "no";
-    GTEST_FLAG(death_test_use_fork) = true;
-    GTEST_FLAG(filter) = "abc";
-    GTEST_FLAG(list_tests) = true;
-    GTEST_FLAG(output) = "xml:foo.xml";
-    GTEST_FLAG(print_time) = false;
-    GTEST_FLAG(random_seed) = 1;
-    GTEST_FLAG(repeat) = 100;
-    GTEST_FLAG(shuffle) = true;
-    GTEST_FLAG(stack_trace_depth) = 1;
-    GTEST_FLAG(stream_result_to) = "localhost:1234";
-    GTEST_FLAG(throw_on_failure) = true;
-  }
- private:
-  // For saving Google Test flags during this test case.
-  static GTestFlagSaver* saver_;
-};
-
-GTestFlagSaver* GTestFlagSaverTest::saver_ = NULL;
-
-// Google Test doesn't guarantee the order of tests.  The following two
-// tests are designed to work regardless of their order.
-
-// Modifies the Google Test flags in the test body.
-TEST_F(GTestFlagSaverTest, ModifyGTestFlags) {
-  VerifyAndModifyFlags();
-}
-
-// Verifies that the Google Test flags in the body of the previous test were
-// restored to their original values.
-TEST_F(GTestFlagSaverTest, VerifyGTestFlags) {
-  VerifyAndModifyFlags();
-}
-
-// Sets an environment variable with the given name to the given
-// value.  If the value argument is "", unsets the environment
-// variable.  The caller must ensure that both arguments are not NULL.
-static void SetEnv(const char* name, const char* value) {
-#if GTEST_OS_WINDOWS_MOBILE
-  // Environment variables are not supported on Windows CE.
-  return;
-#elif defined(__BORLANDC__) || defined(__SunOS_5_8) || defined(__SunOS_5_9)
-  // C++Builder's putenv only stores a pointer to its parameter; we have to
-  // ensure that the string remains valid as long as it might be needed.
-  // We use an std::map to do so.
-  static std::map<String, String*> added_env;
-
-  // Because putenv stores a pointer to the string buffer, we can't delete the
-  // previous string (if present) until after it's replaced.
-  String *prev_env = NULL;
-  if (added_env.find(name) != added_env.end()) {
-    prev_env = added_env[name];
-  }
-  added_env[name] = new String((Message() << name << "=" << value).GetString());
-
-  // The standard signature of putenv accepts a 'char*' argument. Other
-  // implementations, like C++Builder's, accept a 'const char*'.
-  // We cast away the 'const' since that would work for both variants.
-  putenv(const_cast<char*>(added_env[name]->c_str()));
-  delete prev_env;
-#elif GTEST_OS_WINDOWS  // If we are on Windows proper.
-  _putenv((Message() << name << "=" << value).GetString().c_str());
-#else
-  if (*value == '\0') {
-    unsetenv(name);
-  } else {
-    setenv(name, value, 1);
-  }
-#endif  // GTEST_OS_WINDOWS_MOBILE
-}
-
-#if !GTEST_OS_WINDOWS_MOBILE
-// Environment variables are not supported on Windows CE.
-
-using testing::internal::Int32FromGTestEnv;
-
-// Tests Int32FromGTestEnv().
-
-// Tests that Int32FromGTestEnv() returns the default value when the
-// environment variable is not set.
-TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenVariableIsNotSet) {
-  SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "");
-  EXPECT_EQ(10, Int32FromGTestEnv("temp", 10));
-}
-
-// Tests that Int32FromGTestEnv() returns the default value when the
-// environment variable overflows as an Int32.
-TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueOverflows) {
-  printf("(expecting 2 warnings)\n");
-
-  SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12345678987654321");
-  EXPECT_EQ(20, Int32FromGTestEnv("temp", 20));
-
-  SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-12345678987654321");
-  EXPECT_EQ(30, Int32FromGTestEnv("temp", 30));
-}
-
-// Tests that Int32FromGTestEnv() returns the default value when the
-// environment variable does not represent a valid decimal integer.
-TEST(Int32FromGTestEnvTest, ReturnsDefaultWhenValueIsInvalid) {
-  printf("(expecting 2 warnings)\n");
-
-  SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "A1");
-  EXPECT_EQ(40, Int32FromGTestEnv("temp", 40));
-
-  SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "12X");
-  EXPECT_EQ(50, Int32FromGTestEnv("temp", 50));
-}
-
-// Tests that Int32FromGTestEnv() parses and returns the value of the
-// environment variable when it represents a valid decimal integer in
-// the range of an Int32.
-TEST(Int32FromGTestEnvTest, ParsesAndReturnsValidValue) {
-  SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "123");
-  EXPECT_EQ(123, Int32FromGTestEnv("temp", 0));
-
-  SetEnv(GTEST_FLAG_PREFIX_UPPER_ "TEMP", "-321");
-  EXPECT_EQ(-321, Int32FromGTestEnv("temp", 0));
-}
-#endif  // !GTEST_OS_WINDOWS_MOBILE
-
-// Tests ParseInt32Flag().
-
-// Tests that ParseInt32Flag() returns false and doesn't change the
-// output value when the flag has wrong format
-TEST(ParseInt32FlagTest, ReturnsFalseForInvalidFlag) {
-  Int32 value = 123;
-  EXPECT_FALSE(ParseInt32Flag("--a=100", "b", &value));
-  EXPECT_EQ(123, value);
-
-  EXPECT_FALSE(ParseInt32Flag("a=100", "a", &value));
-  EXPECT_EQ(123, value);
-}
-
-// Tests that ParseInt32Flag() returns false and doesn't change the
-// output value when the flag overflows as an Int32.
-TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueOverflows) {
-  printf("(expecting 2 warnings)\n");
-
-  Int32 value = 123;
-  EXPECT_FALSE(ParseInt32Flag("--abc=12345678987654321", "abc", &value));
-  EXPECT_EQ(123, value);
-
-  EXPECT_FALSE(ParseInt32Flag("--abc=-12345678987654321", "abc", &value));
-  EXPECT_EQ(123, value);
-}
-
-// Tests that ParseInt32Flag() returns false and doesn't change the
-// output value when the flag does not represent a valid decimal
-// integer.
-TEST(ParseInt32FlagTest, ReturnsDefaultWhenValueIsInvalid) {
-  printf("(expecting 2 warnings)\n");
-
-  Int32 value = 123;
-  EXPECT_FALSE(ParseInt32Flag("--abc=A1", "abc", &value));
-  EXPECT_EQ(123, value);
-
-  EXPECT_FALSE(ParseInt32Flag("--abc=12X", "abc", &value));
-  EXPECT_EQ(123, value);
-}
-
-// Tests that ParseInt32Flag() parses the value of the flag and
-// returns true when the flag represents a valid decimal integer in
-// the range of an Int32.
-TEST(ParseInt32FlagTest, ParsesAndReturnsValidValue) {
-  Int32 value = 123;
-  EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=456", "abc", &value));
-  EXPECT_EQ(456, value);
-
-  EXPECT_TRUE(ParseInt32Flag("--" GTEST_FLAG_PREFIX_ "abc=-789",
-                             "abc", &value));
-  EXPECT_EQ(-789, value);
-}
-
-// Tests that Int32FromEnvOrDie() parses the value of the var or
-// returns the correct default.
-// Environment variables are not supported on Windows CE.
-#if !GTEST_OS_WINDOWS_MOBILE
-TEST(Int32FromEnvOrDieTest, ParsesAndReturnsValidValue) {
-  EXPECT_EQ(333, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333));
-  SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "123");
-  EXPECT_EQ(123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333));
-  SetEnv(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", "-123");
-  EXPECT_EQ(-123, Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "UnsetVar", 333));
-}
-#endif  // !GTEST_OS_WINDOWS_MOBILE
-
-// Tests that Int32FromEnvOrDie() aborts with an error message
-// if the variable is not an Int32.
-TEST(Int32FromEnvOrDieDeathTest, AbortsOnFailure) {
-  SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "xxx");
-  EXPECT_DEATH_IF_SUPPORTED(
-      Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123),
-      ".*");
-}
-
-// Tests that Int32FromEnvOrDie() aborts with an error message
-// if the variable cannot be represnted by an Int32.
-TEST(Int32FromEnvOrDieDeathTest, AbortsOnInt32Overflow) {
-  SetEnv(GTEST_FLAG_PREFIX_UPPER_ "VAR", "1234567891234567891234");
-  EXPECT_DEATH_IF_SUPPORTED(
-      Int32FromEnvOrDie(GTEST_FLAG_PREFIX_UPPER_ "VAR", 123),
-      ".*");
-}
-
-// Tests that ShouldRunTestOnShard() selects all tests
-// where there is 1 shard.
-TEST(ShouldRunTestOnShardTest, IsPartitionWhenThereIsOneShard) {
-  EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 0));
-  EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 1));
-  EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 2));
-  EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 3));
-  EXPECT_TRUE(ShouldRunTestOnShard(1, 0, 4));
-}
-
-class ShouldShardTest : public testing::Test {
- protected:
-  virtual void SetUp() {
-    index_var_ = GTEST_FLAG_PREFIX_UPPER_ "INDEX";
-    total_var_ = GTEST_FLAG_PREFIX_UPPER_ "TOTAL";
-  }
-
-  virtual void TearDown() {
-    SetEnv(index_var_, "");
-    SetEnv(total_var_, "");
-  }
-
-  const char* index_var_;
-  const char* total_var_;
-};
-
-// Tests that sharding is disabled if neither of the environment variables
-// are set.
-TEST_F(ShouldShardTest, ReturnsFalseWhenNeitherEnvVarIsSet) {
-  SetEnv(index_var_, "");
-  SetEnv(total_var_, "");
-
-  EXPECT_FALSE(ShouldShard(total_var_, index_var_, false));
-  EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
-}
-
-// Tests that sharding is not enabled if total_shards  == 1.
-TEST_F(ShouldShardTest, ReturnsFalseWhenTotalShardIsOne) {
-  SetEnv(index_var_, "0");
-  SetEnv(total_var_, "1");
-  EXPECT_FALSE(ShouldShard(total_var_, index_var_, false));
-  EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
-}
-
-// Tests that sharding is enabled if total_shards > 1 and
-// we are not in a death test subprocess.
-// Environment variables are not supported on Windows CE.
-#if !GTEST_OS_WINDOWS_MOBILE
-TEST_F(ShouldShardTest, WorksWhenShardEnvVarsAreValid) {
-  SetEnv(index_var_, "4");
-  SetEnv(total_var_, "22");
-  EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));
-  EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
-
-  SetEnv(index_var_, "8");
-  SetEnv(total_var_, "9");
-  EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));
-  EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
-
-  SetEnv(index_var_, "0");
-  SetEnv(total_var_, "9");
-  EXPECT_TRUE(ShouldShard(total_var_, index_var_, false));
-  EXPECT_FALSE(ShouldShard(total_var_, index_var_, true));
-}
-#endif  // !GTEST_OS_WINDOWS_MOBILE
-
-// Tests that we exit in error if the sharding values are not valid.
-
-typedef ShouldShardTest ShouldShardDeathTest;
-
-TEST_F(ShouldShardDeathTest, AbortsWhenShardingEnvVarsAreInvalid) {
-  SetEnv(index_var_, "4");
-  SetEnv(total_var_, "4");
-  EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*");
-
-  SetEnv(index_var_, "4");
-  SetEnv(total_var_, "-2");
-  EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*");
-
-  SetEnv(index_var_, "5");
-  SetEnv(total_var_, "");
-  EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*");
-
-  SetEnv(index_var_, "");
-  SetEnv(total_var_, "5");
-  EXPECT_DEATH_IF_SUPPORTED(ShouldShard(total_var_, index_var_, false), ".*");
-}
-
-// Tests that ShouldRunTestOnShard is a partition when 5
-// shards are used.
-TEST(ShouldRunTestOnShardTest, IsPartitionWhenThereAreFiveShards) {
-  // Choose an arbitrary number of tests and shards.
-  const int num_tests = 17;
-  const int num_shards = 5;
-
-  // Check partitioning: each test should be on exactly 1 shard.
-  for (int test_id = 0; test_id < num_tests; test_id++) {
-    int prev_selected_shard_index = -1;
-    for (int shard_index = 0; shard_index < num_shards; shard_index++) {
-      if (ShouldRunTestOnShard(num_shards, shard_index, test_id)) {
-        if (prev_selected_shard_index < 0) {
-          prev_selected_shard_index = shard_index;
-        } else {
-          ADD_FAILURE() << "Shard " << prev_selected_shard_index << " and "
-            << shard_index << " are both selected to run test " << test_id;
-        }
-      }
-    }
-  }
-
-  // Check balance: This is not required by the sharding protocol, but is a
-  // desirable property for performance.
-  for (int shard_index = 0; shard_index < num_shards; shard_index++) {
-    int num_tests_on_shard = 0;
-    for (int test_id = 0; test_id < num_tests; test_id++) {
-      num_tests_on_shard +=
-        ShouldRunTestOnShard(num_shards, shard_index, test_id);
-    }
-    EXPECT_GE(num_tests_on_shard, num_tests / num_shards);
-  }
-}
-
-// For the same reason we are not explicitly testing everything in the
-// Test class, there are no separate tests for the following classes
-// (except for some trivial cases):
-//
-//   TestCase, UnitTest, UnitTestResultPrinter.
-//
-// Similarly, there are no separate tests for the following macros:
-//
-//   TEST, TEST_F, RUN_ALL_TESTS
-
-TEST(UnitTestTest, CanGetOriginalWorkingDir) {
-  ASSERT_TRUE(UnitTest::GetInstance()->original_working_dir() != NULL);
-  EXPECT_STRNE(UnitTest::GetInstance()->original_working_dir(), "");
-}
-
-// This group of tests is for predicate assertions (ASSERT_PRED*, etc)
-// of various arities.  They do not attempt to be exhaustive.  Rather,
-// view them as smoke tests that can be easily reviewed and verified.
-// A more complete set of tests for predicate assertions can be found
-// in gtest_pred_impl_unittest.cc.
-
-// First, some predicates and predicate-formatters needed by the tests.
-
-// Returns true iff the argument is an even number.
-bool IsEven(int n) {
-  return (n % 2) == 0;
-}
-
-// A functor that returns true iff the argument is an even number.
-struct IsEvenFunctor {
-  bool operator()(int n) { return IsEven(n); }
-};
-
-// A predicate-formatter function that asserts the argument is an even
-// number.
-AssertionResult AssertIsEven(const char* expr, int n) {
-  if (IsEven(n)) {
-    return AssertionSuccess();
-  }
-
-  Message msg;
-  msg << expr << " evaluates to " << n << ", which is not even.";
-  return AssertionFailure(msg);
-}
-
-// A predicate function that returns AssertionResult for use in
-// EXPECT/ASSERT_TRUE/FALSE.
-AssertionResult ResultIsEven(int n) {
-  if (IsEven(n))
-    return AssertionSuccess() << n << " is even";
-  else
-    return AssertionFailure() << n << " is odd";
-}
-
-// A predicate function that returns AssertionResult but gives no
-// explanation why it succeeds. Needed for testing that
-// EXPECT/ASSERT_FALSE handles such functions correctly.
-AssertionResult ResultIsEvenNoExplanation(int n) {
-  if (IsEven(n))
-    return AssertionSuccess();
-  else
-    return AssertionFailure() << n << " is odd";
-}
-
-// A predicate-formatter functor that asserts the argument is an even
-// number.
-struct AssertIsEvenFunctor {
-  AssertionResult operator()(const char* expr, int n) {
-    return AssertIsEven(expr, n);
-  }
-};
-
-// Returns true iff the sum of the arguments is an even number.
-bool SumIsEven2(int n1, int n2) {
-  return IsEven(n1 + n2);
-}
-
-// A functor that returns true iff the sum of the arguments is an even
-// number.
-struct SumIsEven3Functor {
-  bool operator()(int n1, int n2, int n3) {
-    return IsEven(n1 + n2 + n3);
-  }
-};
-
-// A predicate-formatter function that asserts the sum of the
-// arguments is an even number.
-AssertionResult AssertSumIsEven4(
-    const char* e1, const char* e2, const char* e3, const char* e4,
-    int n1, int n2, int n3, int n4) {
-  const int sum = n1 + n2 + n3 + n4;
-  if (IsEven(sum)) {
-    return AssertionSuccess();
-  }
-
-  Message msg;
-  msg << e1 << " + " << e2 << " + " << e3 << " + " << e4
-      << " (" << n1 << " + " << n2 << " + " << n3 << " + " << n4
-      << ") evaluates to " << sum << ", which is not even.";
-  return AssertionFailure(msg);
-}
-
-// A predicate-formatter functor that asserts the sum of the arguments
-// is an even number.
-struct AssertSumIsEven5Functor {
-  AssertionResult operator()(
-      const char* e1, const char* e2, const char* e3, const char* e4,
-      const char* e5, int n1, int n2, int n3, int n4, int n5) {
-    const int sum = n1 + n2 + n3 + n4 + n5;
-    if (IsEven(sum)) {
-      return AssertionSuccess();
-    }
-
-    Message msg;
-    msg << e1 << " + " << e2 << " + " << e3 << " + " << e4 << " + " << e5
-        << " ("
-        << n1 << " + " << n2 << " + " << n3 << " + " << n4 << " + " << n5
-        << ") evaluates to " << sum << ", which is not even.";
-    return AssertionFailure(msg);
-  }
-};
-
-
-// Tests unary predicate assertions.
-
-// Tests unary predicate assertions that don't use a custom formatter.
-TEST(Pred1Test, WithoutFormat) {
-  // Success cases.
-  EXPECT_PRED1(IsEvenFunctor(), 2) << "This failure is UNEXPECTED!";
-  ASSERT_PRED1(IsEven, 4);
-
-  // Failure cases.
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_PRED1(IsEven, 5) << "This failure is expected.";
-  }, "This failure is expected.");
-  EXPECT_FATAL_FAILURE(ASSERT_PRED1(IsEvenFunctor(), 5),
-                       "evaluates to false");
-}
-
-// Tests unary predicate assertions that use a custom formatter.
-TEST(Pred1Test, WithFormat) {
-  // Success cases.
-  EXPECT_PRED_FORMAT1(AssertIsEven, 2);
-  ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), 4)
-    << "This failure is UNEXPECTED!";
-
-  // Failure cases.
-  const int n = 5;
-  EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT1(AssertIsEvenFunctor(), n),
-                          "n evaluates to 5, which is not even.");
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    ASSERT_PRED_FORMAT1(AssertIsEven, 5) << "This failure is expected.";
-  }, "This failure is expected.");
-}
-
-// Tests that unary predicate assertions evaluates their arguments
-// exactly once.
-TEST(Pred1Test, SingleEvaluationOnFailure) {
-  // A success case.
-  static int n = 0;
-  EXPECT_PRED1(IsEven, n++);
-  EXPECT_EQ(1, n) << "The argument is not evaluated exactly once.";
-
-  // A failure case.
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    ASSERT_PRED_FORMAT1(AssertIsEvenFunctor(), n++)
-        << "This failure is expected.";
-  }, "This failure is expected.");
-  EXPECT_EQ(2, n) << "The argument is not evaluated exactly once.";
-}
-
-
-// Tests predicate assertions whose arity is >= 2.
-
-// Tests predicate assertions that don't use a custom formatter.
-TEST(PredTest, WithoutFormat) {
-  // Success cases.
-  ASSERT_PRED2(SumIsEven2, 2, 4) << "This failure is UNEXPECTED!";
-  EXPECT_PRED3(SumIsEven3Functor(), 4, 6, 8);
-
-  // Failure cases.
-  const int n1 = 1;
-  const int n2 = 2;
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_PRED2(SumIsEven2, n1, n2) << "This failure is expected.";
-  }, "This failure is expected.");
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    ASSERT_PRED3(SumIsEven3Functor(), 1, 2, 4);
-  }, "evaluates to false");
-}
-
-// Tests predicate assertions that use a custom formatter.
-TEST(PredTest, WithFormat) {
-  // Success cases.
-  ASSERT_PRED_FORMAT4(AssertSumIsEven4, 4, 6, 8, 10) <<
-    "This failure is UNEXPECTED!";
-  EXPECT_PRED_FORMAT5(AssertSumIsEven5Functor(), 2, 4, 6, 8, 10);
-
-  // Failure cases.
-  const int n1 = 1;
-  const int n2 = 2;
-  const int n3 = 4;
-  const int n4 = 6;
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_PRED_FORMAT4(AssertSumIsEven4, n1, n2, n3, n4);
-  }, "evaluates to 13, which is not even.");
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(), 1, 2, 4, 6, 8)
-        << "This failure is expected.";
-  }, "This failure is expected.");
-}
-
-// Tests that predicate assertions evaluates their arguments
-// exactly once.
-TEST(PredTest, SingleEvaluationOnFailure) {
-  // A success case.
-  int n1 = 0;
-  int n2 = 0;
-  EXPECT_PRED2(SumIsEven2, n1++, n2++);
-  EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
-  EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
-
-  // Another success case.
-  n1 = n2 = 0;
-  int n3 = 0;
-  int n4 = 0;
-  int n5 = 0;
-  ASSERT_PRED_FORMAT5(AssertSumIsEven5Functor(),
-                      n1++, n2++, n3++, n4++, n5++)
-                        << "This failure is UNEXPECTED!";
-  EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
-  EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
-  EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once.";
-  EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once.";
-  EXPECT_EQ(1, n5) << "Argument 5 is not evaluated exactly once.";
-
-  // A failure case.
-  n1 = n2 = n3 = 0;
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_PRED3(SumIsEven3Functor(), ++n1, n2++, n3++)
-        << "This failure is expected.";
-  }, "This failure is expected.");
-  EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
-  EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
-  EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once.";
-
-  // Another failure case.
-  n1 = n2 = n3 = n4 = 0;
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_PRED_FORMAT4(AssertSumIsEven4, ++n1, n2++, n3++, n4++);
-  }, "evaluates to 1, which is not even.");
-  EXPECT_EQ(1, n1) << "Argument 1 is not evaluated exactly once.";
-  EXPECT_EQ(1, n2) << "Argument 2 is not evaluated exactly once.";
-  EXPECT_EQ(1, n3) << "Argument 3 is not evaluated exactly once.";
-  EXPECT_EQ(1, n4) << "Argument 4 is not evaluated exactly once.";
-}
-
-
-// Some helper functions for testing using overloaded/template
-// functions with ASSERT_PREDn and EXPECT_PREDn.
-
-bool IsPositive(double x) {
-  return x > 0;
-}
-
-template <typename T>
-bool IsNegative(T x) {
-  return x < 0;
-}
-
-template <typename T1, typename T2>
-bool GreaterThan(T1 x1, T2 x2) {
-  return x1 > x2;
-}
-
-// Tests that overloaded functions can be used in *_PRED* as long as
-// their types are explicitly specified.
-TEST(PredicateAssertionTest, AcceptsOverloadedFunction) {
-  // C++Builder requires C-style casts rather than static_cast.
-  EXPECT_PRED1((bool (*)(int))(IsPositive), 5);  // NOLINT
-  ASSERT_PRED1((bool (*)(double))(IsPositive), 6.0);  // NOLINT
-}
-
-// Tests that template functions can be used in *_PRED* as long as
-// their types are explicitly specified.
-TEST(PredicateAssertionTest, AcceptsTemplateFunction) {
-  EXPECT_PRED1(IsNegative<int>, -5);
-  // Makes sure that we can handle templates with more than one
-  // parameter.
-  ASSERT_PRED2((GreaterThan<int, int>), 5, 0);
-}
-
-
-// Some helper functions for testing using overloaded/template
-// functions with ASSERT_PRED_FORMATn and EXPECT_PRED_FORMATn.
-
-AssertionResult IsPositiveFormat(const char* /* expr */, int n) {
-  return n > 0 ? AssertionSuccess() :
-      AssertionFailure(Message() << "Failure");
-}
-
-AssertionResult IsPositiveFormat(const char* /* expr */, double x) {
-  return x > 0 ? AssertionSuccess() :
-      AssertionFailure(Message() << "Failure");
-}
-
-template <typename T>
-AssertionResult IsNegativeFormat(const char* /* expr */, T x) {
-  return x < 0 ? AssertionSuccess() :
-      AssertionFailure(Message() << "Failure");
-}
-
-template <typename T1, typename T2>
-AssertionResult EqualsFormat(const char* /* expr1 */, const char* /* expr2 */,
-                             const T1& x1, const T2& x2) {
-  return x1 == x2 ? AssertionSuccess() :
-      AssertionFailure(Message() << "Failure");
-}
-
-// Tests that overloaded functions can be used in *_PRED_FORMAT*
-// without explicitly specifying their types.
-TEST(PredicateFormatAssertionTest, AcceptsOverloadedFunction) {
-  EXPECT_PRED_FORMAT1(IsPositiveFormat, 5);
-  ASSERT_PRED_FORMAT1(IsPositiveFormat, 6.0);
-}
-
-// Tests that template functions can be used in *_PRED_FORMAT* without
-// explicitly specifying their types.
-TEST(PredicateFormatAssertionTest, AcceptsTemplateFunction) {
-  EXPECT_PRED_FORMAT1(IsNegativeFormat, -5);
-  ASSERT_PRED_FORMAT2(EqualsFormat, 3, 3);
-}
-
-
-// Tests string assertions.
-
-// Tests ASSERT_STREQ with non-NULL arguments.
-TEST(StringAssertionTest, ASSERT_STREQ) {
-  const char * const p1 = "good";
-  ASSERT_STREQ(p1, p1);
-
-  // Let p2 have the same content as p1, but be at a different address.
-  const char p2[] = "good";
-  ASSERT_STREQ(p1, p2);
-
-  EXPECT_FATAL_FAILURE(ASSERT_STREQ("bad", "good"),
-                       "Expected: \"bad\"");
-}
-
-// Tests ASSERT_STREQ with NULL arguments.
-TEST(StringAssertionTest, ASSERT_STREQ_Null) {
-  ASSERT_STREQ(static_cast<const char *>(NULL), NULL);
-  EXPECT_FATAL_FAILURE(ASSERT_STREQ(NULL, "non-null"),
-                       "non-null");
-}
-
-// Tests ASSERT_STREQ with NULL arguments.
-TEST(StringAssertionTest, ASSERT_STREQ_Null2) {
-  EXPECT_FATAL_FAILURE(ASSERT_STREQ("non-null", NULL),
-                       "non-null");
-}
-
-// Tests ASSERT_STRNE.
-TEST(StringAssertionTest, ASSERT_STRNE) {
-  ASSERT_STRNE("hi", "Hi");
-  ASSERT_STRNE("Hi", NULL);
-  ASSERT_STRNE(NULL, "Hi");
-  ASSERT_STRNE("", NULL);
-  ASSERT_STRNE(NULL, "");
-  ASSERT_STRNE("", "Hi");
-  ASSERT_STRNE("Hi", "");
-  EXPECT_FATAL_FAILURE(ASSERT_STRNE("Hi", "Hi"),
-                       "\"Hi\" vs \"Hi\"");
-}
-
-// Tests ASSERT_STRCASEEQ.
-TEST(StringAssertionTest, ASSERT_STRCASEEQ) {
-  ASSERT_STRCASEEQ("hi", "Hi");
-  ASSERT_STRCASEEQ(static_cast<const char *>(NULL), NULL);
-
-  ASSERT_STRCASEEQ("", "");
-  EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("Hi", "hi2"),
-                       "(ignoring case)");
-}
-
-// Tests ASSERT_STRCASENE.
-TEST(StringAssertionTest, ASSERT_STRCASENE) {
-  ASSERT_STRCASENE("hi1", "Hi2");
-  ASSERT_STRCASENE("Hi", NULL);
-  ASSERT_STRCASENE(NULL, "Hi");
-  ASSERT_STRCASENE("", NULL);
-  ASSERT_STRCASENE(NULL, "");
-  ASSERT_STRCASENE("", "Hi");
-  ASSERT_STRCASENE("Hi", "");
-  EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("Hi", "hi"),
-                       "(ignoring case)");
-}
-
-// Tests *_STREQ on wide strings.
-TEST(StringAssertionTest, STREQ_Wide) {
-  // NULL strings.
-  ASSERT_STREQ(static_cast<const wchar_t *>(NULL), NULL);
-
-  // Empty strings.
-  ASSERT_STREQ(L"", L"");
-
-  // Non-null vs NULL.
-  EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"non-null", NULL),
-                          "non-null");
-
-  // Equal strings.
-  EXPECT_STREQ(L"Hi", L"Hi");
-
-  // Unequal strings.
-  EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc", L"Abc"),
-                          "Abc");
-
-  // Strings containing wide characters.
-  EXPECT_NONFATAL_FAILURE(EXPECT_STREQ(L"abc\x8119", L"abc\x8120"),
-                          "abc");
-}
-
-// Tests *_STRNE on wide strings.
-TEST(StringAssertionTest, STRNE_Wide) {
-  // NULL strings.
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_STRNE(static_cast<const wchar_t *>(NULL), NULL);
-  }, "");
-
-  // Empty strings.
-  EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"", L""),
-                          "L\"\"");
-
-  // Non-null vs NULL.
-  ASSERT_STRNE(L"non-null", NULL);
-
-  // Equal strings.
-  EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"Hi", L"Hi"),
-                          "L\"Hi\"");
-
-  // Unequal strings.
-  EXPECT_STRNE(L"abc", L"Abc");
-
-  // Strings containing wide characters.
-  EXPECT_NONFATAL_FAILURE(EXPECT_STRNE(L"abc\x8119", L"abc\x8119"),
-                          "abc");
-}
-
-// Tests for ::testing::IsSubstring().
-
-// Tests that IsSubstring() returns the correct result when the input
-// argument type is const char*.
-TEST(IsSubstringTest, ReturnsCorrectResultForCString) {
-  EXPECT_FALSE(IsSubstring("", "", NULL, "a"));
-  EXPECT_FALSE(IsSubstring("", "", "b", NULL));
-  EXPECT_FALSE(IsSubstring("", "", "needle", "haystack"));
-
-  EXPECT_TRUE(IsSubstring("", "", static_cast<const char*>(NULL), NULL));
-  EXPECT_TRUE(IsSubstring("", "", "needle", "two needles"));
-}
-
-// Tests that IsSubstring() returns the correct result when the input
-// argument type is const wchar_t*.
-TEST(IsSubstringTest, ReturnsCorrectResultForWideCString) {
-  EXPECT_FALSE(IsSubstring("", "", kNull, L"a"));
-  EXPECT_FALSE(IsSubstring("", "", L"b", kNull));
-  EXPECT_FALSE(IsSubstring("", "", L"needle", L"haystack"));
-
-  EXPECT_TRUE(IsSubstring("", "", static_cast<const wchar_t*>(NULL), NULL));
-  EXPECT_TRUE(IsSubstring("", "", L"needle", L"two needles"));
-}
-
-// Tests that IsSubstring() generates the correct message when the input
-// argument type is const char*.
-TEST(IsSubstringTest, GeneratesCorrectMessageForCString) {
-  EXPECT_STREQ("Value of: needle_expr\n"
-               "  Actual: \"needle\"\n"
-               "Expected: a substring of haystack_expr\n"
-               "Which is: \"haystack\"",
-               IsSubstring("needle_expr", "haystack_expr",
-                           "needle", "haystack").failure_message());
-}
-
-// Tests that IsSubstring returns the correct result when the input
-// argument type is ::std::string.
-TEST(IsSubstringTest, ReturnsCorrectResultsForStdString) {
-  EXPECT_TRUE(IsSubstring("", "", std::string("hello"), "ahellob"));
-  EXPECT_FALSE(IsSubstring("", "", "hello", std::string("world")));
-}
-
-#if GTEST_HAS_STD_WSTRING
-// Tests that IsSubstring returns the correct result when the input
-// argument type is ::std::wstring.
-TEST(IsSubstringTest, ReturnsCorrectResultForStdWstring) {
-  EXPECT_TRUE(IsSubstring("", "", ::std::wstring(L"needle"), L"two needles"));
-  EXPECT_FALSE(IsSubstring("", "", L"needle", ::std::wstring(L"haystack")));
-}
-
-// Tests that IsSubstring() generates the correct message when the input
-// argument type is ::std::wstring.
-TEST(IsSubstringTest, GeneratesCorrectMessageForWstring) {
-  EXPECT_STREQ("Value of: needle_expr\n"
-               "  Actual: L\"needle\"\n"
-               "Expected: a substring of haystack_expr\n"
-               "Which is: L\"haystack\"",
-               IsSubstring(
-                   "needle_expr", "haystack_expr",
-                   ::std::wstring(L"needle"), L"haystack").failure_message());
-}
-
-#endif  // GTEST_HAS_STD_WSTRING
-
-// Tests for ::testing::IsNotSubstring().
-
-// Tests that IsNotSubstring() returns the correct result when the input
-// argument type is const char*.
-TEST(IsNotSubstringTest, ReturnsCorrectResultForCString) {
-  EXPECT_TRUE(IsNotSubstring("", "", "needle", "haystack"));
-  EXPECT_FALSE(IsNotSubstring("", "", "needle", "two needles"));
-}
-
-// Tests that IsNotSubstring() returns the correct result when the input
-// argument type is const wchar_t*.
-TEST(IsNotSubstringTest, ReturnsCorrectResultForWideCString) {
-  EXPECT_TRUE(IsNotSubstring("", "", L"needle", L"haystack"));
-  EXPECT_FALSE(IsNotSubstring("", "", L"needle", L"two needles"));
-}
-
-// Tests that IsNotSubstring() generates the correct message when the input
-// argument type is const wchar_t*.
-TEST(IsNotSubstringTest, GeneratesCorrectMessageForWideCString) {
-  EXPECT_STREQ("Value of: needle_expr\n"
-               "  Actual: L\"needle\"\n"
-               "Expected: not a substring of haystack_expr\n"
-               "Which is: L\"two needles\"",
-               IsNotSubstring(
-                   "needle_expr", "haystack_expr",
-                   L"needle", L"two needles").failure_message());
-}
-
-// Tests that IsNotSubstring returns the correct result when the input
-// argument type is ::std::string.
-TEST(IsNotSubstringTest, ReturnsCorrectResultsForStdString) {
-  EXPECT_FALSE(IsNotSubstring("", "", std::string("hello"), "ahellob"));
-  EXPECT_TRUE(IsNotSubstring("", "", "hello", std::string("world")));
-}
-
-// Tests that IsNotSubstring() generates the correct message when the input
-// argument type is ::std::string.
-TEST(IsNotSubstringTest, GeneratesCorrectMessageForStdString) {
-  EXPECT_STREQ("Value of: needle_expr\n"
-               "  Actual: \"needle\"\n"
-               "Expected: not a substring of haystack_expr\n"
-               "Which is: \"two needles\"",
-               IsNotSubstring(
-                   "needle_expr", "haystack_expr",
-                   ::std::string("needle"), "two needles").failure_message());
-}
-
-#if GTEST_HAS_STD_WSTRING
-
-// Tests that IsNotSubstring returns the correct result when the input
-// argument type is ::std::wstring.
-TEST(IsNotSubstringTest, ReturnsCorrectResultForStdWstring) {
-  EXPECT_FALSE(
-      IsNotSubstring("", "", ::std::wstring(L"needle"), L"two needles"));
-  EXPECT_TRUE(IsNotSubstring("", "", L"needle", ::std::wstring(L"haystack")));
-}
-
-#endif  // GTEST_HAS_STD_WSTRING
-
-// Tests floating-point assertions.
-
-template <typename RawType>
-class FloatingPointTest : public Test {
- protected:
-
-  // Pre-calculated numbers to be used by the tests.
-  struct TestValues {
-    RawType close_to_positive_zero;
-    RawType close_to_negative_zero;
-    RawType further_from_negative_zero;
-
-    RawType close_to_one;
-    RawType further_from_one;
-
-    RawType infinity;
-    RawType close_to_infinity;
-    RawType further_from_infinity;
-
-    RawType nan1;
-    RawType nan2;
-  };
-
-  typedef typename testing::internal::FloatingPoint<RawType> Floating;
-  typedef typename Floating::Bits Bits;
-
-  virtual void SetUp() {
-    const size_t max_ulps = Floating::kMaxUlps;
-
-    // The bits that represent 0.0.
-    const Bits zero_bits = Floating(0).bits();
-
-    // Makes some numbers close to 0.0.
-    values_.close_to_positive_zero = Floating::ReinterpretBits(
-        zero_bits + max_ulps/2);
-    values_.close_to_negative_zero = -Floating::ReinterpretBits(
-        zero_bits + max_ulps - max_ulps/2);
-    values_.further_from_negative_zero = -Floating::ReinterpretBits(
-        zero_bits + max_ulps + 1 - max_ulps/2);
-
-    // The bits that represent 1.0.
-    const Bits one_bits = Floating(1).bits();
-
-    // Makes some numbers close to 1.0.
-    values_.close_to_one = Floating::ReinterpretBits(one_bits + max_ulps);
-    values_.further_from_one = Floating::ReinterpretBits(
-        one_bits + max_ulps + 1);
-
-    // +infinity.
-    values_.infinity = Floating::Infinity();
-
-    // The bits that represent +infinity.
-    const Bits infinity_bits = Floating(values_.infinity).bits();
-
-    // Makes some numbers close to infinity.
-    values_.close_to_infinity = Floating::ReinterpretBits(
-        infinity_bits - max_ulps);
-    values_.further_from_infinity = Floating::ReinterpretBits(
-        infinity_bits - max_ulps - 1);
-
-    // Makes some NAN's.  Sets the most significant bit of the fraction so that
-    // our NaN's are quiet; trying to process a signaling NaN would raise an
-    // exception if our environment enables floating point exceptions.
-    values_.nan1 = Floating::ReinterpretBits(Floating::kExponentBitMask
-        | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 1);
-    values_.nan2 = Floating::ReinterpretBits(Floating::kExponentBitMask
-        | (static_cast<Bits>(1) << (Floating::kFractionBitCount - 1)) | 200);
-  }
-
-  void TestSize() {
-    EXPECT_EQ(sizeof(RawType), sizeof(Bits));
-  }
-
-  static TestValues values_;
-};
-
-template <typename RawType>
-typename FloatingPointTest<RawType>::TestValues
-    FloatingPointTest<RawType>::values_;
-
-// Instantiates FloatingPointTest for testing *_FLOAT_EQ.
-typedef FloatingPointTest<float> FloatTest;
-
-// Tests that the size of Float::Bits matches the size of float.
-TEST_F(FloatTest, Size) {
-  TestSize();
-}
-
-// Tests comparing with +0 and -0.
-TEST_F(FloatTest, Zeros) {
-  EXPECT_FLOAT_EQ(0.0, -0.0);
-  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(-0.0, 1.0),
-                          "1.0");
-  EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.5),
-                       "1.5");
-}
-
-// Tests comparing numbers close to 0.
-//
-// This ensures that *_FLOAT_EQ handles the sign correctly and no
-// overflow occurs when comparing numbers whose absolute value is very
-// small.
-TEST_F(FloatTest, AlmostZeros) {
-  // In C++Builder, names within local classes (such as used by
-  // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the
-  // scoping class.  Use a static local alias as a workaround.
-  // We use the assignment syntax since some compilers, like Sun Studio,
-  // don't allow initializing references using construction syntax
-  // (parentheses).
-  static const FloatTest::TestValues& v = this->values_;
-
-  EXPECT_FLOAT_EQ(0.0, v.close_to_positive_zero);
-  EXPECT_FLOAT_EQ(-0.0, v.close_to_negative_zero);
-  EXPECT_FLOAT_EQ(v.close_to_positive_zero, v.close_to_negative_zero);
-
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    ASSERT_FLOAT_EQ(v.close_to_positive_zero,
-                    v.further_from_negative_zero);
-  }, "v.further_from_negative_zero");
-}
-
-// Tests comparing numbers close to each other.
-TEST_F(FloatTest, SmallDiff) {
-  EXPECT_FLOAT_EQ(1.0, values_.close_to_one);
-  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, values_.further_from_one),
-                          "values_.further_from_one");
-}
-
-// Tests comparing numbers far apart.
-TEST_F(FloatTest, LargeDiff) {
-  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(2.5, 3.0),
-                          "3.0");
-}
-
-// Tests comparing with infinity.
-//
-// This ensures that no overflow occurs when comparing numbers whose
-// absolute value is very large.
-TEST_F(FloatTest, Infinity) {
-  EXPECT_FLOAT_EQ(values_.infinity, values_.close_to_infinity);
-  EXPECT_FLOAT_EQ(-values_.infinity, -values_.close_to_infinity);
-#if !GTEST_OS_SYMBIAN
-  // Nokia's STLport crashes if we try to output infinity or NaN.
-  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, -values_.infinity),
-                          "-values_.infinity");
-
-  // This is interesting as the representations of infinity and nan1
-  // are only 1 DLP apart.
-  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.infinity, values_.nan1),
-                          "values_.nan1");
-#endif  // !GTEST_OS_SYMBIAN
-}
-
-// Tests that comparing with NAN always returns false.
-TEST_F(FloatTest, NaN) {
-#if !GTEST_OS_SYMBIAN
-// Nokia's STLport crashes if we try to output infinity or NaN.
-
-  // In C++Builder, names within local classes (such as used by
-  // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the
-  // scoping class.  Use a static local alias as a workaround.
-  // We use the assignment syntax since some compilers, like Sun Studio,
-  // don't allow initializing references using construction syntax
-  // (parentheses).
-  static const FloatTest::TestValues& v = this->values_;
-
-  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan1),
-                          "v.nan1");
-  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(v.nan1, v.nan2),
-                          "v.nan2");
-  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(1.0, v.nan1),
-                          "v.nan1");
-
-  EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(v.nan1, v.infinity),
-                       "v.infinity");
-#endif  // !GTEST_OS_SYMBIAN
-}
-
-// Tests that *_FLOAT_EQ are reflexive.
-TEST_F(FloatTest, Reflexive) {
-  EXPECT_FLOAT_EQ(0.0, 0.0);
-  EXPECT_FLOAT_EQ(1.0, 1.0);
-  ASSERT_FLOAT_EQ(values_.infinity, values_.infinity);
-}
-
-// Tests that *_FLOAT_EQ are commutative.
-TEST_F(FloatTest, Commutative) {
-  // We already tested EXPECT_FLOAT_EQ(1.0, values_.close_to_one).
-  EXPECT_FLOAT_EQ(values_.close_to_one, 1.0);
-
-  // We already tested EXPECT_FLOAT_EQ(1.0, values_.further_from_one).
-  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(values_.further_from_one, 1.0),
-                          "1.0");
-}
-
-// Tests EXPECT_NEAR.
-TEST_F(FloatTest, EXPECT_NEAR) {
-  EXPECT_NEAR(-1.0f, -1.1f, 0.2f);
-  EXPECT_NEAR(2.0f, 3.0f, 1.0f);
-  EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0f,1.5f, 0.25f),  // NOLINT
-                          "The difference between 1.0f and 1.5f is 0.5, "
-                          "which exceeds 0.25f");
-  // To work around a bug in gcc 2.95.0, there is intentionally no
-  // space after the first comma in the previous line.
-}
-
-// Tests ASSERT_NEAR.
-TEST_F(FloatTest, ASSERT_NEAR) {
-  ASSERT_NEAR(-1.0f, -1.1f, 0.2f);
-  ASSERT_NEAR(2.0f, 3.0f, 1.0f);
-  EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0f,1.5f, 0.25f),  // NOLINT
-                       "The difference between 1.0f and 1.5f is 0.5, "
-                       "which exceeds 0.25f");
-  // To work around a bug in gcc 2.95.0, there is intentionally no
-  // space after the first comma in the previous line.
-}
-
-// Tests the cases where FloatLE() should succeed.
-TEST_F(FloatTest, FloatLESucceeds) {
-  EXPECT_PRED_FORMAT2(FloatLE, 1.0f, 2.0f);  // When val1 < val2,
-  ASSERT_PRED_FORMAT2(FloatLE, 1.0f, 1.0f);  // val1 == val2,
-
-  // or when val1 is greater than, but almost equals to, val2.
-  EXPECT_PRED_FORMAT2(FloatLE, values_.close_to_positive_zero, 0.0f);
-}
-
-// Tests the cases where FloatLE() should fail.
-TEST_F(FloatTest, FloatLEFails) {
-  // When val1 is greater than val2 by a large margin,
-  EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(FloatLE, 2.0f, 1.0f),
-                          "(2.0f) <= (1.0f)");
-
-  // or by a small yet non-negligible margin,
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_PRED_FORMAT2(FloatLE, values_.further_from_one, 1.0f);
-  }, "(values_.further_from_one) <= (1.0f)");
-
-#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)
-  // Nokia's STLport crashes if we try to output infinity or NaN.
-  // C++Builder gives bad results for ordered comparisons involving NaNs
-  // due to compiler bugs.
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_PRED_FORMAT2(FloatLE, values_.nan1, values_.infinity);
-  }, "(values_.nan1) <= (values_.infinity)");
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_PRED_FORMAT2(FloatLE, -values_.infinity, values_.nan1);
-  }, "(-values_.infinity) <= (values_.nan1)");
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    ASSERT_PRED_FORMAT2(FloatLE, values_.nan1, values_.nan1);
-  }, "(values_.nan1) <= (values_.nan1)");
-#endif  // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)
-}
-
-// Instantiates FloatingPointTest for testing *_DOUBLE_EQ.
-typedef FloatingPointTest<double> DoubleTest;
-
-// Tests that the size of Double::Bits matches the size of double.
-TEST_F(DoubleTest, Size) {
-  TestSize();
-}
-
-// Tests comparing with +0 and -0.
-TEST_F(DoubleTest, Zeros) {
-  EXPECT_DOUBLE_EQ(0.0, -0.0);
-  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(-0.0, 1.0),
-                          "1.0");
-  EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(0.0, 1.0),
-                       "1.0");
-}
-
-// Tests comparing numbers close to 0.
-//
-// This ensures that *_DOUBLE_EQ handles the sign correctly and no
-// overflow occurs when comparing numbers whose absolute value is very
-// small.
-TEST_F(DoubleTest, AlmostZeros) {
-  // In C++Builder, names within local classes (such as used by
-  // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the
-  // scoping class.  Use a static local alias as a workaround.
-  // We use the assignment syntax since some compilers, like Sun Studio,
-  // don't allow initializing references using construction syntax
-  // (parentheses).
-  static const DoubleTest::TestValues& v = this->values_;
-
-  EXPECT_DOUBLE_EQ(0.0, v.close_to_positive_zero);
-  EXPECT_DOUBLE_EQ(-0.0, v.close_to_negative_zero);
-  EXPECT_DOUBLE_EQ(v.close_to_positive_zero, v.close_to_negative_zero);
-
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    ASSERT_DOUBLE_EQ(v.close_to_positive_zero,
-                     v.further_from_negative_zero);
-  }, "v.further_from_negative_zero");
-}
-
-// Tests comparing numbers close to each other.
-TEST_F(DoubleTest, SmallDiff) {
-  EXPECT_DOUBLE_EQ(1.0, values_.close_to_one);
-  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, values_.further_from_one),
-                          "values_.further_from_one");
-}
-
-// Tests comparing numbers far apart.
-TEST_F(DoubleTest, LargeDiff) {
-  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(2.0, 3.0),
-                          "3.0");
-}
-
-// Tests comparing with infinity.
-//
-// This ensures that no overflow occurs when comparing numbers whose
-// absolute value is very large.
-TEST_F(DoubleTest, Infinity) {
-  EXPECT_DOUBLE_EQ(values_.infinity, values_.close_to_infinity);
-  EXPECT_DOUBLE_EQ(-values_.infinity, -values_.close_to_infinity);
-#if !GTEST_OS_SYMBIAN
-  // Nokia's STLport crashes if we try to output infinity or NaN.
-  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, -values_.infinity),
-                          "-values_.infinity");
-
-  // This is interesting as the representations of infinity_ and nan1_
-  // are only 1 DLP apart.
-  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.infinity, values_.nan1),
-                          "values_.nan1");
-#endif  // !GTEST_OS_SYMBIAN
-}
-
-// Tests that comparing with NAN always returns false.
-TEST_F(DoubleTest, NaN) {
-#if !GTEST_OS_SYMBIAN
-  // In C++Builder, names within local classes (such as used by
-  // EXPECT_FATAL_FAILURE) cannot be resolved against static members of the
-  // scoping class.  Use a static local alias as a workaround.
-  // We use the assignment syntax since some compilers, like Sun Studio,
-  // don't allow initializing references using construction syntax
-  // (parentheses).
-  static const DoubleTest::TestValues& v = this->values_;
-
-  // Nokia's STLport crashes if we try to output infinity or NaN.
-  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan1),
-                          "v.nan1");
-  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(v.nan1, v.nan2), "v.nan2");
-  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(1.0, v.nan1), "v.nan1");
-  EXPECT_FATAL_FAILURE(ASSERT_DOUBLE_EQ(v.nan1, v.infinity),
-                       "v.infinity");
-#endif  // !GTEST_OS_SYMBIAN
-}
-
-// Tests that *_DOUBLE_EQ are reflexive.
-TEST_F(DoubleTest, Reflexive) {
-  EXPECT_DOUBLE_EQ(0.0, 0.0);
-  EXPECT_DOUBLE_EQ(1.0, 1.0);
-#if !GTEST_OS_SYMBIAN
-  // Nokia's STLport crashes if we try to output infinity or NaN.
-  ASSERT_DOUBLE_EQ(values_.infinity, values_.infinity);
-#endif  // !GTEST_OS_SYMBIAN
-}
-
-// Tests that *_DOUBLE_EQ are commutative.
-TEST_F(DoubleTest, Commutative) {
-  // We already tested EXPECT_DOUBLE_EQ(1.0, values_.close_to_one).
-  EXPECT_DOUBLE_EQ(values_.close_to_one, 1.0);
-
-  // We already tested EXPECT_DOUBLE_EQ(1.0, values_.further_from_one).
-  EXPECT_NONFATAL_FAILURE(EXPECT_DOUBLE_EQ(values_.further_from_one, 1.0),
-                          "1.0");
-}
-
-// Tests EXPECT_NEAR.
-TEST_F(DoubleTest, EXPECT_NEAR) {
-  EXPECT_NEAR(-1.0, -1.1, 0.2);
-  EXPECT_NEAR(2.0, 3.0, 1.0);
-  EXPECT_NONFATAL_FAILURE(EXPECT_NEAR(1.0, 1.5, 0.25),  // NOLINT
-                          "The difference between 1.0 and 1.5 is 0.5, "
-                          "which exceeds 0.25");
-  // To work around a bug in gcc 2.95.0, there is intentionally no
-  // space after the first comma in the previous statement.
-}
-
-// Tests ASSERT_NEAR.
-TEST_F(DoubleTest, ASSERT_NEAR) {
-  ASSERT_NEAR(-1.0, -1.1, 0.2);
-  ASSERT_NEAR(2.0, 3.0, 1.0);
-  EXPECT_FATAL_FAILURE(ASSERT_NEAR(1.0, 1.5, 0.25),  // NOLINT
-                       "The difference between 1.0 and 1.5 is 0.5, "
-                       "which exceeds 0.25");
-  // To work around a bug in gcc 2.95.0, there is intentionally no
-  // space after the first comma in the previous statement.
-}
-
-// Tests the cases where DoubleLE() should succeed.
-TEST_F(DoubleTest, DoubleLESucceeds) {
-  EXPECT_PRED_FORMAT2(DoubleLE, 1.0, 2.0);  // When val1 < val2,
-  ASSERT_PRED_FORMAT2(DoubleLE, 1.0, 1.0);  // val1 == val2,
-
-  // or when val1 is greater than, but almost equals to, val2.
-  EXPECT_PRED_FORMAT2(DoubleLE, values_.close_to_positive_zero, 0.0);
-}
-
-// Tests the cases where DoubleLE() should fail.
-TEST_F(DoubleTest, DoubleLEFails) {
-  // When val1 is greater than val2 by a large margin,
-  EXPECT_NONFATAL_FAILURE(EXPECT_PRED_FORMAT2(DoubleLE, 2.0, 1.0),
-                          "(2.0) <= (1.0)");
-
-  // or by a small yet non-negligible margin,
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_PRED_FORMAT2(DoubleLE, values_.further_from_one, 1.0);
-  }, "(values_.further_from_one) <= (1.0)");
-
-#if !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)
-  // Nokia's STLport crashes if we try to output infinity or NaN.
-  // C++Builder gives bad results for ordered comparisons involving NaNs
-  // due to compiler bugs.
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.infinity);
-  }, "(values_.nan1) <= (values_.infinity)");
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_PRED_FORMAT2(DoubleLE, -values_.infinity, values_.nan1);
-  }, " (-values_.infinity) <= (values_.nan1)");
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    ASSERT_PRED_FORMAT2(DoubleLE, values_.nan1, values_.nan1);
-  }, "(values_.nan1) <= (values_.nan1)");
-#endif  // !GTEST_OS_SYMBIAN && !defined(__BORLANDC__)
-}
-
-
-// Verifies that a test or test case whose name starts with DISABLED_ is
-// not run.
-
-// A test whose name starts with DISABLED_.
-// Should not run.
-TEST(DisabledTest, DISABLED_TestShouldNotRun) {
-  FAIL() << "Unexpected failure: Disabled test should not be run.";
-}
-
-// A test whose name does not start with DISABLED_.
-// Should run.
-TEST(DisabledTest, NotDISABLED_TestShouldRun) {
-  EXPECT_EQ(1, 1);
-}
-
-// A test case whose name starts with DISABLED_.
-// Should not run.
-TEST(DISABLED_TestCase, TestShouldNotRun) {
-  FAIL() << "Unexpected failure: Test in disabled test case should not be run.";
-}
-
-// A test case and test whose names start with DISABLED_.
-// Should not run.
-TEST(DISABLED_TestCase, DISABLED_TestShouldNotRun) {
-  FAIL() << "Unexpected failure: Test in disabled test case should not be run.";
-}
-
-// Check that when all tests in a test case are disabled, SetupTestCase() and
-// TearDownTestCase() are not called.
-class DisabledTestsTest : public Test {
- protected:
-  static void SetUpTestCase() {
-    FAIL() << "Unexpected failure: All tests disabled in test case. "
-              "SetupTestCase() should not be called.";
-  }
-
-  static void TearDownTestCase() {
-    FAIL() << "Unexpected failure: All tests disabled in test case. "
-              "TearDownTestCase() should not be called.";
-  }
-};
-
-TEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_1) {
-  FAIL() << "Unexpected failure: Disabled test should not be run.";
-}
-
-TEST_F(DisabledTestsTest, DISABLED_TestShouldNotRun_2) {
-  FAIL() << "Unexpected failure: Disabled test should not be run.";
-}
-
-// Tests that disabled typed tests aren't run.
-
-#if GTEST_HAS_TYPED_TEST
-
-template <typename T>
-class TypedTest : public Test {
-};
-
-typedef testing::Types<int, double> NumericTypes;
-TYPED_TEST_CASE(TypedTest, NumericTypes);
-
-TYPED_TEST(TypedTest, DISABLED_ShouldNotRun) {
-  FAIL() << "Unexpected failure: Disabled typed test should not run.";
-}
-
-template <typename T>
-class DISABLED_TypedTest : public Test {
-};
-
-TYPED_TEST_CASE(DISABLED_TypedTest, NumericTypes);
-
-TYPED_TEST(DISABLED_TypedTest, ShouldNotRun) {
-  FAIL() << "Unexpected failure: Disabled typed test should not run.";
-}
-
-#endif  // GTEST_HAS_TYPED_TEST
-
-// Tests that disabled type-parameterized tests aren't run.
-
-#if GTEST_HAS_TYPED_TEST_P
-
-template <typename T>
-class TypedTestP : public Test {
-};
-
-TYPED_TEST_CASE_P(TypedTestP);
-
-TYPED_TEST_P(TypedTestP, DISABLED_ShouldNotRun) {
-  FAIL() << "Unexpected failure: "
-         << "Disabled type-parameterized test should not run.";
-}
-
-REGISTER_TYPED_TEST_CASE_P(TypedTestP, DISABLED_ShouldNotRun);
-
-INSTANTIATE_TYPED_TEST_CASE_P(My, TypedTestP, NumericTypes);
-
-template <typename T>
-class DISABLED_TypedTestP : public Test {
-};
-
-TYPED_TEST_CASE_P(DISABLED_TypedTestP);
-
-TYPED_TEST_P(DISABLED_TypedTestP, ShouldNotRun) {
-  FAIL() << "Unexpected failure: "
-         << "Disabled type-parameterized test should not run.";
-}
-
-REGISTER_TYPED_TEST_CASE_P(DISABLED_TypedTestP, ShouldNotRun);
-
-INSTANTIATE_TYPED_TEST_CASE_P(My, DISABLED_TypedTestP, NumericTypes);
-
-#endif  // GTEST_HAS_TYPED_TEST_P
-
-// Tests that assertion macros evaluate their arguments exactly once.
-
-class SingleEvaluationTest : public Test {
- public:  // Must be public and not protected due to a bug in g++ 3.4.2.
-  // This helper function is needed by the FailedASSERT_STREQ test
-  // below.  It's public to work around C++Builder's bug with scoping local
-  // classes.
-  static void CompareAndIncrementCharPtrs() {
-    ASSERT_STREQ(p1_++, p2_++);
-  }
-
-  // This helper function is needed by the FailedASSERT_NE test below.  It's
-  // public to work around C++Builder's bug with scoping local classes.
-  static void CompareAndIncrementInts() {
-    ASSERT_NE(a_++, b_++);
-  }
-
- protected:
-  SingleEvaluationTest() {
-    p1_ = s1_;
-    p2_ = s2_;
-    a_ = 0;
-    b_ = 0;
-  }
-
-  static const char* const s1_;
-  static const char* const s2_;
-  static const char* p1_;
-  static const char* p2_;
-
-  static int a_;
-  static int b_;
-};
-
-const char* const SingleEvaluationTest::s1_ = "01234";
-const char* const SingleEvaluationTest::s2_ = "abcde";
-const char* SingleEvaluationTest::p1_;
-const char* SingleEvaluationTest::p2_;
-int SingleEvaluationTest::a_;
-int SingleEvaluationTest::b_;
-
-// Tests that when ASSERT_STREQ fails, it evaluates its arguments
-// exactly once.
-TEST_F(SingleEvaluationTest, FailedASSERT_STREQ) {
-  EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementCharPtrs(),
-                       "p2_++");
-  EXPECT_EQ(s1_ + 1, p1_);
-  EXPECT_EQ(s2_ + 1, p2_);
-}
-
-// Tests that string assertion arguments are evaluated exactly once.
-TEST_F(SingleEvaluationTest, ASSERT_STR) {
-  // successful EXPECT_STRNE
-  EXPECT_STRNE(p1_++, p2_++);
-  EXPECT_EQ(s1_ + 1, p1_);
-  EXPECT_EQ(s2_ + 1, p2_);
-
-  // failed EXPECT_STRCASEEQ
-  EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ(p1_++, p2_++),
-                          "ignoring case");
-  EXPECT_EQ(s1_ + 2, p1_);
-  EXPECT_EQ(s2_ + 2, p2_);
-}
-
-// Tests that when ASSERT_NE fails, it evaluates its arguments exactly
-// once.
-TEST_F(SingleEvaluationTest, FailedASSERT_NE) {
-  EXPECT_FATAL_FAILURE(SingleEvaluationTest::CompareAndIncrementInts(),
-                       "(a_++) != (b_++)");
-  EXPECT_EQ(1, a_);
-  EXPECT_EQ(1, b_);
-}
-
-// Tests that assertion arguments are evaluated exactly once.
-TEST_F(SingleEvaluationTest, OtherCases) {
-  // successful EXPECT_TRUE
-  EXPECT_TRUE(0 == a_++);  // NOLINT
-  EXPECT_EQ(1, a_);
-
-  // failed EXPECT_TRUE
-  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(-1 == a_++), "-1 == a_++");
-  EXPECT_EQ(2, a_);
-
-  // successful EXPECT_GT
-  EXPECT_GT(a_++, b_++);
-  EXPECT_EQ(3, a_);
-  EXPECT_EQ(1, b_);
-
-  // failed EXPECT_LT
-  EXPECT_NONFATAL_FAILURE(EXPECT_LT(a_++, b_++), "(a_++) < (b_++)");
-  EXPECT_EQ(4, a_);
-  EXPECT_EQ(2, b_);
-
-  // successful ASSERT_TRUE
-  ASSERT_TRUE(0 < a_++);  // NOLINT
-  EXPECT_EQ(5, a_);
-
-  // successful ASSERT_GT
-  ASSERT_GT(a_++, b_++);
-  EXPECT_EQ(6, a_);
-  EXPECT_EQ(3, b_);
-}
-
-#if GTEST_HAS_EXCEPTIONS
-
-void ThrowAnInteger() {
-  throw 1;
-}
-
-// Tests that assertion arguments are evaluated exactly once.
-TEST_F(SingleEvaluationTest, ExceptionTests) {
-  // successful EXPECT_THROW
-  EXPECT_THROW({  // NOLINT
-    a_++;
-    ThrowAnInteger();
-  }, int);
-  EXPECT_EQ(1, a_);
-
-  // failed EXPECT_THROW, throws different
-  EXPECT_NONFATAL_FAILURE(EXPECT_THROW({  // NOLINT
-    a_++;
-    ThrowAnInteger();
-  }, bool), "throws a different type");
-  EXPECT_EQ(2, a_);
-
-  // failed EXPECT_THROW, throws nothing
-  EXPECT_NONFATAL_FAILURE(EXPECT_THROW(a_++, bool), "throws nothing");
-  EXPECT_EQ(3, a_);
-
-  // successful EXPECT_NO_THROW
-  EXPECT_NO_THROW(a_++);
-  EXPECT_EQ(4, a_);
-
-  // failed EXPECT_NO_THROW
-  EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW({  // NOLINT
-    a_++;
-    ThrowAnInteger();
-  }), "it throws");
-  EXPECT_EQ(5, a_);
-
-  // successful EXPECT_ANY_THROW
-  EXPECT_ANY_THROW({  // NOLINT
-    a_++;
-    ThrowAnInteger();
-  });
-  EXPECT_EQ(6, a_);
-
-  // failed EXPECT_ANY_THROW
-  EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(a_++), "it doesn't");
-  EXPECT_EQ(7, a_);
-}
-
-#endif  // GTEST_HAS_EXCEPTIONS
-
-// Tests {ASSERT|EXPECT}_NO_FATAL_FAILURE.
-class NoFatalFailureTest : public Test {
- protected:
-  void Succeeds() {}
-  void FailsNonFatal() {
-    ADD_FAILURE() << "some non-fatal failure";
-  }
-  void Fails() {
-    FAIL() << "some fatal failure";
-  }
-
-  void DoAssertNoFatalFailureOnFails() {
-    ASSERT_NO_FATAL_FAILURE(Fails());
-    ADD_FAILURE() << "shold not reach here.";
-  }
-
-  void DoExpectNoFatalFailureOnFails() {
-    EXPECT_NO_FATAL_FAILURE(Fails());
-    ADD_FAILURE() << "other failure";
-  }
-};
-
-TEST_F(NoFatalFailureTest, NoFailure) {
-  EXPECT_NO_FATAL_FAILURE(Succeeds());
-  ASSERT_NO_FATAL_FAILURE(Succeeds());
-}
-
-TEST_F(NoFatalFailureTest, NonFatalIsNoFailure) {
-  EXPECT_NONFATAL_FAILURE(
-      EXPECT_NO_FATAL_FAILURE(FailsNonFatal()),
-      "some non-fatal failure");
-  EXPECT_NONFATAL_FAILURE(
-      ASSERT_NO_FATAL_FAILURE(FailsNonFatal()),
-      "some non-fatal failure");
-}
-
-TEST_F(NoFatalFailureTest, AssertNoFatalFailureOnFatalFailure) {
-  TestPartResultArray gtest_failures;
-  {
-    ScopedFakeTestPartResultReporter gtest_reporter(&gtest_failures);
-    DoAssertNoFatalFailureOnFails();
-  }
-  ASSERT_EQ(2, gtest_failures.size());
-  EXPECT_EQ(TestPartResult::kFatalFailure,
-            gtest_failures.GetTestPartResult(0).type());
-  EXPECT_EQ(TestPartResult::kFatalFailure,
-            gtest_failures.GetTestPartResult(1).type());
-  EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure",
-                      gtest_failures.GetTestPartResult(0).message());
-  EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does",
-                      gtest_failures.GetTestPartResult(1).message());
-}
-
-TEST_F(NoFatalFailureTest, ExpectNoFatalFailureOnFatalFailure) {
-  TestPartResultArray gtest_failures;
-  {
-    ScopedFakeTestPartResultReporter gtest_reporter(&gtest_failures);
-    DoExpectNoFatalFailureOnFails();
-  }
-  ASSERT_EQ(3, gtest_failures.size());
-  EXPECT_EQ(TestPartResult::kFatalFailure,
-            gtest_failures.GetTestPartResult(0).type());
-  EXPECT_EQ(TestPartResult::kNonFatalFailure,
-            gtest_failures.GetTestPartResult(1).type());
-  EXPECT_EQ(TestPartResult::kNonFatalFailure,
-            gtest_failures.GetTestPartResult(2).type());
-  EXPECT_PRED_FORMAT2(testing::IsSubstring, "some fatal failure",
-                      gtest_failures.GetTestPartResult(0).message());
-  EXPECT_PRED_FORMAT2(testing::IsSubstring, "it does",
-                      gtest_failures.GetTestPartResult(1).message());
-  EXPECT_PRED_FORMAT2(testing::IsSubstring, "other failure",
-                      gtest_failures.GetTestPartResult(2).message());
-}
-
-TEST_F(NoFatalFailureTest, MessageIsStreamable) {
-  TestPartResultArray gtest_failures;
-  {
-    ScopedFakeTestPartResultReporter gtest_reporter(&gtest_failures);
-    EXPECT_NO_FATAL_FAILURE(FAIL() << "foo") << "my message";
-  }
-  ASSERT_EQ(2, gtest_failures.size());
-  EXPECT_EQ(TestPartResult::kNonFatalFailure,
-            gtest_failures.GetTestPartResult(0).type());
-  EXPECT_EQ(TestPartResult::kNonFatalFailure,
-            gtest_failures.GetTestPartResult(1).type());
-  EXPECT_PRED_FORMAT2(testing::IsSubstring, "foo",
-                      gtest_failures.GetTestPartResult(0).message());
-  EXPECT_PRED_FORMAT2(testing::IsSubstring, "my message",
-                      gtest_failures.GetTestPartResult(1).message());
-}
-
-// Tests non-string assertions.
-
-// Tests EqFailure(), used for implementing *EQ* assertions.
-TEST(AssertionTest, EqFailure) {
-  const String foo_val("5"), bar_val("6");
-  const String msg1(
-      EqFailure("foo", "bar", foo_val, bar_val, false)
-      .failure_message());
-  EXPECT_STREQ(
-      "Value of: bar\n"
-      "  Actual: 6\n"
-      "Expected: foo\n"
-      "Which is: 5",
-      msg1.c_str());
-
-  const String msg2(
-      EqFailure("foo", "6", foo_val, bar_val, false)
-      .failure_message());
-  EXPECT_STREQ(
-      "Value of: 6\n"
-      "Expected: foo\n"
-      "Which is: 5",
-      msg2.c_str());
-
-  const String msg3(
-      EqFailure("5", "bar", foo_val, bar_val, false)
-      .failure_message());
-  EXPECT_STREQ(
-      "Value of: bar\n"
-      "  Actual: 6\n"
-      "Expected: 5",
-      msg3.c_str());
-
-  const String msg4(
-      EqFailure("5", "6", foo_val, bar_val, false).failure_message());
-  EXPECT_STREQ(
-      "Value of: 6\n"
-      "Expected: 5",
-      msg4.c_str());
-
-  const String msg5(
-      EqFailure("foo", "bar",
-                String("\"x\""), String("\"y\""),
-                true).failure_message());
-  EXPECT_STREQ(
-      "Value of: bar\n"
-      "  Actual: \"y\"\n"
-      "Expected: foo (ignoring case)\n"
-      "Which is: \"x\"",
-      msg5.c_str());
-}
-
-// Tests AppendUserMessage(), used for implementing the *EQ* macros.
-TEST(AssertionTest, AppendUserMessage) {
-  const String foo("foo");
-
-  Message msg;
-  EXPECT_STREQ("foo",
-               AppendUserMessage(foo, msg).c_str());
-
-  msg << "bar";
-  EXPECT_STREQ("foo\nbar",
-               AppendUserMessage(foo, msg).c_str());
-}
-
-#ifdef __BORLANDC__
-// Silences warnings: "Condition is always true", "Unreachable code"
-# pragma option push -w-ccc -w-rch
-#endif
-
-// Tests ASSERT_TRUE.
-TEST(AssertionTest, ASSERT_TRUE) {
-  ASSERT_TRUE(2 > 1);  // NOLINT
-  EXPECT_FATAL_FAILURE(ASSERT_TRUE(2 < 1),
-                       "2 < 1");
-}
-
-// Tests ASSERT_TRUE(predicate) for predicates returning AssertionResult.
-TEST(AssertionTest, AssertTrueWithAssertionResult) {
-  ASSERT_TRUE(ResultIsEven(2));
-#ifndef __BORLANDC__
-  // ICE's in C++Builder.
-  EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEven(3)),
-                       "Value of: ResultIsEven(3)\n"
-                       "  Actual: false (3 is odd)\n"
-                       "Expected: true");
-#endif
-  ASSERT_TRUE(ResultIsEvenNoExplanation(2));
-  EXPECT_FATAL_FAILURE(ASSERT_TRUE(ResultIsEvenNoExplanation(3)),
-                       "Value of: ResultIsEvenNoExplanation(3)\n"
-                       "  Actual: false (3 is odd)\n"
-                       "Expected: true");
-}
-
-// Tests ASSERT_FALSE.
-TEST(AssertionTest, ASSERT_FALSE) {
-  ASSERT_FALSE(2 < 1);  // NOLINT
-  EXPECT_FATAL_FAILURE(ASSERT_FALSE(2 > 1),
-                       "Value of: 2 > 1\n"
-                       "  Actual: true\n"
-                       "Expected: false");
-}
-
-// Tests ASSERT_FALSE(predicate) for predicates returning AssertionResult.
-TEST(AssertionTest, AssertFalseWithAssertionResult) {
-  ASSERT_FALSE(ResultIsEven(3));
-#ifndef __BORLANDC__
-  // ICE's in C++Builder.
-  EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEven(2)),
-                       "Value of: ResultIsEven(2)\n"
-                       "  Actual: true (2 is even)\n"
-                       "Expected: false");
-#endif
-  ASSERT_FALSE(ResultIsEvenNoExplanation(3));
-  EXPECT_FATAL_FAILURE(ASSERT_FALSE(ResultIsEvenNoExplanation(2)),
-                       "Value of: ResultIsEvenNoExplanation(2)\n"
-                       "  Actual: true\n"
-                       "Expected: false");
-}
-
-#ifdef __BORLANDC__
-// Restores warnings after previous "#pragma option push" supressed them
-# pragma option pop
-#endif
-
-// Tests using ASSERT_EQ on double values.  The purpose is to make
-// sure that the specialization we did for integer and anonymous enums
-// isn't used for double arguments.
-TEST(ExpectTest, ASSERT_EQ_Double) {
-  // A success.
-  ASSERT_EQ(5.6, 5.6);
-
-  // A failure.
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(5.1, 5.2),
-                       "5.1");
-}
-
-// Tests ASSERT_EQ.
-TEST(AssertionTest, ASSERT_EQ) {
-  ASSERT_EQ(5, 2 + 3);
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(5, 2*3),
-                       "Value of: 2*3\n"
-                       "  Actual: 6\n"
-                       "Expected: 5");
-}
-
-// Tests ASSERT_EQ(NULL, pointer).
-#if GTEST_CAN_COMPARE_NULL
-TEST(AssertionTest, ASSERT_EQ_NULL) {
-  // A success.
-  const char* p = NULL;
-  // Some older GCC versions may issue a spurious waring in this or the next
-  // assertion statement. This warning should not be suppressed with
-  // static_cast since the test verifies the ability to use bare NULL as the
-  // expected parameter to the macro.
-  ASSERT_EQ(NULL, p);
-
-  // A failure.
-  static int n = 0;
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(NULL, &n),
-                       "Value of: &n\n");
-}
-#endif  // GTEST_CAN_COMPARE_NULL
-
-// Tests ASSERT_EQ(0, non_pointer).  Since the literal 0 can be
-// treated as a null pointer by the compiler, we need to make sure
-// that ASSERT_EQ(0, non_pointer) isn't interpreted by Google Test as
-// ASSERT_EQ(static_cast<void*>(NULL), non_pointer).
-TEST(ExpectTest, ASSERT_EQ_0) {
-  int n = 0;
-
-  // A success.
-  ASSERT_EQ(0, n);
-
-  // A failure.
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(0, 5.6),
-                       "Expected: 0");
-}
-
-// Tests ASSERT_NE.
-TEST(AssertionTest, ASSERT_NE) {
-  ASSERT_NE(6, 7);
-  EXPECT_FATAL_FAILURE(ASSERT_NE('a', 'a'),
-                       "Expected: ('a') != ('a'), "
-                       "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)");
-}
-
-// Tests ASSERT_LE.
-TEST(AssertionTest, ASSERT_LE) {
-  ASSERT_LE(2, 3);
-  ASSERT_LE(2, 2);
-  EXPECT_FATAL_FAILURE(ASSERT_LE(2, 0),
-                       "Expected: (2) <= (0), actual: 2 vs 0");
-}
-
-// Tests ASSERT_LT.
-TEST(AssertionTest, ASSERT_LT) {
-  ASSERT_LT(2, 3);
-  EXPECT_FATAL_FAILURE(ASSERT_LT(2, 2),
-                       "Expected: (2) < (2), actual: 2 vs 2");
-}
-
-// Tests ASSERT_GE.
-TEST(AssertionTest, ASSERT_GE) {
-  ASSERT_GE(2, 1);
-  ASSERT_GE(2, 2);
-  EXPECT_FATAL_FAILURE(ASSERT_GE(2, 3),
-                       "Expected: (2) >= (3), actual: 2 vs 3");
-}
-
-// Tests ASSERT_GT.
-TEST(AssertionTest, ASSERT_GT) {
-  ASSERT_GT(2, 1);
-  EXPECT_FATAL_FAILURE(ASSERT_GT(2, 2),
-                       "Expected: (2) > (2), actual: 2 vs 2");
-}
-
-#if GTEST_HAS_EXCEPTIONS
-
-void ThrowNothing() {}
-
-// Tests ASSERT_THROW.
-TEST(AssertionTest, ASSERT_THROW) {
-  ASSERT_THROW(ThrowAnInteger(), int);
-
-# ifndef __BORLANDC__
-
-  // ICE's in C++Builder 2007 and 2009.
-  EXPECT_FATAL_FAILURE(
-      ASSERT_THROW(ThrowAnInteger(), bool),
-      "Expected: ThrowAnInteger() throws an exception of type bool.\n"
-      "  Actual: it throws a different type.");
-# endif
-
-  EXPECT_FATAL_FAILURE(
-      ASSERT_THROW(ThrowNothing(), bool),
-      "Expected: ThrowNothing() throws an exception of type bool.\n"
-      "  Actual: it throws nothing.");
-}
-
-// Tests ASSERT_NO_THROW.
-TEST(AssertionTest, ASSERT_NO_THROW) {
-  ASSERT_NO_THROW(ThrowNothing());
-  EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()),
-                       "Expected: ThrowAnInteger() doesn't throw an exception."
-                       "\n  Actual: it throws.");
-}
-
-// Tests ASSERT_ANY_THROW.
-TEST(AssertionTest, ASSERT_ANY_THROW) {
-  ASSERT_ANY_THROW(ThrowAnInteger());
-  EXPECT_FATAL_FAILURE(
-      ASSERT_ANY_THROW(ThrowNothing()),
-      "Expected: ThrowNothing() throws an exception.\n"
-      "  Actual: it doesn't.");
-}
-
-#endif  // GTEST_HAS_EXCEPTIONS
-
-// Makes sure we deal with the precedence of <<.  This test should
-// compile.
-TEST(AssertionTest, AssertPrecedence) {
-  ASSERT_EQ(1 < 2, true);
-  bool false_value = false;
-  ASSERT_EQ(true && false_value, false);
-}
-
-// A subroutine used by the following test.
-void TestEq1(int x) {
-  ASSERT_EQ(1, x);
-}
-
-// Tests calling a test subroutine that's not part of a fixture.
-TEST(AssertionTest, NonFixtureSubroutine) {
-  EXPECT_FATAL_FAILURE(TestEq1(2),
-                       "Value of: x");
-}
-
-// An uncopyable class.
-class Uncopyable {
- public:
-  explicit Uncopyable(int a_value) : value_(a_value) {}
-
-  int value() const { return value_; }
-  bool operator==(const Uncopyable& rhs) const {
-    return value() == rhs.value();
-  }
- private:
-  // This constructor deliberately has no implementation, as we don't
-  // want this class to be copyable.
-  Uncopyable(const Uncopyable&);  // NOLINT
-
-  int value_;
-};
-
-::std::ostream& operator<<(::std::ostream& os, const Uncopyable& value) {
-  return os << value.value();
-}
-
-
-bool IsPositiveUncopyable(const Uncopyable& x) {
-  return x.value() > 0;
-}
-
-// A subroutine used by the following test.
-void TestAssertNonPositive() {
-  Uncopyable y(-1);
-  ASSERT_PRED1(IsPositiveUncopyable, y);
-}
-// A subroutine used by the following test.
-void TestAssertEqualsUncopyable() {
-  Uncopyable x(5);
-  Uncopyable y(-1);
-  ASSERT_EQ(x, y);
-}
-
-// Tests that uncopyable objects can be used in assertions.
-TEST(AssertionTest, AssertWorksWithUncopyableObject) {
-  Uncopyable x(5);
-  ASSERT_PRED1(IsPositiveUncopyable, x);
-  ASSERT_EQ(x, x);
-  EXPECT_FATAL_FAILURE(TestAssertNonPositive(),
-    "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1");
-  EXPECT_FATAL_FAILURE(TestAssertEqualsUncopyable(),
-    "Value of: y\n  Actual: -1\nExpected: x\nWhich is: 5");
-}
-
-// Tests that uncopyable objects can be used in expects.
-TEST(AssertionTest, ExpectWorksWithUncopyableObject) {
-  Uncopyable x(5);
-  EXPECT_PRED1(IsPositiveUncopyable, x);
-  Uncopyable y(-1);
-  EXPECT_NONFATAL_FAILURE(EXPECT_PRED1(IsPositiveUncopyable, y),
-    "IsPositiveUncopyable(y) evaluates to false, where\ny evaluates to -1");
-  EXPECT_EQ(x, x);
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y),
-    "Value of: y\n  Actual: -1\nExpected: x\nWhich is: 5");
-}
-
-enum NamedEnum {
-  kE1 = 0,
-  kE2 = 1
-};
-
-TEST(AssertionTest, NamedEnum) {
-  EXPECT_EQ(kE1, kE1);
-  EXPECT_LT(kE1, kE2);
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Which is: 0");
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(kE1, kE2), "Actual: 1");
-}
-
-// The version of gcc used in XCode 2.2 has a bug and doesn't allow
-// anonymous enums in assertions.  Therefore the following test is not
-// done on Mac.
-// Sun Studio and HP aCC also reject this code.
-#if !GTEST_OS_MAC && !defined(__SUNPRO_CC) && !defined(__HP_aCC)
-
-// Tests using assertions with anonymous enums.
-enum {
-  kCaseA = -1,
-
-# if GTEST_OS_LINUX
-
-  // We want to test the case where the size of the anonymous enum is
-  // larger than sizeof(int), to make sure our implementation of the
-  // assertions doesn't truncate the enums.  However, MSVC
-  // (incorrectly) doesn't allow an enum value to exceed the range of
-  // an int, so this has to be conditionally compiled.
-  //
-  // On Linux, kCaseB and kCaseA have the same value when truncated to
-  // int size.  We want to test whether this will confuse the
-  // assertions.
-  kCaseB = testing::internal::kMaxBiggestInt,
-
-# else
-
-  kCaseB = INT_MAX,
-
-# endif  // GTEST_OS_LINUX
-
-  kCaseC = 42
-};
-
-TEST(AssertionTest, AnonymousEnum) {
-# if GTEST_OS_LINUX
-
-  EXPECT_EQ(static_cast<int>(kCaseA), static_cast<int>(kCaseB));
-
-# endif  // GTEST_OS_LINUX
-
-  EXPECT_EQ(kCaseA, kCaseA);
-  EXPECT_NE(kCaseA, kCaseB);
-  EXPECT_LT(kCaseA, kCaseB);
-  EXPECT_LE(kCaseA, kCaseB);
-  EXPECT_GT(kCaseB, kCaseA);
-  EXPECT_GE(kCaseA, kCaseA);
-  EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseB),
-                          "(kCaseA) >= (kCaseB)");
-  EXPECT_NONFATAL_FAILURE(EXPECT_GE(kCaseA, kCaseC),
-                          "-1 vs 42");
-
-  ASSERT_EQ(kCaseA, kCaseA);
-  ASSERT_NE(kCaseA, kCaseB);
-  ASSERT_LT(kCaseA, kCaseB);
-  ASSERT_LE(kCaseA, kCaseB);
-  ASSERT_GT(kCaseB, kCaseA);
-  ASSERT_GE(kCaseA, kCaseA);
-
-# ifndef __BORLANDC__
-
-  // ICE's in C++Builder.
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseB),
-                       "Value of: kCaseB");
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC),
-                       "Actual: 42");
-# endif
-
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(kCaseA, kCaseC),
-                       "Which is: -1");
-}
-
-#endif  // !GTEST_OS_MAC && !defined(__SUNPRO_CC)
-
-#if GTEST_OS_WINDOWS
-
-static HRESULT UnexpectedHRESULTFailure() {
-  return E_UNEXPECTED;
-}
-
-static HRESULT OkHRESULTSuccess() {
-  return S_OK;
-}
-
-static HRESULT FalseHRESULTSuccess() {
-  return S_FALSE;
-}
-
-// HRESULT assertion tests test both zero and non-zero
-// success codes as well as failure message for each.
-//
-// Windows CE doesn't support message texts.
-TEST(HRESULTAssertionTest, EXPECT_HRESULT_SUCCEEDED) {
-  EXPECT_HRESULT_SUCCEEDED(S_OK);
-  EXPECT_HRESULT_SUCCEEDED(S_FALSE);
-
-  EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()),
-    "Expected: (UnexpectedHRESULTFailure()) succeeds.\n"
-    "  Actual: 0x8000FFFF");
-}
-
-TEST(HRESULTAssertionTest, ASSERT_HRESULT_SUCCEEDED) {
-  ASSERT_HRESULT_SUCCEEDED(S_OK);
-  ASSERT_HRESULT_SUCCEEDED(S_FALSE);
-
-  EXPECT_FATAL_FAILURE(ASSERT_HRESULT_SUCCEEDED(UnexpectedHRESULTFailure()),
-    "Expected: (UnexpectedHRESULTFailure()) succeeds.\n"
-    "  Actual: 0x8000FFFF");
-}
-
-TEST(HRESULTAssertionTest, EXPECT_HRESULT_FAILED) {
-  EXPECT_HRESULT_FAILED(E_UNEXPECTED);
-
-  EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(OkHRESULTSuccess()),
-    "Expected: (OkHRESULTSuccess()) fails.\n"
-    "  Actual: 0x00000000");
-  EXPECT_NONFATAL_FAILURE(EXPECT_HRESULT_FAILED(FalseHRESULTSuccess()),
-    "Expected: (FalseHRESULTSuccess()) fails.\n"
-    "  Actual: 0x00000001");
-}
-
-TEST(HRESULTAssertionTest, ASSERT_HRESULT_FAILED) {
-  ASSERT_HRESULT_FAILED(E_UNEXPECTED);
-
-# ifndef __BORLANDC__
-
-  // ICE's in C++Builder 2007 and 2009.
-  EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(OkHRESULTSuccess()),
-    "Expected: (OkHRESULTSuccess()) fails.\n"
-    "  Actual: 0x00000000");
-# endif
-
-  EXPECT_FATAL_FAILURE(ASSERT_HRESULT_FAILED(FalseHRESULTSuccess()),
-    "Expected: (FalseHRESULTSuccess()) fails.\n"
-    "  Actual: 0x00000001");
-}
-
-// Tests that streaming to the HRESULT macros works.
-TEST(HRESULTAssertionTest, Streaming) {
-  EXPECT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure";
-  ASSERT_HRESULT_SUCCEEDED(S_OK) << "unexpected failure";
-  EXPECT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure";
-  ASSERT_HRESULT_FAILED(E_UNEXPECTED) << "unexpected failure";
-
-  EXPECT_NONFATAL_FAILURE(
-      EXPECT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure",
-      "expected failure");
-
-# ifndef __BORLANDC__
-
-  // ICE's in C++Builder 2007 and 2009.
-  EXPECT_FATAL_FAILURE(
-      ASSERT_HRESULT_SUCCEEDED(E_UNEXPECTED) << "expected failure",
-      "expected failure");
-# endif
-
-  EXPECT_NONFATAL_FAILURE(
-      EXPECT_HRESULT_FAILED(S_OK) << "expected failure",
-      "expected failure");
-
-  EXPECT_FATAL_FAILURE(
-      ASSERT_HRESULT_FAILED(S_OK) << "expected failure",
-      "expected failure");
-}
-
-#endif  // GTEST_OS_WINDOWS
-
-#ifdef __BORLANDC__
-// Silences warnings: "Condition is always true", "Unreachable code"
-# pragma option push -w-ccc -w-rch
-#endif
-
-// Tests that the assertion macros behave like single statements.
-TEST(AssertionSyntaxTest, BasicAssertionsBehavesLikeSingleStatement) {
-  if (AlwaysFalse())
-    ASSERT_TRUE(false) << "This should never be executed; "
-                          "It's a compilation test only.";
-
-  if (AlwaysTrue())
-    EXPECT_FALSE(false);
-  else
-    ;  // NOLINT
-
-  if (AlwaysFalse())
-    ASSERT_LT(1, 3);
-
-  if (AlwaysFalse())
-    ;  // NOLINT
-  else
-    EXPECT_GT(3, 2) << "";
-}
-
-#if GTEST_HAS_EXCEPTIONS
-// Tests that the compiler will not complain about unreachable code in the
-// EXPECT_THROW/EXPECT_ANY_THROW/EXPECT_NO_THROW macros.
-TEST(ExpectThrowTest, DoesNotGenerateUnreachableCodeWarning) {
-  int n = 0;
-
-  EXPECT_THROW(throw 1, int);
-  EXPECT_NONFATAL_FAILURE(EXPECT_THROW(n++, int), "");
-  EXPECT_NONFATAL_FAILURE(EXPECT_THROW(throw 1, const char*), "");
-  EXPECT_NO_THROW(n++);
-  EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(throw 1), "");
-  EXPECT_ANY_THROW(throw 1);
-  EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(n++), "");
-}
-
-TEST(AssertionSyntaxTest, ExceptionAssertionsBehavesLikeSingleStatement) {
-  if (AlwaysFalse())
-    EXPECT_THROW(ThrowNothing(), bool);
-
-  if (AlwaysTrue())
-    EXPECT_THROW(ThrowAnInteger(), int);
-  else
-    ;  // NOLINT
-
-  if (AlwaysFalse())
-    EXPECT_NO_THROW(ThrowAnInteger());
-
-  if (AlwaysTrue())
-    EXPECT_NO_THROW(ThrowNothing());
-  else
-    ;  // NOLINT
-
-  if (AlwaysFalse())
-    EXPECT_ANY_THROW(ThrowNothing());
-
-  if (AlwaysTrue())
-    EXPECT_ANY_THROW(ThrowAnInteger());
-  else
-    ;  // NOLINT
-}
-#endif  // GTEST_HAS_EXCEPTIONS
-
-TEST(AssertionSyntaxTest, NoFatalFailureAssertionsBehavesLikeSingleStatement) {
-  if (AlwaysFalse())
-    EXPECT_NO_FATAL_FAILURE(FAIL()) << "This should never be executed. "
-                                    << "It's a compilation test only.";
-  else
-    ;  // NOLINT
-
-  if (AlwaysFalse())
-    ASSERT_NO_FATAL_FAILURE(FAIL()) << "";
-  else
-    ;  // NOLINT
-
-  if (AlwaysTrue())
-    EXPECT_NO_FATAL_FAILURE(SUCCEED());
-  else
-    ;  // NOLINT
-
-  if (AlwaysFalse())
-    ;  // NOLINT
-  else
-    ASSERT_NO_FATAL_FAILURE(SUCCEED());
-}
-
-// Tests that the assertion macros work well with switch statements.
-TEST(AssertionSyntaxTest, WorksWithSwitch) {
-  switch (0) {
-    case 1:
-      break;
-    default:
-      ASSERT_TRUE(true);
-  }
-
-  switch (0)
-    case 0:
-      EXPECT_FALSE(false) << "EXPECT_FALSE failed in switch case";
-
-  // Binary assertions are implemented using a different code path
-  // than the Boolean assertions.  Hence we test them separately.
-  switch (0) {
-    case 1:
-    default:
-      ASSERT_EQ(1, 1) << "ASSERT_EQ failed in default switch handler";
-  }
-
-  switch (0)
-    case 0:
-      EXPECT_NE(1, 2);
-}
-
-#if GTEST_HAS_EXCEPTIONS
-
-void ThrowAString() {
-    throw "String";
-}
-
-// Test that the exception assertion macros compile and work with const
-// type qualifier.
-TEST(AssertionSyntaxTest, WorksWithConst) {
-    ASSERT_THROW(ThrowAString(), const char*);
-
-    EXPECT_THROW(ThrowAString(), const char*);
-}
-
-#endif  // GTEST_HAS_EXCEPTIONS
-
-}  // namespace
-
-namespace testing {
-
-// Tests that Google Test tracks SUCCEED*.
-TEST(SuccessfulAssertionTest, SUCCEED) {
-  SUCCEED();
-  SUCCEED() << "OK";
-  EXPECT_EQ(2, GetUnitTestImpl()->current_test_result()->total_part_count());
-}
-
-// Tests that Google Test doesn't track successful EXPECT_*.
-TEST(SuccessfulAssertionTest, EXPECT) {
-  EXPECT_TRUE(true);
-  EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());
-}
-
-// Tests that Google Test doesn't track successful EXPECT_STR*.
-TEST(SuccessfulAssertionTest, EXPECT_STR) {
-  EXPECT_STREQ("", "");
-  EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());
-}
-
-// Tests that Google Test doesn't track successful ASSERT_*.
-TEST(SuccessfulAssertionTest, ASSERT) {
-  ASSERT_TRUE(true);
-  EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());
-}
-
-// Tests that Google Test doesn't track successful ASSERT_STR*.
-TEST(SuccessfulAssertionTest, ASSERT_STR) {
-  ASSERT_STREQ("", "");
-  EXPECT_EQ(0, GetUnitTestImpl()->current_test_result()->total_part_count());
-}
-
-}  // namespace testing
-
-namespace {
-
-// Tests EXPECT_TRUE.
-TEST(ExpectTest, EXPECT_TRUE) {
-  EXPECT_TRUE(2 > 1);  // NOLINT
-  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 < 1),
-                          "Value of: 2 < 1\n"
-                          "  Actual: false\n"
-                          "Expected: true");
-  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(2 > 3),
-                          "2 > 3");
-}
-
-// Tests EXPECT_TRUE(predicate) for predicates returning AssertionResult.
-TEST(ExpectTest, ExpectTrueWithAssertionResult) {
-  EXPECT_TRUE(ResultIsEven(2));
-  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEven(3)),
-                          "Value of: ResultIsEven(3)\n"
-                          "  Actual: false (3 is odd)\n"
-                          "Expected: true");
-  EXPECT_TRUE(ResultIsEvenNoExplanation(2));
-  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(ResultIsEvenNoExplanation(3)),
-                          "Value of: ResultIsEvenNoExplanation(3)\n"
-                          "  Actual: false (3 is odd)\n"
-                          "Expected: true");
-}
-
-// Tests EXPECT_FALSE.
-TEST(ExpectTest, EXPECT_FALSE) {
-  EXPECT_FALSE(2 < 1);  // NOLINT
-  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 > 1),
-                          "Value of: 2 > 1\n"
-                          "  Actual: true\n"
-                          "Expected: false");
-  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(2 < 3),
-                          "2 < 3");
-}
-
-// Tests EXPECT_FALSE(predicate) for predicates returning AssertionResult.
-TEST(ExpectTest, ExpectFalseWithAssertionResult) {
-  EXPECT_FALSE(ResultIsEven(3));
-  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEven(2)),
-                          "Value of: ResultIsEven(2)\n"
-                          "  Actual: true (2 is even)\n"
-                          "Expected: false");
-  EXPECT_FALSE(ResultIsEvenNoExplanation(3));
-  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(ResultIsEvenNoExplanation(2)),
-                          "Value of: ResultIsEvenNoExplanation(2)\n"
-                          "  Actual: true\n"
-                          "Expected: false");
-}
-
-#ifdef __BORLANDC__
-// Restores warnings after previous "#pragma option push" supressed them
-# pragma option pop
-#endif
-
-// Tests EXPECT_EQ.
-TEST(ExpectTest, EXPECT_EQ) {
-  EXPECT_EQ(5, 2 + 3);
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2*3),
-                          "Value of: 2*3\n"
-                          "  Actual: 6\n"
-                          "Expected: 5");
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5, 2 - 3),
-                          "2 - 3");
-}
-
-// Tests using EXPECT_EQ on double values.  The purpose is to make
-// sure that the specialization we did for integer and anonymous enums
-// isn't used for double arguments.
-TEST(ExpectTest, EXPECT_EQ_Double) {
-  // A success.
-  EXPECT_EQ(5.6, 5.6);
-
-  // A failure.
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(5.1, 5.2),
-                          "5.1");
-}
-
-#if GTEST_CAN_COMPARE_NULL
-// Tests EXPECT_EQ(NULL, pointer).
-TEST(ExpectTest, EXPECT_EQ_NULL) {
-  // A success.
-  const char* p = NULL;
-  // Some older GCC versions may issue a spurious warning in this or the next
-  // assertion statement. This warning should not be suppressed with
-  // static_cast since the test verifies the ability to use bare NULL as the
-  // expected parameter to the macro.
-  EXPECT_EQ(NULL, p);
-
-  // A failure.
-  int n = 0;
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(NULL, &n),
-                          "Value of: &n\n");
-}
-#endif  // GTEST_CAN_COMPARE_NULL
-
-// Tests EXPECT_EQ(0, non_pointer).  Since the literal 0 can be
-// treated as a null pointer by the compiler, we need to make sure
-// that EXPECT_EQ(0, non_pointer) isn't interpreted by Google Test as
-// EXPECT_EQ(static_cast<void*>(NULL), non_pointer).
-TEST(ExpectTest, EXPECT_EQ_0) {
-  int n = 0;
-
-  // A success.
-  EXPECT_EQ(0, n);
-
-  // A failure.
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(0, 5.6),
-                          "Expected: 0");
-}
-
-// Tests EXPECT_NE.
-TEST(ExpectTest, EXPECT_NE) {
-  EXPECT_NE(6, 7);
-
-  EXPECT_NONFATAL_FAILURE(EXPECT_NE('a', 'a'),
-                          "Expected: ('a') != ('a'), "
-                          "actual: 'a' (97, 0x61) vs 'a' (97, 0x61)");
-  EXPECT_NONFATAL_FAILURE(EXPECT_NE(2, 2),
-                          "2");
-  char* const p0 = NULL;
-  EXPECT_NONFATAL_FAILURE(EXPECT_NE(p0, p0),
-                          "p0");
-  // Only way to get the Nokia compiler to compile the cast
-  // is to have a separate void* variable first. Putting
-  // the two casts on the same line doesn't work, neither does
-  // a direct C-style to char*.
-  void* pv1 = (void*)0x1234;  // NOLINT
-  char* const p1 = reinterpret_cast<char*>(pv1);
-  EXPECT_NONFATAL_FAILURE(EXPECT_NE(p1, p1),
-                          "p1");
-}
-
-// Tests EXPECT_LE.
-TEST(ExpectTest, EXPECT_LE) {
-  EXPECT_LE(2, 3);
-  EXPECT_LE(2, 2);
-  EXPECT_NONFATAL_FAILURE(EXPECT_LE(2, 0),
-                          "Expected: (2) <= (0), actual: 2 vs 0");
-  EXPECT_NONFATAL_FAILURE(EXPECT_LE(1.1, 0.9),
-                          "(1.1) <= (0.9)");
-}
-
-// Tests EXPECT_LT.
-TEST(ExpectTest, EXPECT_LT) {
-  EXPECT_LT(2, 3);
-  EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 2),
-                          "Expected: (2) < (2), actual: 2 vs 2");
-  EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1),
-                          "(2) < (1)");
-}
-
-// Tests EXPECT_GE.
-TEST(ExpectTest, EXPECT_GE) {
-  EXPECT_GE(2, 1);
-  EXPECT_GE(2, 2);
-  EXPECT_NONFATAL_FAILURE(EXPECT_GE(2, 3),
-                          "Expected: (2) >= (3), actual: 2 vs 3");
-  EXPECT_NONFATAL_FAILURE(EXPECT_GE(0.9, 1.1),
-                          "(0.9) >= (1.1)");
-}
-
-// Tests EXPECT_GT.
-TEST(ExpectTest, EXPECT_GT) {
-  EXPECT_GT(2, 1);
-  EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 2),
-                          "Expected: (2) > (2), actual: 2 vs 2");
-  EXPECT_NONFATAL_FAILURE(EXPECT_GT(2, 3),
-                          "(2) > (3)");
-}
-
-#if GTEST_HAS_EXCEPTIONS
-
-// Tests EXPECT_THROW.
-TEST(ExpectTest, EXPECT_THROW) {
-  EXPECT_THROW(ThrowAnInteger(), int);
-  EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool),
-                          "Expected: ThrowAnInteger() throws an exception of "
-                          "type bool.\n  Actual: it throws a different type.");
-  EXPECT_NONFATAL_FAILURE(
-      EXPECT_THROW(ThrowNothing(), bool),
-      "Expected: ThrowNothing() throws an exception of type bool.\n"
-      "  Actual: it throws nothing.");
-}
-
-// Tests EXPECT_NO_THROW.
-TEST(ExpectTest, EXPECT_NO_THROW) {
-  EXPECT_NO_THROW(ThrowNothing());
-  EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()),
-                          "Expected: ThrowAnInteger() doesn't throw an "
-                          "exception.\n  Actual: it throws.");
-}
-
-// Tests EXPECT_ANY_THROW.
-TEST(ExpectTest, EXPECT_ANY_THROW) {
-  EXPECT_ANY_THROW(ThrowAnInteger());
-  EXPECT_NONFATAL_FAILURE(
-      EXPECT_ANY_THROW(ThrowNothing()),
-      "Expected: ThrowNothing() throws an exception.\n"
-      "  Actual: it doesn't.");
-}
-
-#endif  // GTEST_HAS_EXCEPTIONS
-
-// Make sure we deal with the precedence of <<.
-TEST(ExpectTest, ExpectPrecedence) {
-  EXPECT_EQ(1 < 2, true);
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(true, true && false),
-                          "Value of: true && false");
-}
-
-
-// Tests the StreamableToString() function.
-
-// Tests using StreamableToString() on a scalar.
-TEST(StreamableToStringTest, Scalar) {
-  EXPECT_STREQ("5", StreamableToString(5).c_str());
-}
-
-// Tests using StreamableToString() on a non-char pointer.
-TEST(StreamableToStringTest, Pointer) {
-  int n = 0;
-  int* p = &n;
-  EXPECT_STRNE("(null)", StreamableToString(p).c_str());
-}
-
-// Tests using StreamableToString() on a NULL non-char pointer.
-TEST(StreamableToStringTest, NullPointer) {
-  int* p = NULL;
-  EXPECT_STREQ("(null)", StreamableToString(p).c_str());
-}
-
-// Tests using StreamableToString() on a C string.
-TEST(StreamableToStringTest, CString) {
-  EXPECT_STREQ("Foo", StreamableToString("Foo").c_str());
-}
-
-// Tests using StreamableToString() on a NULL C string.
-TEST(StreamableToStringTest, NullCString) {
-  char* p = NULL;
-  EXPECT_STREQ("(null)", StreamableToString(p).c_str());
-}
-
-// Tests using streamable values as assertion messages.
-
-// Tests using std::string as an assertion message.
-TEST(StreamableTest, string) {
-  static const std::string str(
-      "This failure message is a std::string, and is expected.");
-  EXPECT_FATAL_FAILURE(FAIL() << str,
-                       str.c_str());
-}
-
-// Tests that we can output strings containing embedded NULs.
-// Limited to Linux because we can only do this with std::string's.
-TEST(StreamableTest, stringWithEmbeddedNUL) {
-  static const char char_array_with_nul[] =
-      "Here's a NUL\0 and some more string";
-  static const std::string string_with_nul(char_array_with_nul,
-                                           sizeof(char_array_with_nul)
-                                           - 1);  // drops the trailing NUL
-  EXPECT_FATAL_FAILURE(FAIL() << string_with_nul,
-                       "Here's a NUL\\0 and some more string");
-}
-
-// Tests that we can output a NUL char.
-TEST(StreamableTest, NULChar) {
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    FAIL() << "A NUL" << '\0' << " and some more string";
-  }, "A NUL\\0 and some more string");
-}
-
-// Tests using int as an assertion message.
-TEST(StreamableTest, int) {
-  EXPECT_FATAL_FAILURE(FAIL() << 900913,
-                       "900913");
-}
-
-// Tests using NULL char pointer as an assertion message.
-//
-// In MSVC, streaming a NULL char * causes access violation.  Google Test
-// implemented a workaround (substituting "(null)" for NULL).  This
-// tests whether the workaround works.
-TEST(StreamableTest, NullCharPtr) {
-  EXPECT_FATAL_FAILURE(FAIL() << static_cast<const char*>(NULL),
-                       "(null)");
-}
-
-// Tests that basic IO manipulators (endl, ends, and flush) can be
-// streamed to testing::Message.
-TEST(StreamableTest, BasicIoManip) {
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    FAIL() << "Line 1." << std::endl
-           << "A NUL char " << std::ends << std::flush << " in line 2.";
-  }, "Line 1.\nA NUL char \\0 in line 2.");
-}
-
-// Tests the macros that haven't been covered so far.
-
-void AddFailureHelper(bool* aborted) {
-  *aborted = true;
-  ADD_FAILURE() << "Failure";
-  *aborted = false;
-}
-
-// Tests ADD_FAILURE.
-TEST(MacroTest, ADD_FAILURE) {
-  bool aborted = true;
-  EXPECT_NONFATAL_FAILURE(AddFailureHelper(&aborted),
-                          "Failure");
-  EXPECT_FALSE(aborted);
-}
-
-// Tests ADD_FAILURE_AT.
-TEST(MacroTest, ADD_FAILURE_AT) {
-  // Verifies that ADD_FAILURE_AT does generate a nonfatal failure and
-  // the failure message contains the user-streamed part.
-  EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42) << "Wrong!", "Wrong!");
-
-  // Verifies that the user-streamed part is optional.
-  EXPECT_NONFATAL_FAILURE(ADD_FAILURE_AT("foo.cc", 42), "Failed");
-
-  // Unfortunately, we cannot verify that the failure message contains
-  // the right file path and line number the same way, as
-  // EXPECT_NONFATAL_FAILURE() doesn't get to see the file path and
-  // line number.  Instead, we do that in gtest_output_test_.cc.
-}
-
-// Tests FAIL.
-TEST(MacroTest, FAIL) {
-  EXPECT_FATAL_FAILURE(FAIL(),
-                       "Failed");
-  EXPECT_FATAL_FAILURE(FAIL() << "Intentional failure.",
-                       "Intentional failure.");
-}
-
-// Tests SUCCEED
-TEST(MacroTest, SUCCEED) {
-  SUCCEED();
-  SUCCEED() << "Explicit success.";
-}
-
-
-// Tests for EXPECT_EQ() and ASSERT_EQ().
-//
-// These tests fail *intentionally*, s.t. the failure messages can be
-// generated and tested.
-//
-// We have different tests for different argument types.
-
-// Tests using bool values in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, Bool) {
-  EXPECT_EQ(true,  true);
-  EXPECT_FATAL_FAILURE({
-      bool false_value = false;
-      ASSERT_EQ(false_value, true);
-    }, "Value of: true");
-}
-
-// Tests using int values in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, Int) {
-  ASSERT_EQ(32, 32);
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(32, 33),
-                          "33");
-}
-
-// Tests using time_t values in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, Time_T) {
-  EXPECT_EQ(static_cast<time_t>(0),
-            static_cast<time_t>(0));
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<time_t>(0),
-                                 static_cast<time_t>(1234)),
-                       "1234");
-}
-
-// Tests using char values in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, Char) {
-  ASSERT_EQ('z', 'z');
-  const char ch = 'b';
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ('\0', ch),
-                          "ch");
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ('a', ch),
-                          "ch");
-}
-
-// Tests using wchar_t values in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, WideChar) {
-  EXPECT_EQ(L'b', L'b');
-
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'\0', L'x'),
-                          "Value of: L'x'\n"
-                          "  Actual: L'x' (120, 0x78)\n"
-                          "Expected: L'\0'\n"
-                          "Which is: L'\0' (0, 0x0)");
-
-  static wchar_t wchar;
-  wchar = L'b';
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(L'a', wchar),
-                          "wchar");
-  wchar = 0x8119;
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<wchar_t>(0x8120), wchar),
-                       "Value of: wchar");
-}
-
-// Tests using ::std::string values in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, StdString) {
-  // Compares a const char* to an std::string that has identical
-  // content.
-  ASSERT_EQ("Test", ::std::string("Test"));
-
-  // Compares two identical std::strings.
-  static const ::std::string str1("A * in the middle");
-  static const ::std::string str2(str1);
-  EXPECT_EQ(str1, str2);
-
-  // Compares a const char* to an std::string that has different
-  // content
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ("Test", ::std::string("test")),
-                          "::std::string(\"test\")");
-
-  // Compares an std::string to a char* that has different content.
-  char* const p1 = const_cast<char*>("foo");
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::std::string("bar"), p1),
-                          "p1");
-
-  // Compares two std::strings that have different contents, one of
-  // which having a NUL character in the middle.  This should fail.
-  static ::std::string str3(str1);
-  str3.at(2) = '\0';
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(str1, str3),
-                       "Value of: str3\n"
-                       "  Actual: \"A \\0 in the middle\"");
-}
-
-#if GTEST_HAS_STD_WSTRING
-
-// Tests using ::std::wstring values in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, StdWideString) {
-  // Compares two identical std::wstrings.
-  const ::std::wstring wstr1(L"A * in the middle");
-  const ::std::wstring wstr2(wstr1);
-  ASSERT_EQ(wstr1, wstr2);
-
-  // Compares an std::wstring to a const wchar_t* that has identical
-  // content.
-  const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' };
-  EXPECT_EQ(::std::wstring(kTestX8119), kTestX8119);
-
-  // Compares an std::wstring to a const wchar_t* that has different
-  // content.
-  const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' };
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_EQ(::std::wstring(kTestX8119), kTestX8120);
-  }, "kTestX8120");
-
-  // Compares two std::wstrings that have different contents, one of
-  // which having a NUL character in the middle.
-  ::std::wstring wstr3(wstr1);
-  wstr3.at(2) = L'\0';
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(wstr1, wstr3),
-                          "wstr3");
-
-  // Compares a wchar_t* to an std::wstring that has different
-  // content.
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    ASSERT_EQ(const_cast<wchar_t*>(L"foo"), ::std::wstring(L"bar"));
-  }, "");
-}
-
-#endif  // GTEST_HAS_STD_WSTRING
-
-#if GTEST_HAS_GLOBAL_STRING
-// Tests using ::string values in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, GlobalString) {
-  // Compares a const char* to a ::string that has identical content.
-  EXPECT_EQ("Test", ::string("Test"));
-
-  // Compares two identical ::strings.
-  const ::string str1("A * in the middle");
-  const ::string str2(str1);
-  ASSERT_EQ(str1, str2);
-
-  // Compares a ::string to a const char* that has different content.
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(::string("Test"), "test"),
-                          "test");
-
-  // Compares two ::strings that have different contents, one of which
-  // having a NUL character in the middle.
-  ::string str3(str1);
-  str3.at(2) = '\0';
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(str1, str3),
-                          "str3");
-
-  // Compares a ::string to a char* that has different content.
-  EXPECT_FATAL_FAILURE({  // NOLINT
-    ASSERT_EQ(::string("bar"), const_cast<char*>("foo"));
-  }, "");
-}
-
-#endif  // GTEST_HAS_GLOBAL_STRING
-
-#if GTEST_HAS_GLOBAL_WSTRING
-
-// Tests using ::wstring values in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, GlobalWideString) {
-  // Compares two identical ::wstrings.
-  static const ::wstring wstr1(L"A * in the middle");
-  static const ::wstring wstr2(wstr1);
-  EXPECT_EQ(wstr1, wstr2);
-
-  // Compares a const wchar_t* to a ::wstring that has identical content.
-  const wchar_t kTestX8119[] = { 'T', 'e', 's', 't', 0x8119, '\0' };
-  ASSERT_EQ(kTestX8119, ::wstring(kTestX8119));
-
-  // Compares a const wchar_t* to a ::wstring that has different
-  // content.
-  const wchar_t kTestX8120[] = { 'T', 'e', 's', 't', 0x8120, '\0' };
-  EXPECT_NONFATAL_FAILURE({  // NOLINT
-    EXPECT_EQ(kTestX8120, ::wstring(kTestX8119));
-  }, "Test\\x8119");
-
-  // Compares a wchar_t* to a ::wstring that has different content.
-  wchar_t* const p1 = const_cast<wchar_t*>(L"foo");
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, ::wstring(L"bar")),
-                          "bar");
-
-  // Compares two ::wstrings that have different contents, one of which
-  // having a NUL character in the middle.
-  static ::wstring wstr3;
-  wstr3 = wstr1;
-  wstr3.at(2) = L'\0';
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(wstr1, wstr3),
-                       "wstr3");
-}
-
-#endif  // GTEST_HAS_GLOBAL_WSTRING
-
-// Tests using char pointers in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, CharPointer) {
-  char* const p0 = NULL;
-  // Only way to get the Nokia compiler to compile the cast
-  // is to have a separate void* variable first. Putting
-  // the two casts on the same line doesn't work, neither does
-  // a direct C-style to char*.
-  void* pv1 = (void*)0x1234;  // NOLINT
-  void* pv2 = (void*)0xABC0;  // NOLINT
-  char* const p1 = reinterpret_cast<char*>(pv1);
-  char* const p2 = reinterpret_cast<char*>(pv2);
-  ASSERT_EQ(p1, p1);
-
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2),
-                          "Value of: p2");
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2),
-                          "p2");
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(reinterpret_cast<char*>(0x1234),
-                                 reinterpret_cast<char*>(0xABC0)),
-                       "ABC0");
-}
-
-// Tests using wchar_t pointers in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, WideCharPointer) {
-  wchar_t* const p0 = NULL;
-  // Only way to get the Nokia compiler to compile the cast
-  // is to have a separate void* variable first. Putting
-  // the two casts on the same line doesn't work, neither does
-  // a direct C-style to char*.
-  void* pv1 = (void*)0x1234;  // NOLINT
-  void* pv2 = (void*)0xABC0;  // NOLINT
-  wchar_t* const p1 = reinterpret_cast<wchar_t*>(pv1);
-  wchar_t* const p2 = reinterpret_cast<wchar_t*>(pv2);
-  EXPECT_EQ(p0, p0);
-
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p0, p2),
-                          "Value of: p2");
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p1, p2),
-                          "p2");
-  void* pv3 = (void*)0x1234;  // NOLINT
-  void* pv4 = (void*)0xABC0;  // NOLINT
-  const wchar_t* p3 = reinterpret_cast<const wchar_t*>(pv3);
-  const wchar_t* p4 = reinterpret_cast<const wchar_t*>(pv4);
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(p3, p4),
-                          "p4");
-}
-
-// Tests using other types of pointers in {EXPECT|ASSERT}_EQ.
-TEST(EqAssertionTest, OtherPointer) {
-  ASSERT_EQ(static_cast<const int*>(NULL),
-            static_cast<const int*>(NULL));
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(static_cast<const int*>(NULL),
-                                 reinterpret_cast<const int*>(0x1234)),
-                       "0x1234");
-}
-
-// A class that supports binary comparison operators but not streaming.
-class UnprintableChar {
- public:
-  explicit UnprintableChar(char ch) : char_(ch) {}
-
-  bool operator==(const UnprintableChar& rhs) const {
-    return char_ == rhs.char_;
-  }
-  bool operator!=(const UnprintableChar& rhs) const {
-    return char_ != rhs.char_;
-  }
-  bool operator<(const UnprintableChar& rhs) const {
-    return char_ < rhs.char_;
-  }
-  bool operator<=(const UnprintableChar& rhs) const {
-    return char_ <= rhs.char_;
-  }
-  bool operator>(const UnprintableChar& rhs) const {
-    return char_ > rhs.char_;
-  }
-  bool operator>=(const UnprintableChar& rhs) const {
-    return char_ >= rhs.char_;
-  }
-
- private:
-  char char_;
-};
-
-// Tests that ASSERT_EQ() and friends don't require the arguments to
-// be printable.
-TEST(ComparisonAssertionTest, AcceptsUnprintableArgs) {
-  const UnprintableChar x('x'), y('y');
-  ASSERT_EQ(x, x);
-  EXPECT_NE(x, y);
-  ASSERT_LT(x, y);
-  EXPECT_LE(x, y);
-  ASSERT_GT(y, x);
-  EXPECT_GE(x, x);
-
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <78>");
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(x, y), "1-byte object <79>");
-  EXPECT_NONFATAL_FAILURE(EXPECT_LT(y, y), "1-byte object <79>");
-  EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <78>");
-  EXPECT_NONFATAL_FAILURE(EXPECT_GT(x, y), "1-byte object <79>");
-
-  // Code tested by EXPECT_FATAL_FAILURE cannot reference local
-  // variables, so we have to write UnprintableChar('x') instead of x.
-#ifndef __BORLANDC__
-  // ICE's in C++Builder.
-  EXPECT_FATAL_FAILURE(ASSERT_NE(UnprintableChar('x'), UnprintableChar('x')),
-                       "1-byte object <78>");
-  EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')),
-                       "1-byte object <78>");
-#endif
-  EXPECT_FATAL_FAILURE(ASSERT_LE(UnprintableChar('y'), UnprintableChar('x')),
-                       "1-byte object <79>");
-  EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')),
-                       "1-byte object <78>");
-  EXPECT_FATAL_FAILURE(ASSERT_GE(UnprintableChar('x'), UnprintableChar('y')),
-                       "1-byte object <79>");
-}
-
-// Tests the FRIEND_TEST macro.
-
-// This class has a private member we want to test.  We will test it
-// both in a TEST and in a TEST_F.
-class Foo {
- public:
-  Foo() {}
-
- private:
-  int Bar() const { return 1; }
-
-  // Declares the friend tests that can access the private member
-  // Bar().
-  FRIEND_TEST(FRIEND_TEST_Test, TEST);
-  FRIEND_TEST(FRIEND_TEST_Test2, TEST_F);
-};
-
-// Tests that the FRIEND_TEST declaration allows a TEST to access a
-// class's private members.  This should compile.
-TEST(FRIEND_TEST_Test, TEST) {
-  ASSERT_EQ(1, Foo().Bar());
-}
-
-// The fixture needed to test using FRIEND_TEST with TEST_F.
-class FRIEND_TEST_Test2 : public Test {
- protected:
-  Foo foo;
-};
-
-// Tests that the FRIEND_TEST declaration allows a TEST_F to access a
-// class's private members.  This should compile.
-TEST_F(FRIEND_TEST_Test2, TEST_F) {
-  ASSERT_EQ(1, foo.Bar());
-}
-
-// Tests the life cycle of Test objects.
-
-// The test fixture for testing the life cycle of Test objects.
-//
-// This class counts the number of live test objects that uses this
-// fixture.
-class TestLifeCycleTest : public Test {
- protected:
-  // Constructor.  Increments the number of test objects that uses
-  // this fixture.
-  TestLifeCycleTest() { count_++; }
-
-  // Destructor.  Decrements the number of test objects that uses this
-  // fixture.
-  ~TestLifeCycleTest() { count_--; }
-
-  // Returns the number of live test objects that uses this fixture.
-  int count() const { return count_; }
-
- private:
-  static int count_;
-};
-
-int TestLifeCycleTest::count_ = 0;
-
-// Tests the life cycle of test objects.
-TEST_F(TestLifeCycleTest, Test1) {
-  // There should be only one test object in this test case that's
-  // currently alive.
-  ASSERT_EQ(1, count());
-}
-
-// Tests the life cycle of test objects.
-TEST_F(TestLifeCycleTest, Test2) {
-  // After Test1 is done and Test2 is started, there should still be
-  // only one live test object, as the object for Test1 should've been
-  // deleted.
-  ASSERT_EQ(1, count());
-}
-
-}  // namespace
-
-// Tests that the copy constructor works when it is NOT optimized away by
-// the compiler.
-TEST(AssertionResultTest, CopyConstructorWorksWhenNotOptimied) {
-  // Checks that the copy constructor doesn't try to dereference NULL pointers
-  // in the source object.
-  AssertionResult r1 = AssertionSuccess();
-  AssertionResult r2 = r1;
-  // The following line is added to prevent the compiler from optimizing
-  // away the constructor call.
-  r1 << "abc";
-
-  AssertionResult r3 = r1;
-  EXPECT_EQ(static_cast<bool>(r3), static_cast<bool>(r1));
-  EXPECT_STREQ("abc", r1.message());
-}
-
-// Tests that AssertionSuccess and AssertionFailure construct
-// AssertionResult objects as expected.
-TEST(AssertionResultTest, ConstructionWorks) {
-  AssertionResult r1 = AssertionSuccess();
-  EXPECT_TRUE(r1);
-  EXPECT_STREQ("", r1.message());
-
-  AssertionResult r2 = AssertionSuccess() << "abc";
-  EXPECT_TRUE(r2);
-  EXPECT_STREQ("abc", r2.message());
-
-  AssertionResult r3 = AssertionFailure();
-  EXPECT_FALSE(r3);
-  EXPECT_STREQ("", r3.message());
-
-  AssertionResult r4 = AssertionFailure() << "def";
-  EXPECT_FALSE(r4);
-  EXPECT_STREQ("def", r4.message());
-
-  AssertionResult r5 = AssertionFailure(Message() << "ghi");
-  EXPECT_FALSE(r5);
-  EXPECT_STREQ("ghi", r5.message());
-}
-
-// Tests that the negation flips the predicate result but keeps the message.
-TEST(AssertionResultTest, NegationWorks) {
-  AssertionResult r1 = AssertionSuccess() << "abc";
-  EXPECT_FALSE(!r1);
-  EXPECT_STREQ("abc", (!r1).message());
-
-  AssertionResult r2 = AssertionFailure() << "def";
-  EXPECT_TRUE(!r2);
-  EXPECT_STREQ("def", (!r2).message());
-}
-
-TEST(AssertionResultTest, StreamingWorks) {
-  AssertionResult r = AssertionSuccess();
-  r << "abc" << 'd' << 0 << true;
-  EXPECT_STREQ("abcd0true", r.message());
-}
-
-TEST(AssertionResultTest, CanStreamOstreamManipulators) {
-  AssertionResult r = AssertionSuccess();
-  r << "Data" << std::endl << std::flush << std::ends << "Will be visible";
-  EXPECT_STREQ("Data\n\\0Will be visible", r.message());
-}
-
-// Tests streaming a user type whose definition and operator << are
-// both in the global namespace.
-class Base {
- public:
-  explicit Base(int an_x) : x_(an_x) {}
-  int x() const { return x_; }
- private:
-  int x_;
-};
-std::ostream& operator<<(std::ostream& os,
-                         const Base& val) {
-  return os << val.x();
-}
-std::ostream& operator<<(std::ostream& os,
-                         const Base* pointer) {
-  return os << "(" << pointer->x() << ")";
-}
-
-TEST(MessageTest, CanStreamUserTypeInGlobalNameSpace) {
-  Message msg;
-  Base a(1);
-
-  msg << a << &a;  // Uses ::operator<<.
-  EXPECT_STREQ("1(1)", msg.GetString().c_str());
-}
-
-// Tests streaming a user type whose definition and operator<< are
-// both in an unnamed namespace.
-namespace {
-class MyTypeInUnnamedNameSpace : public Base {
- public:
-  explicit MyTypeInUnnamedNameSpace(int an_x): Base(an_x) {}
-};
-std::ostream& operator<<(std::ostream& os,
-                         const MyTypeInUnnamedNameSpace& val) {
-  return os << val.x();
-}
-std::ostream& operator<<(std::ostream& os,
-                         const MyTypeInUnnamedNameSpace* pointer) {
-  return os << "(" << pointer->x() << ")";
-}
-}  // namespace
-
-TEST(MessageTest, CanStreamUserTypeInUnnamedNameSpace) {
-  Message msg;
-  MyTypeInUnnamedNameSpace a(1);
-
-  msg << a << &a;  // Uses <unnamed_namespace>::operator<<.
-  EXPECT_STREQ("1(1)", msg.GetString().c_str());
-}
-
-// Tests streaming a user type whose definition and operator<< are
-// both in a user namespace.
-namespace namespace1 {
-class MyTypeInNameSpace1 : public Base {
- public:
-  explicit MyTypeInNameSpace1(int an_x): Base(an_x) {}
-};
-std::ostream& operator<<(std::ostream& os,
-                         const MyTypeInNameSpace1& val) {
-  return os << val.x();
-}
-std::ostream& operator<<(std::ostream& os,
-                         const MyTypeInNameSpace1* pointer) {
-  return os << "(" << pointer->x() << ")";
-}
-}  // namespace namespace1
-
-TEST(MessageTest, CanStreamUserTypeInUserNameSpace) {
-  Message msg;
-  namespace1::MyTypeInNameSpace1 a(1);
-
-  msg << a << &a;  // Uses namespace1::operator<<.
-  EXPECT_STREQ("1(1)", msg.GetString().c_str());
-}
-
-// Tests streaming a user type whose definition is in a user namespace
-// but whose operator<< is in the global namespace.
-namespace namespace2 {
-class MyTypeInNameSpace2 : public ::Base {
- public:
-  explicit MyTypeInNameSpace2(int an_x): Base(an_x) {}
-};
-}  // namespace namespace2
-std::ostream& operator<<(std::ostream& os,
-                         const namespace2::MyTypeInNameSpace2& val) {
-  return os << val.x();
-}
-std::ostream& operator<<(std::ostream& os,
-                         const namespace2::MyTypeInNameSpace2* pointer) {
-  return os << "(" << pointer->x() << ")";
-}
-
-TEST(MessageTest, CanStreamUserTypeInUserNameSpaceWithStreamOperatorInGlobal) {
-  Message msg;
-  namespace2::MyTypeInNameSpace2 a(1);
-
-  msg << a << &a;  // Uses ::operator<<.
-  EXPECT_STREQ("1(1)", msg.GetString().c_str());
-}
-
-// Tests streaming NULL pointers to testing::Message.
-TEST(MessageTest, NullPointers) {
-  Message msg;
-  char* const p1 = NULL;
-  unsigned char* const p2 = NULL;
-  int* p3 = NULL;
-  double* p4 = NULL;
-  bool* p5 = NULL;
-  Message* p6 = NULL;
-
-  msg << p1 << p2 << p3 << p4 << p5 << p6;
-  ASSERT_STREQ("(null)(null)(null)(null)(null)(null)",
-               msg.GetString().c_str());
-}
-
-// Tests streaming wide strings to testing::Message.
-TEST(MessageTest, WideStrings) {
-  // Streams a NULL of type const wchar_t*.
-  const wchar_t* const_wstr = NULL;
-  EXPECT_STREQ("(null)",
-               (Message() << const_wstr).GetString().c_str());
-
-  // Streams a NULL of type wchar_t*.
-  wchar_t* wstr = NULL;
-  EXPECT_STREQ("(null)",
-               (Message() << wstr).GetString().c_str());
-
-  // Streams a non-NULL of type const wchar_t*.
-  const_wstr = L"abc\x8119";
-  EXPECT_STREQ("abc\xe8\x84\x99",
-               (Message() << const_wstr).GetString().c_str());
-
-  // Streams a non-NULL of type wchar_t*.
-  wstr = const_cast<wchar_t*>(const_wstr);
-  EXPECT_STREQ("abc\xe8\x84\x99",
-               (Message() << wstr).GetString().c_str());
-}
-
-
-// This line tests that we can define tests in the testing namespace.
-namespace testing {
-
-// Tests the TestInfo class.
-
-class TestInfoTest : public Test {
- protected:
-  static const TestInfo* GetTestInfo(const char* test_name) {
-    const TestCase* const test_case = GetUnitTestImpl()->
-        GetTestCase("TestInfoTest", "", NULL, NULL);
-
-    for (int i = 0; i < test_case->total_test_count(); ++i) {
-      const TestInfo* const test_info = test_case->GetTestInfo(i);
-      if (strcmp(test_name, test_info->name()) == 0)
-        return test_info;
-    }
-    return NULL;
-  }
-
-  static const TestResult* GetTestResult(
-      const TestInfo* test_info) {
-    return test_info->result();
-  }
-};
-
-// Tests TestInfo::test_case_name() and TestInfo::name().
-TEST_F(TestInfoTest, Names) {
-  const TestInfo* const test_info = GetTestInfo("Names");
-
-  ASSERT_STREQ("TestInfoTest", test_info->test_case_name());
-  ASSERT_STREQ("Names", test_info->name());
-}
-
-// Tests TestInfo::result().
-TEST_F(TestInfoTest, result) {
-  const TestInfo* const test_info = GetTestInfo("result");
-
-  // Initially, there is no TestPartResult for this test.
-  ASSERT_EQ(0, GetTestResult(test_info)->total_part_count());
-
-  // After the previous assertion, there is still none.
-  ASSERT_EQ(0, GetTestResult(test_info)->total_part_count());
-}
-
-// Tests setting up and tearing down a test case.
-
-class SetUpTestCaseTest : public Test {
- protected:
-  // This will be called once before the first test in this test case
-  // is run.
-  static void SetUpTestCase() {
-    printf("Setting up the test case . . .\n");
-
-    // Initializes some shared resource.  In this simple example, we
-    // just create a C string.  More complex stuff can be done if
-    // desired.
-    shared_resource_ = "123";
-
-    // Increments the number of test cases that have been set up.
-    counter_++;
-
-    // SetUpTestCase() should be called only once.
-    EXPECT_EQ(1, counter_);
-  }
-
-  // This will be called once after the last test in this test case is
-  // run.
-  static void TearDownTestCase() {
-    printf("Tearing down the test case . . .\n");
-
-    // Decrements the number of test cases that have been set up.
-    counter_--;
-
-    // TearDownTestCase() should be called only once.
-    EXPECT_EQ(0, counter_);
-
-    // Cleans up the shared resource.
-    shared_resource_ = NULL;
-  }
-
-  // This will be called before each test in this test case.
-  virtual void SetUp() {
-    // SetUpTestCase() should be called only once, so counter_ should
-    // always be 1.
-    EXPECT_EQ(1, counter_);
-  }
-
-  // Number of test cases that have been set up.
-  static int counter_;
-
-  // Some resource to be shared by all tests in this test case.
-  static const char* shared_resource_;
-};
-
-int SetUpTestCaseTest::counter_ = 0;
-const char* SetUpTestCaseTest::shared_resource_ = NULL;
-
-// A test that uses the shared resource.
-TEST_F(SetUpTestCaseTest, Test1) {
-  EXPECT_STRNE(NULL, shared_resource_);
-}
-
-// Another test that uses the shared resource.
-TEST_F(SetUpTestCaseTest, Test2) {
-  EXPECT_STREQ("123", shared_resource_);
-}
-
-// The InitGoogleTestTest test case tests testing::InitGoogleTest().
-
-// The Flags struct stores a copy of all Google Test flags.
-struct Flags {
-  // Constructs a Flags struct where each flag has its default value.
-  Flags() : also_run_disabled_tests(false),
-            break_on_failure(false),
-            catch_exceptions(false),
-            death_test_use_fork(false),
-            filter(""),
-            list_tests(false),
-            output(""),
-            print_time(true),
-            random_seed(0),
-            repeat(1),
-            shuffle(false),
-            stack_trace_depth(kMaxStackTraceDepth),
-            stream_result_to(""),
-            throw_on_failure(false) {}
-
-  // Factory methods.
-
-  // Creates a Flags struct where the gtest_also_run_disabled_tests flag has
-  // the given value.
-  static Flags AlsoRunDisabledTests(bool also_run_disabled_tests) {
-    Flags flags;
-    flags.also_run_disabled_tests = also_run_disabled_tests;
-    return flags;
-  }
-
-  // Creates a Flags struct where the gtest_break_on_failure flag has
-  // the given value.
-  static Flags BreakOnFailure(bool break_on_failure) {
-    Flags flags;
-    flags.break_on_failure = break_on_failure;
-    return flags;
-  }
-
-  // Creates a Flags struct where the gtest_catch_exceptions flag has
-  // the given value.
-  static Flags CatchExceptions(bool catch_exceptions) {
-    Flags flags;
-    flags.catch_exceptions = catch_exceptions;
-    return flags;
-  }
-
-  // Creates a Flags struct where the gtest_death_test_use_fork flag has
-  // the given value.
-  static Flags DeathTestUseFork(bool death_test_use_fork) {
-    Flags flags;
-    flags.death_test_use_fork = death_test_use_fork;
-    return flags;
-  }
-
-  // Creates a Flags struct where the gtest_filter flag has the given
-  // value.
-  static Flags Filter(const char* filter) {
-    Flags flags;
-    flags.filter = filter;
-    return flags;
-  }
-
-  // Creates a Flags struct where the gtest_list_tests flag has the
-  // given value.
-  static Flags ListTests(bool list_tests) {
-    Flags flags;
-    flags.list_tests = list_tests;
-    return flags;
-  }
-
-  // Creates a Flags struct where the gtest_output flag has the given
-  // value.
-  static Flags Output(const char* output) {
-    Flags flags;
-    flags.output = output;
-    return flags;
-  }
-
-  // Creates a Flags struct where the gtest_print_time flag has the given
-  // value.
-  static Flags PrintTime(bool print_time) {
-    Flags flags;
-    flags.print_time = print_time;
-    return flags;
-  }
-
-  // Creates a Flags struct where the gtest_random_seed flag has
-  // the given value.
-  static Flags RandomSeed(Int32 random_seed) {
-    Flags flags;
-    flags.random_seed = random_seed;
-    return flags;
-  }
-
-  // Creates a Flags struct where the gtest_repeat flag has the given
-  // value.
-  static Flags Repeat(Int32 repeat) {
-    Flags flags;
-    flags.repeat = repeat;
-    return flags;
-  }
-
-  // Creates a Flags struct where the gtest_shuffle flag has
-  // the given value.
-  static Flags Shuffle(bool shuffle) {
-    Flags flags;
-    flags.shuffle = shuffle;
-    return flags;
-  }
-
-  // Creates a Flags struct where the GTEST_FLAG(stack_trace_depth) flag has
-  // the given value.
-  static Flags StackTraceDepth(Int32 stack_trace_depth) {
-    Flags flags;
-    flags.stack_trace_depth = stack_trace_depth;
-    return flags;
-  }
-
-  // Creates a Flags struct where the GTEST_FLAG(stream_result_to) flag has
-  // the given value.
-  static Flags StreamResultTo(const char* stream_result_to) {
-    Flags flags;
-    flags.stream_result_to = stream_result_to;
-    return flags;
-  }
-
-  // Creates a Flags struct where the gtest_throw_on_failure flag has
-  // the given value.
-  static Flags ThrowOnFailure(bool throw_on_failure) {
-    Flags flags;
-    flags.throw_on_failure = throw_on_failure;
-    return flags;
-  }
-
-  // These fields store the flag values.
-  bool also_run_disabled_tests;
-  bool break_on_failure;
-  bool catch_exceptions;
-  bool death_test_use_fork;
-  const char* filter;
-  bool list_tests;
-  const char* output;
-  bool print_time;
-  Int32 random_seed;
-  Int32 repeat;
-  bool shuffle;
-  Int32 stack_trace_depth;
-  const char* stream_result_to;
-  bool throw_on_failure;
-};
-
-// Fixture for testing InitGoogleTest().
-class InitGoogleTestTest : public Test {
- protected:
-  // Clears the flags before each test.
-  virtual void SetUp() {
-    GTEST_FLAG(also_run_disabled_tests) = false;
-    GTEST_FLAG(break_on_failure) = false;
-    GTEST_FLAG(catch_exceptions) = false;
-    GTEST_FLAG(death_test_use_fork) = false;
-    GTEST_FLAG(filter) = "";
-    GTEST_FLAG(list_tests) = false;
-    GTEST_FLAG(output) = "";
-    GTEST_FLAG(print_time) = true;
-    GTEST_FLAG(random_seed) = 0;
-    GTEST_FLAG(repeat) = 1;
-    GTEST_FLAG(shuffle) = false;
-    GTEST_FLAG(stack_trace_depth) = kMaxStackTraceDepth;
-    GTEST_FLAG(stream_result_to) = "";
-    GTEST_FLAG(throw_on_failure) = false;
-  }
-
-  // Asserts that two narrow or wide string arrays are equal.
-  template <typename CharType>
-  static void AssertStringArrayEq(size_t size1, CharType** array1,
-                                  size_t size2, CharType** array2) {
-    ASSERT_EQ(size1, size2) << " Array sizes different.";
-
-    for (size_t i = 0; i != size1; i++) {
-      ASSERT_STREQ(array1[i], array2[i]) << " where i == " << i;
-    }
-  }
-
-  // Verifies that the flag values match the expected values.
-  static void CheckFlags(const Flags& expected) {
-    EXPECT_EQ(expected.also_run_disabled_tests,
-              GTEST_FLAG(also_run_disabled_tests));
-    EXPECT_EQ(expected.break_on_failure, GTEST_FLAG(break_on_failure));
-    EXPECT_EQ(expected.catch_exceptions, GTEST_FLAG(catch_exceptions));
-    EXPECT_EQ(expected.death_test_use_fork, GTEST_FLAG(death_test_use_fork));
-    EXPECT_STREQ(expected.filter, GTEST_FLAG(filter).c_str());
-    EXPECT_EQ(expected.list_tests, GTEST_FLAG(list_tests));
-    EXPECT_STREQ(expected.output, GTEST_FLAG(output).c_str());
-    EXPECT_EQ(expected.print_time, GTEST_FLAG(print_time));
-    EXPECT_EQ(expected.random_seed, GTEST_FLAG(random_seed));
-    EXPECT_EQ(expected.repeat, GTEST_FLAG(repeat));
-    EXPECT_EQ(expected.shuffle, GTEST_FLAG(shuffle));
-    EXPECT_EQ(expected.stack_trace_depth, GTEST_FLAG(stack_trace_depth));
-    EXPECT_STREQ(expected.stream_result_to,
-                 GTEST_FLAG(stream_result_to).c_str());
-    EXPECT_EQ(expected.throw_on_failure, GTEST_FLAG(throw_on_failure));
-  }
-
-  // Parses a command line (specified by argc1 and argv1), then
-  // verifies that the flag values are expected and that the
-  // recognized flags are removed from the command line.
-  template <typename CharType>
-  static void TestParsingFlags(int argc1, const CharType** argv1,
-                               int argc2, const CharType** argv2,
-                               const Flags& expected, bool should_print_help) {
-    const bool saved_help_flag = ::testing::internal::g_help_flag;
-    ::testing::internal::g_help_flag = false;
-
-#if GTEST_HAS_STREAM_REDIRECTION
-    CaptureStdout();
-#endif
-
-    // Parses the command line.
-    internal::ParseGoogleTestFlagsOnly(&argc1, const_cast<CharType**>(argv1));
-
-#if GTEST_HAS_STREAM_REDIRECTION
-    const String captured_stdout = GetCapturedStdout();
-#endif
-
-    // Verifies the flag values.
-    CheckFlags(expected);
-
-    // Verifies that the recognized flags are removed from the command
-    // line.
-    AssertStringArrayEq(argc1 + 1, argv1, argc2 + 1, argv2);
-
-    // ParseGoogleTestFlagsOnly should neither set g_help_flag nor print the
-    // help message for the flags it recognizes.
-    EXPECT_EQ(should_print_help, ::testing::internal::g_help_flag);
-
-#if GTEST_HAS_STREAM_REDIRECTION
-    const char* const expected_help_fragment =
-        "This program contains tests written using";
-    if (should_print_help) {
-      EXPECT_PRED_FORMAT2(IsSubstring, expected_help_fragment, captured_stdout);
-    } else {
-      EXPECT_PRED_FORMAT2(IsNotSubstring,
-                          expected_help_fragment, captured_stdout);
-    }
-#endif  // GTEST_HAS_STREAM_REDIRECTION
-
-    ::testing::internal::g_help_flag = saved_help_flag;
-  }
-
-  // This macro wraps TestParsingFlags s.t. the user doesn't need
-  // to specify the array sizes.
-
-#define GTEST_TEST_PARSING_FLAGS_(argv1, argv2, expected, should_print_help) \
-  TestParsingFlags(sizeof(argv1)/sizeof(*argv1) - 1, argv1, \
-                   sizeof(argv2)/sizeof(*argv2) - 1, argv2, \
-                   expected, should_print_help)
-};
-
-// Tests parsing an empty command line.
-TEST_F(InitGoogleTestTest, Empty) {
-  const char* argv[] = {
-    NULL
-  };
-
-  const char* argv2[] = {
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false);
-}
-
-// Tests parsing a command line that has no flag.
-TEST_F(InitGoogleTestTest, NoFlag) {
-  const char* argv[] = {
-    "foo.exe",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), false);
-}
-
-// Tests parsing a bad --gtest_filter flag.
-TEST_F(InitGoogleTestTest, FilterBad) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_filter",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    "--gtest_filter",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), true);
-}
-
-// Tests parsing an empty --gtest_filter flag.
-TEST_F(InitGoogleTestTest, FilterEmpty) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_filter=",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter(""), false);
-}
-
-// Tests parsing a non-empty --gtest_filter flag.
-TEST_F(InitGoogleTestTest, FilterNonEmpty) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_filter=abc",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("abc"), false);
-}
-
-// Tests parsing --gtest_break_on_failure.
-TEST_F(InitGoogleTestTest, BreakOnFailureWithoutValue) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_break_on_failure",
-    NULL
-};
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false);
-}
-
-// Tests parsing --gtest_break_on_failure=0.
-TEST_F(InitGoogleTestTest, BreakOnFailureFalse_0) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_break_on_failure=0",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false);
-}
-
-// Tests parsing --gtest_break_on_failure=f.
-TEST_F(InitGoogleTestTest, BreakOnFailureFalse_f) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_break_on_failure=f",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false);
-}
-
-// Tests parsing --gtest_break_on_failure=F.
-TEST_F(InitGoogleTestTest, BreakOnFailureFalse_F) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_break_on_failure=F",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(false), false);
-}
-
-// Tests parsing a --gtest_break_on_failure flag that has a "true"
-// definition.
-TEST_F(InitGoogleTestTest, BreakOnFailureTrue) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_break_on_failure=1",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::BreakOnFailure(true), false);
-}
-
-// Tests parsing --gtest_catch_exceptions.
-TEST_F(InitGoogleTestTest, CatchExceptions) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_catch_exceptions",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::CatchExceptions(true), false);
-}
-
-// Tests parsing --gtest_death_test_use_fork.
-TEST_F(InitGoogleTestTest, DeathTestUseFork) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_death_test_use_fork",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::DeathTestUseFork(true), false);
-}
-
-// Tests having the same flag twice with different values.  The
-// expected behavior is that the one coming last takes precedence.
-TEST_F(InitGoogleTestTest, DuplicatedFlags) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_filter=a",
-    "--gtest_filter=b",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Filter("b"), false);
-}
-
-// Tests having an unrecognized flag on the command line.
-TEST_F(InitGoogleTestTest, UnrecognizedFlag) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_break_on_failure",
-    "bar",  // Unrecognized by Google Test.
-    "--gtest_filter=b",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    "bar",
-    NULL
-  };
-
-  Flags flags;
-  flags.break_on_failure = true;
-  flags.filter = "b";
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, flags, false);
-}
-
-// Tests having a --gtest_list_tests flag
-TEST_F(InitGoogleTestTest, ListTestsFlag) {
-    const char* argv[] = {
-      "foo.exe",
-      "--gtest_list_tests",
-      NULL
-    };
-
-    const char* argv2[] = {
-      "foo.exe",
-      NULL
-    };
-
-    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false);
-}
-
-// Tests having a --gtest_list_tests flag with a "true" value
-TEST_F(InitGoogleTestTest, ListTestsTrue) {
-    const char* argv[] = {
-      "foo.exe",
-      "--gtest_list_tests=1",
-      NULL
-    };
-
-    const char* argv2[] = {
-      "foo.exe",
-      NULL
-    };
-
-    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(true), false);
-}
-
-// Tests having a --gtest_list_tests flag with a "false" value
-TEST_F(InitGoogleTestTest, ListTestsFalse) {
-    const char* argv[] = {
-      "foo.exe",
-      "--gtest_list_tests=0",
-      NULL
-    };
-
-    const char* argv2[] = {
-      "foo.exe",
-      NULL
-    };
-
-    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false);
-}
-
-// Tests parsing --gtest_list_tests=f.
-TEST_F(InitGoogleTestTest, ListTestsFalse_f) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_list_tests=f",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false);
-}
-
-// Tests parsing --gtest_list_tests=F.
-TEST_F(InitGoogleTestTest, ListTestsFalse_F) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_list_tests=F",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ListTests(false), false);
-}
-
-// Tests parsing --gtest_output (invalid).
-TEST_F(InitGoogleTestTest, OutputEmpty) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_output",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    "--gtest_output",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags(), true);
-}
-
-// Tests parsing --gtest_output=xml
-TEST_F(InitGoogleTestTest, OutputXml) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_output=xml",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml"), false);
-}
-
-// Tests parsing --gtest_output=xml:file
-TEST_F(InitGoogleTestTest, OutputXmlFile) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_output=xml:file",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Output("xml:file"), false);
-}
-
-// Tests parsing --gtest_output=xml:directory/path/
-TEST_F(InitGoogleTestTest, OutputXmlDirectory) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_output=xml:directory/path/",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2,
-                            Flags::Output("xml:directory/path/"), false);
-}
-
-// Tests having a --gtest_print_time flag
-TEST_F(InitGoogleTestTest, PrintTimeFlag) {
-    const char* argv[] = {
-      "foo.exe",
-      "--gtest_print_time",
-      NULL
-    };
-
-    const char* argv2[] = {
-      "foo.exe",
-      NULL
-    };
-
-    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false);
-}
-
-// Tests having a --gtest_print_time flag with a "true" value
-TEST_F(InitGoogleTestTest, PrintTimeTrue) {
-    const char* argv[] = {
-      "foo.exe",
-      "--gtest_print_time=1",
-      NULL
-    };
-
-    const char* argv2[] = {
-      "foo.exe",
-      NULL
-    };
-
-    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(true), false);
-}
-
-// Tests having a --gtest_print_time flag with a "false" value
-TEST_F(InitGoogleTestTest, PrintTimeFalse) {
-    const char* argv[] = {
-      "foo.exe",
-      "--gtest_print_time=0",
-      NULL
-    };
-
-    const char* argv2[] = {
-      "foo.exe",
-      NULL
-    };
-
-    GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false);
-}
-
-// Tests parsing --gtest_print_time=f.
-TEST_F(InitGoogleTestTest, PrintTimeFalse_f) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_print_time=f",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false);
-}
-
-// Tests parsing --gtest_print_time=F.
-TEST_F(InitGoogleTestTest, PrintTimeFalse_F) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_print_time=F",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::PrintTime(false), false);
-}
-
-// Tests parsing --gtest_random_seed=number
-TEST_F(InitGoogleTestTest, RandomSeed) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_random_seed=1000",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::RandomSeed(1000), false);
-}
-
-// Tests parsing --gtest_repeat=number
-TEST_F(InitGoogleTestTest, Repeat) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_repeat=1000",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Repeat(1000), false);
-}
-
-// Tests having a --gtest_also_run_disabled_tests flag
-TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFlag) {
-    const char* argv[] = {
-      "foo.exe",
-      "--gtest_also_run_disabled_tests",
-      NULL
-    };
-
-    const char* argv2[] = {
-      "foo.exe",
-      NULL
-    };
-
-    GTEST_TEST_PARSING_FLAGS_(argv, argv2,
-                              Flags::AlsoRunDisabledTests(true), false);
-}
-
-// Tests having a --gtest_also_run_disabled_tests flag with a "true" value
-TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsTrue) {
-    const char* argv[] = {
-      "foo.exe",
-      "--gtest_also_run_disabled_tests=1",
-      NULL
-    };
-
-    const char* argv2[] = {
-      "foo.exe",
-      NULL
-    };
-
-    GTEST_TEST_PARSING_FLAGS_(argv, argv2,
-                              Flags::AlsoRunDisabledTests(true), false);
-}
-
-// Tests having a --gtest_also_run_disabled_tests flag with a "false" value
-TEST_F(InitGoogleTestTest, AlsoRunDisabledTestsFalse) {
-    const char* argv[] = {
-      "foo.exe",
-      "--gtest_also_run_disabled_tests=0",
-      NULL
-    };
-
-    const char* argv2[] = {
-      "foo.exe",
-      NULL
-    };
-
-    GTEST_TEST_PARSING_FLAGS_(argv, argv2,
-                              Flags::AlsoRunDisabledTests(false), false);
-}
-
-// Tests parsing --gtest_shuffle.
-TEST_F(InitGoogleTestTest, ShuffleWithoutValue) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_shuffle",
-    NULL
-};
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false);
-}
-
-// Tests parsing --gtest_shuffle=0.
-TEST_F(InitGoogleTestTest, ShuffleFalse_0) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_shuffle=0",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(false), false);
-}
-
-// Tests parsing a --gtest_shuffle flag that has a "true"
-// definition.
-TEST_F(InitGoogleTestTest, ShuffleTrue) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_shuffle=1",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::Shuffle(true), false);
-}
-
-// Tests parsing --gtest_stack_trace_depth=number.
-TEST_F(InitGoogleTestTest, StackTraceDepth) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_stack_trace_depth=5",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::StackTraceDepth(5), false);
-}
-
-TEST_F(InitGoogleTestTest, StreamResultTo) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_stream_result_to=localhost:1234",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(
-      argv, argv2, Flags::StreamResultTo("localhost:1234"), false);
-}
-
-// Tests parsing --gtest_throw_on_failure.
-TEST_F(InitGoogleTestTest, ThrowOnFailureWithoutValue) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_throw_on_failure",
-    NULL
-};
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false);
-}
-
-// Tests parsing --gtest_throw_on_failure=0.
-TEST_F(InitGoogleTestTest, ThrowOnFailureFalse_0) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_throw_on_failure=0",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(false), false);
-}
-
-// Tests parsing a --gtest_throw_on_failure flag that has a "true"
-// definition.
-TEST_F(InitGoogleTestTest, ThrowOnFailureTrue) {
-  const char* argv[] = {
-    "foo.exe",
-    "--gtest_throw_on_failure=1",
-    NULL
-  };
-
-  const char* argv2[] = {
-    "foo.exe",
-    NULL
-  };
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, Flags::ThrowOnFailure(true), false);
-}
-
-#if GTEST_OS_WINDOWS
-// Tests parsing wide strings.
-TEST_F(InitGoogleTestTest, WideStrings) {
-  const wchar_t* argv[] = {
-    L"foo.exe",
-    L"--gtest_filter=Foo*",
-    L"--gtest_list_tests=1",
-    L"--gtest_break_on_failure",
-    L"--non_gtest_flag",
-    NULL
-  };
-
-  const wchar_t* argv2[] = {
-    L"foo.exe",
-    L"--non_gtest_flag",
-    NULL
-  };
-
-  Flags expected_flags;
-  expected_flags.break_on_failure = true;
-  expected_flags.filter = "Foo*";
-  expected_flags.list_tests = true;
-
-  GTEST_TEST_PARSING_FLAGS_(argv, argv2, expected_flags, false);
-}
-#endif  // GTEST_OS_WINDOWS
-
-// Tests current_test_info() in UnitTest.
-class CurrentTestInfoTest : public Test {
- protected:
-  // Tests that current_test_info() returns NULL before the first test in
-  // the test case is run.
-  static void SetUpTestCase() {
-    // There should be no tests running at this point.
-    const TestInfo* test_info =
-      UnitTest::GetInstance()->current_test_info();
-    EXPECT_TRUE(test_info == NULL)
-        << "There should be no tests running at this point.";
-  }
-
-  // Tests that current_test_info() returns NULL after the last test in
-  // the test case has run.
-  static void TearDownTestCase() {
-    const TestInfo* test_info =
-      UnitTest::GetInstance()->current_test_info();
-    EXPECT_TRUE(test_info == NULL)
-        << "There should be no tests running at this point.";
-  }
-};
-
-// Tests that current_test_info() returns TestInfo for currently running
-// test by checking the expected test name against the actual one.
-TEST_F(CurrentTestInfoTest, WorksForFirstTestInATestCase) {
-  const TestInfo* test_info =
-    UnitTest::GetInstance()->current_test_info();
-  ASSERT_TRUE(NULL != test_info)
-      << "There is a test running so we should have a valid TestInfo.";
-  EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name())
-      << "Expected the name of the currently running test case.";
-  EXPECT_STREQ("WorksForFirstTestInATestCase", test_info->name())
-      << "Expected the name of the currently running test.";
-}
-
-// Tests that current_test_info() returns TestInfo for currently running
-// test by checking the expected test name against the actual one.  We
-// use this test to see that the TestInfo object actually changed from
-// the previous invocation.
-TEST_F(CurrentTestInfoTest, WorksForSecondTestInATestCase) {
-  const TestInfo* test_info =
-    UnitTest::GetInstance()->current_test_info();
-  ASSERT_TRUE(NULL != test_info)
-      << "There is a test running so we should have a valid TestInfo.";
-  EXPECT_STREQ("CurrentTestInfoTest", test_info->test_case_name())
-      << "Expected the name of the currently running test case.";
-  EXPECT_STREQ("WorksForSecondTestInATestCase", test_info->name())
-      << "Expected the name of the currently running test.";
-}
-
-}  // namespace testing
-
-// These two lines test that we can define tests in a namespace that
-// has the name "testing" and is nested in another namespace.
-namespace my_namespace {
-namespace testing {
-
-// Makes sure that TEST knows to use ::testing::Test instead of
-// ::my_namespace::testing::Test.
-class Test {};
-
-// Makes sure that an assertion knows to use ::testing::Message instead of
-// ::my_namespace::testing::Message.
-class Message {};
-
-// Makes sure that an assertion knows to use
-// ::testing::AssertionResult instead of
-// ::my_namespace::testing::AssertionResult.
-class AssertionResult {};
-
-// Tests that an assertion that should succeed works as expected.
-TEST(NestedTestingNamespaceTest, Success) {
-  EXPECT_EQ(1, 1) << "This shouldn't fail.";
-}
-
-// Tests that an assertion that should fail works as expected.
-TEST(NestedTestingNamespaceTest, Failure) {
-  EXPECT_FATAL_FAILURE(FAIL() << "This failure is expected.",
-                       "This failure is expected.");
-}
-
-}  // namespace testing
-}  // namespace my_namespace
-
-// Tests that one can call superclass SetUp and TearDown methods--
-// that is, that they are not private.
-// No tests are based on this fixture; the test "passes" if it compiles
-// successfully.
-class ProtectedFixtureMethodsTest : public Test {
- protected:
-  virtual void SetUp() {
-    Test::SetUp();
-  }
-  virtual void TearDown() {
-    Test::TearDown();
-  }
-};
-
-// StreamingAssertionsTest tests the streaming versions of a representative
-// sample of assertions.
-TEST(StreamingAssertionsTest, Unconditional) {
-  SUCCEED() << "expected success";
-  EXPECT_NONFATAL_FAILURE(ADD_FAILURE() << "expected failure",
-                          "expected failure");
-  EXPECT_FATAL_FAILURE(FAIL() << "expected failure",
-                       "expected failure");
-}
-
-#ifdef __BORLANDC__
-// Silences warnings: "Condition is always true", "Unreachable code"
-# pragma option push -w-ccc -w-rch
-#endif
-
-TEST(StreamingAssertionsTest, Truth) {
-  EXPECT_TRUE(true) << "unexpected failure";
-  ASSERT_TRUE(true) << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_TRUE(false) << "expected failure",
-                          "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_TRUE(false) << "expected failure",
-                       "expected failure");
-}
-
-TEST(StreamingAssertionsTest, Truth2) {
-  EXPECT_FALSE(false) << "unexpected failure";
-  ASSERT_FALSE(false) << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_FALSE(true) << "expected failure",
-                          "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_FALSE(true) << "expected failure",
-                       "expected failure");
-}
-
-#ifdef __BORLANDC__
-// Restores warnings after previous "#pragma option push" supressed them
-# pragma option pop
-#endif
-
-TEST(StreamingAssertionsTest, IntegerEquals) {
-  EXPECT_EQ(1, 1) << "unexpected failure";
-  ASSERT_EQ(1, 1) << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_EQ(1, 2) << "expected failure",
-                          "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_EQ(1, 2) << "expected failure",
-                       "expected failure");
-}
-
-TEST(StreamingAssertionsTest, IntegerLessThan) {
-  EXPECT_LT(1, 2) << "unexpected failure";
-  ASSERT_LT(1, 2) << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_LT(2, 1) << "expected failure",
-                          "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_LT(2, 1) << "expected failure",
-                       "expected failure");
-}
-
-TEST(StreamingAssertionsTest, StringsEqual) {
-  EXPECT_STREQ("foo", "foo") << "unexpected failure";
-  ASSERT_STREQ("foo", "foo") << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_STREQ("foo", "bar") << "expected failure",
-                          "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_STREQ("foo", "bar") << "expected failure",
-                       "expected failure");
-}
-
-TEST(StreamingAssertionsTest, StringsNotEqual) {
-  EXPECT_STRNE("foo", "bar") << "unexpected failure";
-  ASSERT_STRNE("foo", "bar") << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_STRNE("foo", "foo") << "expected failure",
-                          "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_STRNE("foo", "foo") << "expected failure",
-                       "expected failure");
-}
-
-TEST(StreamingAssertionsTest, StringsEqualIgnoringCase) {
-  EXPECT_STRCASEEQ("foo", "FOO") << "unexpected failure";
-  ASSERT_STRCASEEQ("foo", "FOO") << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_STRCASEEQ("foo", "bar") << "expected failure",
-                          "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_STRCASEEQ("foo", "bar") << "expected failure",
-                       "expected failure");
-}
-
-TEST(StreamingAssertionsTest, StringNotEqualIgnoringCase) {
-  EXPECT_STRCASENE("foo", "bar") << "unexpected failure";
-  ASSERT_STRCASENE("foo", "bar") << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_STRCASENE("foo", "FOO") << "expected failure",
-                          "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_STRCASENE("bar", "BAR") << "expected failure",
-                       "expected failure");
-}
-
-TEST(StreamingAssertionsTest, FloatingPointEquals) {
-  EXPECT_FLOAT_EQ(1.0, 1.0) << "unexpected failure";
-  ASSERT_FLOAT_EQ(1.0, 1.0) << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_FLOAT_EQ(0.0, 1.0) << "expected failure",
-                          "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_FLOAT_EQ(0.0, 1.0) << "expected failure",
-                       "expected failure");
-}
-
-#if GTEST_HAS_EXCEPTIONS
-
-TEST(StreamingAssertionsTest, Throw) {
-  EXPECT_THROW(ThrowAnInteger(), int) << "unexpected failure";
-  ASSERT_THROW(ThrowAnInteger(), int) << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_THROW(ThrowAnInteger(), bool) <<
-                          "expected failure", "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_THROW(ThrowAnInteger(), bool) <<
-                       "expected failure", "expected failure");
-}
-
-TEST(StreamingAssertionsTest, NoThrow) {
-  EXPECT_NO_THROW(ThrowNothing()) << "unexpected failure";
-  ASSERT_NO_THROW(ThrowNothing()) << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_NO_THROW(ThrowAnInteger()) <<
-                          "expected failure", "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_NO_THROW(ThrowAnInteger()) <<
-                       "expected failure", "expected failure");
-}
-
-TEST(StreamingAssertionsTest, AnyThrow) {
-  EXPECT_ANY_THROW(ThrowAnInteger()) << "unexpected failure";
-  ASSERT_ANY_THROW(ThrowAnInteger()) << "unexpected failure";
-  EXPECT_NONFATAL_FAILURE(EXPECT_ANY_THROW(ThrowNothing()) <<
-                          "expected failure", "expected failure");
-  EXPECT_FATAL_FAILURE(ASSERT_ANY_THROW(ThrowNothing()) <<
-                       "expected failure", "expected failure");
-}
-
-#endif  // GTEST_HAS_EXCEPTIONS
-
-// Tests that Google Test correctly decides whether to use colors in the output.
-
-TEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsYes) {
-  GTEST_FLAG(color) = "yes";
-
-  SetEnv("TERM", "xterm");  // TERM supports colors.
-  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
-  EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.
-
-  SetEnv("TERM", "dumb");  // TERM doesn't support colors.
-  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
-  EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.
-}
-
-TEST(ColoredOutputTest, UsesColorsWhenGTestColorFlagIsAliasOfYes) {
-  SetEnv("TERM", "dumb");  // TERM doesn't support colors.
-
-  GTEST_FLAG(color) = "True";
-  EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.
-
-  GTEST_FLAG(color) = "t";
-  EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.
-
-  GTEST_FLAG(color) = "1";
-  EXPECT_TRUE(ShouldUseColor(false));  // Stdout is not a TTY.
-}
-
-TEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsNo) {
-  GTEST_FLAG(color) = "no";
-
-  SetEnv("TERM", "xterm");  // TERM supports colors.
-  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
-  EXPECT_FALSE(ShouldUseColor(false));  // Stdout is not a TTY.
-
-  SetEnv("TERM", "dumb");  // TERM doesn't support colors.
-  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
-  EXPECT_FALSE(ShouldUseColor(false));  // Stdout is not a TTY.
-}
-
-TEST(ColoredOutputTest, UsesNoColorWhenGTestColorFlagIsInvalid) {
-  SetEnv("TERM", "xterm");  // TERM supports colors.
-
-  GTEST_FLAG(color) = "F";
-  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  GTEST_FLAG(color) = "0";
-  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  GTEST_FLAG(color) = "unknown";
-  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
-}
-
-TEST(ColoredOutputTest, UsesColorsWhenStdoutIsTty) {
-  GTEST_FLAG(color) = "auto";
-
-  SetEnv("TERM", "xterm");  // TERM supports colors.
-  EXPECT_FALSE(ShouldUseColor(false));  // Stdout is not a TTY.
-  EXPECT_TRUE(ShouldUseColor(true));    // Stdout is a TTY.
-}
-
-TEST(ColoredOutputTest, UsesColorsWhenTermSupportsColors) {
-  GTEST_FLAG(color) = "auto";
-
-#if GTEST_OS_WINDOWS
-  // On Windows, we ignore the TERM variable as it's usually not set.
-
-  SetEnv("TERM", "dumb");
-  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  SetEnv("TERM", "");
-  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  SetEnv("TERM", "xterm");
-  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
-#else
-  // On non-Windows platforms, we rely on TERM to determine if the
-  // terminal supports colors.
-
-  SetEnv("TERM", "dumb");  // TERM doesn't support colors.
-  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  SetEnv("TERM", "emacs");  // TERM doesn't support colors.
-  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  SetEnv("TERM", "vt100");  // TERM doesn't support colors.
-  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  SetEnv("TERM", "xterm-mono");  // TERM doesn't support colors.
-  EXPECT_FALSE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  SetEnv("TERM", "xterm");  // TERM supports colors.
-  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  SetEnv("TERM", "xterm-color");  // TERM supports colors.
-  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  SetEnv("TERM", "xterm-256color");  // TERM supports colors.
-  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  SetEnv("TERM", "screen");  // TERM supports colors.
-  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  SetEnv("TERM", "linux");  // TERM supports colors.
-  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
-
-  SetEnv("TERM", "cygwin");  // TERM supports colors.
-  EXPECT_TRUE(ShouldUseColor(true));  // Stdout is a TTY.
-#endif  // GTEST_OS_WINDOWS
-}
-
-// Verifies that StaticAssertTypeEq works in a namespace scope.
-
-static bool dummy1 GTEST_ATTRIBUTE_UNUSED_ = StaticAssertTypeEq<bool, bool>();
-static bool dummy2 GTEST_ATTRIBUTE_UNUSED_ =
-    StaticAssertTypeEq<const int, const int>();
-
-// Verifies that StaticAssertTypeEq works in a class.
-
-template <typename T>
-class StaticAssertTypeEqTestHelper {
- public:
-  StaticAssertTypeEqTestHelper() { StaticAssertTypeEq<bool, T>(); }
-};
-
-TEST(StaticAssertTypeEqTest, WorksInClass) {
-  StaticAssertTypeEqTestHelper<bool>();
-}
-
-// Verifies that StaticAssertTypeEq works inside a function.
-
-typedef int IntAlias;
-
-TEST(StaticAssertTypeEqTest, CompilesForEqualTypes) {
-  StaticAssertTypeEq<int, IntAlias>();
-  StaticAssertTypeEq<int*, IntAlias*>();
-}
-
-TEST(GetCurrentOsStackTraceExceptTopTest, ReturnsTheStackTrace) {
-  testing::UnitTest* const unit_test = testing::UnitTest::GetInstance();
-
-  // We don't have a stack walker in Google Test yet.
-  EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 0).c_str());
-  EXPECT_STREQ("", GetCurrentOsStackTraceExceptTop(unit_test, 1).c_str());
-}
-
-TEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsNoFailure) {
-  EXPECT_FALSE(HasNonfatalFailure());
-}
-
-static void FailFatally() { FAIL(); }
-
-TEST(HasNonfatalFailureTest, ReturnsFalseWhenThereIsOnlyFatalFailure) {
-  FailFatally();
-  const bool has_nonfatal_failure = HasNonfatalFailure();
-  ClearCurrentTestPartResults();
-  EXPECT_FALSE(has_nonfatal_failure);
-}
-
-TEST(HasNonfatalFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) {
-  ADD_FAILURE();
-  const bool has_nonfatal_failure = HasNonfatalFailure();
-  ClearCurrentTestPartResults();
-  EXPECT_TRUE(has_nonfatal_failure);
-}
-
-TEST(HasNonfatalFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) {
-  FailFatally();
-  ADD_FAILURE();
-  const bool has_nonfatal_failure = HasNonfatalFailure();
-  ClearCurrentTestPartResults();
-  EXPECT_TRUE(has_nonfatal_failure);
-}
-
-// A wrapper for calling HasNonfatalFailure outside of a test body.
-static bool HasNonfatalFailureHelper() {
-  return testing::Test::HasNonfatalFailure();
-}
-
-TEST(HasNonfatalFailureTest, WorksOutsideOfTestBody) {
-  EXPECT_FALSE(HasNonfatalFailureHelper());
-}
-
-TEST(HasNonfatalFailureTest, WorksOutsideOfTestBody2) {
-  ADD_FAILURE();
-  const bool has_nonfatal_failure = HasNonfatalFailureHelper();
-  ClearCurrentTestPartResults();
-  EXPECT_TRUE(has_nonfatal_failure);
-}
-
-TEST(HasFailureTest, ReturnsFalseWhenThereIsNoFailure) {
-  EXPECT_FALSE(HasFailure());
-}
-
-TEST(HasFailureTest, ReturnsTrueWhenThereIsFatalFailure) {
-  FailFatally();
-  const bool has_failure = HasFailure();
-  ClearCurrentTestPartResults();
-  EXPECT_TRUE(has_failure);
-}
-
-TEST(HasFailureTest, ReturnsTrueWhenThereIsNonfatalFailure) {
-  ADD_FAILURE();
-  const bool has_failure = HasFailure();
-  ClearCurrentTestPartResults();
-  EXPECT_TRUE(has_failure);
-}
-
-TEST(HasFailureTest, ReturnsTrueWhenThereAreFatalAndNonfatalFailures) {
-  FailFatally();
-  ADD_FAILURE();
-  const bool has_failure = HasFailure();
-  ClearCurrentTestPartResults();
-  EXPECT_TRUE(has_failure);
-}
-
-// A wrapper for calling HasFailure outside of a test body.
-static bool HasFailureHelper() { return testing::Test::HasFailure(); }
-
-TEST(HasFailureTest, WorksOutsideOfTestBody) {
-  EXPECT_FALSE(HasFailureHelper());
-}
-
-TEST(HasFailureTest, WorksOutsideOfTestBody2) {
-  ADD_FAILURE();
-  const bool has_failure = HasFailureHelper();
-  ClearCurrentTestPartResults();
-  EXPECT_TRUE(has_failure);
-}
-
-class TestListener : public EmptyTestEventListener {
- public:
-  TestListener() : on_start_counter_(NULL), is_destroyed_(NULL) {}
-  TestListener(int* on_start_counter, bool* is_destroyed)
-      : on_start_counter_(on_start_counter),
-        is_destroyed_(is_destroyed) {}
-
-  virtual ~TestListener() {
-    if (is_destroyed_)
-      *is_destroyed_ = true;
-  }
-
- protected:
-  virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {
-    if (on_start_counter_ != NULL)
-      (*on_start_counter_)++;
-  }
-
- private:
-  int* on_start_counter_;
-  bool* is_destroyed_;
-};
-
-// Tests the constructor.
-TEST(TestEventListenersTest, ConstructionWorks) {
-  TestEventListeners listeners;
-
-  EXPECT_TRUE(TestEventListenersAccessor::GetRepeater(&listeners) != NULL);
-  EXPECT_TRUE(listeners.default_result_printer() == NULL);
-  EXPECT_TRUE(listeners.default_xml_generator() == NULL);
-}
-
-// Tests that the TestEventListeners destructor deletes all the listeners it
-// owns.
-TEST(TestEventListenersTest, DestructionWorks) {
-  bool default_result_printer_is_destroyed = false;
-  bool default_xml_printer_is_destroyed = false;
-  bool extra_listener_is_destroyed = false;
-  TestListener* default_result_printer = new TestListener(
-      NULL, &default_result_printer_is_destroyed);
-  TestListener* default_xml_printer = new TestListener(
-      NULL, &default_xml_printer_is_destroyed);
-  TestListener* extra_listener = new TestListener(
-      NULL, &extra_listener_is_destroyed);
-
-  {
-    TestEventListeners listeners;
-    TestEventListenersAccessor::SetDefaultResultPrinter(&listeners,
-                                                        default_result_printer);
-    TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners,
-                                                       default_xml_printer);
-    listeners.Append(extra_listener);
-  }
-  EXPECT_TRUE(default_result_printer_is_destroyed);
-  EXPECT_TRUE(default_xml_printer_is_destroyed);
-  EXPECT_TRUE(extra_listener_is_destroyed);
-}
-
-// Tests that a listener Append'ed to a TestEventListeners list starts
-// receiving events.
-TEST(TestEventListenersTest, Append) {
-  int on_start_counter = 0;
-  bool is_destroyed = false;
-  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
-  {
-    TestEventListeners listeners;
-    listeners.Append(listener);
-    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
-        *UnitTest::GetInstance());
-    EXPECT_EQ(1, on_start_counter);
-  }
-  EXPECT_TRUE(is_destroyed);
-}
-
-// Tests that listeners receive events in the order they were appended to
-// the list, except for *End requests, which must be received in the reverse
-// order.
-class SequenceTestingListener : public EmptyTestEventListener {
- public:
-  SequenceTestingListener(std::vector<String>* vector, const char* id)
-      : vector_(vector), id_(id) {}
-
- protected:
-  virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {
-    vector_->push_back(GetEventDescription("OnTestProgramStart"));
-  }
-
-  virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {
-    vector_->push_back(GetEventDescription("OnTestProgramEnd"));
-  }
-
-  virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,
-                                    int /*iteration*/) {
-    vector_->push_back(GetEventDescription("OnTestIterationStart"));
-  }
-
-  virtual void OnTestIterationEnd(const UnitTest& /*unit_test*/,
-                                  int /*iteration*/) {
-    vector_->push_back(GetEventDescription("OnTestIterationEnd"));
-  }
-
- private:
-  String GetEventDescription(const char* method) {
-    Message message;
-    message << id_ << "." << method;
-    return message.GetString();
-  }
-
-  std::vector<String>* vector_;
-  const char* const id_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(SequenceTestingListener);
-};
-
-TEST(EventListenerTest, AppendKeepsOrder) {
-  std::vector<String> vec;
-  TestEventListeners listeners;
-  listeners.Append(new SequenceTestingListener(&vec, "1st"));
-  listeners.Append(new SequenceTestingListener(&vec, "2nd"));
-  listeners.Append(new SequenceTestingListener(&vec, "3rd"));
-
-  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
-      *UnitTest::GetInstance());
-  ASSERT_EQ(3U, vec.size());
-  EXPECT_STREQ("1st.OnTestProgramStart", vec[0].c_str());
-  EXPECT_STREQ("2nd.OnTestProgramStart", vec[1].c_str());
-  EXPECT_STREQ("3rd.OnTestProgramStart", vec[2].c_str());
-
-  vec.clear();
-  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramEnd(
-      *UnitTest::GetInstance());
-  ASSERT_EQ(3U, vec.size());
-  EXPECT_STREQ("3rd.OnTestProgramEnd", vec[0].c_str());
-  EXPECT_STREQ("2nd.OnTestProgramEnd", vec[1].c_str());
-  EXPECT_STREQ("1st.OnTestProgramEnd", vec[2].c_str());
-
-  vec.clear();
-  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationStart(
-      *UnitTest::GetInstance(), 0);
-  ASSERT_EQ(3U, vec.size());
-  EXPECT_STREQ("1st.OnTestIterationStart", vec[0].c_str());
-  EXPECT_STREQ("2nd.OnTestIterationStart", vec[1].c_str());
-  EXPECT_STREQ("3rd.OnTestIterationStart", vec[2].c_str());
-
-  vec.clear();
-  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestIterationEnd(
-      *UnitTest::GetInstance(), 0);
-  ASSERT_EQ(3U, vec.size());
-  EXPECT_STREQ("3rd.OnTestIterationEnd", vec[0].c_str());
-  EXPECT_STREQ("2nd.OnTestIterationEnd", vec[1].c_str());
-  EXPECT_STREQ("1st.OnTestIterationEnd", vec[2].c_str());
-}
-
-// Tests that a listener removed from a TestEventListeners list stops receiving
-// events and is not deleted when the list is destroyed.
-TEST(TestEventListenersTest, Release) {
-  int on_start_counter = 0;
-  bool is_destroyed = false;
-  // Although Append passes the ownership of this object to the list,
-  // the following calls release it, and we need to delete it before the
-  // test ends.
-  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
-  {
-    TestEventListeners listeners;
-    listeners.Append(listener);
-    EXPECT_EQ(listener, listeners.Release(listener));
-    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
-        *UnitTest::GetInstance());
-    EXPECT_TRUE(listeners.Release(listener) == NULL);
-  }
-  EXPECT_EQ(0, on_start_counter);
-  EXPECT_FALSE(is_destroyed);
-  delete listener;
-}
-
-// Tests that no events are forwarded when event forwarding is disabled.
-TEST(EventListenerTest, SuppressEventForwarding) {
-  int on_start_counter = 0;
-  TestListener* listener = new TestListener(&on_start_counter, NULL);
-
-  TestEventListeners listeners;
-  listeners.Append(listener);
-  ASSERT_TRUE(TestEventListenersAccessor::EventForwardingEnabled(listeners));
-  TestEventListenersAccessor::SuppressEventForwarding(&listeners);
-  ASSERT_FALSE(TestEventListenersAccessor::EventForwardingEnabled(listeners));
-  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
-      *UnitTest::GetInstance());
-  EXPECT_EQ(0, on_start_counter);
-}
-
-// Tests that events generated by Google Test are not forwarded in
-// death test subprocesses.
-TEST(EventListenerDeathTest, EventsNotForwardedInDeathTestSubprecesses) {
-  EXPECT_DEATH_IF_SUPPORTED({
-      GTEST_CHECK_(TestEventListenersAccessor::EventForwardingEnabled(
-          *GetUnitTestImpl()->listeners())) << "expected failure";},
-      "expected failure");
-}
-
-// Tests that a listener installed via SetDefaultResultPrinter() starts
-// receiving events and is returned via default_result_printer() and that
-// the previous default_result_printer is removed from the list and deleted.
-TEST(EventListenerTest, default_result_printer) {
-  int on_start_counter = 0;
-  bool is_destroyed = false;
-  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
-
-  TestEventListeners listeners;
-  TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener);
-
-  EXPECT_EQ(listener, listeners.default_result_printer());
-
-  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
-      *UnitTest::GetInstance());
-
-  EXPECT_EQ(1, on_start_counter);
-
-  // Replacing default_result_printer with something else should remove it
-  // from the list and destroy it.
-  TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, NULL);
-
-  EXPECT_TRUE(listeners.default_result_printer() == NULL);
-  EXPECT_TRUE(is_destroyed);
-
-  // After broadcasting an event the counter is still the same, indicating
-  // the listener is not in the list anymore.
-  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
-      *UnitTest::GetInstance());
-  EXPECT_EQ(1, on_start_counter);
-}
-
-// Tests that the default_result_printer listener stops receiving events
-// when removed via Release and that is not owned by the list anymore.
-TEST(EventListenerTest, RemovingDefaultResultPrinterWorks) {
-  int on_start_counter = 0;
-  bool is_destroyed = false;
-  // Although Append passes the ownership of this object to the list,
-  // the following calls release it, and we need to delete it before the
-  // test ends.
-  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
-  {
-    TestEventListeners listeners;
-    TestEventListenersAccessor::SetDefaultResultPrinter(&listeners, listener);
-
-    EXPECT_EQ(listener, listeners.Release(listener));
-    EXPECT_TRUE(listeners.default_result_printer() == NULL);
-    EXPECT_FALSE(is_destroyed);
-
-    // Broadcasting events now should not affect default_result_printer.
-    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
-        *UnitTest::GetInstance());
-    EXPECT_EQ(0, on_start_counter);
-  }
-  // Destroying the list should not affect the listener now, too.
-  EXPECT_FALSE(is_destroyed);
-  delete listener;
-}
-
-// Tests that a listener installed via SetDefaultXmlGenerator() starts
-// receiving events and is returned via default_xml_generator() and that
-// the previous default_xml_generator is removed from the list and deleted.
-TEST(EventListenerTest, default_xml_generator) {
-  int on_start_counter = 0;
-  bool is_destroyed = false;
-  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
-
-  TestEventListeners listeners;
-  TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener);
-
-  EXPECT_EQ(listener, listeners.default_xml_generator());
-
-  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
-      *UnitTest::GetInstance());
-
-  EXPECT_EQ(1, on_start_counter);
-
-  // Replacing default_xml_generator with something else should remove it
-  // from the list and destroy it.
-  TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, NULL);
-
-  EXPECT_TRUE(listeners.default_xml_generator() == NULL);
-  EXPECT_TRUE(is_destroyed);
-
-  // After broadcasting an event the counter is still the same, indicating
-  // the listener is not in the list anymore.
-  TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
-      *UnitTest::GetInstance());
-  EXPECT_EQ(1, on_start_counter);
-}
-
-// Tests that the default_xml_generator listener stops receiving events
-// when removed via Release and that is not owned by the list anymore.
-TEST(EventListenerTest, RemovingDefaultXmlGeneratorWorks) {
-  int on_start_counter = 0;
-  bool is_destroyed = false;
-  // Although Append passes the ownership of this object to the list,
-  // the following calls release it, and we need to delete it before the
-  // test ends.
-  TestListener* listener = new TestListener(&on_start_counter, &is_destroyed);
-  {
-    TestEventListeners listeners;
-    TestEventListenersAccessor::SetDefaultXmlGenerator(&listeners, listener);
-
-    EXPECT_EQ(listener, listeners.Release(listener));
-    EXPECT_TRUE(listeners.default_xml_generator() == NULL);
-    EXPECT_FALSE(is_destroyed);
-
-    // Broadcasting events now should not affect default_xml_generator.
-    TestEventListenersAccessor::GetRepeater(&listeners)->OnTestProgramStart(
-        *UnitTest::GetInstance());
-    EXPECT_EQ(0, on_start_counter);
-  }
-  // Destroying the list should not affect the listener now, too.
-  EXPECT_FALSE(is_destroyed);
-  delete listener;
-}
-
-// Sanity tests to ensure that the alternative, verbose spellings of
-// some of the macros work.  We don't test them thoroughly as that
-// would be quite involved.  Since their implementations are
-// straightforward, and they are rarely used, we'll just rely on the
-// users to tell us when they are broken.
-GTEST_TEST(AlternativeNameTest, Works) {  // GTEST_TEST is the same as TEST.
-  GTEST_SUCCEED() << "OK";  // GTEST_SUCCEED is the same as SUCCEED.
-
-  // GTEST_FAIL is the same as FAIL.
-  EXPECT_FATAL_FAILURE(GTEST_FAIL() << "An expected failure",
-                       "An expected failure");
-
-  // GTEST_ASSERT_XY is the same as ASSERT_XY.
-
-  GTEST_ASSERT_EQ(0, 0);
-  EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(0, 1) << "An expected failure",
-                       "An expected failure");
-  EXPECT_FATAL_FAILURE(GTEST_ASSERT_EQ(1, 0) << "An expected failure",
-                       "An expected failure");
-
-  GTEST_ASSERT_NE(0, 1);
-  GTEST_ASSERT_NE(1, 0);
-  EXPECT_FATAL_FAILURE(GTEST_ASSERT_NE(0, 0) << "An expected failure",
-                       "An expected failure");
-
-  GTEST_ASSERT_LE(0, 0);
-  GTEST_ASSERT_LE(0, 1);
-  EXPECT_FATAL_FAILURE(GTEST_ASSERT_LE(1, 0) << "An expected failure",
-                       "An expected failure");
-
-  GTEST_ASSERT_LT(0, 1);
-  EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(0, 0) << "An expected failure",
-                       "An expected failure");
-  EXPECT_FATAL_FAILURE(GTEST_ASSERT_LT(1, 0) << "An expected failure",
-                       "An expected failure");
-
-  GTEST_ASSERT_GE(0, 0);
-  GTEST_ASSERT_GE(1, 0);
-  EXPECT_FATAL_FAILURE(GTEST_ASSERT_GE(0, 1) << "An expected failure",
-                       "An expected failure");
-
-  GTEST_ASSERT_GT(1, 0);
-  EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(0, 1) << "An expected failure",
-                       "An expected failure");
-  EXPECT_FATAL_FAILURE(GTEST_ASSERT_GT(1, 1) << "An expected failure",
-                       "An expected failure");
-}
-
-// Tests for internal utilities necessary for implementation of the universal
-// printing.
-// TODO(vladl at google.com): Find a better home for them.
-
-class ConversionHelperBase {};
-class ConversionHelperDerived : public ConversionHelperBase {};
-
-// Tests that IsAProtocolMessage<T>::value is a compile-time constant.
-TEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) {
-  GTEST_COMPILE_ASSERT_(IsAProtocolMessage<ProtocolMessage>::value,
-                        const_true);
-  GTEST_COMPILE_ASSERT_(!IsAProtocolMessage<int>::value, const_false);
-}
-
-// Tests that IsAProtocolMessage<T>::value is true when T is
-// proto2::Message or a sub-class of it.
-TEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAProtocolMessage) {
-  EXPECT_TRUE(IsAProtocolMessage< ::proto2::Message>::value);
-  EXPECT_TRUE(IsAProtocolMessage<ProtocolMessage>::value);
-}
-
-// Tests that IsAProtocolMessage<T>::value is false when T is neither
-// ProtocolMessage nor a sub-class of it.
-TEST(IsAProtocolMessageTest, ValueIsFalseWhenTypeIsNotAProtocolMessage) {
-  EXPECT_FALSE(IsAProtocolMessage<int>::value);
-  EXPECT_FALSE(IsAProtocolMessage<const ConversionHelperBase>::value);
-}
-
-// Tests that CompileAssertTypesEqual compiles when the type arguments are
-// equal.
-TEST(CompileAssertTypesEqual, CompilesWhenTypesAreEqual) {
-  CompileAssertTypesEqual<void, void>();
-  CompileAssertTypesEqual<int*, int*>();
-}
-
-// Tests that RemoveReference does not affect non-reference types.
-TEST(RemoveReferenceTest, DoesNotAffectNonReferenceType) {
-  CompileAssertTypesEqual<int, RemoveReference<int>::type>();
-  CompileAssertTypesEqual<const char, RemoveReference<const char>::type>();
-}
-
-// Tests that RemoveReference removes reference from reference types.
-TEST(RemoveReferenceTest, RemovesReference) {
-  CompileAssertTypesEqual<int, RemoveReference<int&>::type>();
-  CompileAssertTypesEqual<const char, RemoveReference<const char&>::type>();
-}
-
-// Tests GTEST_REMOVE_REFERENCE_.
-
-template <typename T1, typename T2>
-void TestGTestRemoveReference() {
-  CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_(T2)>();
-}
-
-TEST(RemoveReferenceTest, MacroVersion) {
-  TestGTestRemoveReference<int, int>();
-  TestGTestRemoveReference<const char, const char&>();
-}
-
-
-// Tests that RemoveConst does not affect non-const types.
-TEST(RemoveConstTest, DoesNotAffectNonConstType) {
-  CompileAssertTypesEqual<int, RemoveConst<int>::type>();
-  CompileAssertTypesEqual<char&, RemoveConst<char&>::type>();
-}
-
-// Tests that RemoveConst removes const from const types.
-TEST(RemoveConstTest, RemovesConst) {
-  CompileAssertTypesEqual<int, RemoveConst<const int>::type>();
-  CompileAssertTypesEqual<char[2], RemoveConst<const char[2]>::type>();
-  CompileAssertTypesEqual<char[2][3], RemoveConst<const char[2][3]>::type>();
-}
-
-// Tests GTEST_REMOVE_CONST_.
-
-template <typename T1, typename T2>
-void TestGTestRemoveConst() {
-  CompileAssertTypesEqual<T1, GTEST_REMOVE_CONST_(T2)>();
-}
-
-TEST(RemoveConstTest, MacroVersion) {
-  TestGTestRemoveConst<int, int>();
-  TestGTestRemoveConst<double&, double&>();
-  TestGTestRemoveConst<char, const char>();
-}
-
-// Tests GTEST_REMOVE_REFERENCE_AND_CONST_.
-
-template <typename T1, typename T2>
-void TestGTestRemoveReferenceAndConst() {
-  CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_AND_CONST_(T2)>();
-}
-
-TEST(RemoveReferenceToConstTest, Works) {
-  TestGTestRemoveReferenceAndConst<int, int>();
-  TestGTestRemoveReferenceAndConst<double, double&>();
-  TestGTestRemoveReferenceAndConst<char, const char>();
-  TestGTestRemoveReferenceAndConst<char, const char&>();
-  TestGTestRemoveReferenceAndConst<const char*, const char*>();
-}
-
-// Tests that AddReference does not affect reference types.
-TEST(AddReferenceTest, DoesNotAffectReferenceType) {
-  CompileAssertTypesEqual<int&, AddReference<int&>::type>();
-  CompileAssertTypesEqual<const char&, AddReference<const char&>::type>();
-}
-
-// Tests that AddReference adds reference to non-reference types.
-TEST(AddReferenceTest, AddsReference) {
-  CompileAssertTypesEqual<int&, AddReference<int>::type>();
-  CompileAssertTypesEqual<const char&, AddReference<const char>::type>();
-}
-
-// Tests GTEST_ADD_REFERENCE_.
-
-template <typename T1, typename T2>
-void TestGTestAddReference() {
-  CompileAssertTypesEqual<T1, GTEST_ADD_REFERENCE_(T2)>();
-}
-
-TEST(AddReferenceTest, MacroVersion) {
-  TestGTestAddReference<int&, int>();
-  TestGTestAddReference<const char&, const char&>();
-}
-
-// Tests GTEST_REFERENCE_TO_CONST_.
-
-template <typename T1, typename T2>
-void TestGTestReferenceToConst() {
-  CompileAssertTypesEqual<T1, GTEST_REFERENCE_TO_CONST_(T2)>();
-}
-
-TEST(GTestReferenceToConstTest, Works) {
-  TestGTestReferenceToConst<const char&, char>();
-  TestGTestReferenceToConst<const int&, const int>();
-  TestGTestReferenceToConst<const double&, double>();
-  TestGTestReferenceToConst<const String&, const String&>();
-}
-
-// Tests that ImplicitlyConvertible<T1, T2>::value is a compile-time constant.
-TEST(ImplicitlyConvertibleTest, ValueIsCompileTimeConstant) {
-  GTEST_COMPILE_ASSERT_((ImplicitlyConvertible<int, int>::value), const_true);
-  GTEST_COMPILE_ASSERT_((!ImplicitlyConvertible<void*, int*>::value),
-                        const_false);
-}
-
-// Tests that ImplicitlyConvertible<T1, T2>::value is true when T1 can
-// be implicitly converted to T2.
-TEST(ImplicitlyConvertibleTest, ValueIsTrueWhenConvertible) {
-  EXPECT_TRUE((ImplicitlyConvertible<int, double>::value));
-  EXPECT_TRUE((ImplicitlyConvertible<double, int>::value));
-  EXPECT_TRUE((ImplicitlyConvertible<int*, void*>::value));
-  EXPECT_TRUE((ImplicitlyConvertible<int*, const int*>::value));
-  EXPECT_TRUE((ImplicitlyConvertible<ConversionHelperDerived&,
-                                     const ConversionHelperBase&>::value));
-  EXPECT_TRUE((ImplicitlyConvertible<const ConversionHelperBase,
-                                     ConversionHelperBase>::value));
-}
-
-// Tests that ImplicitlyConvertible<T1, T2>::value is false when T1
-// cannot be implicitly converted to T2.
-TEST(ImplicitlyConvertibleTest, ValueIsFalseWhenNotConvertible) {
-  EXPECT_FALSE((ImplicitlyConvertible<double, int*>::value));
-  EXPECT_FALSE((ImplicitlyConvertible<void*, int*>::value));
-  EXPECT_FALSE((ImplicitlyConvertible<const int*, int*>::value));
-  EXPECT_FALSE((ImplicitlyConvertible<ConversionHelperBase&,
-                                      ConversionHelperDerived&>::value));
-}
-
-// Tests IsContainerTest.
-
-class NonContainer {};
-
-TEST(IsContainerTestTest, WorksForNonContainer) {
-  EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<int>(0)));
-  EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<char[5]>(0)));
-  EXPECT_EQ(sizeof(IsNotContainer), sizeof(IsContainerTest<NonContainer>(0)));
-}
-
-TEST(IsContainerTestTest, WorksForContainer) {
-  EXPECT_EQ(sizeof(IsContainer),
-            sizeof(IsContainerTest<std::vector<bool> >(0)));
-  EXPECT_EQ(sizeof(IsContainer),
-            sizeof(IsContainerTest<std::map<int, double> >(0)));
-}
-
-// Tests ArrayEq().
-
-TEST(ArrayEqTest, WorksForDegeneratedArrays) {
-  EXPECT_TRUE(ArrayEq(5, 5L));
-  EXPECT_FALSE(ArrayEq('a', 0));
-}
-
-TEST(ArrayEqTest, WorksForOneDimensionalArrays) {
-  const int a[] = { 0, 1 };
-  long b[] = { 0, 1 };
-  EXPECT_TRUE(ArrayEq(a, b));
-  EXPECT_TRUE(ArrayEq(a, 2, b));
-
-  b[0] = 2;
-  EXPECT_FALSE(ArrayEq(a, b));
-  EXPECT_FALSE(ArrayEq(a, 1, b));
-}
-
-TEST(ArrayEqTest, WorksForTwoDimensionalArrays) {
-  const char a[][3] = { "hi", "lo" };
-  const char b[][3] = { "hi", "lo" };
-  const char c[][3] = { "hi", "li" };
-
-  EXPECT_TRUE(ArrayEq(a, b));
-  EXPECT_TRUE(ArrayEq(a, 2, b));
-
-  EXPECT_FALSE(ArrayEq(a, c));
-  EXPECT_FALSE(ArrayEq(a, 2, c));
-}
-
-// Tests ArrayAwareFind().
-
-TEST(ArrayAwareFindTest, WorksForOneDimensionalArray) {
-  const char a[] = "hello";
-  EXPECT_EQ(a + 4, ArrayAwareFind(a, a + 5, 'o'));
-  EXPECT_EQ(a + 5, ArrayAwareFind(a, a + 5, 'x'));
-}
-
-TEST(ArrayAwareFindTest, WorksForTwoDimensionalArray) {
-  int a[][2] = { { 0, 1 }, { 2, 3 }, { 4, 5 } };
-  const int b[2] = { 2, 3 };
-  EXPECT_EQ(a + 1, ArrayAwareFind(a, a + 3, b));
-
-  const int c[2] = { 6, 7 };
-  EXPECT_EQ(a + 3, ArrayAwareFind(a, a + 3, c));
-}
-
-// Tests CopyArray().
-
-TEST(CopyArrayTest, WorksForDegeneratedArrays) {
-  int n = 0;
-  CopyArray('a', &n);
-  EXPECT_EQ('a', n);
-}
-
-TEST(CopyArrayTest, WorksForOneDimensionalArrays) {
-  const char a[3] = "hi";
-  int b[3];
-#ifndef __BORLANDC__  // C++Builder cannot compile some array size deductions.
-  CopyArray(a, &b);
-  EXPECT_TRUE(ArrayEq(a, b));
-#endif
-
-  int c[3];
-  CopyArray(a, 3, c);
-  EXPECT_TRUE(ArrayEq(a, c));
-}
-
-TEST(CopyArrayTest, WorksForTwoDimensionalArrays) {
-  const int a[2][3] = { { 0, 1, 2 }, { 3, 4, 5 } };
-  int b[2][3];
-#ifndef __BORLANDC__  // C++Builder cannot compile some array size deductions.
-  CopyArray(a, &b);
-  EXPECT_TRUE(ArrayEq(a, b));
-#endif
-
-  int c[2][3];
-  CopyArray(a, 2, c);
-  EXPECT_TRUE(ArrayEq(a, c));
-}
-
-// Tests NativeArray.
-
-TEST(NativeArrayTest, ConstructorFromArrayWorks) {
-  const int a[3] = { 0, 1, 2 };
-  NativeArray<int> na(a, 3, kReference);
-  EXPECT_EQ(3U, na.size());
-  EXPECT_EQ(a, na.begin());
-}
-
-TEST(NativeArrayTest, CreatesAndDeletesCopyOfArrayWhenAskedTo) {
-  typedef int Array[2];
-  Array* a = new Array[1];
-  (*a)[0] = 0;
-  (*a)[1] = 1;
-  NativeArray<int> na(*a, 2, kCopy);
-  EXPECT_NE(*a, na.begin());
-  delete[] a;
-  EXPECT_EQ(0, na.begin()[0]);
-  EXPECT_EQ(1, na.begin()[1]);
-
-  // We rely on the heap checker to verify that na deletes the copy of
-  // array.
-}
-
-TEST(NativeArrayTest, TypeMembersAreCorrect) {
-  StaticAssertTypeEq<char, NativeArray<char>::value_type>();
-  StaticAssertTypeEq<int[2], NativeArray<int[2]>::value_type>();
-
-  StaticAssertTypeEq<const char*, NativeArray<char>::const_iterator>();
-  StaticAssertTypeEq<const bool(*)[2], NativeArray<bool[2]>::const_iterator>();
-}
-
-TEST(NativeArrayTest, MethodsWork) {
-  const int a[3] = { 0, 1, 2 };
-  NativeArray<int> na(a, 3, kCopy);
-  ASSERT_EQ(3U, na.size());
-  EXPECT_EQ(3, na.end() - na.begin());
-
-  NativeArray<int>::const_iterator it = na.begin();
-  EXPECT_EQ(0, *it);
-  ++it;
-  EXPECT_EQ(1, *it);
-  it++;
-  EXPECT_EQ(2, *it);
-  ++it;
-  EXPECT_EQ(na.end(), it);
-
-  EXPECT_TRUE(na == na);
-
-  NativeArray<int> na2(a, 3, kReference);
-  EXPECT_TRUE(na == na2);
-
-  const int b1[3] = { 0, 1, 1 };
-  const int b2[4] = { 0, 1, 2, 3 };
-  EXPECT_FALSE(na == NativeArray<int>(b1, 3, kReference));
-  EXPECT_FALSE(na == NativeArray<int>(b2, 4, kCopy));
-}
-
-TEST(NativeArrayTest, WorksForTwoDimensionalArray) {
-  const char a[2][3] = { "hi", "lo" };
-  NativeArray<char[3]> na(a, 2, kReference);
-  ASSERT_EQ(2U, na.size());
-  EXPECT_EQ(a, na.begin());
-}
-
-// Tests SkipPrefix().
-
-TEST(SkipPrefixTest, SkipsWhenPrefixMatches) {
-  const char* const str = "hello";
-
-  const char* p = str;
-  EXPECT_TRUE(SkipPrefix("", &p));
-  EXPECT_EQ(str, p);
-
-  p = str;
-  EXPECT_TRUE(SkipPrefix("hell", &p));
-  EXPECT_EQ(str + 4, p);
-}
-
-TEST(SkipPrefixTest, DoesNotSkipWhenPrefixDoesNotMatch) {
-  const char* const str = "world";
-
-  const char* p = str;
-  EXPECT_FALSE(SkipPrefix("W", &p));
-  EXPECT_EQ(str, p);
-
-  p = str;
-  EXPECT_FALSE(SkipPrefix("world!", &p));
-  EXPECT_EQ(str, p);
-}
diff --git a/src/libs_3rdparty/gtest/src/src/gtest-death-test.cc b/src/libs_3rdparty/gtest/src/src/gtest-death-test.cc
deleted file mode 100644
index 8b2e413..0000000
--- a/src/libs_3rdparty/gtest/src/src/gtest-death-test.cc
+++ /dev/null
@@ -1,1234 +0,0 @@
-// Copyright 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan), vladl at google.com (Vlad Losev)
-//
-// This file implements death tests.
-
-#include "gtest/gtest-death-test.h"
-#include "gtest/internal/gtest-port.h"
-
-#if GTEST_HAS_DEATH_TEST
-
-# if GTEST_OS_MAC
-#  include <crt_externs.h>
-# endif  // GTEST_OS_MAC
-
-# include <errno.h>
-# include <fcntl.h>
-# include <limits.h>
-# include <stdarg.h>
-
-# if GTEST_OS_WINDOWS
-#  include <windows.h>
-# else
-#  include <sys/mman.h>
-#  include <sys/wait.h>
-# endif  // GTEST_OS_WINDOWS
-
-#endif  // GTEST_HAS_DEATH_TEST
-
-#include "gtest/gtest-message.h"
-#include "gtest/internal/gtest-string.h"
-
-// Indicates that this translation unit is part of Google Test's
-// implementation.  It must come before gtest-internal-inl.h is
-// included, or there will be a compiler error.  This trick is to
-// prevent a user from accidentally including gtest-internal-inl.h in
-// his code.
-#define GTEST_IMPLEMENTATION_ 1
-#include "src/gtest-internal-inl.h"
-#undef GTEST_IMPLEMENTATION_
-
-namespace testing {
-
-// Constants.
-
-// The default death test style.
-static const char kDefaultDeathTestStyle[] = "fast";
-
-GTEST_DEFINE_string_(
-    death_test_style,
-    internal::StringFromGTestEnv("death_test_style", kDefaultDeathTestStyle),
-    "Indicates how to run a death test in a forked child process: "
-    "\"threadsafe\" (child process re-executes the test binary "
-    "from the beginning, running only the specific death test) or "
-    "\"fast\" (child process runs the death test immediately "
-    "after forking).");
-
-GTEST_DEFINE_bool_(
-    death_test_use_fork,
-    internal::BoolFromGTestEnv("death_test_use_fork", false),
-    "Instructs to use fork()/_exit() instead of clone() in death tests. "
-    "Ignored and always uses fork() on POSIX systems where clone() is not "
-    "implemented. Useful when running under valgrind or similar tools if "
-    "those do not support clone(). Valgrind 3.3.1 will just fail if "
-    "it sees an unsupported combination of clone() flags. "
-    "It is not recommended to use this flag w/o valgrind though it will "
-    "work in 99% of the cases. Once valgrind is fixed, this flag will "
-    "most likely be removed.");
-
-namespace internal {
-GTEST_DEFINE_string_(
-    internal_run_death_test, "",
-    "Indicates the file, line number, temporal index of "
-    "the single death test to run, and a file descriptor to "
-    "which a success code may be sent, all separated by "
-    "colons.  This flag is specified if and only if the current "
-    "process is a sub-process launched for running a thread-safe "
-    "death test.  FOR INTERNAL USE ONLY.");
-}  // namespace internal
-
-#if GTEST_HAS_DEATH_TEST
-
-// ExitedWithCode constructor.
-ExitedWithCode::ExitedWithCode(int exit_code) : exit_code_(exit_code) {
-}
-
-// ExitedWithCode function-call operator.
-bool ExitedWithCode::operator()(int exit_status) const {
-# if GTEST_OS_WINDOWS
-
-  return exit_status == exit_code_;
-
-# else
-
-  return WIFEXITED(exit_status) && WEXITSTATUS(exit_status) == exit_code_;
-
-# endif  // GTEST_OS_WINDOWS
-}
-
-# if !GTEST_OS_WINDOWS
-// KilledBySignal constructor.
-KilledBySignal::KilledBySignal(int signum) : signum_(signum) {
-}
-
-// KilledBySignal function-call operator.
-bool KilledBySignal::operator()(int exit_status) const {
-  return WIFSIGNALED(exit_status) && WTERMSIG(exit_status) == signum_;
-}
-# endif  // !GTEST_OS_WINDOWS
-
-namespace internal {
-
-// Utilities needed for death tests.
-
-// Generates a textual description of a given exit code, in the format
-// specified by wait(2).
-static String ExitSummary(int exit_code) {
-  Message m;
-
-# if GTEST_OS_WINDOWS
-
-  m << "Exited with exit status " << exit_code;
-
-# else
-
-  if (WIFEXITED(exit_code)) {
-    m << "Exited with exit status " << WEXITSTATUS(exit_code);
-  } else if (WIFSIGNALED(exit_code)) {
-    m << "Terminated by signal " << WTERMSIG(exit_code);
-  }
-#  ifdef WCOREDUMP
-  if (WCOREDUMP(exit_code)) {
-    m << " (core dumped)";
-  }
-#  endif
-# endif  // GTEST_OS_WINDOWS
-
-  return m.GetString();
-}
-
-// Returns true if exit_status describes a process that was terminated
-// by a signal, or exited normally with a nonzero exit code.
-bool ExitedUnsuccessfully(int exit_status) {
-  return !ExitedWithCode(0)(exit_status);
-}
-
-# if !GTEST_OS_WINDOWS
-// Generates a textual failure message when a death test finds more than
-// one thread running, or cannot determine the number of threads, prior
-// to executing the given statement.  It is the responsibility of the
-// caller not to pass a thread_count of 1.
-static String DeathTestThreadWarning(size_t thread_count) {
-  Message msg;
-  msg << "Death tests use fork(), which is unsafe particularly"
-      << " in a threaded context. For this test, " << GTEST_NAME_ << " ";
-  if (thread_count == 0)
-    msg << "couldn't detect the number of threads.";
-  else
-    msg << "detected " << thread_count << " threads.";
-  return msg.GetString();
-}
-# endif  // !GTEST_OS_WINDOWS
-
-// Flag characters for reporting a death test that did not die.
-static const char kDeathTestLived = 'L';
-static const char kDeathTestReturned = 'R';
-static const char kDeathTestThrew = 'T';
-static const char kDeathTestInternalError = 'I';
-
-// An enumeration describing all of the possible ways that a death test can
-// conclude.  DIED means that the process died while executing the test
-// code; LIVED means that process lived beyond the end of the test code;
-// RETURNED means that the test statement attempted to execute a return
-// statement, which is not allowed; THREW means that the test statement
-// returned control by throwing an exception.  IN_PROGRESS means the test
-// has not yet concluded.
-// TODO(vladl at google.com): Unify names and possibly values for
-// AbortReason, DeathTestOutcome, and flag characters above.
-enum DeathTestOutcome { IN_PROGRESS, DIED, LIVED, RETURNED, THREW };
-
-// Routine for aborting the program which is safe to call from an
-// exec-style death test child process, in which case the error
-// message is propagated back to the parent process.  Otherwise, the
-// message is simply printed to stderr.  In either case, the program
-// then exits with status 1.
-void DeathTestAbort(const String& message) {
-  // On a POSIX system, this function may be called from a threadsafe-style
-  // death test child process, which operates on a very small stack.  Use
-  // the heap for any additional non-minuscule memory requirements.
-  const InternalRunDeathTestFlag* const flag =
-      GetUnitTestImpl()->internal_run_death_test_flag();
-  if (flag != NULL) {
-    FILE* parent = posix::FDOpen(flag->write_fd(), "w");
-    fputc(kDeathTestInternalError, parent);
-    fprintf(parent, "%s", message.c_str());
-    fflush(parent);
-    _exit(1);
-  } else {
-    fprintf(stderr, "%s", message.c_str());
-    fflush(stderr);
-    posix::Abort();
-  }
-}
-
-// A replacement for CHECK that calls DeathTestAbort if the assertion
-// fails.
-# define GTEST_DEATH_TEST_CHECK_(expression) \
-  do { \
-    if (!::testing::internal::IsTrue(expression)) { \
-      DeathTestAbort(::testing::internal::String::Format( \
-          "CHECK failed: File %s, line %d: %s", \
-          __FILE__, __LINE__, #expression)); \
-    } \
-  } while (::testing::internal::AlwaysFalse())
-
-// This macro is similar to GTEST_DEATH_TEST_CHECK_, but it is meant for
-// evaluating any system call that fulfills two conditions: it must return
-// -1 on failure, and set errno to EINTR when it is interrupted and
-// should be tried again.  The macro expands to a loop that repeatedly
-// evaluates the expression as long as it evaluates to -1 and sets
-// errno to EINTR.  If the expression evaluates to -1 but errno is
-// something other than EINTR, DeathTestAbort is called.
-# define GTEST_DEATH_TEST_CHECK_SYSCALL_(expression) \
-  do { \
-    int gtest_retval; \
-    do { \
-      gtest_retval = (expression); \
-    } while (gtest_retval == -1 && errno == EINTR); \
-    if (gtest_retval == -1) { \
-      DeathTestAbort(::testing::internal::String::Format( \
-          "CHECK failed: File %s, line %d: %s != -1", \
-          __FILE__, __LINE__, #expression)); \
-    } \
-  } while (::testing::internal::AlwaysFalse())
-
-// Returns the message describing the last system error in errno.
-String GetLastErrnoDescription() {
-    return String(errno == 0 ? "" : posix::StrError(errno));
-}
-
-// This is called from a death test parent process to read a failure
-// message from the death test child process and log it with the FATAL
-// severity. On Windows, the message is read from a pipe handle. On other
-// platforms, it is read from a file descriptor.
-static void FailFromInternalError(int fd) {
-  Message error;
-  char buffer[256];
-  int num_read;
-
-  do {
-    while ((num_read = posix::Read(fd, buffer, 255)) > 0) {
-      buffer[num_read] = '\0';
-      error << buffer;
-    }
-  } while (num_read == -1 && errno == EINTR);
-
-  if (num_read == 0) {
-    GTEST_LOG_(FATAL) << error.GetString();
-  } else {
-    const int last_error = errno;
-    GTEST_LOG_(FATAL) << "Error while reading death test internal: "
-                      << GetLastErrnoDescription() << " [" << last_error << "]";
-  }
-}
-
-// Death test constructor.  Increments the running death test count
-// for the current test.
-DeathTest::DeathTest() {
-  TestInfo* const info = GetUnitTestImpl()->current_test_info();
-  if (info == NULL) {
-    DeathTestAbort("Cannot run a death test outside of a TEST or "
-                   "TEST_F construct");
-  }
-}
-
-// Creates and returns a death test by dispatching to the current
-// death test factory.
-bool DeathTest::Create(const char* statement, const RE* regex,
-                       const char* file, int line, DeathTest** test) {
-  return GetUnitTestImpl()->death_test_factory()->Create(
-      statement, regex, file, line, test);
-}
-
-const char* DeathTest::LastMessage() {
-  return last_death_test_message_.c_str();
-}
-
-void DeathTest::set_last_death_test_message(const String& message) {
-  last_death_test_message_ = message;
-}
-
-String DeathTest::last_death_test_message_;
-
-// Provides cross platform implementation for some death functionality.
-class DeathTestImpl : public DeathTest {
- protected:
-  DeathTestImpl(const char* a_statement, const RE* a_regex)
-      : statement_(a_statement),
-        regex_(a_regex),
-        spawned_(false),
-        status_(-1),
-        outcome_(IN_PROGRESS),
-        read_fd_(-1),
-        write_fd_(-1) {}
-
-  // read_fd_ is expected to be closed and cleared by a derived class.
-  ~DeathTestImpl() { GTEST_DEATH_TEST_CHECK_(read_fd_ == -1); }
-
-  void Abort(AbortReason reason);
-  virtual bool Passed(bool status_ok);
-
-  const char* statement() const { return statement_; }
-  const RE* regex() const { return regex_; }
-  bool spawned() const { return spawned_; }
-  void set_spawned(bool is_spawned) { spawned_ = is_spawned; }
-  int status() const { return status_; }
-  void set_status(int a_status) { status_ = a_status; }
-  DeathTestOutcome outcome() const { return outcome_; }
-  void set_outcome(DeathTestOutcome an_outcome) { outcome_ = an_outcome; }
-  int read_fd() const { return read_fd_; }
-  void set_read_fd(int fd) { read_fd_ = fd; }
-  int write_fd() const { return write_fd_; }
-  void set_write_fd(int fd) { write_fd_ = fd; }
-
-  // Called in the parent process only. Reads the result code of the death
-  // test child process via a pipe, interprets it to set the outcome_
-  // member, and closes read_fd_.  Outputs diagnostics and terminates in
-  // case of unexpected codes.
-  void ReadAndInterpretStatusByte();
-
- private:
-  // The textual content of the code this object is testing.  This class
-  // doesn't own this string and should not attempt to delete it.
-  const char* const statement_;
-  // The regular expression which test output must match.  DeathTestImpl
-  // doesn't own this object and should not attempt to delete it.
-  const RE* const regex_;
-  // True if the death test child process has been successfully spawned.
-  bool spawned_;
-  // The exit status of the child process.
-  int status_;
-  // How the death test concluded.
-  DeathTestOutcome outcome_;
-  // Descriptor to the read end of the pipe to the child process.  It is
-  // always -1 in the child process.  The child keeps its write end of the
-  // pipe in write_fd_.
-  int read_fd_;
-  // Descriptor to the child's write end of the pipe to the parent process.
-  // It is always -1 in the parent process.  The parent keeps its end of the
-  // pipe in read_fd_.
-  int write_fd_;
-};
-
-// Called in the parent process only. Reads the result code of the death
-// test child process via a pipe, interprets it to set the outcome_
-// member, and closes read_fd_.  Outputs diagnostics and terminates in
-// case of unexpected codes.
-void DeathTestImpl::ReadAndInterpretStatusByte() {
-  char flag;
-  int bytes_read;
-
-  // The read() here blocks until data is available (signifying the
-  // failure of the death test) or until the pipe is closed (signifying
-  // its success), so it's okay to call this in the parent before
-  // the child process has exited.
-  do {
-    bytes_read = posix::Read(read_fd(), &flag, 1);
-  } while (bytes_read == -1 && errno == EINTR);
-
-  if (bytes_read == 0) {
-    set_outcome(DIED);
-  } else if (bytes_read == 1) {
-    switch (flag) {
-      case kDeathTestReturned:
-        set_outcome(RETURNED);
-        break;
-      case kDeathTestThrew:
-        set_outcome(THREW);
-        break;
-      case kDeathTestLived:
-        set_outcome(LIVED);
-        break;
-      case kDeathTestInternalError:
-        FailFromInternalError(read_fd());  // Does not return.
-        break;
-      default:
-        GTEST_LOG_(FATAL) << "Death test child process reported "
-                          << "unexpected status byte ("
-                          << static_cast<unsigned int>(flag) << ")";
-    }
-  } else {
-    GTEST_LOG_(FATAL) << "Read from death test child process failed: "
-                      << GetLastErrnoDescription();
-  }
-  GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Close(read_fd()));
-  set_read_fd(-1);
-}
-
-// Signals that the death test code which should have exited, didn't.
-// Should be called only in a death test child process.
-// Writes a status byte to the child's status file descriptor, then
-// calls _exit(1).
-void DeathTestImpl::Abort(AbortReason reason) {
-  // The parent process considers the death test to be a failure if
-  // it finds any data in our pipe.  So, here we write a single flag byte
-  // to the pipe, then exit.
-  const char status_ch =
-      reason == TEST_DID_NOT_DIE ? kDeathTestLived :
-      reason == TEST_THREW_EXCEPTION ? kDeathTestThrew : kDeathTestReturned;
-
-  GTEST_DEATH_TEST_CHECK_SYSCALL_(posix::Write(write_fd(), &status_ch, 1));
-  // We are leaking the descriptor here because on some platforms (i.e.,
-  // when built as Windows DLL), destructors of global objects will still
-  // run after calling _exit(). On such systems, write_fd_ will be
-  // indirectly closed from the destructor of UnitTestImpl, causing double
-  // close if it is also closed here. On debug configurations, double close
-  // may assert. As there are no in-process buffers to flush here, we are
-  // relying on the OS to close the descriptor after the process terminates
-  // when the destructors are not run.
-  _exit(1);  // Exits w/o any normal exit hooks (we were supposed to crash)
-}
-
-// Returns an indented copy of stderr output for a death test.
-// This makes distinguishing death test output lines from regular log lines
-// much easier.
-static ::std::string FormatDeathTestOutput(const ::std::string& output) {
-  ::std::string ret;
-  for (size_t at = 0; ; ) {
-    const size_t line_end = output.find('\n', at);
-    ret += "[  DEATH   ] ";
-    if (line_end == ::std::string::npos) {
-      ret += output.substr(at);
-      break;
-    }
-    ret += output.substr(at, line_end + 1 - at);
-    at = line_end + 1;
-  }
-  return ret;
-}
-
-// Assesses the success or failure of a death test, using both private
-// members which have previously been set, and one argument:
-//
-// Private data members:
-//   outcome:  An enumeration describing how the death test
-//             concluded: DIED, LIVED, THREW, or RETURNED.  The death test
-//             fails in the latter three cases.
-//   status:   The exit status of the child process. On *nix, it is in the
-//             in the format specified by wait(2). On Windows, this is the
-//             value supplied to the ExitProcess() API or a numeric code
-//             of the exception that terminated the program.
-//   regex:    A regular expression object to be applied to
-//             the test's captured standard error output; the death test
-//             fails if it does not match.
-//
-// Argument:
-//   status_ok: true if exit_status is acceptable in the context of
-//              this particular death test, which fails if it is false
-//
-// Returns true iff all of the above conditions are met.  Otherwise, the
-// first failing condition, in the order given above, is the one that is
-// reported. Also sets the last death test message string.
-bool DeathTestImpl::Passed(bool status_ok) {
-  if (!spawned())
-    return false;
-
-  const String error_message = GetCapturedStderr();
-
-  bool success = false;
-  Message buffer;
-
-  buffer << "Death test: " << statement() << "\n";
-  switch (outcome()) {
-    case LIVED:
-      buffer << "    Result: failed to die.\n"
-             << " Error msg:\n" << FormatDeathTestOutput(error_message);
-      break;
-    case THREW:
-      buffer << "    Result: threw an exception.\n"
-             << " Error msg:\n" << FormatDeathTestOutput(error_message);
-      break;
-    case RETURNED:
-      buffer << "    Result: illegal return in test statement.\n"
-             << " Error msg:\n" << FormatDeathTestOutput(error_message);
-      break;
-    case DIED:
-      if (status_ok) {
-        const bool matched = RE::PartialMatch(error_message.c_str(), *regex());
-        if (matched) {
-          success = true;
-        } else {
-          buffer << "    Result: died but not with expected error.\n"
-                 << "  Expected: " << regex()->pattern() << "\n"
-                 << "Actual msg:\n" << FormatDeathTestOutput(error_message);
-        }
-      } else {
-        buffer << "    Result: died but not with expected exit code:\n"
-               << "            " << ExitSummary(status()) << "\n"
-               << "Actual msg:\n" << FormatDeathTestOutput(error_message);
-      }
-      break;
-    case IN_PROGRESS:
-    default:
-      GTEST_LOG_(FATAL)
-          << "DeathTest::Passed somehow called before conclusion of test";
-  }
-
-  DeathTest::set_last_death_test_message(buffer.GetString());
-  return success;
-}
-
-# if GTEST_OS_WINDOWS
-// WindowsDeathTest implements death tests on Windows. Due to the
-// specifics of starting new processes on Windows, death tests there are
-// always threadsafe, and Google Test considers the
-// --gtest_death_test_style=fast setting to be equivalent to
-// --gtest_death_test_style=threadsafe there.
-//
-// A few implementation notes:  Like the Linux version, the Windows
-// implementation uses pipes for child-to-parent communication. But due to
-// the specifics of pipes on Windows, some extra steps are required:
-//
-// 1. The parent creates a communication pipe and stores handles to both
-//    ends of it.
-// 2. The parent starts the child and provides it with the information
-//    necessary to acquire the handle to the write end of the pipe.
-// 3. The child acquires the write end of the pipe and signals the parent
-//    using a Windows event.
-// 4. Now the parent can release the write end of the pipe on its side. If
-//    this is done before step 3, the object's reference count goes down to
-//    0 and it is destroyed, preventing the child from acquiring it. The
-//    parent now has to release it, or read operations on the read end of
-//    the pipe will not return when the child terminates.
-// 5. The parent reads child's output through the pipe (outcome code and
-//    any possible error messages) from the pipe, and its stderr and then
-//    determines whether to fail the test.
-//
-// Note: to distinguish Win32 API calls from the local method and function
-// calls, the former are explicitly resolved in the global namespace.
-//
-class WindowsDeathTest : public DeathTestImpl {
- public:
-  WindowsDeathTest(const char* a_statement,
-                   const RE* a_regex,
-                   const char* file,
-                   int line)
-      : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {}
-
-  // All of these virtual functions are inherited from DeathTest.
-  virtual int Wait();
-  virtual TestRole AssumeRole();
-
- private:
-  // The name of the file in which the death test is located.
-  const char* const file_;
-  // The line number on which the death test is located.
-  const int line_;
-  // Handle to the write end of the pipe to the child process.
-  AutoHandle write_handle_;
-  // Child process handle.
-  AutoHandle child_handle_;
-  // Event the child process uses to signal the parent that it has
-  // acquired the handle to the write end of the pipe. After seeing this
-  // event the parent can release its own handles to make sure its
-  // ReadFile() calls return when the child terminates.
-  AutoHandle event_handle_;
-};
-
-// Waits for the child in a death test to exit, returning its exit
-// status, or 0 if no child process exists.  As a side effect, sets the
-// outcome data member.
-int WindowsDeathTest::Wait() {
-  if (!spawned())
-    return 0;
-
-  // Wait until the child either signals that it has acquired the write end
-  // of the pipe or it dies.
-  const HANDLE wait_handles[2] = { child_handle_.Get(), event_handle_.Get() };
-  switch (::WaitForMultipleObjects(2,
-                                   wait_handles,
-                                   FALSE,  // Waits for any of the handles.
-                                   INFINITE)) {
-    case WAIT_OBJECT_0:
-    case WAIT_OBJECT_0 + 1:
-      break;
-    default:
-      GTEST_DEATH_TEST_CHECK_(false);  // Should not get here.
-  }
-
-  // The child has acquired the write end of the pipe or exited.
-  // We release the handle on our side and continue.
-  write_handle_.Reset();
-  event_handle_.Reset();
-
-  ReadAndInterpretStatusByte();
-
-  // Waits for the child process to exit if it haven't already. This
-  // returns immediately if the child has already exited, regardless of
-  // whether previous calls to WaitForMultipleObjects synchronized on this
-  // handle or not.
-  GTEST_DEATH_TEST_CHECK_(
-      WAIT_OBJECT_0 == ::WaitForSingleObject(child_handle_.Get(),
-                                             INFINITE));
-  DWORD status_code;
-  GTEST_DEATH_TEST_CHECK_(
-      ::GetExitCodeProcess(child_handle_.Get(), &status_code) != FALSE);
-  child_handle_.Reset();
-  set_status(static_cast<int>(status_code));
-  return status();
-}
-
-// The AssumeRole process for a Windows death test.  It creates a child
-// process with the same executable as the current process to run the
-// death test.  The child process is given the --gtest_filter and
-// --gtest_internal_run_death_test flags such that it knows to run the
-// current death test only.
-DeathTest::TestRole WindowsDeathTest::AssumeRole() {
-  const UnitTestImpl* const impl = GetUnitTestImpl();
-  const InternalRunDeathTestFlag* const flag =
-      impl->internal_run_death_test_flag();
-  const TestInfo* const info = impl->current_test_info();
-  const int death_test_index = info->result()->death_test_count();
-
-  if (flag != NULL) {
-    // ParseInternalRunDeathTestFlag() has performed all the necessary
-    // processing.
-    set_write_fd(flag->write_fd());
-    return EXECUTE_TEST;
-  }
-
-  // WindowsDeathTest uses an anonymous pipe to communicate results of
-  // a death test.
-  SECURITY_ATTRIBUTES handles_are_inheritable = {
-    sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
-  HANDLE read_handle, write_handle;
-  GTEST_DEATH_TEST_CHECK_(
-      ::CreatePipe(&read_handle, &write_handle, &handles_are_inheritable,
-                   0)  // Default buffer size.
-      != FALSE);
-  set_read_fd(::_open_osfhandle(reinterpret_cast<intptr_t>(read_handle),
-                                O_RDONLY));
-  write_handle_.Reset(write_handle);
-  event_handle_.Reset(::CreateEvent(
-      &handles_are_inheritable,
-      TRUE,    // The event will automatically reset to non-signaled state.
-      FALSE,   // The initial state is non-signalled.
-      NULL));  // The even is unnamed.
-  GTEST_DEATH_TEST_CHECK_(event_handle_.Get() != NULL);
-  const String filter_flag = String::Format("--%s%s=%s.%s",
-                                            GTEST_FLAG_PREFIX_, kFilterFlag,
-                                            info->test_case_name(),
-                                            info->name());
-  const String internal_flag = String::Format(
-    "--%s%s=%s|%d|%d|%u|%Iu|%Iu",
-      GTEST_FLAG_PREFIX_,
-      kInternalRunDeathTestFlag,
-      file_, line_,
-      death_test_index,
-      static_cast<unsigned int>(::GetCurrentProcessId()),
-      // size_t has the same with as pointers on both 32-bit and 64-bit
-      // Windows platforms.
-      // See http://msdn.microsoft.com/en-us/library/tcxf1dw6.aspx.
-      reinterpret_cast<size_t>(write_handle),
-      reinterpret_cast<size_t>(event_handle_.Get()));
-
-  char executable_path[_MAX_PATH + 1];  // NOLINT
-  GTEST_DEATH_TEST_CHECK_(
-      _MAX_PATH + 1 != ::GetModuleFileNameA(NULL,
-                                            executable_path,
-                                            _MAX_PATH));
-
-  String command_line = String::Format("%s %s \"%s\"",
-                                       ::GetCommandLineA(),
-                                       filter_flag.c_str(),
-                                       internal_flag.c_str());
-
-  DeathTest::set_last_death_test_message("");
-
-  CaptureStderr();
-  // Flush the log buffers since the log streams are shared with the child.
-  FlushInfoLog();
-
-  // The child process will share the standard handles with the parent.
-  STARTUPINFOA startup_info;
-  memset(&startup_info, 0, sizeof(STARTUPINFO));
-  startup_info.dwFlags = STARTF_USESTDHANDLES;
-  startup_info.hStdInput = ::GetStdHandle(STD_INPUT_HANDLE);
-  startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE);
-  startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE);
-
-  PROCESS_INFORMATION process_info;
-  GTEST_DEATH_TEST_CHECK_(::CreateProcessA(
-      executable_path,
-      const_cast<char*>(command_line.c_str()),
-      NULL,   // Retuned process handle is not inheritable.
-      NULL,   // Retuned thread handle is not inheritable.
-      TRUE,   // Child inherits all inheritable handles (for write_handle_).
-      0x0,    // Default creation flags.
-      NULL,   // Inherit the parent's environment.
-      UnitTest::GetInstance()->original_working_dir(),
-      &startup_info,
-      &process_info) != FALSE);
-  child_handle_.Reset(process_info.hProcess);
-  ::CloseHandle(process_info.hThread);
-  set_spawned(true);
-  return OVERSEE_TEST;
-}
-# else  // We are not on Windows.
-
-// ForkingDeathTest provides implementations for most of the abstract
-// methods of the DeathTest interface.  Only the AssumeRole method is
-// left undefined.
-class ForkingDeathTest : public DeathTestImpl {
- public:
-  ForkingDeathTest(const char* statement, const RE* regex);
-
-  // All of these virtual functions are inherited from DeathTest.
-  virtual int Wait();
-
- protected:
-  void set_child_pid(pid_t child_pid) { child_pid_ = child_pid; }
-
- private:
-  // PID of child process during death test; 0 in the child process itself.
-  pid_t child_pid_;
-};
-
-// Constructs a ForkingDeathTest.
-ForkingDeathTest::ForkingDeathTest(const char* a_statement, const RE* a_regex)
-    : DeathTestImpl(a_statement, a_regex),
-      child_pid_(-1) {}
-
-// Waits for the child in a death test to exit, returning its exit
-// status, or 0 if no child process exists.  As a side effect, sets the
-// outcome data member.
-int ForkingDeathTest::Wait() {
-  if (!spawned())
-    return 0;
-
-  ReadAndInterpretStatusByte();
-
-  int status_value;
-  GTEST_DEATH_TEST_CHECK_SYSCALL_(waitpid(child_pid_, &status_value, 0));
-  set_status(status_value);
-  return status_value;
-}
-
-// A concrete death test class that forks, then immediately runs the test
-// in the child process.
-class NoExecDeathTest : public ForkingDeathTest {
- public:
-  NoExecDeathTest(const char* a_statement, const RE* a_regex) :
-      ForkingDeathTest(a_statement, a_regex) { }
-  virtual TestRole AssumeRole();
-};
-
-// The AssumeRole process for a fork-and-run death test.  It implements a
-// straightforward fork, with a simple pipe to transmit the status byte.
-DeathTest::TestRole NoExecDeathTest::AssumeRole() {
-  const size_t thread_count = GetThreadCount();
-  if (thread_count != 1) {
-    GTEST_LOG_(WARNING) << DeathTestThreadWarning(thread_count);
-  }
-
-  int pipe_fd[2];
-  GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1);
-
-  DeathTest::set_last_death_test_message("");
-  CaptureStderr();
-  // When we fork the process below, the log file buffers are copied, but the
-  // file descriptors are shared.  We flush all log files here so that closing
-  // the file descriptors in the child process doesn't throw off the
-  // synchronization between descriptors and buffers in the parent process.
-  // This is as close to the fork as possible to avoid a race condition in case
-  // there are multiple threads running before the death test, and another
-  // thread writes to the log file.
-  FlushInfoLog();
-
-  const pid_t child_pid = fork();
-  GTEST_DEATH_TEST_CHECK_(child_pid != -1);
-  set_child_pid(child_pid);
-  if (child_pid == 0) {
-    GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[0]));
-    set_write_fd(pipe_fd[1]);
-    // Redirects all logging to stderr in the child process to prevent
-    // concurrent writes to the log files.  We capture stderr in the parent
-    // process and append the child process' output to a log.
-    LogToStderr();
-    // Event forwarding to the listeners of event listener API mush be shut
-    // down in death test subprocesses.
-    GetUnitTestImpl()->listeners()->SuppressEventForwarding();
-    return EXECUTE_TEST;
-  } else {
-    GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1]));
-    set_read_fd(pipe_fd[0]);
-    set_spawned(true);
-    return OVERSEE_TEST;
-  }
-}
-
-// A concrete death test class that forks and re-executes the main
-// program from the beginning, with command-line flags set that cause
-// only this specific death test to be run.
-class ExecDeathTest : public ForkingDeathTest {
- public:
-  ExecDeathTest(const char* a_statement, const RE* a_regex,
-                const char* file, int line) :
-      ForkingDeathTest(a_statement, a_regex), file_(file), line_(line) { }
-  virtual TestRole AssumeRole();
- private:
-  // The name of the file in which the death test is located.
-  const char* const file_;
-  // The line number on which the death test is located.
-  const int line_;
-};
-
-// Utility class for accumulating command-line arguments.
-class Arguments {
- public:
-  Arguments() {
-    args_.push_back(NULL);
-  }
-
-  ~Arguments() {
-    for (std::vector<char*>::iterator i = args_.begin(); i != args_.end();
-         ++i) {
-      free(*i);
-    }
-  }
-  void AddArgument(const char* argument) {
-    args_.insert(args_.end() - 1, posix::StrDup(argument));
-  }
-
-  template <typename Str>
-  void AddArguments(const ::std::vector<Str>& arguments) {
-    for (typename ::std::vector<Str>::const_iterator i = arguments.begin();
-         i != arguments.end();
-         ++i) {
-      args_.insert(args_.end() - 1, posix::StrDup(i->c_str()));
-    }
-  }
-  char* const* Argv() {
-    return &args_[0];
-  }
- private:
-  std::vector<char*> args_;
-};
-
-// A struct that encompasses the arguments to the child process of a
-// threadsafe-style death test process.
-struct ExecDeathTestArgs {
-  char* const* argv;  // Command-line arguments for the child's call to exec
-  int close_fd;       // File descriptor to close; the read end of a pipe
-};
-
-#  if GTEST_OS_MAC
-inline char** GetEnviron() {
-  // When Google Test is built as a framework on MacOS X, the environ variable
-  // is unavailable. Apple's documentation (man environ) recommends using
-  // _NSGetEnviron() instead.
-  return *_NSGetEnviron();
-}
-#  else
-// Some POSIX platforms expect you to declare environ. extern "C" makes
-// it reside in the global namespace.
-extern "C" char** environ;
-inline char** GetEnviron() { return environ; }
-#  endif  // GTEST_OS_MAC
-
-// The main function for a threadsafe-style death test child process.
-// This function is called in a clone()-ed process and thus must avoid
-// any potentially unsafe operations like malloc or libc functions.
-static int ExecDeathTestChildMain(void* child_arg) {
-  ExecDeathTestArgs* const args = static_cast<ExecDeathTestArgs*>(child_arg);
-  GTEST_DEATH_TEST_CHECK_SYSCALL_(close(args->close_fd));
-
-  // We need to execute the test program in the same environment where
-  // it was originally invoked.  Therefore we change to the original
-  // working directory first.
-  const char* const original_dir =
-      UnitTest::GetInstance()->original_working_dir();
-  // We can safely call chdir() as it's a direct system call.
-  if (chdir(original_dir) != 0) {
-    DeathTestAbort(String::Format("chdir(\"%s\") failed: %s",
-                                  original_dir,
-                                  GetLastErrnoDescription().c_str()));
-    return EXIT_FAILURE;
-  }
-
-  // We can safely call execve() as it's a direct system call.  We
-  // cannot use execvp() as it's a libc function and thus potentially
-  // unsafe.  Since execve() doesn't search the PATH, the user must
-  // invoke the test program via a valid path that contains at least
-  // one path separator.
-  execve(args->argv[0], args->argv, GetEnviron());
-  DeathTestAbort(String::Format("execve(%s, ...) in %s failed: %s",
-                                args->argv[0],
-                                original_dir,
-                                GetLastErrnoDescription().c_str()));
-  return EXIT_FAILURE;
-}
-
-// Two utility routines that together determine the direction the stack
-// grows.
-// This could be accomplished more elegantly by a single recursive
-// function, but we want to guard against the unlikely possibility of
-// a smart compiler optimizing the recursion away.
-//
-// GTEST_NO_INLINE_ is required to prevent GCC 4.6 from inlining
-// StackLowerThanAddress into StackGrowsDown, which then doesn't give
-// correct answer.
-bool StackLowerThanAddress(const void* ptr) GTEST_NO_INLINE_;
-bool StackLowerThanAddress(const void* ptr) {
-  int dummy;
-  return &dummy < ptr;
-}
-
-bool StackGrowsDown() {
-  int dummy;
-  return StackLowerThanAddress(&dummy);
-}
-
-// A threadsafe implementation of fork(2) for threadsafe-style death tests
-// that uses clone(2).  It dies with an error message if anything goes
-// wrong.
-static pid_t ExecDeathTestFork(char* const* argv, int close_fd) {
-  ExecDeathTestArgs args = { argv, close_fd };
-  pid_t child_pid = -1;
-
-#  if GTEST_HAS_CLONE
-  const bool use_fork = GTEST_FLAG(death_test_use_fork);
-
-  if (!use_fork) {
-    static const bool stack_grows_down = StackGrowsDown();
-    const size_t stack_size = getpagesize();
-    // MMAP_ANONYMOUS is not defined on Mac, so we use MAP_ANON instead.
-    void* const stack = mmap(NULL, stack_size, PROT_READ | PROT_WRITE,
-                             MAP_ANON | MAP_PRIVATE, -1, 0);
-    GTEST_DEATH_TEST_CHECK_(stack != MAP_FAILED);
-    void* const stack_top =
-        static_cast<char*>(stack) + (stack_grows_down ? stack_size : 0);
-
-    child_pid = clone(&ExecDeathTestChildMain, stack_top, SIGCHLD, &args);
-
-    GTEST_DEATH_TEST_CHECK_(munmap(stack, stack_size) != -1);
-  }
-#  else
-  const bool use_fork = true;
-#  endif  // GTEST_HAS_CLONE
-
-  if (use_fork && (child_pid = fork()) == 0) {
-      ExecDeathTestChildMain(&args);
-      _exit(0);
-  }
-
-  GTEST_DEATH_TEST_CHECK_(child_pid != -1);
-  return child_pid;
-}
-
-// The AssumeRole process for a fork-and-exec death test.  It re-executes the
-// main program from the beginning, setting the --gtest_filter
-// and --gtest_internal_run_death_test flags to cause only the current
-// death test to be re-run.
-DeathTest::TestRole ExecDeathTest::AssumeRole() {
-  const UnitTestImpl* const impl = GetUnitTestImpl();
-  const InternalRunDeathTestFlag* const flag =
-      impl->internal_run_death_test_flag();
-  const TestInfo* const info = impl->current_test_info();
-  const int death_test_index = info->result()->death_test_count();
-
-  if (flag != NULL) {
-    set_write_fd(flag->write_fd());
-    return EXECUTE_TEST;
-  }
-
-  int pipe_fd[2];
-  GTEST_DEATH_TEST_CHECK_(pipe(pipe_fd) != -1);
-  // Clear the close-on-exec flag on the write end of the pipe, lest
-  // it be closed when the child process does an exec:
-  GTEST_DEATH_TEST_CHECK_(fcntl(pipe_fd[1], F_SETFD, 0) != -1);
-
-  const String filter_flag =
-      String::Format("--%s%s=%s.%s",
-                     GTEST_FLAG_PREFIX_, kFilterFlag,
-                     info->test_case_name(), info->name());
-  const String internal_flag =
-      String::Format("--%s%s=%s|%d|%d|%d",
-                     GTEST_FLAG_PREFIX_, kInternalRunDeathTestFlag,
-                     file_, line_, death_test_index, pipe_fd[1]);
-  Arguments args;
-  args.AddArguments(GetArgvs());
-  args.AddArgument(filter_flag.c_str());
-  args.AddArgument(internal_flag.c_str());
-
-  DeathTest::set_last_death_test_message("");
-
-  CaptureStderr();
-  // See the comment in NoExecDeathTest::AssumeRole for why the next line
-  // is necessary.
-  FlushInfoLog();
-
-  const pid_t child_pid = ExecDeathTestFork(args.Argv(), pipe_fd[0]);
-  GTEST_DEATH_TEST_CHECK_SYSCALL_(close(pipe_fd[1]));
-  set_child_pid(child_pid);
-  set_read_fd(pipe_fd[0]);
-  set_spawned(true);
-  return OVERSEE_TEST;
-}
-
-# endif  // !GTEST_OS_WINDOWS
-
-// Creates a concrete DeathTest-derived class that depends on the
-// --gtest_death_test_style flag, and sets the pointer pointed to
-// by the "test" argument to its address.  If the test should be
-// skipped, sets that pointer to NULL.  Returns true, unless the
-// flag is set to an invalid value.
-bool DefaultDeathTestFactory::Create(const char* statement, const RE* regex,
-                                     const char* file, int line,
-                                     DeathTest** test) {
-  UnitTestImpl* const impl = GetUnitTestImpl();
-  const InternalRunDeathTestFlag* const flag =
-      impl->internal_run_death_test_flag();
-  const int death_test_index = impl->current_test_info()
-      ->increment_death_test_count();
-
-  if (flag != NULL) {
-    if (death_test_index > flag->index()) {
-      DeathTest::set_last_death_test_message(String::Format(
-          "Death test count (%d) somehow exceeded expected maximum (%d)",
-          death_test_index, flag->index()));
-      return false;
-    }
-
-    if (!(flag->file() == file && flag->line() == line &&
-          flag->index() == death_test_index)) {
-      *test = NULL;
-      return true;
-    }
-  }
-
-# if GTEST_OS_WINDOWS
-
-  if (GTEST_FLAG(death_test_style) == "threadsafe" ||
-      GTEST_FLAG(death_test_style) == "fast") {
-    *test = new WindowsDeathTest(statement, regex, file, line);
-  }
-
-# else
-
-  if (GTEST_FLAG(death_test_style) == "threadsafe") {
-    *test = new ExecDeathTest(statement, regex, file, line);
-  } else if (GTEST_FLAG(death_test_style) == "fast") {
-    *test = new NoExecDeathTest(statement, regex);
-  }
-
-# endif  // GTEST_OS_WINDOWS
-
-  else {  // NOLINT - this is more readable than unbalanced brackets inside #if.
-    DeathTest::set_last_death_test_message(String::Format(
-        "Unknown death test style \"%s\" encountered",
-        GTEST_FLAG(death_test_style).c_str()));
-    return false;
-  }
-
-  return true;
-}
-
-// Splits a given string on a given delimiter, populating a given
-// vector with the fields.  GTEST_HAS_DEATH_TEST implies that we have
-// ::std::string, so we can use it here.
-static void SplitString(const ::std::string& str, char delimiter,
-                        ::std::vector< ::std::string>* dest) {
-  ::std::vector< ::std::string> parsed;
-  ::std::string::size_type pos = 0;
-  while (::testing::internal::AlwaysTrue()) {
-    const ::std::string::size_type colon = str.find(delimiter, pos);
-    if (colon == ::std::string::npos) {
-      parsed.push_back(str.substr(pos));
-      break;
-    } else {
-      parsed.push_back(str.substr(pos, colon - pos));
-      pos = colon + 1;
-    }
-  }
-  dest->swap(parsed);
-}
-
-# if GTEST_OS_WINDOWS
-// Recreates the pipe and event handles from the provided parameters,
-// signals the event, and returns a file descriptor wrapped around the pipe
-// handle. This function is called in the child process only.
-int GetStatusFileDescriptor(unsigned int parent_process_id,
-                            size_t write_handle_as_size_t,
-                            size_t event_handle_as_size_t) {
-  AutoHandle parent_process_handle(::OpenProcess(PROCESS_DUP_HANDLE,
-                                                   FALSE,  // Non-inheritable.
-                                                   parent_process_id));
-  if (parent_process_handle.Get() == INVALID_HANDLE_VALUE) {
-    DeathTestAbort(String::Format("Unable to open parent process %u",
-                                  parent_process_id));
-  }
-
-  // TODO(vladl at google.com): Replace the following check with a
-  // compile-time assertion when available.
-  GTEST_CHECK_(sizeof(HANDLE) <= sizeof(size_t));
-
-  const HANDLE write_handle =
-      reinterpret_cast<HANDLE>(write_handle_as_size_t);
-  HANDLE dup_write_handle;
-
-  // The newly initialized handle is accessible only in in the parent
-  // process. To obtain one accessible within the child, we need to use
-  // DuplicateHandle.
-  if (!::DuplicateHandle(parent_process_handle.Get(), write_handle,
-                         ::GetCurrentProcess(), &dup_write_handle,
-                         0x0,    // Requested privileges ignored since
-                                 // DUPLICATE_SAME_ACCESS is used.
-                         FALSE,  // Request non-inheritable handler.
-                         DUPLICATE_SAME_ACCESS)) {
-    DeathTestAbort(String::Format(
-        "Unable to duplicate the pipe handle %Iu from the parent process %u",
-        write_handle_as_size_t, parent_process_id));
-  }
-
-  const HANDLE event_handle = reinterpret_cast<HANDLE>(event_handle_as_size_t);
-  HANDLE dup_event_handle;
-
-  if (!::DuplicateHandle(parent_process_handle.Get(), event_handle,
-                         ::GetCurrentProcess(), &dup_event_handle,
-                         0x0,
-                         FALSE,
-                         DUPLICATE_SAME_ACCESS)) {
-    DeathTestAbort(String::Format(
-        "Unable to duplicate the event handle %Iu from the parent process %u",
-        event_handle_as_size_t, parent_process_id));
-  }
-
-  const int write_fd =
-      ::_open_osfhandle(reinterpret_cast<intptr_t>(dup_write_handle), O_APPEND);
-  if (write_fd == -1) {
-    DeathTestAbort(String::Format(
-        "Unable to convert pipe handle %Iu to a file descriptor",
-        write_handle_as_size_t));
-  }
-
-  // Signals the parent that the write end of the pipe has been acquired
-  // so the parent can release its own write end.
-  ::SetEvent(dup_event_handle);
-
-  return write_fd;
-}
-# endif  // GTEST_OS_WINDOWS
-
-// Returns a newly created InternalRunDeathTestFlag object with fields
-// initialized from the GTEST_FLAG(internal_run_death_test) flag if
-// the flag is specified; otherwise returns NULL.
-InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag() {
-  if (GTEST_FLAG(internal_run_death_test) == "") return NULL;
-
-  // GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we
-  // can use it here.
-  int line = -1;
-  int index = -1;
-  ::std::vector< ::std::string> fields;
-  SplitString(GTEST_FLAG(internal_run_death_test).c_str(), '|', &fields);
-  int write_fd = -1;
-
-# if GTEST_OS_WINDOWS
-
-  unsigned int parent_process_id = 0;
-  size_t write_handle_as_size_t = 0;
-  size_t event_handle_as_size_t = 0;
-
-  if (fields.size() != 6
-      || !ParseNaturalNumber(fields[1], &line)
-      || !ParseNaturalNumber(fields[2], &index)
-      || !ParseNaturalNumber(fields[3], &parent_process_id)
-      || !ParseNaturalNumber(fields[4], &write_handle_as_size_t)
-      || !ParseNaturalNumber(fields[5], &event_handle_as_size_t)) {
-    DeathTestAbort(String::Format(
-        "Bad --gtest_internal_run_death_test flag: %s",
-        GTEST_FLAG(internal_run_death_test).c_str()));
-  }
-  write_fd = GetStatusFileDescriptor(parent_process_id,
-                                     write_handle_as_size_t,
-                                     event_handle_as_size_t);
-# else
-
-  if (fields.size() != 4
-      || !ParseNaturalNumber(fields[1], &line)
-      || !ParseNaturalNumber(fields[2], &index)
-      || !ParseNaturalNumber(fields[3], &write_fd)) {
-    DeathTestAbort(String::Format(
-        "Bad --gtest_internal_run_death_test flag: %s",
-        GTEST_FLAG(internal_run_death_test).c_str()));
-  }
-
-# endif  // GTEST_OS_WINDOWS
-
-  return new InternalRunDeathTestFlag(fields[0], line, index, write_fd);
-}
-
-}  // namespace internal
-
-#endif  // GTEST_HAS_DEATH_TEST
-
-}  // namespace testing
diff --git a/src/libs_3rdparty/gtest/src/src/gtest-filepath.cc b/src/libs_3rdparty/gtest/src/src/gtest-filepath.cc
deleted file mode 100644
index 91b2571..0000000
--- a/src/libs_3rdparty/gtest/src/src/gtest-filepath.cc
+++ /dev/null
@@ -1,380 +0,0 @@
-// Copyright 2008, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Authors: keith.ray at gmail.com (Keith Ray)
-
-#include "gtest/internal/gtest-filepath.h"
-#include "gtest/internal/gtest-port.h"
-
-#include <stdlib.h>
-
-#if GTEST_OS_WINDOWS_MOBILE
-# include <windows.h>
-#elif GTEST_OS_WINDOWS
-# include <direct.h>
-# include <io.h>
-#elif GTEST_OS_SYMBIAN || GTEST_OS_NACL
-// Symbian OpenC and NaCl have PATH_MAX in sys/syslimits.h
-# include <sys/syslimits.h>
-#else
-# include <limits.h>
-# include <climits>  // Some Linux distributions define PATH_MAX here.
-#endif  // GTEST_OS_WINDOWS_MOBILE
-
-#if GTEST_OS_WINDOWS
-# define GTEST_PATH_MAX_ _MAX_PATH
-#elif defined(PATH_MAX)
-# define GTEST_PATH_MAX_ PATH_MAX
-#elif defined(_XOPEN_PATH_MAX)
-# define GTEST_PATH_MAX_ _XOPEN_PATH_MAX
-#else
-# define GTEST_PATH_MAX_ _POSIX_PATH_MAX
-#endif  // GTEST_OS_WINDOWS
-
-#include "gtest/internal/gtest-string.h"
-
-namespace testing {
-namespace internal {
-
-#if GTEST_OS_WINDOWS
-// On Windows, '\\' is the standard path separator, but many tools and the
-// Windows API also accept '/' as an alternate path separator. Unless otherwise
-// noted, a file path can contain either kind of path separators, or a mixture
-// of them.
-const char kPathSeparator = '\\';
-const char kAlternatePathSeparator = '/';
-const char kPathSeparatorString[] = "\\";
-const char kAlternatePathSeparatorString[] = "/";
-# if GTEST_OS_WINDOWS_MOBILE
-// Windows CE doesn't have a current directory. You should not use
-// the current directory in tests on Windows CE, but this at least
-// provides a reasonable fallback.
-const char kCurrentDirectoryString[] = "\\";
-// Windows CE doesn't define INVALID_FILE_ATTRIBUTES
-const DWORD kInvalidFileAttributes = 0xffffffff;
-# else
-const char kCurrentDirectoryString[] = ".\\";
-# endif  // GTEST_OS_WINDOWS_MOBILE
-#else
-const char kPathSeparator = '/';
-const char kPathSeparatorString[] = "/";
-const char kCurrentDirectoryString[] = "./";
-#endif  // GTEST_OS_WINDOWS
-
-// Returns whether the given character is a valid path separator.
-static bool IsPathSeparator(char c) {
-#if GTEST_HAS_ALT_PATH_SEP_
-  return (c == kPathSeparator) || (c == kAlternatePathSeparator);
-#else
-  return c == kPathSeparator;
-#endif
-}
-
-// Returns the current working directory, or "" if unsuccessful.
-FilePath FilePath::GetCurrentDir() {
-#if GTEST_OS_WINDOWS_MOBILE
-  // Windows CE doesn't have a current directory, so we just return
-  // something reasonable.
-  return FilePath(kCurrentDirectoryString);
-#elif GTEST_OS_WINDOWS
-  char cwd[GTEST_PATH_MAX_ + 1] = { '\0' };
-  return FilePath(_getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd);
-#else
-  char cwd[GTEST_PATH_MAX_ + 1] = { '\0' };
-  return FilePath(getcwd(cwd, sizeof(cwd)) == NULL ? "" : cwd);
-#endif  // GTEST_OS_WINDOWS_MOBILE
-}
-
-// Returns a copy of the FilePath with the case-insensitive extension removed.
-// Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns
-// FilePath("dir/file"). If a case-insensitive extension is not
-// found, returns a copy of the original FilePath.
-FilePath FilePath::RemoveExtension(const char* extension) const {
-  String dot_extension(String::Format(".%s", extension));
-  if (pathname_.EndsWithCaseInsensitive(dot_extension.c_str())) {
-    return FilePath(String(pathname_.c_str(), pathname_.length() - 4));
-  }
-  return *this;
-}
-
-// Returns a pointer to the last occurence of a valid path separator in
-// the FilePath. On Windows, for example, both '/' and '\' are valid path
-// separators. Returns NULL if no path separator was found.
-const char* FilePath::FindLastPathSeparator() const {
-  const char* const last_sep = strrchr(c_str(), kPathSeparator);
-#if GTEST_HAS_ALT_PATH_SEP_
-  const char* const last_alt_sep = strrchr(c_str(), kAlternatePathSeparator);
-  // Comparing two pointers of which only one is NULL is undefined.
-  if (last_alt_sep != NULL &&
-      (last_sep == NULL || last_alt_sep > last_sep)) {
-    return last_alt_sep;
-  }
-#endif
-  return last_sep;
-}
-
-// Returns a copy of the FilePath with the directory part removed.
-// Example: FilePath("path/to/file").RemoveDirectoryName() returns
-// FilePath("file"). If there is no directory part ("just_a_file"), it returns
-// the FilePath unmodified. If there is no file part ("just_a_dir/") it
-// returns an empty FilePath ("").
-// On Windows platform, '\' is the path separator, otherwise it is '/'.
-FilePath FilePath::RemoveDirectoryName() const {
-  const char* const last_sep = FindLastPathSeparator();
-  return last_sep ? FilePath(String(last_sep + 1)) : *this;
-}
-
-// RemoveFileName returns the directory path with the filename removed.
-// Example: FilePath("path/to/file").RemoveFileName() returns "path/to/".
-// If the FilePath is "a_file" or "/a_file", RemoveFileName returns
-// FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does
-// not have a file, like "just/a/dir/", it returns the FilePath unmodified.
-// On Windows platform, '\' is the path separator, otherwise it is '/'.
-FilePath FilePath::RemoveFileName() const {
-  const char* const last_sep = FindLastPathSeparator();
-  String dir;
-  if (last_sep) {
-    dir = String(c_str(), last_sep + 1 - c_str());
-  } else {
-    dir = kCurrentDirectoryString;
-  }
-  return FilePath(dir);
-}
-
-// Helper functions for naming files in a directory for xml output.
-
-// Given directory = "dir", base_name = "test", number = 0,
-// extension = "xml", returns "dir/test.xml". If number is greater
-// than zero (e.g., 12), returns "dir/test_12.xml".
-// On Windows platform, uses \ as the separator rather than /.
-FilePath FilePath::MakeFileName(const FilePath& directory,
-                                const FilePath& base_name,
-                                int number,
-                                const char* extension) {
-  String file;
-  if (number == 0) {
-    file = String::Format("%s.%s", base_name.c_str(), extension);
-  } else {
-    file = String::Format("%s_%d.%s", base_name.c_str(), number, extension);
-  }
-  return ConcatPaths(directory, FilePath(file));
-}
-
-// Given directory = "dir", relative_path = "test.xml", returns "dir/test.xml".
-// On Windows, uses \ as the separator rather than /.
-FilePath FilePath::ConcatPaths(const FilePath& directory,
-                               const FilePath& relative_path) {
-  if (directory.IsEmpty())
-    return relative_path;
-  const FilePath dir(directory.RemoveTrailingPathSeparator());
-  return FilePath(String::Format("%s%c%s", dir.c_str(), kPathSeparator,
-                                 relative_path.c_str()));
-}
-
-// Returns true if pathname describes something findable in the file-system,
-// either a file, directory, or whatever.
-bool FilePath::FileOrDirectoryExists() const {
-#if GTEST_OS_WINDOWS_MOBILE
-  LPCWSTR unicode = String::AnsiToUtf16(pathname_.c_str());
-  const DWORD attributes = GetFileAttributes(unicode);
-  delete [] unicode;
-  return attributes != kInvalidFileAttributes;
-#else
-  posix::StatStruct file_stat;
-  return posix::Stat(pathname_.c_str(), &file_stat) == 0;
-#endif  // GTEST_OS_WINDOWS_MOBILE
-}
-
-// Returns true if pathname describes a directory in the file-system
-// that exists.
-bool FilePath::DirectoryExists() const {
-  bool result = false;
-#if GTEST_OS_WINDOWS
-  // Don't strip off trailing separator if path is a root directory on
-  // Windows (like "C:\\").
-  const FilePath& path(IsRootDirectory() ? *this :
-                                           RemoveTrailingPathSeparator());
-#else
-  const FilePath& path(*this);
-#endif
-
-#if GTEST_OS_WINDOWS_MOBILE
-  LPCWSTR unicode = String::AnsiToUtf16(path.c_str());
-  const DWORD attributes = GetFileAttributes(unicode);
-  delete [] unicode;
-  if ((attributes != kInvalidFileAttributes) &&
-      (attributes & FILE_ATTRIBUTE_DIRECTORY)) {
-    result = true;
-  }
-#else
-  posix::StatStruct file_stat;
-  result = posix::Stat(path.c_str(), &file_stat) == 0 &&
-      posix::IsDir(file_stat);
-#endif  // GTEST_OS_WINDOWS_MOBILE
-
-  return result;
-}
-
-// Returns true if pathname describes a root directory. (Windows has one
-// root directory per disk drive.)
-bool FilePath::IsRootDirectory() const {
-#if GTEST_OS_WINDOWS
-  // TODO(wan at google.com): on Windows a network share like
-  // \\server\share can be a root directory, although it cannot be the
-  // current directory.  Handle this properly.
-  return pathname_.length() == 3 && IsAbsolutePath();
-#else
-  return pathname_.length() == 1 && IsPathSeparator(pathname_.c_str()[0]);
-#endif
-}
-
-// Returns true if pathname describes an absolute path.
-bool FilePath::IsAbsolutePath() const {
-  const char* const name = pathname_.c_str();
-#if GTEST_OS_WINDOWS
-  return pathname_.length() >= 3 &&
-     ((name[0] >= 'a' && name[0] <= 'z') ||
-      (name[0] >= 'A' && name[0] <= 'Z')) &&
-     name[1] == ':' &&
-     IsPathSeparator(name[2]);
-#else
-  return IsPathSeparator(name[0]);
-#endif
-}
-
-// Returns a pathname for a file that does not currently exist. The pathname
-// will be directory/base_name.extension or
-// directory/base_name_<number>.extension if directory/base_name.extension
-// already exists. The number will be incremented until a pathname is found
-// that does not already exist.
-// Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'.
-// There could be a race condition if two or more processes are calling this
-// function at the same time -- they could both pick the same filename.
-FilePath FilePath::GenerateUniqueFileName(const FilePath& directory,
-                                          const FilePath& base_name,
-                                          const char* extension) {
-  FilePath full_pathname;
-  int number = 0;
-  do {
-    full_pathname.Set(MakeFileName(directory, base_name, number++, extension));
-  } while (full_pathname.FileOrDirectoryExists());
-  return full_pathname;
-}
-
-// Returns true if FilePath ends with a path separator, which indicates that
-// it is intended to represent a directory. Returns false otherwise.
-// This does NOT check that a directory (or file) actually exists.
-bool FilePath::IsDirectory() const {
-  return !pathname_.empty() &&
-         IsPathSeparator(pathname_.c_str()[pathname_.length() - 1]);
-}
-
-// Create directories so that path exists. Returns true if successful or if
-// the directories already exist; returns false if unable to create directories
-// for any reason.
-bool FilePath::CreateDirectoriesRecursively() const {
-  if (!this->IsDirectory()) {
-    return false;
-  }
-
-  if (pathname_.length() == 0 || this->DirectoryExists()) {
-    return true;
-  }
-
-  const FilePath parent(this->RemoveTrailingPathSeparator().RemoveFileName());
-  return parent.CreateDirectoriesRecursively() && this->CreateFolder();
-}
-
-// Create the directory so that path exists. Returns true if successful or
-// if the directory already exists; returns false if unable to create the
-// directory for any reason, including if the parent directory does not
-// exist. Not named "CreateDirectory" because that's a macro on Windows.
-bool FilePath::CreateFolder() const {
-#if GTEST_OS_WINDOWS_MOBILE
-  FilePath removed_sep(this->RemoveTrailingPathSeparator());
-  LPCWSTR unicode = String::AnsiToUtf16(removed_sep.c_str());
-  int result = CreateDirectory(unicode, NULL) ? 0 : -1;
-  delete [] unicode;
-#elif GTEST_OS_WINDOWS
-  int result = _mkdir(pathname_.c_str());
-#else
-  int result = mkdir(pathname_.c_str(), 0777);
-#endif  // GTEST_OS_WINDOWS_MOBILE
-
-  if (result == -1) {
-    return this->DirectoryExists();  // An error is OK if the directory exists.
-  }
-  return true;  // No error.
-}
-
-// If input name has a trailing separator character, remove it and return the
-// name, otherwise return the name string unmodified.
-// On Windows platform, uses \ as the separator, other platforms use /.
-FilePath FilePath::RemoveTrailingPathSeparator() const {
-  return IsDirectory()
-      ? FilePath(String(pathname_.c_str(), pathname_.length() - 1))
-      : *this;
-}
-
-// Removes any redundant separators that might be in the pathname.
-// For example, "bar///foo" becomes "bar/foo". Does not eliminate other
-// redundancies that might be in a pathname involving "." or "..".
-// TODO(wan at google.com): handle Windows network shares (e.g. \\server\share).
-void FilePath::Normalize() {
-  if (pathname_.c_str() == NULL) {
-    pathname_ = "";
-    return;
-  }
-  const char* src = pathname_.c_str();
-  char* const dest = new char[pathname_.length() + 1];
-  char* dest_ptr = dest;
-  memset(dest_ptr, 0, pathname_.length() + 1);
-
-  while (*src != '\0') {
-    *dest_ptr = *src;
-    if (!IsPathSeparator(*src)) {
-      src++;
-    } else {
-#if GTEST_HAS_ALT_PATH_SEP_
-      if (*dest_ptr == kAlternatePathSeparator) {
-        *dest_ptr = kPathSeparator;
-      }
-#endif
-      while (IsPathSeparator(*src))
-        src++;
-    }
-    dest_ptr++;
-  }
-  *dest_ptr = '\0';
-  pathname_ = dest;
-  delete[] dest;
-}
-
-}  // namespace internal
-}  // namespace testing
diff --git a/src/libs_3rdparty/gtest/src/src/gtest-internal-inl.h b/src/libs_3rdparty/gtest/src/src/gtest-internal-inl.h
deleted file mode 100644
index 65a2101..0000000
--- a/src/libs_3rdparty/gtest/src/src/gtest-internal-inl.h
+++ /dev/null
@@ -1,1038 +0,0 @@
-// Copyright 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-
-// Utility functions and classes used by the Google C++ testing framework.
-//
-// Author: wan at google.com (Zhanyong Wan)
-//
-// This file contains purely Google Test's internal implementation.  Please
-// DO NOT #INCLUDE IT IN A USER PROGRAM.
-
-#ifndef GTEST_SRC_GTEST_INTERNAL_INL_H_
-#define GTEST_SRC_GTEST_INTERNAL_INL_H_
-
-// GTEST_IMPLEMENTATION_ is defined to 1 iff the current translation unit is
-// part of Google Test's implementation; otherwise it's undefined.
-#if !GTEST_IMPLEMENTATION_
-// A user is trying to include this from his code - just say no.
-# error "gtest-internal-inl.h is part of Google Test's internal implementation."
-# error "It must not be included except by Google Test itself."
-#endif  // GTEST_IMPLEMENTATION_
-
-#ifndef _WIN32_WCE
-# include <errno.h>
-#endif  // !_WIN32_WCE
-#include <stddef.h>
-#include <stdlib.h>  // For strtoll/_strtoul64/malloc/free.
-#include <string.h>  // For memmove.
-
-#include <algorithm>
-#include <string>
-#include <vector>
-
-#include "gtest/internal/gtest-port.h"
-
-#if GTEST_OS_WINDOWS
-# include <windows.h>  // NOLINT
-#endif  // GTEST_OS_WINDOWS
-
-#include "gtest/gtest.h"  // NOLINT
-#include "gtest/gtest-spi.h"
-
-namespace testing {
-
-// Declares the flags.
-//
-// We don't want the users to modify this flag in the code, but want
-// Google Test's own unit tests to be able to access it. Therefore we
-// declare it here as opposed to in gtest.h.
-GTEST_DECLARE_bool_(death_test_use_fork);
-
-namespace internal {
-
-// The value of GetTestTypeId() as seen from within the Google Test
-// library.  This is solely for testing GetTestTypeId().
-GTEST_API_ extern const TypeId kTestTypeIdInGoogleTest;
-
-// Names of the flags (needed for parsing Google Test flags).
-const char kAlsoRunDisabledTestsFlag[] = "also_run_disabled_tests";
-const char kBreakOnFailureFlag[] = "break_on_failure";
-const char kCatchExceptionsFlag[] = "catch_exceptions";
-const char kColorFlag[] = "color";
-const char kFilterFlag[] = "filter";
-const char kListTestsFlag[] = "list_tests";
-const char kOutputFlag[] = "output";
-const char kPrintTimeFlag[] = "print_time";
-const char kRandomSeedFlag[] = "random_seed";
-const char kRepeatFlag[] = "repeat";
-const char kShuffleFlag[] = "shuffle";
-const char kStackTraceDepthFlag[] = "stack_trace_depth";
-const char kStreamResultToFlag[] = "stream_result_to";
-const char kThrowOnFailureFlag[] = "throw_on_failure";
-
-// A valid random seed must be in [1, kMaxRandomSeed].
-const int kMaxRandomSeed = 99999;
-
-// g_help_flag is true iff the --help flag or an equivalent form is
-// specified on the command line.
-GTEST_API_ extern bool g_help_flag;
-
-// Returns the current time in milliseconds.
-GTEST_API_ TimeInMillis GetTimeInMillis();
-
-// Returns true iff Google Test should use colors in the output.
-GTEST_API_ bool ShouldUseColor(bool stdout_is_tty);
-
-// Formats the given time in milliseconds as seconds.
-GTEST_API_ std::string FormatTimeInMillisAsSeconds(TimeInMillis ms);
-
-// Parses a string for an Int32 flag, in the form of "--flag=value".
-//
-// On success, stores the value of the flag in *value, and returns
-// true.  On failure, returns false without changing *value.
-GTEST_API_ bool ParseInt32Flag(
-    const char* str, const char* flag, Int32* value);
-
-// Returns a random seed in range [1, kMaxRandomSeed] based on the
-// given --gtest_random_seed flag value.
-inline int GetRandomSeedFromFlag(Int32 random_seed_flag) {
-  const unsigned int raw_seed = (random_seed_flag == 0) ?
-      static_cast<unsigned int>(GetTimeInMillis()) :
-      static_cast<unsigned int>(random_seed_flag);
-
-  // Normalizes the actual seed to range [1, kMaxRandomSeed] such that
-  // it's easy to type.
-  const int normalized_seed =
-      static_cast<int>((raw_seed - 1U) %
-                       static_cast<unsigned int>(kMaxRandomSeed)) + 1;
-  return normalized_seed;
-}
-
-// Returns the first valid random seed after 'seed'.  The behavior is
-// undefined if 'seed' is invalid.  The seed after kMaxRandomSeed is
-// considered to be 1.
-inline int GetNextRandomSeed(int seed) {
-  GTEST_CHECK_(1 <= seed && seed <= kMaxRandomSeed)
-      << "Invalid random seed " << seed << " - must be in [1, "
-      << kMaxRandomSeed << "].";
-  const int next_seed = seed + 1;
-  return (next_seed > kMaxRandomSeed) ? 1 : next_seed;
-}
-
-// This class saves the values of all Google Test flags in its c'tor, and
-// restores them in its d'tor.
-class GTestFlagSaver {
- public:
-  // The c'tor.
-  GTestFlagSaver() {
-    also_run_disabled_tests_ = GTEST_FLAG(also_run_disabled_tests);
-    break_on_failure_ = GTEST_FLAG(break_on_failure);
-    catch_exceptions_ = GTEST_FLAG(catch_exceptions);
-    color_ = GTEST_FLAG(color);
-    death_test_style_ = GTEST_FLAG(death_test_style);
-    death_test_use_fork_ = GTEST_FLAG(death_test_use_fork);
-    filter_ = GTEST_FLAG(filter);
-    internal_run_death_test_ = GTEST_FLAG(internal_run_death_test);
-    list_tests_ = GTEST_FLAG(list_tests);
-    output_ = GTEST_FLAG(output);
-    print_time_ = GTEST_FLAG(print_time);
-    random_seed_ = GTEST_FLAG(random_seed);
-    repeat_ = GTEST_FLAG(repeat);
-    shuffle_ = GTEST_FLAG(shuffle);
-    stack_trace_depth_ = GTEST_FLAG(stack_trace_depth);
-    stream_result_to_ = GTEST_FLAG(stream_result_to);
-    throw_on_failure_ = GTEST_FLAG(throw_on_failure);
-  }
-
-  // The d'tor is not virtual.  DO NOT INHERIT FROM THIS CLASS.
-  ~GTestFlagSaver() {
-    GTEST_FLAG(also_run_disabled_tests) = also_run_disabled_tests_;
-    GTEST_FLAG(break_on_failure) = break_on_failure_;
-    GTEST_FLAG(catch_exceptions) = catch_exceptions_;
-    GTEST_FLAG(color) = color_;
-    GTEST_FLAG(death_test_style) = death_test_style_;
-    GTEST_FLAG(death_test_use_fork) = death_test_use_fork_;
-    GTEST_FLAG(filter) = filter_;
-    GTEST_FLAG(internal_run_death_test) = internal_run_death_test_;
-    GTEST_FLAG(list_tests) = list_tests_;
-    GTEST_FLAG(output) = output_;
-    GTEST_FLAG(print_time) = print_time_;
-    GTEST_FLAG(random_seed) = random_seed_;
-    GTEST_FLAG(repeat) = repeat_;
-    GTEST_FLAG(shuffle) = shuffle_;
-    GTEST_FLAG(stack_trace_depth) = stack_trace_depth_;
-    GTEST_FLAG(stream_result_to) = stream_result_to_;
-    GTEST_FLAG(throw_on_failure) = throw_on_failure_;
-  }
- private:
-  // Fields for saving the original values of flags.
-  bool also_run_disabled_tests_;
-  bool break_on_failure_;
-  bool catch_exceptions_;
-  String color_;
-  String death_test_style_;
-  bool death_test_use_fork_;
-  String filter_;
-  String internal_run_death_test_;
-  bool list_tests_;
-  String output_;
-  bool print_time_;
-  bool pretty_;
-  internal::Int32 random_seed_;
-  internal::Int32 repeat_;
-  bool shuffle_;
-  internal::Int32 stack_trace_depth_;
-  String stream_result_to_;
-  bool throw_on_failure_;
-} GTEST_ATTRIBUTE_UNUSED_;
-
-// Converts a Unicode code point to a narrow string in UTF-8 encoding.
-// code_point parameter is of type UInt32 because wchar_t may not be
-// wide enough to contain a code point.
-// The output buffer str must containt at least 32 characters.
-// The function returns the address of the output buffer.
-// If the code_point is not a valid Unicode code point
-// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be output
-// as '(Invalid Unicode 0xXXXXXXXX)'.
-GTEST_API_ char* CodePointToUtf8(UInt32 code_point, char* str);
-
-// Converts a wide string to a narrow string in UTF-8 encoding.
-// The wide string is assumed to have the following encoding:
-//   UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS)
-//   UTF-32 if sizeof(wchar_t) == 4 (on Linux)
-// Parameter str points to a null-terminated wide string.
-// Parameter num_chars may additionally limit the number
-// of wchar_t characters processed. -1 is used when the entire string
-// should be processed.
-// If the string contains code points that are not valid Unicode code points
-// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output
-// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding
-// and contains invalid UTF-16 surrogate pairs, values in those pairs
-// will be encoded as individual Unicode characters from Basic Normal Plane.
-GTEST_API_ String WideStringToUtf8(const wchar_t* str, int num_chars);
-
-// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file
-// if the variable is present. If a file already exists at this location, this
-// function will write over it. If the variable is present, but the file cannot
-// be created, prints an error and exits.
-void WriteToShardStatusFileIfNeeded();
-
-// Checks whether sharding is enabled by examining the relevant
-// environment variable values. If the variables are present,
-// but inconsistent (e.g., shard_index >= total_shards), prints
-// an error and exits. If in_subprocess_for_death_test, sharding is
-// disabled because it must only be applied to the original test
-// process. Otherwise, we could filter out death tests we intended to execute.
-GTEST_API_ bool ShouldShard(const char* total_shards_str,
-                            const char* shard_index_str,
-                            bool in_subprocess_for_death_test);
-
-// Parses the environment variable var as an Int32. If it is unset,
-// returns default_val. If it is not an Int32, prints an error and
-// and aborts.
-GTEST_API_ Int32 Int32FromEnvOrDie(const char* env_var, Int32 default_val);
-
-// Given the total number of shards, the shard index, and the test id,
-// returns true iff the test should be run on this shard. The test id is
-// some arbitrary but unique non-negative integer assigned to each test
-// method. Assumes that 0 <= shard_index < total_shards.
-GTEST_API_ bool ShouldRunTestOnShard(
-    int total_shards, int shard_index, int test_id);
-
-// STL container utilities.
-
-// Returns the number of elements in the given container that satisfy
-// the given predicate.
-template <class Container, typename Predicate>
-inline int CountIf(const Container& c, Predicate predicate) {
-  // Implemented as an explicit loop since std::count_if() in libCstd on
-  // Solaris has a non-standard signature.
-  int count = 0;
-  for (typename Container::const_iterator it = c.begin(); it != c.end(); ++it) {
-    if (predicate(*it))
-      ++count;
-  }
-  return count;
-}
-
-// Applies a function/functor to each element in the container.
-template <class Container, typename Functor>
-void ForEach(const Container& c, Functor functor) {
-  std::for_each(c.begin(), c.end(), functor);
-}
-
-// Returns the i-th element of the vector, or default_value if i is not
-// in range [0, v.size()).
-template <typename E>
-inline E GetElementOr(const std::vector<E>& v, int i, E default_value) {
-  return (i < 0 || i >= static_cast<int>(v.size())) ? default_value : v[i];
-}
-
-// Performs an in-place shuffle of a range of the vector's elements.
-// 'begin' and 'end' are element indices as an STL-style range;
-// i.e. [begin, end) are shuffled, where 'end' == size() means to
-// shuffle to the end of the vector.
-template <typename E>
-void ShuffleRange(internal::Random* random, int begin, int end,
-                  std::vector<E>* v) {
-  const int size = static_cast<int>(v->size());
-  GTEST_CHECK_(0 <= begin && begin <= size)
-      << "Invalid shuffle range start " << begin << ": must be in range [0, "
-      << size << "].";
-  GTEST_CHECK_(begin <= end && end <= size)
-      << "Invalid shuffle range finish " << end << ": must be in range ["
-      << begin << ", " << size << "].";
-
-  // Fisher-Yates shuffle, from
-  // http://en.wikipedia.org/wiki/Fisher-Yates_shuffle
-  for (int range_width = end - begin; range_width >= 2; range_width--) {
-    const int last_in_range = begin + range_width - 1;
-    const int selected = begin + random->Generate(range_width);
-    std::swap((*v)[selected], (*v)[last_in_range]);
-  }
-}
-
-// Performs an in-place shuffle of the vector's elements.
-template <typename E>
-inline void Shuffle(internal::Random* random, std::vector<E>* v) {
-  ShuffleRange(random, 0, static_cast<int>(v->size()), v);
-}
-
-// A function for deleting an object.  Handy for being used as a
-// functor.
-template <typename T>
-static void Delete(T* x) {
-  delete x;
-}
-
-// A predicate that checks the key of a TestProperty against a known key.
-//
-// TestPropertyKeyIs is copyable.
-class TestPropertyKeyIs {
- public:
-  // Constructor.
-  //
-  // TestPropertyKeyIs has NO default constructor.
-  explicit TestPropertyKeyIs(const char* key)
-      : key_(key) {}
-
-  // Returns true iff the test name of test property matches on key_.
-  bool operator()(const TestProperty& test_property) const {
-    return String(test_property.key()).Compare(key_) == 0;
-  }
-
- private:
-  String key_;
-};
-
-// Class UnitTestOptions.
-//
-// This class contains functions for processing options the user
-// specifies when running the tests.  It has only static members.
-//
-// In most cases, the user can specify an option using either an
-// environment variable or a command line flag.  E.g. you can set the
-// test filter using either GTEST_FILTER or --gtest_filter.  If both
-// the variable and the flag are present, the latter overrides the
-// former.
-class GTEST_API_ UnitTestOptions {
- public:
-  // Functions for processing the gtest_output flag.
-
-  // Returns the output format, or "" for normal printed output.
-  static String GetOutputFormat();
-
-  // Returns the absolute path of the requested output file, or the
-  // default (test_detail.xml in the original working directory) if
-  // none was explicitly specified.
-  static String GetAbsolutePathToOutputFile();
-
-  // Functions for processing the gtest_filter flag.
-
-  // Returns true iff the wildcard pattern matches the string.  The
-  // first ':' or '\0' character in pattern marks the end of it.
-  //
-  // This recursive algorithm isn't very efficient, but is clear and
-  // works well enough for matching test names, which are short.
-  static bool PatternMatchesString(const char *pattern, const char *str);
-
-  // Returns true iff the user-specified filter matches the test case
-  // name and the test name.
-  static bool FilterMatchesTest(const String &test_case_name,
-                                const String &test_name);
-
-#if GTEST_OS_WINDOWS
-  // Function for supporting the gtest_catch_exception flag.
-
-  // Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the
-  // given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise.
-  // This function is useful as an __except condition.
-  static int GTestShouldProcessSEH(DWORD exception_code);
-#endif  // GTEST_OS_WINDOWS
-
-  // Returns true if "name" matches the ':' separated list of glob-style
-  // filters in "filter".
-  static bool MatchesFilter(const String& name, const char* filter);
-};
-
-// Returns the current application's name, removing directory path if that
-// is present.  Used by UnitTestOptions::GetOutputFile.
-GTEST_API_ FilePath GetCurrentExecutableName();
-
-// The role interface for getting the OS stack trace as a string.
-class OsStackTraceGetterInterface {
- public:
-  OsStackTraceGetterInterface() {}
-  virtual ~OsStackTraceGetterInterface() {}
-
-  // Returns the current OS stack trace as a String.  Parameters:
-  //
-  //   max_depth  - the maximum number of stack frames to be included
-  //                in the trace.
-  //   skip_count - the number of top frames to be skipped; doesn't count
-  //                against max_depth.
-  virtual String CurrentStackTrace(int max_depth, int skip_count) = 0;
-
-  // UponLeavingGTest() should be called immediately before Google Test calls
-  // user code. It saves some information about the current stack that
-  // CurrentStackTrace() will use to find and hide Google Test stack frames.
-  virtual void UponLeavingGTest() = 0;
-
- private:
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetterInterface);
-};
-
-// A working implementation of the OsStackTraceGetterInterface interface.
-class OsStackTraceGetter : public OsStackTraceGetterInterface {
- public:
-  OsStackTraceGetter() : caller_frame_(NULL) {}
-  virtual String CurrentStackTrace(int max_depth, int skip_count);
-  virtual void UponLeavingGTest();
-
-  // This string is inserted in place of stack frames that are part of
-  // Google Test's implementation.
-  static const char* const kElidedFramesMarker;
-
- private:
-  Mutex mutex_;  // protects all internal state
-
-  // We save the stack frame below the frame that calls user code.
-  // We do this because the address of the frame immediately below
-  // the user code changes between the call to UponLeavingGTest()
-  // and any calls to CurrentStackTrace() from within the user code.
-  void* caller_frame_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(OsStackTraceGetter);
-};
-
-// Information about a Google Test trace point.
-struct TraceInfo {
-  const char* file;
-  int line;
-  String message;
-};
-
-// This is the default global test part result reporter used in UnitTestImpl.
-// This class should only be used by UnitTestImpl.
-class DefaultGlobalTestPartResultReporter
-  : public TestPartResultReporterInterface {
- public:
-  explicit DefaultGlobalTestPartResultReporter(UnitTestImpl* unit_test);
-  // Implements the TestPartResultReporterInterface. Reports the test part
-  // result in the current test.
-  virtual void ReportTestPartResult(const TestPartResult& result);
-
- private:
-  UnitTestImpl* const unit_test_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultGlobalTestPartResultReporter);
-};
-
-// This is the default per thread test part result reporter used in
-// UnitTestImpl. This class should only be used by UnitTestImpl.
-class DefaultPerThreadTestPartResultReporter
-    : public TestPartResultReporterInterface {
- public:
-  explicit DefaultPerThreadTestPartResultReporter(UnitTestImpl* unit_test);
-  // Implements the TestPartResultReporterInterface. The implementation just
-  // delegates to the current global test part result reporter of *unit_test_.
-  virtual void ReportTestPartResult(const TestPartResult& result);
-
- private:
-  UnitTestImpl* const unit_test_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(DefaultPerThreadTestPartResultReporter);
-};
-
-// The private implementation of the UnitTest class.  We don't protect
-// the methods under a mutex, as this class is not accessible by a
-// user and the UnitTest class that delegates work to this class does
-// proper locking.
-class GTEST_API_ UnitTestImpl {
- public:
-  explicit UnitTestImpl(UnitTest* parent);
-  virtual ~UnitTestImpl();
-
-  // There are two different ways to register your own TestPartResultReporter.
-  // You can register your own repoter to listen either only for test results
-  // from the current thread or for results from all threads.
-  // By default, each per-thread test result repoter just passes a new
-  // TestPartResult to the global test result reporter, which registers the
-  // test part result for the currently running test.
-
-  // Returns the global test part result reporter.
-  TestPartResultReporterInterface* GetGlobalTestPartResultReporter();
-
-  // Sets the global test part result reporter.
-  void SetGlobalTestPartResultReporter(
-      TestPartResultReporterInterface* reporter);
-
-  // Returns the test part result reporter for the current thread.
-  TestPartResultReporterInterface* GetTestPartResultReporterForCurrentThread();
-
-  // Sets the test part result reporter for the current thread.
-  void SetTestPartResultReporterForCurrentThread(
-      TestPartResultReporterInterface* reporter);
-
-  // Gets the number of successful test cases.
-  int successful_test_case_count() const;
-
-  // Gets the number of failed test cases.
-  int failed_test_case_count() const;
-
-  // Gets the number of all test cases.
-  int total_test_case_count() const;
-
-  // Gets the number of all test cases that contain at least one test
-  // that should run.
-  int test_case_to_run_count() const;
-
-  // Gets the number of successful tests.
-  int successful_test_count() const;
-
-  // Gets the number of failed tests.
-  int failed_test_count() const;
-
-  // Gets the number of disabled tests.
-  int disabled_test_count() const;
-
-  // Gets the number of all tests.
-  int total_test_count() const;
-
-  // Gets the number of tests that should run.
-  int test_to_run_count() const;
-
-  // Gets the elapsed time, in milliseconds.
-  TimeInMillis elapsed_time() const { return elapsed_time_; }
-
-  // Returns true iff the unit test passed (i.e. all test cases passed).
-  bool Passed() const { return !Failed(); }
-
-  // Returns true iff the unit test failed (i.e. some test case failed
-  // or something outside of all tests failed).
-  bool Failed() const {
-    return failed_test_case_count() > 0 || ad_hoc_test_result()->Failed();
-  }
-
-  // Gets the i-th test case among all the test cases. i can range from 0 to
-  // total_test_case_count() - 1. If i is not in that range, returns NULL.
-  const TestCase* GetTestCase(int i) const {
-    const int index = GetElementOr(test_case_indices_, i, -1);
-    return index < 0 ? NULL : test_cases_[i];
-  }
-
-  // Gets the i-th test case among all the test cases. i can range from 0 to
-  // total_test_case_count() - 1. If i is not in that range, returns NULL.
-  TestCase* GetMutableTestCase(int i) {
-    const int index = GetElementOr(test_case_indices_, i, -1);
-    return index < 0 ? NULL : test_cases_[index];
-  }
-
-  // Provides access to the event listener list.
-  TestEventListeners* listeners() { return &listeners_; }
-
-  // Returns the TestResult for the test that's currently running, or
-  // the TestResult for the ad hoc test if no test is running.
-  TestResult* current_test_result();
-
-  // Returns the TestResult for the ad hoc test.
-  const TestResult* ad_hoc_test_result() const { return &ad_hoc_test_result_; }
-
-  // Sets the OS stack trace getter.
-  //
-  // Does nothing if the input and the current OS stack trace getter
-  // are the same; otherwise, deletes the old getter and makes the
-  // input the current getter.
-  void set_os_stack_trace_getter(OsStackTraceGetterInterface* getter);
-
-  // Returns the current OS stack trace getter if it is not NULL;
-  // otherwise, creates an OsStackTraceGetter, makes it the current
-  // getter, and returns it.
-  OsStackTraceGetterInterface* os_stack_trace_getter();
-
-  // Returns the current OS stack trace as a String.
-  //
-  // The maximum number of stack frames to be included is specified by
-  // the gtest_stack_trace_depth flag.  The skip_count parameter
-  // specifies the number of top frames to be skipped, which doesn't
-  // count against the number of frames to be included.
-  //
-  // For example, if Foo() calls Bar(), which in turn calls
-  // CurrentOsStackTraceExceptTop(1), Foo() will be included in the
-  // trace but Bar() and CurrentOsStackTraceExceptTop() won't.
-  String CurrentOsStackTraceExceptTop(int skip_count);
-
-  // Finds and returns a TestCase with the given name.  If one doesn't
-  // exist, creates one and returns it.
-  //
-  // Arguments:
-  //
-  //   test_case_name: name of the test case
-  //   type_param:     the name of the test's type parameter, or NULL if
-  //                   this is not a typed or a type-parameterized test.
-  //   set_up_tc:      pointer to the function that sets up the test case
-  //   tear_down_tc:   pointer to the function that tears down the test case
-  TestCase* GetTestCase(const char* test_case_name,
-                        const char* type_param,
-                        Test::SetUpTestCaseFunc set_up_tc,
-                        Test::TearDownTestCaseFunc tear_down_tc);
-
-  // Adds a TestInfo to the unit test.
-  //
-  // Arguments:
-  //
-  //   set_up_tc:    pointer to the function that sets up the test case
-  //   tear_down_tc: pointer to the function that tears down the test case
-  //   test_info:    the TestInfo object
-  void AddTestInfo(Test::SetUpTestCaseFunc set_up_tc,
-                   Test::TearDownTestCaseFunc tear_down_tc,
-                   TestInfo* test_info) {
-    // In order to support thread-safe death tests, we need to
-    // remember the original working directory when the test program
-    // was first invoked.  We cannot do this in RUN_ALL_TESTS(), as
-    // the user may have changed the current directory before calling
-    // RUN_ALL_TESTS().  Therefore we capture the current directory in
-    // AddTestInfo(), which is called to register a TEST or TEST_F
-    // before main() is reached.
-    if (original_working_dir_.IsEmpty()) {
-      original_working_dir_.Set(FilePath::GetCurrentDir());
-      GTEST_CHECK_(!original_working_dir_.IsEmpty())
-          << "Failed to get the current working directory.";
-    }
-
-    GetTestCase(test_info->test_case_name(),
-                test_info->type_param(),
-                set_up_tc,
-                tear_down_tc)->AddTestInfo(test_info);
-  }
-
-#if GTEST_HAS_PARAM_TEST
-  // Returns ParameterizedTestCaseRegistry object used to keep track of
-  // value-parameterized tests and instantiate and register them.
-  internal::ParameterizedTestCaseRegistry& parameterized_test_registry() {
-    return parameterized_test_registry_;
-  }
-#endif  // GTEST_HAS_PARAM_TEST
-
-  // Sets the TestCase object for the test that's currently running.
-  void set_current_test_case(TestCase* a_current_test_case) {
-    current_test_case_ = a_current_test_case;
-  }
-
-  // Sets the TestInfo object for the test that's currently running.  If
-  // current_test_info is NULL, the assertion results will be stored in
-  // ad_hoc_test_result_.
-  void set_current_test_info(TestInfo* a_current_test_info) {
-    current_test_info_ = a_current_test_info;
-  }
-
-  // Registers all parameterized tests defined using TEST_P and
-  // INSTANTIATE_TEST_CASE_P, creating regular tests for each test/parameter
-  // combination. This method can be called more then once; it has guards
-  // protecting from registering the tests more then once.  If
-  // value-parameterized tests are disabled, RegisterParameterizedTests is
-  // present but does nothing.
-  void RegisterParameterizedTests();
-
-  // Runs all tests in this UnitTest object, prints the result, and
-  // returns true if all tests are successful.  If any exception is
-  // thrown during a test, this test is considered to be failed, but
-  // the rest of the tests will still be run.
-  bool RunAllTests();
-
-  // Clears the results of all tests, except the ad hoc tests.
-  void ClearNonAdHocTestResult() {
-    ForEach(test_cases_, TestCase::ClearTestCaseResult);
-  }
-
-  // Clears the results of ad-hoc test assertions.
-  void ClearAdHocTestResult() {
-    ad_hoc_test_result_.Clear();
-  }
-
-  enum ReactionToSharding {
-    HONOR_SHARDING_PROTOCOL,
-    IGNORE_SHARDING_PROTOCOL
-  };
-
-  // Matches the full name of each test against the user-specified
-  // filter to decide whether the test should run, then records the
-  // result in each TestCase and TestInfo object.
-  // If shard_tests == HONOR_SHARDING_PROTOCOL, further filters tests
-  // based on sharding variables in the environment.
-  // Returns the number of tests that should run.
-  int FilterTests(ReactionToSharding shard_tests);
-
-  // Prints the names of the tests matching the user-specified filter flag.
-  void ListTestsMatchingFilter();
-
-  const TestCase* current_test_case() const { return current_test_case_; }
-  TestInfo* current_test_info() { return current_test_info_; }
-  const TestInfo* current_test_info() const { return current_test_info_; }
-
-  // Returns the vector of environments that need to be set-up/torn-down
-  // before/after the tests are run.
-  std::vector<Environment*>& environments() { return environments_; }
-
-  // Getters for the per-thread Google Test trace stack.
-  std::vector<TraceInfo>& gtest_trace_stack() {
-    return *(gtest_trace_stack_.pointer());
-  }
-  const std::vector<TraceInfo>& gtest_trace_stack() const {
-    return gtest_trace_stack_.get();
-  }
-
-#if GTEST_HAS_DEATH_TEST
-  void InitDeathTestSubprocessControlInfo() {
-    internal_run_death_test_flag_.reset(ParseInternalRunDeathTestFlag());
-  }
-  // Returns a pointer to the parsed --gtest_internal_run_death_test
-  // flag, or NULL if that flag was not specified.
-  // This information is useful only in a death test child process.
-  // Must not be called before a call to InitGoogleTest.
-  const InternalRunDeathTestFlag* internal_run_death_test_flag() const {
-    return internal_run_death_test_flag_.get();
-  }
-
-  // Returns a pointer to the current death test factory.
-  internal::DeathTestFactory* death_test_factory() {
-    return death_test_factory_.get();
-  }
-
-  void SuppressTestEventsIfInSubprocess();
-
-  friend class ReplaceDeathTestFactory;
-#endif  // GTEST_HAS_DEATH_TEST
-
-  // Initializes the event listener performing XML output as specified by
-  // UnitTestOptions. Must not be called before InitGoogleTest.
-  void ConfigureXmlOutput();
-
-#if GTEST_CAN_STREAM_RESULTS_
-  // Initializes the event listener for streaming test results to a socket.
-  // Must not be called before InitGoogleTest.
-  void ConfigureStreamingOutput();
-#endif
-
-  // Performs initialization dependent upon flag values obtained in
-  // ParseGoogleTestFlagsOnly.  Is called from InitGoogleTest after the call to
-  // ParseGoogleTestFlagsOnly.  In case a user neglects to call InitGoogleTest
-  // this function is also called from RunAllTests.  Since this function can be
-  // called more than once, it has to be idempotent.
-  void PostFlagParsingInit();
-
-  // Gets the random seed used at the start of the current test iteration.
-  int random_seed() const { return random_seed_; }
-
-  // Gets the random number generator.
-  internal::Random* random() { return &random_; }
-
-  // Shuffles all test cases, and the tests within each test case,
-  // making sure that death tests are still run first.
-  void ShuffleTests();
-
-  // Restores the test cases and tests to their order before the first shuffle.
-  void UnshuffleTests();
-
-  // Returns the value of GTEST_FLAG(catch_exceptions) at the moment
-  // UnitTest::Run() starts.
-  bool catch_exceptions() const { return catch_exceptions_; }
-
- private:
-  friend class ::testing::UnitTest;
-
-  // Used by UnitTest::Run() to capture the state of
-  // GTEST_FLAG(catch_exceptions) at the moment it starts.
-  void set_catch_exceptions(bool value) { catch_exceptions_ = value; }
-
-  // The UnitTest object that owns this implementation object.
-  UnitTest* const parent_;
-
-  // The working directory when the first TEST() or TEST_F() was
-  // executed.
-  internal::FilePath original_working_dir_;
-
-  // The default test part result reporters.
-  DefaultGlobalTestPartResultReporter default_global_test_part_result_reporter_;
-  DefaultPerThreadTestPartResultReporter
-      default_per_thread_test_part_result_reporter_;
-
-  // Points to (but doesn't own) the global test part result reporter.
-  TestPartResultReporterInterface* global_test_part_result_repoter_;
-
-  // Protects read and write access to global_test_part_result_reporter_.
-  internal::Mutex global_test_part_result_reporter_mutex_;
-
-  // Points to (but doesn't own) the per-thread test part result reporter.
-  internal::ThreadLocal<TestPartResultReporterInterface*>
-      per_thread_test_part_result_reporter_;
-
-  // The vector of environments that need to be set-up/torn-down
-  // before/after the tests are run.
-  std::vector<Environment*> environments_;
-
-  // The vector of TestCases in their original order.  It owns the
-  // elements in the vector.
-  std::vector<TestCase*> test_cases_;
-
-  // Provides a level of indirection for the test case list to allow
-  // easy shuffling and restoring the test case order.  The i-th
-  // element of this vector is the index of the i-th test case in the
-  // shuffled order.
-  std::vector<int> test_case_indices_;
-
-#if GTEST_HAS_PARAM_TEST
-  // ParameterizedTestRegistry object used to register value-parameterized
-  // tests.
-  internal::ParameterizedTestCaseRegistry parameterized_test_registry_;
-
-  // Indicates whether RegisterParameterizedTests() has been called already.
-  bool parameterized_tests_registered_;
-#endif  // GTEST_HAS_PARAM_TEST
-
-  // Index of the last death test case registered.  Initially -1.
-  int last_death_test_case_;
-
-  // This points to the TestCase for the currently running test.  It
-  // changes as Google Test goes through one test case after another.
-  // When no test is running, this is set to NULL and Google Test
-  // stores assertion results in ad_hoc_test_result_.  Initially NULL.
-  TestCase* current_test_case_;
-
-  // This points to the TestInfo for the currently running test.  It
-  // changes as Google Test goes through one test after another.  When
-  // no test is running, this is set to NULL and Google Test stores
-  // assertion results in ad_hoc_test_result_.  Initially NULL.
-  TestInfo* current_test_info_;
-
-  // Normally, a user only writes assertions inside a TEST or TEST_F,
-  // or inside a function called by a TEST or TEST_F.  Since Google
-  // Test keeps track of which test is current running, it can
-  // associate such an assertion with the test it belongs to.
-  //
-  // If an assertion is encountered when no TEST or TEST_F is running,
-  // Google Test attributes the assertion result to an imaginary "ad hoc"
-  // test, and records the result in ad_hoc_test_result_.
-  TestResult ad_hoc_test_result_;
-
-  // The list of event listeners that can be used to track events inside
-  // Google Test.
-  TestEventListeners listeners_;
-
-  // The OS stack trace getter.  Will be deleted when the UnitTest
-  // object is destructed.  By default, an OsStackTraceGetter is used,
-  // but the user can set this field to use a custom getter if that is
-  // desired.
-  OsStackTraceGetterInterface* os_stack_trace_getter_;
-
-  // True iff PostFlagParsingInit() has been called.
-  bool post_flag_parse_init_performed_;
-
-  // The random number seed used at the beginning of the test run.
-  int random_seed_;
-
-  // Our random number generator.
-  internal::Random random_;
-
-  // How long the test took to run, in milliseconds.
-  TimeInMillis elapsed_time_;
-
-#if GTEST_HAS_DEATH_TEST
-  // The decomposed components of the gtest_internal_run_death_test flag,
-  // parsed when RUN_ALL_TESTS is called.
-  internal::scoped_ptr<InternalRunDeathTestFlag> internal_run_death_test_flag_;
-  internal::scoped_ptr<internal::DeathTestFactory> death_test_factory_;
-#endif  // GTEST_HAS_DEATH_TEST
-
-  // A per-thread stack of traces created by the SCOPED_TRACE() macro.
-  internal::ThreadLocal<std::vector<TraceInfo> > gtest_trace_stack_;
-
-  // The value of GTEST_FLAG(catch_exceptions) at the moment RunAllTests()
-  // starts.
-  bool catch_exceptions_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(UnitTestImpl);
-};  // class UnitTestImpl
-
-// Convenience function for accessing the global UnitTest
-// implementation object.
-inline UnitTestImpl* GetUnitTestImpl() {
-  return UnitTest::GetInstance()->impl();
-}
-
-#if GTEST_USES_SIMPLE_RE
-
-// Internal helper functions for implementing the simple regular
-// expression matcher.
-GTEST_API_ bool IsInSet(char ch, const char* str);
-GTEST_API_ bool IsAsciiDigit(char ch);
-GTEST_API_ bool IsAsciiPunct(char ch);
-GTEST_API_ bool IsRepeat(char ch);
-GTEST_API_ bool IsAsciiWhiteSpace(char ch);
-GTEST_API_ bool IsAsciiWordChar(char ch);
-GTEST_API_ bool IsValidEscape(char ch);
-GTEST_API_ bool AtomMatchesChar(bool escaped, char pattern, char ch);
-GTEST_API_ bool ValidateRegex(const char* regex);
-GTEST_API_ bool MatchRegexAtHead(const char* regex, const char* str);
-GTEST_API_ bool MatchRepetitionAndRegexAtHead(
-    bool escaped, char ch, char repeat, const char* regex, const char* str);
-GTEST_API_ bool MatchRegexAnywhere(const char* regex, const char* str);
-
-#endif  // GTEST_USES_SIMPLE_RE
-
-// Parses the command line for Google Test flags, without initializing
-// other parts of Google Test.
-GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, char** argv);
-GTEST_API_ void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv);
-
-#if GTEST_HAS_DEATH_TEST
-
-// Returns the message describing the last system error, regardless of the
-// platform.
-GTEST_API_ String GetLastErrnoDescription();
-
-# if GTEST_OS_WINDOWS
-// Provides leak-safe Windows kernel handle ownership.
-class AutoHandle {
- public:
-  AutoHandle() : handle_(INVALID_HANDLE_VALUE) {}
-  explicit AutoHandle(HANDLE handle) : handle_(handle) {}
-
-  ~AutoHandle() { Reset(); }
-
-  HANDLE Get() const { return handle_; }
-  void Reset() { Reset(INVALID_HANDLE_VALUE); }
-  void Reset(HANDLE handle) {
-    if (handle != handle_) {
-      if (handle_ != INVALID_HANDLE_VALUE)
-        ::CloseHandle(handle_);
-      handle_ = handle;
-    }
-  }
-
- private:
-  HANDLE handle_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(AutoHandle);
-};
-# endif  // GTEST_OS_WINDOWS
-
-// Attempts to parse a string into a positive integer pointed to by the
-// number parameter.  Returns true if that is possible.
-// GTEST_HAS_DEATH_TEST implies that we have ::std::string, so we can use
-// it here.
-template <typename Integer>
-bool ParseNaturalNumber(const ::std::string& str, Integer* number) {
-  // Fail fast if the given string does not begin with a digit;
-  // this bypasses strtoXXX's "optional leading whitespace and plus
-  // or minus sign" semantics, which are undesirable here.
-  if (str.empty() || !IsDigit(str[0])) {
-    return false;
-  }
-  errno = 0;
-
-  char* end;
-  // BiggestConvertible is the largest integer type that system-provided
-  // string-to-number conversion routines can return.
-
-# if GTEST_OS_WINDOWS && !defined(__GNUC__)
-
-  // MSVC and C++ Builder define __int64 instead of the standard long long.
-  typedef unsigned __int64 BiggestConvertible;
-  const BiggestConvertible parsed = _strtoui64(str.c_str(), &end, 10);
-
-# else
-
-  typedef unsigned long long BiggestConvertible;  // NOLINT
-  const BiggestConvertible parsed = strtoull(str.c_str(), &end, 10);
-
-# endif  // GTEST_OS_WINDOWS && !defined(__GNUC__)
-
-  const bool parse_success = *end == '\0' && errno == 0;
-
-  // TODO(vladl at google.com): Convert this to compile time assertion when it is
-  // available.
-  GTEST_CHECK_(sizeof(Integer) <= sizeof(parsed));
-
-  const Integer result = static_cast<Integer>(parsed);
-  if (parse_success && static_cast<BiggestConvertible>(result) == parsed) {
-    *number = result;
-    return true;
-  }
-  return false;
-}
-#endif  // GTEST_HAS_DEATH_TEST
-
-// TestResult contains some private methods that should be hidden from
-// Google Test user but are required for testing. This class allow our tests
-// to access them.
-//
-// This class is supplied only for the purpose of testing Google Test's own
-// constructs. Do not use it in user tests, either directly or indirectly.
-class TestResultAccessor {
- public:
-  static void RecordProperty(TestResult* test_result,
-                             const TestProperty& property) {
-    test_result->RecordProperty(property);
-  }
-
-  static void ClearTestPartResults(TestResult* test_result) {
-    test_result->ClearTestPartResults();
-  }
-
-  static const std::vector<testing::TestPartResult>& test_part_results(
-      const TestResult& test_result) {
-    return test_result.test_part_results();
-  }
-};
-
-}  // namespace internal
-}  // namespace testing
-
-#endif  // GTEST_SRC_GTEST_INTERNAL_INL_H_
diff --git a/src/libs_3rdparty/gtest/src/src/gtest-port.cc b/src/libs_3rdparty/gtest/src/src/gtest-port.cc
deleted file mode 100644
index b860d48..0000000
--- a/src/libs_3rdparty/gtest/src/src/gtest-port.cc
+++ /dev/null
@@ -1,746 +0,0 @@
-// Copyright 2008, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-
-#include "gtest/internal/gtest-port.h"
-
-#include <limits.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#if GTEST_OS_WINDOWS_MOBILE
-# include <windows.h>  // For TerminateProcess()
-#elif GTEST_OS_WINDOWS
-# include <io.h>
-# include <sys/stat.h>
-#else
-# include <unistd.h>
-#endif  // GTEST_OS_WINDOWS_MOBILE
-
-#if GTEST_OS_MAC
-# include <mach/mach_init.h>
-# include <mach/task.h>
-# include <mach/vm_map.h>
-#endif  // GTEST_OS_MAC
-
-#include "gtest/gtest-spi.h"
-#include "gtest/gtest-message.h"
-#include "gtest/internal/gtest-internal.h"
-#include "gtest/internal/gtest-string.h"
-
-// Indicates that this translation unit is part of Google Test's
-// implementation.  It must come before gtest-internal-inl.h is
-// included, or there will be a compiler error.  This trick is to
-// prevent a user from accidentally including gtest-internal-inl.h in
-// his code.
-#define GTEST_IMPLEMENTATION_ 1
-#include "src/gtest-internal-inl.h"
-#undef GTEST_IMPLEMENTATION_
-
-namespace testing {
-namespace internal {
-
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-// MSVC and C++Builder do not provide a definition of STDERR_FILENO.
-const int kStdOutFileno = 1;
-const int kStdErrFileno = 2;
-#else
-const int kStdOutFileno = STDOUT_FILENO;
-const int kStdErrFileno = STDERR_FILENO;
-#endif  // _MSC_VER
-
-#if GTEST_OS_MAC
-
-// Returns the number of threads running in the process, or 0 to indicate that
-// we cannot detect it.
-size_t GetThreadCount() {
-  const task_t task = mach_task_self();
-  mach_msg_type_number_t thread_count;
-  thread_act_array_t thread_list;
-  const kern_return_t status = task_threads(task, &thread_list, &thread_count);
-  if (status == KERN_SUCCESS) {
-    // task_threads allocates resources in thread_list and we need to free them
-    // to avoid leaks.
-    vm_deallocate(task,
-                  reinterpret_cast<vm_address_t>(thread_list),
-                  sizeof(thread_t) * thread_count);
-    return static_cast<size_t>(thread_count);
-  } else {
-    return 0;
-  }
-}
-
-#else
-
-size_t GetThreadCount() {
-  // There's no portable way to detect the number of threads, so we just
-  // return 0 to indicate that we cannot detect it.
-  return 0;
-}
-
-#endif  // GTEST_OS_MAC
-
-#if GTEST_USES_POSIX_RE
-
-// Implements RE.  Currently only needed for death tests.
-
-RE::~RE() {
-  if (is_valid_) {
-    // regfree'ing an invalid regex might crash because the content
-    // of the regex is undefined. Since the regex's are essentially
-    // the same, one cannot be valid (or invalid) without the other
-    // being so too.
-    regfree(&partial_regex_);
-    regfree(&full_regex_);
-  }
-  free(const_cast<char*>(pattern_));
-}
-
-// Returns true iff regular expression re matches the entire str.
-bool RE::FullMatch(const char* str, const RE& re) {
-  if (!re.is_valid_) return false;
-
-  regmatch_t match;
-  return regexec(&re.full_regex_, str, 1, &match, 0) == 0;
-}
-
-// Returns true iff regular expression re matches a substring of str
-// (including str itself).
-bool RE::PartialMatch(const char* str, const RE& re) {
-  if (!re.is_valid_) return false;
-
-  regmatch_t match;
-  return regexec(&re.partial_regex_, str, 1, &match, 0) == 0;
-}
-
-// Initializes an RE from its string representation.
-void RE::Init(const char* regex) {
-  pattern_ = posix::StrDup(regex);
-
-  // Reserves enough bytes to hold the regular expression used for a
-  // full match.
-  const size_t full_regex_len = strlen(regex) + 10;
-  char* const full_pattern = new char[full_regex_len];
-
-  snprintf(full_pattern, full_regex_len, "^(%s)$", regex);
-  is_valid_ = regcomp(&full_regex_, full_pattern, REG_EXTENDED) == 0;
-  // We want to call regcomp(&partial_regex_, ...) even if the
-  // previous expression returns false.  Otherwise partial_regex_ may
-  // not be properly initialized can may cause trouble when it's
-  // freed.
-  //
-  // Some implementation of POSIX regex (e.g. on at least some
-  // versions of Cygwin) doesn't accept the empty string as a valid
-  // regex.  We change it to an equivalent form "()" to be safe.
-  if (is_valid_) {
-    const char* const partial_regex = (*regex == '\0') ? "()" : regex;
-    is_valid_ = regcomp(&partial_regex_, partial_regex, REG_EXTENDED) == 0;
-  }
-  EXPECT_TRUE(is_valid_)
-      << "Regular expression \"" << regex
-      << "\" is not a valid POSIX Extended regular expression.";
-
-  delete[] full_pattern;
-}
-
-#elif GTEST_USES_SIMPLE_RE
-
-// Returns true iff ch appears anywhere in str (excluding the
-// terminating '\0' character).
-bool IsInSet(char ch, const char* str) {
-  return ch != '\0' && strchr(str, ch) != NULL;
-}
-
-// Returns true iff ch belongs to the given classification.  Unlike
-// similar functions in <ctype.h>, these aren't affected by the
-// current locale.
-bool IsAsciiDigit(char ch) { return '0' <= ch && ch <= '9'; }
-bool IsAsciiPunct(char ch) {
-  return IsInSet(ch, "^-!\"#$%&'()*+,./:;<=>?@[\\]_`{|}~");
-}
-bool IsRepeat(char ch) { return IsInSet(ch, "?*+"); }
-bool IsAsciiWhiteSpace(char ch) { return IsInSet(ch, " \f\n\r\t\v"); }
-bool IsAsciiWordChar(char ch) {
-  return ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z') ||
-      ('0' <= ch && ch <= '9') || ch == '_';
-}
-
-// Returns true iff "\\c" is a supported escape sequence.
-bool IsValidEscape(char c) {
-  return (IsAsciiPunct(c) || IsInSet(c, "dDfnrsStvwW"));
-}
-
-// Returns true iff the given atom (specified by escaped and pattern)
-// matches ch.  The result is undefined if the atom is invalid.
-bool AtomMatchesChar(bool escaped, char pattern_char, char ch) {
-  if (escaped) {  // "\\p" where p is pattern_char.
-    switch (pattern_char) {
-      case 'd': return IsAsciiDigit(ch);
-      case 'D': return !IsAsciiDigit(ch);
-      case 'f': return ch == '\f';
-      case 'n': return ch == '\n';
-      case 'r': return ch == '\r';
-      case 's': return IsAsciiWhiteSpace(ch);
-      case 'S': return !IsAsciiWhiteSpace(ch);
-      case 't': return ch == '\t';
-      case 'v': return ch == '\v';
-      case 'w': return IsAsciiWordChar(ch);
-      case 'W': return !IsAsciiWordChar(ch);
-    }
-    return IsAsciiPunct(pattern_char) && pattern_char == ch;
-  }
-
-  return (pattern_char == '.' && ch != '\n') || pattern_char == ch;
-}
-
-// Helper function used by ValidateRegex() to format error messages.
-String FormatRegexSyntaxError(const char* regex, int index) {
-  return (Message() << "Syntax error at index " << index
-          << " in simple regular expression \"" << regex << "\": ").GetString();
-}
-
-// Generates non-fatal failures and returns false if regex is invalid;
-// otherwise returns true.
-bool ValidateRegex(const char* regex) {
-  if (regex == NULL) {
-    // TODO(wan at google.com): fix the source file location in the
-    // assertion failures to match where the regex is used in user
-    // code.
-    ADD_FAILURE() << "NULL is not a valid simple regular expression.";
-    return false;
-  }
-
-  bool is_valid = true;
-
-  // True iff ?, *, or + can follow the previous atom.
-  bool prev_repeatable = false;
-  for (int i = 0; regex[i]; i++) {
-    if (regex[i] == '\\') {  // An escape sequence
-      i++;
-      if (regex[i] == '\0') {
-        ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1)
-                      << "'\\' cannot appear at the end.";
-        return false;
-      }
-
-      if (!IsValidEscape(regex[i])) {
-        ADD_FAILURE() << FormatRegexSyntaxError(regex, i - 1)
-                      << "invalid escape sequence \"\\" << regex[i] << "\".";
-        is_valid = false;
-      }
-      prev_repeatable = true;
-    } else {  // Not an escape sequence.
-      const char ch = regex[i];
-
-      if (ch == '^' && i > 0) {
-        ADD_FAILURE() << FormatRegexSyntaxError(regex, i)
-                      << "'^' can only appear at the beginning.";
-        is_valid = false;
-      } else if (ch == '$' && regex[i + 1] != '\0') {
-        ADD_FAILURE() << FormatRegexSyntaxError(regex, i)
-                      << "'$' can only appear at the end.";
-        is_valid = false;
-      } else if (IsInSet(ch, "()[]{}|")) {
-        ADD_FAILURE() << FormatRegexSyntaxError(regex, i)
-                      << "'" << ch << "' is unsupported.";
-        is_valid = false;
-      } else if (IsRepeat(ch) && !prev_repeatable) {
-        ADD_FAILURE() << FormatRegexSyntaxError(regex, i)
-                      << "'" << ch << "' can only follow a repeatable token.";
-        is_valid = false;
-      }
-
-      prev_repeatable = !IsInSet(ch, "^$?*+");
-    }
-  }
-
-  return is_valid;
-}
-
-// Matches a repeated regex atom followed by a valid simple regular
-// expression.  The regex atom is defined as c if escaped is false,
-// or \c otherwise.  repeat is the repetition meta character (?, *,
-// or +).  The behavior is undefined if str contains too many
-// characters to be indexable by size_t, in which case the test will
-// probably time out anyway.  We are fine with this limitation as
-// std::string has it too.
-bool MatchRepetitionAndRegexAtHead(
-    bool escaped, char c, char repeat, const char* regex,
-    const char* str) {
-  const size_t min_count = (repeat == '+') ? 1 : 0;
-  const size_t max_count = (repeat == '?') ? 1 :
-      static_cast<size_t>(-1) - 1;
-  // We cannot call numeric_limits::max() as it conflicts with the
-  // max() macro on Windows.
-
-  for (size_t i = 0; i <= max_count; ++i) {
-    // We know that the atom matches each of the first i characters in str.
-    if (i >= min_count && MatchRegexAtHead(regex, str + i)) {
-      // We have enough matches at the head, and the tail matches too.
-      // Since we only care about *whether* the pattern matches str
-      // (as opposed to *how* it matches), there is no need to find a
-      // greedy match.
-      return true;
-    }
-    if (str[i] == '\0' || !AtomMatchesChar(escaped, c, str[i]))
-      return false;
-  }
-  return false;
-}
-
-// Returns true iff regex matches a prefix of str.  regex must be a
-// valid simple regular expression and not start with "^", or the
-// result is undefined.
-bool MatchRegexAtHead(const char* regex, const char* str) {
-  if (*regex == '\0')  // An empty regex matches a prefix of anything.
-    return true;
-
-  // "$" only matches the end of a string.  Note that regex being
-  // valid guarantees that there's nothing after "$" in it.
-  if (*regex == '$')
-    return *str == '\0';
-
-  // Is the first thing in regex an escape sequence?
-  const bool escaped = *regex == '\\';
-  if (escaped)
-    ++regex;
-  if (IsRepeat(regex[1])) {
-    // MatchRepetitionAndRegexAtHead() calls MatchRegexAtHead(), so
-    // here's an indirect recursion.  It terminates as the regex gets
-    // shorter in each recursion.
-    return MatchRepetitionAndRegexAtHead(
-        escaped, regex[0], regex[1], regex + 2, str);
-  } else {
-    // regex isn't empty, isn't "$", and doesn't start with a
-    // repetition.  We match the first atom of regex with the first
-    // character of str and recurse.
-    return (*str != '\0') && AtomMatchesChar(escaped, *regex, *str) &&
-        MatchRegexAtHead(regex + 1, str + 1);
-  }
-}
-
-// Returns true iff regex matches any substring of str.  regex must be
-// a valid simple regular expression, or the result is undefined.
-//
-// The algorithm is recursive, but the recursion depth doesn't exceed
-// the regex length, so we won't need to worry about running out of
-// stack space normally.  In rare cases the time complexity can be
-// exponential with respect to the regex length + the string length,
-// but usually it's must faster (often close to linear).
-bool MatchRegexAnywhere(const char* regex, const char* str) {
-  if (regex == NULL || str == NULL)
-    return false;
-
-  if (*regex == '^')
-    return MatchRegexAtHead(regex + 1, str);
-
-  // A successful match can be anywhere in str.
-  do {
-    if (MatchRegexAtHead(regex, str))
-      return true;
-  } while (*str++ != '\0');
-  return false;
-}
-
-// Implements the RE class.
-
-RE::~RE() {
-  free(const_cast<char*>(pattern_));
-  free(const_cast<char*>(full_pattern_));
-}
-
-// Returns true iff regular expression re matches the entire str.
-bool RE::FullMatch(const char* str, const RE& re) {
-  return re.is_valid_ && MatchRegexAnywhere(re.full_pattern_, str);
-}
-
-// Returns true iff regular expression re matches a substring of str
-// (including str itself).
-bool RE::PartialMatch(const char* str, const RE& re) {
-  return re.is_valid_ && MatchRegexAnywhere(re.pattern_, str);
-}
-
-// Initializes an RE from its string representation.
-void RE::Init(const char* regex) {
-  pattern_ = full_pattern_ = NULL;
-  if (regex != NULL) {
-    pattern_ = posix::StrDup(regex);
-  }
-
-  is_valid_ = ValidateRegex(regex);
-  if (!is_valid_) {
-    // No need to calculate the full pattern when the regex is invalid.
-    return;
-  }
-
-  const size_t len = strlen(regex);
-  // Reserves enough bytes to hold the regular expression used for a
-  // full match: we need space to prepend a '^', append a '$', and
-  // terminate the string with '\0'.
-  char* buffer = static_cast<char*>(malloc(len + 3));
-  full_pattern_ = buffer;
-
-  if (*regex != '^')
-    *buffer++ = '^';  // Makes sure full_pattern_ starts with '^'.
-
-  // We don't use snprintf or strncpy, as they trigger a warning when
-  // compiled with VC++ 8.0.
-  memcpy(buffer, regex, len);
-  buffer += len;
-
-  if (len == 0 || regex[len - 1] != '$')
-    *buffer++ = '$';  // Makes sure full_pattern_ ends with '$'.
-
-  *buffer = '\0';
-}
-
-#endif  // GTEST_USES_POSIX_RE
-
-const char kUnknownFile[] = "unknown file";
-
-// Formats a source file path and a line number as they would appear
-// in an error message from the compiler used to compile this code.
-GTEST_API_ ::std::string FormatFileLocation(const char* file, int line) {
-  const char* const file_name = file == NULL ? kUnknownFile : file;
-
-  if (line < 0) {
-    return String::Format("%s:", file_name).c_str();
-  }
-#ifdef _MSC_VER
-  return String::Format("%s(%d):", file_name, line).c_str();
-#else
-  return String::Format("%s:%d:", file_name, line).c_str();
-#endif  // _MSC_VER
-}
-
-// Formats a file location for compiler-independent XML output.
-// Although this function is not platform dependent, we put it next to
-// FormatFileLocation in order to contrast the two functions.
-// Note that FormatCompilerIndependentFileLocation() does NOT append colon
-// to the file location it produces, unlike FormatFileLocation().
-GTEST_API_ ::std::string FormatCompilerIndependentFileLocation(
-    const char* file, int line) {
-  const char* const file_name = file == NULL ? kUnknownFile : file;
-
-  if (line < 0)
-    return file_name;
-  else
-    return String::Format("%s:%d", file_name, line).c_str();
-}
-
-
-GTestLog::GTestLog(GTestLogSeverity severity, const char* file, int line)
-    : severity_(severity) {
-  const char* const marker =
-      severity == GTEST_INFO ?    "[  INFO ]" :
-      severity == GTEST_WARNING ? "[WARNING]" :
-      severity == GTEST_ERROR ?   "[ ERROR ]" : "[ FATAL ]";
-  GetStream() << ::std::endl << marker << " "
-              << FormatFileLocation(file, line).c_str() << ": ";
-}
-
-// Flushes the buffers and, if severity is GTEST_FATAL, aborts the program.
-GTestLog::~GTestLog() {
-  GetStream() << ::std::endl;
-  if (severity_ == GTEST_FATAL) {
-    fflush(stderr);
-    posix::Abort();
-  }
-}
-// Disable Microsoft deprecation warnings for POSIX functions called from
-// this class (creat, dup, dup2, and close)
-#ifdef _MSC_VER
-# pragma warning(push)
-# pragma warning(disable: 4996)
-#endif  // _MSC_VER
-
-#if GTEST_HAS_STREAM_REDIRECTION
-
-// Object that captures an output stream (stdout/stderr).
-class CapturedStream {
- public:
-  // The ctor redirects the stream to a temporary file.
-  CapturedStream(int fd) : fd_(fd), uncaptured_fd_(dup(fd)) {
-
-# if GTEST_OS_WINDOWS
-    char temp_dir_path[MAX_PATH + 1] = { '\0' };  // NOLINT
-    char temp_file_path[MAX_PATH + 1] = { '\0' };  // NOLINT
-
-    ::GetTempPathA(sizeof(temp_dir_path), temp_dir_path);
-    const UINT success = ::GetTempFileNameA(temp_dir_path,
-                                            "gtest_redir",
-                                            0,  // Generate unique file name.
-                                            temp_file_path);
-    GTEST_CHECK_(success != 0)
-        << "Unable to create a temporary file in " << temp_dir_path;
-    const int captured_fd = creat(temp_file_path, _S_IREAD | _S_IWRITE);
-    GTEST_CHECK_(captured_fd != -1) << "Unable to open temporary file "
-                                    << temp_file_path;
-    filename_ = temp_file_path;
-# else
-    // There's no guarantee that a test has write access to the
-    // current directory, so we create the temporary file in the /tmp
-    // directory instead.
-    char name_template[] = "/tmp/captured_stream.XXXXXX";
-    const int captured_fd = mkstemp(name_template);
-    filename_ = name_template;
-# endif  // GTEST_OS_WINDOWS
-    fflush(NULL);
-    dup2(captured_fd, fd_);
-    close(captured_fd);
-  }
-
-  ~CapturedStream() {
-    remove(filename_.c_str());
-  }
-
-  String GetCapturedString() {
-    if (uncaptured_fd_ != -1) {
-      // Restores the original stream.
-      fflush(NULL);
-      dup2(uncaptured_fd_, fd_);
-      close(uncaptured_fd_);
-      uncaptured_fd_ = -1;
-    }
-
-    FILE* const file = posix::FOpen(filename_.c_str(), "r");
-    const String content = ReadEntireFile(file);
-    posix::FClose(file);
-    return content;
-  }
-
- private:
-  // Reads the entire content of a file as a String.
-  static String ReadEntireFile(FILE* file);
-
-  // Returns the size (in bytes) of a file.
-  static size_t GetFileSize(FILE* file);
-
-  const int fd_;  // A stream to capture.
-  int uncaptured_fd_;
-  // Name of the temporary file holding the stderr output.
-  ::std::string filename_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(CapturedStream);
-};
-
-// Returns the size (in bytes) of a file.
-size_t CapturedStream::GetFileSize(FILE* file) {
-  fseek(file, 0, SEEK_END);
-  return static_cast<size_t>(ftell(file));
-}
-
-// Reads the entire content of a file as a string.
-String CapturedStream::ReadEntireFile(FILE* file) {
-  const size_t file_size = GetFileSize(file);
-  char* const buffer = new char[file_size];
-
-  size_t bytes_last_read = 0;  // # of bytes read in the last fread()
-  size_t bytes_read = 0;       // # of bytes read so far
-
-  fseek(file, 0, SEEK_SET);
-
-  // Keeps reading the file until we cannot read further or the
-  // pre-determined file size is reached.
-  do {
-    bytes_last_read = fread(buffer+bytes_read, 1, file_size-bytes_read, file);
-    bytes_read += bytes_last_read;
-  } while (bytes_last_read > 0 && bytes_read < file_size);
-
-  const String content(buffer, bytes_read);
-  delete[] buffer;
-
-  return content;
-}
-
-# ifdef _MSC_VER
-#  pragma warning(pop)
-# endif  // _MSC_VER
-
-static CapturedStream* g_captured_stderr = NULL;
-static CapturedStream* g_captured_stdout = NULL;
-
-// Starts capturing an output stream (stdout/stderr).
-void CaptureStream(int fd, const char* stream_name, CapturedStream** stream) {
-  if (*stream != NULL) {
-    GTEST_LOG_(FATAL) << "Only one " << stream_name
-                      << " capturer can exist at a time.";
-  }
-  *stream = new CapturedStream(fd);
-}
-
-// Stops capturing the output stream and returns the captured string.
-String GetCapturedStream(CapturedStream** captured_stream) {
-  const String content = (*captured_stream)->GetCapturedString();
-
-  delete *captured_stream;
-  *captured_stream = NULL;
-
-  return content;
-}
-
-// Starts capturing stdout.
-void CaptureStdout() {
-  CaptureStream(kStdOutFileno, "stdout", &g_captured_stdout);
-}
-
-// Starts capturing stderr.
-void CaptureStderr() {
-  CaptureStream(kStdErrFileno, "stderr", &g_captured_stderr);
-}
-
-// Stops capturing stdout and returns the captured string.
-String GetCapturedStdout() { return GetCapturedStream(&g_captured_stdout); }
-
-// Stops capturing stderr and returns the captured string.
-String GetCapturedStderr() { return GetCapturedStream(&g_captured_stderr); }
-
-#endif  // GTEST_HAS_STREAM_REDIRECTION
-
-#if GTEST_HAS_DEATH_TEST
-
-// A copy of all command line arguments.  Set by InitGoogleTest().
-::std::vector<String> g_argvs;
-
-// Returns the command line as a vector of strings.
-const ::std::vector<String>& GetArgvs() { return g_argvs; }
-
-#endif  // GTEST_HAS_DEATH_TEST
-
-#if GTEST_OS_WINDOWS_MOBILE
-namespace posix {
-void Abort() {
-  DebugBreak();
-  TerminateProcess(GetCurrentProcess(), 1);
-}
-}  // namespace posix
-#endif  // GTEST_OS_WINDOWS_MOBILE
-
-// Returns the name of the environment variable corresponding to the
-// given flag.  For example, FlagToEnvVar("foo") will return
-// "GTEST_FOO" in the open-source version.
-static String FlagToEnvVar(const char* flag) {
-  const String full_flag =
-      (Message() << GTEST_FLAG_PREFIX_ << flag).GetString();
-
-  Message env_var;
-  for (size_t i = 0; i != full_flag.length(); i++) {
-    env_var << ToUpper(full_flag.c_str()[i]);
-  }
-
-  return env_var.GetString();
-}
-
-// Parses 'str' for a 32-bit signed integer.  If successful, writes
-// the result to *value and returns true; otherwise leaves *value
-// unchanged and returns false.
-bool ParseInt32(const Message& src_text, const char* str, Int32* value) {
-  // Parses the environment variable as a decimal integer.
-  char* end = NULL;
-  const long long_value = strtol(str, &end, 10);  // NOLINT
-
-  // Has strtol() consumed all characters in the string?
-  if (*end != '\0') {
-    // No - an invalid character was encountered.
-    Message msg;
-    msg << "WARNING: " << src_text
-        << " is expected to be a 32-bit integer, but actually"
-        << " has value \"" << str << "\".\n";
-    printf("%s", msg.GetString().c_str());
-    fflush(stdout);
-    return false;
-  }
-
-  // Is the parsed value in the range of an Int32?
-  const Int32 result = static_cast<Int32>(long_value);
-  if (long_value == LONG_MAX || long_value == LONG_MIN ||
-      // The parsed value overflows as a long.  (strtol() returns
-      // LONG_MAX or LONG_MIN when the input overflows.)
-      result != long_value
-      // The parsed value overflows as an Int32.
-      ) {
-    Message msg;
-    msg << "WARNING: " << src_text
-        << " is expected to be a 32-bit integer, but actually"
-        << " has value " << str << ", which overflows.\n";
-    printf("%s", msg.GetString().c_str());
-    fflush(stdout);
-    return false;
-  }
-
-  *value = result;
-  return true;
-}
-
-// Reads and returns the Boolean environment variable corresponding to
-// the given flag; if it's not set, returns default_value.
-//
-// The value is considered true iff it's not "0".
-bool BoolFromGTestEnv(const char* flag, bool default_value) {
-  const String env_var = FlagToEnvVar(flag);
-  const char* const string_value = posix::GetEnv(env_var.c_str());
-  return string_value == NULL ?
-      default_value : strcmp(string_value, "0") != 0;
-}
-
-// Reads and returns a 32-bit integer stored in the environment
-// variable corresponding to the given flag; if it isn't set or
-// doesn't represent a valid 32-bit integer, returns default_value.
-Int32 Int32FromGTestEnv(const char* flag, Int32 default_value) {
-  const String env_var = FlagToEnvVar(flag);
-  const char* const string_value = posix::GetEnv(env_var.c_str());
-  if (string_value == NULL) {
-    // The environment variable is not set.
-    return default_value;
-  }
-
-  Int32 result = default_value;
-  if (!ParseInt32(Message() << "Environment variable " << env_var,
-                  string_value, &result)) {
-    printf("The default value %s is used.\n",
-           (Message() << default_value).GetString().c_str());
-    fflush(stdout);
-    return default_value;
-  }
-
-  return result;
-}
-
-// Reads and returns the string environment variable corresponding to
-// the given flag; if it's not set, returns default_value.
-const char* StringFromGTestEnv(const char* flag, const char* default_value) {
-  const String env_var = FlagToEnvVar(flag);
-  const char* const value = posix::GetEnv(env_var.c_str());
-  return value == NULL ? default_value : value;
-}
-
-}  // namespace internal
-}  // namespace testing
diff --git a/src/libs_3rdparty/gtest/src/src/gtest-printers.cc b/src/libs_3rdparty/gtest/src/src/gtest-printers.cc
deleted file mode 100644
index ed63c7b..0000000
--- a/src/libs_3rdparty/gtest/src/src/gtest-printers.cc
+++ /dev/null
@@ -1,356 +0,0 @@
-// Copyright 2007, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-
-// Google Test - The Google C++ Testing Framework
-//
-// This file implements a universal value printer that can print a
-// value of any type T:
-//
-//   void ::testing::internal::UniversalPrinter<T>::Print(value, ostream_ptr);
-//
-// It uses the << operator when possible, and prints the bytes in the
-// object otherwise.  A user can override its behavior for a class
-// type Foo by defining either operator<<(::std::ostream&, const Foo&)
-// or void PrintTo(const Foo&, ::std::ostream*) in the namespace that
-// defines Foo.
-
-#include "gtest/gtest-printers.h"
-#include <ctype.h>
-#include <stdio.h>
-#include <ostream>  // NOLINT
-#include <string>
-#include "gtest/internal/gtest-port.h"
-
-namespace testing {
-
-namespace {
-
-using ::std::ostream;
-
-#if GTEST_OS_WINDOWS_MOBILE  // Windows CE does not define _snprintf_s.
-# define snprintf _snprintf
-#elif _MSC_VER >= 1400  // VC 8.0 and later deprecate snprintf and _snprintf.
-# define snprintf _snprintf_s
-#elif _MSC_VER
-# define snprintf _snprintf
-#endif  // GTEST_OS_WINDOWS_MOBILE
-
-// Prints a segment of bytes in the given object.
-void PrintByteSegmentInObjectTo(const unsigned char* obj_bytes, size_t start,
-                                size_t count, ostream* os) {
-  char text[5] = "";
-  for (size_t i = 0; i != count; i++) {
-    const size_t j = start + i;
-    if (i != 0) {
-      // Organizes the bytes into groups of 2 for easy parsing by
-      // human.
-      if ((j % 2) == 0)
-        *os << ' ';
-      else
-        *os << '-';
-    }
-    snprintf(text, sizeof(text), "%02X", obj_bytes[j]);
-    *os << text;
-  }
-}
-
-// Prints the bytes in the given value to the given ostream.
-void PrintBytesInObjectToImpl(const unsigned char* obj_bytes, size_t count,
-                              ostream* os) {
-  // Tells the user how big the object is.
-  *os << count << "-byte object <";
-
-  const size_t kThreshold = 132;
-  const size_t kChunkSize = 64;
-  // If the object size is bigger than kThreshold, we'll have to omit
-  // some details by printing only the first and the last kChunkSize
-  // bytes.
-  // TODO(wan): let the user control the threshold using a flag.
-  if (count < kThreshold) {
-    PrintByteSegmentInObjectTo(obj_bytes, 0, count, os);
-  } else {
-    PrintByteSegmentInObjectTo(obj_bytes, 0, kChunkSize, os);
-    *os << " ... ";
-    // Rounds up to 2-byte boundary.
-    const size_t resume_pos = (count - kChunkSize + 1)/2*2;
-    PrintByteSegmentInObjectTo(obj_bytes, resume_pos, count - resume_pos, os);
-  }
-  *os << ">";
-}
-
-}  // namespace
-
-namespace internal2 {
-
-// Delegates to PrintBytesInObjectToImpl() to print the bytes in the
-// given object.  The delegation simplifies the implementation, which
-// uses the << operator and thus is easier done outside of the
-// ::testing::internal namespace, which contains a << operator that
-// sometimes conflicts with the one in STL.
-void PrintBytesInObjectTo(const unsigned char* obj_bytes, size_t count,
-                          ostream* os) {
-  PrintBytesInObjectToImpl(obj_bytes, count, os);
-}
-
-}  // namespace internal2
-
-namespace internal {
-
-// Depending on the value of a char (or wchar_t), we print it in one
-// of three formats:
-//   - as is if it's a printable ASCII (e.g. 'a', '2', ' '),
-//   - as a hexidecimal escape sequence (e.g. '\x7F'), or
-//   - as a special escape sequence (e.g. '\r', '\n').
-enum CharFormat {
-  kAsIs,
-  kHexEscape,
-  kSpecialEscape
-};
-
-// Returns true if c is a printable ASCII character.  We test the
-// value of c directly instead of calling isprint(), which is buggy on
-// Windows Mobile.
-inline bool IsPrintableAscii(wchar_t c) {
-  return 0x20 <= c && c <= 0x7E;
-}
-
-// Prints a wide or narrow char c as a character literal without the
-// quotes, escaping it when necessary; returns how c was formatted.
-// The template argument UnsignedChar is the unsigned version of Char,
-// which is the type of c.
-template <typename UnsignedChar, typename Char>
-static CharFormat PrintAsCharLiteralTo(Char c, ostream* os) {
-  switch (static_cast<wchar_t>(c)) {
-    case L'\0':
-      *os << "\\0";
-      break;
-    case L'\'':
-      *os << "\\'";
-      break;
-    case L'\\':
-      *os << "\\\\";
-      break;
-    case L'\a':
-      *os << "\\a";
-      break;
-    case L'\b':
-      *os << "\\b";
-      break;
-    case L'\f':
-      *os << "\\f";
-      break;
-    case L'\n':
-      *os << "\\n";
-      break;
-    case L'\r':
-      *os << "\\r";
-      break;
-    case L'\t':
-      *os << "\\t";
-      break;
-    case L'\v':
-      *os << "\\v";
-      break;
-    default:
-      if (IsPrintableAscii(c)) {
-        *os << static_cast<char>(c);
-        return kAsIs;
-      } else {
-        *os << String::Format("\\x%X", static_cast<UnsignedChar>(c));
-        return kHexEscape;
-      }
-  }
-  return kSpecialEscape;
-}
-
-// Prints a char c as if it's part of a string literal, escaping it when
-// necessary; returns how c was formatted.
-static CharFormat PrintAsWideStringLiteralTo(wchar_t c, ostream* os) {
-  switch (c) {
-    case L'\'':
-      *os << "'";
-      return kAsIs;
-    case L'"':
-      *os << "\\\"";
-      return kSpecialEscape;
-    default:
-      return PrintAsCharLiteralTo<wchar_t>(c, os);
-  }
-}
-
-// Prints a char c as if it's part of a string literal, escaping it when
-// necessary; returns how c was formatted.
-static CharFormat PrintAsNarrowStringLiteralTo(char c, ostream* os) {
-  return PrintAsWideStringLiteralTo(static_cast<unsigned char>(c), os);
-}
-
-// Prints a wide or narrow character c and its code.  '\0' is printed
-// as "'\\0'", other unprintable characters are also properly escaped
-// using the standard C++ escape sequence.  The template argument
-// UnsignedChar is the unsigned version of Char, which is the type of c.
-template <typename UnsignedChar, typename Char>
-void PrintCharAndCodeTo(Char c, ostream* os) {
-  // First, print c as a literal in the most readable form we can find.
-  *os << ((sizeof(c) > 1) ? "L'" : "'");
-  const CharFormat format = PrintAsCharLiteralTo<UnsignedChar>(c, os);
-  *os << "'";
-
-  // To aid user debugging, we also print c's code in decimal, unless
-  // it's 0 (in which case c was printed as '\\0', making the code
-  // obvious).
-  if (c == 0)
-    return;
-  *os << " (" << String::Format("%d", c).c_str();
-
-  // For more convenience, we print c's code again in hexidecimal,
-  // unless c was already printed in the form '\x##' or the code is in
-  // [1, 9].
-  if (format == kHexEscape || (1 <= c && c <= 9)) {
-    // Do nothing.
-  } else {
-    *os << String::Format(", 0x%X",
-                          static_cast<UnsignedChar>(c)).c_str();
-  }
-  *os << ")";
-}
-
-void PrintTo(unsigned char c, ::std::ostream* os) {
-  PrintCharAndCodeTo<unsigned char>(c, os);
-}
-void PrintTo(signed char c, ::std::ostream* os) {
-  PrintCharAndCodeTo<unsigned char>(c, os);
-}
-
-// Prints a wchar_t as a symbol if it is printable or as its internal
-// code otherwise and also as its code.  L'\0' is printed as "L'\\0'".
-void PrintTo(wchar_t wc, ostream* os) {
-  PrintCharAndCodeTo<wchar_t>(wc, os);
-}
-
-// Prints the given array of characters to the ostream.
-// The array starts at *begin, the length is len, it may include '\0' characters
-// and may not be null-terminated.
-static void PrintCharsAsStringTo(const char* begin, size_t len, ostream* os) {
-  *os << "\"";
-  bool is_previous_hex = false;
-  for (size_t index = 0; index < len; ++index) {
-    const char cur = begin[index];
-    if (is_previous_hex && IsXDigit(cur)) {
-      // Previous character is of '\x..' form and this character can be
-      // interpreted as another hexadecimal digit in its number. Break string to
-      // disambiguate.
-      *os << "\" \"";
-    }
-    is_previous_hex = PrintAsNarrowStringLiteralTo(cur, os) == kHexEscape;
-  }
-  *os << "\"";
-}
-
-// Prints a (const) char array of 'len' elements, starting at address 'begin'.
-void UniversalPrintArray(const char* begin, size_t len, ostream* os) {
-  PrintCharsAsStringTo(begin, len, os);
-}
-
-// Prints the given array of wide characters to the ostream.
-// The array starts at *begin, the length is len, it may include L'\0'
-// characters and may not be null-terminated.
-static void PrintWideCharsAsStringTo(const wchar_t* begin, size_t len,
-                                     ostream* os) {
-  *os << "L\"";
-  bool is_previous_hex = false;
-  for (size_t index = 0; index < len; ++index) {
-    const wchar_t cur = begin[index];
-    if (is_previous_hex && isascii(cur) && IsXDigit(static_cast<char>(cur))) {
-      // Previous character is of '\x..' form and this character can be
-      // interpreted as another hexadecimal digit in its number. Break string to
-      // disambiguate.
-      *os << "\" L\"";
-    }
-    is_previous_hex = PrintAsWideStringLiteralTo(cur, os) == kHexEscape;
-  }
-  *os << "\"";
-}
-
-// Prints the given C string to the ostream.
-void PrintTo(const char* s, ostream* os) {
-  if (s == NULL) {
-    *os << "NULL";
-  } else {
-    *os << ImplicitCast_<const void*>(s) << " pointing to ";
-    PrintCharsAsStringTo(s, strlen(s), os);
-  }
-}
-
-// MSVC compiler can be configured to define whar_t as a typedef
-// of unsigned short. Defining an overload for const wchar_t* in that case
-// would cause pointers to unsigned shorts be printed as wide strings,
-// possibly accessing more memory than intended and causing invalid
-// memory accesses. MSVC defines _NATIVE_WCHAR_T_DEFINED symbol when
-// wchar_t is implemented as a native type.
-#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)
-// Prints the given wide C string to the ostream.
-void PrintTo(const wchar_t* s, ostream* os) {
-  if (s == NULL) {
-    *os << "NULL";
-  } else {
-    *os << ImplicitCast_<const void*>(s) << " pointing to ";
-    PrintWideCharsAsStringTo(s, wcslen(s), os);
-  }
-}
-#endif  // wchar_t is native
-
-// Prints a ::string object.
-#if GTEST_HAS_GLOBAL_STRING
-void PrintStringTo(const ::string& s, ostream* os) {
-  PrintCharsAsStringTo(s.data(), s.size(), os);
-}
-#endif  // GTEST_HAS_GLOBAL_STRING
-
-void PrintStringTo(const ::std::string& s, ostream* os) {
-  PrintCharsAsStringTo(s.data(), s.size(), os);
-}
-
-// Prints a ::wstring object.
-#if GTEST_HAS_GLOBAL_WSTRING
-void PrintWideStringTo(const ::wstring& s, ostream* os) {
-  PrintWideCharsAsStringTo(s.data(), s.size(), os);
-}
-#endif  // GTEST_HAS_GLOBAL_WSTRING
-
-#if GTEST_HAS_STD_WSTRING
-void PrintWideStringTo(const ::std::wstring& s, ostream* os) {
-  PrintWideCharsAsStringTo(s.data(), s.size(), os);
-}
-#endif  // GTEST_HAS_STD_WSTRING
-
-}  // namespace internal
-
-}  // namespace testing
diff --git a/src/libs_3rdparty/gtest/src/src/gtest-test-part.cc b/src/libs_3rdparty/gtest/src/src/gtest-test-part.cc
deleted file mode 100644
index 5ddc67c..0000000
--- a/src/libs_3rdparty/gtest/src/src/gtest-test-part.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2008, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: mheule at google.com (Markus Heule)
-//
-// The Google C++ Testing Framework (Google Test)
-
-#include "gtest/gtest-test-part.h"
-
-// Indicates that this translation unit is part of Google Test's
-// implementation.  It must come before gtest-internal-inl.h is
-// included, or there will be a compiler error.  This trick is to
-// prevent a user from accidentally including gtest-internal-inl.h in
-// his code.
-#define GTEST_IMPLEMENTATION_ 1
-#include "src/gtest-internal-inl.h"
-#undef GTEST_IMPLEMENTATION_
-
-namespace testing {
-
-using internal::GetUnitTestImpl;
-
-// Gets the summary of the failure message by omitting the stack trace
-// in it.
-internal::String TestPartResult::ExtractSummary(const char* message) {
-  const char* const stack_trace = strstr(message, internal::kStackTraceMarker);
-  return stack_trace == NULL ? internal::String(message) :
-      internal::String(message, stack_trace - message);
-}
-
-// Prints a TestPartResult object.
-std::ostream& operator<<(std::ostream& os, const TestPartResult& result) {
-  return os
-      << result.file_name() << ":" << result.line_number() << ": "
-      << (result.type() == TestPartResult::kSuccess ? "Success" :
-          result.type() == TestPartResult::kFatalFailure ? "Fatal failure" :
-          "Non-fatal failure") << ":\n"
-      << result.message() << std::endl;
-}
-
-// Appends a TestPartResult to the array.
-void TestPartResultArray::Append(const TestPartResult& result) {
-  array_.push_back(result);
-}
-
-// Returns the TestPartResult at the given index (0-based).
-const TestPartResult& TestPartResultArray::GetTestPartResult(int index) const {
-  if (index < 0 || index >= size()) {
-    printf("\nInvalid index (%d) into TestPartResultArray.\n", index);
-    internal::posix::Abort();
-  }
-
-  return array_[index];
-}
-
-// Returns the number of TestPartResult objects in the array.
-int TestPartResultArray::size() const {
-  return static_cast<int>(array_.size());
-}
-
-namespace internal {
-
-HasNewFatalFailureHelper::HasNewFatalFailureHelper()
-    : has_new_fatal_failure_(false),
-      original_reporter_(GetUnitTestImpl()->
-                         GetTestPartResultReporterForCurrentThread()) {
-  GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(this);
-}
-
-HasNewFatalFailureHelper::~HasNewFatalFailureHelper() {
-  GetUnitTestImpl()->SetTestPartResultReporterForCurrentThread(
-      original_reporter_);
-}
-
-void HasNewFatalFailureHelper::ReportTestPartResult(
-    const TestPartResult& result) {
-  if (result.fatally_failed())
-    has_new_fatal_failure_ = true;
-  original_reporter_->ReportTestPartResult(result);
-}
-
-}  // namespace internal
-
-}  // namespace testing
diff --git a/src/libs_3rdparty/gtest/src/src/gtest-typed-test.cc b/src/libs_3rdparty/gtest/src/src/gtest-typed-test.cc
deleted file mode 100644
index a5cc88f..0000000
--- a/src/libs_3rdparty/gtest/src/src/gtest-typed-test.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright 2008 Google Inc.
-// All Rights Reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-
-#include "gtest/gtest-typed-test.h"
-#include "gtest/gtest.h"
-
-namespace testing {
-namespace internal {
-
-#if GTEST_HAS_TYPED_TEST_P
-
-// Skips to the first non-space char in str. Returns an empty string if str
-// contains only whitespace characters.
-static const char* SkipSpaces(const char* str) {
-  while (IsSpace(*str))
-    str++;
-  return str;
-}
-
-// Verifies that registered_tests match the test names in
-// defined_test_names_; returns registered_tests if successful, or
-// aborts the program otherwise.
-const char* TypedTestCasePState::VerifyRegisteredTestNames(
-    const char* file, int line, const char* registered_tests) {
-  typedef ::std::set<const char*>::const_iterator DefinedTestIter;
-  registered_ = true;
-
-  // Skip initial whitespace in registered_tests since some
-  // preprocessors prefix stringizied literals with whitespace.
-  registered_tests = SkipSpaces(registered_tests);
-
-  Message errors;
-  ::std::set<String> tests;
-  for (const char* names = registered_tests; names != NULL;
-       names = SkipComma(names)) {
-    const String name = GetPrefixUntilComma(names);
-    if (tests.count(name) != 0) {
-      errors << "Test " << name << " is listed more than once.\n";
-      continue;
-    }
-
-    bool found = false;
-    for (DefinedTestIter it = defined_test_names_.begin();
-         it != defined_test_names_.end();
-         ++it) {
-      if (name == *it) {
-        found = true;
-        break;
-      }
-    }
-
-    if (found) {
-      tests.insert(name);
-    } else {
-      errors << "No test named " << name
-             << " can be found in this test case.\n";
-    }
-  }
-
-  for (DefinedTestIter it = defined_test_names_.begin();
-       it != defined_test_names_.end();
-       ++it) {
-    if (tests.count(*it) == 0) {
-      errors << "You forgot to list test " << *it << ".\n";
-    }
-  }
-
-  const String& errors_str = errors.GetString();
-  if (errors_str != "") {
-    fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(),
-            errors_str.c_str());
-    fflush(stderr);
-    posix::Abort();
-  }
-
-  return registered_tests;
-}
-
-#endif  // GTEST_HAS_TYPED_TEST_P
-
-}  // namespace internal
-}  // namespace testing
diff --git a/src/libs_3rdparty/gtest/src/src/gtest.cc b/src/libs_3rdparty/gtest/src/src/gtest.cc
deleted file mode 100644
index 904d9d7..0000000
--- a/src/libs_3rdparty/gtest/src/src/gtest.cc
+++ /dev/null
@@ -1,4898 +0,0 @@
-// Copyright 2005, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-//
-// The Google C++ Testing Framework (Google Test)
-
-#include "gtest/gtest.h"
-#include "gtest/gtest-spi.h"
-
-#include <ctype.h>
-#include <math.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <wchar.h>
-#include <wctype.h>
-
-#include <algorithm>
-#include <ostream>  // NOLINT
-#include <sstream>
-#include <vector>
-
-#if GTEST_OS_LINUX
-
-// TODO(kenton at google.com): Use autoconf to detect availability of
-// gettimeofday().
-# define GTEST_HAS_GETTIMEOFDAY_ 1
-
-# include <fcntl.h>  // NOLINT
-# include <limits.h>  // NOLINT
-# include <sched.h>  // NOLINT
-// Declares vsnprintf().  This header is not available on Windows.
-# include <strings.h>  // NOLINT
-# include <sys/mman.h>  // NOLINT
-# include <sys/time.h>  // NOLINT
-# include <unistd.h>  // NOLINT
-# include <string>
-
-#elif GTEST_OS_SYMBIAN
-# define GTEST_HAS_GETTIMEOFDAY_ 1
-# include <sys/time.h>  // NOLINT
-
-#elif GTEST_OS_ZOS
-# define GTEST_HAS_GETTIMEOFDAY_ 1
-# include <sys/time.h>  // NOLINT
-
-// On z/OS we additionally need strings.h for strcasecmp.
-# include <strings.h>  // NOLINT
-
-#elif GTEST_OS_WINDOWS_MOBILE  // We are on Windows CE.
-
-# include <windows.h>  // NOLINT
-
-#elif GTEST_OS_WINDOWS  // We are on Windows proper.
-
-# include <io.h>  // NOLINT
-# include <sys/timeb.h>  // NOLINT
-# include <sys/types.h>  // NOLINT
-# include <sys/stat.h>  // NOLINT
-
-# if GTEST_OS_WINDOWS_MINGW
-// MinGW has gettimeofday() but not _ftime64().
-// TODO(kenton at google.com): Use autoconf to detect availability of
-//   gettimeofday().
-// TODO(kenton at google.com): There are other ways to get the time on
-//   Windows, like GetTickCount() or GetSystemTimeAsFileTime().  MinGW
-//   supports these.  consider using them instead.
-#  define GTEST_HAS_GETTIMEOFDAY_ 1
-#  include <sys/time.h>  // NOLINT
-# endif  // GTEST_OS_WINDOWS_MINGW
-
-// cpplint thinks that the header is already included, so we want to
-// silence it.
-# include <windows.h>  // NOLINT
-
-#else
-
-// Assume other platforms have gettimeofday().
-// TODO(kenton at google.com): Use autoconf to detect availability of
-//   gettimeofday().
-# define GTEST_HAS_GETTIMEOFDAY_ 1
-
-// cpplint thinks that the header is already included, so we want to
-// silence it.
-# include <sys/time.h>  // NOLINT
-# include <unistd.h>  // NOLINT
-
-#endif  // GTEST_OS_LINUX
-
-#if GTEST_HAS_EXCEPTIONS
-# include <stdexcept>
-#endif
-
-#if GTEST_CAN_STREAM_RESULTS_
-# include <arpa/inet.h>  // NOLINT
-# include <netdb.h>  // NOLINT
-#endif
-
-// Indicates that this translation unit is part of Google Test's
-// implementation.  It must come before gtest-internal-inl.h is
-// included, or there will be a compiler error.  This trick is to
-// prevent a user from accidentally including gtest-internal-inl.h in
-// his code.
-#define GTEST_IMPLEMENTATION_ 1
-#include "src/gtest-internal-inl.h"
-#undef GTEST_IMPLEMENTATION_
-
-#if GTEST_OS_WINDOWS
-# define vsnprintf _vsnprintf
-#endif  // GTEST_OS_WINDOWS
-
-namespace testing {
-
-using internal::CountIf;
-using internal::ForEach;
-using internal::GetElementOr;
-using internal::Shuffle;
-
-// Constants.
-
-// A test whose test case name or test name matches this filter is
-// disabled and not run.
-static const char kDisableTestFilter[] = "DISABLED_*:*/DISABLED_*";
-
-// A test case whose name matches this filter is considered a death
-// test case and will be run before test cases whose name doesn't
-// match this filter.
-static const char kDeathTestCaseFilter[] = "*DeathTest:*DeathTest/*";
-
-// A test filter that matches everything.
-static const char kUniversalFilter[] = "*";
-
-// The default output file for XML output.
-static const char kDefaultOutputFile[] = "test_detail.xml";
-
-// The environment variable name for the test shard index.
-static const char kTestShardIndex[] = "GTEST_SHARD_INDEX";
-// The environment variable name for the total number of test shards.
-static const char kTestTotalShards[] = "GTEST_TOTAL_SHARDS";
-// The environment variable name for the test shard status file.
-static const char kTestShardStatusFile[] = "GTEST_SHARD_STATUS_FILE";
-
-namespace internal {
-
-// The text used in failure messages to indicate the start of the
-// stack trace.
-const char kStackTraceMarker[] = "\nStack trace:\n";
-
-// g_help_flag is true iff the --help flag or an equivalent form is
-// specified on the command line.
-bool g_help_flag = false;
-
-}  // namespace internal
-
-GTEST_DEFINE_bool_(
-    also_run_disabled_tests,
-    internal::BoolFromGTestEnv("also_run_disabled_tests", false),
-    "Run disabled tests too, in addition to the tests normally being run.");
-
-GTEST_DEFINE_bool_(
-    break_on_failure,
-    internal::BoolFromGTestEnv("break_on_failure", false),
-    "True iff a failed assertion should be a debugger break-point.");
-
-GTEST_DEFINE_bool_(
-    catch_exceptions,
-    internal::BoolFromGTestEnv("catch_exceptions", true),
-    "True iff " GTEST_NAME_
-    " should catch exceptions and treat them as test failures.");
-
-GTEST_DEFINE_string_(
-    color,
-    internal::StringFromGTestEnv("color", "auto"),
-    "Whether to use colors in the output.  Valid values: yes, no, "
-    "and auto.  'auto' means to use colors if the output is "
-    "being sent to a terminal and the TERM environment variable "
-    "is set to xterm, xterm-color, xterm-256color, linux or cygwin.");
-
-GTEST_DEFINE_string_(
-    filter,
-    internal::StringFromGTestEnv("filter", kUniversalFilter),
-    "A colon-separated list of glob (not regex) patterns "
-    "for filtering the tests to run, optionally followed by a "
-    "'-' and a : separated list of negative patterns (tests to "
-    "exclude).  A test is run if it matches one of the positive "
-    "patterns and does not match any of the negative patterns.");
-
-GTEST_DEFINE_bool_(list_tests, false,
-                   "List all tests without running them.");
-
-GTEST_DEFINE_string_(
-    output,
-    internal::StringFromGTestEnv("output", ""),
-    "A format (currently must be \"xml\"), optionally followed "
-    "by a colon and an output file name or directory. A directory "
-    "is indicated by a trailing pathname separator. "
-    "Examples: \"xml:filename.xml\", \"xml::directoryname/\". "
-    "If a directory is specified, output files will be created "
-    "within that directory, with file-names based on the test "
-    "executable's name and, if necessary, made unique by adding "
-    "digits.");
-
-GTEST_DEFINE_bool_(
-    print_time,
-    internal::BoolFromGTestEnv("print_time", true),
-    "True iff " GTEST_NAME_
-    " should display elapsed time in text output.");
-
-GTEST_DEFINE_int32_(
-    random_seed,
-    internal::Int32FromGTestEnv("random_seed", 0),
-    "Random number seed to use when shuffling test orders.  Must be in range "
-    "[1, 99999], or 0 to use a seed based on the current time.");
-
-GTEST_DEFINE_int32_(
-    repeat,
-    internal::Int32FromGTestEnv("repeat", 1),
-    "How many times to repeat each test.  Specify a negative number "
-    "for repeating forever.  Useful for shaking out flaky tests.");
-
-GTEST_DEFINE_bool_(
-    show_internal_stack_frames, false,
-    "True iff " GTEST_NAME_ " should include internal stack frames when "
-    "printing test failure stack traces.");
-
-GTEST_DEFINE_bool_(
-    shuffle,
-    internal::BoolFromGTestEnv("shuffle", false),
-    "True iff " GTEST_NAME_
-    " should randomize tests' order on every run.");
-
-GTEST_DEFINE_int32_(
-    stack_trace_depth,
-    internal::Int32FromGTestEnv("stack_trace_depth", kMaxStackTraceDepth),
-    "The maximum number of stack frames to print when an "
-    "assertion fails.  The valid range is 0 through 100, inclusive.");
-
-GTEST_DEFINE_string_(
-    stream_result_to,
-    internal::StringFromGTestEnv("stream_result_to", ""),
-    "This flag specifies the host name and the port number on which to stream "
-    "test results. Example: \"localhost:555\". The flag is effective only on "
-    "Linux.");
-
-GTEST_DEFINE_bool_(
-    throw_on_failure,
-    internal::BoolFromGTestEnv("throw_on_failure", false),
-    "When this flag is specified, a failed assertion will throw an exception "
-    "if exceptions are enabled or exit the program with a non-zero code "
-    "otherwise.");
-
-namespace internal {
-
-// Generates a random number from [0, range), using a Linear
-// Congruential Generator (LCG).  Crashes if 'range' is 0 or greater
-// than kMaxRange.
-UInt32 Random::Generate(UInt32 range) {
-  // These constants are the same as are used in glibc's rand(3).
-  state_ = (1103515245U*state_ + 12345U) % kMaxRange;
-
-  GTEST_CHECK_(range > 0)
-      << "Cannot generate a number in the range [0, 0).";
-  GTEST_CHECK_(range <= kMaxRange)
-      << "Generation of a number in [0, " << range << ") was requested, "
-      << "but this can only generate numbers in [0, " << kMaxRange << ").";
-
-  // Converting via modulus introduces a bit of downward bias, but
-  // it's simple, and a linear congruential generator isn't too good
-  // to begin with.
-  return state_ % range;
-}
-
-// GTestIsInitialized() returns true iff the user has initialized
-// Google Test.  Useful for catching the user mistake of not initializing
-// Google Test before calling RUN_ALL_TESTS().
-//
-// A user must call testing::InitGoogleTest() to initialize Google
-// Test.  g_init_gtest_count is set to the number of times
-// InitGoogleTest() has been called.  We don't protect this variable
-// under a mutex as it is only accessed in the main thread.
-int g_init_gtest_count = 0;
-static bool GTestIsInitialized() { return g_init_gtest_count != 0; }
-
-// Iterates over a vector of TestCases, keeping a running sum of the
-// results of calling a given int-returning method on each.
-// Returns the sum.
-static int SumOverTestCaseList(const std::vector<TestCase*>& case_list,
-                               int (TestCase::*method)() const) {
-  int sum = 0;
-  for (size_t i = 0; i < case_list.size(); i++) {
-    sum += (case_list[i]->*method)();
-  }
-  return sum;
-}
-
-// Returns true iff the test case passed.
-static bool TestCasePassed(const TestCase* test_case) {
-  return test_case->should_run() && test_case->Passed();
-}
-
-// Returns true iff the test case failed.
-static bool TestCaseFailed(const TestCase* test_case) {
-  return test_case->should_run() && test_case->Failed();
-}
-
-// Returns true iff test_case contains at least one test that should
-// run.
-static bool ShouldRunTestCase(const TestCase* test_case) {
-  return test_case->should_run();
-}
-
-// AssertHelper constructor.
-AssertHelper::AssertHelper(TestPartResult::Type type,
-                           const char* file,
-                           int line,
-                           const char* message)
-    : data_(new AssertHelperData(type, file, line, message)) {
-}
-
-AssertHelper::~AssertHelper() {
-  delete data_;
-}
-
-// Message assignment, for assertion streaming support.
-void AssertHelper::operator=(const Message& message) const {
-  UnitTest::GetInstance()->
-    AddTestPartResult(data_->type, data_->file, data_->line,
-                      AppendUserMessage(data_->message, message),
-                      UnitTest::GetInstance()->impl()
-                      ->CurrentOsStackTraceExceptTop(1)
-                      // Skips the stack frame for this function itself.
-                      );  // NOLINT
-}
-
-// Mutex for linked pointers.
-GTEST_DEFINE_STATIC_MUTEX_(g_linked_ptr_mutex);
-
-// Application pathname gotten in InitGoogleTest.
-String g_executable_path;
-
-// Returns the current application's name, removing directory path if that
-// is present.
-FilePath GetCurrentExecutableName() {
-  FilePath result;
-
-#if GTEST_OS_WINDOWS
-  result.Set(FilePath(g_executable_path).RemoveExtension("exe"));
-#else
-  result.Set(FilePath(g_executable_path));
-#endif  // GTEST_OS_WINDOWS
-
-  return result.RemoveDirectoryName();
-}
-
-// Functions for processing the gtest_output flag.
-
-// Returns the output format, or "" for normal printed output.
-String UnitTestOptions::GetOutputFormat() {
-  const char* const gtest_output_flag = GTEST_FLAG(output).c_str();
-  if (gtest_output_flag == NULL) return String("");
-
-  const char* const colon = strchr(gtest_output_flag, ':');
-  return (colon == NULL) ?
-      String(gtest_output_flag) :
-      String(gtest_output_flag, colon - gtest_output_flag);
-}
-
-// Returns the name of the requested output file, or the default if none
-// was explicitly specified.
-String UnitTestOptions::GetAbsolutePathToOutputFile() {
-  const char* const gtest_output_flag = GTEST_FLAG(output).c_str();
-  if (gtest_output_flag == NULL)
-    return String("");
-
-  const char* const colon = strchr(gtest_output_flag, ':');
-  if (colon == NULL)
-    return String(internal::FilePath::ConcatPaths(
-               internal::FilePath(
-                   UnitTest::GetInstance()->original_working_dir()),
-               internal::FilePath(kDefaultOutputFile)).ToString() );
-
-  internal::FilePath output_name(colon + 1);
-  if (!output_name.IsAbsolutePath())
-    // TODO(wan at google.com): on Windows \some\path is not an absolute
-    // path (as its meaning depends on the current drive), yet the
-    // following logic for turning it into an absolute path is wrong.
-    // Fix it.
-    output_name = internal::FilePath::ConcatPaths(
-        internal::FilePath(UnitTest::GetInstance()->original_working_dir()),
-        internal::FilePath(colon + 1));
-
-  if (!output_name.IsDirectory())
-    return output_name.ToString();
-
-  internal::FilePath result(internal::FilePath::GenerateUniqueFileName(
-      output_name, internal::GetCurrentExecutableName(),
-      GetOutputFormat().c_str()));
-  return result.ToString();
-}
-
-// Returns true iff the wildcard pattern matches the string.  The
-// first ':' or '\0' character in pattern marks the end of it.
-//
-// This recursive algorithm isn't very efficient, but is clear and
-// works well enough for matching test names, which are short.
-bool UnitTestOptions::PatternMatchesString(const char *pattern,
-                                           const char *str) {
-  switch (*pattern) {
-    case '\0':
-    case ':':  // Either ':' or '\0' marks the end of the pattern.
-      return *str == '\0';
-    case '?':  // Matches any single character.
-      return *str != '\0' && PatternMatchesString(pattern + 1, str + 1);
-    case '*':  // Matches any string (possibly empty) of characters.
-      return (*str != '\0' && PatternMatchesString(pattern, str + 1)) ||
-          PatternMatchesString(pattern + 1, str);
-    default:  // Non-special character.  Matches itself.
-      return *pattern == *str &&
-          PatternMatchesString(pattern + 1, str + 1);
-  }
-}
-
-bool UnitTestOptions::MatchesFilter(const String& name, const char* filter) {
-  const char *cur_pattern = filter;
-  for (;;) {
-    if (PatternMatchesString(cur_pattern, name.c_str())) {
-      return true;
-    }
-
-    // Finds the next pattern in the filter.
-    cur_pattern = strchr(cur_pattern, ':');
-
-    // Returns if no more pattern can be found.
-    if (cur_pattern == NULL) {
-      return false;
-    }
-
-    // Skips the pattern separater (the ':' character).
-    cur_pattern++;
-  }
-}
-
-// TODO(keithray): move String function implementations to gtest-string.cc.
-
-// Returns true iff the user-specified filter matches the test case
-// name and the test name.
-bool UnitTestOptions::FilterMatchesTest(const String &test_case_name,
-                                        const String &test_name) {
-  const String& full_name = String::Format("%s.%s",
-                                           test_case_name.c_str(),
-                                           test_name.c_str());
-
-  // Split --gtest_filter at '-', if there is one, to separate into
-  // positive filter and negative filter portions
-  const char* const p = GTEST_FLAG(filter).c_str();
-  const char* const dash = strchr(p, '-');
-  String positive;
-  String negative;
-  if (dash == NULL) {
-    positive = GTEST_FLAG(filter).c_str();  // Whole string is a positive filter
-    negative = String("");
-  } else {
-    positive = String(p, dash - p);  // Everything up to the dash
-    negative = String(dash+1);       // Everything after the dash
-    if (positive.empty()) {
-      // Treat '-test1' as the same as '*-test1'
-      positive = kUniversalFilter;
-    }
-  }
-
-  // A filter is a colon-separated list of patterns.  It matches a
-  // test if any pattern in it matches the test.
-  return (MatchesFilter(full_name, positive.c_str()) &&
-          !MatchesFilter(full_name, negative.c_str()));
-}
-
-#if GTEST_HAS_SEH
-// Returns EXCEPTION_EXECUTE_HANDLER if Google Test should handle the
-// given SEH exception, or EXCEPTION_CONTINUE_SEARCH otherwise.
-// This function is useful as an __except condition.
-int UnitTestOptions::GTestShouldProcessSEH(DWORD exception_code) {
-  // Google Test should handle a SEH exception if:
-  //   1. the user wants it to, AND
-  //   2. this is not a breakpoint exception, AND
-  //   3. this is not a C++ exception (VC++ implements them via SEH,
-  //      apparently).
-  //
-  // SEH exception code for C++ exceptions.
-  // (see http://support.microsoft.com/kb/185294 for more information).
-  const DWORD kCxxExceptionCode = 0xe06d7363;
-
-  bool should_handle = true;
-
-  if (!GTEST_FLAG(catch_exceptions))
-    should_handle = false;
-  else if (exception_code == EXCEPTION_BREAKPOINT)
-    should_handle = false;
-  else if (exception_code == kCxxExceptionCode)
-    should_handle = false;
-
-  return should_handle ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH;
-}
-#endif  // GTEST_HAS_SEH
-
-}  // namespace internal
-
-// The c'tor sets this object as the test part result reporter used by
-// Google Test.  The 'result' parameter specifies where to report the
-// results. Intercepts only failures from the current thread.
-ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter(
-    TestPartResultArray* result)
-    : intercept_mode_(INTERCEPT_ONLY_CURRENT_THREAD),
-      result_(result) {
-  Init();
-}
-
-// The c'tor sets this object as the test part result reporter used by
-// Google Test.  The 'result' parameter specifies where to report the
-// results.
-ScopedFakeTestPartResultReporter::ScopedFakeTestPartResultReporter(
-    InterceptMode intercept_mode, TestPartResultArray* result)
-    : intercept_mode_(intercept_mode),
-      result_(result) {
-  Init();
-}
-
-void ScopedFakeTestPartResultReporter::Init() {
-  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();
-  if (intercept_mode_ == INTERCEPT_ALL_THREADS) {
-    old_reporter_ = impl->GetGlobalTestPartResultReporter();
-    impl->SetGlobalTestPartResultReporter(this);
-  } else {
-    old_reporter_ = impl->GetTestPartResultReporterForCurrentThread();
-    impl->SetTestPartResultReporterForCurrentThread(this);
-  }
-}
-
-// The d'tor restores the test part result reporter used by Google Test
-// before.
-ScopedFakeTestPartResultReporter::~ScopedFakeTestPartResultReporter() {
-  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();
-  if (intercept_mode_ == INTERCEPT_ALL_THREADS) {
-    impl->SetGlobalTestPartResultReporter(old_reporter_);
-  } else {
-    impl->SetTestPartResultReporterForCurrentThread(old_reporter_);
-  }
-}
-
-// Increments the test part result count and remembers the result.
-// This method is from the TestPartResultReporterInterface interface.
-void ScopedFakeTestPartResultReporter::ReportTestPartResult(
-    const TestPartResult& result) {
-  result_->Append(result);
-}
-
-namespace internal {
-
-// Returns the type ID of ::testing::Test.  We should always call this
-// instead of GetTypeId< ::testing::Test>() to get the type ID of
-// testing::Test.  This is to work around a suspected linker bug when
-// using Google Test as a framework on Mac OS X.  The bug causes
-// GetTypeId< ::testing::Test>() to return different values depending
-// on whether the call is from the Google Test framework itself or
-// from user test code.  GetTestTypeId() is guaranteed to always
-// return the same value, as it always calls GetTypeId<>() from the
-// gtest.cc, which is within the Google Test framework.
-TypeId GetTestTypeId() {
-  return GetTypeId<Test>();
-}
-
-// The value of GetTestTypeId() as seen from within the Google Test
-// library.  This is solely for testing GetTestTypeId().
-extern const TypeId kTestTypeIdInGoogleTest = GetTestTypeId();
-
-// This predicate-formatter checks that 'results' contains a test part
-// failure of the given type and that the failure message contains the
-// given substring.
-AssertionResult HasOneFailure(const char* /* results_expr */,
-                              const char* /* type_expr */,
-                              const char* /* substr_expr */,
-                              const TestPartResultArray& results,
-                              TestPartResult::Type type,
-                              const string& substr) {
-  const String expected(type == TestPartResult::kFatalFailure ?
-                        "1 fatal failure" :
-                        "1 non-fatal failure");
-  Message msg;
-  if (results.size() != 1) {
-    msg << "Expected: " << expected << "\n"
-        << "  Actual: " << results.size() << " failures";
-    for (int i = 0; i < results.size(); i++) {
-      msg << "\n" << results.GetTestPartResult(i);
-    }
-    return AssertionFailure() << msg;
-  }
-
-  const TestPartResult& r = results.GetTestPartResult(0);
-  if (r.type() != type) {
-    return AssertionFailure() << "Expected: " << expected << "\n"
-                              << "  Actual:\n"
-                              << r;
-  }
-
-  if (strstr(r.message(), substr.c_str()) == NULL) {
-    return AssertionFailure() << "Expected: " << expected << " containing \""
-                              << substr << "\"\n"
-                              << "  Actual:\n"
-                              << r;
-  }
-
-  return AssertionSuccess();
-}
-
-// The constructor of SingleFailureChecker remembers where to look up
-// test part results, what type of failure we expect, and what
-// substring the failure message should contain.
-SingleFailureChecker:: SingleFailureChecker(
-    const TestPartResultArray* results,
-    TestPartResult::Type type,
-    const string& substr)
-    : results_(results),
-      type_(type),
-      substr_(substr) {}
-
-// The destructor of SingleFailureChecker verifies that the given
-// TestPartResultArray contains exactly one failure that has the given
-// type and contains the given substring.  If that's not the case, a
-// non-fatal failure will be generated.
-SingleFailureChecker::~SingleFailureChecker() {
-  EXPECT_PRED_FORMAT3(HasOneFailure, *results_, type_, substr_);
-}
-
-DefaultGlobalTestPartResultReporter::DefaultGlobalTestPartResultReporter(
-    UnitTestImpl* unit_test) : unit_test_(unit_test) {}
-
-void DefaultGlobalTestPartResultReporter::ReportTestPartResult(
-    const TestPartResult& result) {
-  unit_test_->current_test_result()->AddTestPartResult(result);
-  unit_test_->listeners()->repeater()->OnTestPartResult(result);
-}
-
-DefaultPerThreadTestPartResultReporter::DefaultPerThreadTestPartResultReporter(
-    UnitTestImpl* unit_test) : unit_test_(unit_test) {}
-
-void DefaultPerThreadTestPartResultReporter::ReportTestPartResult(
-    const TestPartResult& result) {
-  unit_test_->GetGlobalTestPartResultReporter()->ReportTestPartResult(result);
-}
-
-// Returns the global test part result reporter.
-TestPartResultReporterInterface*
-UnitTestImpl::GetGlobalTestPartResultReporter() {
-  internal::MutexLock lock(&global_test_part_result_reporter_mutex_);
-  return global_test_part_result_repoter_;
-}
-
-// Sets the global test part result reporter.
-void UnitTestImpl::SetGlobalTestPartResultReporter(
-    TestPartResultReporterInterface* reporter) {
-  internal::MutexLock lock(&global_test_part_result_reporter_mutex_);
-  global_test_part_result_repoter_ = reporter;
-}
-
-// Returns the test part result reporter for the current thread.
-TestPartResultReporterInterface*
-UnitTestImpl::GetTestPartResultReporterForCurrentThread() {
-  return per_thread_test_part_result_reporter_.get();
-}
-
-// Sets the test part result reporter for the current thread.
-void UnitTestImpl::SetTestPartResultReporterForCurrentThread(
-    TestPartResultReporterInterface* reporter) {
-  per_thread_test_part_result_reporter_.set(reporter);
-}
-
-// Gets the number of successful test cases.
-int UnitTestImpl::successful_test_case_count() const {
-  return CountIf(test_cases_, TestCasePassed);
-}
-
-// Gets the number of failed test cases.
-int UnitTestImpl::failed_test_case_count() const {
-  return CountIf(test_cases_, TestCaseFailed);
-}
-
-// Gets the number of all test cases.
-int UnitTestImpl::total_test_case_count() const {
-  return static_cast<int>(test_cases_.size());
-}
-
-// Gets the number of all test cases that contain at least one test
-// that should run.
-int UnitTestImpl::test_case_to_run_count() const {
-  return CountIf(test_cases_, ShouldRunTestCase);
-}
-
-// Gets the number of successful tests.
-int UnitTestImpl::successful_test_count() const {
-  return SumOverTestCaseList(test_cases_, &TestCase::successful_test_count);
-}
-
-// Gets the number of failed tests.
-int UnitTestImpl::failed_test_count() const {
-  return SumOverTestCaseList(test_cases_, &TestCase::failed_test_count);
-}
-
-// Gets the number of disabled tests.
-int UnitTestImpl::disabled_test_count() const {
-  return SumOverTestCaseList(test_cases_, &TestCase::disabled_test_count);
-}
-
-// Gets the number of all tests.
-int UnitTestImpl::total_test_count() const {
-  return SumOverTestCaseList(test_cases_, &TestCase::total_test_count);
-}
-
-// Gets the number of tests that should run.
-int UnitTestImpl::test_to_run_count() const {
-  return SumOverTestCaseList(test_cases_, &TestCase::test_to_run_count);
-}
-
-// Returns the current OS stack trace as a String.
-//
-// The maximum number of stack frames to be included is specified by
-// the gtest_stack_trace_depth flag.  The skip_count parameter
-// specifies the number of top frames to be skipped, which doesn't
-// count against the number of frames to be included.
-//
-// For example, if Foo() calls Bar(), which in turn calls
-// CurrentOsStackTraceExceptTop(1), Foo() will be included in the
-// trace but Bar() and CurrentOsStackTraceExceptTop() won't.
-String UnitTestImpl::CurrentOsStackTraceExceptTop(int skip_count) {
-  (void)skip_count;
-  return String("");
-}
-
-// Returns the current time in milliseconds.
-TimeInMillis GetTimeInMillis() {
-#if GTEST_OS_WINDOWS_MOBILE || defined(__BORLANDC__)
-  // Difference between 1970-01-01 and 1601-01-01 in milliseconds.
-  // http://analogous.blogspot.com/2005/04/epoch.html
-  const TimeInMillis kJavaEpochToWinFileTimeDelta =
-    static_cast<TimeInMillis>(116444736UL) * 100000UL;
-  const DWORD kTenthMicrosInMilliSecond = 10000;
-
-  SYSTEMTIME now_systime;
-  FILETIME now_filetime;
-  ULARGE_INTEGER now_int64;
-  // TODO(kenton at google.com): Shouldn't this just use
-  //   GetSystemTimeAsFileTime()?
-  GetSystemTime(&now_systime);
-  if (SystemTimeToFileTime(&now_systime, &now_filetime)) {
-    now_int64.LowPart = now_filetime.dwLowDateTime;
-    now_int64.HighPart = now_filetime.dwHighDateTime;
-    now_int64.QuadPart = (now_int64.QuadPart / kTenthMicrosInMilliSecond) -
-      kJavaEpochToWinFileTimeDelta;
-    return now_int64.QuadPart;
-  }
-  return 0;
-#elif GTEST_OS_WINDOWS && !GTEST_HAS_GETTIMEOFDAY_
-  __timeb64 now;
-
-# ifdef _MSC_VER
-
-  // MSVC 8 deprecates _ftime64(), so we want to suppress warning 4996
-  // (deprecated function) there.
-  // TODO(kenton at google.com): Use GetTickCount()?  Or use
-  //   SystemTimeToFileTime()
-#  pragma warning(push)          // Saves the current warning state.
-#  pragma warning(disable:4996)  // Temporarily disables warning 4996.
-  _ftime64(&now);
-#  pragma warning(pop)           // Restores the warning state.
-# else
-
-  _ftime64(&now);
-
-# endif  // _MSC_VER
-
-  return static_cast<TimeInMillis>(now.time) * 1000 + now.millitm;
-#elif GTEST_HAS_GETTIMEOFDAY_
-  struct timeval now;
-  gettimeofday(&now, NULL);
-  return static_cast<TimeInMillis>(now.tv_sec) * 1000 + now.tv_usec / 1000;
-#else
-# error "Don't know how to get the current time on your system."
-#endif
-}
-
-// Utilities
-
-// class String
-
-// Returns the input enclosed in double quotes if it's not NULL;
-// otherwise returns "(null)".  For example, "\"Hello\"" is returned
-// for input "Hello".
-//
-// This is useful for printing a C string in the syntax of a literal.
-//
-// Known issue: escape sequences are not handled yet.
-String String::ShowCStringQuoted(const char* c_str) {
-  return c_str ? String::Format("\"%s\"", c_str) : String("(null)");
-}
-
-// Copies at most length characters from str into a newly-allocated
-// piece of memory of size length+1.  The memory is allocated with new[].
-// A terminating null byte is written to the memory, and a pointer to it
-// is returned.  If str is NULL, NULL is returned.
-static char* CloneString(const char* str, size_t length) {
-  if (str == NULL) {
-    return NULL;
-  } else {
-    char* const clone = new char[length + 1];
-    posix::StrNCpy(clone, str, length);
-    clone[length] = '\0';
-    return clone;
-  }
-}
-
-// Clones a 0-terminated C string, allocating memory using new.  The
-// caller is responsible for deleting[] the return value.  Returns the
-// cloned string, or NULL if the input is NULL.
-const char * String::CloneCString(const char* c_str) {
-  return (c_str == NULL) ?
-                    NULL : CloneString(c_str, strlen(c_str));
-}
-
-#if GTEST_OS_WINDOWS_MOBILE
-// Creates a UTF-16 wide string from the given ANSI string, allocating
-// memory using new. The caller is responsible for deleting the return
-// value using delete[]. Returns the wide string, or NULL if the
-// input is NULL.
-LPCWSTR String::AnsiToUtf16(const char* ansi) {
-  if (!ansi) return NULL;
-  const int length = strlen(ansi);
-  const int unicode_length =
-      MultiByteToWideChar(CP_ACP, 0, ansi, length,
-                          NULL, 0);
-  WCHAR* unicode = new WCHAR[unicode_length + 1];
-  MultiByteToWideChar(CP_ACP, 0, ansi, length,
-                      unicode, unicode_length);
-  unicode[unicode_length] = 0;
-  return unicode;
-}
-
-// Creates an ANSI string from the given wide string, allocating
-// memory using new. The caller is responsible for deleting the return
-// value using delete[]. Returns the ANSI string, or NULL if the
-// input is NULL.
-const char* String::Utf16ToAnsi(LPCWSTR utf16_str)  {
-  if (!utf16_str) return NULL;
-  const int ansi_length =
-      WideCharToMultiByte(CP_ACP, 0, utf16_str, -1,
-                          NULL, 0, NULL, NULL);
-  char* ansi = new char[ansi_length + 1];
-  WideCharToMultiByte(CP_ACP, 0, utf16_str, -1,
-                      ansi, ansi_length, NULL, NULL);
-  ansi[ansi_length] = 0;
-  return ansi;
-}
-
-#endif  // GTEST_OS_WINDOWS_MOBILE
-
-// Compares two C strings.  Returns true iff they have the same content.
-//
-// Unlike strcmp(), this function can handle NULL argument(s).  A NULL
-// C string is considered different to any non-NULL C string,
-// including the empty string.
-bool String::CStringEquals(const char * lhs, const char * rhs) {
-  if ( lhs == NULL ) return rhs == NULL;
-
-  if ( rhs == NULL ) return false;
-
-  return strcmp(lhs, rhs) == 0;
-}
-
-#if GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING
-
-// Converts an array of wide chars to a narrow string using the UTF-8
-// encoding, and streams the result to the given Message object.
-static void StreamWideCharsToMessage(const wchar_t* wstr, size_t length,
-                                     Message* msg) {
-  // TODO(wan): consider allowing a testing::String object to
-  // contain '\0'.  This will make it behave more like std::string,
-  // and will allow ToUtf8String() to return the correct encoding
-  // for '\0' s.t. we can get rid of the conditional here (and in
-  // several other places).
-  for (size_t i = 0; i != length; ) {  // NOLINT
-    if (wstr[i] != L'\0') {
-      *msg << WideStringToUtf8(wstr + i, static_cast<int>(length - i));
-      while (i != length && wstr[i] != L'\0')
-        i++;
-    } else {
-      *msg << '\0';
-      i++;
-    }
-  }
-}
-
-#endif  // GTEST_HAS_STD_WSTRING || GTEST_HAS_GLOBAL_WSTRING
-
-}  // namespace internal
-
-#if GTEST_HAS_STD_WSTRING
-// Converts the given wide string to a narrow string using the UTF-8
-// encoding, and streams the result to this Message object.
-Message& Message::operator <<(const ::std::wstring& wstr) {
-  internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this);
-  return *this;
-}
-#endif  // GTEST_HAS_STD_WSTRING
-
-#if GTEST_HAS_GLOBAL_WSTRING
-// Converts the given wide string to a narrow string using the UTF-8
-// encoding, and streams the result to this Message object.
-Message& Message::operator <<(const ::wstring& wstr) {
-  internal::StreamWideCharsToMessage(wstr.c_str(), wstr.length(), this);
-  return *this;
-}
-#endif  // GTEST_HAS_GLOBAL_WSTRING
-
-// AssertionResult constructors.
-// Used in EXPECT_TRUE/FALSE(assertion_result).
-AssertionResult::AssertionResult(const AssertionResult& other)
-    : success_(other.success_),
-      message_(other.message_.get() != NULL ?
-               new ::std::string(*other.message_) :
-               static_cast< ::std::string*>(NULL)) {
-}
-
-// Returns the assertion's negation. Used with EXPECT/ASSERT_FALSE.
-AssertionResult AssertionResult::operator!() const {
-  AssertionResult negation(!success_);
-  if (message_.get() != NULL)
-    negation << *message_;
-  return negation;
-}
-
-// Makes a successful assertion result.
-AssertionResult AssertionSuccess() {
-  return AssertionResult(true);
-}
-
-// Makes a failed assertion result.
-AssertionResult AssertionFailure() {
-  return AssertionResult(false);
-}
-
-// Makes a failed assertion result with the given failure message.
-// Deprecated; use AssertionFailure() << message.
-AssertionResult AssertionFailure(const Message& message) {
-  return AssertionFailure() << message;
-}
-
-namespace internal {
-
-// Constructs and returns the message for an equality assertion
-// (e.g. ASSERT_EQ, EXPECT_STREQ, etc) failure.
-//
-// The first four parameters are the expressions used in the assertion
-// and their values, as strings.  For example, for ASSERT_EQ(foo, bar)
-// where foo is 5 and bar is 6, we have:
-//
-//   expected_expression: "foo"
-//   actual_expression:   "bar"
-//   expected_value:      "5"
-//   actual_value:        "6"
-//
-// The ignoring_case parameter is true iff the assertion is a
-// *_STRCASEEQ*.  When it's true, the string " (ignoring case)" will
-// be inserted into the message.
-AssertionResult EqFailure(const char* expected_expression,
-                          const char* actual_expression,
-                          const String& expected_value,
-                          const String& actual_value,
-                          bool ignoring_case) {
-  Message msg;
-  msg << "Value of: " << actual_expression;
-  if (actual_value != actual_expression) {
-    msg << "\n  Actual: " << actual_value;
-  }
-
-  msg << "\nExpected: " << expected_expression;
-  if (ignoring_case) {
-    msg << " (ignoring case)";
-  }
-  if (expected_value != expected_expression) {
-    msg << "\nWhich is: " << expected_value;
-  }
-
-  return AssertionFailure() << msg;
-}
-
-// Constructs a failure message for Boolean assertions such as EXPECT_TRUE.
-String GetBoolAssertionFailureMessage(const AssertionResult& assertion_result,
-                                      const char* expression_text,
-                                      const char* actual_predicate_value,
-                                      const char* expected_predicate_value) {
-  const char* actual_message = assertion_result.message();
-  Message msg;
-  msg << "Value of: " << expression_text
-      << "\n  Actual: " << actual_predicate_value;
-  if (actual_message[0] != '\0')
-    msg << " (" << actual_message << ")";
-  msg << "\nExpected: " << expected_predicate_value;
-  return msg.GetString();
-}
-
-// Helper function for implementing ASSERT_NEAR.
-AssertionResult DoubleNearPredFormat(const char* expr1,
-                                     const char* expr2,
-                                     const char* abs_error_expr,
-                                     double val1,
-                                     double val2,
-                                     double abs_error) {
-  const double diff = fabs(val1 - val2);
-  if (diff <= abs_error) return AssertionSuccess();
-
-  // TODO(wan): do not print the value of an expression if it's
-  // already a literal.
-  return AssertionFailure()
-      << "The difference between " << expr1 << " and " << expr2
-      << " is " << diff << ", which exceeds " << abs_error_expr << ", where\n"
-      << expr1 << " evaluates to " << val1 << ",\n"
-      << expr2 << " evaluates to " << val2 << ", and\n"
-      << abs_error_expr << " evaluates to " << abs_error << ".";
-}
-
-
-// Helper template for implementing FloatLE() and DoubleLE().
-template <typename RawType>
-AssertionResult FloatingPointLE(const char* expr1,
-                                const char* expr2,
-                                RawType val1,
-                                RawType val2) {
-  // Returns success if val1 is less than val2,
-  if (val1 < val2) {
-    return AssertionSuccess();
-  }
-
-  // or if val1 is almost equal to val2.
-  const FloatingPoint<RawType> lhs(val1), rhs(val2);
-  if (lhs.AlmostEquals(rhs)) {
-    return AssertionSuccess();
-  }
-
-  // Note that the above two checks will both fail if either val1 or
-  // val2 is NaN, as the IEEE floating-point standard requires that
-  // any predicate involving a NaN must return false.
-
-  ::std::stringstream val1_ss;
-  val1_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
-          << val1;
-
-  ::std::stringstream val2_ss;
-  val2_ss << std::setprecision(std::numeric_limits<RawType>::digits10 + 2)
-          << val2;
-
-  return AssertionFailure()
-      << "Expected: (" << expr1 << ") <= (" << expr2 << ")\n"
-      << "  Actual: " << StringStreamToString(&val1_ss) << " vs "
-      << StringStreamToString(&val2_ss);
-}
-
-}  // namespace internal
-
-// Asserts that val1 is less than, or almost equal to, val2.  Fails
-// otherwise.  In particular, it fails if either val1 or val2 is NaN.
-AssertionResult FloatLE(const char* expr1, const char* expr2,
-                        float val1, float val2) {
-  return internal::FloatingPointLE<float>(expr1, expr2, val1, val2);
-}
-
-// Asserts that val1 is less than, or almost equal to, val2.  Fails
-// otherwise.  In particular, it fails if either val1 or val2 is NaN.
-AssertionResult DoubleLE(const char* expr1, const char* expr2,
-                         double val1, double val2) {
-  return internal::FloatingPointLE<double>(expr1, expr2, val1, val2);
-}
-
-namespace internal {
-
-// The helper function for {ASSERT|EXPECT}_EQ with int or enum
-// arguments.
-AssertionResult CmpHelperEQ(const char* expected_expression,
-                            const char* actual_expression,
-                            BiggestInt expected,
-                            BiggestInt actual) {
-  if (expected == actual) {
-    return AssertionSuccess();
-  }
-
-  return EqFailure(expected_expression,
-                   actual_expression,
-                   FormatForComparisonFailureMessage(expected, actual),
-                   FormatForComparisonFailureMessage(actual, expected),
-                   false);
-}
-
-// A macro for implementing the helper functions needed to implement
-// ASSERT_?? and EXPECT_?? with integer or enum arguments.  It is here
-// just to avoid copy-and-paste of similar code.
-#define GTEST_IMPL_CMP_HELPER_(op_name, op)\
-AssertionResult CmpHelper##op_name(const char* expr1, const char* expr2, \
-                                   BiggestInt val1, BiggestInt val2) {\
-  if (val1 op val2) {\
-    return AssertionSuccess();\
-  } else {\
-    return AssertionFailure() \
-        << "Expected: (" << expr1 << ") " #op " (" << expr2\
-        << "), actual: " << FormatForComparisonFailureMessage(val1, val2)\
-        << " vs " << FormatForComparisonFailureMessage(val2, val1);\
-  }\
-}
-
-// Implements the helper function for {ASSERT|EXPECT}_NE with int or
-// enum arguments.
-GTEST_IMPL_CMP_HELPER_(NE, !=)
-// Implements the helper function for {ASSERT|EXPECT}_LE with int or
-// enum arguments.
-GTEST_IMPL_CMP_HELPER_(LE, <=)
-// Implements the helper function for {ASSERT|EXPECT}_LT with int or
-// enum arguments.
-GTEST_IMPL_CMP_HELPER_(LT, < )
-// Implements the helper function for {ASSERT|EXPECT}_GE with int or
-// enum arguments.
-GTEST_IMPL_CMP_HELPER_(GE, >=)
-// Implements the helper function for {ASSERT|EXPECT}_GT with int or
-// enum arguments.
-GTEST_IMPL_CMP_HELPER_(GT, > )
-
-#undef GTEST_IMPL_CMP_HELPER_
-
-// The helper function for {ASSERT|EXPECT}_STREQ.
-AssertionResult CmpHelperSTREQ(const char* expected_expression,
-                               const char* actual_expression,
-                               const char* expected,
-                               const char* actual) {
-  if (String::CStringEquals(expected, actual)) {
-    return AssertionSuccess();
-  }
-
-  return EqFailure(expected_expression,
-                   actual_expression,
-                   String::ShowCStringQuoted(expected),
-                   String::ShowCStringQuoted(actual),
-                   false);
-}
-
-// The helper function for {ASSERT|EXPECT}_STRCASEEQ.
-AssertionResult CmpHelperSTRCASEEQ(const char* expected_expression,
-                                   const char* actual_expression,
-                                   const char* expected,
-                                   const char* actual) {
-  if (String::CaseInsensitiveCStringEquals(expected, actual)) {
-    return AssertionSuccess();
-  }
-
-  return EqFailure(expected_expression,
-                   actual_expression,
-                   String::ShowCStringQuoted(expected),
-                   String::ShowCStringQuoted(actual),
-                   true);
-}
-
-// The helper function for {ASSERT|EXPECT}_STRNE.
-AssertionResult CmpHelperSTRNE(const char* s1_expression,
-                               const char* s2_expression,
-                               const char* s1,
-                               const char* s2) {
-  if (!String::CStringEquals(s1, s2)) {
-    return AssertionSuccess();
-  } else {
-    return AssertionFailure() << "Expected: (" << s1_expression << ") != ("
-                              << s2_expression << "), actual: \""
-                              << s1 << "\" vs \"" << s2 << "\"";
-  }
-}
-
-// The helper function for {ASSERT|EXPECT}_STRCASENE.
-AssertionResult CmpHelperSTRCASENE(const char* s1_expression,
-                                   const char* s2_expression,
-                                   const char* s1,
-                                   const char* s2) {
-  if (!String::CaseInsensitiveCStringEquals(s1, s2)) {
-    return AssertionSuccess();
-  } else {
-    return AssertionFailure()
-        << "Expected: (" << s1_expression << ") != ("
-        << s2_expression << ") (ignoring case), actual: \""
-        << s1 << "\" vs \"" << s2 << "\"";
-  }
-}
-
-}  // namespace internal
-
-namespace {
-
-// Helper functions for implementing IsSubString() and IsNotSubstring().
-
-// This group of overloaded functions return true iff needle is a
-// substring of haystack.  NULL is considered a substring of itself
-// only.
-
-bool IsSubstringPred(const char* needle, const char* haystack) {
-  if (needle == NULL || haystack == NULL)
-    return needle == haystack;
-
-  return strstr(haystack, needle) != NULL;
-}
-
-bool IsSubstringPred(const wchar_t* needle, const wchar_t* haystack) {
-  if (needle == NULL || haystack == NULL)
-    return needle == haystack;
-
-  return wcsstr(haystack, needle) != NULL;
-}
-
-// StringType here can be either ::std::string or ::std::wstring.
-template <typename StringType>
-bool IsSubstringPred(const StringType& needle,
-                     const StringType& haystack) {
-  return haystack.find(needle) != StringType::npos;
-}
-
-// This function implements either IsSubstring() or IsNotSubstring(),
-// depending on the value of the expected_to_be_substring parameter.
-// StringType here can be const char*, const wchar_t*, ::std::string,
-// or ::std::wstring.
-template <typename StringType>
-AssertionResult IsSubstringImpl(
-    bool expected_to_be_substring,
-    const char* needle_expr, const char* haystack_expr,
-    const StringType& needle, const StringType& haystack) {
-  if (IsSubstringPred(needle, haystack) == expected_to_be_substring)
-    return AssertionSuccess();
-
-  const bool is_wide_string = sizeof(needle[0]) > 1;
-  const char* const begin_string_quote = is_wide_string ? "L\"" : "\"";
-  return AssertionFailure()
-      << "Value of: " << needle_expr << "\n"
-      << "  Actual: " << begin_string_quote << needle << "\"\n"
-      << "Expected: " << (expected_to_be_substring ? "" : "not ")
-      << "a substring of " << haystack_expr << "\n"
-      << "Which is: " << begin_string_quote << haystack << "\"";
-}
-
-}  // namespace
-
-// IsSubstring() and IsNotSubstring() check whether needle is a
-// substring of haystack (NULL is considered a substring of itself
-// only), and return an appropriate error message when they fail.
-
-AssertionResult IsSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const char* needle, const char* haystack) {
-  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);
-}
-
-AssertionResult IsSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const wchar_t* needle, const wchar_t* haystack) {
-  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);
-}
-
-AssertionResult IsNotSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const char* needle, const char* haystack) {
-  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);
-}
-
-AssertionResult IsNotSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const wchar_t* needle, const wchar_t* haystack) {
-  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);
-}
-
-AssertionResult IsSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const ::std::string& needle, const ::std::string& haystack) {
-  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);
-}
-
-AssertionResult IsNotSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const ::std::string& needle, const ::std::string& haystack) {
-  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);
-}
-
-#if GTEST_HAS_STD_WSTRING
-AssertionResult IsSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const ::std::wstring& needle, const ::std::wstring& haystack) {
-  return IsSubstringImpl(true, needle_expr, haystack_expr, needle, haystack);
-}
-
-AssertionResult IsNotSubstring(
-    const char* needle_expr, const char* haystack_expr,
-    const ::std::wstring& needle, const ::std::wstring& haystack) {
-  return IsSubstringImpl(false, needle_expr, haystack_expr, needle, haystack);
-}
-#endif  // GTEST_HAS_STD_WSTRING
-
-namespace internal {
-
-#if GTEST_OS_WINDOWS
-
-namespace {
-
-// Helper function for IsHRESULT{SuccessFailure} predicates
-AssertionResult HRESULTFailureHelper(const char* expr,
-                                     const char* expected,
-                                     long hr) {  // NOLINT
-# if GTEST_OS_WINDOWS_MOBILE
-
-  // Windows CE doesn't support FormatMessage.
-  const char error_text[] = "";
-
-# else
-
-  // Looks up the human-readable system message for the HRESULT code
-  // and since we're not passing any params to FormatMessage, we don't
-  // want inserts expanded.
-  const DWORD kFlags = FORMAT_MESSAGE_FROM_SYSTEM |
-                       FORMAT_MESSAGE_IGNORE_INSERTS;
-  const DWORD kBufSize = 4096;  // String::Format can't exceed this length.
-  // Gets the system's human readable message string for this HRESULT.
-  char error_text[kBufSize] = { '\0' };
-  DWORD message_length = ::FormatMessageA(kFlags,
-                                          0,  // no source, we're asking system
-                                          hr,  // the error
-                                          0,  // no line width restrictions
-                                          error_text,  // output buffer
-                                          kBufSize,  // buf size
-                                          NULL);  // no arguments for inserts
-  // Trims tailing white space (FormatMessage leaves a trailing cr-lf)
-  for (; message_length && IsSpace(error_text[message_length - 1]);
-          --message_length) {
-    error_text[message_length - 1] = '\0';
-  }
-
-# endif  // GTEST_OS_WINDOWS_MOBILE
-
-  const String error_hex(String::Format("0x%08X ", hr));
-  return ::testing::AssertionFailure()
-      << "Expected: " << expr << " " << expected << ".\n"
-      << "  Actual: " << error_hex << error_text << "\n";
-}
-
-}  // namespace
-
-AssertionResult IsHRESULTSuccess(const char* expr, long hr) {  // NOLINT
-  if (SUCCEEDED(hr)) {
-    return AssertionSuccess();
-  }
-  return HRESULTFailureHelper(expr, "succeeds", hr);
-}
-
-AssertionResult IsHRESULTFailure(const char* expr, long hr) {  // NOLINT
-  if (FAILED(hr)) {
-    return AssertionSuccess();
-  }
-  return HRESULTFailureHelper(expr, "fails", hr);
-}
-
-#endif  // GTEST_OS_WINDOWS
-
-// Utility functions for encoding Unicode text (wide strings) in
-// UTF-8.
-
-// A Unicode code-point can have upto 21 bits, and is encoded in UTF-8
-// like this:
-//
-// Code-point length   Encoding
-//   0 -  7 bits       0xxxxxxx
-//   8 - 11 bits       110xxxxx 10xxxxxx
-//  12 - 16 bits       1110xxxx 10xxxxxx 10xxxxxx
-//  17 - 21 bits       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
-
-// The maximum code-point a one-byte UTF-8 sequence can represent.
-const UInt32 kMaxCodePoint1 = (static_cast<UInt32>(1) <<  7) - 1;
-
-// The maximum code-point a two-byte UTF-8 sequence can represent.
-const UInt32 kMaxCodePoint2 = (static_cast<UInt32>(1) << (5 + 6)) - 1;
-
-// The maximum code-point a three-byte UTF-8 sequence can represent.
-const UInt32 kMaxCodePoint3 = (static_cast<UInt32>(1) << (4 + 2*6)) - 1;
-
-// The maximum code-point a four-byte UTF-8 sequence can represent.
-const UInt32 kMaxCodePoint4 = (static_cast<UInt32>(1) << (3 + 3*6)) - 1;
-
-// Chops off the n lowest bits from a bit pattern.  Returns the n
-// lowest bits.  As a side effect, the original bit pattern will be
-// shifted to the right by n bits.
-inline UInt32 ChopLowBits(UInt32* bits, int n) {
-  const UInt32 low_bits = *bits & ((static_cast<UInt32>(1) << n) - 1);
-  *bits >>= n;
-  return low_bits;
-}
-
-// Converts a Unicode code point to a narrow string in UTF-8 encoding.
-// code_point parameter is of type UInt32 because wchar_t may not be
-// wide enough to contain a code point.
-// The output buffer str must containt at least 32 characters.
-// The function returns the address of the output buffer.
-// If the code_point is not a valid Unicode code point
-// (i.e. outside of Unicode range U+0 to U+10FFFF) it will be output
-// as '(Invalid Unicode 0xXXXXXXXX)'.
-char* CodePointToUtf8(UInt32 code_point, char* str) {
-  if (code_point <= kMaxCodePoint1) {
-    str[1] = '\0';
-    str[0] = static_cast<char>(code_point);                          // 0xxxxxxx
-  } else if (code_point <= kMaxCodePoint2) {
-    str[2] = '\0';
-    str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx
-    str[0] = static_cast<char>(0xC0 | code_point);                   // 110xxxxx
-  } else if (code_point <= kMaxCodePoint3) {
-    str[3] = '\0';
-    str[2] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx
-    str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx
-    str[0] = static_cast<char>(0xE0 | code_point);                   // 1110xxxx
-  } else if (code_point <= kMaxCodePoint4) {
-    str[4] = '\0';
-    str[3] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx
-    str[2] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx
-    str[1] = static_cast<char>(0x80 | ChopLowBits(&code_point, 6));  // 10xxxxxx
-    str[0] = static_cast<char>(0xF0 | code_point);                   // 11110xxx
-  } else {
-    // The longest string String::Format can produce when invoked
-    // with these parameters is 28 character long (not including
-    // the terminating nul character). We are asking for 32 character
-    // buffer just in case. This is also enough for strncpy to
-    // null-terminate the destination string.
-    posix::StrNCpy(
-        str, String::Format("(Invalid Unicode 0x%X)", code_point).c_str(), 32);
-    str[31] = '\0';  // Makes sure no change in the format to strncpy leaves
-                     // the result unterminated.
-  }
-  return str;
-}
-
-// The following two functions only make sense if the the system
-// uses UTF-16 for wide string encoding. All supported systems
-// with 16 bit wchar_t (Windows, Cygwin, Symbian OS) do use UTF-16.
-
-// Determines if the arguments constitute UTF-16 surrogate pair
-// and thus should be combined into a single Unicode code point
-// using CreateCodePointFromUtf16SurrogatePair.
-inline bool IsUtf16SurrogatePair(wchar_t first, wchar_t second) {
-  return sizeof(wchar_t) == 2 &&
-      (first & 0xFC00) == 0xD800 && (second & 0xFC00) == 0xDC00;
-}
-
-// Creates a Unicode code point from UTF16 surrogate pair.
-inline UInt32 CreateCodePointFromUtf16SurrogatePair(wchar_t first,
-                                                    wchar_t second) {
-  const UInt32 mask = (1 << 10) - 1;
-  return (sizeof(wchar_t) == 2) ?
-      (((first & mask) << 10) | (second & mask)) + 0x10000 :
-      // This function should not be called when the condition is
-      // false, but we provide a sensible default in case it is.
-      static_cast<UInt32>(first);
-}
-
-// Converts a wide string to a narrow string in UTF-8 encoding.
-// The wide string is assumed to have the following encoding:
-//   UTF-16 if sizeof(wchar_t) == 2 (on Windows, Cygwin, Symbian OS)
-//   UTF-32 if sizeof(wchar_t) == 4 (on Linux)
-// Parameter str points to a null-terminated wide string.
-// Parameter num_chars may additionally limit the number
-// of wchar_t characters processed. -1 is used when the entire string
-// should be processed.
-// If the string contains code points that are not valid Unicode code points
-// (i.e. outside of Unicode range U+0 to U+10FFFF) they will be output
-// as '(Invalid Unicode 0xXXXXXXXX)'. If the string is in UTF16 encoding
-// and contains invalid UTF-16 surrogate pairs, values in those pairs
-// will be encoded as individual Unicode characters from Basic Normal Plane.
-String WideStringToUtf8(const wchar_t* str, int num_chars) {
-  if (num_chars == -1)
-    num_chars = static_cast<int>(wcslen(str));
-
-  ::std::stringstream stream;
-  for (int i = 0; i < num_chars; ++i) {
-    UInt32 unicode_code_point;
-
-    if (str[i] == L'\0') {
-      break;
-    } else if (i + 1 < num_chars && IsUtf16SurrogatePair(str[i], str[i + 1])) {
-      unicode_code_point = CreateCodePointFromUtf16SurrogatePair(str[i],
-                                                                 str[i + 1]);
-      i++;
-    } else {
-      unicode_code_point = static_cast<UInt32>(str[i]);
-    }
-
-    char buffer[32];  // CodePointToUtf8 requires a buffer this big.
-    stream << CodePointToUtf8(unicode_code_point, buffer);
-  }
-  return StringStreamToString(&stream);
-}
-
-// Converts a wide C string to a String using the UTF-8 encoding.
-// NULL will be converted to "(null)".
-String String::ShowWideCString(const wchar_t * wide_c_str) {
-  if (wide_c_str == NULL) return String("(null)");
-
-  return String(internal::WideStringToUtf8(wide_c_str, -1).c_str());
-}
-
-// Similar to ShowWideCString(), except that this function encloses
-// the converted string in double quotes.
-String String::ShowWideCStringQuoted(const wchar_t* wide_c_str) {
-  if (wide_c_str == NULL) return String("(null)");
-
-  return String::Format("L\"%s\"",
-                        String::ShowWideCString(wide_c_str).c_str());
-}
-
-// Compares two wide C strings.  Returns true iff they have the same
-// content.
-//
-// Unlike wcscmp(), this function can handle NULL argument(s).  A NULL
-// C string is considered different to any non-NULL C string,
-// including the empty string.
-bool String::WideCStringEquals(const wchar_t * lhs, const wchar_t * rhs) {
-  if (lhs == NULL) return rhs == NULL;
-
-  if (rhs == NULL) return false;
-
-  return wcscmp(lhs, rhs) == 0;
-}
-
-// Helper function for *_STREQ on wide strings.
-AssertionResult CmpHelperSTREQ(const char* expected_expression,
-                               const char* actual_expression,
-                               const wchar_t* expected,
-                               const wchar_t* actual) {
-  if (String::WideCStringEquals(expected, actual)) {
-    return AssertionSuccess();
-  }
-
-  return EqFailure(expected_expression,
-                   actual_expression,
-                   String::ShowWideCStringQuoted(expected),
-                   String::ShowWideCStringQuoted(actual),
-                   false);
-}
-
-// Helper function for *_STRNE on wide strings.
-AssertionResult CmpHelperSTRNE(const char* s1_expression,
-                               const char* s2_expression,
-                               const wchar_t* s1,
-                               const wchar_t* s2) {
-  if (!String::WideCStringEquals(s1, s2)) {
-    return AssertionSuccess();
-  }
-
-  return AssertionFailure() << "Expected: (" << s1_expression << ") != ("
-                            << s2_expression << "), actual: "
-                            << String::ShowWideCStringQuoted(s1)
-                            << " vs " << String::ShowWideCStringQuoted(s2);
-}
-
-// Compares two C strings, ignoring case.  Returns true iff they have
-// the same content.
-//
-// Unlike strcasecmp(), this function can handle NULL argument(s).  A
-// NULL C string is considered different to any non-NULL C string,
-// including the empty string.
-bool String::CaseInsensitiveCStringEquals(const char * lhs, const char * rhs) {
-  if (lhs == NULL)
-    return rhs == NULL;
-  if (rhs == NULL)
-    return false;
-  return posix::StrCaseCmp(lhs, rhs) == 0;
-}
-
-  // Compares two wide C strings, ignoring case.  Returns true iff they
-  // have the same content.
-  //
-  // Unlike wcscasecmp(), this function can handle NULL argument(s).
-  // A NULL C string is considered different to any non-NULL wide C string,
-  // including the empty string.
-  // NB: The implementations on different platforms slightly differ.
-  // On windows, this method uses _wcsicmp which compares according to LC_CTYPE
-  // environment variable. On GNU platform this method uses wcscasecmp
-  // which compares according to LC_CTYPE category of the current locale.
-  // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the
-  // current locale.
-bool String::CaseInsensitiveWideCStringEquals(const wchar_t* lhs,
-                                              const wchar_t* rhs) {
-  if (lhs == NULL) return rhs == NULL;
-
-  if (rhs == NULL) return false;
-
-#if GTEST_OS_WINDOWS
-  return _wcsicmp(lhs, rhs) == 0;
-#elif GTEST_OS_LINUX && !GTEST_OS_LINUX_ANDROID
-  return wcscasecmp(lhs, rhs) == 0;
-#else
-  // Android, Mac OS X and Cygwin don't define wcscasecmp.
-  // Other unknown OSes may not define it either.
-  wint_t left, right;
-  do {
-    left = towlower(*lhs++);
-    right = towlower(*rhs++);
-  } while (left && left == right);
-  return left == right;
-#endif  // OS selector
-}
-
-// Compares this with another String.
-// Returns < 0 if this is less than rhs, 0 if this is equal to rhs, or > 0
-// if this is greater than rhs.
-int String::Compare(const String & rhs) const {
-  const char* const lhs_c_str = c_str();
-  const char* const rhs_c_str = rhs.c_str();
-
-  if (lhs_c_str == NULL) {
-    return rhs_c_str == NULL ? 0 : -1;  // NULL < anything except NULL
-  } else if (rhs_c_str == NULL) {
-    return 1;
-  }
-
-  const size_t shorter_str_len =
-      length() <= rhs.length() ? length() : rhs.length();
-  for (size_t i = 0; i != shorter_str_len; i++) {
-    if (lhs_c_str[i] < rhs_c_str[i]) {
-      return -1;
-    } else if (lhs_c_str[i] > rhs_c_str[i]) {
-      return 1;
-    }
-  }
-  return (length() < rhs.length()) ? -1 :
-      (length() > rhs.length()) ? 1 : 0;
-}
-
-// Returns true iff this String ends with the given suffix.  *Any*
-// String is considered to end with a NULL or empty suffix.
-bool String::EndsWith(const char* suffix) const {
-  if (suffix == NULL || CStringEquals(suffix, "")) return true;
-
-  if (c_str() == NULL) return false;
-
-  const size_t this_len = strlen(c_str());
-  const size_t suffix_len = strlen(suffix);
-  return (this_len >= suffix_len) &&
-         CStringEquals(c_str() + this_len - suffix_len, suffix);
-}
-
-// Returns true iff this String ends with the given suffix, ignoring case.
-// Any String is considered to end with a NULL or empty suffix.
-bool String::EndsWithCaseInsensitive(const char* suffix) const {
-  if (suffix == NULL || CStringEquals(suffix, "")) return true;
-
-  if (c_str() == NULL) return false;
-
-  const size_t this_len = strlen(c_str());
-  const size_t suffix_len = strlen(suffix);
-  return (this_len >= suffix_len) &&
-         CaseInsensitiveCStringEquals(c_str() + this_len - suffix_len, suffix);
-}
-
-// Formats a list of arguments to a String, using the same format
-// spec string as for printf.
-//
-// We do not use the StringPrintf class as it is not universally
-// available.
-//
-// The result is limited to 4096 characters (including the tailing 0).
-// If 4096 characters are not enough to format the input, or if
-// there's an error, "<formatting error or buffer exceeded>" is
-// returned.
-String String::Format(const char * format, ...) {
-  va_list args;
-  va_start(args, format);
-
-  char buffer[4096];
-  const int kBufferSize = sizeof(buffer)/sizeof(buffer[0]);
-
-  // MSVC 8 deprecates vsnprintf(), so we want to suppress warning
-  // 4996 (deprecated function) there.
-#ifdef _MSC_VER  // We are using MSVC.
-# pragma warning(push)          // Saves the current warning state.
-# pragma warning(disable:4996)  // Temporarily disables warning 4996.
-
-  const int size = vsnprintf(buffer, kBufferSize, format, args);
-
-# pragma warning(pop)           // Restores the warning state.
-#else  // We are not using MSVC.
-  const int size = vsnprintf(buffer, kBufferSize, format, args);
-#endif  // _MSC_VER
-  va_end(args);
-
-  // vsnprintf()'s behavior is not portable.  When the buffer is not
-  // big enough, it returns a negative value in MSVC, and returns the
-  // needed buffer size on Linux.  When there is an output error, it
-  // always returns a negative value.  For simplicity, we lump the two
-  // error cases together.
-  if (size < 0 || size >= kBufferSize) {
-    return String("<formatting error or buffer exceeded>");
-  } else {
-    return String(buffer, size);
-  }
-}
-
-// Converts the buffer in a stringstream to a String, converting NUL
-// bytes to "\\0" along the way.
-String StringStreamToString(::std::stringstream* ss) {
-  const ::std::string& str = ss->str();
-  const char* const start = str.c_str();
-  const char* const end = start + str.length();
-
-  // We need to use a helper stringstream to do this transformation
-  // because String doesn't support push_back().
-  ::std::stringstream helper;
-  for (const char* ch = start; ch != end; ++ch) {
-    if (*ch == '\0') {
-      helper << "\\0";  // Replaces NUL with "\\0";
-    } else {
-      helper.put(*ch);
-    }
-  }
-
-  return String(helper.str().c_str());
-}
-
-// Appends the user-supplied message to the Google-Test-generated message.
-String AppendUserMessage(const String& gtest_msg,
-                         const Message& user_msg) {
-  // Appends the user message if it's non-empty.
-  const String user_msg_string = user_msg.GetString();
-  if (user_msg_string.empty()) {
-    return gtest_msg;
-  }
-
-  Message msg;
-  msg << gtest_msg << "\n" << user_msg_string;
-
-  return msg.GetString();
-}
-
-}  // namespace internal
-
-// class TestResult
-
-// Creates an empty TestResult.
-TestResult::TestResult()
-    : death_test_count_(0),
-      elapsed_time_(0) {
-}
-
-// D'tor.
-TestResult::~TestResult() {
-}
-
-// Returns the i-th test part result among all the results. i can
-// range from 0 to total_part_count() - 1. If i is not in that range,
-// aborts the program.
-const TestPartResult& TestResult::GetTestPartResult(int i) const {
-  if (i < 0 || i >= total_part_count())
-    internal::posix::Abort();
-  return test_part_results_.at(i);
-}
-
-// Returns the i-th test property. i can range from 0 to
-// test_property_count() - 1. If i is not in that range, aborts the
-// program.
-const TestProperty& TestResult::GetTestProperty(int i) const {
-  if (i < 0 || i >= test_property_count())
-    internal::posix::Abort();
-  return test_properties_.at(i);
-}
-
-// Clears the test part results.
-void TestResult::ClearTestPartResults() {
-  test_part_results_.clear();
-}
-
-// Adds a test part result to the list.
-void TestResult::AddTestPartResult(const TestPartResult& test_part_result) {
-  test_part_results_.push_back(test_part_result);
-}
-
-// Adds a test property to the list. If a property with the same key as the
-// supplied property is already represented, the value of this test_property
-// replaces the old value for that key.
-void TestResult::RecordProperty(const TestProperty& test_property) {
-  if (!ValidateTestProperty(test_property)) {
-    return;
-  }
-  internal::MutexLock lock(&test_properites_mutex_);
-  const std::vector<TestProperty>::iterator property_with_matching_key =
-      std::find_if(test_properties_.begin(), test_properties_.end(),
-                   internal::TestPropertyKeyIs(test_property.key()));
-  if (property_with_matching_key == test_properties_.end()) {
-    test_properties_.push_back(test_property);
-    return;
-  }
-  property_with_matching_key->SetValue(test_property.value());
-}
-
-// Adds a failure if the key is a reserved attribute of Google Test
-// testcase tags.  Returns true if the property is valid.
-bool TestResult::ValidateTestProperty(const TestProperty& test_property) {
-  internal::String key(test_property.key());
-  if (key == "name" || key == "status" || key == "time" || key == "classname") {
-    ADD_FAILURE()
-        << "Reserved key used in RecordProperty(): "
-        << key
-        << " ('name', 'status', 'time', and 'classname' are reserved by "
-        << GTEST_NAME_ << ")";
-    return false;
-  }
-  return true;
-}
-
-// Clears the object.
-void TestResult::Clear() {
-  test_part_results_.clear();
-  test_properties_.clear();
-  death_test_count_ = 0;
-  elapsed_time_ = 0;
-}
-
-// Returns true iff the test failed.
-bool TestResult::Failed() const {
-  for (int i = 0; i < total_part_count(); ++i) {
-    if (GetTestPartResult(i).failed())
-      return true;
-  }
-  return false;
-}
-
-// Returns true iff the test part fatally failed.
-static bool TestPartFatallyFailed(const TestPartResult& result) {
-  return result.fatally_failed();
-}
-
-// Returns true iff the test fatally failed.
-bool TestResult::HasFatalFailure() const {
-  return CountIf(test_part_results_, TestPartFatallyFailed) > 0;
-}
-
-// Returns true iff the test part non-fatally failed.
-static bool TestPartNonfatallyFailed(const TestPartResult& result) {
-  return result.nonfatally_failed();
-}
-
-// Returns true iff the test has a non-fatal failure.
-bool TestResult::HasNonfatalFailure() const {
-  return CountIf(test_part_results_, TestPartNonfatallyFailed) > 0;
-}
-
-// Gets the number of all test parts.  This is the sum of the number
-// of successful test parts and the number of failed test parts.
-int TestResult::total_part_count() const {
-  return static_cast<int>(test_part_results_.size());
-}
-
-// Returns the number of the test properties.
-int TestResult::test_property_count() const {
-  return static_cast<int>(test_properties_.size());
-}
-
-// class Test
-
-// Creates a Test object.
-
-// The c'tor saves the values of all Google Test flags.
-Test::Test()
-    : gtest_flag_saver_(new internal::GTestFlagSaver) {
-}
-
-// The d'tor restores the values of all Google Test flags.
-Test::~Test() {
-  delete gtest_flag_saver_;
-}
-
-// Sets up the test fixture.
-//
-// A sub-class may override this.
-void Test::SetUp() {
-}
-
-// Tears down the test fixture.
-//
-// A sub-class may override this.
-void Test::TearDown() {
-}
-
-// Allows user supplied key value pairs to be recorded for later output.
-void Test::RecordProperty(const char* key, const char* value) {
-  UnitTest::GetInstance()->RecordPropertyForCurrentTest(key, value);
-}
-
-// Allows user supplied key value pairs to be recorded for later output.
-void Test::RecordProperty(const char* key, int value) {
-  Message value_message;
-  value_message << value;
-  RecordProperty(key, value_message.GetString().c_str());
-}
-
-namespace internal {
-
-void ReportFailureInUnknownLocation(TestPartResult::Type result_type,
-                                    const String& message) {
-  // This function is a friend of UnitTest and as such has access to
-  // AddTestPartResult.
-  UnitTest::GetInstance()->AddTestPartResult(
-      result_type,
-      NULL,  // No info about the source file where the exception occurred.
-      -1,    // We have no info on which line caused the exception.
-      message,
-      String());  // No stack trace, either.
-}
-
-}  // namespace internal
-
-// Google Test requires all tests in the same test case to use the same test
-// fixture class.  This function checks if the current test has the
-// same fixture class as the first test in the current test case.  If
-// yes, it returns true; otherwise it generates a Google Test failure and
-// returns false.
-bool Test::HasSameFixtureClass() {
-  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();
-  const TestCase* const test_case = impl->current_test_case();
-
-  // Info about the first test in the current test case.
-  const TestInfo* const first_test_info = test_case->test_info_list()[0];
-  const internal::TypeId first_fixture_id = first_test_info->fixture_class_id_;
-  const char* const first_test_name = first_test_info->name();
-
-  // Info about the current test.
-  const TestInfo* const this_test_info = impl->current_test_info();
-  const internal::TypeId this_fixture_id = this_test_info->fixture_class_id_;
-  const char* const this_test_name = this_test_info->name();
-
-  if (this_fixture_id != first_fixture_id) {
-    // Is the first test defined using TEST?
-    const bool first_is_TEST = first_fixture_id == internal::GetTestTypeId();
-    // Is this test defined using TEST?
-    const bool this_is_TEST = this_fixture_id == internal::GetTestTypeId();
-
-    if (first_is_TEST || this_is_TEST) {
-      // The user mixed TEST and TEST_F in this test case - we'll tell
-      // him/her how to fix it.
-
-      // Gets the name of the TEST and the name of the TEST_F.  Note
-      // that first_is_TEST and this_is_TEST cannot both be true, as
-      // the fixture IDs are different for the two tests.
-      const char* const TEST_name =
-          first_is_TEST ? first_test_name : this_test_name;
-      const char* const TEST_F_name =
-          first_is_TEST ? this_test_name : first_test_name;
-
-      ADD_FAILURE()
-          << "All tests in the same test case must use the same test fixture\n"
-          << "class, so mixing TEST_F and TEST in the same test case is\n"
-          << "illegal.  In test case " << this_test_info->test_case_name()
-          << ",\n"
-          << "test " << TEST_F_name << " is defined using TEST_F but\n"
-          << "test " << TEST_name << " is defined using TEST.  You probably\n"
-          << "want to change the TEST to TEST_F or move it to another test\n"
-          << "case.";
-    } else {
-      // The user defined two fixture classes with the same name in
-      // two namespaces - we'll tell him/her how to fix it.
-      ADD_FAILURE()
-          << "All tests in the same test case must use the same test fixture\n"
-          << "class.  However, in test case "
-          << this_test_info->test_case_name() << ",\n"
-          << "you defined test " << first_test_name
-          << " and test " << this_test_name << "\n"
-          << "using two different test fixture classes.  This can happen if\n"
-          << "the two classes are from different namespaces or translation\n"
-          << "units and have the same name.  You should probably rename one\n"
-          << "of the classes to put the tests into different test cases.";
-    }
-    return false;
-  }
-
-  return true;
-}
-
-#if GTEST_HAS_SEH
-
-// Adds an "exception thrown" fatal failure to the current test.  This
-// function returns its result via an output parameter pointer because VC++
-// prohibits creation of objects with destructors on stack in functions
-// using __try (see error C2712).
-static internal::String* FormatSehExceptionMessage(DWORD exception_code,
-                                                   const char* location) {
-  Message message;
-  message << "SEH exception with code 0x" << std::setbase(16) <<
-    exception_code << std::setbase(10) << " thrown in " << location << ".";
-
-  return new internal::String(message.GetString());
-}
-
-#endif  // GTEST_HAS_SEH
-
-#if GTEST_HAS_EXCEPTIONS
-
-// Adds an "exception thrown" fatal failure to the current test.
-static internal::String FormatCxxExceptionMessage(const char* description,
-                                                  const char* location) {
-  Message message;
-  if (description != NULL) {
-    message << "C++ exception with description \"" << description << "\"";
-  } else {
-    message << "Unknown C++ exception";
-  }
-  message << " thrown in " << location << ".";
-
-  return message.GetString();
-}
-
-static internal::String PrintTestPartResultToString(
-    const TestPartResult& test_part_result);
-
-// A failed Google Test assertion will throw an exception of this type when
-// GTEST_FLAG(throw_on_failure) is true (if exceptions are enabled).  We
-// derive it from std::runtime_error, which is for errors presumably
-// detectable only at run time.  Since std::runtime_error inherits from
-// std::exception, many testing frameworks know how to extract and print the
-// message inside it.
-class GoogleTestFailureException : public ::std::runtime_error {
- public:
-  explicit GoogleTestFailureException(const TestPartResult& failure)
-      : ::std::runtime_error(PrintTestPartResultToString(failure).c_str()) {}
-};
-#endif  // GTEST_HAS_EXCEPTIONS
-
-namespace internal {
-// We put these helper functions in the internal namespace as IBM's xlC
-// compiler rejects the code if they were declared static.
-
-// Runs the given method and handles SEH exceptions it throws, when
-// SEH is supported; returns the 0-value for type Result in case of an
-// SEH exception.  (Microsoft compilers cannot handle SEH and C++
-// exceptions in the same function.  Therefore, we provide a separate
-// wrapper function for handling SEH exceptions.)
-template <class T, typename Result>
-Result HandleSehExceptionsInMethodIfSupported(
-    T* object, Result (T::*method)(), const char* location) {
-#if GTEST_HAS_SEH
-  __try {
-    return (object->*method)();
-  } __except (internal::UnitTestOptions::GTestShouldProcessSEH(  // NOLINT
-      GetExceptionCode())) {
-    // We create the exception message on the heap because VC++ prohibits
-    // creation of objects with destructors on stack in functions using __try
-    // (see error C2712).
-    internal::String* exception_message = FormatSehExceptionMessage(
-        GetExceptionCode(), location);
-    internal::ReportFailureInUnknownLocation(TestPartResult::kFatalFailure,
-                                             *exception_message);
-    delete exception_message;
-    return static_cast<Result>(0);
-  }
-#else
-  (void)location;
-  return (object->*method)();
-#endif  // GTEST_HAS_SEH
-}
-
-// Runs the given method and catches and reports C++ and/or SEH-style
-// exceptions, if they are supported; returns the 0-value for type
-// Result in case of an SEH exception.
-template <class T, typename Result>
-Result HandleExceptionsInMethodIfSupported(
-    T* object, Result (T::*method)(), const char* location) {
-  // NOTE: The user code can affect the way in which Google Test handles
-  // exceptions by setting GTEST_FLAG(catch_exceptions), but only before
-  // RUN_ALL_TESTS() starts. It is technically possible to check the flag
-  // after the exception is caught and either report or re-throw the
-  // exception based on the flag's value:
-  //
-  // try {
-  //   // Perform the test method.
-  // } catch (...) {
-  //   if (GTEST_FLAG(catch_exceptions))
-  //     // Report the exception as failure.
-  //   else
-  //     throw;  // Re-throws the original exception.
-  // }
-  //
-  // However, the purpose of this flag is to allow the program to drop into
-  // the debugger when the exception is thrown. On most platforms, once the
-  // control enters the catch block, the exception origin information is
-  // lost and the debugger will stop the program at the point of the
-  // re-throw in this function -- instead of at the point of the original
-  // throw statement in the code under test.  For this reason, we perform
-  // the check early, sacrificing the ability to affect Google Test's
-  // exception handling in the method where the exception is thrown.
-  if (internal::GetUnitTestImpl()->catch_exceptions()) {
-#if GTEST_HAS_EXCEPTIONS
-    try {
-      return HandleSehExceptionsInMethodIfSupported(object, method, location);
-    } catch (const GoogleTestFailureException&) {  // NOLINT
-      // This exception doesn't originate in code under test. It makes no
-      // sense to report it as a test failure.
-      throw;
-    } catch (const std::exception& e) {  // NOLINT
-      internal::ReportFailureInUnknownLocation(
-          TestPartResult::kFatalFailure,
-          FormatCxxExceptionMessage(e.what(), location));
-    } catch (...) {  // NOLINT
-      internal::ReportFailureInUnknownLocation(
-          TestPartResult::kFatalFailure,
-          FormatCxxExceptionMessage(NULL, location));
-    }
-    return static_cast<Result>(0);
-#else
-    return HandleSehExceptionsInMethodIfSupported(object, method, location);
-#endif  // GTEST_HAS_EXCEPTIONS
-  } else {
-    return (object->*method)();
-  }
-}
-
-}  // namespace internal
-
-// Runs the test and updates the test result.
-void Test::Run() {
-  if (!HasSameFixtureClass()) return;
-
-  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();
-  impl->os_stack_trace_getter()->UponLeavingGTest();
-  internal::HandleExceptionsInMethodIfSupported(this, &Test::SetUp, "SetUp()");
-  // We will run the test only if SetUp() was successful.
-  if (!HasFatalFailure()) {
-    impl->os_stack_trace_getter()->UponLeavingGTest();
-    internal::HandleExceptionsInMethodIfSupported(
-        this, &Test::TestBody, "the test body");
-  }
-
-  // However, we want to clean up as much as possible.  Hence we will
-  // always call TearDown(), even if SetUp() or the test body has
-  // failed.
-  impl->os_stack_trace_getter()->UponLeavingGTest();
-  internal::HandleExceptionsInMethodIfSupported(
-      this, &Test::TearDown, "TearDown()");
-}
-
-// Returns true iff the current test has a fatal failure.
-bool Test::HasFatalFailure() {
-  return internal::GetUnitTestImpl()->current_test_result()->HasFatalFailure();
-}
-
-// Returns true iff the current test has a non-fatal failure.
-bool Test::HasNonfatalFailure() {
-  return internal::GetUnitTestImpl()->current_test_result()->
-      HasNonfatalFailure();
-}
-
-// class TestInfo
-
-// Constructs a TestInfo object. It assumes ownership of the test factory
-// object.
-// TODO(vladl at google.com): Make a_test_case_name and a_name const string&'s
-// to signify they cannot be NULLs.
-TestInfo::TestInfo(const char* a_test_case_name,
-                   const char* a_name,
-                   const char* a_type_param,
-                   const char* a_value_param,
-                   internal::TypeId fixture_class_id,
-                   internal::TestFactoryBase* factory)
-    : test_case_name_(a_test_case_name),
-      name_(a_name),
-      type_param_(a_type_param ? new std::string(a_type_param) : NULL),
-      value_param_(a_value_param ? new std::string(a_value_param) : NULL),
-      fixture_class_id_(fixture_class_id),
-      should_run_(false),
-      is_disabled_(false),
-      matches_filter_(false),
-      factory_(factory),
-      result_() {}
-
-// Destructs a TestInfo object.
-TestInfo::~TestInfo() { delete factory_; }
-
-namespace internal {
-
-// Creates a new TestInfo object and registers it with Google Test;
-// returns the created object.
-//
-// Arguments:
-//
-//   test_case_name:   name of the test case
-//   name:             name of the test
-//   type_param:       the name of the test's type parameter, or NULL if
-//                     this is not a typed or a type-parameterized test.
-//   value_param:      text representation of the test's value parameter,
-//                     or NULL if this is not a value-parameterized test.
-//   fixture_class_id: ID of the test fixture class
-//   set_up_tc:        pointer to the function that sets up the test case
-//   tear_down_tc:     pointer to the function that tears down the test case
-//   factory:          pointer to the factory that creates a test object.
-//                     The newly created TestInfo instance will assume
-//                     ownership of the factory object.
-TestInfo* MakeAndRegisterTestInfo(
-    const char* test_case_name, const char* name,
-    const char* type_param,
-    const char* value_param,
-    TypeId fixture_class_id,
-    SetUpTestCaseFunc set_up_tc,
-    TearDownTestCaseFunc tear_down_tc,
-    TestFactoryBase* factory) {
-  TestInfo* const test_info =
-      new TestInfo(test_case_name, name, type_param, value_param,
-                   fixture_class_id, factory);
-  GetUnitTestImpl()->AddTestInfo(set_up_tc, tear_down_tc, test_info);
-  return test_info;
-}
-
-#if GTEST_HAS_PARAM_TEST
-void ReportInvalidTestCaseType(const char* test_case_name,
-                               const char* file, int line) {
-  Message errors;
-  errors
-      << "Attempted redefinition of test case " << test_case_name << ".\n"
-      << "All tests in the same test case must use the same test fixture\n"
-      << "class.  However, in test case " << test_case_name << ", you tried\n"
-      << "to define a test using a fixture class different from the one\n"
-      << "used earlier. This can happen if the two fixture classes are\n"
-      << "from different namespaces and have the same name. You should\n"
-      << "probably rename one of the classes to put the tests into different\n"
-      << "test cases.";
-
-  fprintf(stderr, "%s %s", FormatFileLocation(file, line).c_str(),
-          errors.GetString().c_str());
-}
-#endif  // GTEST_HAS_PARAM_TEST
-
-}  // namespace internal
-
-namespace {
-
-// A predicate that checks the test name of a TestInfo against a known
-// value.
-//
-// This is used for implementation of the TestCase class only.  We put
-// it in the anonymous namespace to prevent polluting the outer
-// namespace.
-//
-// TestNameIs is copyable.
-class TestNameIs {
- public:
-  // Constructor.
-  //
-  // TestNameIs has NO default constructor.
-  explicit TestNameIs(const char* name)
-      : name_(name) {}
-
-  // Returns true iff the test name of test_info matches name_.
-  bool operator()(const TestInfo * test_info) const {
-    return test_info && internal::String(test_info->name()).Compare(name_) == 0;
-  }
-
- private:
-  internal::String name_;
-};
-
-}  // namespace
-
-namespace internal {
-
-// This method expands all parameterized tests registered with macros TEST_P
-// and INSTANTIATE_TEST_CASE_P into regular tests and registers those.
-// This will be done just once during the program runtime.
-void UnitTestImpl::RegisterParameterizedTests() {
-#if GTEST_HAS_PARAM_TEST
-  if (!parameterized_tests_registered_) {
-    parameterized_test_registry_.RegisterTests();
-    parameterized_tests_registered_ = true;
-  }
-#endif
-}
-
-}  // namespace internal
-
-// Creates the test object, runs it, records its result, and then
-// deletes it.
-void TestInfo::Run() {
-  if (!should_run_) return;
-
-  // Tells UnitTest where to store test result.
-  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();
-  impl->set_current_test_info(this);
-
-  TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater();
-
-  // Notifies the unit test event listeners that a test is about to start.
-  repeater->OnTestStart(*this);
-
-  const TimeInMillis start = internal::GetTimeInMillis();
-
-  impl->os_stack_trace_getter()->UponLeavingGTest();
-
-  // Creates the test object.
-  Test* const test = internal::HandleExceptionsInMethodIfSupported(
-      factory_, &internal::TestFactoryBase::CreateTest,
-      "the test fixture's constructor");
-
-  // Runs the test only if the test object was created and its
-  // constructor didn't generate a fatal failure.
-  if ((test != NULL) && !Test::HasFatalFailure()) {
-    // This doesn't throw as all user code that can throw are wrapped into
-    // exception handling code.
-    test->Run();
-  }
-
-  // Deletes the test object.
-  impl->os_stack_trace_getter()->UponLeavingGTest();
-  internal::HandleExceptionsInMethodIfSupported(
-      test, &Test::DeleteSelf_, "the test fixture's destructor");
-
-  result_.set_elapsed_time(internal::GetTimeInMillis() - start);
-
-  // Notifies the unit test event listener that a test has just finished.
-  repeater->OnTestEnd(*this);
-
-  // Tells UnitTest to stop associating assertion results to this
-  // test.
-  impl->set_current_test_info(NULL);
-}
-
-// class TestCase
-
-// Gets the number of successful tests in this test case.
-int TestCase::successful_test_count() const {
-  return CountIf(test_info_list_, TestPassed);
-}
-
-// Gets the number of failed tests in this test case.
-int TestCase::failed_test_count() const {
-  return CountIf(test_info_list_, TestFailed);
-}
-
-int TestCase::disabled_test_count() const {
-  return CountIf(test_info_list_, TestDisabled);
-}
-
-// Get the number of tests in this test case that should run.
-int TestCase::test_to_run_count() const {
-  return CountIf(test_info_list_, ShouldRunTest);
-}
-
-// Gets the number of all tests.
-int TestCase::total_test_count() const {
-  return static_cast<int>(test_info_list_.size());
-}
-
-// Creates a TestCase with the given name.
-//
-// Arguments:
-//
-//   name:         name of the test case
-//   a_type_param: the name of the test case's type parameter, or NULL if
-//                 this is not a typed or a type-parameterized test case.
-//   set_up_tc:    pointer to the function that sets up the test case
-//   tear_down_tc: pointer to the function that tears down the test case
-TestCase::TestCase(const char* a_name, const char* a_type_param,
-                   Test::SetUpTestCaseFunc set_up_tc,
-                   Test::TearDownTestCaseFunc tear_down_tc)
-    : name_(a_name),
-      type_param_(a_type_param ? new std::string(a_type_param) : NULL),
-      set_up_tc_(set_up_tc),
-      tear_down_tc_(tear_down_tc),
-      should_run_(false),
-      elapsed_time_(0) {
-}
-
-// Destructor of TestCase.
-TestCase::~TestCase() {
-  // Deletes every Test in the collection.
-  ForEach(test_info_list_, internal::Delete<TestInfo>);
-}
-
-// Returns the i-th test among all the tests. i can range from 0 to
-// total_test_count() - 1. If i is not in that range, returns NULL.
-const TestInfo* TestCase::GetTestInfo(int i) const {
-  const int index = GetElementOr(test_indices_, i, -1);
-  return index < 0 ? NULL : test_info_list_[index];
-}
-
-// Returns the i-th test among all the tests. i can range from 0 to
-// total_test_count() - 1. If i is not in that range, returns NULL.
-TestInfo* TestCase::GetMutableTestInfo(int i) {
-  const int index = GetElementOr(test_indices_, i, -1);
-  return index < 0 ? NULL : test_info_list_[index];
-}
-
-// Adds a test to this test case.  Will delete the test upon
-// destruction of the TestCase object.
-void TestCase::AddTestInfo(TestInfo * test_info) {
-  test_info_list_.push_back(test_info);
-  test_indices_.push_back(static_cast<int>(test_indices_.size()));
-}
-
-// Runs every test in this TestCase.
-void TestCase::Run() {
-  if (!should_run_) return;
-
-  internal::UnitTestImpl* const impl = internal::GetUnitTestImpl();
-  impl->set_current_test_case(this);
-
-  TestEventListener* repeater = UnitTest::GetInstance()->listeners().repeater();
-
-  repeater->OnTestCaseStart(*this);
-  impl->os_stack_trace_getter()->UponLeavingGTest();
-  internal::HandleExceptionsInMethodIfSupported(
-      this, &TestCase::RunSetUpTestCase, "SetUpTestCase()");
-
-  const internal::TimeInMillis start = internal::GetTimeInMillis();
-  for (int i = 0; i < total_test_count(); i++) {
-    GetMutableTestInfo(i)->Run();
-  }
-  elapsed_time_ = internal::GetTimeInMillis() - start;
-
-  impl->os_stack_trace_getter()->UponLeavingGTest();
-  internal::HandleExceptionsInMethodIfSupported(
-      this, &TestCase::RunTearDownTestCase, "TearDownTestCase()");
-
-  repeater->OnTestCaseEnd(*this);
-  impl->set_current_test_case(NULL);
-}
-
-// Clears the results of all tests in this test case.
-void TestCase::ClearResult() {
-  ForEach(test_info_list_, TestInfo::ClearTestResult);
-}
-
-// Shuffles the tests in this test case.
-void TestCase::ShuffleTests(internal::Random* random) {
-  Shuffle(random, &test_indices_);
-}
-
-// Restores the test order to before the first shuffle.
-void TestCase::UnshuffleTests() {
-  for (size_t i = 0; i < test_indices_.size(); i++) {
-    test_indices_[i] = static_cast<int>(i);
-  }
-}
-
-// Formats a countable noun.  Depending on its quantity, either the
-// singular form or the plural form is used. e.g.
-//
-// FormatCountableNoun(1, "formula", "formuli") returns "1 formula".
-// FormatCountableNoun(5, "book", "books") returns "5 books".
-static internal::String FormatCountableNoun(int count,
-                                            const char * singular_form,
-                                            const char * plural_form) {
-  return internal::String::Format("%d %s", count,
-                                  count == 1 ? singular_form : plural_form);
-}
-
-// Formats the count of tests.
-static internal::String FormatTestCount(int test_count) {
-  return FormatCountableNoun(test_count, "test", "tests");
-}
-
-// Formats the count of test cases.
-static internal::String FormatTestCaseCount(int test_case_count) {
-  return FormatCountableNoun(test_case_count, "test case", "test cases");
-}
-
-// Converts a TestPartResult::Type enum to human-friendly string
-// representation.  Both kNonFatalFailure and kFatalFailure are translated
-// to "Failure", as the user usually doesn't care about the difference
-// between the two when viewing the test result.
-static const char * TestPartResultTypeToString(TestPartResult::Type type) {
-  switch (type) {
-    case TestPartResult::kSuccess:
-      return "Success";
-
-    case TestPartResult::kNonFatalFailure:
-    case TestPartResult::kFatalFailure:
-#ifdef _MSC_VER
-      return "error: ";
-#else
-      return "Failure\n";
-#endif
-    default:
-      return "Unknown result type";
-  }
-}
-
-// Prints a TestPartResult to a String.
-static internal::String PrintTestPartResultToString(
-    const TestPartResult& test_part_result) {
-  return (Message()
-          << internal::FormatFileLocation(test_part_result.file_name(),
-                                          test_part_result.line_number())
-          << " " << TestPartResultTypeToString(test_part_result.type())
-          << test_part_result.message()).GetString();
-}
-
-// Prints a TestPartResult.
-static void PrintTestPartResult(const TestPartResult& test_part_result) {
-  const internal::String& result =
-      PrintTestPartResultToString(test_part_result);
-  printf("%s\n", result.c_str());
-  fflush(stdout);
-  // If the test program runs in Visual Studio or a debugger, the
-  // following statements add the test part result message to the Output
-  // window such that the user can double-click on it to jump to the
-  // corresponding source code location; otherwise they do nothing.
-#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE
-  // We don't call OutputDebugString*() on Windows Mobile, as printing
-  // to stdout is done by OutputDebugString() there already - we don't
-  // want the same message printed twice.
-  ::OutputDebugStringA(result.c_str());
-  ::OutputDebugStringA("\n");
-#endif
-}
-
-// class PrettyUnitTestResultPrinter
-
-namespace internal {
-
-enum GTestColor {
-  COLOR_DEFAULT,
-  COLOR_RED,
-  COLOR_GREEN,
-  COLOR_YELLOW
-};
-
-#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE
-
-// Returns the character attribute for the given color.
-WORD GetColorAttribute(GTestColor color) {
-  switch (color) {
-    case COLOR_RED:    return FOREGROUND_RED;
-    case COLOR_GREEN:  return FOREGROUND_GREEN;
-    case COLOR_YELLOW: return FOREGROUND_RED | FOREGROUND_GREEN;
-    default:           return 0;
-  }
-}
-
-#else
-
-// Returns the ANSI color code for the given color.  COLOR_DEFAULT is
-// an invalid input.
-const char* GetAnsiColorCode(GTestColor color) {
-  switch (color) {
-    case COLOR_RED:     return "1";
-    case COLOR_GREEN:   return "2";
-    case COLOR_YELLOW:  return "3";
-    default:            return NULL;
-  };
-}
-
-#endif  // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE
-
-// Returns true iff Google Test should use colors in the output.
-bool ShouldUseColor(bool stdout_is_tty) {
-  const char* const gtest_color = GTEST_FLAG(color).c_str();
-
-  if (String::CaseInsensitiveCStringEquals(gtest_color, "auto")) {
-#if GTEST_OS_WINDOWS
-    // On Windows the TERM variable is usually not set, but the
-    // console there does support colors.
-    return stdout_is_tty;
-#else
-    // On non-Windows platforms, we rely on the TERM variable.
-    const char* const term = posix::GetEnv("TERM");
-    const bool term_supports_color =
-        String::CStringEquals(term, "xterm") ||
-        String::CStringEquals(term, "xterm-color") ||
-        String::CStringEquals(term, "xterm-256color") ||
-        String::CStringEquals(term, "screen") ||
-        String::CStringEquals(term, "linux") ||
-        String::CStringEquals(term, "cygwin");
-    return stdout_is_tty && term_supports_color;
-#endif  // GTEST_OS_WINDOWS
-  }
-
-  return String::CaseInsensitiveCStringEquals(gtest_color, "yes") ||
-      String::CaseInsensitiveCStringEquals(gtest_color, "true") ||
-      String::CaseInsensitiveCStringEquals(gtest_color, "t") ||
-      String::CStringEquals(gtest_color, "1");
-  // We take "yes", "true", "t", and "1" as meaning "yes".  If the
-  // value is neither one of these nor "auto", we treat it as "no" to
-  // be conservative.
-}
-
-// Helpers for printing colored strings to stdout. Note that on Windows, we
-// cannot simply emit special characters and have the terminal change colors.
-// This routine must actually emit the characters rather than return a string
-// that would be colored when printed, as can be done on Linux.
-void ColoredPrintf(GTestColor color, const char* fmt, ...) {
-  va_list args;
-  va_start(args, fmt);
-
-#if GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS
-  const bool use_color = false;
-#else
-  static const bool in_color_mode =
-      ShouldUseColor(posix::IsATTY(posix::FileNo(stdout)) != 0);
-  const bool use_color = in_color_mode && (color != COLOR_DEFAULT);
-#endif  // GTEST_OS_WINDOWS_MOBILE || GTEST_OS_SYMBIAN || GTEST_OS_ZOS
-  // The '!= 0' comparison is necessary to satisfy MSVC 7.1.
-
-  if (!use_color) {
-    vprintf(fmt, args);
-    va_end(args);
-    return;
-  }
-
-#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE
-  const HANDLE stdout_handle = GetStdHandle(STD_OUTPUT_HANDLE);
-
-  // Gets the current text color.
-  CONSOLE_SCREEN_BUFFER_INFO buffer_info;
-  GetConsoleScreenBufferInfo(stdout_handle, &buffer_info);
-  const WORD old_color_attrs = buffer_info.wAttributes;
-
-  // We need to flush the stream buffers into the console before each
-  // SetConsoleTextAttribute call lest it affect the text that is already
-  // printed but has not yet reached the console.
-  fflush(stdout);
-  SetConsoleTextAttribute(stdout_handle,
-                          GetColorAttribute(color) | FOREGROUND_INTENSITY);
-  vprintf(fmt, args);
-
-  fflush(stdout);
-  // Restores the text color.
-  SetConsoleTextAttribute(stdout_handle, old_color_attrs);
-#else
-  printf("\033[0;3%sm", GetAnsiColorCode(color));
-  vprintf(fmt, args);
-  printf("\033[m");  // Resets the terminal to default.
-#endif  // GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE
-  va_end(args);
-}
-
-void PrintFullTestCommentIfPresent(const TestInfo& test_info) {
-  const char* const type_param = test_info.type_param();
-  const char* const value_param = test_info.value_param();
-
-  if (type_param != NULL || value_param != NULL) {
-    printf(", where ");
-    if (type_param != NULL) {
-      printf("TypeParam = %s", type_param);
-      if (value_param != NULL)
-        printf(" and ");
-    }
-    if (value_param != NULL) {
-      printf("GetParam() = %s", value_param);
-    }
-  }
-}
-
-// This class implements the TestEventListener interface.
-//
-// Class PrettyUnitTestResultPrinter is copyable.
-class PrettyUnitTestResultPrinter : public TestEventListener {
- public:
-  PrettyUnitTestResultPrinter() {}
-  static void PrintTestName(const char * test_case, const char * test) {
-    printf("%s.%s", test_case, test);
-  }
-
-  // The following methods override what's in the TestEventListener class.
-  virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {}
-  virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration);
-  virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test);
-  virtual void OnEnvironmentsSetUpEnd(const UnitTest& /*unit_test*/) {}
-  virtual void OnTestCaseStart(const TestCase& test_case);
-  virtual void OnTestStart(const TestInfo& test_info);
-  virtual void OnTestPartResult(const TestPartResult& result);
-  virtual void OnTestEnd(const TestInfo& test_info);
-  virtual void OnTestCaseEnd(const TestCase& test_case);
-  virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test);
-  virtual void OnEnvironmentsTearDownEnd(const UnitTest& /*unit_test*/) {}
-  virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration);
-  virtual void OnTestProgramEnd(const UnitTest& /*unit_test*/) {}
-
- private:
-  static void PrintFailedTests(const UnitTest& unit_test);
-
-  internal::String test_case_name_;
-};
-
-  // Fired before each iteration of tests starts.
-void PrettyUnitTestResultPrinter::OnTestIterationStart(
-    const UnitTest& unit_test, int iteration) {
-  if (GTEST_FLAG(repeat) != 1)
-    printf("\nRepeating all tests (iteration %d) . . .\n\n", iteration + 1);
-
-  const char* const filter = GTEST_FLAG(filter).c_str();
-
-  // Prints the filter if it's not *.  This reminds the user that some
-  // tests may be skipped.
-  if (!internal::String::CStringEquals(filter, kUniversalFilter)) {
-    ColoredPrintf(COLOR_YELLOW,
-                  "Note: %s filter = %s\n", GTEST_NAME_, filter);
-  }
-
-  if (internal::ShouldShard(kTestTotalShards, kTestShardIndex, false)) {
-    const Int32 shard_index = Int32FromEnvOrDie(kTestShardIndex, -1);
-    ColoredPrintf(COLOR_YELLOW,
-                  "Note: This is test shard %d of %s.\n",
-                  static_cast<int>(shard_index) + 1,
-                  internal::posix::GetEnv(kTestTotalShards));
-  }
-
-  if (GTEST_FLAG(shuffle)) {
-    ColoredPrintf(COLOR_YELLOW,
-                  "Note: Randomizing tests' orders with a seed of %d .\n",
-                  unit_test.random_seed());
-  }
-
-  ColoredPrintf(COLOR_GREEN,  "[==========] ");
-  printf("Running %s from %s.\n",
-         FormatTestCount(unit_test.test_to_run_count()).c_str(),
-         FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str());
-  fflush(stdout);
-}
-
-void PrettyUnitTestResultPrinter::OnEnvironmentsSetUpStart(
-    const UnitTest& /*unit_test*/) {
-  ColoredPrintf(COLOR_GREEN,  "[----------] ");
-  printf("Global test environment set-up.\n");
-  fflush(stdout);
-}
-
-void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) {
-  test_case_name_ = test_case.name();
-  const internal::String counts =
-      FormatCountableNoun(test_case.test_to_run_count(), "test", "tests");
-  ColoredPrintf(COLOR_GREEN, "[----------] ");
-  printf("%s from %s", counts.c_str(), test_case_name_.c_str());
-  if (test_case.type_param() == NULL) {
-    printf("\n");
-  } else {
-    printf(", where TypeParam = %s\n", test_case.type_param());
-  }
-  fflush(stdout);
-}
-
-void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) {
-  ColoredPrintf(COLOR_GREEN,  "[ RUN      ] ");
-  PrintTestName(test_case_name_.c_str(), test_info.name());
-  printf("\n");
-  fflush(stdout);
-}
-
-// Called after an assertion failure.
-void PrettyUnitTestResultPrinter::OnTestPartResult(
-    const TestPartResult& result) {
-  // If the test part succeeded, we don't need to do anything.
-  if (result.type() == TestPartResult::kSuccess)
-    return;
-
-  // Print failure message from the assertion (e.g. expected this and got that).
-  PrintTestPartResult(result);
-  fflush(stdout);
-}
-
-void PrettyUnitTestResultPrinter::OnTestEnd(const TestInfo& test_info) {
-  if (test_info.result()->Passed()) {
-    ColoredPrintf(COLOR_GREEN, "[       OK ] ");
-  } else {
-    ColoredPrintf(COLOR_RED, "[  FAILED  ] ");
-  }
-  PrintTestName(test_case_name_.c_str(), test_info.name());
-  if (test_info.result()->Failed())
-    PrintFullTestCommentIfPresent(test_info);
-
-  if (GTEST_FLAG(print_time)) {
-    printf(" (%s ms)\n", internal::StreamableToString(
-           test_info.result()->elapsed_time()).c_str());
-  } else {
-    printf("\n");
-  }
-  fflush(stdout);
-}
-
-void PrettyUnitTestResultPrinter::OnTestCaseEnd(const TestCase& test_case) {
-  if (!GTEST_FLAG(print_time)) return;
-
-  test_case_name_ = test_case.name();
-  const internal::String counts =
-      FormatCountableNoun(test_case.test_to_run_count(), "test", "tests");
-  ColoredPrintf(COLOR_GREEN, "[----------] ");
-  printf("%s from %s (%s ms total)\n\n",
-         counts.c_str(), test_case_name_.c_str(),
-         internal::StreamableToString(test_case.elapsed_time()).c_str());
-  fflush(stdout);
-}
-
-void PrettyUnitTestResultPrinter::OnEnvironmentsTearDownStart(
-    const UnitTest& /*unit_test*/) {
-  ColoredPrintf(COLOR_GREEN,  "[----------] ");
-  printf("Global test environment tear-down\n");
-  fflush(stdout);
-}
-
-// Internal helper for printing the list of failed tests.
-void PrettyUnitTestResultPrinter::PrintFailedTests(const UnitTest& unit_test) {
-  const int failed_test_count = unit_test.failed_test_count();
-  if (failed_test_count == 0) {
-    return;
-  }
-
-  for (int i = 0; i < unit_test.total_test_case_count(); ++i) {
-    const TestCase& test_case = *unit_test.GetTestCase(i);
-    if (!test_case.should_run() || (test_case.failed_test_count() == 0)) {
-      continue;
-    }
-    for (int j = 0; j < test_case.total_test_count(); ++j) {
-      const TestInfo& test_info = *test_case.GetTestInfo(j);
-      if (!test_info.should_run() || test_info.result()->Passed()) {
-        continue;
-      }
-      ColoredPrintf(COLOR_RED, "[  FAILED  ] ");
-      printf("%s.%s", test_case.name(), test_info.name());
-      PrintFullTestCommentIfPresent(test_info);
-      printf("\n");
-    }
-  }
-}
-
-void PrettyUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test,
-                                                     int /*iteration*/) {
-  ColoredPrintf(COLOR_GREEN,  "[==========] ");
-  printf("%s from %s ran.",
-         FormatTestCount(unit_test.test_to_run_count()).c_str(),
-         FormatTestCaseCount(unit_test.test_case_to_run_count()).c_str());
-  if (GTEST_FLAG(print_time)) {
-    printf(" (%s ms total)",
-           internal::StreamableToString(unit_test.elapsed_time()).c_str());
-  }
-  printf("\n");
-  ColoredPrintf(COLOR_GREEN,  "[  PASSED  ] ");
-  printf("%s.\n", FormatTestCount(unit_test.successful_test_count()).c_str());
-
-  int num_failures = unit_test.failed_test_count();
-  if (!unit_test.Passed()) {
-    const int failed_test_count = unit_test.failed_test_count();
-    ColoredPrintf(COLOR_RED,  "[  FAILED  ] ");
-    printf("%s, listed below:\n", FormatTestCount(failed_test_count).c_str());
-    PrintFailedTests(unit_test);
-    printf("\n%2d FAILED %s\n", num_failures,
-                        num_failures == 1 ? "TEST" : "TESTS");
-  }
-
-  int num_disabled = unit_test.disabled_test_count();
-  if (num_disabled && !GTEST_FLAG(also_run_disabled_tests)) {
-    if (!num_failures) {
-      printf("\n");  // Add a spacer if no FAILURE banner is displayed.
-    }
-    ColoredPrintf(COLOR_YELLOW,
-                  "  YOU HAVE %d DISABLED %s\n\n",
-                  num_disabled,
-                  num_disabled == 1 ? "TEST" : "TESTS");
-  }
-  // Ensure that Google Test output is printed before, e.g., heapchecker output.
-  fflush(stdout);
-}
-
-// End PrettyUnitTestResultPrinter
-
-// class TestEventRepeater
-//
-// This class forwards events to other event listeners.
-class TestEventRepeater : public TestEventListener {
- public:
-  TestEventRepeater() : forwarding_enabled_(true) {}
-  virtual ~TestEventRepeater();
-  void Append(TestEventListener *listener);
-  TestEventListener* Release(TestEventListener* listener);
-
-  // Controls whether events will be forwarded to listeners_. Set to false
-  // in death test child processes.
-  bool forwarding_enabled() const { return forwarding_enabled_; }
-  void set_forwarding_enabled(bool enable) { forwarding_enabled_ = enable; }
-
-  virtual void OnTestProgramStart(const UnitTest& unit_test);
-  virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration);
-  virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test);
-  virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test);
-  virtual void OnTestCaseStart(const TestCase& test_case);
-  virtual void OnTestStart(const TestInfo& test_info);
-  virtual void OnTestPartResult(const TestPartResult& result);
-  virtual void OnTestEnd(const TestInfo& test_info);
-  virtual void OnTestCaseEnd(const TestCase& test_case);
-  virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test);
-  virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test);
-  virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration);
-  virtual void OnTestProgramEnd(const UnitTest& unit_test);
-
- private:
-  // Controls whether events will be forwarded to listeners_. Set to false
-  // in death test child processes.
-  bool forwarding_enabled_;
-  // The list of listeners that receive events.
-  std::vector<TestEventListener*> listeners_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestEventRepeater);
-};
-
-TestEventRepeater::~TestEventRepeater() {
-  ForEach(listeners_, Delete<TestEventListener>);
-}
-
-void TestEventRepeater::Append(TestEventListener *listener) {
-  listeners_.push_back(listener);
-}
-
-// TODO(vladl at google.com): Factor the search functionality into Vector::Find.
-TestEventListener* TestEventRepeater::Release(TestEventListener *listener) {
-  for (size_t i = 0; i < listeners_.size(); ++i) {
-    if (listeners_[i] == listener) {
-      listeners_.erase(listeners_.begin() + i);
-      return listener;
-    }
-  }
-
-  return NULL;
-}
-
-// Since most methods are very similar, use macros to reduce boilerplate.
-// This defines a member that forwards the call to all listeners.
-#define GTEST_REPEATER_METHOD_(Name, Type) \
-void TestEventRepeater::Name(const Type& parameter) { \
-  if (forwarding_enabled_) { \
-    for (size_t i = 0; i < listeners_.size(); i++) { \
-      listeners_[i]->Name(parameter); \
-    } \
-  } \
-}
-// This defines a member that forwards the call to all listeners in reverse
-// order.
-#define GTEST_REVERSE_REPEATER_METHOD_(Name, Type) \
-void TestEventRepeater::Name(const Type& parameter) { \
-  if (forwarding_enabled_) { \
-    for (int i = static_cast<int>(listeners_.size()) - 1; i >= 0; i--) { \
-      listeners_[i]->Name(parameter); \
-    } \
-  } \
-}
-
-GTEST_REPEATER_METHOD_(OnTestProgramStart, UnitTest)
-GTEST_REPEATER_METHOD_(OnEnvironmentsSetUpStart, UnitTest)
-GTEST_REPEATER_METHOD_(OnTestCaseStart, TestCase)
-GTEST_REPEATER_METHOD_(OnTestStart, TestInfo)
-GTEST_REPEATER_METHOD_(OnTestPartResult, TestPartResult)
-GTEST_REPEATER_METHOD_(OnEnvironmentsTearDownStart, UnitTest)
-GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsSetUpEnd, UnitTest)
-GTEST_REVERSE_REPEATER_METHOD_(OnEnvironmentsTearDownEnd, UnitTest)
-GTEST_REVERSE_REPEATER_METHOD_(OnTestEnd, TestInfo)
-GTEST_REVERSE_REPEATER_METHOD_(OnTestCaseEnd, TestCase)
-GTEST_REVERSE_REPEATER_METHOD_(OnTestProgramEnd, UnitTest)
-
-#undef GTEST_REPEATER_METHOD_
-#undef GTEST_REVERSE_REPEATER_METHOD_
-
-void TestEventRepeater::OnTestIterationStart(const UnitTest& unit_test,
-                                             int iteration) {
-  if (forwarding_enabled_) {
-    for (size_t i = 0; i < listeners_.size(); i++) {
-      listeners_[i]->OnTestIterationStart(unit_test, iteration);
-    }
-  }
-}
-
-void TestEventRepeater::OnTestIterationEnd(const UnitTest& unit_test,
-                                           int iteration) {
-  if (forwarding_enabled_) {
-    for (int i = static_cast<int>(listeners_.size()) - 1; i >= 0; i--) {
-      listeners_[i]->OnTestIterationEnd(unit_test, iteration);
-    }
-  }
-}
-
-// End TestEventRepeater
-
-// This class generates an XML output file.
-class XmlUnitTestResultPrinter : public EmptyTestEventListener {
- public:
-  explicit XmlUnitTestResultPrinter(const char* output_file);
-
-  virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration);
-
- private:
-  // Is c a whitespace character that is normalized to a space character
-  // when it appears in an XML attribute value?
-  static bool IsNormalizableWhitespace(char c) {
-    return c == 0x9 || c == 0xA || c == 0xD;
-  }
-
-  // May c appear in a well-formed XML document?
-  static bool IsValidXmlCharacter(char c) {
-    return IsNormalizableWhitespace(c) || c >= 0x20;
-  }
-
-  // Returns an XML-escaped copy of the input string str.  If
-  // is_attribute is true, the text is meant to appear as an attribute
-  // value, and normalizable whitespace is preserved by replacing it
-  // with character references.
-  static String EscapeXml(const char* str, bool is_attribute);
-
-  // Returns the given string with all characters invalid in XML removed.
-  static string RemoveInvalidXmlCharacters(const string& str);
-
-  // Convenience wrapper around EscapeXml when str is an attribute value.
-  static String EscapeXmlAttribute(const char* str) {
-    return EscapeXml(str, true);
-  }
-
-  // Convenience wrapper around EscapeXml when str is not an attribute value.
-  static String EscapeXmlText(const char* str) { return EscapeXml(str, false); }
-
-  // Streams an XML CDATA section, escaping invalid CDATA sequences as needed.
-  static void OutputXmlCDataSection(::std::ostream* stream, const char* data);
-
-  // Streams an XML representation of a TestInfo object.
-  static void OutputXmlTestInfo(::std::ostream* stream,
-                                const char* test_case_name,
-                                const TestInfo& test_info);
-
-  // Prints an XML representation of a TestCase object
-  static void PrintXmlTestCase(FILE* out, const TestCase& test_case);
-
-  // Prints an XML summary of unit_test to output stream out.
-  static void PrintXmlUnitTest(FILE* out, const UnitTest& unit_test);
-
-  // Produces a string representing the test properties in a result as space
-  // delimited XML attributes based on the property key="value" pairs.
-  // When the String is not empty, it includes a space at the beginning,
-  // to delimit this attribute from prior attributes.
-  static String TestPropertiesAsXmlAttributes(const TestResult& result);
-
-  // The output file.
-  const String output_file_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(XmlUnitTestResultPrinter);
-};
-
-// Creates a new XmlUnitTestResultPrinter.
-XmlUnitTestResultPrinter::XmlUnitTestResultPrinter(const char* output_file)
-    : output_file_(output_file) {
-  if (output_file_.c_str() == NULL || output_file_.empty()) {
-    fprintf(stderr, "XML output file may not be null\n");
-    fflush(stderr);
-    exit(EXIT_FAILURE);
-  }
-}
-
-// Called after the unit test ends.
-void XmlUnitTestResultPrinter::OnTestIterationEnd(const UnitTest& unit_test,
-                                                  int /*iteration*/) {
-  FILE* xmlout = NULL;
-  FilePath output_file(output_file_);
-  FilePath output_dir(output_file.RemoveFileName());
-
-  if (output_dir.CreateDirectoriesRecursively()) {
-    xmlout = posix::FOpen(output_file_.c_str(), "w");
-  }
-  if (xmlout == NULL) {
-    // TODO(wan): report the reason of the failure.
-    //
-    // We don't do it for now as:
-    //
-    //   1. There is no urgent need for it.
-    //   2. It's a bit involved to make the errno variable thread-safe on
-    //      all three operating systems (Linux, Windows, and Mac OS).
-    //   3. To interpret the meaning of errno in a thread-safe way,
-    //      we need the strerror_r() function, which is not available on
-    //      Windows.
-    fprintf(stderr,
-            "Unable to open file \"%s\"\n",
-            output_file_.c_str());
-    fflush(stderr);
-    exit(EXIT_FAILURE);
-  }
-  PrintXmlUnitTest(xmlout, unit_test);
-  fclose(xmlout);
-}
-
-// Returns an XML-escaped copy of the input string str.  If is_attribute
-// is true, the text is meant to appear as an attribute value, and
-// normalizable whitespace is preserved by replacing it with character
-// references.
-//
-// Invalid XML characters in str, if any, are stripped from the output.
-// It is expected that most, if not all, of the text processed by this
-// module will consist of ordinary English text.
-// If this module is ever modified to produce version 1.1 XML output,
-// most invalid characters can be retained using character references.
-// TODO(wan): It might be nice to have a minimally invasive, human-readable
-// escaping scheme for invalid characters, rather than dropping them.
-String XmlUnitTestResultPrinter::EscapeXml(const char* str, bool is_attribute) {
-  Message m;
-
-  if (str != NULL) {
-    for (const char* src = str; *src; ++src) {
-      switch (*src) {
-        case '<':
-          m << "<";
-          break;
-        case '>':
-          m << ">";
-          break;
-        case '&':
-          m << "&";
-          break;
-        case '\'':
-          if (is_attribute)
-            m << "'";
-          else
-            m << '\'';
-          break;
-        case '"':
-          if (is_attribute)
-            m << """;
-          else
-            m << '"';
-          break;
-        default:
-          if (IsValidXmlCharacter(*src)) {
-            if (is_attribute && IsNormalizableWhitespace(*src))
-              m << String::Format("&#x%02X;", unsigned(*src));
-            else
-              m << *src;
-          }
-          break;
-      }
-    }
-  }
-
-  return m.GetString();
-}
-
-// Returns the given string with all characters invalid in XML removed.
-// Currently invalid characters are dropped from the string. An
-// alternative is to replace them with certain characters such as . or ?.
-string XmlUnitTestResultPrinter::RemoveInvalidXmlCharacters(const string& str) {
-  string output;
-  output.reserve(str.size());
-  for (string::const_iterator it = str.begin(); it != str.end(); ++it)
-    if (IsValidXmlCharacter(*it))
-      output.push_back(*it);
-
-  return output;
-}
-
-// The following routines generate an XML representation of a UnitTest
-// object.
-//
-// This is how Google Test concepts map to the DTD:
-//
-// <testsuites name="AllTests">        <-- corresponds to a UnitTest object
-//   <testsuite name="testcase-name">  <-- corresponds to a TestCase object
-//     <testcase name="test-name">     <-- corresponds to a TestInfo object
-//       <failure message="...">...</failure>
-//       <failure message="...">...</failure>
-//       <failure message="...">...</failure>
-//                                     <-- individual assertion failures
-//     </testcase>
-//   </testsuite>
-// </testsuites>
-
-// Formats the given time in milliseconds as seconds.
-std::string FormatTimeInMillisAsSeconds(TimeInMillis ms) {
-  ::std::stringstream ss;
-  ss << ms/1000.0;
-  return ss.str();
-}
-
-// Streams an XML CDATA section, escaping invalid CDATA sequences as needed.
-void XmlUnitTestResultPrinter::OutputXmlCDataSection(::std::ostream* stream,
-                                                     const char* data) {
-  const char* segment = data;
-  *stream << "<![CDATA[";
-  for (;;) {
-    const char* const next_segment = strstr(segment, "]]>");
-    if (next_segment != NULL) {
-      stream->write(
-          segment, static_cast<std::streamsize>(next_segment - segment));
-      *stream << "]]>]]><![CDATA[";
-      segment = next_segment + strlen("]]>");
-    } else {
-      *stream << segment;
-      break;
-    }
-  }
-  *stream << "]]>";
-}
-
-// Prints an XML representation of a TestInfo object.
-// TODO(wan): There is also value in printing properties with the plain printer.
-void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
-                                                 const char* test_case_name,
-                                                 const TestInfo& test_info) {
-  const TestResult& result = *test_info.result();
-  *stream << "    <testcase name=\""
-          << EscapeXmlAttribute(test_info.name()).c_str() << "\"";
-
-  if (test_info.value_param() != NULL) {
-    *stream << " value_param=\"" << EscapeXmlAttribute(test_info.value_param())
-            << "\"";
-  }
-  if (test_info.type_param() != NULL) {
-    *stream << " type_param=\"" << EscapeXmlAttribute(test_info.type_param())
-            << "\"";
-  }
-
-  *stream << " status=\""
-          << (test_info.should_run() ? "run" : "notrun")
-          << "\" time=\""
-          << FormatTimeInMillisAsSeconds(result.elapsed_time())
-          << "\" classname=\"" << EscapeXmlAttribute(test_case_name).c_str()
-          << "\"" << TestPropertiesAsXmlAttributes(result).c_str();
-
-  int failures = 0;
-  for (int i = 0; i < result.total_part_count(); ++i) {
-    const TestPartResult& part = result.GetTestPartResult(i);
-    if (part.failed()) {
-      if (++failures == 1)
-        *stream << ">\n";
-      *stream << "      <failure message=\""
-              << EscapeXmlAttribute(part.summary()).c_str()
-              << "\" type=\"\">";
-      const string location = internal::FormatCompilerIndependentFileLocation(
-          part.file_name(), part.line_number());
-      const string message = location + "\n" + part.message();
-      OutputXmlCDataSection(stream,
-                            RemoveInvalidXmlCharacters(message).c_str());
-      *stream << "</failure>\n";
-    }
-  }
-
-  if (failures == 0)
-    *stream << " />\n";
-  else
-    *stream << "    </testcase>\n";
-}
-
-// Prints an XML representation of a TestCase object
-void XmlUnitTestResultPrinter::PrintXmlTestCase(FILE* out,
-                                                const TestCase& test_case) {
-  fprintf(out,
-          "  <testsuite name=\"%s\" tests=\"%d\" failures=\"%d\" "
-          "disabled=\"%d\" ",
-          EscapeXmlAttribute(test_case.name()).c_str(),
-          test_case.total_test_count(),
-          test_case.failed_test_count(),
-          test_case.disabled_test_count());
-  fprintf(out,
-          "errors=\"0\" time=\"%s\">\n",
-          FormatTimeInMillisAsSeconds(test_case.elapsed_time()).c_str());
-  for (int i = 0; i < test_case.total_test_count(); ++i) {
-    ::std::stringstream stream;
-    OutputXmlTestInfo(&stream, test_case.name(), *test_case.GetTestInfo(i));
-    fprintf(out, "%s", StringStreamToString(&stream).c_str());
-  }
-  fprintf(out, "  </testsuite>\n");
-}
-
-// Prints an XML summary of unit_test to output stream out.
-void XmlUnitTestResultPrinter::PrintXmlUnitTest(FILE* out,
-                                                const UnitTest& unit_test) {
-  fprintf(out, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
-  fprintf(out,
-          "<testsuites tests=\"%d\" failures=\"%d\" disabled=\"%d\" "
-          "errors=\"0\" time=\"%s\" ",
-          unit_test.total_test_count(),
-          unit_test.failed_test_count(),
-          unit_test.disabled_test_count(),
-          FormatTimeInMillisAsSeconds(unit_test.elapsed_time()).c_str());
-  if (GTEST_FLAG(shuffle)) {
-    fprintf(out, "random_seed=\"%d\" ", unit_test.random_seed());
-  }
-  fprintf(out, "name=\"AllTests\">\n");
-  for (int i = 0; i < unit_test.total_test_case_count(); ++i)
-    PrintXmlTestCase(out, *unit_test.GetTestCase(i));
-  fprintf(out, "</testsuites>\n");
-}
-
-// Produces a string representing the test properties in a result as space
-// delimited XML attributes based on the property key="value" pairs.
-String XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(
-    const TestResult& result) {
-  Message attributes;
-  for (int i = 0; i < result.test_property_count(); ++i) {
-    const TestProperty& property = result.GetTestProperty(i);
-    attributes << " " << property.key() << "="
-        << "\"" << EscapeXmlAttribute(property.value()) << "\"";
-  }
-  return attributes.GetString();
-}
-
-// End XmlUnitTestResultPrinter
-
-#if GTEST_CAN_STREAM_RESULTS_
-
-// Streams test results to the given port on the given host machine.
-class StreamingListener : public EmptyTestEventListener {
- public:
-  // Escapes '=', '&', '%', and '\n' characters in str as "%xx".
-  static string UrlEncode(const char* str);
-
-  StreamingListener(const string& host, const string& port)
-      : sockfd_(-1), host_name_(host), port_num_(port) {
-    MakeConnection();
-    Send("gtest_streaming_protocol_version=1.0\n");
-  }
-
-  virtual ~StreamingListener() {
-    if (sockfd_ != -1)
-      CloseConnection();
-  }
-
-  void OnTestProgramStart(const UnitTest& /* unit_test */) {
-    Send("event=TestProgramStart\n");
-  }
-
-  void OnTestProgramEnd(const UnitTest& unit_test) {
-    // Note that Google Test current only report elapsed time for each
-    // test iteration, not for the entire test program.
-    Send(String::Format("event=TestProgramEnd&passed=%d\n",
-                        unit_test.Passed()));
-
-    // Notify the streaming server to stop.
-    CloseConnection();
-  }
-
-  void OnTestIterationStart(const UnitTest& /* unit_test */, int iteration) {
-    Send(String::Format("event=TestIterationStart&iteration=%d\n",
-                        iteration));
-  }
-
-  void OnTestIterationEnd(const UnitTest& unit_test, int /* iteration */) {
-    Send(String::Format("event=TestIterationEnd&passed=%d&elapsed_time=%sms\n",
-                        unit_test.Passed(),
-                        StreamableToString(unit_test.elapsed_time()).c_str()));
-  }
-
-  void OnTestCaseStart(const TestCase& test_case) {
-    Send(String::Format("event=TestCaseStart&name=%s\n", test_case.name()));
-  }
-
-  void OnTestCaseEnd(const TestCase& test_case) {
-    Send(String::Format("event=TestCaseEnd&passed=%d&elapsed_time=%sms\n",
-                        test_case.Passed(),
-                        StreamableToString(test_case.elapsed_time()).c_str()));
-  }
-
-  void OnTestStart(const TestInfo& test_info) {
-    Send(String::Format("event=TestStart&name=%s\n", test_info.name()));
-  }
-
-  void OnTestEnd(const TestInfo& test_info) {
-    Send(String::Format(
-        "event=TestEnd&passed=%d&elapsed_time=%sms\n",
-        (test_info.result())->Passed(),
-        StreamableToString((test_info.result())->elapsed_time()).c_str()));
-  }
-
-  void OnTestPartResult(const TestPartResult& test_part_result) {
-    const char* file_name = test_part_result.file_name();
-    if (file_name == NULL)
-      file_name = "";
-    Send(String::Format("event=TestPartResult&file=%s&line=%d&message=",
-                        UrlEncode(file_name).c_str(),
-                        test_part_result.line_number()));
-    Send(UrlEncode(test_part_result.message()) + "\n");
-  }
-
- private:
-  // Creates a client socket and connects to the server.
-  void MakeConnection();
-
-  // Closes the socket.
-  void CloseConnection() {
-    GTEST_CHECK_(sockfd_ != -1)
-        << "CloseConnection() can be called only when there is a connection.";
-
-    close(sockfd_);
-    sockfd_ = -1;
-  }
-
-  // Sends a string to the socket.
-  void Send(const string& message) {
-    GTEST_CHECK_(sockfd_ != -1)
-        << "Send() can be called only when there is a connection.";
-
-    const int len = static_cast<int>(message.length());
-    if (write(sockfd_, message.c_str(), len) != len) {
-      GTEST_LOG_(WARNING)
-          << "stream_result_to: failed to stream to "
-          << host_name_ << ":" << port_num_;
-    }
-  }
-
-  int sockfd_;   // socket file descriptor
-  const string host_name_;
-  const string port_num_;
-
-  GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamingListener);
-};  // class StreamingListener
-
-// Checks if str contains '=', '&', '%' or '\n' characters. If yes,
-// replaces them by "%xx" where xx is their hexadecimal value. For
-// example, replaces "=" with "%3D".  This algorithm is O(strlen(str))
-// in both time and space -- important as the input str may contain an
-// arbitrarily long test failure message and stack trace.
-string StreamingListener::UrlEncode(const char* str) {
-  string result;
-  result.reserve(strlen(str) + 1);
-  for (char ch = *str; ch != '\0'; ch = *++str) {
-    switch (ch) {
-      case '%':
-      case '=':
-      case '&':
-      case '\n':
-        result.append(String::Format("%%%02x", static_cast<unsigned char>(ch)));
-        break;
-      default:
-        result.push_back(ch);
-        break;
-    }
-  }
-  return result;
-}
-
-void StreamingListener::MakeConnection() {
-  GTEST_CHECK_(sockfd_ == -1)
-      << "MakeConnection() can't be called when there is already a connection.";
-
-  addrinfo hints;
-  memset(&hints, 0, sizeof(hints));
-  hints.ai_family = AF_UNSPEC;    // To allow both IPv4 and IPv6 addresses.
-  hints.ai_socktype = SOCK_STREAM;
-  addrinfo* servinfo = NULL;
-
-  // Use the getaddrinfo() to get a linked list of IP addresses for
-  // the given host name.
-  const int error_num = getaddrinfo(
-      host_name_.c_str(), port_num_.c_str(), &hints, &servinfo);
-  if (error_num != 0) {
-    GTEST_LOG_(WARNING) << "stream_result_to: getaddrinfo() failed: "
-                        << gai_strerror(error_num);
-  }
-
-  // Loop through all the results and connect to the first we can.
-  for (addrinfo* cur_addr = servinfo; sockfd_ == -1 && cur_addr != NULL;
-       cur_addr = cur_addr->ai_next) {
-    sockfd_ = socket(
-        cur_addr->ai_family, cur_addr->ai_socktype, cur_addr->ai_protocol);
-    if (sockfd_ != -1) {
-      // Connect the client socket to the server socket.
-      if (connect(sockfd_, cur_addr->ai_addr, cur_addr->ai_addrlen) == -1) {
-        close(sockfd_);
-        sockfd_ = -1;
-      }
-    }
-  }
-
-  freeaddrinfo(servinfo);  // all done with this structure
-
-  if (sockfd_ == -1) {
-    GTEST_LOG_(WARNING) << "stream_result_to: failed to connect to "
-                        << host_name_ << ":" << port_num_;
-  }
-}
-
-// End of class Streaming Listener
-#endif  // GTEST_CAN_STREAM_RESULTS__
-
-// Class ScopedTrace
-
-// Pushes the given source file location and message onto a per-thread
-// trace stack maintained by Google Test.
-// L < UnitTest::mutex_
-ScopedTrace::ScopedTrace(const char* file, int line, const Message& message) {
-  TraceInfo trace;
-  trace.file = file;
-  trace.line = line;
-  trace.message = message.GetString();
-
-  UnitTest::GetInstance()->PushGTestTrace(trace);
-}
-
-// Pops the info pushed by the c'tor.
-// L < UnitTest::mutex_
-ScopedTrace::~ScopedTrace() {
-  UnitTest::GetInstance()->PopGTestTrace();
-}
-
-
-// class OsStackTraceGetter
-
-// Returns the current OS stack trace as a String.  Parameters:
-//
-//   max_depth  - the maximum number of stack frames to be included
-//                in the trace.
-//   skip_count - the number of top frames to be skipped; doesn't count
-//                against max_depth.
-//
-// L < mutex_
-// We use "L < mutex_" to denote that the function may acquire mutex_.
-String OsStackTraceGetter::CurrentStackTrace(int, int) {
-  return String("");
-}
-
-// L < mutex_
-void OsStackTraceGetter::UponLeavingGTest() {
-}
-
-const char* const
-OsStackTraceGetter::kElidedFramesMarker =
-    "... " GTEST_NAME_ " internal frames ...";
-
-}  // namespace internal
-
-// class TestEventListeners
-
-TestEventListeners::TestEventListeners()
-    : repeater_(new internal::TestEventRepeater()),
-      default_result_printer_(NULL),
-      default_xml_generator_(NULL) {
-}
-
-TestEventListeners::~TestEventListeners() { delete repeater_; }
-
-// Returns the standard listener responsible for the default console
-// output.  Can be removed from the listeners list to shut down default
-// console output.  Note that removing this object from the listener list
-// with Release transfers its ownership to the user.
-void TestEventListeners::Append(TestEventListener* listener) {
-  repeater_->Append(listener);
-}
-
-// Removes the given event listener from the list and returns it.  It then
-// becomes the caller's responsibility to delete the listener. Returns
-// NULL if the listener is not found in the list.
-TestEventListener* TestEventListeners::Release(TestEventListener* listener) {
-  if (listener == default_result_printer_)
-    default_result_printer_ = NULL;
-  else if (listener == default_xml_generator_)
-    default_xml_generator_ = NULL;
-  return repeater_->Release(listener);
-}
-
-// Returns repeater that broadcasts the TestEventListener events to all
-// subscribers.
-TestEventListener* TestEventListeners::repeater() { return repeater_; }
-
-// Sets the default_result_printer attribute to the provided listener.
-// The listener is also added to the listener list and previous
-// default_result_printer is removed from it and deleted. The listener can
-// also be NULL in which case it will not be added to the list. Does
-// nothing if the previous and the current listener objects are the same.
-void TestEventListeners::SetDefaultResultPrinter(TestEventListener* listener) {
-  if (default_result_printer_ != listener) {
-    // It is an error to pass this method a listener that is already in the
-    // list.
-    delete Release(default_result_printer_);
-    default_result_printer_ = listener;
-    if (listener != NULL)
-      Append(listener);
-  }
-}
-
-// Sets the default_xml_generator attribute to the provided listener.  The
-// listener is also added to the listener list and previous
-// default_xml_generator is removed from it and deleted. The listener can
-// also be NULL in which case it will not be added to the list. Does
-// nothing if the previous and the current listener objects are the same.
-void TestEventListeners::SetDefaultXmlGenerator(TestEventListener* listener) {
-  if (default_xml_generator_ != listener) {
-    // It is an error to pass this method a listener that is already in the
-    // list.
-    delete Release(default_xml_generator_);
-    default_xml_generator_ = listener;
-    if (listener != NULL)
-      Append(listener);
-  }
-}
-
-// Controls whether events will be forwarded by the repeater to the
-// listeners in the list.
-bool TestEventListeners::EventForwardingEnabled() const {
-  return repeater_->forwarding_enabled();
-}
-
-void TestEventListeners::SuppressEventForwarding() {
-  repeater_->set_forwarding_enabled(false);
-}
-
-// class UnitTest
-
-// Gets the singleton UnitTest object.  The first time this method is
-// called, a UnitTest object is constructed and returned.  Consecutive
-// calls will return the same object.
-//
-// We don't protect this under mutex_ as a user is not supposed to
-// call this before main() starts, from which point on the return
-// value will never change.
-UnitTest * UnitTest::GetInstance() {
-  // When compiled with MSVC 7.1 in optimized mode, destroying the
-  // UnitTest object upon exiting the program messes up the exit code,
-  // causing successful tests to appear failed.  We have to use a
-  // different implementation in this case to bypass the compiler bug.
-  // This implementation makes the compiler happy, at the cost of
-  // leaking the UnitTest object.
-
-  // CodeGear C++Builder insists on a public destructor for the
-  // default implementation.  Use this implementation to keep good OO
-  // design with private destructor.
-
-#if (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__)
-  static UnitTest* const instance = new UnitTest;
-  return instance;
-#else
-  static UnitTest instance;
-  return &instance;
-#endif  // (_MSC_VER == 1310 && !defined(_DEBUG)) || defined(__BORLANDC__)
-}
-
-// Gets the number of successful test cases.
-int UnitTest::successful_test_case_count() const {
-  return impl()->successful_test_case_count();
-}
-
-// Gets the number of failed test cases.
-int UnitTest::failed_test_case_count() const {
-  return impl()->failed_test_case_count();
-}
-
-// Gets the number of all test cases.
-int UnitTest::total_test_case_count() const {
-  return impl()->total_test_case_count();
-}
-
-// Gets the number of all test cases that contain at least one test
-// that should run.
-int UnitTest::test_case_to_run_count() const {
-  return impl()->test_case_to_run_count();
-}
-
-// Gets the number of successful tests.
-int UnitTest::successful_test_count() const {
-  return impl()->successful_test_count();
-}
-
-// Gets the number of failed tests.
-int UnitTest::failed_test_count() const { return impl()->failed_test_count(); }
-
-// Gets the number of disabled tests.
-int UnitTest::disabled_test_count() const {
-  return impl()->disabled_test_count();
-}
-
-// Gets the number of all tests.
-int UnitTest::total_test_count() const { return impl()->total_test_count(); }
-
-// Gets the number of tests that should run.
-int UnitTest::test_to_run_count() const { return impl()->test_to_run_count(); }
-
-// Gets the elapsed time, in milliseconds.
-internal::TimeInMillis UnitTest::elapsed_time() const {
-  return impl()->elapsed_time();
-}
-
-// Returns true iff the unit test passed (i.e. all test cases passed).
-bool UnitTest::Passed() const { return impl()->Passed(); }
-
-// Returns true iff the unit test failed (i.e. some test case failed
-// or something outside of all tests failed).
-bool UnitTest::Failed() const { return impl()->Failed(); }
-
-// Gets the i-th test case among all the test cases. i can range from 0 to
-// total_test_case_count() - 1. If i is not in that range, returns NULL.
-const TestCase* UnitTest::GetTestCase(int i) const {
-  return impl()->GetTestCase(i);
-}
-
-// Gets the i-th test case among all the test cases. i can range from 0 to
-// total_test_case_count() - 1. If i is not in that range, returns NULL.
-TestCase* UnitTest::GetMutableTestCase(int i) {
-  return impl()->GetMutableTestCase(i);
-}
-
-// Returns the list of event listeners that can be used to track events
-// inside Google Test.
-TestEventListeners& UnitTest::listeners() {
-  return *impl()->listeners();
-}
-
-// Registers and returns a global test environment.  When a test
-// program is run, all global test environments will be set-up in the
-// order they were registered.  After all tests in the program have
-// finished, all global test environments will be torn-down in the
-// *reverse* order they were registered.
-//
-// The UnitTest object takes ownership of the given environment.
-//
-// We don't protect this under mutex_, as we only support calling it
-// from the main thread.
-Environment* UnitTest::AddEnvironment(Environment* env) {
-  if (env == NULL) {
-    return NULL;
-  }
-
-  impl_->environments().push_back(env);
-  return env;
-}
-
-// Adds a TestPartResult to the current TestResult object.  All Google Test
-// assertion macros (e.g. ASSERT_TRUE, EXPECT_EQ, etc) eventually call
-// this to report their results.  The user code should use the
-// assertion macros instead of calling this directly.
-// L < mutex_
-void UnitTest::AddTestPartResult(TestPartResult::Type result_type,
-                                 const char* file_name,
-                                 int line_number,
-                                 const internal::String& message,
-                                 const internal::String& os_stack_trace) {
-  Message msg;
-  msg << message;
-
-  internal::MutexLock lock(&mutex_);
-  if (impl_->gtest_trace_stack().size() > 0) {
-    msg << "\n" << GTEST_NAME_ << " trace:";
-
-    for (int i = static_cast<int>(impl_->gtest_trace_stack().size());
-         i > 0; --i) {
-      const internal::TraceInfo& trace = impl_->gtest_trace_stack()[i - 1];
-      msg << "\n" << internal::FormatFileLocation(trace.file, trace.line)
-          << " " << trace.message;
-    }
-  }
-
-  if (os_stack_trace.c_str() != NULL && !os_stack_trace.empty()) {
-    msg << internal::kStackTraceMarker << os_stack_trace;
-  }
-
-  const TestPartResult result =
-    TestPartResult(result_type, file_name, line_number,
-                   msg.GetString().c_str());
-  impl_->GetTestPartResultReporterForCurrentThread()->
-      ReportTestPartResult(result);
-
-  if (result_type != TestPartResult::kSuccess) {
-    // gtest_break_on_failure takes precedence over
-    // gtest_throw_on_failure.  This allows a user to set the latter
-    // in the code (perhaps in order to use Google Test assertions
-    // with another testing framework) and specify the former on the
-    // command line for debugging.
-    if (GTEST_FLAG(break_on_failure)) {
-#if GTEST_OS_WINDOWS
-      // Using DebugBreak on Windows allows gtest to still break into a debugger
-      // when a failure happens and both the --gtest_break_on_failure and
-      // the --gtest_catch_exceptions flags are specified.
-      DebugBreak();
-#else
-      // Dereference NULL through a volatile pointer to prevent the compiler
-      // from removing. We use this rather than abort() or __builtin_trap() for
-      // portability: Symbian doesn't implement abort() well, and some debuggers
-      // don't correctly trap abort().
-      *static_cast<volatile int*>(NULL) = 1;
-#endif  // GTEST_OS_WINDOWS
-    } else if (GTEST_FLAG(throw_on_failure)) {
-#if GTEST_HAS_EXCEPTIONS
-      throw GoogleTestFailureException(result);
-#else
-      // We cannot call abort() as it generates a pop-up in debug mode
-      // that cannot be suppressed in VC 7.1 or below.
-      exit(1);
-#endif
-    }
-  }
-}
-
-// Creates and adds a property to the current TestResult. If a property matching
-// the supplied value already exists, updates its value instead.
-void UnitTest::RecordPropertyForCurrentTest(const char* key,
-                                            const char* value) {
-  const TestProperty test_property(key, value);
-  impl_->current_test_result()->RecordProperty(test_property);
-}
-
-// Runs all tests in this UnitTest object and prints the result.
-// Returns 0 if successful, or 1 otherwise.
-//
-// We don't protect this under mutex_, as we only support calling it
-// from the main thread.
-int UnitTest::Run() {
-  // Captures the value of GTEST_FLAG(catch_exceptions).  This value will be
-  // used for the duration of the program.
-  impl()->set_catch_exceptions(GTEST_FLAG(catch_exceptions));
-
-#if GTEST_HAS_SEH
-  const bool in_death_test_child_process =
-      internal::GTEST_FLAG(internal_run_death_test).length() > 0;
-
-  // Either the user wants Google Test to catch exceptions thrown by the
-  // tests or this is executing in the context of death test child
-  // process. In either case the user does not want to see pop-up dialogs
-  // about crashes - they are expected.
-  if (impl()->catch_exceptions() || in_death_test_child_process) {
-
-# if !GTEST_OS_WINDOWS_MOBILE
-    // SetErrorMode doesn't exist on CE.
-    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT |
-                 SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
-# endif  // !GTEST_OS_WINDOWS_MOBILE
-
-# if (defined(_MSC_VER) || GTEST_OS_WINDOWS_MINGW) && !GTEST_OS_WINDOWS_MOBILE
-    // Death test children can be terminated with _abort().  On Windows,
-    // _abort() can show a dialog with a warning message.  This forces the
-    // abort message to go to stderr instead.
-    _set_error_mode(_OUT_TO_STDERR);
-# endif
-
-# if _MSC_VER >= 1400 && !GTEST_OS_WINDOWS_MOBILE
-    // In the debug version, Visual Studio pops up a separate dialog
-    // offering a choice to debug the aborted program. We need to suppress
-    // this dialog or it will pop up for every EXPECT/ASSERT_DEATH statement
-    // executed. Google Test will notify the user of any unexpected
-    // failure via stderr.
-    //
-    // VC++ doesn't define _set_abort_behavior() prior to the version 8.0.
-    // Users of prior VC versions shall suffer the agony and pain of
-    // clicking through the countless debug dialogs.
-    // TODO(vladl at google.com): find a way to suppress the abort dialog() in the
-    // debug mode when compiled with VC 7.1 or lower.
-    if (!GTEST_FLAG(break_on_failure))
-      _set_abort_behavior(
-          0x0,                                    // Clear the following flags:
-          _WRITE_ABORT_MSG | _CALL_REPORTFAULT);  // pop-up window, core dump.
-# endif
-
-  }
-#endif  // GTEST_HAS_SEH
-
-  return internal::HandleExceptionsInMethodIfSupported(
-      impl(),
-      &internal::UnitTestImpl::RunAllTests,
-      "auxiliary test code (environments or event listeners)") ? 0 : 1;
-}
-
-// Returns the working directory when the first TEST() or TEST_F() was
-// executed.
-const char* UnitTest::original_working_dir() const {
-  return impl_->original_working_dir_.c_str();
-}
-
-// Returns the TestCase object for the test that's currently running,
-// or NULL if no test is running.
-// L < mutex_
-const TestCase* UnitTest::current_test_case() const {
-  internal::MutexLock lock(&mutex_);
-  return impl_->current_test_case();
-}
-
-// Returns the TestInfo object for the test that's currently running,
-// or NULL if no test is running.
-// L < mutex_
-const TestInfo* UnitTest::current_test_info() const {
-  internal::MutexLock lock(&mutex_);
-  return impl_->current_test_info();
-}
-
-// Returns the random seed used at the start of the current test run.
-int UnitTest::random_seed() const { return impl_->random_seed(); }
-
-#if GTEST_HAS_PARAM_TEST
-// Returns ParameterizedTestCaseRegistry object used to keep track of
-// value-parameterized tests and instantiate and register them.
-// L < mutex_
-internal::ParameterizedTestCaseRegistry&
-    UnitTest::parameterized_test_registry() {
-  return impl_->parameterized_test_registry();
-}
-#endif  // GTEST_HAS_PARAM_TEST
-
-// Creates an empty UnitTest.
-UnitTest::UnitTest() {
-  impl_ = new internal::UnitTestImpl(this);
-}
-
-// Destructor of UnitTest.
-UnitTest::~UnitTest() {
-  delete impl_;
-}
-
-// Pushes a trace defined by SCOPED_TRACE() on to the per-thread
-// Google Test trace stack.
-// L < mutex_
-void UnitTest::PushGTestTrace(const internal::TraceInfo& trace) {
-  internal::MutexLock lock(&mutex_);
-  impl_->gtest_trace_stack().push_back(trace);
-}
-
-// Pops a trace from the per-thread Google Test trace stack.
-// L < mutex_
-void UnitTest::PopGTestTrace() {
-  internal::MutexLock lock(&mutex_);
-  impl_->gtest_trace_stack().pop_back();
-}
-
-namespace internal {
-
-UnitTestImpl::UnitTestImpl(UnitTest* parent)
-    : parent_(parent),
-#ifdef _MSC_VER
-# pragma warning(push)                    // Saves the current warning state.
-# pragma warning(disable:4355)            // Temporarily disables warning 4355
-                                         // (using this in initializer).
-      default_global_test_part_result_reporter_(this),
-      default_per_thread_test_part_result_reporter_(this),
-# pragma warning(pop)                     // Restores the warning state again.
-#else
-      default_global_test_part_result_reporter_(this),
-      default_per_thread_test_part_result_reporter_(this),
-#endif  // _MSC_VER
-      global_test_part_result_repoter_(
-          &default_global_test_part_result_reporter_),
-      per_thread_test_part_result_reporter_(
-          &default_per_thread_test_part_result_reporter_),
-#if GTEST_HAS_PARAM_TEST
-      parameterized_test_registry_(),
-      parameterized_tests_registered_(false),
-#endif  // GTEST_HAS_PARAM_TEST
-      last_death_test_case_(-1),
-      current_test_case_(NULL),
-      current_test_info_(NULL),
-      ad_hoc_test_result_(),
-      os_stack_trace_getter_(NULL),
-      post_flag_parse_init_performed_(false),
-      random_seed_(0),  // Will be overridden by the flag before first use.
-      random_(0),  // Will be reseeded before first use.
-      elapsed_time_(0),
-#if GTEST_HAS_DEATH_TEST
-      internal_run_death_test_flag_(NULL),
-      death_test_factory_(new DefaultDeathTestFactory),
-#endif
-      // Will be overridden by the flag before first use.
-      catch_exceptions_(false) {
-  listeners()->SetDefaultResultPrinter(new PrettyUnitTestResultPrinter);
-}
-
-UnitTestImpl::~UnitTestImpl() {
-  // Deletes every TestCase.
-  ForEach(test_cases_, internal::Delete<TestCase>);
-
-  // Deletes every Environment.
-  ForEach(environments_, internal::Delete<Environment>);
-
-  delete os_stack_trace_getter_;
-}
-
-#if GTEST_HAS_DEATH_TEST
-// Disables event forwarding if the control is currently in a death test
-// subprocess. Must not be called before InitGoogleTest.
-void UnitTestImpl::SuppressTestEventsIfInSubprocess() {
-  if (internal_run_death_test_flag_.get() != NULL)
-    listeners()->SuppressEventForwarding();
-}
-#endif  // GTEST_HAS_DEATH_TEST
-
-// Initializes event listeners performing XML output as specified by
-// UnitTestOptions. Must not be called before InitGoogleTest.
-void UnitTestImpl::ConfigureXmlOutput() {
-  const String& output_format = UnitTestOptions::GetOutputFormat();
-  if (output_format == "xml") {
-    listeners()->SetDefaultXmlGenerator(new XmlUnitTestResultPrinter(
-        UnitTestOptions::GetAbsolutePathToOutputFile().c_str()));
-  } else if (output_format != "") {
-    printf("WARNING: unrecognized output format \"%s\" ignored.\n",
-           output_format.c_str());
-    fflush(stdout);
-  }
-}
-
-#if GTEST_CAN_STREAM_RESULTS_
-// Initializes event listeners for streaming test results in String form.
-// Must not be called before InitGoogleTest.
-void UnitTestImpl::ConfigureStreamingOutput() {
-  const string& target = GTEST_FLAG(stream_result_to);
-  if (!target.empty()) {
-    const size_t pos = target.find(':');
-    if (pos != string::npos) {
-      listeners()->Append(new StreamingListener(target.substr(0, pos),
-                                                target.substr(pos+1)));
-    } else {
-      printf("WARNING: unrecognized streaming target \"%s\" ignored.\n",
-             target.c_str());
-      fflush(stdout);
-    }
-  }
-}
-#endif  // GTEST_CAN_STREAM_RESULTS_
-
-// Performs initialization dependent upon flag values obtained in
-// ParseGoogleTestFlagsOnly.  Is called from InitGoogleTest after the call to
-// ParseGoogleTestFlagsOnly.  In case a user neglects to call InitGoogleTest
-// this function is also called from RunAllTests.  Since this function can be
-// called more than once, it has to be idempotent.
-void UnitTestImpl::PostFlagParsingInit() {
-  // Ensures that this function does not execute more than once.
-  if (!post_flag_parse_init_performed_) {
-    post_flag_parse_init_performed_ = true;
-
-#if GTEST_HAS_DEATH_TEST
-    InitDeathTestSubprocessControlInfo();
-    SuppressTestEventsIfInSubprocess();
-#endif  // GTEST_HAS_DEATH_TEST
-
-    // Registers parameterized tests. This makes parameterized tests
-    // available to the UnitTest reflection API without running
-    // RUN_ALL_TESTS.
-    RegisterParameterizedTests();
-
-    // Configures listeners for XML output. This makes it possible for users
-    // to shut down the default XML output before invoking RUN_ALL_TESTS.
-    ConfigureXmlOutput();
-
-#if GTEST_CAN_STREAM_RESULTS_
-    // Configures listeners for streaming test results to the specified server.
-    ConfigureStreamingOutput();
-#endif  // GTEST_CAN_STREAM_RESULTS_
-  }
-}
-
-// A predicate that checks the name of a TestCase against a known
-// value.
-//
-// This is used for implementation of the UnitTest class only.  We put
-// it in the anonymous namespace to prevent polluting the outer
-// namespace.
-//
-// TestCaseNameIs is copyable.
-class TestCaseNameIs {
- public:
-  // Constructor.
-  explicit TestCaseNameIs(const String& name)
-      : name_(name) {}
-
-  // Returns true iff the name of test_case matches name_.
-  bool operator()(const TestCase* test_case) const {
-    return test_case != NULL && strcmp(test_case->name(), name_.c_str()) == 0;
-  }
-
- private:
-  String name_;
-};
-
-// Finds and returns a TestCase with the given name.  If one doesn't
-// exist, creates one and returns it.  It's the CALLER'S
-// RESPONSIBILITY to ensure that this function is only called WHEN THE
-// TESTS ARE NOT SHUFFLED.
-//
-// Arguments:
-//
-//   test_case_name: name of the test case
-//   type_param:     the name of the test case's type parameter, or NULL if
-//                   this is not a typed or a type-parameterized test case.
-//   set_up_tc:      pointer to the function that sets up the test case
-//   tear_down_tc:   pointer to the function that tears down the test case
-TestCase* UnitTestImpl::GetTestCase(const char* test_case_name,
-                                    const char* type_param,
-                                    Test::SetUpTestCaseFunc set_up_tc,
-                                    Test::TearDownTestCaseFunc tear_down_tc) {
-  // Can we find a TestCase with the given name?
-  const std::vector<TestCase*>::const_iterator test_case =
-      std::find_if(test_cases_.begin(), test_cases_.end(),
-                   TestCaseNameIs(test_case_name));
-
-  if (test_case != test_cases_.end())
-    return *test_case;
-
-  // No.  Let's create one.
-  TestCase* const new_test_case =
-      new TestCase(test_case_name, type_param, set_up_tc, tear_down_tc);
-
-  // Is this a death test case?
-  if (internal::UnitTestOptions::MatchesFilter(String(test_case_name),
-                                               kDeathTestCaseFilter)) {
-    // Yes.  Inserts the test case after the last death test case
-    // defined so far.  This only works when the test cases haven't
-    // been shuffled.  Otherwise we may end up running a death test
-    // after a non-death test.
-    ++last_death_test_case_;
-    test_cases_.insert(test_cases_.begin() + last_death_test_case_,
-                       new_test_case);
-  } else {
-    // No.  Appends to the end of the list.
-    test_cases_.push_back(new_test_case);
-  }
-
-  test_case_indices_.push_back(static_cast<int>(test_case_indices_.size()));
-  return new_test_case;
-}
-
-// Helpers for setting up / tearing down the given environment.  They
-// are for use in the ForEach() function.
-static void SetUpEnvironment(Environment* env) { env->SetUp(); }
-static void TearDownEnvironment(Environment* env) { env->TearDown(); }
-
-// Runs all tests in this UnitTest object, prints the result, and
-// returns true if all tests are successful.  If any exception is
-// thrown during a test, the test is considered to be failed, but the
-// rest of the tests will still be run.
-//
-// When parameterized tests are enabled, it expands and registers
-// parameterized tests first in RegisterParameterizedTests().
-// All other functions called from RunAllTests() may safely assume that
-// parameterized tests are ready to be counted and run.
-bool UnitTestImpl::RunAllTests() {
-  // Makes sure InitGoogleTest() was called.
-  if (!GTestIsInitialized()) {
-    printf("%s",
-           "\nThis test program did NOT call ::testing::InitGoogleTest "
-           "before calling RUN_ALL_TESTS().  Please fix it.\n");
-    return false;
-  }
-
-  // Do not run any test if the --help flag was specified.
-  if (g_help_flag)
-    return true;
-
-  // Repeats the call to the post-flag parsing initialization in case the
-  // user didn't call InitGoogleTest.
-  PostFlagParsingInit();
-
-  // Even if sharding is not on, test runners may want to use the
-  // GTEST_SHARD_STATUS_FILE to query whether the test supports the sharding
-  // protocol.
-  internal::WriteToShardStatusFileIfNeeded();
-
-  // True iff we are in a subprocess for running a thread-safe-style
-  // death test.
-  bool in_subprocess_for_death_test = false;
-
-#if GTEST_HAS_DEATH_TEST
-  in_subprocess_for_death_test = (internal_run_death_test_flag_.get() != NULL);
-#endif  // GTEST_HAS_DEATH_TEST
-
-  const bool should_shard = ShouldShard(kTestTotalShards, kTestShardIndex,
-                                        in_subprocess_for_death_test);
-
-  // Compares the full test names with the filter to decide which
-  // tests to run.
-  const bool has_tests_to_run = FilterTests(should_shard
-                                              ? HONOR_SHARDING_PROTOCOL
-                                              : IGNORE_SHARDING_PROTOCOL) > 0;
-
-  // Lists the tests and exits if the --gtest_list_tests flag was specified.
-  if (GTEST_FLAG(list_tests)) {
-    // This must be called *after* FilterTests() has been called.
-    ListTestsMatchingFilter();
-    return true;
-  }
-
-  random_seed_ = GTEST_FLAG(shuffle) ?
-      GetRandomSeedFromFlag(GTEST_FLAG(random_seed)) : 0;
-
-  // True iff at least one test has failed.
-  bool failed = false;
-
-  TestEventListener* repeater = listeners()->repeater();
-
-  repeater->OnTestProgramStart(*parent_);
-
-  // How many times to repeat the tests?  We don't want to repeat them
-  // when we are inside the subprocess of a death test.
-  const int repeat = in_subprocess_for_death_test ? 1 : GTEST_FLAG(repeat);
-  // Repeats forever if the repeat count is negative.
-  const bool forever = repeat < 0;
-  for (int i = 0; forever || i != repeat; i++) {
-    // We want to preserve failures generated by ad-hoc test
-    // assertions executed before RUN_ALL_TESTS().
-    ClearNonAdHocTestResult();
-
-    const TimeInMillis start = GetTimeInMillis();
-
-    // Shuffles test cases and tests if requested.
-    if (has_tests_to_run && GTEST_FLAG(shuffle)) {
-      random()->Reseed(random_seed_);
-      // This should be done before calling OnTestIterationStart(),
-      // such that a test event listener can see the actual test order
-      // in the event.
-      ShuffleTests();
-    }
-
-    // Tells the unit test event listeners that the tests are about to start.
-    repeater->OnTestIterationStart(*parent_, i);
-
-    // Runs each test case if there is at least one test to run.
-    if (has_tests_to_run) {
-      // Sets up all environments beforehand.
-      repeater->OnEnvironmentsSetUpStart(*parent_);
-      ForEach(environments_, SetUpEnvironment);
-      repeater->OnEnvironmentsSetUpEnd(*parent_);
-
-      // Runs the tests only if there was no fatal failure during global
-      // set-up.
-      if (!Test::HasFatalFailure()) {
-        for (int test_index = 0; test_index < total_test_case_count();
-             test_index++) {
-          GetMutableTestCase(test_index)->Run();
-        }
-      }
-
-      // Tears down all environments in reverse order afterwards.
-      repeater->OnEnvironmentsTearDownStart(*parent_);
-      std::for_each(environments_.rbegin(), environments_.rend(),
-                    TearDownEnvironment);
-      repeater->OnEnvironmentsTearDownEnd(*parent_);
-    }
-
-    elapsed_time_ = GetTimeInMillis() - start;
-
-    // Tells the unit test event listener that the tests have just finished.
-    repeater->OnTestIterationEnd(*parent_, i);
-
-    // Gets the result and clears it.
-    if (!Passed()) {
-      failed = true;
-    }
-
-    // Restores the original test order after the iteration.  This
-    // allows the user to quickly repro a failure that happens in the
-    // N-th iteration without repeating the first (N - 1) iterations.
-    // This is not enclosed in "if (GTEST_FLAG(shuffle)) { ... }", in
-    // case the user somehow changes the value of the flag somewhere
-    // (it's always safe to unshuffle the tests).
-    UnshuffleTests();
-
-    if (GTEST_FLAG(shuffle)) {
-      // Picks a new random seed for each iteration.
-      random_seed_ = GetNextRandomSeed(random_seed_);
-    }
-  }
-
-  repeater->OnTestProgramEnd(*parent_);
-
-  return !failed;
-}
-
-// Reads the GTEST_SHARD_STATUS_FILE environment variable, and creates the file
-// if the variable is present. If a file already exists at this location, this
-// function will write over it. If the variable is present, but the file cannot
-// be created, prints an error and exits.
-void WriteToShardStatusFileIfNeeded() {
-  const char* const test_shard_file = posix::GetEnv(kTestShardStatusFile);
-  if (test_shard_file != NULL) {
-    FILE* const file = posix::FOpen(test_shard_file, "w");
-    if (file == NULL) {
-      ColoredPrintf(COLOR_RED,
-                    "Could not write to the test shard status file \"%s\" "
-                    "specified by the %s environment variable.\n",
-                    test_shard_file, kTestShardStatusFile);
-      fflush(stdout);
-      exit(EXIT_FAILURE);
-    }
-    fclose(file);
-  }
-}
-
-// Checks whether sharding is enabled by examining the relevant
-// environment variable values. If the variables are present,
-// but inconsistent (i.e., shard_index >= total_shards), prints
-// an error and exits. If in_subprocess_for_death_test, sharding is
-// disabled because it must only be applied to the original test
-// process. Otherwise, we could filter out death tests we intended to execute.
-bool ShouldShard(const char* total_shards_env,
-                 const char* shard_index_env,
-                 bool in_subprocess_for_death_test) {
-  if (in_subprocess_for_death_test) {
-    return false;
-  }
-
-  const Int32 total_shards = Int32FromEnvOrDie(total_shards_env, -1);
-  const Int32 shard_index = Int32FromEnvOrDie(shard_index_env, -1);
-
-  if (total_shards == -1 && shard_index == -1) {
-    return false;
-  } else if (total_shards == -1 && shard_index != -1) {
-    const Message msg = Message()
-      << "Invalid environment variables: you have "
-      << kTestShardIndex << " = " << shard_index
-      << ", but have left " << kTestTotalShards << " unset.\n";
-    ColoredPrintf(COLOR_RED, msg.GetString().c_str());
-    fflush(stdout);
-    exit(EXIT_FAILURE);
-  } else if (total_shards != -1 && shard_index == -1) {
-    const Message msg = Message()
-      << "Invalid environment variables: you have "
-      << kTestTotalShards << " = " << total_shards
-      << ", but have left " << kTestShardIndex << " unset.\n";
-    ColoredPrintf(COLOR_RED, msg.GetString().c_str());
-    fflush(stdout);
-    exit(EXIT_FAILURE);
-  } else if (shard_index < 0 || shard_index >= total_shards) {
-    const Message msg = Message()
-      << "Invalid environment variables: we require 0 <= "
-      << kTestShardIndex << " < " << kTestTotalShards
-      << ", but you have " << kTestShardIndex << "=" << shard_index
-      << ", " << kTestTotalShards << "=" << total_shards << ".\n";
-    ColoredPrintf(COLOR_RED, msg.GetString().c_str());
-    fflush(stdout);
-    exit(EXIT_FAILURE);
-  }
-
-  return total_shards > 1;
-}
-
-// Parses the environment variable var as an Int32. If it is unset,
-// returns default_val. If it is not an Int32, prints an error
-// and aborts.
-Int32 Int32FromEnvOrDie(const char* var, Int32 default_val) {
-  const char* str_val = posix::GetEnv(var);
-  if (str_val == NULL) {
-    return default_val;
-  }
-
-  Int32 result;
-  if (!ParseInt32(Message() << "The value of environment variable " << var,
-                  str_val, &result)) {
-    exit(EXIT_FAILURE);
-  }
-  return result;
-}
-
-// Given the total number of shards, the shard index, and the test id,
-// returns true iff the test should be run on this shard. The test id is
-// some arbitrary but unique non-negative integer assigned to each test
-// method. Assumes that 0 <= shard_index < total_shards.
-bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) {
-  return (test_id % total_shards) == shard_index;
-}
-
-// Compares the name of each test with the user-specified filter to
-// decide whether the test should be run, then records the result in
-// each TestCase and TestInfo object.
-// If shard_tests == true, further filters tests based on sharding
-// variables in the environment - see
-// http://code.google.com/p/googletest/wiki/GoogleTestAdvancedGuide.
-// Returns the number of tests that should run.
-int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) {
-  const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ?
-      Int32FromEnvOrDie(kTestTotalShards, -1) : -1;
-  const Int32 shard_index = shard_tests == HONOR_SHARDING_PROTOCOL ?
-      Int32FromEnvOrDie(kTestShardIndex, -1) : -1;
-
-  // num_runnable_tests are the number of tests that will
-  // run across all shards (i.e., match filter and are not disabled).
-  // num_selected_tests are the number of tests to be run on
-  // this shard.
-  int num_runnable_tests = 0;
-  int num_selected_tests = 0;
-  for (size_t i = 0; i < test_cases_.size(); i++) {
-    TestCase* const test_case = test_cases_[i];
-    const String &test_case_name = test_case->name();
-    test_case->set_should_run(false);
-
-    for (size_t j = 0; j < test_case->test_info_list().size(); j++) {
-      TestInfo* const test_info = test_case->test_info_list()[j];
-      const String test_name(test_info->name());
-      // A test is disabled if test case name or test name matches
-      // kDisableTestFilter.
-      const bool is_disabled =
-          internal::UnitTestOptions::MatchesFilter(test_case_name,
-                                                   kDisableTestFilter) ||
-          internal::UnitTestOptions::MatchesFilter(test_name,
-                                                   kDisableTestFilter);
-      test_info->is_disabled_ = is_disabled;
-
-      const bool matches_filter =
-          internal::UnitTestOptions::FilterMatchesTest(test_case_name,
-                                                       test_name);
-      test_info->matches_filter_ = matches_filter;
-
-      const bool is_runnable =
-          (GTEST_FLAG(also_run_disabled_tests) || !is_disabled) &&
-          matches_filter;
-
-      const bool is_selected = is_runnable &&
-          (shard_tests == IGNORE_SHARDING_PROTOCOL ||
-           ShouldRunTestOnShard(total_shards, shard_index,
-                                num_runnable_tests));
-
-      num_runnable_tests += is_runnable;
-      num_selected_tests += is_selected;
-
-      test_info->should_run_ = is_selected;
-      test_case->set_should_run(test_case->should_run() || is_selected);
-    }
-  }
-  return num_selected_tests;
-}
-
-// Prints the names of the tests matching the user-specified filter flag.
-void UnitTestImpl::ListTestsMatchingFilter() {
-  for (size_t i = 0; i < test_cases_.size(); i++) {
-    const TestCase* const test_case = test_cases_[i];
-    bool printed_test_case_name = false;
-
-    for (size_t j = 0; j < test_case->test_info_list().size(); j++) {
-      const TestInfo* const test_info =
-          test_case->test_info_list()[j];
-      if (test_info->matches_filter_) {
-        if (!printed_test_case_name) {
-          printed_test_case_name = true;
-          printf("%s.\n", test_case->name());
-        }
-        printf("  %s\n", test_info->name());
-      }
-    }
-  }
-  fflush(stdout);
-}
-
-// Sets the OS stack trace getter.
-//
-// Does nothing if the input and the current OS stack trace getter are
-// the same; otherwise, deletes the old getter and makes the input the
-// current getter.
-void UnitTestImpl::set_os_stack_trace_getter(
-    OsStackTraceGetterInterface* getter) {
-  if (os_stack_trace_getter_ != getter) {
-    delete os_stack_trace_getter_;
-    os_stack_trace_getter_ = getter;
-  }
-}
-
-// Returns the current OS stack trace getter if it is not NULL;
-// otherwise, creates an OsStackTraceGetter, makes it the current
-// getter, and returns it.
-OsStackTraceGetterInterface* UnitTestImpl::os_stack_trace_getter() {
-  if (os_stack_trace_getter_ == NULL) {
-    os_stack_trace_getter_ = new OsStackTraceGetter;
-  }
-
-  return os_stack_trace_getter_;
-}
-
-// Returns the TestResult for the test that's currently running, or
-// the TestResult for the ad hoc test if no test is running.
-TestResult* UnitTestImpl::current_test_result() {
-  return current_test_info_ ?
-      &(current_test_info_->result_) : &ad_hoc_test_result_;
-}
-
-// Shuffles all test cases, and the tests within each test case,
-// making sure that death tests are still run first.
-void UnitTestImpl::ShuffleTests() {
-  // Shuffles the death test cases.
-  ShuffleRange(random(), 0, last_death_test_case_ + 1, &test_case_indices_);
-
-  // Shuffles the non-death test cases.
-  ShuffleRange(random(), last_death_test_case_ + 1,
-               static_cast<int>(test_cases_.size()), &test_case_indices_);
-
-  // Shuffles the tests inside each test case.
-  for (size_t i = 0; i < test_cases_.size(); i++) {
-    test_cases_[i]->ShuffleTests(random());
-  }
-}
-
-// Restores the test cases and tests to their order before the first shuffle.
-void UnitTestImpl::UnshuffleTests() {
-  for (size_t i = 0; i < test_cases_.size(); i++) {
-    // Unshuffles the tests in each test case.
-    test_cases_[i]->UnshuffleTests();
-    // Resets the index of each test case.
-    test_case_indices_[i] = static_cast<int>(i);
-  }
-}
-
-// Returns the current OS stack trace as a String.
-//
-// The maximum number of stack frames to be included is specified by
-// the gtest_stack_trace_depth flag.  The skip_count parameter
-// specifies the number of top frames to be skipped, which doesn't
-// count against the number of frames to be included.
-//
-// For example, if Foo() calls Bar(), which in turn calls
-// GetCurrentOsStackTraceExceptTop(..., 1), Foo() will be included in
-// the trace but Bar() and GetCurrentOsStackTraceExceptTop() won't.
-String GetCurrentOsStackTraceExceptTop(UnitTest* /*unit_test*/,
-                                       int skip_count) {
-  // We pass skip_count + 1 to skip this wrapper function in addition
-  // to what the user really wants to skip.
-  return GetUnitTestImpl()->CurrentOsStackTraceExceptTop(skip_count + 1);
-}
-
-// Used by the GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_ macro to
-// suppress unreachable code warnings.
-namespace {
-class ClassUniqueToAlwaysTrue {};
-}
-
-bool IsTrue(bool condition) { return condition; }
-
-bool AlwaysTrue() {
-#if GTEST_HAS_EXCEPTIONS
-  // This condition is always false so AlwaysTrue() never actually throws,
-  // but it makes the compiler think that it may throw.
-  if (IsTrue(false))
-    throw ClassUniqueToAlwaysTrue();
-#endif  // GTEST_HAS_EXCEPTIONS
-  return true;
-}
-
-// If *pstr starts with the given prefix, modifies *pstr to be right
-// past the prefix and returns true; otherwise leaves *pstr unchanged
-// and returns false.  None of pstr, *pstr, and prefix can be NULL.
-bool SkipPrefix(const char* prefix, const char** pstr) {
-  const size_t prefix_len = strlen(prefix);
-  if (strncmp(*pstr, prefix, prefix_len) == 0) {
-    *pstr += prefix_len;
-    return true;
-  }
-  return false;
-}
-
-// Parses a string as a command line flag.  The string should have
-// the format "--flag=value".  When def_optional is true, the "=value"
-// part can be omitted.
-//
-// Returns the value of the flag, or NULL if the parsing failed.
-const char* ParseFlagValue(const char* str,
-                           const char* flag,
-                           bool def_optional) {
-  // str and flag must not be NULL.
-  if (str == NULL || flag == NULL) return NULL;
-
-  // The flag must start with "--" followed by GTEST_FLAG_PREFIX_.
-  const String flag_str = String::Format("--%s%s", GTEST_FLAG_PREFIX_, flag);
-  const size_t flag_len = flag_str.length();
-  if (strncmp(str, flag_str.c_str(), flag_len) != 0) return NULL;
-
-  // Skips the flag name.
-  const char* flag_end = str + flag_len;
-
-  // When def_optional is true, it's OK to not have a "=value" part.
-  if (def_optional && (flag_end[0] == '\0')) {
-    return flag_end;
-  }
-
-  // If def_optional is true and there are more characters after the
-  // flag name, or if def_optional is false, there must be a '=' after
-  // the flag name.
-  if (flag_end[0] != '=') return NULL;
-
-  // Returns the string after "=".
-  return flag_end + 1;
-}
-
-// Parses a string for a bool flag, in the form of either
-// "--flag=value" or "--flag".
-//
-// In the former case, the value is taken as true as long as it does
-// not start with '0', 'f', or 'F'.
-//
-// In the latter case, the value is taken as true.
-//
-// On success, stores the value of the flag in *value, and returns
-// true.  On failure, returns false without changing *value.
-bool ParseBoolFlag(const char* str, const char* flag, bool* value) {
-  // Gets the value of the flag as a string.
-  const char* const value_str = ParseFlagValue(str, flag, true);
-
-  // Aborts if the parsing failed.
-  if (value_str == NULL) return false;
-
-  // Converts the string value to a bool.
-  *value = !(*value_str == '0' || *value_str == 'f' || *value_str == 'F');
-  return true;
-}
-
-// Parses a string for an Int32 flag, in the form of
-// "--flag=value".
-//
-// On success, stores the value of the flag in *value, and returns
-// true.  On failure, returns false without changing *value.
-bool ParseInt32Flag(const char* str, const char* flag, Int32* value) {
-  // Gets the value of the flag as a string.
-  const char* const value_str = ParseFlagValue(str, flag, false);
-
-  // Aborts if the parsing failed.
-  if (value_str == NULL) return false;
-
-  // Sets *value to the value of the flag.
-  return ParseInt32(Message() << "The value of flag --" << flag,
-                    value_str, value);
-}
-
-// Parses a string for a string flag, in the form of
-// "--flag=value".
-//
-// On success, stores the value of the flag in *value, and returns
-// true.  On failure, returns false without changing *value.
-bool ParseStringFlag(const char* str, const char* flag, String* value) {
-  // Gets the value of the flag as a string.
-  const char* const value_str = ParseFlagValue(str, flag, false);
-
-  // Aborts if the parsing failed.
-  if (value_str == NULL) return false;
-
-  // Sets *value to the value of the flag.
-  *value = value_str;
-  return true;
-}
-
-// Determines whether a string has a prefix that Google Test uses for its
-// flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_.
-// If Google Test detects that a command line flag has its prefix but is not
-// recognized, it will print its help message. Flags starting with
-// GTEST_INTERNAL_PREFIX_ followed by "internal_" are considered Google Test
-// internal flags and do not trigger the help message.
-static bool HasGoogleTestFlagPrefix(const char* str) {
-  return (SkipPrefix("--", &str) ||
-          SkipPrefix("-", &str) ||
-          SkipPrefix("/", &str)) &&
-         !SkipPrefix(GTEST_FLAG_PREFIX_ "internal_", &str) &&
-         (SkipPrefix(GTEST_FLAG_PREFIX_, &str) ||
-          SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str));
-}
-
-// Prints a string containing code-encoded text.  The following escape
-// sequences can be used in the string to control the text color:
-//
-//   @@    prints a single '@' character.
-//   @R    changes the color to red.
-//   @G    changes the color to green.
-//   @Y    changes the color to yellow.
-//   @D    changes to the default terminal text color.
-//
-// TODO(wan at google.com): Write tests for this once we add stdout
-// capturing to Google Test.
-static void PrintColorEncoded(const char* str) {
-  GTestColor color = COLOR_DEFAULT;  // The current color.
-
-  // Conceptually, we split the string into segments divided by escape
-  // sequences.  Then we print one segment at a time.  At the end of
-  // each iteration, the str pointer advances to the beginning of the
-  // next segment.
-  for (;;) {
-    const char* p = strchr(str, '@');
-    if (p == NULL) {
-      ColoredPrintf(color, "%s", str);
-      return;
-    }
-
-    ColoredPrintf(color, "%s", String(str, p - str).c_str());
-
-    const char ch = p[1];
-    str = p + 2;
-    if (ch == '@') {
-      ColoredPrintf(color, "@");
-    } else if (ch == 'D') {
-      color = COLOR_DEFAULT;
-    } else if (ch == 'R') {
-      color = COLOR_RED;
-    } else if (ch == 'G') {
-      color = COLOR_GREEN;
-    } else if (ch == 'Y') {
-      color = COLOR_YELLOW;
-    } else {
-      --str;
-    }
-  }
-}
-
-static const char kColorEncodedHelpMessage[] =
-"This program contains tests written using " GTEST_NAME_ ". You can use the\n"
-"following command line flags to control its behavior:\n"
-"\n"
-"Test Selection:\n"
-"  @G--" GTEST_FLAG_PREFIX_ "list_tests at D\n"
-"      List the names of all tests instead of running them. The name of\n"
-"      TEST(Foo, Bar) is \"Foo.Bar\".\n"
-"  @G--" GTEST_FLAG_PREFIX_ "filter=@YPOSTIVE_PATTERNS"
-    "[@G- at YNEGATIVE_PATTERNS]@D\n"
-"      Run only the tests whose name matches one of the positive patterns but\n"
-"      none of the negative patterns. '?' matches any single character; '*'\n"
-"      matches any substring; ':' separates two patterns.\n"
-"  @G--" GTEST_FLAG_PREFIX_ "also_run_disabled_tests at D\n"
-"      Run all disabled tests too.\n"
-"\n"
-"Test Execution:\n"
-"  @G--" GTEST_FLAG_PREFIX_ "repeat=@Y[COUNT]@D\n"
-"      Run the tests repeatedly; use a negative count to repeat forever.\n"
-"  @G--" GTEST_FLAG_PREFIX_ "shuffle at D\n"
-"      Randomize tests' orders on every iteration.\n"
-"  @G--" GTEST_FLAG_PREFIX_ "random_seed=@Y[NUMBER]@D\n"
-"      Random number seed to use for shuffling test orders (between 1 and\n"
-"      99999, or 0 to use a seed based on the current time).\n"
-"\n"
-"Test Output:\n"
-"  @G--" GTEST_FLAG_PREFIX_ "color=@Y(@Gyes at Y|@Gno at Y|@Gauto at Y)@D\n"
-"      Enable/disable colored output. The default is @Gauto at D.\n"
-"  - at G-" GTEST_FLAG_PREFIX_ "print_time=0 at D\n"
-"      Don't print the elapsed time of each test.\n"
-"  @G--" GTEST_FLAG_PREFIX_ "output=xml at Y[@G:@YDIRECTORY_PATH at G"
-    GTEST_PATH_SEP_ "@Y|@G:@YFILE_PATH]@D\n"
-"      Generate an XML report in the given directory or with the given file\n"
-"      name. @YFILE_PATH at D defaults to @Gtest_details.xml at D.\n"
-#if GTEST_CAN_STREAM_RESULTS_
-"  @G--" GTEST_FLAG_PREFIX_ "stream_result_to=@YHOST at G:@YPORT at D\n"
-"      Stream test results to the given server.\n"
-#endif  // GTEST_CAN_STREAM_RESULTS_
-"\n"
-"Assertion Behavior:\n"
-#if GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS
-"  @G--" GTEST_FLAG_PREFIX_ "death_test_style=@Y(@Gfast at Y|@Gthreadsafe at Y)@D\n"
-"      Set the default death test style.\n"
-#endif  // GTEST_HAS_DEATH_TEST && !GTEST_OS_WINDOWS
-"  @G--" GTEST_FLAG_PREFIX_ "break_on_failure at D\n"
-"      Turn assertion failures into debugger break-points.\n"
-"  @G--" GTEST_FLAG_PREFIX_ "throw_on_failure at D\n"
-"      Turn assertion failures into C++ exceptions.\n"
-"  @G--" GTEST_FLAG_PREFIX_ "catch_exceptions=0 at D\n"
-"      Do not report exceptions as test failures. Instead, allow them\n"
-"      to crash the program or throw a pop-up (on Windows).\n"
-"\n"
-"Except for @G--" GTEST_FLAG_PREFIX_ "list_tests at D, you can alternatively set "
-    "the corresponding\n"
-"environment variable of a flag (all letters in upper-case). For example, to\n"
-"disable colored text output, you can either specify @G--" GTEST_FLAG_PREFIX_
-    "color=no at D or set\n"
-"the @G" GTEST_FLAG_PREFIX_UPPER_ "COLOR at D environment variable to @Gno at D.\n"
-"\n"
-"For more information, please read the " GTEST_NAME_ " documentation at\n"
-"@G" GTEST_PROJECT_URL_ "@D. If you find a bug in " GTEST_NAME_ "\n"
-"(not one in your own code or tests), please report it to\n"
-"@G<" GTEST_DEV_EMAIL_ ">@D.\n";
-
-// Parses the command line for Google Test flags, without initializing
-// other parts of Google Test.  The type parameter CharType can be
-// instantiated to either char or wchar_t.
-template <typename CharType>
-void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) {
-  for (int i = 1; i < *argc; i++) {
-    const String arg_string = StreamableToString(argv[i]);
-    const char* const arg = arg_string.c_str();
-
-    using internal::ParseBoolFlag;
-    using internal::ParseInt32Flag;
-    using internal::ParseStringFlag;
-
-    // Do we see a Google Test flag?
-    if (ParseBoolFlag(arg, kAlsoRunDisabledTestsFlag,
-                      &GTEST_FLAG(also_run_disabled_tests)) ||
-        ParseBoolFlag(arg, kBreakOnFailureFlag,
-                      &GTEST_FLAG(break_on_failure)) ||
-        ParseBoolFlag(arg, kCatchExceptionsFlag,
-                      &GTEST_FLAG(catch_exceptions)) ||
-        ParseStringFlag(arg, kColorFlag, &GTEST_FLAG(color)) ||
-        ParseStringFlag(arg, kDeathTestStyleFlag,
-                        &GTEST_FLAG(death_test_style)) ||
-        ParseBoolFlag(arg, kDeathTestUseFork,
-                      &GTEST_FLAG(death_test_use_fork)) ||
-        ParseStringFlag(arg, kFilterFlag, &GTEST_FLAG(filter)) ||
-        ParseStringFlag(arg, kInternalRunDeathTestFlag,
-                        &GTEST_FLAG(internal_run_death_test)) ||
-        ParseBoolFlag(arg, kListTestsFlag, &GTEST_FLAG(list_tests)) ||
-        ParseStringFlag(arg, kOutputFlag, &GTEST_FLAG(output)) ||
-        ParseBoolFlag(arg, kPrintTimeFlag, &GTEST_FLAG(print_time)) ||
-        ParseInt32Flag(arg, kRandomSeedFlag, &GTEST_FLAG(random_seed)) ||
-        ParseInt32Flag(arg, kRepeatFlag, &GTEST_FLAG(repeat)) ||
-        ParseBoolFlag(arg, kShuffleFlag, &GTEST_FLAG(shuffle)) ||
-        ParseInt32Flag(arg, kStackTraceDepthFlag,
-                       &GTEST_FLAG(stack_trace_depth)) ||
-        ParseStringFlag(arg, kStreamResultToFlag,
-                        &GTEST_FLAG(stream_result_to)) ||
-        ParseBoolFlag(arg, kThrowOnFailureFlag,
-                      &GTEST_FLAG(throw_on_failure))
-        ) {
-      // Yes.  Shift the remainder of the argv list left by one.  Note
-      // that argv has (*argc + 1) elements, the last one always being
-      // NULL.  The following loop moves the trailing NULL element as
-      // well.
-      for (int j = i; j != *argc; j++) {
-        argv[j] = argv[j + 1];
-      }
-
-      // Decrements the argument count.
-      (*argc)--;
-
-      // We also need to decrement the iterator as we just removed
-      // an element.
-      i--;
-    } else if (arg_string == "--help" || arg_string == "-h" ||
-               arg_string == "-?" || arg_string == "/?" ||
-               HasGoogleTestFlagPrefix(arg)) {
-      // Both help flag and unrecognized Google Test flags (excluding
-      // internal ones) trigger help display.
-      g_help_flag = true;
-    }
-  }
-
-  if (g_help_flag) {
-    // We print the help here instead of in RUN_ALL_TESTS(), as the
-    // latter may not be called at all if the user is using Google
-    // Test with another testing framework.
-    PrintColorEncoded(kColorEncodedHelpMessage);
-  }
-}
-
-// Parses the command line for Google Test flags, without initializing
-// other parts of Google Test.
-void ParseGoogleTestFlagsOnly(int* argc, char** argv) {
-  ParseGoogleTestFlagsOnlyImpl(argc, argv);
-}
-void ParseGoogleTestFlagsOnly(int* argc, wchar_t** argv) {
-  ParseGoogleTestFlagsOnlyImpl(argc, argv);
-}
-
-// The internal implementation of InitGoogleTest().
-//
-// The type parameter CharType can be instantiated to either char or
-// wchar_t.
-template <typename CharType>
-void InitGoogleTestImpl(int* argc, CharType** argv) {
-  g_init_gtest_count++;
-
-  // We don't want to run the initialization code twice.
-  if (g_init_gtest_count != 1) return;
-
-  if (*argc <= 0) return;
-
-  internal::g_executable_path = internal::StreamableToString(argv[0]);
-
-#if GTEST_HAS_DEATH_TEST
-
-  g_argvs.clear();
-  for (int i = 0; i != *argc; i++) {
-    g_argvs.push_back(StreamableToString(argv[i]));
-  }
-
-#endif  // GTEST_HAS_DEATH_TEST
-
-  ParseGoogleTestFlagsOnly(argc, argv);
-  GetUnitTestImpl()->PostFlagParsingInit();
-}
-
-}  // namespace internal
-
-// Initializes Google Test.  This must be called before calling
-// RUN_ALL_TESTS().  In particular, it parses a command line for the
-// flags that Google Test recognizes.  Whenever a Google Test flag is
-// seen, it is removed from argv, and *argc is decremented.
-//
-// No value is returned.  Instead, the Google Test flag variables are
-// updated.
-//
-// Calling the function for the second time has no user-visible effect.
-void InitGoogleTest(int* argc, char** argv) {
-  internal::InitGoogleTestImpl(argc, argv);
-}
-
-// This overloaded version can be used in Windows programs compiled in
-// UNICODE mode.
-void InitGoogleTest(int* argc, wchar_t** argv) {
-  internal::InitGoogleTestImpl(argc, argv);
-}
-
-}  // namespace testing
diff --git a/src/libs_3rdparty/gtest/src/test/production.cc b/src/libs_3rdparty/gtest/src/test/production.cc
deleted file mode 100644
index 8b8a40b..0000000
--- a/src/libs_3rdparty/gtest/src/test/production.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2006, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-//
-// This is part of the unit test for include/gtest/gtest_prod.h.
-
-#include "production.h"
-
-PrivateCode::PrivateCode() : x_(0) {}
diff --git a/src/libs_3rdparty/gtest/src/test/production.h b/src/libs_3rdparty/gtest/src/test/production.h
deleted file mode 100644
index 98fd5e4..0000000
--- a/src/libs_3rdparty/gtest/src/test/production.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2006, Google Inc.
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * 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.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// 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
-// OWNER 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.
-//
-// Author: wan at google.com (Zhanyong Wan)
-//
-// This is part of the unit test for include/gtest/gtest_prod.h.
-
-#ifndef GTEST_TEST_PRODUCTION_H_
-#define GTEST_TEST_PRODUCTION_H_
-
-#include "gtest/gtest_prod.h"
-
-class PrivateCode {
- public:
-  // Declares a friend test that does not use a fixture.
-  FRIEND_TEST(PrivateCodeTest, CanAccessPrivateMembers);
-
-  // Declares a friend test that uses a fixture.
-  FRIEND_TEST(PrivateCodeFixtureTest, CanAccessPrivateMembers);
-
-  PrivateCode();
-
-  int x() const { return x_; }
- private:
-  void set_x(int an_x) { x_ = an_x; }
-  int x_;
-};
-
-#endif  // GTEST_TEST_PRODUCTION_H_
diff --git a/src/libs_3rdparty/samtools/CMakeLists.txt b/src/libs_3rdparty/samtools/CMakeLists.txt
new file mode 100644
index 0000000..b477488
--- /dev/null
+++ b/src/libs_3rdparty/samtools/CMakeLists.txt
@@ -0,0 +1,33 @@
+cmake_minimum_required(VERSION 3.4)
+project(samtools)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt5 REQUIRED Core LinguistTools)
+
+include_directories(src)
+include_directories(src/samtools)
+include_directories(../../include)
+
+add_definitions(
+        -D_FILE_OFFSET_BITS=64
+        -D_LARGEFILE64_SOURCE
+        -D_USE_KNETFILE
+)
+
+file(GLOB_RECURSE SRCS src/*.cpp src/*.c)
+file(GLOB_RECURSE HDRS src/*.h)
+file(GLOB TS_FILES transl/*.ts)
+
+qt5_add_translation(QM_FILES ${TS_FILES})
+
+# Supress original samtools warnings
+if (CMAKE_COMPILER_IS_GNUCC)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")
+endif (CMAKE_COMPILER_IS_GNUCC)
+
+add_library(samtools STATIC ${HDRS} ${SRCS} ${QM_FILES})
+
+target_link_libraries(samtools
+        Qt5::Core
+        zlib)
diff --git a/src/libs_3rdparty/samtools/samtools.pri b/src/libs_3rdparty/samtools/samtools.pri
index 591f20c..cae44f7 100644
--- a/src/libs_3rdparty/samtools/samtools.pri
+++ b/src/libs_3rdparty/samtools/samtools.pri
@@ -10,8 +10,9 @@ win32 : DEFINES += _USE_MATH_DEFINES "inline=__inline" "__func__=__FUNCTION__" "
 LIBS += -L../../_release
 
 use_bundled_zlib() {
-    INCLUDEPATH += ../zlib/src
     LIBS += -lzlib
+} else {
+    LIBS += -lz
 }
 
 macx {
diff --git a/src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp b/src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp
index e3268e4..0f45d67 100644
--- a/src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp
+++ b/src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp
@@ -230,8 +230,9 @@ QList<U2AuxData> SamtoolsAdapter::string2aux(const QByteArray &auxString) {
     CHECK(!auxString.isEmpty(), QList<U2AuxData>());
     // Adapted samtools code:
     QList<U2AuxData> result;
-    const char *s = auxString.data();
-    while (s < auxString.data() + auxString.length()) {
+    const char *s = auxString.constData();
+    const char *end = s + auxString.length();
+    while (s < end) {
         U2AuxData aux;
         aux.tag[0] = s[0]; aux.tag[1] = s[1];
         s += 2; aux.type = *s; ++s;
diff --git a/src/libs_3rdparty/samtools/src/samtools/bam.h b/src/libs_3rdparty/samtools/src/samtools/bam.h
index 346c750..4bc79c0 100644
--- a/src/libs_3rdparty/samtools/src/samtools/bam.h
+++ b/src/libs_3rdparty/samtools/src/samtools/bam.h
@@ -61,7 +61,7 @@ typedef BGZF *bamFile;
 #define bam_seek(fp, pos, dir) bgzf_seek(fp, pos, dir)
 #else
 #define BAM_TRUE_OFFSET
-#include <zlib.h>
+#include <3rdparty/zlib/zlib.h>
 typedef gzFile bamFile;
 #define bam_open(fn, mode) gzopen(fn, mode)
 #define bam_dopen(fd, mode) gzdopen(fd, mode)
diff --git a/src/libs_3rdparty/samtools/src/samtools/bam_import.c b/src/libs_3rdparty/samtools/src/samtools/bam_import.c
index 8146aad..bd6e5a2 100644
--- a/src/libs_3rdparty/samtools/src/samtools/bam_import.c
+++ b/src/libs_3rdparty/samtools/src/samtools/bam_import.c
@@ -1,4 +1,4 @@
-#include <zlib.h>
+#include <3rdparty/zlib/zlib.h>
 #include <stdio.h>
 #include <ctype.h>
 #include <string.h>
diff --git a/src/libs_3rdparty/samtools/src/samtools/bam_rmdup.c b/src/libs_3rdparty/samtools/src/samtools/bam_rmdup.c
index 359b1ad..faccbbc 100644
--- a/src/libs_3rdparty/samtools/src/samtools/bam_rmdup.c
+++ b/src/libs_3rdparty/samtools/src/samtools/bam_rmdup.c
@@ -1,7 +1,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
-#include <zlib.h>
+#include <3rdparty/zlib/zlib.h>
 #include <unistd.h>
 #include "sam.h"
 
diff --git a/src/libs_3rdparty/samtools/src/samtools/bcftools/bcf.h b/src/libs_3rdparty/samtools/src/samtools/bcftools/bcf.h
index 822ae5c..7f2d96b 100644
--- a/src/libs_3rdparty/samtools/src/samtools/bcftools/bcf.h
+++ b/src/libs_3rdparty/samtools/src/samtools/bcftools/bcf.h
@@ -31,7 +31,7 @@
 #define BCF_VERSION "0.1.17-dev (r973:277)"
 
 #include <stdint.h>
-#include <zlib.h>
+#include <3rdparty/zlib/zlib.h>
 
 #ifndef BCF_LITE
 #include "bgzf.h"
diff --git a/src/libs_3rdparty/samtools/src/samtools/bcftools/call1.c b/src/libs_3rdparty/samtools/src/samtools/bcftools/call1.c
index 736a59b..d1f66fe 100644
--- a/src/libs_3rdparty/samtools/src/samtools/bcftools/call1.c
+++ b/src/libs_3rdparty/samtools/src/samtools/bcftools/call1.c
@@ -1,7 +1,7 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <math.h>
-#include <zlib.h>
+#include <3rdparty/zlib/zlib.h>
 #include <errno.h>
 #include "bcf.h"
 #include "prob1.h"
diff --git a/src/libs_3rdparty/samtools/src/samtools/bcftools/vcf.c b/src/libs_3rdparty/samtools/src/samtools/bcftools/vcf.c
index c979d78..a18c476 100644
--- a/src/libs_3rdparty/samtools/src/samtools/bcftools/vcf.c
+++ b/src/libs_3rdparty/samtools/src/samtools/bcftools/vcf.c
@@ -1,4 +1,4 @@
-#include <zlib.h>
+#include <3rdparty/zlib/zlib.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
diff --git a/src/libs_3rdparty/samtools/src/samtools/bedidx.c b/src/libs_3rdparty/samtools/src/samtools/bedidx.c
index ec75a10..d044e5f 100644
--- a/src/libs_3rdparty/samtools/src/samtools/bedidx.c
+++ b/src/libs_3rdparty/samtools/src/samtools/bedidx.c
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include <string.h>
 #include <stdio.h>
-#include <zlib.h>
+#include <3rdparty/zlib/zlib.h>
 
 #ifdef _WIN32
 #define drand48() ((double)rand() / RAND_MAX)
diff --git a/src/libs_3rdparty/samtools/src/samtools/bgzf.h b/src/libs_3rdparty/samtools/src/samtools/bgzf.h
index 7295f37..32c5211 100644
--- a/src/libs_3rdparty/samtools/src/samtools/bgzf.h
+++ b/src/libs_3rdparty/samtools/src/samtools/bgzf.h
@@ -26,7 +26,7 @@
 
 #include <stdint.h>
 #include <stdio.h>
-#include <zlib.h>
+#include <3rdparty/zlib/zlib.h>
 #ifdef _USE_KNETFILE
 #include "knetfile.h"
 #endif
diff --git a/src/libs_3rdparty/samtools/src/samtools/phase.c b/src/libs_3rdparty/samtools/src/samtools/phase.c
index ef4eff9..6ec1564 100644
--- a/src/libs_3rdparty/samtools/src/samtools/phase.c
+++ b/src/libs_3rdparty/samtools/src/samtools/phase.c
@@ -3,7 +3,7 @@
 #include <unistd.h>
 #include <stdint.h>
 #include <math.h>
-#include <zlib.h>
+#include <3rdparty/zlib/zlib.h>
 #include "bam.h"
 #include "errmod.h"
 
diff --git a/src/libs_3rdparty/samtools/src/samtools/razf.h b/src/libs_3rdparty/samtools/src/samtools/razf.h
index 126ab89..f25eb0e 100644
--- a/src/libs_3rdparty/samtools/src/samtools/razf.h
+++ b/src/libs_3rdparty/samtools/src/samtools/razf.h
@@ -35,7 +35,7 @@
 
 #include <stdint.h>
 #include <stdio.h>
-#include "zlib.h"
+#include <3rdparty/zlib/zlib.h>
 
 #ifdef _USE_KNETFILE
 #include "knetfile.h"
diff --git a/src/libs_3rdparty/sqlite3/CMakeLists.txt b/src/libs_3rdparty/sqlite3/CMakeLists.txt
new file mode 100644
index 0000000..ba288b6
--- /dev/null
+++ b/src/libs_3rdparty/sqlite3/CMakeLists.txt
@@ -0,0 +1,18 @@
+cmake_minimum_required(VERSION 3.4)
+project(ugenedb)
+
+include_directories(src)
+
+file(GLOB_RECURSE SRCS src/*.c)
+file(GLOB_RECURSE HDRS src/*.h)
+
+add_definitions(
+        -DSQLITE_ENABLE_COLUMN_METADATA
+        -DSQLITE_ENABLE_RTREE
+        -DSQLITE_OMIT_LOAD_EXTENSION
+        -DTHREADSAFE
+)
+
+add_library(ugenedb SHARED ${HDRS} ${SRCS})
+
+target_link_libraries(ugenedb)
diff --git a/src/libs_3rdparty/sqlite3/sqlite3.pri b/src/libs_3rdparty/sqlite3/sqlite3.pri
index 8719e9b..eb7183b 100644
--- a/src/libs_3rdparty/sqlite3/sqlite3.pri
+++ b/src/libs_3rdparty/sqlite3/sqlite3.pri
@@ -9,6 +9,7 @@ CONFIG +=thread debug_and_release warn_off
 INCLUDEPATH += src
 DEFINES+=SQLITE_ENABLE_COLUMN_METADATA
 DEFINES+=SQLITE_ENABLE_RTREE
+unix:DEFINES+=SQLITE_OMIT_LOAD_EXTENSION
 DEFINES+=THREADSAFE
 LIBS += -L../../_release
 
@@ -34,7 +35,7 @@ LIBS += -L../../_release
 
 
 win32 {
-    DEF_FILE=src/sqlite3.def
+    DEF_FILE=$$PWD/src/sqlite3.def
 
     QMAKE_CXXFLAGS_WARN_ON = -W3
     QMAKE_CFLAGS_WARN_ON = -W3
diff --git a/src/plugins/CoreTests/CMakeLists.txt b/src/plugins/CoreTests/CMakeLists.txt
new file mode 100644
index 0000000..aecdd7e
--- /dev/null
+++ b/src/plugins/CoreTests/CMakeLists.txt
@@ -0,0 +1,5 @@
+set(UGENE_PLUGIN_NAME CoreTests)
+
+set(CMAKE_AUTOMOC_MOC_OPTIONS -nn) # do not display notes.
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/CoreTests/CoreTests.pro b/src/plugins/CoreTests/CoreTests.pro
index eeafc26..bda3747 100644
--- a/src/plugins/CoreTests/CoreTests.pro
+++ b/src/plugins/CoreTests/CoreTests.pro
@@ -19,7 +19,6 @@ HEADERS += src/AnnotationTableObjectTest.h \
            src/LoadRemoteDocumentTests.h \
            src/PWMatrixTests.h \
            src/PhyTreeObjectTests.h \
-           src/PingRemoteServiceTests.h \
            src/SMatrixTests.h \
            src/SecStructPredictTests.h \
            src/SequenceWalkerTests.h \
@@ -44,7 +43,6 @@ SOURCES += src/AnnotationTableObjectTest.cpp \
            src/LoadRemoteDocumentTests.cpp \
            src/PWMatrixTests.cpp \
            src/PhyTreeObjectTests.cpp \
-           src/PingRemoteServiceTests.cpp \
            src/SMatrixTests.cpp \
            src/SecStructPredictTests.cpp \
            src/SequenceWalkerTests.cpp \
diff --git a/src/plugins/CoreTests/src/AnnotationTableObjectTest.cpp b/src/plugins/CoreTests/src/AnnotationTableObjectTest.cpp
index 5acbcc0..ae1ed2f 100644
--- a/src/plugins/CoreTests/src/AnnotationTableObjectTest.cpp
+++ b/src/plugins/CoreTests/src/AnnotationTableObjectTest.cpp
@@ -354,7 +354,7 @@ Task::ReportResult GTest_CheckAnnotationLocation::report() {
     int n = location.size();
     const QVector<U2Region>& alocation = annotation->location->regions;
     if (n!=alocation.size()) {
-        stateInfo.setError(QString("number of regions not matched: %1, expected %2").arg(n).arg(alocation.size()));
+        stateInfo.setError(QString("number of regions not matched: expected: %1, actual %2").arg(n).arg(alocation.size()));
         QString msg = "Check location regions:\n";
         foreach(const U2Region& r, alocation) {
             msg+=QString::number(r.startPos+1)+".." + QString::number(r.endPos())+",\n";
diff --git a/src/plugins/CoreTests/src/CoreTests.cpp b/src/plugins/CoreTests/src/CoreTests.cpp
index 72efcf8..d2f7ed0 100644
--- a/src/plugins/CoreTests/src/CoreTests.cpp
+++ b/src/plugins/CoreTests/src/CoreTests.cpp
@@ -45,7 +45,6 @@
 #include "LoadRemoteDocumentTests.h"
 #include "PWMatrixTests.h"
 #include "PhyTreeObjectTests.h"
-#include "PingRemoteServiceTests.h"
 #include "SMatrixTests.h"
 #include "SecStructPredictTests.h"
 #include "SequenceWalkerTests.h"
@@ -125,8 +124,6 @@ void CoreTests::registerFactories() {
     // DnaAssembly tests
     registerFactory<DnaAssemblyTests>(xmlTestFormat);
 
-    registerFactory<PingRemoteServiceTests>(xmlTestFormat);
-
     registerFactory<CreateSubalignimentTests>(xmlTestFormat);
 
     registerFactory<LoadRemoteDocumentTests>(xmlTestFormat);
diff --git a/src/plugins/CoreTests/src/PingRemoteServiceTests.cpp b/src/plugins/CoreTests/src/PingRemoteServiceTests.cpp
deleted file mode 100644
index 86cd234..0000000
--- a/src/plugins/CoreTests/src/PingRemoteServiceTests.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * 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 <U2Remote/RemoteMachine.h>
-#include <U2Remote/SerializeUtils.h>
-
-#include "PingRemoteServiceTests.h"
-
-namespace U2 {
-
-#define MACHINE_CFG_PATH "cfg-path"
-
-void GTest_PingRemoteServiceTask::init(XMLTestFormat*, const QDomElement& el) {
-    pingTask = NULL;
-    machineCfgPath = el.attribute(MACHINE_CFG_PATH);
-    if (machineCfgPath.isEmpty()) {
-        failMissingValue(MACHINE_CFG_PATH);
-        return;
-    }
-    machineCfgPath.prepend(env->getVar("COMMON_DATA_DIR")+"/");
-}
-
-void GTest_PingRemoteServiceTask::prepare()
-{
-    RemoteMachineSettingsPtr rMachine = SerializeUtils::deserializeRemoteMachineSettingsFromFile(machineCfgPath);
-    if(rMachine == NULL) {
-        setError(tr("Can not parse remote server settings file %1").arg(machineCfgPath));
-        return;
-    }
-    pingTask = new RetrieveRemoteMachineInfoTask(rMachine);
-    addSubTask(pingTask);
-}
-
-Task::ReportResult GTest_PingRemoteServiceTask::report() {
-    if (hasError() || isCanceled()) {
-        return ReportResult_Finished;
-    }
-
-    if (pingTask->hasError()) {
-        setError(pingTask->getError());
-    }
-
-    return ReportResult_Finished;
-}
-
-void GTest_PingRemoteServiceTask::cleanup()
-{
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////
-
-QList<XMLTestFactory*> PingRemoteServiceTests::createTestFactories()
-{
-    QList<XMLTestFactory*> res;
-    res.append(GTest_PingRemoteServiceTask::createFactory());
-
-    return res;
-}
-
-} // U2
diff --git a/src/plugins/CoreTests/src/PingRemoteServiceTests.h b/src/plugins/CoreTests/src/PingRemoteServiceTests.h
deleted file mode 100644
index 8273eee..0000000
--- a/src/plugins/CoreTests/src/PingRemoteServiceTests.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 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_PING_REMOTE_SERVICE_TESTS_H_
-#define _U2_PING_REMOTE_SERVICE_TESTS_H_
-
-#include <U2Test/XMLTestUtils.h>
-#include <U2Remote/RemoteMachineTasks.h>
-
-namespace U2 {
-
-class GTest_PingRemoteServiceTask : public GTest {
-    Q_OBJECT
-public:
-    SIMPLE_XML_TEST_BODY_WITH_FACTORY(GTest_PingRemoteServiceTask, "ping-remote-service");
-    void prepare();
-    Task::ReportResult report();
-    void cleanup();
-private:
-    QString machineCfgPath;
-    RetrieveRemoteMachineInfoTask *pingTask;
-};
-
-
-class PingRemoteServiceTests {
-public:
-    static QList<XMLTestFactory*> createTestFactories();
-};
-
-} //namespace
-#endif //_U2_PING_REMOTE_SERVICE_TESTS_H_
diff --git a/src/plugins/GUITestBase/GUITestBase.pri b/src/plugins/GUITestBase/GUITestBase.pri
index 715f264..dd6fa1f 100644
--- a/src/plugins/GUITestBase/GUITestBase.pri
+++ b/src/plugins/GUITestBase/GUITestBase.pri
@@ -3,24 +3,20 @@
 PLUGIN_ID=GUITestBase
 PLUGIN_NAME=GUI Test Base
 PLUGIN_VENDOR=Unipro
+include( ../../ugene_plugin_common.pri )
 
 QT += testlib
 greaterThan(QT_MAJOR_VERSION, 4): QT += webkitwidgets
 
 INCLUDEPATH += ../../corelibs/U2View/_tmp/ ../../libs_3rdparty/QSpec/src
-LIBS +=-L../../_release -L../../libs_3rdparty/humimit/ -lhumimit
+LIBS +=-L../../_release -lhumimit
 
 !debug_and_release|build_pass {
 
     CONFIG(debug, debug|release) {
-        DESTDIR=../../_debug
         LIBS -= -L../../_release -lhumimit
         LIBS += -L../../_debug -lhumimitd
     }
-
-    CONFIG(release, debug|release) {
-        DESTDIR=../../_release
-    }
 }
 
 unix {
@@ -41,4 +37,4 @@ macx {
 }
 
 
-include( ../../ugene_plugin_common.pri )
+
diff --git a/src/plugins/GUITestBase/GUITestBase.pro b/src/plugins/GUITestBase/GUITestBase.pro
index e60e287..94afb77 100644
--- a/src/plugins/GUITestBase/GUITestBase.pro
+++ b/src/plugins/GUITestBase/GUITestBase.pro
@@ -69,6 +69,7 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.h \
             src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.h \
             src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.h \
+            src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.h \
             src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.h \
             src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h \
             src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h \
@@ -352,6 +353,7 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.cpp \
             src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.cpp \
             src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.cpp \
+            src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.cpp \
             src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.cpp \
             src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.cpp \
             src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.cpp \
diff --git a/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp
index 42d4188..7ed4e41 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp
@@ -33,6 +33,7 @@
 #include "GTUtilsTaskTreeView.h"
 #include <drivers/GTKeyboardDriver.h>
 #include "utils/GTKeyboardUtils.h"
+#include <utils/GTThread.h>
 #include <drivers/GTMouseDriver.h>
 #include <primitives/GTTreeWidget.h>
 #include <primitives/GTWidget.h>
@@ -112,10 +113,11 @@ void GTUtilsAnnotHighlightingTreeView::click(HI::GUITestOpStatus &os, const QStr
     QTreeWidgetItem* item = findItem(os, itemName);
     QTreeWidget* tree = getTreeWidget(os);
     tree->scrollToItem(item);
+    GTThread::waitForMainThread();
 
     QPoint p = getItemCenter(os, itemName);
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
 }
 
 #define GT_METHOD_NAME "getItemCenter"
diff --git a/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp
index 86ff21f..6d9e064 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp
@@ -65,7 +65,7 @@ QTreeWidget* GTUtilsAnnotationsTreeView::getTreeWidget(HI::GUITestOpStatus &os)
 void GTUtilsAnnotationsTreeView::addAnnotationsTableFromProject(HI::GUITestOpStatus &os, const QString &tableName) {
     GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
     GTUtilsProjectTreeView::dragAndDrop(os, GTUtilsProjectTreeView::findIndex(os, tableName), GTUtilsAnnotationsTreeView::getTreeWidget(os));
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
@@ -400,8 +400,8 @@ QPoint GTUtilsAnnotationsTreeView::getItemCenter(HI::GUITestOpStatus &os, const
 void GTUtilsAnnotationsTreeView::createQualifier(HI::GUITestOpStatus &os, const QString &qualName, const QString &qualValue, const QString &parentName) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ADD" << "add_qualifier_action"));
     GTUtilsDialog::waitForDialog(os, new EditQualifierFiller(os, qualName, qualValue));
-    GTMouseDriver::moveTo(os, getItemCenter(os, parentName));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(getItemCenter(os, parentName));
+    GTMouseDriver::click(Qt::RightButton);
 }
 #undef GT_METHOD_NAME
 
@@ -410,28 +410,21 @@ void GTUtilsAnnotationsTreeView::selectItems(HI::GUITestOpStatus &os, const QStr
     GT_CHECK_RESULT(items.size() != 0, "List of items to select is empty", );
     // remove previous selection
     QPoint p = getItemCenter(os, items.first());
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os);
-#ifdef Q_OS_MAC
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["cmd"]);
-#else
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
-#endif
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+
     foreach (const QString& item, items) {
         QPoint p = getItemCenter(os, item);
-        GTMouseDriver::moveTo(os, p);
+        GTMouseDriver::moveTo(p);
 
         QTreeWidgetItem* treeItem = findItem(os, item);
         GT_CHECK_RESULT(treeItem != NULL, "Tree item is NULL", );
         if (!treeItem->isSelected()) {
-            GTMouseDriver::click(os);
+            GTMouseDriver::click();
         }
     }
-#ifdef Q_OS_MAC
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["cmd"]);
-#else
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
-#endif
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
     GTGlobals::sleep();
 }
 #undef GT_METHOD_NAME
@@ -442,28 +435,20 @@ void GTUtilsAnnotationsTreeView::selectItems(HI::GUITestOpStatus &os, const QLis
 
     // remove previous selection
     QPoint p = GTTreeWidget::getItemCenter(os, items.first());
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os);
-#ifdef Q_OS_MAC
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["cmd"]);
-#else
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
-#endif
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
 
     foreach (QTreeWidgetItem *item, items) {
         const QPoint p = GTTreeWidget::getItemCenter(os, item);
-        GTMouseDriver::moveTo(os, p);
+        GTMouseDriver::moveTo(p);
 
         GT_CHECK_RESULT(item != NULL, "Tree item is NULL", );
         if (!item->isSelected()) {
-            GTMouseDriver::click(os);
+            GTMouseDriver::click();
         }
     }
-#ifdef Q_OS_MAC
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["cmd"]);
-#else
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
-#endif
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
 }
 #undef GT_METHOD_NAME
 
@@ -474,7 +459,7 @@ void GTUtilsAnnotationsTreeView::createAnnotation(HI::GUITestOpStatus &os, const
     GTWidget::click(os, annotationsTreeView);
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, createNewTable, groupName, annotationName, location, saveTo));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick('n', Qt::ControlModifier);
 }
 #undef GT_METHOD_NAME
 
@@ -488,7 +473,7 @@ void GTUtilsAnnotationsTreeView::deleteItem(HI::GUITestOpStatus &os, const QStri
 void GTUtilsAnnotationsTreeView::deleteItem(HI::GUITestOpStatus &os, QTreeWidgetItem *item) {
     GT_CHECK(item != NULL, "Item is NULL");
     selectItems(os, QList<QTreeWidgetItem *>() << item);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
     GTGlobals::sleep(100);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
@@ -496,15 +481,15 @@ void GTUtilsAnnotationsTreeView::deleteItem(HI::GUITestOpStatus &os, QTreeWidget
 
 #define GT_METHOD_NAME "callContextMenuOnItem"
 void GTUtilsAnnotationsTreeView::callContextMenuOnItem(HI::GUITestOpStatus &os, QTreeWidgetItem *item) {
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click(Qt::RightButton);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "callContextMenuOnItem"
 void GTUtilsAnnotationsTreeView::callContextMenuOnItem(HI::GUITestOpStatus &os, const QString &itemName) {
-    GTMouseDriver::moveTo(os, getItemCenter(os, itemName));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(getItemCenter(os, itemName));
+    GTMouseDriver::click(Qt::RightButton);
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp
index 9a86358..766a21a 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp
@@ -20,6 +20,9 @@
  */
 
 #include <QtCore/QSharedPointer>
+#include <QApplication>
+#include <QLabel>
+#include <QScrollBar>
 
 #include <QtCore/qglobal.h>
 #if (QT_VERSION < 0x050000) //Qt 5
@@ -39,9 +42,11 @@
 #include "GTUtilsProjectTreeView.h"
 #include "GTGlobals.h"
 #include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTLineEdit.h>
 #include <primitives/GTToolbar.h>
 #include <primitives/GTWidget.h>
 #include "primitives/PopupChooser.h"
+#include <utils/GTThread.h>
 
 namespace U2 {
 using namespace HI;
@@ -51,10 +56,16 @@ using namespace HI;
 #define GT_METHOD_NAME "getView"
 AssemblyBrowserUi *GTUtilsAssemblyBrowser::getView(HI::GUITestOpStatus& os, const QString &viewTitle) {
     Q_UNUSED(os);
-
-    const QString objectName = "assembly_browser_" + viewTitle;
-    AssemblyBrowserUi* view = qobject_cast<AssemblyBrowserUi*>(GTWidget::findWidget(os, objectName));
-    GT_CHECK_RESULT(NULL != view, "Assembly browser wasn't found", NULL);
+    AssemblyBrowserUi* view;
+
+    if(viewTitle.isEmpty()){
+        view = GTUtilsMdi::activeWindow(os)->findChild<AssemblyBrowserUi*>();
+        GT_CHECK_RESULT(NULL != view, "Active windows is not assembly browser", NULL);
+    }else {
+        const QString objectName = "assembly_browser_" + viewTitle;
+        view = qobject_cast<AssemblyBrowserUi*>(GTWidget::findWidget(os, objectName));
+        GT_CHECK_RESULT(NULL != view, "Assembly browser wasn't found", NULL);
+    }
 
     return view;
 }
@@ -163,8 +174,20 @@ bool GTUtilsAssemblyBrowser::isWelcomeScreenVisible(HI::GUITestOpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "zoomIn"
-void GTUtilsAssemblyBrowser::zoomIn(HI::GUITestOpStatus &os) {
-    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Zoom in");
+void GTUtilsAssemblyBrowser::zoomIn(HI::GUITestOpStatus &os, Method method) {
+    switch (method) {
+    case Button:
+        GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Zoom in");
+        break;
+    case Hotkey:
+        if(!GTWidget::findWidget(os, "assembly_reads_area")->hasFocus()){
+            GTWidget::click(os, GTWidget::findWidget(os, "assembly_reads_area"));
+        }
+        GTKeyboardDriver::keyClick('+');
+        break;
+    default:
+        break;
+    }
 }
 #undef GT_METHOD_NAME
 
@@ -200,19 +223,34 @@ void GTUtilsAssemblyBrowser::zoomToMin(HI::GUITestOpStatus &os) {
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "zoomToReads"
+void GTUtilsAssemblyBrowser::zoomToReads(GUITestOpStatus &os){
+    QLabel* coveredRegionsLabel = GTWidget::findExactWidget<QLabel*>(os, "CoveredRegionsLabel");
+    emit coveredRegionsLabel->linkActivated("zoom");
+    GTGlobals::sleep(1000);
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "goToPosition"
-void GTUtilsAssemblyBrowser::goToPosition(HI::GUITestOpStatus &os, qint64 position) {
+void GTUtilsAssemblyBrowser::goToPosition(HI::GUITestOpStatus &os, qint64 position, Method method) {
     Q_UNUSED(os);
 
     QToolBar* toolbar = GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI);
     GT_CHECK(NULL != toolbar, "Can't find the toolbar");
 
-    QWidget* positionLineEdit = GTWidget::findWidget(os, "go_to_pos_line_edit", toolbar);
-    GT_CHECK(NULL != positionLineEdit, "Can't find the position line edit");
+    QLineEdit* positionLineEdit = GTWidget::findExactWidget<QLineEdit*>(os, "go_to_pos_line_edit", toolbar);
+    GTLineEdit::setText(os, positionLineEdit,QString::number(position));
 
-    GTWidget::click(os, positionLineEdit);
-    GTKeyboardDriver::keySequence(os, QString::number(position));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    switch (method) {
+    case Button:
+        GTWidget::click(os, GTWidget::findWidget(os, "Go!"));
+        break;
+    default:
+        GTKeyboardDriver::keyClick(Qt::Key_Enter);
+        break;
+    }
+    GTGlobals::sleep(1000);
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
@@ -235,6 +273,7 @@ void GTUtilsAssemblyBrowser::callContextMenu(HI::GUITestOpStatus &os, GTUtilsAss
     }
 
     GTWidget::click(os, GTWidget::findWidget(os, widgetName), Qt::RightButton);
+    GTGlobals::sleep(300);
 }
 #undef GT_METHOD_NAME
 
@@ -261,6 +300,23 @@ void GTUtilsAssemblyBrowser::callExportCoverageDialog(HI::GUITestOpStatus &os, A
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "getScrollBar"
+QScrollBar* GTUtilsAssemblyBrowser::getScrollBar(GUITestOpStatus &os, Qt::Orientation orientation){
+    AssemblyBrowserUi* ui = GTUtilsMdi::activeWindow(os)->findChild<AssemblyBrowserUi*>();
+    GT_CHECK_RESULT(ui != NULL, "Assembly browser not found", NULL);
+
+    QList<QScrollBar*> scrollBars = ui->findChildren<QScrollBar*>();
+    foreach (QScrollBar* bar, scrollBars) {
+        if(bar->orientation() == orientation){
+            return bar;
+        }
+    }
+
+    GT_CHECK_RESULT(false, QString("Scrollbar with orientation %1 not found").arg(orientation), NULL);
+}
+#undef GT_METHOD_NAME
+
+
 #undef GT_CLASS_NAME
 
 }   // namespace U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h
index fc0a49e..8ff545d 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h
+++ b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h
@@ -39,7 +39,12 @@ public:
         Reads
     };
 
-    static AssemblyBrowserUi *getView(HI::GUITestOpStatus &os, const QString& viewTitle);
+    enum Method {
+        Button,
+        Hotkey
+    };
+
+    static AssemblyBrowserUi *getView(HI::GUITestOpStatus &os, const QString& viewTitle = "");
 
     static void addRefFromProject(HI::GUITestOpStatus &os, QString docName, QModelIndex parent = QModelIndex());
 
@@ -52,14 +57,17 @@ public:
 
     static bool isWelcomeScreenVisible(HI::GUITestOpStatus &os);
 
-    static void zoomIn(HI::GUITestOpStatus& os);
+    static void zoomIn(HI::GUITestOpStatus& os, Method method = Button);
     static void zoomToMax(HI::GUITestOpStatus& os);
     static void zoomToMin(HI::GUITestOpStatus& os);
+    static void zoomToReads(HI::GUITestOpStatus& os);
 
-    static void goToPosition(HI::GUITestOpStatus &os, qint64 position);
+    static void goToPosition(HI::GUITestOpStatus &os, qint64 position, Method method = Hotkey);
 
     static void callContextMenu(HI::GUITestOpStatus &os, Area area = Consensus);
     static void callExportCoverageDialog(HI::GUITestOpStatus &os, Area area = Consensus);
+
+    static QScrollBar* getScrollBar(HI::GUITestOpStatus &os, Qt::Orientation orientation);
 };
 
 }   // namespace U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp
index b47f154..764d0fb 100644
--- a/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp
@@ -117,13 +117,13 @@ QString GTUtilsBookmarksTreeView::getSelectedItem(HI::GUITestOpStatus &os)
 void GTUtilsBookmarksTreeView::addBookmark(HI::GUITestOpStatus &os, const QString &viewName, const QString &bookmarkName) {
     Q_UNUSED(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK));
-    GTMouseDriver::moveTo(os, getItemCenter(os, viewName));
-    GTMouseDriver::click(os, Qt::RightButton);
+    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);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Enter);
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsDocument.cpp b/src/plugins/GUITestBase/src/GTUtilsDocument.cpp
index c713432..10101b3 100644
--- a/src/plugins/GUITestBase/src/GTUtilsDocument.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsDocument.cpp
@@ -95,18 +95,18 @@ void GTUtilsDocument::removeDocument(HI::GUITestOpStatus &os, const QString &doc
     {
         Runnable *popupChooser = new PopupChooser(os, QStringList() << ACTION_PROJECT__REMOVE_SELECTED, method);
         GTUtilsDialog::waitForDialog(os, popupChooser);
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
 
-        GTMouseDriver::click(os, Qt::RightButton);
+        GTMouseDriver::click(Qt::RightButton);
         break;
     }
 
     default:
     case GTGlobals::UseKey:
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
+        GTMouseDriver::click();
 
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick(Qt::Key_Delete);
         break;
     }
 
@@ -143,8 +143,8 @@ void GTUtilsDocument::saveDocument(HI::GUITestOpStatus &os, const QString &docum
     Runnable *popupChooser = new PopupChooser(os, QStringList() << ACTION_PROJECT__SAVE_DOCUMENT, GTGlobals::UseMouse);
 
     GTUtilsDialog::waitForDialog(os, popupChooser);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(500);
 }
@@ -162,8 +162,8 @@ void GTUtilsDocument::unloadDocument(HI::GUITestOpStatus &os, const QString &doc
     }
 
     GTUtilsDialog::waitForDialog(os, popupChooser);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(500);
 }
@@ -173,8 +173,8 @@ void GTUtilsDocument::unloadDocument(HI::GUITestOpStatus &os, const QString &doc
 void GTUtilsDocument::loadDocument(HI::GUITestOpStatus &os, const QString &documentName) {
     GT_CHECK_RESULT( !isDocumentLoaded(os, documentName), "Document is loaded", );
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, documentName) + QPoint(1,0));//dirty hack
+    GTMouseDriver::doubleClick();
 
     GTGlobals::sleep(500);
 }
@@ -182,14 +182,14 @@ void GTUtilsDocument::loadDocument(HI::GUITestOpStatus &os, const QString &docum
 
 #define GT_METHOD_NAME "lockDocument"
 void GTUtilsDocument::lockDocument(HI::GUITestOpStatus &os, const QString &documentName) {
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Lock document for editing"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Lock document for editing"));
     GTUtilsProjectTreeView::click(os, documentName, Qt::RightButton);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "unlockDocument"
 void GTUtilsDocument::unlockDocument(HI::GUITestOpStatus &os, const QString &documentName) {
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Unlock document for editing"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Unlock document for editing"));
     GTUtilsProjectTreeView::click(os, documentName, Qt::RightButton);
 }
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp b/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp
index bb8887a..65e677c 100644
--- a/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp
@@ -39,10 +39,10 @@ void GTUtilsEscClicker::commonScenario( )
     if ( mouse ) {
         QPoint p = GTMouseDriver::getMousePosition( );
         p.setX( p.x( ) - 50 );
-        GTMouseDriver::moveTo( os, p );
-        GTMouseDriver::click( os );
+        GTMouseDriver::moveTo( p );
+        GTMouseDriver::click();
     } else {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Escape);
     }
 }
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsMdi.cpp b/src/plugins/GUITestBase/src/GTUtilsMdi.cpp
index d70e62e..20cc4bc 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMdi.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsMdi.cpp
@@ -69,8 +69,8 @@ void GTUtilsMdi::click(HI::GUITestOpStatus &os, GTGlobals::WindowAction action)
         int left = mdiWindow->rect().left();
         int top = mdiWindow->rect().top();
         QPoint p(left + 15,top - 10);
-        GTMouseDriver::moveTo(os, mdiWindow->mapToGlobal(p));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(mdiWindow->mapToGlobal(p));
+        GTMouseDriver::click();
         break;
     }
     default:
@@ -162,10 +162,10 @@ void GTUtilsMdi::closeAllWindows(HI::GUITestOpStatus &os) {
         GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new MessageBoxDialogFiller(os, QMessageBox::Discard));
 
         const QPoint closeButtonPos = GTWidget::getWidgetGlobalTopLeftPoint(os, mdiWindow) + QPoint(10, 5);
-        GTMouseDriver::moveTo(os, closeButtonPos);
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(closeButtonPos);
+        GTMouseDriver::click();
         GTGlobals::sleep(100);
-        GTThread::waitForMainThread(os);
+        GTThread::waitForMainThread();
     }
 #endif
 }
@@ -249,10 +249,11 @@ void GTUtilsMdi::selectRandomRegion(HI::GUITestOpStatus &os, const QString& wind
     GT_CHECK(w != NULL, "MDI window not found");
     const QRect r = w->rect();
     QPoint p = QPoint((r.topLeft().x() + r.bottomLeft().x())/2 + 5, r.center().y()/2);
-    GTMouseDriver::moveTo(os, w->mapToGlobal(p));
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, w->mapToGlobal(r.center()));
-    GTMouseDriver::release(os);
+    GTMouseDriver::moveTo(w->mapToGlobal(p));
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(w->mapToGlobal(r.center()));
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp b/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp
index 253512e..5fb7b27 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp
@@ -31,6 +31,7 @@
 #include <drivers/GTMouseDriver.h>
 #include <primitives/GTToolbar.h>
 #include <primitives/PopupChooser.h>
+#include <utils/GTThread.h>
 
 #include "GTUtilsMdi.h"
 #include "GTUtilsMsaEditor.h"
@@ -132,7 +133,7 @@ QRect GTUtilsMsaEditor::getSequenceNameRect(HI::GUITestOpStatus &os, const QStri
     GT_CHECK_RESULT(NULL != nameList, "MSAEditorNameList not found", QRect());
 
     const int rowHeight = GTUtilsMSAEditorSequenceArea::getRowHeight(os);
-    const QStringList names = GTUtilsMSAEditorSequenceArea::getVisibaleNames(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());
 
@@ -163,25 +164,26 @@ void GTUtilsMsaEditor::replaceSequence(HI::GUITestOpStatus &os, const QString &s
     const QPoint dragFrom = getSequenceNameRect(os, sequenceToReplace).center();
     const QPoint dragTo = getSequenceNameRect(os, targetSequenceName).center();
 
-    GTMouseDriver::moveTo(os, dragFrom);
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, dragTo);
-    GTMouseDriver::release(os);
+    GTMouseDriver::moveTo(dragFrom);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(dragTo);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "removeColumn"
 void GTUtilsMsaEditor::removeColumn(HI::GUITestOpStatus &os, int column) {
     clickColumn(os, column);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    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) {
     const QRect sequenceNameRect = getSequenceNameRect(os, sequenceName);
-    GTMouseDriver::moveTo(os, sequenceNameRect.center());
-    GTMouseDriver::click(os, mouseButton);
+    GTMouseDriver::moveTo(sequenceNameRect.center());
+    GTMouseDriver::click(mouseButton);
 }
 #undef GT_METHOD_NAME
 
@@ -213,7 +215,7 @@ void GTUtilsMsaEditor::toggleCollapsingMode(HI::GUITestOpStatus &os) {
 bool GTUtilsMsaEditor::isSequenceCollapsed(HI::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::getVisibaleNames(os);
+    QStringList visiablenames = GTUtilsMSAEditorSequenceArea::getVisibleNames(os);
 
     return !visiablenames.contains(seqName);
 }
@@ -230,8 +232,8 @@ void GTUtilsMsaEditor::toggleCollapsingGroup(HI::GUITestOpStatus &os, const QStr
 #else
     magicExpandButtonOffset = QPoint(15, 5);
 #endif
-    GTMouseDriver::moveTo(os, sequenceNameRect.topLeft() + magicExpandButtonOffset);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(sequenceNameRect.topLeft() + magicExpandButtonOffset);
+    GTMouseDriver::click();
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp
index 1f3e62f..cb22454 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp
@@ -20,6 +20,8 @@
  */
 
 #include <QMainWindow>
+#include <QStyle>
+#include <QStyleOptionSlider>
 
 #include <U2Core/AppContext.h>
 
@@ -63,7 +65,7 @@ void GTUtilsMSAEditorSequenceArea::callContextMenu(HI::GUITestOpStatus &os, cons
         GTWidget::click(os, getSequenceArea(os), Qt::RightButton);
     } else {
         moveTo(os, innerCoords);
-        GTMouseDriver::click(os, Qt::RightButton);
+        GTMouseDriver::click(Qt::RightButton);
     }
 }
 #undef GT_METHOD_NAME
@@ -73,7 +75,7 @@ void GTUtilsMSAEditorSequenceArea::moveTo(HI::GUITestOpStatus &os, const QPoint
 {
     QPoint convP = convertCoordinates(os,p);
 
-    GTMouseDriver::moveTo(os, convP);
+    GTMouseDriver::moveTo(convP);
 }
 #undef GT_METHOD_NAME
 
@@ -110,16 +112,16 @@ void GTUtilsMSAEditorSequenceArea::selectArea(HI::GUITestOpStatus &os, QPoint p1
     p2.ry() = p2.y()==-1 ? msaEditArea->getNumVisibleSequences(true)-1 : p2.y();
 
     moveTo(os, p1);
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os,convertCoordinates(os,p2));
-    GTMouseDriver::release(os);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(convertCoordinates(os,p2));
+    GTMouseDriver::release();
     GTGlobals::sleep(1000);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "cancelSelection"
 void GTUtilsMSAEditorSequenceArea::cancelSelection(HI::GUITestOpStatus &os) {
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
 }
 #undef GT_METHOD_NAME
 
@@ -146,8 +148,8 @@ void GTUtilsMSAEditorSequenceArea::scrollToPosition(HI::GUITestOpStatus &os, con
         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(os, vBar->mapToGlobal(bottomEdge) - QPoint(0, 1));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(vBar->mapToGlobal(bottomEdge) - QPoint(0, 1));
+        GTMouseDriver::click();
     }
 
     // scroll right
@@ -161,8 +163,8 @@ void GTUtilsMSAEditorSequenceArea::scrollToPosition(HI::GUITestOpStatus &os, con
         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(os, hBar->mapToGlobal(rightEdge) - QPoint(1, 0));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(hBar->mapToGlobal(rightEdge) - QPoint(1, 0));
+        GTMouseDriver::click();
     }
 
     SAFE_POINT(msaSeqArea->isVisible(position, false), "The position is still invisible after scrolling", );
@@ -189,8 +191,8 @@ void GTUtilsMSAEditorSequenceArea::scrollToBottom(HI::GUITestOpStatus &os) {
         const QRect sliderSpaceRect = vBar->style()->subControlRect(QStyle::CC_ScrollBar, &vScrollBarOptions, QStyle::SC_ScrollBarGroove, vBar);
         const QPoint bottomEdge(sliderSpaceRect.width() / 2 + 10, sliderSpaceRect.y() + sliderSpaceRect.height());
 
-        GTMouseDriver::moveTo(os, vBar->mapToGlobal(bottomEdge) - QPoint(0, 1));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(vBar->mapToGlobal(bottomEdge) - QPoint(0, 1));
+        GTMouseDriver::click();
     }
 }
 #undef GT_METHOD_NAME
@@ -245,8 +247,8 @@ QStringList GTUtilsMSAEditorSequenceArea::getNameList(HI::GUITestOpStatus &os) {
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME "getVisibaleNames"
-QStringList GTUtilsMSAEditorSequenceArea::getVisibaleNames(HI::GUITestOpStatus &os){
+#define GT_METHOD_NAME "getVisibleNames"
+QStringList GTUtilsMSAEditorSequenceArea::getVisibleNames(HI::GUITestOpStatus &os){
     Q_UNUSED(os);
     QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
     MSAEditor* editor = mw->findChild<MSAEditor*>();
@@ -273,8 +275,8 @@ QStringList GTUtilsMSAEditorSequenceArea::getVisibaleNames(HI::GUITestOpStatus &
 #define GT_METHOD_NAME "removeSequence"
 void GTUtilsMSAEditorSequenceArea::removeSequence(HI::GUITestOpStatus &os, const QString &sequenceName) {
     selectSequence(os, sequenceName);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
-    GTThread::waitForMainThread(os);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
@@ -295,20 +297,20 @@ void GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(HI::GUITestOpStatus &os
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     GT_CHECK(msaEditArea != NULL, "MsaEditorSequenceArea not found");
 
-    int rowNum = getVisibaleNames(os).indexOf(seqName);
+    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 globalCoord = nameList->mapToGlobal(localCoord);
-    GTMouseDriver::moveTo(os, globalCoord);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(globalCoord);
+    GTMouseDriver::click();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isCollapsed"
 bool GTUtilsMSAEditorSequenceArea::isCollapsed(HI::GUITestOpStatus &os, QString seqName){
     QStringList names = getNameList(os);
-    QStringList visiable = getVisibaleNames(os);
+    QStringList visiable = getVisibleNames(os);
     GT_CHECK_RESULT(names.contains(seqName), "sequence " + seqName + " not found", false);
     return !visiable.contains(seqName);
 }
@@ -317,7 +319,7 @@ bool GTUtilsMSAEditorSequenceArea::isCollapsed(HI::GUITestOpStatus &os, QString
 #define GT_METHOD_NAME "collapsingMode"
 bool GTUtilsMSAEditorSequenceArea::collapsingMode(HI::GUITestOpStatus &os){
     QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
-    bool nameLists = getVisibaleNames(os)==getNameList(os);
+    bool nameLists = getVisibleNames(os)==getNameList(os);
     if(nameLists && !collapce->isChecked()){
         return false;
     }else if (!nameLists && collapce->isChecked()) {
@@ -408,7 +410,7 @@ void GTUtilsMSAEditorSequenceArea::selectSequence(HI::GUITestOpStatus &os, const
             (GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR(msaEditArea != NULL, "MsaEditorSequenceArea not found");
 
-    QStringList names = getVisibaleNames(os);
+    QStringList names = getVisibleNames(os);
     int row = 0;
     while (names[row] != seqName) {
         row++;
@@ -451,7 +453,7 @@ int GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(HI::GUITestOpStatus &o
 
 #define GT_METHOD_NAME "isSequenceVisible"
 bool GTUtilsMSAEditorSequenceArea::isSequenceVisible(HI::GUITestOpStatus &os, const QString &seqName) {
-    QStringList visiableRowNames = getVisibaleNames(os);
+    QStringList visiableRowNames = getVisibleNames(os);
     return visiableRowNames.contains(seqName);
 }
 #undef GT_METHOD_NAME
@@ -494,8 +496,8 @@ void GTUtilsMSAEditorSequenceArea::selectColumnInConsensus( HI::GUITestOpStatus
     CHECK_SET_ERR( NULL != consArea,"consArea is NULL" );
 
     const int posY = consArea->mapToGlobal( consArea->rect( ).center( ) ).y( );
-    GTMouseDriver::moveTo( os, QPoint( posX, posY ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo( QPoint( posX, posY ) );
+    GTMouseDriver::click();
 }
 #undef GT_METHOD_NAME
 
@@ -511,7 +513,7 @@ bool GTUtilsMSAEditorSequenceArea::hasAminoAlphabet(HI::GUITestOpStatus &os)
 
 #define GT_METHOD_NAME "isSequenceHightighted"
 bool GTUtilsMSAEditorSequenceArea::isSequenceHightighted(HI::GUITestOpStatus &os, const QString &seqName){
-    QStringList names = getVisibaleNames(os);
+    QStringList names = getVisibleNames(os);
     GT_CHECK_RESULT(names.contains(seqName), QString("sequence with name %1 not found").arg(seqName), false);
 
     int row = 0;
@@ -572,12 +574,12 @@ int GTUtilsMSAEditorSequenceArea::getRowHeight(HI::GUITestOpStatus &os){
 
 #define GT_METHOD_NAME "renameSequence"
 void GTUtilsMSAEditorSequenceArea::renameSequence(HI::GUITestOpStatus &os, const QString &seqToRename, const QString &newName){
-    int num = getVisibaleNames(os).indexOf(seqToRename);
+    int num = getVisibleNames(os).indexOf(seqToRename);
     GT_CHECK(num != -1, "sequence not found");
 
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, newName, seqToRename));
     moveTo(os, QPoint(-10,num));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(500);
 }
 #undef GT_METHOD_NAME
@@ -588,7 +590,7 @@ void GTUtilsMSAEditorSequenceArea::createColorScheme(HI::GUITestOpStatus &os, co
     GTUtilsDialog::waitForDialog( os, new PopupChooser( os, QStringList( ) << "Colors"
         << "Custom schemes" << "Create new color scheme" ) );
     GTUtilsDialog::waitForDialog( os, new NewColorSchemeCreator( os, colorSchemeName, al) );
-    GTMouseDriver::click( os, Qt::RightButton );
+    GTMouseDriver::click(Qt::RightButton );
 }
 #undef GT_METHOD_NAME
 
@@ -599,7 +601,7 @@ void GTUtilsMSAEditorSequenceArea::deleteColorScheme(HI::GUITestOpStatus &os, co
         << "Custom schemes" << "Create new color scheme" ) );
     GTUtilsDialog::waitForDialog( os, new NewColorSchemeCreator( os, colorSchemeName, NewColorSchemeCreator::nucl,
                                                                  NewColorSchemeCreator::Delete) );
-    GTMouseDriver::click( os, Qt::RightButton );
+    GTMouseDriver::click(Qt::RightButton );
 }
 #undef GT_METHOD_NAME
 
@@ -607,7 +609,7 @@ void GTUtilsMSAEditorSequenceArea::deleteColorScheme(HI::GUITestOpStatus &os, co
 void GTUtilsMSAEditorSequenceArea::checkSelection(HI::GUITestOpStatus &os, const QPoint &start, const QPoint &end, const QString &expected){
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     selectArea(os, start, end);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString clipboardText = GTClipboard::text(os);
     GT_CHECK(clipboardText == expected, QString("unexpected selection:\n%1").arg(clipboardText));
diff --git a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h
index 63442b2..42953f7 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h
+++ b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h
@@ -42,7 +42,7 @@ public:
 
     // MSAEditorNameList
     static QStringList getNameList(HI::GUITestOpStatus &os);
-    static QStringList getVisibaleNames(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);
diff --git a/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp b/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp
index eb86591..035c298 100644
--- a/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp
@@ -76,6 +76,7 @@ NotificationDialogFiller::NotificationDialogFiller(HI::GUITestOpStatus &os, cons
 
 #define GT_METHOD_NAME "commonScenario"
 void NotificationDialogFiller::commonScenario() {
+    GTGlobals::sleep(1000);
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "active modal widget is invalid");
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp
index 6b2b66f..44c5745 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp
@@ -20,6 +20,7 @@
  */
 
 #include <QComboBox>
+#include <QLabel>
 #include <QLineEdit>
 #include <QPushButton>
 #include <QToolButton>
@@ -67,7 +68,7 @@ const QMap<GTUtilsOptionPanelMsa::Tabs, QString> GTUtilsOptionPanelMsa::innerWid
 #define GT_METHOD_NAME "toggleTab"
 void GTUtilsOptionPanelMsa::toggleTab(HI::GUITestOpStatus &os, GTUtilsOptionPanelMsa::Tabs tab) {
     GTWidget::click(os, GTWidget::findWidget(os, tabsNames[tab]));
-    GTGlobals::sleep(200);
+    GTGlobals::sleep(500);
 }
 #undef GT_METHOD_NAME
 
@@ -113,14 +114,14 @@ void GTUtilsOptionPanelMsa::addReference(HI::GUITestOpStatus &os, QString seqNam
     case Completer:
         QWidget* sequenceLineEdit = GTWidget::findWidget(os, "sequenceLineEdit");
         GTWidget::click(os, sequenceLineEdit);
-        GTKeyboardDriver::keyClick(os, seqName.at(0).toLatin1());
+        GTKeyboardDriver::keyClick(seqName.at(0).toLatin1());
         GTGlobals::sleep(200);
         QTreeWidget* completer = sequenceLineEdit->findChild<QTreeWidget*>();
         GT_CHECK(completer != NULL, "auto completer widget not found");
         GTBaseCompleter::click(os, completer, seqName);
         break;
     }
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
@@ -212,7 +213,7 @@ void GTUtilsOptionPanelMsa::addSeqToPA(HI::GUITestOpStatus &os, QString seqName,
     case Completer:
         QWidget* sequenceLineEdit = getSeqLineEdit(os, number);
         GTWidget::click(os, sequenceLineEdit);
-        GTKeyboardDriver::keyClick(os, seqName.at(0).toLatin1());
+        GTKeyboardDriver::keyClick( seqName.at(0).toLatin1());
         GTGlobals::sleep(200);
         QTreeWidget* completer = sequenceLineEdit->findChild<QTreeWidget*>();
         GT_CHECK(completer != NULL, "auto completer widget not found");
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp b/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp
index 83017a9..6499e52 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp
@@ -20,6 +20,7 @@
  */
 
 #include <QDir>
+#include <QGroupBox>
 #include <QLabel>
 #include <QTextEdit>
 #include <QTreeWidget>
@@ -77,7 +78,7 @@ void GTUtilsOptionPanelSequenceView::enterPattern( HI::GUITestOpStatus &os, QStr
     GTTextEdit::clear(os, patternEdit);
     if(useCopyPaste){
         GTClipboard::setText(os, pattern);
-        GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+        GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     }else{
         GTTextEdit::setText(os, patternEdit, pattern);
     }
@@ -98,7 +99,7 @@ void GTUtilsOptionPanelSequenceView::toggleTab(HI::GUITestOpStatus &os, GTUtilsO
 void GTUtilsOptionPanelSequenceView::openTab(HI::GUITestOpStatus &os, Tabs tab){
     if (!isTabOpened(os, tab)) {
         toggleTab(os, tab);
-        GTThread::waitForMainThread(os);
+        GTThread::waitForMainThread();
     }
 }
 #undef GT_METHOD_NAME
@@ -160,6 +161,7 @@ void GTUtilsOptionPanelSequenceView::clickPrev(HI::GUITestOpStatus &os){
 void GTUtilsOptionPanelSequenceView::clickGetAnnotation(HI::GUITestOpStatus &os){
     QPushButton *getAnnotations = qobject_cast<QPushButton*>(GTWidget::findWidget(os, "getAnnotationsPushButton"));
     GTWidget::click(os, getAnnotations);
+    GTThread::waitForMainThread();
 }
 
 #undef GT_METHOD_NAME
@@ -184,7 +186,7 @@ bool GTUtilsOptionPanelSequenceView::isGetAnnotationsEnabled(HI::GUITestOpStatus
 #define GT_METHOD_NAME "toggleCircularView"
 void GTUtilsOptionPanelSequenceView::toggleCircularView(HI::GUITestOpStatus &os) {
     GTWidget::click(os, GTWidget::findButtonByText(os, "Open Circular View(s)", GTUtilsMdi::activeWindow(os)));
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
@@ -312,7 +314,7 @@ void GTUtilsOptionPanelSequenceView::toggleInputFromFilePattern( HI::GUITestOpSt
     QGroupBox *loadFromFile = qobject_cast<QGroupBox*>(GTWidget::findWidget(os, "loadFromFileGroupBox"));
     GTWidget::click(os, loadFromFile);
     //kinda hack for QGroupBox should be rewriten
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Space);
 }
 
 #undef GT_METHOD_NAME
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp b/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp
index 19bfa55..12d746c 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp
@@ -28,6 +28,7 @@
 #include <primitives/GTTreeWidget.h>
 #include "GTUtilsTaskTreeView.h"
 #include "utils/GTUtilsApp.h"
+#include "utils/GTThread.h"
 #include <U2Core/ProjectModel.h>
 #include <U2Core/U2OpStatus.h>
 #include <U2Gui/MainWindow.h>
@@ -49,15 +50,16 @@ using namespace HI;
 
 #define GT_METHOD_NAME "runFindPatternWithHotKey"
 void GTUtilsOptionsPanel::runFindPatternWithHotKey( const QString& pattern, HI::GUITestOpStatus& os){
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep();
 
     QWidget *w = QApplication::focusWidget();
     GT_CHECK(w && w->objectName()=="textPattern", "Focus is not on FindPattern widget");
 
-    GTKeyboardDriver::keySequence(os, pattern);
+    GTKeyboardDriver::keySequence(pattern);
     GTGlobals::sleep(1000);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Enter);
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsPcr.cpp b/src/plugins/GUITestBase/src/GTUtilsPcr.cpp
index ee9a439..bd4fd48 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPcr.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsPcr.cpp
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <QLabel>
 #include <QTableView>
 
 #include <U2Core/AppContext.h>
@@ -42,7 +43,7 @@ void GTUtilsPcr::setPrimer(HI::GUITestOpStatus &os, U2Strand::Direction directio
 
 void GTUtilsPcr::setMismatches(HI::GUITestOpStatus &os, U2Strand::Direction direction, int mismatches) {
     QSpinBox *mismatchesSpinBox = dynamic_cast<QSpinBox*>(GTWidget::findWidget(os, "mismatchesSpinBox", primerBox(os, direction)));
-    GTSpinBox::setValue(os, mismatchesSpinBox, mismatches);
+    GTSpinBox::setValue(os, mismatchesSpinBox, mismatches, GTGlobals::UseKeyBoard);
 }
 
 void GTUtilsPcr::setPerfectMatch(HI::GUITestOpStatus &os, int number) {
@@ -78,6 +79,13 @@ QPoint GTUtilsPcr::getDetailsPoint(HI::GUITestOpStatus &os) {
     return warning->parentWidget()->mapToGlobal(result);
 }
 
+QString GTUtilsPcr::getPrimerInfo(GUITestOpStatus &os, U2Strand::Direction direction) {
+    QLabel* primerInfo = GTWidget::findExactWidget<QLabel*>(os, "characteristicsLabel",
+                                                            GTWidget::findWidget(os, direction == U2Strand::Direct ? "forwardPrimerBox" : "reversePrimerBox"));
+    CHECK_SET_ERR_RESULT(primerInfo != NULL, "Cannot find primer info label", QString());
+    return primerInfo->text();
+}
+
 QWidget * GTUtilsPcr::primerBox(HI::GUITestOpStatus &os, U2Strand::Direction direction) {
     QString boxName = "forwardPrimerBox";
     if (U2Strand::Complementary == direction) {
diff --git a/src/plugins/GUITestBase/src/GTUtilsPcr.h b/src/plugins/GUITestBase/src/GTUtilsPcr.h
index 8c22b30..b2f086c 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPcr.h
+++ b/src/plugins/GUITestBase/src/GTUtilsPcr.h
@@ -42,6 +42,7 @@ public:
     static QString getResultRegion(HI::GUITestOpStatus &os, int number);
     static QPoint getResultPoint(HI::GUITestOpStatus &os, int number);
     static QPoint getDetailsPoint(HI::GUITestOpStatus &os);
+    static QString getPrimerInfo(HI::GUITestOpStatus &os, U2Strand::Direction direction);
     static QWidget * primerBox(HI::GUITestOpStatus &os, U2Strand::Direction direction);
     static void clearPcrDir(HI::GUITestOpStatus &os);
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp b/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp
index 86b0415..b9281cc 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp
@@ -192,9 +192,9 @@ QPoint GTUtilsPhyTree::getGlobalCoord(HI::GUITestOpStatus& os,QGraphicsItem *ite
 void GTUtilsPhyTree::clickNode(HI::GUITestOpStatus &os, GraphicsButtonItem *node) {
     GT_CHECK(NULL != node, "Node to click is NULL");
     node->ensureVisible();
-    GTThread::waitForMainThread(os);
-    GTMouseDriver::moveTo(os, getGlobalCoord(os, node));
-    GTMouseDriver::click(os);
+    GTThread::waitForMainThread();
+    GTMouseDriver::moveTo(getGlobalCoord(os, node));
+    GTMouseDriver::click();
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp b/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp
index 6261cfb..fff3415 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp
@@ -92,8 +92,8 @@ QPoint GTUtilsPrimerLibrary::getPrimerPoint(HI::GUITestOpStatus &os, int number)
 }
 
 void GTUtilsPrimerLibrary::clickPrimer(HI::GUITestOpStatus &os, int number) {
-    GTMouseDriver::moveTo(os, getPrimerPoint(os, number));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(getPrimerPoint(os, number));
+    GTMouseDriver::click();
 }
 
 void GTUtilsPrimerLibrary::clearLibrary(HI::GUITestOpStatus &os) {
@@ -117,18 +117,12 @@ void GTUtilsPrimerLibrary::addPrimer(HI::GUITestOpStatus &os, const QString &nam
 void GTUtilsPrimerLibrary::selectPrimers(HI::GUITestOpStatus &os, const QList<int> &numbers) {
     const int size = librarySize(os);
 
-#ifdef Q_OS_MAC
-    int key = GTKeyboardDriver::key["cmd"];
-#else
-    int key = GTKeyboardDriver::key["ctrl"];
-#endif
-
-    GTKeyboardDriver::keyPress(os, key);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
     foreach (int number, numbers) {
         GT_CHECK(number < size, "Primer number is out of range");
         GTUtilsPrimerLibrary::clickPrimer(os, number);
     }
-    GTKeyboardDriver::keyClick(os, key);
+    GTKeyboardDriver::keyClick(Qt::Key_Control);
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp
index 43799b9..aad4358 100644
--- a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp
@@ -60,7 +60,7 @@ void GTUtilsProjectTreeView::openView(HI::GUITestOpStatus& os, GTGlobals::UseMet
         toggleView(os, method);
     }
     GTGlobals::sleep(100);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     documentTreeWidget = GTWidget::findWidget(os, widgetName, NULL, options);
     GT_CHECK(documentTreeWidget != NULL, "Can't open document tree widget view, findWidget returned NULL");
@@ -80,7 +80,7 @@ void GTUtilsProjectTreeView::toggleView(HI::GUITestOpStatus& os, GTGlobals::UseM
     switch (method) {
     case GTGlobals::UseKey:
     case GTGlobals::UseKeyBoard:
-        GTKeyboardDriver::keyClick(os, '1', GTKeyboardDriver::key["alt"]);
+        GTKeyboardDriver::keyClick('1', Qt::AltModifier);
         break;
     case GTGlobals::UseMouse:
         GTWidget::click(os, GTWidget::findWidget(os, "doc_lable_project_view"));
@@ -90,7 +90,7 @@ void GTUtilsProjectTreeView::toggleView(HI::GUITestOpStatus& os, GTGlobals::UseM
     }
 
     GTGlobals::sleep(100);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
@@ -119,16 +119,12 @@ namespace {
 void editItemName(HI::GUITestOpStatus &os, const QString &newItemName, GTGlobals::UseMethod invokeMethod) {
     switch (invokeMethod) {
     case GTGlobals::UseKey:
-        GTMouseDriver::click(os);
-#ifdef Q_OS_MAC
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Enter"]);
-#else
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
-#endif // Q_OS_MAC
+        GTMouseDriver::click();
+        GTKeyboardDriver::keyClick(Qt::Key_F2);
         break;
     case GTGlobals::UseMouse:
-        GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__edit_menu" << "Rename", GTGlobals::UseMouse));
-        GTMouseDriver::click(os, Qt::RightButton);
+        GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Rename", GTGlobals::UseMouse));
+        GTMouseDriver::click(Qt::RightButton);
         GTGlobals::sleep(300);
         break;
     default:
@@ -136,9 +132,9 @@ void editItemName(HI::GUITestOpStatus &os, const QString &newItemName, GTGlobals
         return;
     }
 
-    GTKeyboardDriver::keySequence(os, newItemName);
+    GTKeyboardDriver::keySequence(newItemName);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Enter"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Enter);
 
     GTGlobals::sleep(500);
 }
@@ -147,14 +143,14 @@ void editItemName(HI::GUITestOpStatus &os, const QString &newItemName, GTGlobals
 
 #define GT_METHOD_NAME "rename"
 void GTUtilsProjectTreeView::rename(HI::GUITestOpStatus &os, const QString &itemName, const QString &newItemName, GTGlobals::UseMethod invokeMethod) {
-    GTMouseDriver::moveTo(os, getItemCenter(os, itemName));
+    GTMouseDriver::moveTo(getItemCenter(os, itemName));
     editItemName(os, newItemName, invokeMethod);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "rename"
 void GTUtilsProjectTreeView::rename(HI::GUITestOpStatus &os, const QModelIndex& itemIndex, const QString &newItemName, GTGlobals::UseMethod invokeMethod) {
-    GTMouseDriver::moveTo(os, getItemCenter(os, itemIndex));
+    GTMouseDriver::moveTo(getItemCenter(os, itemIndex));
     editItemName(os, newItemName, invokeMethod);
 }
 #undef GT_METHOD_NAME
@@ -183,8 +179,9 @@ void GTUtilsProjectTreeView::doubleClickItem(HI::GUITestOpStatus &os, const QMod
     GT_CHECK(itemIndex.isValid(), "Item index is invalid");
     getTreeView(os)->scrollTo(itemIndex);
 
-    GTMouseDriver::moveTo(os, getItemCenter(os, itemIndex));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(getItemCenter(os, itemIndex));
+    GTMouseDriver::doubleClick();
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
@@ -200,8 +197,8 @@ void GTUtilsProjectTreeView::click(HI::GUITestOpStatus &os, const QString &itemN
     GT_CHECK(itemIndex.isValid(), "Item index is invalid");
     getTreeView(os)->scrollTo(itemIndex);
 
-    GTMouseDriver::moveTo(os, getItemCenter(os, itemIndex));
-    GTMouseDriver::click(os, button);
+    GTMouseDriver::moveTo(getItemCenter(os, itemIndex));
+    GTMouseDriver::click(button);
 }
 #undef GT_METHOD_NAME
 
@@ -213,8 +210,8 @@ void GTUtilsProjectTreeView::click(HI::GUITestOpStatus &os, const QString& itemN
     GT_CHECK(itemIndex.isValid(), "Item index is invalid");
     getTreeView(os)->scrollTo(itemIndex);
 
-    GTMouseDriver::moveTo(os, getItemCenter(os, itemIndex));
-    GTMouseDriver::click(os, button);
+    GTMouseDriver::moveTo(getItemCenter(os, itemIndex));
+    GTMouseDriver::click(button);
 }
 #undef GT_METHOD_NAME
 
@@ -353,6 +350,20 @@ void GTUtilsProjectTreeView::filterProject(HI::GUITestOpStatus &os, const QStrin
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "filterProjectSequental"
+void GTUtilsProjectTreeView::filterProjectSequental(HI::GUITestOpStatus &os, const QStringList &searchField, bool waitUntilSearchEnd) {
+    openView(os);
+    QLineEdit *nameFilterEdit = GTWidget::findExactWidget<QLineEdit *>(os, "nameFilterEdit");
+    foreach(const QString& str, searchField) {
+        GTLineEdit::setText(os, nameFilterEdit, str);
+        GTGlobals::sleep(3000);
+    }
+    if (waitUntilSearchEnd) {
+        GTUtilsTaskTreeView::waitTaskFinished(os);
+    }
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "findFilteredIndexes"
 QModelIndexList GTUtilsProjectTreeView::findFilteredIndexes(HI::GUITestOpStatus &os, const QString &substring, const QModelIndex &parentIndex) {
     QModelIndexList result;
@@ -556,18 +567,14 @@ void GTUtilsProjectTreeView::dragAndDrop(HI::GUITestOpStatus &os, const QModelIn
 
 void GTUtilsProjectTreeView::dragAndDropSeveralElements(HI::GUITestOpStatus &os, QModelIndexList from, QModelIndex to) {
     QTreeView *treeView = getTreeView(os);
-#ifdef Q_OS_MAC
-    int key = GTKeyboardDriver::key["cmd"];
-#else
-    int key = GTKeyboardDriver::key["ctrl"];
-#endif
-    GTKeyboardDriver::keyPress(os, key);
+
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
     foreach (QModelIndex index, from){
         treeView->scrollTo(index);
-        GTMouseDriver::moveTo(os, getItemCenter(os, index));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(getItemCenter(os, index));
+        GTMouseDriver::click();
     }
-    GTKeyboardDriver::keyRelease(os, key);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
 
     QPoint enterPos = getItemCenter(os, from.at(0));
     QPoint dropPos = getItemCenter(os, to);
@@ -576,7 +583,8 @@ void GTUtilsProjectTreeView::dragAndDropSeveralElements(HI::GUITestOpStatus &os,
 }
 
 void GTUtilsProjectTreeView::sendDragAndDrop(HI::GUITestOpStatus &os, const QPoint &enterPos, const QPoint &dropPos) {
-    GTMouseDriver::dragAndDrop(os, enterPos, dropPos);
+    GTMouseDriver::dragAndDrop(enterPos, dropPos);
+    GTGlobals::sleep(1000);
 }
 
 void GTUtilsProjectTreeView::sendDragAndDrop(HI::GUITestOpStatus &os, const QPoint &enterPos, QWidget *dropWidget) {
diff --git a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h
index efa29a0..67e60b5 100644
--- a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h
@@ -76,6 +76,7 @@ public:
                                         const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
 
     static void filterProject(HI::GUITestOpStatus &os, const QString &searchField);
+    static void filterProjectSequental(HI::GUITestOpStatus &os, const QStringList &searchField, bool waitUntilSearchEnd);
     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);
diff --git a/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp b/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp
index ca4f2ca..9577354 100644
--- a/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp
@@ -81,7 +81,7 @@ void GTUtilsQueryDesigner::addAlgorithm(HI::GUITestOpStatus &os, QString algName
     GTGlobals::sleep(500);
     CHECK_SET_ERR(w!=NULL,"algorithm is NULL");
 
-    GTMouseDriver::moveTo(os,GTTreeWidget::getItemCenter(os,w));
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os,w));
 
     GTWidget::click(os, GTWidget::findWidget(os,"sceneView"));
 }
diff --git a/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp b/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp
index 242314a..35ebe81 100644
--- a/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp
@@ -107,7 +107,7 @@ void GTUtilsSequenceView::getSequenceAsString(HI::GUITestOpStatus &os, QString &
     QWidget *mdiSequenceWidget = mdiWindow->findChild<ADVSingleSequenceWidget*>();
     GTWidget::click(os, mdiSequenceWidget);
 
-    Runnable *filler = new selectSequenceRegionDialogFiller(os);
+    Runnable *filler = new SelectSequenceRegionDialogFiller(os);
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTKeyboardUtils::selectAll(os);
@@ -131,7 +131,7 @@ QString GTUtilsSequenceView::getSequenceAsString(HI::GUITestOpStatus &os, int nu
 
     GTWidget::click(os, getSeqWidgetByNumber(os, number));
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os));
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(500);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_COPY << "Copy sequence"));
@@ -148,10 +148,10 @@ QString GTUtilsSequenceView::getBeginOfSequenceAsString(HI::GUITestOpStatus &os,
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     GT_CHECK_RESULT(mdiWindow != NULL, "MDI window == NULL", NULL);
 
-    GTMouseDriver::moveTo(os, mdiWindow->mapToGlobal(mdiWindow->rect().center()));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(mdiWindow->mapToGlobal(mdiWindow->rect().center()));
+    GTMouseDriver::click();
 
-    Runnable *filler = new selectSequenceRegionDialogFiller(os, length);
+    Runnable *filler = new SelectSequenceRegionDialogFiller(os, length);
     GTUtilsDialog::waitForDialog(os, filler);
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(1000);
@@ -176,10 +176,10 @@ QString GTUtilsSequenceView::getEndOfSequenceAsString(HI::GUITestOpStatus &os, i
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     GT_CHECK_RESULT(mdiWindow != NULL, "MDI window == NULL", NULL);
 
-    GTMouseDriver::moveTo(os, mdiWindow->mapToGlobal(mdiWindow->rect().center()));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(mdiWindow->mapToGlobal(mdiWindow->rect().center()));
+    GTMouseDriver::click();
 
-    Runnable *filler = new selectSequenceRegionDialogFiller(os, length, false);
+    Runnable *filler = new SelectSequenceRegionDialogFiller(os, length, false);
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTKeyboardUtils::selectAll(os);
@@ -210,11 +210,11 @@ int GTUtilsSequenceView::getLengthOfSequence(HI::GUITestOpStatus &os)
 
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, mdiWindow->mapToGlobal(mdiWindow->rect().center()));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(mdiWindow->mapToGlobal(mdiWindow->rect().center()));
+    GTMouseDriver::click();
 
     int length = -1;
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, &length));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, &length));
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(1000);
 
@@ -253,10 +253,10 @@ void GTUtilsSequenceView::selectSequenceRegion(HI::GUITestOpStatus &os, int from
     MWMDIWindow *mdiWindow = mw->getMDIManager()->getActiveWindow();
     GT_CHECK(mdiWindow != NULL, "MDI window == NULL");
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, from, to));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, from, to));
 
-    GTMouseDriver::moveTo(os, mdiWindow->mapToGlobal(mdiWindow->rect().center()));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(mdiWindow->mapToGlobal(mdiWindow->rect().center()));
+    GTMouseDriver::click();
 
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(1000);
@@ -268,8 +268,8 @@ void GTUtilsSequenceView::openSequenceView(HI::GUITestOpStatus &os, const QStrin
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "action_open_view", GTGlobals::UseMouse));
 
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, sequenceName);
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::click(Qt::RightButton);
 }
 #undef GT_METHOD_NAME
 
@@ -278,8 +278,8 @@ void GTUtilsSequenceView::addSequenceView(HI::GUITestOpStatus &os, const QString
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "submenu_add_view" << "action_add_view", GTGlobals::UseMouse));
 
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, sequenceName);
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::click(Qt::RightButton);
 }
 #undef GT_METHOD_NAME
 
@@ -292,8 +292,8 @@ void GTUtilsSequenceView::goToPosition(HI::GUITestOpStatus &os, int position) {
     GT_CHECK(NULL != positionLineEdit, "Can't find the position line edit");
 
     GTWidget::click(os, positionLineEdit);
-    GTKeyboardDriver::keySequence(os, QString::number(position));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keySequence(QString::number(position));
+    GTKeyboardDriver::keyClick(Qt::Key_Enter);
 }
 #undef GT_METHOD_NAME
 
@@ -433,8 +433,8 @@ void GTUtilsSequenceView::clickAnnotationDet(HI::GUITestOpStatus &os, QString na
     int x1 = qRound(x1f);
 
     const QRect annotationRect(x1, y.startPos, rw, y.length);
-    GTMouseDriver::moveTo(os, det->mapToGlobal(annotationRect.center()));
-    GTMouseDriver::click(os, button);
+    GTMouseDriver::moveTo(det->mapToGlobal(annotationRect.center()));
+    GTMouseDriver::click(button);
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp b/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp
index 72b1fd5..6122c8c 100644
--- a/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp
@@ -61,7 +61,7 @@ Document* GTUtilsSharedDatabaseDocument::connectToTestDatabase(HI::GUITestOpStat
     GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     CHECK_SET_ERR_RESULT(!lt.hasError(), "errors in log", NULL);
 
@@ -151,8 +151,8 @@ void GTUtilsSharedDatabaseDocument::createFolder(HI::GUITestOpStatus &os, Docume
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__ADD_MENU << ACTION_PROJECT__CREATE_FOLDER));
     GTUtilsDialog::waitForDialog(os, new AddFolderDialogFiller(os, newFolderName, GTGlobals::UseMouse));
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, parentFolderIndex));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, parentFolderIndex));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(1000);
 }
 #undef GT_METHOD_NAME
@@ -328,8 +328,8 @@ void GTUtilsSharedDatabaseDocument::callImportDialog(HI::GUITestOpStatus &os, Do
 
     GTUtilsProjectTreeView::getTreeView(os)->scrollTo(itemIndex);
     const QPoint itemCenter = GTUtilsProjectTreeView::getItemCenter(os, itemIndex);
-    GTMouseDriver::moveTo(os, itemCenter);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(itemCenter);
+    GTMouseDriver::click(Qt::RightButton);
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp
index e517669..d5e5b44 100644
--- a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp
@@ -25,6 +25,7 @@
 #include <drivers/GTMouseDriver.h>
 #include <primitives/GTWidget.h>
 #include "primitives/PopupChooser.h"
+#include "utils/GTThread.h"
 
 #include <U2Core/Task.h>
 #include <U2Gui/MainWindow.h>
@@ -57,6 +58,7 @@ void GTUtilsTaskTreeView::waitTaskFinished(HI::GUITestOpStatus &os, long timeout
            break;
        }
     }
+    GTGlobals::sleep(1000);
 }
 
 QString GTUtilsTaskTreeView::getTasksInfo(QList<Task *> tasks, int level){
@@ -83,11 +85,12 @@ void GTUtilsTaskTreeView::openView(HI::GUITestOpStatus& os) {
     if (!documentTreeWidget) {
         toggleView(os);
         GTGlobals::sleep(500);
+        GTThread::waitForMainThread();
     }
 }
 
 void GTUtilsTaskTreeView::toggleView(HI::GUITestOpStatus& os) {
-    GTKeyboardDriver::keyClick(os, '2', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick('2', Qt::AltModifier);
 }
 
 #define GT_METHOD_NAME "getTreeWidgetItem"
@@ -151,7 +154,7 @@ void GTUtilsTaskTreeView::cancelTask( HI::GUITestOpStatus& os, const QString &it
 
 void GTUtilsTaskTreeView::click( HI::GUITestOpStatus &os, const QString &itemName, Qt::MouseButton b ){
     moveTo(os, itemName);
-    GTMouseDriver::click(os, b);
+    GTMouseDriver::click(b);
 }
 
 void GTUtilsTaskTreeView::moveTo(HI::GUITestOpStatus &os,const QString &itemName) {
@@ -172,7 +175,7 @@ int GTUtilsTaskTreeView::getTopLevelTasksCount(HI::GUITestOpStatus &os) {
 
 void GTUtilsTaskTreeView::moveToOpenedView( HI::GUITestOpStatus& os, const QString &itemName ){
     QPoint p = getTreeViewItemPosition(os, itemName);
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
 }
 
 #define GT_METHOD_NAME "getTreeViewItemPosition"
@@ -214,6 +217,12 @@ int GTUtilsTaskTreeView::countTasks(HI::GUITestOpStatus &os, const QString &item
 }
 #undef GT_METHOD_NAME
 
+QString GTUtilsTaskTreeView::getTaskStatus(GUITestOpStatus &os, const QString &itemName){
+    openView(os);
+    GTGlobals::sleep(500);
+    return getTreeWidgetItem(os, itemName)->text(1);
+}
+
 SchedulerListener::SchedulerListener() :
     QObject(NULL),
     registeredTaskCount(0)
diff --git a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h
index c6dca9a..26dffa1 100644
--- a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h
@@ -60,6 +60,7 @@ public:
     static int getTopLevelTasksCount(HI::GUITestOpStatus &os);
     static bool checkTask(HI::GUITestOpStatus& os, const QString &itemName);
     static int countTasks(HI::GUITestOpStatus& os, const QString &itemName);
+    static QString getTaskStatus(HI::GUITestOpStatus& os, const QString &itemName);
 
     static const QString widgetName;
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp
index 74abbfd..7f96c01 100644
--- a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp
@@ -211,7 +211,7 @@ QList<QTreeWidgetItem*> GTUtilsWorkflowDesigner::getVisibleSamples(HI::GUITestOp
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addAlgorithm"
-void GTUtilsWorkflowDesigner::addAlgorithm(HI::GUITestOpStatus &os, QString algName, bool exactMatch){
+void GTUtilsWorkflowDesigner::addAlgorithm(HI::GUITestOpStatus &os, QString algName, bool exactMatch, bool useDragAndDrop){
     expandTabs(os);
     QTabWidget* tabs = qobject_cast<QTabWidget*>(GTWidget::findWidget(os,"tabs"));
     GT_CHECK(tabs!=NULL, "tabs widget not found");
@@ -228,7 +228,11 @@ void GTUtilsWorkflowDesigner::addAlgorithm(HI::GUITestOpStatus &os, QString algN
 
     int workerNum = getWorkers(os).size();
     QPoint p(w->rect().topLeft() + QPoint(100+300*(workerNum-(workerNum/2)*2),100 + 200*(workerNum/2)));//shifting workers position
-    GTWidget::click(os, w,Qt::LeftButton, p);
+    if(useDragAndDrop){
+        GTMouseDriver::dragAndDrop(GTMouseDriver::getMousePosition(), w->mapToGlobal(p));
+    }else{
+        GTWidget::click(os, w,Qt::LeftButton, p);
+    }
     GTGlobals::sleep(1000);
 }
 #undef GT_METHOD_NAME
@@ -248,7 +252,7 @@ void GTUtilsWorkflowDesigner::selectAlgorithm(HI::GUITestOpStatus &os, QTreeWidg
 
     algorithm->treeWidget()->scrollToItem(algorithm, QAbstractItemView::PositionAtCenter);
     GTGlobals::sleep(200);
-    GTMouseDriver::moveTo(os,GTTreeWidget::getItemCenter(os,algorithm));
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os,algorithm));
 }
 #undef GT_METHOD_NAME
 
@@ -276,10 +280,10 @@ void GTUtilsWorkflowDesigner::selectSample(HI::GUITestOpStatus &os, QTreeWidgetI
 
     QTreeWidget *paletteTree = qobject_cast<QTreeWidget *>(GTWidget::findWidget(os,"samples"));
     paletteTree->scrollToItem(sample);
-    GTThread::waitForMainThread(os);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, sample));
-    GTMouseDriver::doubleClick(os);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, sample));
+    GTMouseDriver::doubleClick();
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
@@ -294,12 +298,13 @@ void GTUtilsWorkflowDesigner::expandTabs(HI::GUITestOpStatus &os){
         QPoint p;
         p.setX(splitter->geometry().left()+2);
         p.setY(splitter->geometry().center().y());
-        GTMouseDriver::moveTo(os, p);
+        GTMouseDriver::moveTo(p);
         GTGlobals::sleep(300);
-        GTMouseDriver::press(os);
+        GTMouseDriver::press();
         p.setX(p.x()+200);
-        GTMouseDriver::moveTo(os,p);
-        GTMouseDriver::release(os);
+        GTMouseDriver::moveTo(p);
+        GTMouseDriver::release();
+        GTThread::waitForMainThread();
     }
 }
 #undef GT_METHOD_NAME
@@ -307,7 +312,7 @@ void GTUtilsWorkflowDesigner::expandTabs(HI::GUITestOpStatus &os){
 #define GT_METHOD_NAME "clickOnPalette"
 void GTUtilsWorkflowDesigner::clickOnPalette(HI::GUITestOpStatus &os, const QString &itemName, Qt::MouseButton mouseButton) {
     selectAlgorithm(os, findTreeItem(os, itemName, algoriths, true));
-    GTMouseDriver::click(os, mouseButton);
+    GTMouseDriver::click(mouseButton);
 }
 #undef GT_METHOD_NAME
 
@@ -393,8 +398,8 @@ QPoint GTUtilsWorkflowDesigner::getItemCenter(HI::GUITestOpStatus &os,QString it
 #define GT_METHOD_NAME "removeItem"
 void GTUtilsWorkflowDesigner::removeItem(HI::GUITestOpStatus &os, QString itemName) {
     click(os, itemName);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
-    GTThread::waitForMainThread(os);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
@@ -426,12 +431,12 @@ void GTUtilsWorkflowDesigner::click(HI::GUITestOpStatus &os, QString itemName, Q
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os,"sceneView"));
     GT_CHECK(sceneView!=NULL, "scene view is NULL");
     sceneView->ensureVisible(getWorker(os, itemName));
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
-    GTMouseDriver::moveTo(os, getItemCenter(os, itemName) + p);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(getItemCenter(os, itemName) + p);
+    GTMouseDriver::click();
     if (Qt::RightButton == button) {
-        GTMouseDriver::click(os, Qt::RightButton);
+        GTMouseDriver::click(Qt::RightButton);
     }
 }
 #undef GT_METHOD_NAME
@@ -443,11 +448,12 @@ void GTUtilsWorkflowDesigner::click(HI::GUITestOpStatus &os, QGraphicsItem* item
     sceneView->ensureVisible(item);
     QRect rect = GTGraphicsItem::getGraphicsItemRect(os, item);
 
-    GTMouseDriver::moveTo(os, rect.center() + p);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(rect.center() + p);
+    GTMouseDriver::click();
     if (Qt::RightButton == button) {
-        GTMouseDriver::click(os, Qt::RightButton);
+        GTMouseDriver::click(Qt::RightButton);
     }
+    GTGlobals::sleep(200);
 }
 #undef GT_METHOD_NAME
 
@@ -507,9 +513,9 @@ void GTUtilsWorkflowDesigner::clickLink(HI::GUITestOpStatus &os, QString itemNam
     int bottom = GTUtilsWorkflowDesigner::getItemBottom(os, itemName);
     for(int i = left; i < right; i+=step){
         for(int j = top; j < bottom; j+=step){
-            GTMouseDriver::moveTo(os, QPoint(i,j));
+            GTMouseDriver::moveTo(QPoint(i,j));
             if(worker->cursor().shape() == Qt::PointingHandCursor){
-                GTMouseDriver::click(os, button);
+                GTMouseDriver::click(button);
                 return;
             }
         }
@@ -675,10 +681,10 @@ void GTUtilsWorkflowDesigner::connect(HI::GUITestOpStatus &os, WorkflowProcessIt
     foreach(WorkflowPortItem* fromPort, fromList){
         foreach(WorkflowPortItem* toPort, toList){
             if(fromPort->getPort()->canBind(toPort->getPort())){
-                GTMouseDriver::moveTo(os,GTGraphicsItem::getItemCenter(os,fromPort));
-                GTMouseDriver::press(os);
-                GTMouseDriver::moveTo(os,GTGraphicsItem::getItemCenter(os,toPort));
-                GTMouseDriver::release(os);
+                GTMouseDriver::moveTo(GTGraphicsItem::getItemCenter(os,fromPort));
+                GTMouseDriver::press();
+                GTMouseDriver::moveTo(GTGraphicsItem::getItemCenter(os,toPort));
+                GTMouseDriver::release();
                 GTGlobals::sleep(1000);
                 return;
             }
@@ -698,7 +704,7 @@ void GTUtilsWorkflowDesigner::disconect(HI::GUITestOpStatus &os, WorkflowProcess
     QGraphicsTextItem* hint = getArrowHint(os, arrow);
     click(os, hint);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(1000);
 }
 #undef GT_METHOD_NAME
@@ -828,8 +834,8 @@ void GTUtilsWorkflowDesigner::setParameter(HI::GUITestOpStatus &os, QString para
     GT_CHECK(row != -1, QString("parameter not found: %1").arg(parameter));
     table->scrollTo(model->index(row,1));
 
-    GTMouseDriver::moveTo(os,GTTableView::getCellPosition(os,table,1,row));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTableView::getCellPosition(os,table,1,row));
+    GTMouseDriver::click();
     GTGlobals::sleep(500);
 
     //SET VALUE
@@ -851,8 +857,8 @@ void GTUtilsWorkflowDesigner::setTableValue(HI::GUITestOpStatus &os,  QString pa
 
     QRect rect = table->visualItemRect(table->item(row, 1));
     QPoint globalP = table->viewport()->mapToGlobal(rect.center());
-    GTMouseDriver::moveTo(os, globalP);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(globalP);
+    GTMouseDriver::click();
     GTGlobals::sleep(500);
 
 
@@ -870,13 +876,13 @@ void GTUtilsWorkflowDesigner::setCellValue(HI::GUITestOpStatus &os, QWidget* par
         GTWidget::click(os, GTWidget::findButtonByText(os, "...", parent));
 #ifdef Q_OS_WIN
         //added to fix UGENE-3597
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+        GTKeyboardDriver::keyClick(Qt::Key_Enter);
 #endif
         break;
     }
     case(lineEditWithFileSelector) : {
         GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "mainWidget", parent), value.toString());
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+        GTKeyboardDriver::keyClick(Qt::Key_Enter);
         break;
     }
     case(spinValue):{
@@ -908,7 +914,7 @@ void GTUtilsWorkflowDesigner::setCellValue(HI::GUITestOpStatus &os, QWidget* par
         }
 #ifdef Q_OS_WIN
         //added to fix UGENE-3597
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+        GTKeyboardDriver::keyClick(Qt::Key_Enter);
 #endif
         break;
     }
@@ -917,7 +923,7 @@ void GTUtilsWorkflowDesigner::setCellValue(HI::GUITestOpStatus &os, QWidget* par
         QLineEdit* line = qobject_cast<QLineEdit*>(parent->findChild<QLineEdit*>());
         GT_CHECK(line, "QLineEdit not found. Widget in this cell might be not QLineEdit");
         GTLineEdit::setText(os, line, lineVal);
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+        GTKeyboardDriver::keyClick(Qt::Key_Enter);
         break;
     }
     case ComboChecks: {
@@ -926,11 +932,12 @@ void GTUtilsWorkflowDesigner::setCellValue(HI::GUITestOpStatus &os, QWidget* par
         GT_CHECK(box, "QComboBox not found");
         GTComboBox::checkValues(os, box, values);
 #ifndef Q_OS_WIN
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+        GTKeyboardDriver::keyClick(Qt::Key_Escape);
 #endif
         break;
     }
     }
+    GTGlobals::sleep(200);
 }
 #undef GT_METHOD_NAME
 
@@ -1096,8 +1103,8 @@ void GTUtilsWorkflowDesigner::clickParameter(HI::GUITestOpStatus &os, const QStr
 
     QAbstractItemModel *model = table->model();
     table->scrollTo(model->index(row, 1));
-    GTMouseDriver::moveTo(os,GTTableView::getCellPosition(os, table, 1, row));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTableView::getCellPosition(os, table, 1, row));
+    GTMouseDriver::click();
     GTGlobals::sleep(500);
 }
 #undef GT_METHOD_NAME
@@ -1132,8 +1139,8 @@ void GTUtilsWorkflowDesigner::setParameterScripting(HI::GUITestOpStatus &os, QSt
     }
     GT_CHECK(row != -1, "parameter not found");
     table->scrollTo(model->index(row,1));
-    GTMouseDriver::moveTo(os,GTTableView::getCellPosition(os,table,2,row));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTableView::getCellPosition(os,table,2,row));
+    GTMouseDriver::click();
     GTGlobals::sleep(500);
 
     //SET VALUE
diff --git a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h
index 0b67498..f436edb 100644
--- a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h
+++ b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h
@@ -80,7 +80,7 @@ public:
 
     //add to scene
     static void addSample(HI::GUITestOpStatus &os, const QString &sampName);
-    static void addAlgorithm(HI::GUITestOpStatus &os, QString algName, bool exactMatch = false);
+    static void addAlgorithm(HI::GUITestOpStatus &os, QString algName, bool exactMatch = false, bool useDragAndDrop = false);
     static WorkflowProcessItem * addElement(HI::GUITestOpStatus &os, const QString &algName, bool exactMatch = false);
 
     //returns center of worker on workflow scene in global coordinates
diff --git a/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp b/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp
index 8141e37..5ffadaa 100644
--- a/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp
+++ b/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp
@@ -91,6 +91,12 @@
 #include "tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.h"
 
 #define REGISTER_TEST(X) if (guiTestBase) guiTestBase->registerTest(new X())
+#define REGISTER_TEST_LABEL(X, LABEL) \
+    if (guiTestBase) { \
+        HI::GUITest *test = new X(); \
+        test->setLabel(LABEL); \
+        guiTestBase->registerTest(test); \
+    }
 #define REGISTER_TEST_WITH_TIMEOUT(X, TIMEOUT) \
     if (guiTestBase) { \
         HI::GUITest *test = new X(); \
@@ -197,7 +203,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
 
     REGISTER_TEST(GUITest_regression_scenarios::test_0700);
     REGISTER_TEST(GUITest_regression_scenarios::test_0702);
-    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_0703, "Drag&drop from project to assembly browser doesn't work");
+    REGISTER_TEST(GUITest_regression_scenarios::test_0703);
     REGISTER_TEST(GUITest_regression_scenarios::test_0729);
     REGISTER_TEST(GUITest_regression_scenarios::test_0733);
     REGISTER_TEST(GUITest_regression_scenarios::test_0734);
@@ -216,7 +222,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_0798);
 
     REGISTER_TEST(GUITest_regression_scenarios::test_0801);
-    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_0807, "UGENE-4436");
+    REGISTER_TEST(GUITest_regression_scenarios::test_0807);
     REGISTER_TEST(GUITest_regression_scenarios::test_0808);
     REGISTER_TEST(GUITest_regression_scenarios::test_0812);
     REGISTER_TEST(GUITest_regression_scenarios::test_0814);
@@ -226,7 +232,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_0829);
     REGISTER_TEST(GUITest_regression_scenarios::test_0830);
     REGISTER_TEST(GUITest_regression_scenarios::test_0834);
-    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_0835, "Drag&drop from project to sequence view doesn't work");
+    REGISTER_TEST(GUITest_regression_scenarios::test_0835);
     REGISTER_TEST(GUITest_regression_scenarios::test_0839);
     REGISTER_TEST(GUITest_regression_scenarios::test_0840);
     REGISTER_TEST(GUITest_regression_scenarios::test_0842);
@@ -315,8 +321,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_1058);
     REGISTER_TEST(GUITest_regression_scenarios::test_1059);
     REGISTER_TEST(GUITest_regression_scenarios::test_1061);
-    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_1063,
-        "The test causes a dead-lock in the task scheduler. See test scenario in the 'Strange' folder");
+    REGISTER_TEST(GUITest_regression_scenarios::test_1063);
     REGISTER_TEST(GUITest_regression_scenarios::test_1064);
     REGISTER_TEST(GUITest_regression_scenarios::test_1065_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_1065_2);
@@ -348,7 +353,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_1157);
     REGISTER_TEST(GUITest_regression_scenarios::test_1163);
     REGISTER_TEST(GUITest_regression_scenarios::test_1165);
-    REGISTER_TEST(GUITest_regression_scenarios::test_1166);
+    REGISTER_TEST_LABEL(GUITest_regression_scenarios::test_1166, "mem");
     REGISTER_TEST(GUITest_regression_scenarios::test_1172);
     REGISTER_TEST(GUITest_regression_scenarios::test_1175);
     REGISTER_TEST(GUITest_regression_scenarios::test_1180);
@@ -521,7 +526,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_NOT_FOR_WINDOWS(GUITest_regression_scenarios::test_1662);
+    REGISTER_TEST_LABEL(GUITest_regression_scenarios::test_1662, "mem");
     REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_regression_scenarios::test_1664);
     REGISTER_TEST(GUITest_regression_scenarios::test_1668);
     REGISTER_TEST(GUITest_regression_scenarios::test_1672);
@@ -604,7 +609,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_2021_8);
     REGISTER_TEST(GUITest_regression_scenarios::test_2021_9);
     REGISTER_TEST(GUITest_regression_scenarios::test_2024);
-    REGISTER_TEST_IGNORED_WINDOWS(GUITest_regression_scenarios::test_2026, "holding 'shift' does not work (at least on Windows)");
+    REGISTER_TEST(GUITest_regression_scenarios::test_2026);
     REGISTER_TEST(GUITest_regression_scenarios::test_2030);
     REGISTER_TEST(GUITest_regression_scenarios::test_2032);
     REGISTER_TEST(GUITest_regression_scenarios::test_2049);
@@ -745,7 +750,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_2701);
     REGISTER_TEST(GUITest_regression_scenarios::test_2709);
     REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_regression_scenarios::test_2711);
-    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_2713, "test_2713");
+    REGISTER_TEST(GUITest_regression_scenarios::test_2713);
     REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_regression_scenarios::test_2721);// no cistrome data on windows servers
     REGISTER_TEST(GUITest_regression_scenarios::test_2726);
     REGISTER_TEST(GUITest_regression_scenarios::test_2729);
@@ -795,7 +800,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_2951);
     REGISTER_TEST(GUITest_regression_scenarios::test_2962_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_2962_2);
-    REGISTER_TEST(GUITest_regression_scenarios::test_2971);
+    REGISTER_TEST_LABEL(GUITest_regression_scenarios::test_2971, "mem");
     REGISTER_TEST(GUITest_regression_scenarios::test_2972);
     REGISTER_TEST(GUITest_regression_scenarios::test_2975);
     REGISTER_TEST(GUITest_regression_scenarios::test_2981);
@@ -881,7 +886,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_3313);
     REGISTER_TEST(GUITest_regression_scenarios::test_3318);
     REGISTER_TEST(GUITest_regression_scenarios::test_3321);
-    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_3328, "Test crashes: it must work in another thread");
+    REGISTER_TEST(GUITest_regression_scenarios::test_3328);
     REGISTER_TEST(GUITest_regression_scenarios::test_3332);
     REGISTER_TEST_LINUX(GUITest_regression_scenarios::test_3333, "drag and drop");
     REGISTER_TEST(GUITest_regression_scenarios::test_3335);
@@ -1073,7 +1078,6 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_4116);
     REGISTER_TEST(GUITest_regression_scenarios::test_4117);
     REGISTER_TEST(GUITest_regression_scenarios::test_4118);
-    REGISTER_TEST(GUITest_regression_scenarios::test_4120);
     REGISTER_TEST(GUITest_regression_scenarios::test_4121);
     REGISTER_TEST(GUITest_regression_scenarios::test_4122);
     REGISTER_TEST(GUITest_regression_scenarios::test_4124);
@@ -1087,12 +1091,12 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_4153);
     REGISTER_TEST(GUITest_regression_scenarios::test_4156);
     REGISTER_TEST(GUITest_regression_scenarios::test_4160);
-    REGISTER_TEST(GUITest_regression_scenarios::test_4164);
+    REGISTER_TEST_LABEL(GUITest_regression_scenarios::test_4164, "mem");
     REGISTER_TEST(GUITest_regression_scenarios::test_4170);
     REGISTER_TEST(GUITest_regression_scenarios::test_4179);
     REGISTER_TEST(GUITest_regression_scenarios::test_4194);
 
-    REGISTER_TEST(GUITest_regression_scenarios::test_4209);
+    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_4209, "test consumes too much memory");
     REGISTER_TEST(GUITest_regression_scenarios::test_4218);
     REGISTER_TEST(GUITest_regression_scenarios::test_4218_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_4221);
@@ -1215,6 +1219,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_4852);
     REGISTER_TEST(GUITest_regression_scenarios::test_4860);
     REGISTER_TEST(GUITest_regression_scenarios::test_4871);
+    //REGISTER_TEST(GUITest_regression_scenarios::test_4881);
     REGISTER_TEST(GUITest_regression_scenarios::test_4885_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_4885_2);
     REGISTER_TEST(GUITest_regression_scenarios::test_4885_3);
@@ -1233,13 +1238,38 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_4969_2);
     REGISTER_TEST(GUITest_regression_scenarios::test_4983);
     REGISTER_TEST(GUITest_regression_scenarios::test_4986);
-    REGISTER_TEST_IGNORED_WINDOWS(GUITest_regression_scenarios::test_4990, "Required \"slow\" machine");
 
+    REGISTER_TEST(GUITest_regression_scenarios::test_5004);
     REGISTER_TEST(GUITest_regression_scenarios::test_5012);
     REGISTER_TEST(GUITest_regression_scenarios::test_5012_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_5012_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5018);
+if(QSysInfo::WordSize == 64){
+    REGISTER_TEST(GUITest_regression_scenarios::test_5027_1);
+}
+    REGISTER_TEST(GUITest_regression_scenarios::test_5027_2);
     REGISTER_TEST(GUITest_regression_scenarios::test_5029);
     REGISTER_TEST(GUITest_regression_scenarios::test_5052);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5079);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5082);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5090);
+
+    REGISTER_TEST(GUITest_regression_scenarios::test_5128);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5137);
+if (QSysInfo::WordSize == 32) {
+    REGISTER_TEST_WITH_TIMEOUT(GUITest_regression_scenarios::test_5138_1, 420000);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5138_2);
+}
+    REGISTER_TEST(GUITest_regression_scenarios::test_5199);
+
+    REGISTER_TEST(GUITest_regression_scenarios::test_5208);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5216);
+    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_5268);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5278);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5295);
 
 //////////////////////////////////////////////////////////////////////////
 // Common scenarios/project/
@@ -1273,7 +1303,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_project::test_0036);
     REGISTER_TEST(GUITest_common_scenarios_project::test_0037);
     REGISTER_TEST(GUITest_common_scenarios_project::test_0038);
-    REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0038_1, "UGENE-4434");
+    REGISTER_TEST(GUITest_common_scenarios_project::test_0038_1);
     REGISTER_TEST(GUITest_common_scenarios_project::test_0039);
     REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0040, "UGENE-4900");
     REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0041, "UGENE-4900");
@@ -1397,7 +1427,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0027);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0028);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0029);
-    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0030);
+    REGISTER_TEST_LABEL(GUITest_common_scenarios_sequence_view::test_0030, "mem");
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0031);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0031_1);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0031_2);
@@ -1421,7 +1451,6 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0047);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0048);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0050);
-    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0050_1);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0051);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0052);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0052_1);
@@ -1448,6 +1477,10 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0069);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0070);
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0071);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0075);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0076);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0077);
+    REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0078);
 
 //////////////////////////////////////////////////////////////////////////
 // Common scenarios/sequence edit/
@@ -1788,10 +1821,18 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0073);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0074);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0075);
+
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0076);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0077);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0078);
 
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0079);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0080);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0081);
+    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
@@ -2272,7 +2313,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST_IGNORED(GUITest_common_scenarios_options_panel_MSA::tree_settings_test_0004, "UGENE-3504");
     REGISTER_TEST(GUITest_common_scenarios_options_panel_MSA::tree_settings_test_0005);
     REGISTER_TEST(GUITest_common_scenarios_options_panel_MSA::tree_settings_test_0006);
-    REGISTER_TEST(GUITest_common_scenarios_options_panel_MSA::tree_settings_test_0007);
+    REGISTER_TEST_IGNORED(GUITest_common_scenarios_options_panel_MSA::tree_settings_test_0007, "UGENE-5188");
     REGISTER_TEST(GUITest_common_scenarios_options_panel_MSA::tree_settings_test_0008);
 
     REGISTER_TEST(GUITest_common_scenarios_options_panel_MSA::export_consensus_test_0001);
@@ -2331,6 +2372,20 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_Assembly_browser::test_0023);
     REGISTER_TEST(GUITest_Assembly_browser::test_0024);
     REGISTER_TEST(GUITest_Assembly_browser::test_0025);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0026_1);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0026_2);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0026_3);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0027);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0028);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0029);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0030);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0031);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0032);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0033);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0034);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0035);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0036);
+    REGISTER_TEST(GUITest_Assembly_browser::test_0037);
 
 /////////////////////////////////////////////////////////////////////////
 // Common scenarios/Assembling/bowtie2
@@ -2385,9 +2440,9 @@ REGISTER_TEST(GUITest_dna_assembly_conversions::test_0004);
 /////////////////////////////////////////////////////////////////////////
 // Common scenarios/Query designer
 /////////////////////////////////////////////////////////////////////////
-    REGISTER_TEST(GUITest_common_scenarios_querry_designer::test_0001);
-    REGISTER_TEST(GUITest_common_scenarios_querry_designer::test_0001_1);
-    REGISTER_TEST(GUITest_common_scenarios_querry_designer::test_0001_2);
+    REGISTER_TEST_IGNORED_MAC(GUITest_common_scenarios_querry_designer::test_0001, "breaks testing on mac");
+    REGISTER_TEST_IGNORED_MAC(GUITest_common_scenarios_querry_designer::test_0001_1, "breaks testing on mac");
+    REGISTER_TEST_IGNORED_MAC(GUITest_common_scenarios_querry_designer::test_0001_2, "breaks testing on mac");
 
 /////////////////////////////////////////////////////////////////////////
 // Common scenarios/Workflow designer
@@ -2404,9 +2459,11 @@ REGISTER_TEST(GUITest_dna_assembly_conversions::test_0004);
     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);
 
 /////////////////////////////////////////////////////////////////////////
 // Common scenarios/Workflow designer/Workflow parameters validation
@@ -2652,6 +2709,13 @@ REGISTER_TEST(GUITest_dna_assembly_conversions::test_0004);
     REGISTER_TEST(GUITest_common_scenarios_in_silico_pcr::test_0009);
     REGISTER_TEST(GUITest_common_scenarios_in_silico_pcr::test_0010);
 
+    REGISTER_TEST(GUITest_common_scenarios_in_silico_pcr::test_0011);
+    REGISTER_TEST(GUITest_common_scenarios_in_silico_pcr::test_0012);
+    REGISTER_TEST(GUITest_common_scenarios_in_silico_pcr::test_0013);
+    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);
+
 /////////////////////////////////////////////////////////////////////////
 // common_scenarios/pcr/primer_library
 /////////////////////////////////////////////////////////////////////////
@@ -2668,6 +2732,10 @@ REGISTER_TEST(GUITest_dna_assembly_conversions::test_0004);
     REGISTER_TEST(GUITest_common_scenarios_primer_library::test_0011);
     REGISTER_TEST(GUITest_common_scenarios_primer_library::test_0012);
     REGISTER_TEST(GUITest_common_scenarios_primer_library::test_0013);
+    REGISTER_TEST(GUITest_common_scenarios_primer_library::test_0014);
+    REGISTER_TEST(GUITest_common_scenarios_primer_library::test_0015);
+    REGISTER_TEST(GUITest_common_scenarios_primer_library::test_0016);
+
 /////////////////////////////////////////////////////////////////////////
 // common_scenarios/start_page
 /////////////////////////////////////////////////////////////////////////
diff --git a/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp b/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp
index 050d184..2bd5d36 100644
--- a/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp
+++ b/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp
@@ -42,10 +42,11 @@ void GTBaseCompleter::click(HI::GUITestOpStatus &os, QTreeWidget* tree, const QS
     QTreeWidgetItem* item = GTTreeWidget::findItem(os, tree, seqName);
     GT_CHECK(item != NULL, "item not found");
     tree->scrollToItem(item);
+    GTGlobals::sleep(100);
     QRect itemRect = tree->visualItemRect(item);
     QPoint globalCenter = tree->mapToGlobal(itemRect.center());
-    GTMouseDriver::moveTo(os, globalCenter);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(globalCenter);
+    GTMouseDriver::click();
 }
 #undef GT_METHOD_NAME
 
diff --git a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp
index 7b48aee..7f92128 100644
--- a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp
+++ b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp
@@ -100,7 +100,7 @@ void GTSequenceReadingModeDialogUtils::selectMode()
 
         case GTGlobals::UseKey:
             GTWidget::setFocus(os, radioButton);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+            GTKeyboardDriver::keyClick(Qt::Key_Space);
             break;
         default:
             break;
@@ -157,16 +157,16 @@ void GTSequenceReadingModeDialogUtils::selectSaveDocument()
     if (GTSequenceReadingModeDialog::saveDocument != saveBox->isChecked()) {
         switch (GTSequenceReadingModeDialog::useMethod) {
         case GTGlobals::UseMouse:
-            GTMouseDriver::moveTo(os, saveBox->mapToGlobal(QPoint(saveBox->rect().left() + 10, saveBox->rect().height() / 2)));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(saveBox->mapToGlobal(QPoint(saveBox->rect().left() + 10, saveBox->rect().height() / 2)));
+            GTMouseDriver::click();
             break;
 
         case GTGlobals::UseKey:
             while (! saveBox->hasFocus()) {
-                GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
+                GTKeyboardDriver::keyClick(Qt::Key_Tab);
                 GTGlobals::sleep(100);
             }
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+            GTKeyboardDriver::keyClick(Qt::Key_Space);
         default:
             break;
         }
@@ -211,24 +211,24 @@ void GTSequenceReadingModeDialogUtils::changeSpinBoxValue(QSpinBox *sb, int val)
                 arrowPos = QPoint(spinBoxRect.right() - 5, spinBoxRect.height() * 3 / 4);
             }
 
-            GTMouseDriver::moveTo(os, sb->mapToGlobal(arrowPos));
+            GTMouseDriver::moveTo(sb->mapToGlobal(arrowPos));
             while (sb->value() != val) {
-                GTMouseDriver::click(os);
+                GTMouseDriver::click();
                 GTGlobals::sleep(100);
             }
             break;
 
         case GTGlobals::UseKey: {
-            int key = 0;
+            Qt::Key key;
             if (val > sb->value()) {
-                key = GTKeyboardDriver::key["up"];
+                key = Qt::Key_Up;
             } else {
-                key = GTKeyboardDriver::key["down"];
+                key = Qt::Key_Down;
             }
 
             GTWidget::setFocus(os, sb);
             while (sb->value() != val) {
-                GTKeyboardDriver::keyClick(os, key);
+                GTKeyboardDriver::keyClick( key);
                 GTGlobals::sleep(100);
             }
         }
diff --git a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp b/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp
index dc5075b..f7b7ed2 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp
+++ b/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp
@@ -34,7 +34,7 @@ EscapeClicker::EscapeClicker(HI::GUITestOpStatus &os, const QString &name, Custo
 
 void EscapeClicker::commonScenario() {
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 }
 
 }
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 1877a1f..4e660ef 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.cpp
@@ -58,7 +58,7 @@ void AddFolderDialogFiller::commonScenario() {
         break;
     case GTGlobals::UseKey :
     case GTGlobals::UseKeyBoard :
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Enter);
         break;
     }
 }
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 8a444c7..f8cc436 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.cpp
@@ -28,6 +28,7 @@
 #include <primitives/GTLineEdit.h>
 #include <drivers/GTKeyboardDriver.h>
 #include <primitives/GTListWidget.h>
+#include <utils/GTThread.h>
 
 #include <U2Core/Log.h>
 
@@ -94,8 +95,8 @@ void AppSettingsDialogFiller::commonScenario(){
     QList<QTreeWidgetItem*> items = GTTreeWidget::getItems(tree->invisibleRootItem());
     foreach (QTreeWidgetItem* item,items){
         if(item->text(0)=="  Workflow Designer"){
-            GTMouseDriver::moveTo(os,GTTreeWidget::getItemCenter(os,item));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os,item));
+            GTMouseDriver::click();
         }
     }
     if(itemStyle!=none){
@@ -128,6 +129,7 @@ void AppSettingsDialogFiller::setExternalToolPath(HI::GUITestOpStatus &os, const
             QWidget *itemWid = treeWidget->itemWidget(item, 1);
             QLineEdit *lineEdit = itemWid->findChild<QLineEdit*>("PathLineEdit");
             treeWidget->scrollToItem(item);
+            GTThread::waitForMainThread();
             GTLineEdit::setText(os, lineEdit, toolPath);
             GTTreeWidget::click(os, item, 0);
             set = true;
@@ -170,7 +172,7 @@ bool AppSettingsDialogFiller::isExternalToolValid(HI::GUITestOpStatus &os, const
     foreach (QTreeWidgetItem* item, listOfItems){
         if(item->text(0) == toolName){
             GTTreeWidget::click(os, item);
-            GTMouseDriver::doubleClick(os);
+            GTMouseDriver::doubleClick();
             QTextBrowser *descriptionTextBrowser = GTWidget::findExactWidget<QTextBrowser*>(os, "descriptionTextBrowser", dialog);
             return descriptionTextBrowser->toPlainText().contains("Version:");
         }
@@ -194,6 +196,7 @@ void AppSettingsDialogFiller::clearToolPath(HI::GUITestOpStatus &os, const QStri
             QToolButton* clearPathButton = itemWid->findChild<QToolButton*>("ClearToolPathButton");
             CHECK_SET_ERR(clearPathButton != NULL, "Clear path button not found");
             treeWidget->scrollToItem(item);
+            GTThread::waitForMainThread();
             if (clearPathButton->isEnabled()) {
                 GTWidget::click(os, clearPathButton);
             }
@@ -240,11 +243,13 @@ void NewColorSchemeCreator::commonScenario() {
     QList<QTreeWidgetItem*> items = GTTreeWidget::getItems(tree->invisibleRootItem());
     foreach (QTreeWidgetItem* item,items){
         if(item->text(0)=="  Alignment Color Scheme"){
-            GTMouseDriver::moveTo(os,GTTreeWidget::getItemCenter(os,item));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os,item));
+            GTMouseDriver::click();
         }
     }
-    if(act == Delete){
+
+    switch (act) {
+    case Delete: {
         QListWidget* colorSchemas = qobject_cast<QListWidget*>(GTWidget::findWidget(os, "colorSchemas", dialog));
         GT_CHECK(colorSchemas != NULL, "colorSchemas list widget not found");
         GTListWidget::click(os, colorSchemas, schemeName);
@@ -257,21 +262,37 @@ void NewColorSchemeCreator::commonScenario() {
             GTGlobals::sleep(100);
         }
         GTWidget::click(os, deleteSchemaButton);
-
-
-    }else if(act == Create){
+        break;
+    }
+    case Create: {
         QWidget* addSchemaButton = GTWidget::findWidget(os, "addSchemaButton");
         GT_CHECK (addSchemaButton, "addSchemaButton not found");
 
         GTUtilsDialog::waitForDialog(os, new CreateAlignmentColorSchemeDialogFiller(os, schemeName, al));
         GTWidget::click(os, addSchemaButton);
+        break;
     }
+    case Change: {
+        GTListWidget::click(os, GTWidget::findExactWidget<QListWidget *>(os, "colorSchemas", dialog), schemeName);
+
+        class Scenario : public CustomScenario {
+        public:
+            void run(HI::GUITestOpStatus &os) {
+                QWidget *dialog = QApplication::activeModalWidget();
+                GT_CHECK(NULL != dialog, "Active modal widget is NULL");
+                GTUtilsDialog::waitForDialog(os, new ColorDialogFiller(os, 255, 0, 0));
+                GTWidget::click(os, GTWidget::findWidget(os, "alphabetColorsFrame", dialog), Qt::LeftButton, QPoint(5, 5));
+
+                GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+            }
+        };
 
-    QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
-    GT_CHECK(box != NULL, "buttonBox is NULL");
-    QPushButton* button = cancel ? box->button(QDialogButtonBox::Cancel) : box->button(QDialogButtonBox::Ok);
-    GT_CHECK(button !=NULL, "button is NULL");
-    GTWidget::click(os, button);
+        GTUtilsDialog::waitForDialog(os, new ColorSchemeDialogFiller(os, new Scenario));
+        GTWidget::click(os, GTWidget::findWidget(os, "changeSchemaButton", dialog));
+    }
+    }
+
+    GTUtilsDialog::clickButtonBox(os, dialog, cancel ? QDialogButtonBox::Cancel : QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
@@ -319,7 +340,7 @@ void ColorSchemeDialogFiller::commonScenario(){
             return;
         }
     }
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);//if ok button not found
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);//if ok button not found
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
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 acf2203..a55da74 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h
@@ -54,7 +54,7 @@ private:
 class NewColorSchemeCreator: public Filler{
 public:
     enum alphabet{amino,nucl};
-    enum Action{Create, Delete};
+    enum Action{Create, Delete, Change};
     NewColorSchemeCreator(HI::GUITestOpStatus &_os, QString _schemeName, alphabet _al, Action _act = Create, bool cancel = false);
     NewColorSchemeCreator(HI::GUITestOpStatus &os, CustomScenario* c);
     virtual void commonScenario();
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 10f1ce3..ddb9416 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.cpp
@@ -65,10 +65,6 @@ CreateAnnotationWidgetFiller::CreateAnnotationWidgetFiller(HI::GUITestOpStatus &
 #define GT_METHOD_NAME "commonScenario"
 
 void CreateAnnotationWidgetFiller::commonScenario() {
-#ifdef Q_OS_MAC
-    GTKeyboardDriver::keyRelease(os,GTKeyboardDriver::key["cmd"]);
-#endif
-
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
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 fca9d5b..e441aac 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.cpp
@@ -19,30 +19,24 @@
  * MA 02110-1301, USA.
  */
 
-#include "CreateDocumentFromTextDialogFiller.h"
-#include <primitives/GTWidget.h>
-#include <primitives/GTPlainTextEdit.h>
-#include <primitives/GTLineEdit.h>
-#include <primitives/GTComboBox.h>
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QDir>
+#include <QGroupBox>
+#include <QPushButton>
+#include <QRadioButton>
+
 #include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
 #include <primitives/GTGroupBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTPlainTextEdit.h>
+#include <primitives/GTWidget.h>
+#include <utils/GTThread.h>
 
 #include <U2Core/Log.h>
 
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QRadioButton>
-#include <QGroupBox>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include "CreateDocumentFromTextDialogFiller.h"
 
 namespace U2 {
 
@@ -58,7 +52,7 @@ Filler(_os, "CreateDocumentFromTextDialog"), customSettings(_customSettings), al
     sequenceName = _sequenceName;
     pasteDataHere = _pasteDataHere;
     QString __documentLocation = QDir::cleanPath(QDir::currentPath() + "/" + _documentLocation);
-    documentLocation = __documentLocation;
+    documentLocation = QDir::toNativeSeparators(__documentLocation);
     comboBoxItems[FASTA] = "FASTA";
     comboBoxItems[Genbank] = "Genbank";
     comboBoxAlphabetItems[StandardDNA] = "Standard DNA";
@@ -84,6 +78,7 @@ void CreateDocumentFiller::commonScenario()
     QPlainTextEdit *plainText = dialog->findChild<QPlainTextEdit*>("sequenceEdit");
     GT_CHECK(plainText != NULL, "plain text not found");
     GTPlainTextEdit::setPlainText(os, plainText, pasteDataHere);
+    GTGlobals::sleep();
 
     if (customSettings){
         QGroupBox* customSettingsCheckBox = qobject_cast<QGroupBox*>(GTWidget::findWidget(os, "groupBox", dialog));
@@ -140,6 +135,7 @@ void CreateDocumentFiller::commonScenario()
         }
 
     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+    GTThread::waitForMainThread();
 }
 
 #undef GT_METHOD_NAME
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 d4ff5e6..56ab8ef 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.cpp
@@ -41,19 +41,23 @@ void EditAnnotationFiller::commonScenario()
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog != NULL, "dialog not found");
 
-    QLineEdit *lineEdit = dialog->findChild<QLineEdit*>("nameEdit");
-    GT_CHECK(lineEdit != NULL, "line edit not found");
+    QLineEdit *lineEdit = dialog->findChild<QLineEdit*>("leAnnotationName");
+    GT_CHECK(lineEdit != NULL, "line edit leAnnotationName not found");
     GTLineEdit::setText(os, lineEdit, annotationName);
 
-    QLineEdit *lineEdit1 = dialog->findChild<QLineEdit*>("locationEdit");
-    GT_CHECK(lineEdit != NULL, "line edit not found");
+    QRadioButton* gbFormatLocation = dialog->findChild<QRadioButton*>("rbGenbankFormat");
+    GT_CHECK(gbFormatLocation != NULL, "radio button rbGenbankFormat not found");
+    GTRadioButton::click(os, gbFormatLocation);
+
+    QLineEdit *lineEdit1 = dialog->findChild<QLineEdit*>("leLocation");
+    GT_CHECK(lineEdit != NULL, "line edit leLocation not found");
     GTLineEdit::setText(os, lineEdit1, location);
 
-    if (complementStrand != false)
-        {
-        QToolButton* complementStrand = dialog->findChild<QToolButton*>("complementButton");
+    if (complementStrand != false) {
+        QToolButton* complementStrand = dialog->findChild<QToolButton*>("tbDoComplement");
+        GT_CHECK(complementStrand != NULL, "tool button DoComplement not found");
         GTWidget::click(os, complementStrand);
-        }
+    }
 
     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
@@ -68,20 +72,24 @@ void EditAnnotationChecker::commonScenario() {
     GT_CHECK(dialog != NULL, "dialog not found");
 
     if (!annotationName.isEmpty()) {
-        QLineEdit *lineEdit = dialog->findChild<QLineEdit*>("nameEdit");
-        GT_CHECK(lineEdit != NULL, "line edit not found");
+        QLineEdit *lineEdit = dialog->findChild<QLineEdit*>("leAnnotationName");
+        GT_CHECK(lineEdit != NULL, "line edit leAnnotationName not found");
         QString text = lineEdit->text();
 
-        GT_CHECK (text == annotationName, "This name is not expected name");
+        GT_CHECK (text == annotationName, QString("The name is incorrect: got [%1], expected [%2]").arg(text).arg(annotationName));
     }
 
     if (!location.isEmpty()){
-        QLineEdit *lineEdit1 = dialog->findChild<QLineEdit*>("locationEdit");
-        GT_CHECK(lineEdit1 != NULL, "line edit not found");
+        QRadioButton* gbFormatLocation = dialog->findChild<QRadioButton*>("rbGenbankFormat");
+        GT_CHECK(gbFormatLocation != NULL, "radio button rbGenbankFormat not found");
+        GTRadioButton::click(os, gbFormatLocation);
+
+        QLineEdit *lineEdit1 = dialog->findChild<QLineEdit*>("leLocation");
+        GT_CHECK(lineEdit1 != NULL, "line edit leLocation not found");
 
         QString text = lineEdit1->text();
 
-        GT_CHECK (text == location, "This name is not expected name");
+        GT_CHECK (text == location, QString("The location is incorrect: got [%1], expected [%2]").arg(text).arg(location));
     }
 
     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
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 1b01fc9..57f4dc3 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h
@@ -29,8 +29,8 @@ using namespace HI;
     class EditAnnotationFiller : public Filler {
     public:
         EditAnnotationFiller(HI::GUITestOpStatus &_os, const QString &_annotationName, const QString &_location, bool _complementStrand = false)
-            :Filler(_os, "EditAnnotationDialog"), annotationName(_annotationName), location(_location), complementStrand(_complementStrand) {}
-        EditAnnotationFiller(HI::GUITestOpStatus &_os, CustomScenario* c): Filler(_os, "EditAnnotationDialog", c), annotationName(""), location(""), complementStrand(false) {}
+            :Filler(_os, "CreateAnnotationDialog"), annotationName(_annotationName), location(_location), complementStrand(_complementStrand) {}
+        EditAnnotationFiller(HI::GUITestOpStatus &_os, CustomScenario* c): Filler(_os, "CreateAnnotationDialog", c), annotationName(""), location(""), complementStrand(false) {}
         virtual void commonScenario();
     private:
         QString annotationName;
@@ -41,7 +41,7 @@ using namespace HI;
     class EditAnnotationChecker : public Filler {
     public:
         EditAnnotationChecker(HI::GUITestOpStatus &_os, const QString &_annotationName, const QString &_location)
-            :Filler(_os, "EditAnnotationDialog"), annotationName(_annotationName), location(_location){}
+            :Filler(_os, "CreateAnnotationDialog"), annotationName(_annotationName), location(_location){}
         virtual void commonScenario();
     private:
         QString annotationName;
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 b18a188..b9b626d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.cpp
@@ -54,7 +54,7 @@ void EditGroupAnnotationsFiller::commonScenario()
     GT_CHECK(lineEdit != NULL, "line edit not found");
     GTLineEdit::setText(os, lineEdit, groupName);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
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 d7ba4fc..0d2bc3a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.cpp
@@ -60,41 +60,26 @@ void EditQualifierFiller::commonScenario()
 
     QTextEdit *valueEdit = dialog->findChild<QTextEdit*>("valueEdit");
     GT_CHECK(valueEdit != NULL, "value line edit not found");
-    GTTextEdit::setText(os, valueEdit, valueName);
+    if (!valueName.isEmpty()) {
+        GTTextEdit::setText(os, valueEdit, valueName);
+    }
 
     QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
     GT_CHECK(box != NULL, "buttonBox is NULL");
     QPushButton* button = box->button(QDialogButtonBox::Ok);
     GT_CHECK(button !=NULL, "ok button is NULL");
-    
+
     if(closeErrormessageBox){
         GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
         GTGlobals::sleep();
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Enter"]);
+        GTKeyboardDriver::keyClick(Qt::Key_Enter);
         GTGlobals::sleep();
 
         GTLineEdit::setText(os, nameEdit, "nice_name", noCheck);
         GTTextEdit::setText(os, valueEdit, "nice_val");
     }
     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
-    
-}
-#undef GT_METHOD_NAME
-#undef GT_CLASS_NAME
-
-#define GT_CLASS_NAME "GTUtilsDialog::RenameQualifierFiller"
-#define GT_METHOD_NAME "commonScenario"
-void RenameQualifierFiller::commonScenario()
-{
-    QWidget *dialog = QApplication::activeModalWidget();
-    GT_CHECK(dialog != NULL, "dialog not found");
-
-    QLineEdit *nameEdit = dialog->findChild<QLineEdit*>();
-    GT_CHECK(nameEdit != NULL, "line edit not found");
-    GTLineEdit::setText(os, nameEdit, newName);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Enter"]);
-    GTGlobals::sleep();
 }
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
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 df84494..193a5c4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.h
@@ -28,8 +28,21 @@ namespace U2 {
 using namespace HI;
 class EditQualifierFiller : public Filler {
 public:
-    EditQualifierFiller(HI::GUITestOpStatus &_os, const QString &_qualifierName, const QString &_valueName, bool _noCheck = false, bool _closeErrorMessageBox = false)
-        :Filler(_os, "EditQualifierDialog"), qualifierName(_qualifierName), valueName(_valueName), noCheck(_noCheck), closeErrormessageBox(_closeErrorMessageBox){}
+    EditQualifierFiller(HI::GUITestOpStatus &_os, const QString &_qualifierName, const QString &_valueName,
+                        bool _noCheck = false, bool _closeErrorMessageBox = false)
+        : Filler(_os, "EditQualifierDialog"),
+          qualifierName(_qualifierName),
+          valueName(_valueName),
+          noCheck(_noCheck),
+          closeErrormessageBox(_closeErrorMessageBox) {}
+
+    EditQualifierFiller(HI::GUITestOpStatus &_os, const QString &_qualifierName,
+                        bool _noCheck = false, bool _closeErrorMessageBox = false)
+        : Filler(_os, "EditQualifierDialog"),
+          qualifierName(_qualifierName),
+          noCheck(_noCheck),
+          closeErrormessageBox(_closeErrorMessageBox) {}
+
     void commonScenario();
 private:
     QString qualifierName;
@@ -38,15 +51,6 @@ private:
     bool closeErrormessageBox;
 };
 
-class RenameQualifierFiller : public Filler {
-public:
-    RenameQualifierFiller(HI::GUITestOpStatus &_os, const QString &_newName)
-        :Filler(_os, ""), newName(_newName) {}
-    void commonScenario();
-private:
-    QString newName;
-};
-
 }
 
 #endif
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 4d006b5..0398569 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.cpp
@@ -19,24 +19,24 @@
  * MA 02110-1301, USA.
  */
 
-#include "EditSequenceDialogFiller.h"
-#include <drivers/GTMouseDriver.h>
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QDir>
+#include <QGroupBox>
+#include <QPushButton>
+
+#include <base_dialogs/MessageBoxFiller.h>
 #include <drivers/GTKeyboardDriver.h>
-#include <primitives/GTWidget.h>
-#include <primitives/GTLineEdit.h>
-#include <primitives/GTRadioButton.h>
-#include <primitives/GTComboBox.h>
+#include <drivers/GTMouseDriver.h>
 #include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
 #include <primitives/GTPlainTextEdit.h>
+#include <primitives/GTRadioButton.h>
 #include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
 
-#include <base_dialogs/MessageBoxFiller.h>
-
-#include <QtCore/QDir>
-#include <QApplication>
-#include <QPushButton>
-#include <QDialogButtonBox>
-#include <QGroupBox>
+#include "EditSequenceDialogFiller.h"
 
 namespace U2 {
 using namespace HI;
@@ -52,6 +52,7 @@ InsertSequenceFiller::InsertSequenceFiller(HI::GUITestOpStatus &_os, const QStri
     if (!documentLocation.isEmpty()) {
         documentLocation = QDir::cleanPath(QDir::currentPath() + "/" + documentLocation);
     }
+    documentLocation = QDir::toNativeSeparators(documentLocation);
     comboBoxItems[FASTA] = "FASTA";
     comboBoxItems[Genbank] = "Genbank";
     mergeAnnotations = _mergeAnnotations;
@@ -100,12 +101,12 @@ void InsertSequenceFiller::commonScenario() {
         switch(useMethod) {
         case GTGlobals::UseMouse:
             checkPos = QPoint(checkButton->rect().left() + 12, checkButton->rect().top() + 12);
-            GTMouseDriver::moveTo(os, checkButton->mapToGlobal(checkPos));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(checkButton->mapToGlobal(checkPos));
+            GTMouseDriver::click();
             break;
         case GTGlobals::UseKey:
             GTWidget::setFocus(os, checkButton);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+            GTKeyboardDriver::keyClick(Qt::Key_Space);
             break;
         default:
             break;
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 34243bc..9e788b0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.cpp
@@ -52,13 +52,13 @@ path(_path), name(_name), useMethod(method), format(_format), compressFile(compr
     }
 
     if (!path.isEmpty()) {
-        path = __path;
+        path = QDir::toNativeSeparators(__path);
     }
 
     comboBoxItems[Genbank] = "Genbank";
     comboBoxItems[GFF] = "GFF";
     comboBoxItems[CLUSTALW] = "CLUSTALW";
-    comboBoxItems[BAM] = "BAM File";
+    comboBoxItems[BAM] = "BAM";
     comboBoxItems[VCF] = "VCFv4";
     comboBoxItems[TEXT] = "Plain text";
     comboBoxItems[NWK] = "Newick Standard";
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 c1fd335..b1b2d48 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.cpp
@@ -23,19 +23,21 @@
 #include <QCheckBox>
 #include <QComboBox>
 #include <QDialogButtonBox>
+#include <QDir>
 #include <QPushButton>
 #include <QRadioButton>
 #include <QTableWidget>
 
-#include "ExportImageDialogFiller.h"
+#include <drivers/GTMouseDriver.h>
 #include <primitives/GTCheckBox.h>
 #include <primitives/GTComboBox.h>
 #include <primitives/GTLineEdit.h>
-#include <drivers/GTMouseDriver.h>
 #include <primitives/GTRadioButton.h>
 #include <primitives/GTSpinBox.h>
 #include <primitives/GTWidget.h>
 
+#include "ExportImageDialogFiller.h"
+
 namespace U2 {
 using namespace HI;
 
@@ -43,7 +45,7 @@ using namespace HI;
 
 ExportImage::ExportImage(HI::GUITestOpStatus &os, const QString &filePath, const QString &comboValue, int spinValue) :
     Filler(os, "ImageExportForm"),
-    filePath(filePath),
+    filePath(QDir::toNativeSeparators(filePath)),
     comboValue(comboValue),
     spinValue(spinValue)
 {
@@ -242,8 +244,8 @@ void SelectSubalignmentFiller::commonScenario() {
     p.setY(p.y() + 2);
     p = dialog->mapToGlobal(p);
 
-    GTMouseDriver::moveTo(os,p);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
     for(int i = 0; i < table->rowCount();i++){
         foreach (QString s, msaRegion.sequences){
             QCheckBox *box = qobject_cast<QCheckBox*>(table->cellWidget(i,0));
@@ -286,7 +288,7 @@ void ImageExportFormFiller::commonScenario() {
 
     QLineEdit* fileNameEdit = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "fileNameEdit", dialog));
     GT_CHECK(fileNameEdit, "fileNameEdit is NULL");
-    GTLineEdit::setText(os, fileNameEdit, parameters.fileName);
+    GTLineEdit::setText(os, fileNameEdit, QDir::toNativeSeparators(parameters.fileName));
 
     QComboBox* formatsBox = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "formatsBox", dialog));
     GT_CHECK(formatsBox, "formatsBox 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 9b3392a..4828cb6 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h
@@ -22,9 +22,11 @@
 #ifndef _U2_GT_RUNNABLES_EXPORT_IMAGE_DIALOG_FILLER_H_
 #define _U2_GT_RUNNABLES_EXPORT_IMAGE_DIALOG_FILLER_H_
 
-#include <U2Core/U2Region.h>
+#include <QDir>
+
+#include <utils/GTUtilsDialog.h>
 
-#include "utils/GTUtilsDialog.h"
+#include <U2Core/U2Region.h>
 
 namespace U2 {
 using namespace HI;
@@ -45,7 +47,7 @@ protected:
 class CircularViewExportImage : public Filler {
 public:
     CircularViewExportImage(HI::GUITestOpStatus &_os, QString _filePath, QString _comboValue = "", QString exportedSequenceName = "", int _spinValue=0) : Filler(_os, "ImageExportForm"),
-        filePath(_filePath),
+        filePath(QDir::toNativeSeparators(_filePath)),
         comboValue(_comboValue),
         spinValue(_spinValue),
         exportedSequenceName(exportedSequenceName)
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 e1ad793..952d313 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.cpp
@@ -187,16 +187,16 @@ void ImportToDatabaseDialogFiller::selectItems(const Action &action) {
     GT_CHECK(!itemList.isEmpty(), "Items list to select is empty");
 
     if (itemList.size() > 1) {
-        GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+        GTKeyboardDriver::keyPress(Qt::Key_Control);
     }
 
     foreach (const QString& itemText, itemList) {
         const QPoint itemCenter = getItemCenter(itemText);
-        GTMouseDriver::moveTo(os, itemCenter);
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(itemCenter);
+        GTMouseDriver::click();
     }
 
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 }
 #undef GT_METHOD_NAME
 
@@ -207,12 +207,12 @@ void ImportToDatabaseDialogFiller::editDestinationFolder(const Action &action) {
     GT_CHECK(action.data.contains(Action::ACTION_DATA__DESTINATION_FOLDER), "Not enough parameters to perform the action");
 
     const QPoint itemCenter = getFolderColumnCenter(action.data.value(Action::ACTION_DATA__ITEM).toString());
-    GTMouseDriver::moveTo(os, itemCenter);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(itemCenter);
+    GTMouseDriver::doubleClick();
 
     const QString dstFolder = action.data.value(Action::ACTION_DATA__DESTINATION_FOLDER).toString();
-    GTKeyboardDriver::keySequence(os, dstFolder);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keySequence(dstFolder);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
 }
 #undef GT_METHOD_NAME
 
@@ -237,8 +237,8 @@ void ImportToDatabaseDialogFiller::editPrivateOptions(const Action &action) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Override options"));
 
     const QPoint itemCenter = getItemCenter(action.data.value(Action::ACTION_DATA__ITEM).toString());
-    GTMouseDriver::moveTo(os, itemCenter);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(itemCenter);
+    GTMouseDriver::click(Qt::RightButton);
 }
 #undef GT_METHOD_NAME
 
@@ -249,8 +249,8 @@ void ImportToDatabaseDialogFiller::resetPrivateOptions(const Action &action) {
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Reset to general options"));
     const QPoint itemCenter = getItemCenter(action.data.value(Action::ACTION_DATA__ITEM).toString());
-    GTMouseDriver::moveTo(os, itemCenter);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(itemCenter);
+    GTMouseDriver::click(Qt::RightButton);
 }
 #undef GT_METHOD_NAME
 
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 3ae74b3..244bcd5 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.cpp
@@ -44,9 +44,6 @@ void GoToDialogFiller::commonScenario()
     QLineEdit *posEdit = dialog->findChild<QLineEdit*>("go_to_pos_line_edit");
     GT_CHECK(posEdit != NULL, "Line edit not found");
 
-#ifdef Q_OS_MAC
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["cmd"]);
-#endif
     GTLineEdit::setText(os, posEdit, QString::number(goTo));
 
     GTWidget::click(os, GTWidget::findButtonByText(os, "Go!", dialog));
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 d7977a6..c22d4bb 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.cpp
@@ -97,11 +97,7 @@ void ProjectTreeItemSelectorDialogFiller::commonScenario(){
     options.depth = GTGlobals::FindOptions::INFINITE_DEPTH;
 
     if (Separate == mode) {
-#ifdef Q_OS_MAC
-        GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["cmd"]);
-#else
-        GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
-#endif
+        GTKeyboardDriver::keyPress(Qt::Key_Control);
     }
 
     bool firstIsSelected = false;
@@ -113,29 +109,25 @@ void ProjectTreeItemSelectorDialogFiller::commonScenario(){
         if (!objects.isEmpty()) {
             foreach (const QString& objectName, itemsToSelect.value(documentName)) {
                 const QModelIndex objectIndex = GTUtilsProjectTreeView::findIndex(os, treeView, objectName, documentIndex, options);
-                GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, treeView, objectIndex));
-                GTMouseDriver::click(os);
+                GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, treeView, objectIndex));
+                GTMouseDriver::click();
                 if (!firstIsSelected && Continuous == mode) {
-                    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
+                    GTKeyboardDriver::keyPress(Qt::Key_Shift);
                     firstIsSelected = true;
                 }
             }
         } else {
-            GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, treeView, documentIndex));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, treeView, documentIndex));
+            GTMouseDriver::click();
         }
     }
 
     switch (mode) {
     case Separate:
-#ifdef Q_OS_MAC
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["cmd"]);
-#else
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["ctrl"]);
-#endif
+        GTKeyboardDriver::keyClick( Qt::Key_Control);
         break;
     case Continuous:
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["shift"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Shift);
         break;
     default:
         ; // empty default section to avoid GCC warning
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 cedbebd..1abfcf0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.cpp
@@ -39,7 +39,7 @@
 namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::exportSequenceOfSelectedAnnotationsFiller"
-selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int *_len) : Filler(_os, "RangeSelectionDialog")
+SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int *_len) : Filler(_os, "RangeSelectionDialog")
 {
     rangeType = Single;
     selectAll = true;
@@ -51,7 +51,7 @@ selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOp
     multipleRange = QString();
 }
 
-selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os) : Filler(_os, "RangeSelectionDialog")
+SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os) : Filler(_os, "RangeSelectionDialog")
 {
     rangeType = Single;
     selectAll = true;
@@ -63,7 +63,7 @@ selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOp
     multipleRange = QString();
 }
 
-selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int _minVal, int _maxVal) : Filler(_os, "RangeSelectionDialog")
+SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int _minVal, int _maxVal) : Filler(_os, "RangeSelectionDialog")
 {
     rangeType = Single;
     selectAll = false;
@@ -75,7 +75,7 @@ selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOp
     multipleRange = QString();
 }
 
-selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, const QString &range) : Filler(_os, "RangeSelectionDialog")
+SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, const QString &range) : Filler(_os, "RangeSelectionDialog")
 {
     rangeType = Multiple;
     selectAll = false;
@@ -87,7 +87,7 @@ selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOp
     multipleRange = range;
 }
 
-selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int _length, bool selectFromBegin) : Filler(_os, "RangeSelectionDialog")
+SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int _length, bool selectFromBegin) : Filler(_os, "RangeSelectionDialog")
 {
     rangeType = Single;
     selectAll = false;
@@ -100,7 +100,7 @@ selectSequenceRegionDialogFiller::selectSequenceRegionDialogFiller(HI::GUITestOp
 }
 
 #define GT_METHOD_NAME "commonScenario"
-void selectSequenceRegionDialogFiller::commonScenario()
+void SelectSequenceRegionDialogFiller::commonScenario()
 {
     GTGlobals::sleep(500);
     QWidget *dialog = QApplication::activeModalWidget();
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 b4f3e68..3293b90 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h
@@ -27,14 +27,14 @@
 namespace U2 {
 using namespace HI;
 
-    class selectSequenceRegionDialogFiller : public Filler {
+    class SelectSequenceRegionDialogFiller : public Filler {
     public:
         enum RangeType {Single, Multiple};
-        selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int *_len);
-        selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os);
-        selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int _minVal, int _maxVal);
-        selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, const QString &range);
-        selectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int _length, bool selectFromBegin = true);
+        SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int *_len);
+        SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os);
+        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();
     private:
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 79b3f14..8bf086c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.cpp
@@ -50,7 +50,7 @@ RemovePartFromSequenceDialogFiller::RemovePartFromSequenceDialogFiller(HI::GUITe
     : Filler(_os, "RemovePartFromSequenceDialog"), removeType(_removeType), format(_format), saveNew(_saveNew), recalculateQuals(false)
 {
     QString __saveToFile = QDir::cleanPath(QDir::currentPath() + "/" + _saveToFile);
-    saveToFile = __saveToFile;
+    saveToFile = QDir::toNativeSeparators(__saveToFile);
     comboBoxItems[FASTA] = "FASTA";
     comboBoxItems[Genbank] = "Genbank";
 }
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 ce806de..2faaff8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.cpp
@@ -69,9 +69,9 @@ void ReplaceSubsequenceDialogFiller::commonScenario()
 
     QPlainTextEdit *plainText = dialog->findChild<QPlainTextEdit*>("sequenceEdit");
     GT_CHECK(plainText != NULL, "plain text not found");
-    //GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["a"], GTKeyboardDriver::key["ctrl"]);
+    //GTKeyboardDriver::keyClick( GTKeyboardDriver::key["a"], Qt::ControlModifier);
     //GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
     GTPlainTextEdit::setPlainText(os, plainText, pasteDataHere);
 
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 2d78b32..fa3d47d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.cpp
@@ -90,8 +90,8 @@ void clickConnection(HI::GUITestOpStatus &os, QListWidget *list, const QString &
 
     QRect rect = list->visualItemRect(item);
     QPoint point = list->mapToGlobal(rect.center());
-    GTMouseDriver::moveTo(os, point);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(point);
+    GTMouseDriver::click();
 }
 
 void checkDocument(HI::GUITestOpStatus &os, const QString &name, bool mustBe) {
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 d4291b8..eaedc65 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
@@ -216,8 +216,8 @@ void ExportCoverageDialogFiller::checkCompress(const QVariant &actionData) {
 void ExportCoverageDialogFiller::checkOptionsVisibility(const QVariant &actionData) {
     CHECK_OP(os, );
     GT_CHECK(actionData.canConvert<bool>(), "Can't get an expected groupbox visibility state from the action data");
-    QGroupBox *gbAdditionalOptions = GTWidget::findExactWidget<QGroupBox *>(os, "gbAdditionalOptions", dialog);
-    GT_CHECK(NULL != gbAdditionalOptions, "An additional options groupbox wasn't found");
+    QWidget *gbAdditionalOptions = GTWidget::findWidget(os, "gbAdditionalOptions", dialog);
+    GT_CHECK(NULL != gbAdditionalOptions, "An additional options widget wasn't found");
     GT_CHECK(gbAdditionalOptions->isVisible() == actionData.toBool(), "An unexpected additional options groupbox visibility state");
 }
 #undef GT_METHOD_NAME
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 6a0e1d6..cacd542 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
@@ -29,7 +29,7 @@ using namespace HI;
 
 class ExportReadsDialogFiller : public Filler {
 public:
-    ExportReadsDialogFiller(HI::GUITestOpStatus &os, const QString &filePath, const QString format = "fasta", bool addToProject = true);
+    ExportReadsDialogFiller(HI::GUITestOpStatus &os, const QString &filePath, const QString format = "FASTA", bool addToProject = true);
     void commonScenario();
 private:
     QString filePath;
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
new file mode 100644
index 0000000..832d7e0
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.cpp
@@ -0,0 +1,65 @@
+/**
+* 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 "ExtractAssemblyRegionDialogFiller.h"
+
+#include <QApplication>
+
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.h>
+
+namespace U2 {
+using namespace HI;
+
+ExtractAssemblyRegionDialogFiller::ExtractAssemblyRegionDialogFiller(HI::GUITestOpStatus &os, const QString &filepath, const U2Region &region, const QString &format)
+	: Filler(os, "ExtractAssemblyRegionDialog"), filepath(filepath), regionToExtract(region), format(format) {}
+
+#define GT_CLASS_NAME "ExtractAssemblyRegionDialogFiller"
+
+#define GT_METHOD_NAME "commonScenario"
+void ExtractAssemblyRegionDialogFiller::commonScenario() {
+	QWidget *widget = QApplication::activeModalWidget();
+	CHECK_SET_ERR(NULL != widget, "Active modal widget is NULL");
+
+	QComboBox *docFormatCB = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "documentFormatComboBox", widget));
+	CHECK_SET_ERR(NULL != docFormatCB, "docFormatCB widget is NULL");
+	GTComboBox::setIndexWithText(os, docFormatCB, format);
+
+	QLineEdit *startLineEdit = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "start_edit_line", widget));
+	CHECK_SET_ERR(NULL != startLineEdit, "startLineEdit widget is NULL");
+	GTLineEdit::setText(os, startLineEdit, QString::number(regionToExtract.startPos));
+
+	QLineEdit *endLineEdit = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "end_edit_line", widget));
+	CHECK_SET_ERR(NULL != endLineEdit, "endLineEdit widget is NULL");
+	GTLineEdit::setText(os, endLineEdit, QString::number(regionToExtract.endPos()));
+
+	QLineEdit* filepathLineEdit = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "filepathLineEdit", widget));
+	CHECK_SET_ERR(NULL != filepathLineEdit, "filepathLineEdit widget is NULL");
+	GTLineEdit::setText(os, filepathLineEdit, filepath);
+
+	GTUtilsDialog::clickButtonBox(os, widget, QDialogButtonBox::Ok);
+}
+#undef GT_METHOD_NAME
+
+#undef GT_CLASS_NAME
+
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..5022455
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.h
@@ -0,0 +1,45 @@
+/**
+* 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_EXTRACT_ASSEMBLY_REGION_DIALOG_FILLER_H_
+#define _U2_EXTRACT_ASSEMBLY_REGION_DIALOG_FILLER_H_
+
+#include "utils/GTUtilsDialog.h"
+
+#include <U2Core/U2Region.h>
+
+namespace U2 {
+using namespace HI;
+
+class ExtractAssemblyRegionDialogFiller : public Filler {
+public:
+    ExtractAssemblyRegionDialogFiller(HI::GUITestOpStatus &os, const QString &filepath, const U2Region &region, const QString &format);
+	void commonScenario();
+
+private:
+	QString filepath;
+	U2Region regionToExtract;
+	QString format;
+};
+
+}
+
+#endif //guardian
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 fcb8f8e..8a6ba00 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
@@ -92,7 +92,7 @@ void BuildTreeDialogFiller::commonScenario() {
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
-    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreemntDialogFiller(os));
+    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreementDialogFiller(os));
     if(saveTree!="default"){
         QLineEdit* saveLineEdit = qobject_cast<QLineEdit*>(GTWidget::findWidget(os,"fileNameEdit"));
         GTLineEdit::setText(os,saveLineEdit, saveTree);
@@ -144,7 +144,7 @@ void BuildTreeDialogFillerPhyML::commonScenario() {
     QWidget *dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
-    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreemntDialogFiller(os));
+    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreementDialogFiller(os));
 
     GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox*>(os, "algorithmBox", dialog), "PhyML Maximum Likelihood");
 
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 9cb4d5b..3ea6e0b 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
@@ -18,29 +18,24 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  * MA 02110-1301, USA.
  */
-#include "DistanceMatrixDialogFiller.h"
 
-#include <primitives/GTWidget.h>
-#include <primitives/GTLineEdit.h>
-#include <primitives/GTRadioButton.h>
-#include <primitives/GTComboBox.h>
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QDir>
+#include <QGroupBox>
+#include <QPushButton>
+
+#include <GTGlobals.h>
 #include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
 #include <primitives/GTGroupBox.h>
-#include "GTGlobals.h"
-
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QGroupBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QGroupBox>
-#endif
-namespace U2{
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTWidget.h>
+
+#include "DistanceMatrixDialogFiller.h"
+
+namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::DistanceMatrixDialogFiller"
 
@@ -62,7 +57,7 @@ DistanceMatrixDialogFiller::DistanceMatrixDialogFiller(HI::GUITestOpStatus &os,
     excludeGaps(true),
     saveToFile(true),
     format(_format),
-    path(_path)
+    path(QDir::toNativeSeparators(_path))
 {
 
 }
@@ -94,19 +89,20 @@ void DistanceMatrixDialogFiller::commonScenario(){
         GTRadioButton::click(os,percentsRB);
     }
 
-    if(saveToFile){
-        GTGroupBox::setChecked(os, "saveBox", dialog);
+    if (format != NONE) {
+        if (saveToFile) {
+            GTGroupBox::setChecked(os, "saveBox", dialog);
 
-        QLineEdit* fileEdit = dialog->findChild<QLineEdit*>("fileEdit");
-        GTLineEdit::setText(os, fileEdit,path);
+            QLineEdit* fileEdit = dialog->findChild<QLineEdit*>("fileEdit");
+            GTLineEdit::setText(os, fileEdit, QDir::toNativeSeparators(path));
 
-        if(format == HTML){
-            QRadioButton* htmlRB = dialog->findChild<QRadioButton*>("htmlRB");
-            GTRadioButton::click(os,htmlRB);
-        }
-        else{
-            QRadioButton* csvRB = dialog->findChild<QRadioButton*>("csvRB");
-            GTRadioButton::click(os,csvRB);
+            if (format == HTML) {
+                QRadioButton* htmlRB = dialog->findChild<QRadioButton*>("htmlRB");
+                GTRadioButton::click(os, htmlRB);
+            } else {
+                QRadioButton* csvRB = dialog->findChild<QRadioButton*>("csvRB");
+                GTRadioButton::click(os, csvRB);
+            }
         }
     }
     QCheckBox* checkBox = dialog->findChild<QCheckBox*>("checkBox");
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 0d4237c..21d208c 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
@@ -29,7 +29,8 @@ class DistanceMatrixDialogFiller : public Filler {
 public:
     enum SaveFormat {
         HTML,
-        CSV
+        CSV,
+        NONE
     };
 
     DistanceMatrixDialogFiller(HI::GUITestOpStatus &os, bool _hamming=true, bool _counts=true, bool _excludeGaps=true);
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 47387cb..0b51538 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
@@ -122,8 +122,8 @@ void ExtractSelectedAsMSADialogFiller::commonScenario() {
     p.setY(p.y()+2);
     p=dialog->mapToGlobal(p);
 
-    GTMouseDriver::moveTo(os,p);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
     for(int i=0; i<table->rowCount() ;i++){
         foreach(QString s, list){
             QCheckBox *box = qobject_cast<QCheckBox*>(table->cellWidget(i,0));
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 506f33b..fe980a0 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
@@ -30,21 +30,21 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::GenerateAlignmentProfileDialogFiller"
 
-LicenseAgreemntDialogFiller::LicenseAgreemntDialogFiller(HI::GUITestOpStatus &os) :
+LicenseAgreementDialogFiller::LicenseAgreementDialogFiller(HI::GUITestOpStatus &os) :
     Filler(os, "LicenseDialog")
 {
 
 }
 
 #define GT_METHOD_NAME "commonScenario"
-void LicenseAgreemntDialogFiller::commonScenario() {
+void LicenseAgreementDialogFiller::commonScenario() {
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
     GTGlobals::sleep();
 
     QPushButton* accept = dialog->findChild<QPushButton*>("acceptButton");
     GTWidget::click(os, accept);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 }
 #undef GT_METHOD_NAME
 
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 fada796..8c0a6c0 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
@@ -27,9 +27,9 @@
 namespace U2 {
 using namespace HI;
 
-class LicenseAgreemntDialogFiller : public Filler {
+class LicenseAgreementDialogFiller : public Filler {
 public:
-    LicenseAgreemntDialogFiller(HI::GUITestOpStatus &os);
+    LicenseAgreementDialogFiller(HI::GUITestOpStatus &os);
 
     void commonScenario();
 };
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 7ef91c8..796a863 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
@@ -19,23 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include "ExportAnnotationsDialogFiller.h"
-#include <primitives/GTWidget.h>
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QDir>
+#include <QPushButton>
+
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTRadioButton.h>
-#include <primitives/GTComboBox.h>
-#include <primitives/GTCheckBox.h>
+#include <primitives/GTWidget.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 "ExportAnnotationsDialogFiller.h"
 
 namespace U2 {
 
@@ -55,13 +50,13 @@ Filler(_os, "U2__ExportAnnotationsDialog"), softMode(false), format(_format), sa
 }
 
 void ExportAnnotationsFiller::init(const QString &exportToFile) {
-    this->exportToFile = QDir::cleanPath(QDir::currentPath() + "/" + exportToFile);
+    this->exportToFile = QDir::toNativeSeparators(QDir::cleanPath(QDir::currentPath() + "/" + exportToFile));
 
-    comboBoxItems[bed] = "bed";
-    comboBoxItems[genbank] = "genbank";
-    comboBoxItems[gff] = "gff";
-    comboBoxItems[gtf] = "gtf";
-    comboBoxItems[csv] = "csv";
+    comboBoxItems[bed] = "BED";
+    comboBoxItems[genbank] = "Genbank";
+    comboBoxItems[gff] = "GFF";
+    comboBoxItems[gtf] = "GTF";
+    comboBoxItems[csv] = "CSV";
 }
 
 #define GT_METHOD_NAME "commonScenario"
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 be4dbe5..67e2d8c 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
@@ -19,22 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include "ExportSequences2MSADialogFiller.h"
-#include <primitives/GTWidget.h>
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QDir>
+#include <QPushButton>
+
 #include <primitives/GTCheckBox.h>
 #include <primitives/GTComboBox.h>
 #include <primitives/GTLineEdit.h>
+#include <primitives/GTWidget.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 "ExportSequences2MSADialogFiller.h"
 
 namespace U2 {
 
@@ -43,11 +38,11 @@ ExportSequenceAsAlignmentFiller::ExportSequenceAsAlignmentFiller(HI::GUITestOpSt
                                 ExportSequenceAsAlignmentFiller::FormatToUse _format, bool addDocumentToProject, GTGlobals::UseMethod method):
 Filler(_os, "U2__ExportSequences2MSADialog"), name(_name), useMethod(method), format(_format), addToProject(addDocumentToProject) {
     QString __path = QDir::cleanPath(QDir::currentPath() + "/" + _path);
-    if (__path.at(__path.count() - 1) != '/') {
-        __path += '/';
+    if (__path.at(__path.count() - 1) != QDir::separator()) {
+        __path += QDir::separator();
     }
 
-    path = __path;
+    path = QDir::toNativeSeparators(__path);
 
     comboBoxItems[Clustalw] = "CLUSTALW";
     comboBoxItems[Fasta] = "FASTA";
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 2e05f0d..890953c 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
@@ -19,24 +19,19 @@
  * MA 02110-1301, USA.
  */
 
-#include "ExportSequencesDialogFiller.h"
-#include <primitives/GTWidget.h>
-#include <primitives/GTLineEdit.h>
-#include <primitives/GTComboBox.h>
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QDir>
+#include <QPushButton>
+
 #include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
 #include <primitives/GTRadioButton.h>
 #include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.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 "ExportSequencesDialogFiller.h"
 
 namespace U2 {
 
@@ -56,6 +51,14 @@ ExportSelectedRegionFiller::ExportSelectedRegionFiller(HI::GUITestOpStatus &_os,
     path = __path;
 }
 
+ExportSelectedRegionFiller::ExportSelectedRegionFiller(GUITestOpStatus &os, const QString &filePath)
+    : Filler(os, "U2__ExportSequencesDialog"),
+      translate(false),
+      saveAllAminoFrames(true) {
+    path = QFileInfo(filePath).dir().path() + "/";
+    name = QFileInfo(filePath).fileName();
+}
+
 ExportSelectedRegionFiller::ExportSelectedRegionFiller(HI::GUITestOpStatus &os, CustomScenario *customScenario)
     : Filler(os, "U2__ExportSequencesDialog", customScenario),
       translate(false), saveAllAminoFrames(true)
@@ -118,7 +121,7 @@ ExportSequenceOfSelectedAnnotationsFiller::ExportSequenceOfSelectedAnnotationsFi
     /*if (__path.at(__path.count() - 1) != '/') {
     __path += '/';
     }*/
-    path = __path;
+    path = QDir::toNativeSeparators(__path);
 
     comboBoxItems[Fasta] = "FASTA";
     comboBoxItems[Fastq] = "FASTQ";
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 3beaa93..38ff248 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
@@ -27,42 +27,43 @@
 namespace U2 {
 using namespace HI;
 
-    class ExportSelectedRegionFiller : public Filler {
-    public:
-        ExportSelectedRegionFiller(HI::GUITestOpStatus &_os, const QString &_path, const QString &_name,
-            bool translate = false, const QString& seqName = QString(), bool saveAllAminoFrames = true);
-        ExportSelectedRegionFiller(HI::GUITestOpStatus &os, CustomScenario *customScenario);
+class ExportSelectedRegionFiller : public Filler {
+public:
+    ExportSelectedRegionFiller(HI::GUITestOpStatus &_os, const QString &_path, const QString &_name,
+                               bool translate = false, const QString& seqName = QString(), bool saveAllAminoFrames = true);
+    ExportSelectedRegionFiller(HI::GUITestOpStatus &os, const QString &filePath);
+    ExportSelectedRegionFiller(HI::GUITestOpStatus &os, CustomScenario *customScenario);
 
-        void commonScenario();
-        void setPath(const QString &value);
-        void setName(const QString &value);
+    void commonScenario();
+    void setPath(const QString &value);
+    void setName(const QString &value);
 
-        static QString defaultExportPath;
-    private:
-        QString path, name;
-        QString seqName;
-        bool translate;
-        bool saveAllAminoFrames;
-    };
+    static QString defaultExportPath;
+private:
+    QString path, name;
+    QString seqName;
+    bool translate;
+    bool saveAllAminoFrames;
+};
 
-    class ExportSequenceOfSelectedAnnotationsFiller : public Filler {
-    public:
-        enum FormatToUse {Fasta, Fastq, Gff, Genbank};
-        enum MergeOptions {SaveAsSeparate, Merge};
-        ExportSequenceOfSelectedAnnotationsFiller(HI::GUITestOpStatus &_os, const QString &_path, FormatToUse _format, MergeOptions _options, int _gapLength = 0,
-                                                  bool _addDocToProject = true, bool _exportWithAnnotations = false, GTGlobals::UseMethod method = GTGlobals::UseMouse);
-        void commonScenario();
-    private:
-        QString path;
-        int gapLength;
-        FormatToUse format;
-        bool addToProject;
-        bool exportWithAnnotations;
-        MergeOptions options;
-        GTGlobals::UseMethod useMethod;
-        QMap<FormatToUse, QString> comboBoxItems;
-        QMap<MergeOptions, QString> mergeRadioButtons;
-    };
+class ExportSequenceOfSelectedAnnotationsFiller : public Filler {
+public:
+    enum FormatToUse {Fasta, Fastq, Gff, Genbank};
+    enum MergeOptions {SaveAsSeparate, Merge};
+    ExportSequenceOfSelectedAnnotationsFiller(HI::GUITestOpStatus &_os, const QString &_path, FormatToUse _format, MergeOptions _options, int _gapLength = 0,
+                                              bool _addDocToProject = true, bool _exportWithAnnotations = false, GTGlobals::UseMethod method = GTGlobals::UseMouse);
+    void commonScenario();
+private:
+    QString path;
+    int gapLength;
+    FormatToUse format;
+    bool addToProject;
+    bool exportWithAnnotations;
+    MergeOptions options;
+    GTGlobals::UseMethod useMethod;
+    QMap<FormatToUse, QString> comboBoxItems;
+    QMap<MergeOptions, QString> mergeRadioButtons;
+};
 
 }
 
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 322af00..7e8ea32 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
@@ -49,7 +49,7 @@ ImportAnnotationsToCsvFiller::ImportAnnotationsToCsvFiller(HI::GUITestOpStatus &
         bool _columnSeparator, const QString &_separator, int _numberOfLines,
         const QString &_skipAllLinesStartsWith, bool _interpretMultipleAsSingle,
         bool _removeQuotesButton, const QString &_defaultAnnotationName, const RoleParameters& _roleParameters, GTGlobals::UseMethod method):
-Filler(_os, "ImportAnnotationsFromCSVDialog"), fileToRead(_fileToRead), resultFile(_resultFile), format(_format),
+Filler(_os, "ImportAnnotationsFromCSVDialog"), fileToRead(_fileToRead), resultFile(QDir::toNativeSeparators(_resultFile)), format(_format),
        addResultFileToProject(_addResultFileToProject), columnSeparator(_columnSeparator),
        numberOfLines(_numberOfLines), separator(_separator),
        skipAllLinesStartsWith(_skipAllLinesStartsWith), interpretMultipleAsSingle(_interpretMultipleAsSingle),
@@ -170,14 +170,14 @@ void ImportAnnotationsToCsvFiller::commonScenario()
 
     if (columnSeparator) {
         QRadioButton* columnSeparator = qobject_cast<QRadioButton*>(GTWidget::findWidget(os, "columnSeparatorRadioButton", dialog));
-        columnSeparator->setChecked(true);
+        GTRadioButton::click(os, columnSeparator);
 
         QLineEdit *separatorEdit = GTWidget::findExactWidget<QLineEdit *>(os, "separatorEdit", dialog);
-        GTLineEdit::setText(os, separatorEdit, "");
+        GTLineEdit::setText(os, separatorEdit, separator, false, true);
 
-        GTClipboard::setText(os, separator);
-        GTWidget::click(os, separatorEdit);
-        GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+//        GTClipboard::setText(os, separator);
+//        GTWidget::click(os, separatorEdit);
+//        GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
     } else {
         QRadioButton* scriptRadioButton = qobject_cast<QRadioButton*>(GTWidget::findWidget(os, "scriptRadioButton", dialog));
         scriptRadioButton->setChecked(true);
@@ -208,8 +208,8 @@ void ImportAnnotationsToCsvFiller::commonScenario()
         GT_CHECK(previewTable->item(0, r.column) != NULL, "Table item not found");
         previewTable->scrollToItem(previewTable->item(0, r.column));
         GTGlobals::sleep(200);
-        GTMouseDriver::moveTo(os, GTTableWidget::headerItemCenter(os, previewTable, r.column));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(GTTableWidget::headerItemCenter(os, previewTable, r.column));
+        GTMouseDriver::click();
     }
 
     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
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 a0ca9d4..5129e4a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.cpp
@@ -20,15 +20,15 @@
  */
 
 #include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QTreeWidget>
-#endif
+
+#include <QApplication>
+#include <QCheckBox>
+#include <QTreeWidget>
 
 #include "FindEnzymesDialogFiller.h"
+
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
 #include <primitives/GTTreeWidget.h>
 #include <primitives/GTWidget.h>
 
@@ -38,8 +38,22 @@ namespace U2 {
 
 FindEnzymesDialogFiller::FindEnzymesDialogFiller(HI::GUITestOpStatus &os, const QStringList &enzymesToFind, CustomScenario *scenario) :
     Filler(os, "FindEnzymesDialog", scenario),
-    enzymesToFind(enzymesToFind)
-{
+    enzymesToFind(enzymesToFind),
+    searchStart(-1),
+    searchEnd(-1),
+    excludeStart(-1),
+    excludeEnd(-1) {
+}
+
+FindEnzymesDialogFiller::FindEnzymesDialogFiller(GUITestOpStatus &os, const QStringList &enzymesToFind,
+                                                 qint64 searchRegionStart, qint64 searchRegionEnd, qint64 excludedRegionStart, qint64 excludedRegionEnd,
+                                                 CustomScenario *scenario)
+    : Filler(os, "FindEnzymesDialog", scenario),
+      enzymesToFind(enzymesToFind),
+      searchStart(searchRegionStart),
+      searchEnd(searchRegionEnd),
+      excludeStart(excludedRegionStart),
+      excludeEnd(excludedRegionEnd) {
 }
 
 #define GT_METHOD_NAME "run"
@@ -58,6 +72,34 @@ void FindEnzymesDialogFiller::commonScenario() {
         GTTreeWidget::checkItem(os, item);
     }
 
+    if (searchStart != -1 && searchEnd != -1) {
+        QWidget* regionSelector = GTWidget::findWidget(os, "region_selector_with_excluded");
+        GT_CHECK(regionSelector != NULL, "range_selector not found");
+
+        QLineEdit* start = GTWidget::findExactWidget<QLineEdit*>(os, "startLineEdit", regionSelector);
+        GT_CHECK(start != NULL, "startLineEdit of 'Search In' region not found");
+        GTLineEdit::setText(os, start, QString::number(searchStart));
+
+        QLineEdit* end = GTWidget::findExactWidget<QLineEdit*>(os, "endLineEdit", regionSelector);
+        GTWidget::click(os, end);
+        GT_CHECK(end != NULL, "endLineEdit of 'Search In' region not found");
+        GTLineEdit::setText(os, end, QString::number(searchEnd));
+    }
+
+    if (excludeStart != -1 && excludeEnd != -1) {
+        QCheckBox* exclude = GTWidget::findExactWidget<QCheckBox*>(os, "excludeCheckBox");
+        GTCheckBox::setChecked(os, exclude);
+
+        QLineEdit* start = GTWidget::findExactWidget<QLineEdit*>(os, "excludeStartLineEdit");
+        GT_CHECK(start != NULL, "excludeStartLineEdit of 'Exclude' region not found");
+        GTLineEdit::setText(os, start, QString::number(excludeStart));
+
+        QLineEdit* end = GTWidget::findExactWidget<QLineEdit*>(os, "excludeEndLinEdit");
+        GTWidget::click(os, end);
+        GT_CHECK(end != NULL, "excludeEndLinEdit of 'Exclude' region not found");
+        GTLineEdit::setText(os, end, QString::number(excludeEnd));
+    }
+
     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 }
 #undef GT_METHOD_NAME
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 1dae064..118e9df 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h
@@ -30,11 +30,19 @@ using namespace HI;
 class FindEnzymesDialogFiller : public Filler {
 public:
     FindEnzymesDialogFiller(HI::GUITestOpStatus &os, const QStringList &enzymesToFind, CustomScenario *scenario = NULL);
+    FindEnzymesDialogFiller(HI::GUITestOpStatus &os, const QStringList &enzymesToFind,
+                            qint64 searchRegionStart, qint64 searchRegionEnd,
+                            qint64 excludedRegionStart = -1, qint64 excludedRegionEnd = -1,
+                            CustomScenario *scenario = NULL);
 
     void commonScenario();
 
 private:
     QStringList enzymesToFind;
+    qint64 searchStart;
+    qint64 searchEnd;
+    qint64 excludeStart;
+    qint64 excludeEnd;
 };
 
 }   // namespace U2
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 7e7f58b..972497c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.cpp
@@ -46,12 +46,12 @@ void PrimerLibrarySelectorFiller::commonScenario() {
     CHECK_SET_ERR(!okButton->isEnabled(), "the OK button is enabled");
 
     const int primerNumber = (-1 == number ? GTUtilsPrimerLibrary::librarySize(os) - 1 : number);
-    GTMouseDriver::moveTo(os, GTUtilsPrimerLibrary::getPrimerPoint(os, primerNumber));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsPrimerLibrary::getPrimerPoint(os, primerNumber));
+    GTMouseDriver::click();
     CHECK_SET_ERR(okButton->isEnabled(), "the OK button is disabled");
 
     if (doubleClick) {
-        GTMouseDriver::doubleClick(os);
+        GTMouseDriver::doubleClick();
     } else {
         GTWidget::click(os, okButton);
     }
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 8fc0903..01941a2 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
@@ -48,10 +48,10 @@ void AliasesDialogFiller::commonScenario(){
     QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"paramAliasesTableWidget",dialog));
     QMap<QPoint*, QString>::iterator i;
     for (i = map.begin(); i != map.end(); ++i){
-        GTMouseDriver::moveTo(os,GTTableView::getCellPosition(os,table,i.key()->x(),i.key()->y()));
-        GTMouseDriver::doubleClick(os);
-        GTKeyboardDriver::keySequence(os, i.value());
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+        GTMouseDriver::moveTo(GTTableView::getCellPosition(os,table,i.key()->x(),i.key()->y()));
+        GTMouseDriver::doubleClick();
+        GTKeyboardDriver::keySequence(i.value());
+        GTKeyboardDriver::keyClick( Qt::Key_Enter);
     }
 
     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
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 c35adc0..33d37e4 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
@@ -38,8 +38,8 @@ void ConfigurationWizardFiller::commonScenario() {
     GT_CHECK(dialog, "activeModalWidget is NULL");
     GTGlobals::sleep(500);
 
-    GTMouseDriver::moveTo(os, QPoint(dialog->pos().x() + dialog->rect().width() / 2, dialog->pos().y() + 5));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(QPoint(dialog->pos().x() + dialog->rect().width() / 2, dialog->pos().y() + 5));
+    GTMouseDriver::click();
 
     foreach (const QString &s, radioNames) {
         QRadioButton *b = GTWidget::findExactWidget<QRadioButton *>(os, s, dialog);
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 8be46fe..b5fd76b 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
@@ -129,13 +129,13 @@ QString CreateElementWithCommandLineToolFiller::dataTypeToString(const Parameter
 void CreateElementWithCommandLineToolFiller::processDataType(QTableView *table, int row, const InOutDataType &type) {
     setType(table, row, type.first);
     {
-        GTMouseDriver::moveTo(os, GTTableView::getCellPosition(os, table, 2, row));
-        GTMouseDriver::doubleClick(os);
+        GTMouseDriver::moveTo(GTTableView::getCellPosition(os, table, 2, row));
+        GTMouseDriver::doubleClick();
 
         QComboBox* box = qobject_cast<QComboBox*>(QApplication::focusWidget());
         GTComboBox::setIndexWithText(os, box, type.second);
 #ifdef Q_OS_WIN
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Enter);
 #endif
     }
 }
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 752a7e6..2f43d67 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
@@ -92,14 +92,14 @@ private:
 
     template <typename DataType>
     void setType(QTableView *table, int row, const DataType &type) {
-        GTMouseDriver::moveTo(os, GTTableView::getCellPosition(os, table, 1, row));
-        GTMouseDriver::doubleClick(os);
-        GTThread::waitForMainThread(os);
+        GTMouseDriver::moveTo(GTTableView::getCellPosition(os, table, 1, row));
+        GTMouseDriver::doubleClick();
+        GTThread::waitForMainThread();
 
         QComboBox* box = qobject_cast<QComboBox*>(QApplication::focusWidget());
         GTComboBox::setIndexWithText(os, box, dataTypeToString(type));
 #ifdef Q_OS_WIN
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Enter);
 #endif
     }
 
@@ -114,20 +114,20 @@ private:
             GTWidget::click(os, addRowButton);
             table->scrollTo(model->index(row, 0));
 
-            GTMouseDriver::moveTo(os, GTTableView::getCellPosition(os, table, 0, row));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(GTTableView::getCellPosition(os, table, 0, row));
+            GTMouseDriver::click();
 
-            GTKeyboardDriver::keySequence(os, rowData.name);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+            GTKeyboardDriver::keySequence(rowData.name);
+            GTKeyboardDriver::keyClick( Qt::Key_Enter);
 
             processDataType(table, row, rowData.type);
 
-            GTMouseDriver::moveTo(os, GTTableView::getCellPosition(os, table, model->columnCount() - 1, row));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(GTTableView::getCellPosition(os, table, model->columnCount() - 1, row));
+            GTMouseDriver::click();
 
             if (!rowData.description.isEmpty()) {
-                GTKeyboardDriver::keySequence(os, rowData.description);
-                GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+                GTKeyboardDriver::keySequence(rowData.description);
+                GTKeyboardDriver::keyClick( Qt::Key_Enter);
             }
             row++;
         }
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 7c49eee..bc62f4b 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
@@ -49,9 +49,9 @@ void DashboardsManagerDialogFiller::selectDashboards(HI::GUITestOpStatus &os, QS
     QTreeWidget* listWidget = GTWidget::findExactWidget<QTreeWidget*>(os, "listWidget", dialog);
     foreach (QString name, names) {
         QTreeWidgetItem* item = GTTreeWidget::findItem(os, listWidget, name);
-        GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+        GTKeyboardDriver::keyPress(Qt::Key_Control);
         GTTreeWidget::click(os, item);
-        GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+        GTKeyboardDriver::keyRelease( Qt::Key_Control);
     }
 }
 #undef GT_METHOD_NAME
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 4db0154..9509b31 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
@@ -102,7 +102,7 @@ void Primer3DialogFiller::commonScenario() {
 #ifdef Q_OS_MAC
         dialog->close();
 #else
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Escape);
 #endif
     }
 }
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp
index e96f7fc..d51c2d4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp
@@ -187,7 +187,7 @@ void NcbiSearchDialogFiller::clickResultByNum(const QVariant &actionData) {
     GTTreeWidget::click(os, resultItems[actionData.toInt()]);
 
     GTGlobals::sleep();
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 }
 #undef GT_METHOD_NAME
 
@@ -225,12 +225,12 @@ void NcbiSearchDialogFiller::clickResultBySize(const QVariant &actionData) {
 void NcbiSearchDialogFiller::selectResultsByNumbers(const QVariant &actionData) {
     CHECK_OP(os, );
     GT_CHECK(actionData.canConvert<QList<int> >(), "Can't get the list of result numbers from the action data");
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
     const QList<int> numbers = actionData.value<QList<int> >();
     foreach (int number, numbers) {
         clickResultByNum(number);
     }
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 }
 #undef GT_METHOD_NAME
 
@@ -238,11 +238,11 @@ void NcbiSearchDialogFiller::selectResultsByNumbers(const QVariant &actionData)
 void NcbiSearchDialogFiller::selectResultsByIds(const QVariant &actionData) {
     CHECK_OP(os, );
     GT_CHECK(actionData.canConvert<QStringList>(), "Can't get the list of result IDs from the action data");
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
     foreach (const QString &id, actionData.toStringList()) {
         clickResultById(id);
     }
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 }
 #undef GT_METHOD_NAME
 
@@ -250,11 +250,11 @@ void NcbiSearchDialogFiller::selectResultsByIds(const QVariant &actionData) {
 void NcbiSearchDialogFiller::selectResultsByDescs(const QVariant &actionData) {
     CHECK_OP(os, );
     GT_CHECK(actionData.canConvert<QStringList>(), "Can't get the list of result descriptions from the action data");
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
     foreach (const QString &desc, actionData.toStringList()) {
         clickResultByDesc(desc);
     }
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 }
 #undef GT_METHOD_NAME
 
@@ -262,12 +262,12 @@ void NcbiSearchDialogFiller::selectResultsByDescs(const QVariant &actionData) {
 void NcbiSearchDialogFiller::selectResultsBySizes(const QVariant &actionData) {
     CHECK_OP(os, );
     GT_CHECK(actionData.canConvert<QList<int> >(), "Can't get the list of result sizes from the action data");
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
     const QList<int> sizes = actionData.value<QList<int> >();
     foreach (int size, sizes) {
         clickResultBySize(size);
     }
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 }
 #undef GT_METHOD_NAME
 
@@ -327,6 +327,10 @@ void NCBISearchDialogFillerDeprecated::commonScenario(){
     GTGlobals::sleep(5000);
 
 
+    if (term != ""){
+        QComboBox* term_box = GTWidget::findExactWidget<QComboBox*>(os, "term_box", dialog);
+        GTComboBox::setIndexWithText(os, term_box, term);
+    }
     if (resultLimit!=-1){
         QSpinBox* resultLimitBox = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "resultLimitBox", dialog));
         GTSpinBox::setValue(os, resultLimitBox, resultLimit, GTGlobals::UseKeyBoard);
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h
index 54c6e60..88d2203 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h
@@ -84,11 +84,12 @@ private:
 // use NCBISearchDialogFillerDeprecated instead
 class NCBISearchDialogFillerDeprecated : public Filler {
 public:
-    NCBISearchDialogFillerDeprecated(HI::GUITestOpStatus &os, QString _query, bool _doubleEnter = false, int _resultLimit=-1) :
+    NCBISearchDialogFillerDeprecated(HI::GUITestOpStatus &os, QString _query, bool _doubleEnter = false, int _resultLimit=-1, QString _term = "") :
         Filler(os, "SearchGenbankSequenceDialog"),
         query(_query),
         doubleEnter(_doubleEnter),
-        resultLimit(_resultLimit){}
+        resultLimit(_resultLimit),
+        term(_term){}
     void commonScenario();
 
 private:
@@ -96,6 +97,7 @@ private:
 
     bool doubleEnter;
     int resultLimit;
+    QString term;
 
     bool shownCorrect();
     int getResultNumber();
diff --git a/src/plugins/GUITestBase/src/test_runner/GUITestRunner.cpp b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.cpp
index 0bb6cec..05866bb 100644
--- a/src/plugins/GUITestBase/src/test_runner/GUITestRunner.cpp
+++ b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.cpp
@@ -88,6 +88,7 @@ GUITestRunner::~GUITestRunner()
 }
 
 void GUITestRunner::sl_runSelected(){
+    GUITestService::setEnvVariablesForGuiTesting();
     QList<QTreeWidgetItem*> selectedItems = tree->selectedItems();
     foreach (QTreeWidgetItem* item, selectedItems) {
         if(item->childCount() == 0){ // single test, not suite
@@ -104,6 +105,7 @@ void GUITestRunner::sl_runSelected(){
     }
 }
 void GUITestRunner::sl_runAllGUITests(){
+    GUITestService::setEnvVariablesForGuiTesting();
     if(GUITestService::getGuiTestService()->isEnabled()){
         hide();
         GUITestService::getGuiTestService()->runAllGUITests();
diff --git a/src/plugins/GUITestBase/src/tests/GUIInitialChecks.cpp b/src/plugins/GUITestBase/src/tests/GUIInitialChecks.cpp
index 11e97b7..4041d42 100644
--- a/src/plugins/GUITestBase/src/tests/GUIInitialChecks.cpp
+++ b/src/plugins/GUITestBase/src/tests/GUIInitialChecks.cpp
@@ -66,11 +66,11 @@ GUI_TEST_CLASS_DEFINITION(pre_action_0000) {
     GTUtilsDialog::cleanup(os, GTUtilsDialog::NoFailOnUnfinished);
 
 #ifndef Q_OS_WIN
-    GTMouseDriver::release(os, Qt::RightButton);
-    GTMouseDriver::release(os);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["alt"]);
+    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
 
@@ -114,7 +114,7 @@ GUI_TEST_CLASS_DEFINITION(pre_action_0004) {
 
 GUI_TEST_CLASS_DEFINITION(pre_action_0005) {
     if(QDir(sandBoxDir).exists()){
-        PermissionsSetter::setReadWrite(os, sandBoxDir);
+        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)) {
@@ -148,15 +148,15 @@ GUI_TEST_CLASS_DEFINITION(post_check_0001) {
 GUI_TEST_CLASS_DEFINITION(post_action_0000) {
     const Qt::KeyboardModifiers modifiers = QGuiApplication::queryKeyboardModifiers();
     if (modifiers & Qt::ShiftModifier) {
-        GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+        GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     }
 
     if (modifiers & Qt::ControlModifier) {
-        GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+        GTKeyboardDriver::keyRelease( Qt::Key_Control);
     }
 
     if (modifiers & Qt::AltModifier) {
-        GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["alt"]);
+        GTKeyboardDriver::keyRelease(Qt::Key_Alt);
     }
 
     uiLog.trace(QString("post_action_0000: next keyboard modifiers are pressed after test: %1").arg(QGuiApplication::queryKeyboardModifiers()));
@@ -184,17 +184,17 @@ GUI_TEST_CLASS_DEFINITION(post_action_0002) {
     if (AppContext::getProject() != NULL) {
         GTGlobals::sleep();
         GTWidget::click(os, GTUtilsProjectTreeView::getTreeView(os));
-        GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+        GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
         GTGlobals::sleep(100);
 
         GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
         GTUtilsDialog::waitForDialog(os, new AppCloseMessageBoxDialogFiller(os));
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
         GTGlobals::sleep(500);
 #ifdef Q_OS_MAC
         GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 #else
-        GTKeyboardDriver::keyClick(os, 'q', GTKeyboardDriver::key["ctrl"]);
+        GTKeyboardDriver::keyClick( 'q', Qt::ControlModifier);
         GTGlobals::sleep(100);
 #endif
         GTGlobals::sleep(500);
@@ -220,7 +220,7 @@ GUI_TEST_CLASS_DEFINITION(post_action_0003) {
         GTFile::restore(os, testDir + "_common_data/scenarios/project/proj5.uprj");
     }
     if(QDir(sandBoxDir).exists()){
-        PermissionsSetter::setReadWrite(os, sandBoxDir);
+        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)) {
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 357b670..e1e3c8d 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
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <QApplication>
 #include <QTableView>
 
 #include <U2Core/GUrlUtils.h>
@@ -41,20 +42,25 @@
 #include "system/GTFile.h"
 #include <base_dialogs/GTFileDialog.h>
 #include "GTGlobals.h"
+#include <system/GTClipboard.h>
 #include <drivers/GTKeyboardDriver.h>
 #include "utils/GTKeyboardUtils.h"
 #include "primitives/GTMenu.h"
 #include <drivers/GTMouseDriver.h>
+#include <primitives/GTLineEdit.h>
 #include <primitives/GTSpinBox.h>
 #include <primitives/GTTreeWidget.h>
 #include <primitives/GTWidget.h>
 #include <base_dialogs/MessageBoxFiller.h>
 #include "primitives/PopupChooser.h"
+#include "primitives/GTComboBox.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
+#include "runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.h"
+#include "runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.h"
 #include "runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h"
 #include "runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
@@ -73,16 +79,16 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
 //2. Zoom in until overview selection transforms to cross-hair
     for (int i = 0;i < 24;i++){
-        GTKeyboardDriver::keyClick(os, '=', GTKeyboardDriver::key["shift"]);
+        GTKeyboardDriver::keyClick( '=', Qt::ShiftModifier);
         GTGlobals::sleep(100);
     }
     GTGlobals::sleep(2000);
 //3. Move it to the very left
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["home"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Home);
     GTGlobals::sleep(2000);
 //4. Try to zoom out
     for (int i = 0;i < 24;i++){
-        GTKeyboardDriver::keyClick(os, '-');
+        GTKeyboardDriver::keyClick('-');
         GTGlobals::sleep(100);
     }
 //Expected state: coordinates is not negative
@@ -246,7 +252,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 //    15. Set format "Histogram".
 //    Expected state: the file extension is ".bedgrap.histogram.gz".
     actions << ExportCoverageDialogFiller::Action(ExportCoverageDialogFiller::SetFormat, "Histogram");
-    actions << ExportCoverageDialogFiller::Action(ExportCoverageDialogFiller::CheckFilePath, QDir::toNativeSeparators(GUrlUtils::getDefaultDataPath() + "/chrM_coverage.bedgrap.histogram.gz"));
+    actions << ExportCoverageDialogFiller::Action(ExportCoverageDialogFiller::CheckFilePath, QDir::toNativeSeparators(GUrlUtils::getDefaultDataPath() + "/chrM_coverage.histogram.gz"));
 
     actions << ExportCoverageDialogFiller::Action(ExportCoverageDialogFiller::ClickCancel, QVariant());
     GTUtilsDialog::waitForDialog(os, new ExportCoverageDialogFiller(os, actions));
@@ -282,8 +288,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
 
     QDir().mkpath(sandBoxDir + "common_assembly_browser/test_0012");
 
-    PermissionsSetter p;
-    p.setReadOnly(os, sandBoxDir + "common_assembly_browser/test_0012");
+    GTFile::setReadOnly(os, sandBoxDir + "common_assembly_browser/test_0012");
     actions << ExportCoverageDialogFiller::Action(ExportCoverageDialogFiller::EnterFilePath, QDir::toNativeSeparators(sandBoxDir + "common_assembly_browser/test_0012/test_0012.txt"));
     actions << ExportCoverageDialogFiller::Action(ExportCoverageDialogFiller::ExpectMessageBox, "");
     actions << ExportCoverageDialogFiller::Action(ExportCoverageDialogFiller::ClickOk, "");
@@ -450,7 +455,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015) {
 //    Expected state: a popup completer appears, it contains extensions for the compressed format.
     GTUtilsWorkflowDesigner::clickParameter(os, "Output file");
     URLWidget *urlWidget = qobject_cast<URLWidget *>(GTUtilsWorkflowDesigner::getParametersTable(os)->findChild<URLWidget *>());
-    GTKeyboardDriver::keySequence(os, "aaa");
+    GTKeyboardDriver::keySequence("aaa");
     GTGlobals::sleep(1000);
     CHECK_SET_ERR(NULL != urlWidget, "Output file url widget was not found");
     QTreeWidget *completer = urlWidget->findChild<QTreeWidget *>();
@@ -487,6 +492,7 @@ GUI_TEST_CLASS_DEFINITION(test_0016) {
     GTUtilsAssemblyBrowser::zoomToMax(os);
     GTUtilsDialog::waitForDialog(os, new ExportCoverageDialogFiller(os, actions));
     GTUtilsAssemblyBrowser::callExportCoverageDialog(os, GTUtilsAssemblyBrowser::Reads);
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0017) {
@@ -608,9 +614,9 @@ GUI_TEST_CLASS_DEFINITION(test_0019) {
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Set reference");
 
     //6. Add the "human_T1" object to the selection.
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
     GTUtilsProjectTreeView::click(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 
     //7. Click the "Set reference sequence" actions menu item.
     //Expected: message box about two sequences appears.
@@ -751,6 +757,299 @@ GUI_TEST_CLASS_DEFINITION(test_0025) {
     GTWidget::click(os, GTAction::button(os, "setReferenceAction"));
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0026_1) {
+    //    1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //    2. Select region to extract and import extracted file to project
+    GTUtilsDialog::waitForDialog(os, new ExtractAssemblyRegionDialogFiller(os, sandBoxDir + "/test_26_1.bam", U2Region(228, 1488), "BAM"));
+    GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "/test_26_1.ugenedb"));
+    QAbstractButton* button = GTAction::button(os, "ExtractAssemblyRegion");
+    GTWidget::click(os, button);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //	  3. Check expected coverage values
+    QLabel *coveredRegionsLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os, "CoveredRegionsLabel", GTUtilsMdi::activeWindow(os)));
+    CHECK_SET_ERR(coveredRegionsLabel != NULL, "cannot convert widget to CoveredRegionsLabel");
+
+    QString textFromLabel = coveredRegionsLabel->text();
+    CHECK_SET_ERR(textFromLabel.contains("229"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("222"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("215"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("194"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("192"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("190"), "expected coverage value not found");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0026_2) {
+    //    1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //    2. Select region to extract and import extracted file to project
+    GTUtilsDialog::waitForDialog(os, new ExtractAssemblyRegionDialogFiller(os, sandBoxDir + "/test_26_2.sam", U2Region(4500, 300), "SAM"));
+    GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "/test_26_2.ugenedb"));
+    QAbstractButton* button = GTAction::button(os, "ExtractAssemblyRegion");
+    GTWidget::click(os, button);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //	  3. Check expected coverage values
+    QLabel *coveredRegionsLabel = qobject_cast<QLabel *>(GTWidget::findWidget(os, "CoveredRegionsLabel", GTUtilsMdi::activeWindow(os)));
+    CHECK_SET_ERR(coveredRegionsLabel != NULL, "cannot convert widget to CoveredRegionsLabel");
+
+    QString textFromLabel = coveredRegionsLabel->text();
+    CHECK_SET_ERR(textFromLabel.contains("157"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("65"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("55"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("53"), "expected coverage value not found");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0026_3) {
+    //    1. Open "_common_data/ugenedb/chrM.sorted.bam.ugenedb".
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //    2. Select region to extract and import extracted file to project
+    GTUtilsDialog::waitForDialog(os, new ExtractAssemblyRegionDialogFiller(os, sandBoxDir + "/test_26_3.ugenedb", U2Region(6500, 900), "UGENE Database"));
+    QAbstractButton* button = GTAction::button(os, "ExtractAssemblyRegion");
+    GTWidget::click(os, button);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //	  3. Check expected coverage values
+    QLabel *coveredRegionsLabel = qobject_cast<QLabel *>(GTWidget::findWidget(os, "CoveredRegionsLabel", GTUtilsMdi::activeWindow(os)));
+    CHECK_SET_ERR(coveredRegionsLabel != NULL, "cannot convert widget to CoveredRegionsLabel");
+
+    QString textFromLabel = coveredRegionsLabel->text();
+    CHECK_SET_ERR(textFromLabel.contains("330"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("253"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("193"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("187"), "expected coverage value not found");
+    CHECK_SET_ERR(textFromLabel.contains("186"), "expected coverage value not found");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0027){
+//    1. Open assembly
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+//    2. Open COI.aln
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/assembly/", "example-alignment.ugenedb");
+//    3. Drag and drop COI object to assembly browser
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok,
+                                                                "Only sequence or variant track  objects can be added to assembly browser"));
+    GTUtilsAssemblyBrowser::addRefFromProject(os, "COI");
+//    Expected: error message box appears
+    GTGlobals::sleep(500);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0028){
+//1. Open assembly
+    GTFileDialog::openFile(os, dataDir + "samples/Assembly", "chrM.fa");
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+//2. Lock document for editing
+    GTUtilsDocument::lockDocument(os, "chrM.sorted.bam.ugenedb");
+//3. Try to add refrence
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok,
+                                                                "This action requires changing the assembly object that is locked for editing"));
+    GTUtilsAssemblyBrowser::addRefFromProject(os, "chrM", GTUtilsProjectTreeView::findIndex(os, "chrM.fa"));
+//Expected: Error message appears
+    GTGlobals::sleep(500);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0029){
+//    1. Open assembly
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+    for(int i = 0; i<15; i++){
+        GTUtilsAssemblyBrowser::zoomIn(os, GTUtilsAssemblyBrowser::Hotkey);
+    }
+//    2. Go to some position using position selector on the toolbar(check "Go" button and "Enter" hotkey)
+    GTUtilsAssemblyBrowser::goToPosition(os, 1000);
+    int scrollVal = GTUtilsAssemblyBrowser::getScrollBar(os, Qt::Horizontal)->value();
+    CHECK_SET_ERR(scrollVal == 999, QString("Unexpected scroll value1: %1").arg(scrollVal))
+
+    GTUtilsAssemblyBrowser::goToPosition(os, 2000);
+    scrollVal = GTUtilsAssemblyBrowser::getScrollBar(os, Qt::Horizontal)->value();
+    CHECK_SET_ERR(scrollVal == 1999, QString("Unexpected scroll value2: %1").arg(scrollVal))
+
+    GTGlobals::sleep(500);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0030){
+//    1. Open assembly
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+//    2. Move reads area right and down with mouse
+    GTUtilsAssemblyBrowser::zoomToReads(os);
+    for(int i = 0; i<8; i++){
+        GTUtilsAssemblyBrowser::zoomIn(os, GTUtilsAssemblyBrowser::Hotkey);
+    }
+    GTGlobals::sleep(1000);
+
+    int initHorVal = GTUtilsAssemblyBrowser::getScrollBar(os, Qt::Horizontal)->value();
+    int initVerVal = GTUtilsAssemblyBrowser::getScrollBar(os, Qt::Vertical)->value();
+
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(-200, -200));
+    GTMouseDriver::release();
+
+    GTGlobals::sleep(500);
+//    Check scrollbars, rules values etc.
+    int finalHorVal = GTUtilsAssemblyBrowser::getScrollBar(os, Qt::Horizontal)->value();
+    int finalVerVal = GTUtilsAssemblyBrowser::getScrollBar(os, Qt::Vertical)->value();
+    CHECK_SET_ERR(finalHorVal > initHorVal, QString("Unexpected horisontal scroll values. Initial: %1, final %2").arg(initHorVal).arg(finalHorVal));
+    CHECK_SET_ERR(finalVerVal > initVerVal, QString("Unexpected vertical scroll values. Initial: %1, final %2").arg(initVerVal).arg(finalVerVal));
+
+    GTGlobals::sleep(500);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0031){
+//    1. Open assembly
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+//    2. Click "zoom to reads" link
+    GTUtilsAssemblyBrowser::zoomToReads(os);
+//    Check zoom
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList()<<"Export"));
+    GTUtilsAssemblyBrowser::callContextMenu(os, GTUtilsAssemblyBrowser::Reads);
+    GTGlobals::sleep(500);
+}
+
+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");
+//    2. Rename assembly object
+    GTUtilsProjectTreeView::rename(os, "chrM", "new_name");
+//    Check UGENE title
+    GTUtilsApp::checkUGENETitle(os, "-* UGENE - [chrM.sorted.bam [as] new_name]");
+    GTGlobals::sleep(500);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0033){
+//    1. Open assembly
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+//    2. Open "Assembly browser settings" OP tab
+    GTWidget::click(os, GTWidget::findWidget(os, "OP_ASS_SETTINGS"));
+    GTUtilsAssemblyBrowser::zoomToReads(os);
+//    3. Change reads highlighting to "strand direction" and "complement"
+    QComboBox* box = GTWidget::findExactWidget<QComboBox*>(os, "READS_HIGHLIGHTNING_COMBO");
+    GTComboBox::setIndexWithText(os, box, "Strand direction");
+    GTComboBox::setIndexWithText(os, box, "Paired reads");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0034){
+//    1. Open assembly
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+//    2. Open "Assembly browser settings" OP tab
+    GTWidget::click(os, GTWidget::findWidget(os, "OP_ASS_SETTINGS"));
+    GTUtilsAssemblyBrowser::zoomToReads(os);
+//    3. Change consensus algorithm
+    QComboBox* box = GTWidget::findExactWidget<QComboBox*>(os, "consensusAlgorithmCombo");
+    GTComboBox::setIndexWithText(os, box, "SAMtools");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0035){
+    GTFileDialog::openFile(os, dataDir + "samples/Assembly/chrM.fa");
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+
+    GTUtilsAssemblyBrowser::addRefFromProject(os, "chrM", GTUtilsProjectTreeView::findIndex(os, "chrM.fa"));
+
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
+
+            QLineEdit* filepathLineEdit = GTWidget::findExactWidget<QLineEdit*>(os, "filepathLineEdit", dialog);
+            GTLineEdit::setText(os, filepathLineEdit, sandBoxDir + "chrM.snp");
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+//    Export consensus
+    GTUtilsDialog::waitForDialog(os, new ExportConsensusDialogFiller(os, new Scenario()));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export consensus variations..."));
+    GTWidget::click(os, GTWidget::findWidget(os, "Consensus area"), Qt::RightButton);
+    GTUtilsProjectTreeView::checkItem(os, "chrM_consensus.gb");
+
+    GTUtilsProjectTreeView::checkItem(os, "chrM.snp");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0036){
+    //1. Open assembly
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+    //Check these hotkeys: up, down, left, right, +, -, pageup, pagedown
+    GTUtilsAssemblyBrowser::zoomToReads(os);
+
+    for(int i = 0; i<5; i++){
+        GTUtilsAssemblyBrowser::zoomIn(os, GTUtilsAssemblyBrowser::Hotkey);
+    }
+    GTGlobals::sleep();
+
+    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++){
+        GTKeyboardDriver::keyClick(Qt::Key_Down);
+        GTGlobals::sleep(500);
+    }
+    CHECK_SET_ERR(ver->value() == 3, QString("unexpected vertical value 1: %1").arg(ver->value()));
+
+    for(int i = 0; i < 2; i++){
+        GTKeyboardDriver::keyClick(Qt::Key_Up);
+        GTGlobals::sleep(500);
+    }
+    CHECK_SET_ERR(ver->value() == 1, QString("unexpected vertical value 2: %1").arg(ver->value()));
+
+    for(int i = 0; i < 3; i++){
+        GTKeyboardDriver::keyClick(Qt::Key_Left);
+        GTGlobals::sleep(500);
+    }
+    CHECK_SET_ERR(hor->value() == initHor - 3, QString("unexpected horizontal value 1: %1").arg(hor->value()));
+
+    for(int i = 0; i < 2; i++){
+        GTKeyboardDriver::keyClick(Qt::Key_Right);
+        GTGlobals::sleep(500);
+    }
+    CHECK_SET_ERR(hor->value() == initHor - 1, QString("unexpected horizontal value 2: %1").arg(hor->value()));
+
+    GTKeyboardDriver::keyClick(Qt::Key_PageDown);
+    GTGlobals::sleep(500);
+    CHECK_SET_ERR(ver->value() > 100, QString("unexpected vertical value 3: %1").arg(ver->value()));
+
+    GTKeyboardDriver::keyClick(Qt::Key_PageUp);
+    GTGlobals::sleep(500);
+    CHECK_SET_ERR(ver->value() == 1, QString("unexpected vertical value 4: %1").arg(ver->value()));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0037){
+//    1. Open assembly
+    GTFileDialog::openFile(os, testDir + "_common_data/ugenedb", "chrM.sorted.bam.ugenedb");
+//    2. Use context menu on any read: {copy read data}
+    GTUtilsAssemblyBrowser::zoomToReads(os);
+
+    for(int i = 0; i<10; i++){
+        GTUtilsAssemblyBrowser::zoomIn(os, GTUtilsAssemblyBrowser::Hotkey);
+    }
+    GTGlobals::sleep();
+//    Check clipboard
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "copy_read_information",
+                                                      GTGlobals::UseMouse));
+    GTMenu::showContextMenu(os, GTWidget::findWidget(os, "assembly_reads_area"));
+    QString clipboard = GTClipboard::text(os);
+    CHECK_SET_ERR(clipboard.startsWith('>') && clipboard.contains("From") &&
+                  clipboard.contains("Length") && clipboard.contains("Row") &&
+                  clipboard.contains("Cigar") && clipboard.contains("Strand"), "Unexpected clipboard: " + clipboard)
+//    Check reads position
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Copy current position to clipboard",
+                                                      GTGlobals::UseMouse));
+    GTMenu::showContextMenu(os, GTWidget::findWidget(os, "assembly_reads_area"));
+    GTGlobals::sleep(1000);
+    clipboard = GTClipboard::text(os);
+    bool ok;
+    clipboard.toInt(&ok);
+    CHECK_SET_ERR(ok, "unexpected clipboard: " + clipboard)
+}
+
 } // namespace GUITest_Assembly_browser
 } // namespace U2
 
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 7cb51d7..cdef0a2 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
@@ -49,6 +49,20 @@ GUI_TEST_CLASS_DECLARATION(test_0022)
 GUI_TEST_CLASS_DECLARATION(test_0023)
 GUI_TEST_CLASS_DECLARATION(test_0024)
 GUI_TEST_CLASS_DECLARATION(test_0025)
+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)
+GUI_TEST_CLASS_DECLARATION(test_0028)
+GUI_TEST_CLASS_DECLARATION(test_0029)
+GUI_TEST_CLASS_DECLARATION(test_0030)
+GUI_TEST_CLASS_DECLARATION(test_0031)
+GUI_TEST_CLASS_DECLARATION(test_0032)
+GUI_TEST_CLASS_DECLARATION(test_0033)
+GUI_TEST_CLASS_DECLARATION(test_0034)
+GUI_TEST_CLASS_DECLARATION(test_0035)
+GUI_TEST_CLASS_DECLARATION(test_0036)
+GUI_TEST_CLASS_DECLARATION(test_0037)
 
 #undef GUI_TEST_SUITE
 } // namespace U2
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 f3f5bbf..87067fc 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
@@ -114,7 +114,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
     GTUtilsLog::checkContainsMessage(os, l1, false);
 
     QFileInfoList fList = QDir(sandBoxDir).entryInfoList();
-    CHECK_SET_ERR(fList.size() == 14, QString("unexpected files number: %1").arg(fList.size()));
+    CHECK_SET_ERR(fList.size() == 15, QString("unexpected files number: %1").arg(fList.size()));
 
 //    3. Rename index files to refName.fa.1.ebwt. Repeat step 1.
     QFile::rename(sandBoxDir + refName + ".1.ebwt", sandBoxDir + refName + ".fa.1.ebwt");
@@ -136,7 +136,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
     GTUtilsLog::checkContainsMessage(os, l2, false);
 
     QFileInfoList fListRenamed = QDir(sandBoxDir).entryInfoList();
-    CHECK_SET_ERR(fListRenamed.size() == 14, QString("2: unexpected files number: %1").arg(fListRenamed.size()));
+    CHECK_SET_ERR(fListRenamed.size() == 16, QString("2: unexpected files number: %1").arg(fListRenamed.size()));
 
 //    4.  An index file is set as a reference sequence
     GTLogTracer l3("Launching Bowtie build indexer tool");
@@ -152,7 +152,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
     GTUtilsLog::checkContainsMessage(os, l3, false);
 
     QFileInfoList fListIndex = QDir(sandBoxDir).entryInfoList();
-    CHECK_SET_ERR(fListIndex.size() == 14, QString("3: unexpected files number: %1").arg(fListIndex.size()));
+    CHECK_SET_ERR(fListIndex.size() == 17, QString("3: unexpected files number: %1").arg(fListIndex.size()));
 
 }
 
@@ -237,7 +237,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
     GTUtilsLog::checkContainsMessage(os, l1, false);
 
     QFileInfoList fList = QDir(sandBoxDir).entryInfoList();
-    CHECK_SET_ERR(fList.size() == 14, QString("unexpected files number: %1").arg(fList.size()));
+    CHECK_SET_ERR(fList.size() == 15, QString("unexpected files number: %1").arg(fList.size()));
 
 //    3. Rename index files to refName.fa.1.bt2. Repeat step 1.
     QFile::rename(sandBoxDir + refName + ".1.bt2", sandBoxDir + refName + ".fa.1.bt2");
@@ -259,7 +259,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
     GTUtilsLog::checkContainsMessage(os, l2, false);
 
     QFileInfoList fListRenamed = QDir(sandBoxDir).entryInfoList();
-    CHECK_SET_ERR(fListRenamed.size() == 14, QString("2: unexpected files number: %1").arg(fListRenamed.size()));
+    CHECK_SET_ERR(fListRenamed.size() == 16, QString("2: unexpected files number: %1").arg(fListRenamed.size()));
 
 //    4.  An index file is set as a reference sequence
     GTLogTracer l3("Launching Bowtie build indexer tool");
@@ -275,7 +275,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
     GTUtilsLog::checkContainsMessage(os, l3, false);
 
     QFileInfoList fListIndex = QDir(sandBoxDir).entryInfoList();
-    CHECK_SET_ERR(fListIndex.size() == 14, QString("3: unexpected files number: %1").arg(fListIndex.size()));
+    CHECK_SET_ERR(fListIndex.size() == 17, QString("3: unexpected files number: %1").arg(fListIndex.size()));
 
 }
 
@@ -358,7 +358,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
     foreach (QFileInfo info, fList) {
         s.append(info.absoluteFilePath() + "\n");
     }
-    CHECK_SET_ERR(fList.size() == 14, s + QString("unexpected files number: %1").arg(fList.size()));
+    CHECK_SET_ERR(fList.size() == 15, s + QString("unexpected files number: %1").arg(fList.size()));
 
 //    3. Rename index files to refName.fa.1.ebwt. Repeat step 1.
     QFile::rename(sandBoxDir + refName + ".fa.amb", sandBoxDir + refName + ".amb");
@@ -382,7 +382,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
     foreach (QFileInfo info, fListRenamed) {
         s1.append(info.absoluteFilePath() + "\n");
     }
-    CHECK_SET_ERR(fListRenamed.size() == 14, s1 + QString("2: unexpected files number: %1").arg(fListRenamed.size()));
+    CHECK_SET_ERR(fListRenamed.size() == 16, s1 + QString("2: unexpected files number: %1").arg(fListRenamed.size()));
 
 //    4.  An index file is set as a reference sequence
     GTLogTracer l3("bwa index -p");
@@ -402,7 +402,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
     foreach (QFileInfo info, fListIndex) {
         s2.append(info.absoluteFilePath() + "\n");
     }
-    CHECK_SET_ERR(fListIndex.size() == 14, s2 + QString("3: unexpected files number: %1").arg(fListIndex.size()));
+    CHECK_SET_ERR(fListIndex.size() == 19, s2 + QString("3: unexpected files number: %1").arg(fListIndex.size()));
 
 }
 
@@ -480,7 +480,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
     GTUtilsLog::checkContainsMessage(os, l1, false);
 
     QFileInfoList fList = QDir(sandBoxDir).entryInfoList();
-    CHECK_SET_ERR(fList.size() == 13, QString("unexpected files number: %1").arg(fList.size()));
+    CHECK_SET_ERR(fList.size() == 14, QString("unexpected files number: %1").arg(fList.size()));
 
 //    3. Rename index files to refName.fa.1.ebwt. Repeat step 1.
     QFile::rename(sandBoxDir + refName + ".fa.amb", sandBoxDir + refName + ".amb");
@@ -500,7 +500,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
     GTUtilsLog::checkContainsMessage(os, l2, false);
 
     QFileInfoList fListRenamed = QDir(sandBoxDir).entryInfoList();
-    CHECK_SET_ERR(fListRenamed.size() == 13, QString("2: unexpected files number: %1").arg(fListRenamed.size()));
+    CHECK_SET_ERR(fListRenamed.size() == 15, QString("2: unexpected files number: %1").arg(fListRenamed.size()));
 
 //    4.  An index file is set as a reference sequence
     GTLogTracer l3("bwa index -p");
@@ -516,7 +516,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
     GTUtilsLog::checkContainsMessage(os, l3, false);
 
     QFileInfoList fListIndex = QDir(sandBoxDir).entryInfoList();
-    CHECK_SET_ERR(fListIndex.size() == 14, QString("3: unexpected files number: %1").arg(fListIndex.size()));
+    CHECK_SET_ERR(fListIndex.size() == 19, QString("3: unexpected files number: %1").arg(fListIndex.size()));
 
 }
 
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 b6cf57b..e641988 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
@@ -58,39 +58,40 @@ void test1(HI::GUITestOpStatus &os, QString s="") {
     if (s=="arr"){
         GTUtilsQueryDesigner::addAlgorithm(os,array[i]);
 
-        GTMouseDriver::moveTo(os,GTUtilsQueryDesigner::getItemCenter(os, array[i]));
+        GTMouseDriver::moveTo(GTUtilsQueryDesigner::getItemCenter(os, array[i]));
         p = GTMouseDriver::getMousePosition();
         p.setX(GTUtilsQueryDesigner::getItemRight(os, array[i]));
     }
     else{
         GTUtilsQueryDesigner::addAlgorithm(os,s);
 
-        GTMouseDriver::moveTo(os,GTUtilsQueryDesigner::getItemCenter(os, s));
+        GTMouseDriver::moveTo(GTUtilsQueryDesigner::getItemCenter(os, s));
         p = GTMouseDriver::getMousePosition();
         p.setX(GTUtilsQueryDesigner::getItemRight(os, s));
     }
-    GTMouseDriver::moveTo(os,p);
+    GTMouseDriver::moveTo(p);
 
-    GTMouseDriver::press(os);
+    GTMouseDriver::press();
     if (s=="arr"){
         p.setX(GTUtilsQueryDesigner::getItemLeft(os,array[i])+100);
     }
     else{
         p.setX(GTUtilsQueryDesigner::getItemLeft(os,s)+100);
     }
-    GTMouseDriver::moveTo(os,p);
+    GTMouseDriver::moveTo(p);
 
-    GTMouseDriver::release(os);
+    GTMouseDriver::release();
+    GTGlobals::sleep(500);
 
 //4. Select the resized element and press <Del>
     if (s=="arr"){
-        GTMouseDriver::moveTo(os,GTUtilsQueryDesigner::getItemCenter(os, array[i]));
+        GTMouseDriver::moveTo(GTUtilsQueryDesigner::getItemCenter(os, array[i]));
     }
     else{
-        GTMouseDriver::moveTo(os,GTUtilsQueryDesigner::getItemCenter(os, s));
+        GTMouseDriver::moveTo(GTUtilsQueryDesigner::getItemCenter(os, s));
     }
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
     GTGlobals::sleep(500);
     //check no elements on scene
     QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os,"sceneView"));
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 56e46bd..f6145bd 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.cpp
@@ -63,8 +63,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // 3. Create annotation using menu {Actions->Add->New Annotation}
@@ -74,7 +74,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann2", "complement(1.. 20)"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
 // 5. Press right mouse button on sequence area, use context menu item {Add->New Annotation} to create annotation
@@ -102,8 +102,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // 3. Create annotation using menu {Actions->Add->New Annotation}
@@ -113,7 +113,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann2", "complement(1.. 20)"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
 // 5. Press right mouse button on sequence area, use context menu item {Add->New Annotation} to create annotation
@@ -141,8 +141,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // 3. Create annotation using menu {Actions->Add->New Annotation}
@@ -152,7 +152,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann2", "complement(1.. 20)"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
 // 5. Press right mouse button on sequence area, use context menu item {Add->New Annotation} to create annotation
@@ -180,8 +180,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 //
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 //
 // 3. Do menu {Actions->Add->New Annotation}
@@ -215,8 +215,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 //
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 //
 // 3. Do menu {Actions->Add->New Annotation}
@@ -250,8 +250,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 //
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 //
 // 3. Do menu {Actions->Add->New Annotation}
@@ -285,8 +285,8 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // 3. Create annotation using menu {Actions->Add->New Annotation}
@@ -296,7 +296,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann2", "complement(1.. 20)"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
 // 5. Press right mouse button on sequence area, use context menu item {Add->New Annotation} to create annotation
@@ -324,8 +324,8 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // 3. Create 2 annotations:
@@ -341,8 +341,8 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 
 // 4. Toggle highlight for a1.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "toggle_HL_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "a1"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "a1"));
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: both annotations (a1) and groups (a1, a2) looks muted (grayed out)
 }
@@ -360,8 +360,8 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // 3. Create 2 annotations:
@@ -377,8 +377,8 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1) {
 
 // 4. Toggle highlight for a1.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "toggle_HL_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "a1"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "a1"));
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: both annotations (a1) and groups (a1, a2) looks muted (grayed out)
 }
@@ -396,8 +396,8 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // 3. Create 2 annotations:
@@ -413,8 +413,8 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2) {
 
 // 4. Toggle highlight for a1.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "toggle_HL_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "a1"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "a1"));
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: both annotations (a1) and groups (a1, a2) looks muted (grayed out)
 }
@@ -432,8 +432,8 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 5. Press right mouse button on sequence area, use context menu item {Add->New Annotation} to create annotation
@@ -448,7 +448,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann2", "complement(1.. 20)"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
 // Expected state: there is three new annotations on sequence created by threee different ways
@@ -471,8 +471,8 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 //
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 //
 // 3. Do menu {Actions->Add->New Annotation}
@@ -506,8 +506,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // 3. Create 2 annotations:
@@ -523,8 +523,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 
 // 4. Toggle highlight for a1.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "toggle_HL_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "a1"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "a1"));
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: both annotations (a1) and groups (a1, a2) looks muted (grayed out)
 }
@@ -542,8 +542,8 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 //
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 //
 // 3. Do menu {Actions->Add->New Annotation}
@@ -577,8 +577,8 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // 5. Press right mouse button on sequence area, use context menu item {Add->New Annotation} to create annotation
@@ -593,7 +593,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 
 // 4. Create annotation using keyboard shortcut Ctrl+N
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "ann2", "complement(1.. 20)"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
 // Expected state: there is three new annotations on sequence created by threee different ways
@@ -639,7 +639,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_1) {
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0010_1.bed",
                                                                  ExportAnnotationsFiller::bed, os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDocument::removeDocument(os, "DNA.fa");
@@ -691,7 +691,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_2) {
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0010_2.gff",
                                                                  ExportAnnotationsFiller::gff, os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDocument::removeDocument(os, "DNA.fa");
@@ -752,7 +752,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_3) {
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0010_3.gtf",
                                                                  ExportAnnotationsFiller::gtf, os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDocument::removeDocument(os, "DNA.fa");
@@ -794,7 +794,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1) {
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0011_1.gtf",
                                                                  ExportAnnotationsFiller::gtf, os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(l.hasError(), "No error in the log");
@@ -825,7 +825,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2) {
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0011_1.gtf",
                                                                  ExportAnnotationsFiller::gtf, os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(l.hasError(), "No erro in the log");
@@ -858,7 +858,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_3) {
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0011_1.gtf",
                                                                  ExportAnnotationsFiller::gtf, os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsLog::check(os, l);
@@ -901,7 +901,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_1) {
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0012_1.bed",
                                                                  ExportAnnotationsFiller::bed, os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDocument::removeDocument(os, "sars.gb");
@@ -951,7 +951,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_2) {
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0012_2.gff",
                                                                  ExportAnnotationsFiller::gff, os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDocument::removeDocument(os, "sars.gb");
@@ -1007,7 +1007,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_3) {
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0012_3.gtf",
                                                                  ExportAnnotationsFiller::gtf, os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, "No"));
@@ -1032,8 +1032,8 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Create annotation using menu {Actions->Add->New Annotation}, with description field filled
@@ -1046,8 +1046,8 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
     CHECK_SET_ERR(treeWidget != NULL, "Tree widget is NULL");
 
     QTreeWidgetItem *annotationsRoot = GTUtilsAnnotationsTreeView::findItem(os, "ann1  (0, 1)");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, annotationsRoot->child(0)));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, annotationsRoot->child(0)));
+    GTMouseDriver::doubleClick();
     GTUtilsAnnotationsTreeView::findItem(os, "note");
 }
 
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 569d7e4..ec9eabd 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.cpp
@@ -196,7 +196,7 @@ public:
 
     void run(HI::GUITestOpStatus &os) {
         GTGlobals::sleep(1000);
-        GTMouseDriver::release(os);
+        GTMouseDriver::release();
         QMenu* activePopupMenu = qobject_cast<QMenu *>(QApplication::activePopupWidget());
         CHECK_SET_ERR(NULL != activePopupMenu, "Active popup menu is NULL");
 
@@ -209,7 +209,7 @@ public:
                       .arg(groupNames.join(", ")).arg(actualGroupNames.join(", ")));
 
         if (groupToSelect.isEmpty()) {
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Escape);
         } else {
             GTMenu::clickMenuItemByText(os, activePopupMenu, QStringList() << groupToSelect);
         }
@@ -505,7 +505,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
 //    3. Enter "tel".
-            GTKeyboardDriver::keySequence(os, "tel");
+            GTKeyboardDriver::keySequence("tel");
             GTGlobals::sleep(500);
 
 //    Expected state: "Telomere" type is selected. Cancel the dialog.
@@ -533,9 +533,9 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 
 //    5. Click to the annotation type combobox. Enter "tel". Click "Enter".
             GTWidget::click(os, GTWidget::findExactWidget<QComboBox *>(os, "cbAnnotationType", dialog));
-            GTKeyboardDriver::keySequence(os, "tel");
+            GTKeyboardDriver::keySequence("tel");
             GTGlobals::sleep();
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Enter);
             GTGlobals::sleep();
 
 //    Expected state: "Telomere" type is selected. Cancel the dialog.
@@ -558,9 +558,9 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 //    7. Click to the annotation type combobox. Enter "tel". Click "Enter".
 //    Expected state: "Telomere" type is selected. Cancel the dialog.
     GTWidget::click(os, GTWidget::findExactWidget<QComboBox *>(os, "cbAnnotationType"));
-    GTKeyboardDriver::keySequence(os, "tel");
+    GTKeyboardDriver::keySequence("tel");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     const QString type = getTypeFromOptionsPanelWidget(os);
@@ -2024,8 +2024,8 @@ GUI_TEST_CLASS_DEFINITION(test_0031) {
 
 //    5. Select "NC_001363 annotations" object.
                     const QModelIndex objectIndex = GTUtilsProjectTreeView::findIndex(os, treeView, "NC_001363 annotations", documentIndex);
-                    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, treeView, objectIndex));
-                    GTMouseDriver::click(os);
+                    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, treeView, objectIndex));
+                    GTMouseDriver::click();
 
                     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
                 }
@@ -2137,8 +2137,8 @@ GUI_TEST_CLASS_DEFINITION(test_0032) {
 
 //    5. Select "NC_001363 annotations" object.
                     const QModelIndex objectIndex = GTUtilsProjectTreeView::findIndex(os, treeView, "NC_001363 annotations", documentIndex);
-                    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, treeView, objectIndex));
-                    GTMouseDriver::click(os);
+                    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, treeView, objectIndex));
+                    GTMouseDriver::click();
 
                     GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
                 }
@@ -2244,8 +2244,8 @@ GUI_TEST_CLASS_DEFINITION(test_0033) {
 
 //    5. Select "NC_001363 annotations" object.
             const QModelIndex objectIndex = GTUtilsProjectTreeView::findIndex(os, treeView, "NC_001363 annotations", documentIndex);
-            GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, treeView, objectIndex));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, treeView, objectIndex));
+            GTMouseDriver::click();
 
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
         }
@@ -2702,7 +2702,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 
 //    14. Select "GenBank/EMBL format" location style. Set location "300..400".
             setGenbankLocation(os, "300..400", dialog);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Tab);
 
 //    Expected state: simple location widgets contains non-complemented region "(300..400)".
             CHECK_SET_ERR("300" == leRegionStart->text(), QString("Unexpected simple location region start: expect %1, got %2")
@@ -2713,7 +2713,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 
 //    15. Set location "join(500..600,700..800)".
             setGenbankLocation(os, "join(500..600,700..800)", dialog);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Tab);
 
 //    Expected state: simple location widgets contains non-complemented region "(500..600)".
             CHECK_SET_ERR("500" == leRegionStart->text(), QString("Unexpected simple location region start: expect %1, got %2")
@@ -2724,7 +2724,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 
 //    16. Set location "join(1..100,200..199950)".
             setGenbankLocation(os, "join(1..100,200..199950)", dialog);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Tab);
 
 //    Expected state: simple location widgets contains non-complemented region "(1..100)".
             CHECK_SET_ERR("1" == leRegionStart->text(), QString("Unexpected simple location region start: expect %1, got %2")
@@ -2735,7 +2735,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 
 //    17. Set location "complement(200..300)".
             setGenbankLocation(os, "complement(200..300)", dialog);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Tab);
 
 //    Expected state: simple location widgets contains complemented region "(200..300)".
             CHECK_SET_ERR("200" == leRegionStart->text(), QString("Unexpected simple location region start: expect %1, got %2")
@@ -2758,7 +2758,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 
 //    19. Set location "400..500qwerty".
             setGenbankLocation(os, "400..500qwerty", dialog);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Tab);
 
 //    Expected state: simple location widgets are empty, GenBank location string is empty.
             CHECK_SET_ERR(leRegionStart->text().isEmpty(), QString("Unexpected simple location region start: expect an empty string, got %1")
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 99019b0..83a499b 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
@@ -38,6 +38,8 @@
 #include "runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h"
 #include "GTUtilsTaskTreeView.h"
 
+#include <U2View/ADVConstants.h>
+
 namespace U2 {
 
 namespace GUITest_common_scenarios_annotations_edit {
@@ -48,8 +50,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     //
     // Steps:
     //
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
@@ -64,8 +66,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsApp::checkUGENETitle(os, expectedTitle);
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation C in annotation tree. Click F2. Change name to BB.
@@ -75,9 +77,9 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     Runnable *filler = new EditGroupAnnotationsFiller(os, "BB");
     GTUtilsDialog::waitForDialog(os, filler);
 
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -91,16 +93,16 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
     //
     // Steps:
     //
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation B in annotation tree. Click F2. Change name to BB.
@@ -110,9 +112,9 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
     Runnable *filler = new EditGroupAnnotationsFiller(os, "BB");
     GTUtilsDialog::waitForDialog(os, filler);
 
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -123,9 +125,9 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
     Runnable *filler1 = new EditGroupAnnotationsFiller(os, "B_group");
     GTUtilsDialog::waitForDialog(os, filler1);
 
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item1));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item1));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -139,16 +141,16 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
     //
     // Steps:
     //
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation C in annotation tree. Click F2. Change name to BB.
@@ -158,9 +160,9 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
     Runnable *filler = new EditGroupAnnotationsFiller(os, "BB");
     GTUtilsDialog::waitForDialog(os, filler);
 
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -172,9 +174,9 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
     Runnable *filler1 = new EditGroupAnnotationsFiller(os, "CC");
     GTUtilsDialog::waitForDialog(os, filler1);
 
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item1));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item1));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -187,16 +189,16 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     //
     // Steps:
     //
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation C in annotation tree. Click F2. Change name to CC.
@@ -204,9 +206,9 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "C");
     Runnable *filler = new EditAnnotationFiller(os, "CC", "80 ..90");
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "CC") != NULL, "Item CC not found in tree widget");
 
@@ -217,16 +219,16 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
     //
     // Steps:
     //
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation C in annotation tree. Click F2. Change name to CC.
@@ -234,9 +236,9 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "C");
     Runnable *filler = new EditAnnotationFiller(os, "CC", "80 ..90");
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -245,9 +247,9 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
     QTreeWidgetItem *item1 = GTUtilsAnnotationsTreeView::findItem(os, "CC");
     Runnable *filler1 = new EditAnnotationFiller(os, "C", "80 ..90");
     GTUtilsDialog::waitForDialog(os, filler1);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item1));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item1));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -260,16 +262,16 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     //
     // Steps:
     //
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation C in annotation tree. Click F2. Change name to CC.
@@ -277,9 +279,9 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "C");
     Runnable *filler = new EditAnnotationFiller(os, "CC", "80 ..90");
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -288,9 +290,9 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     QTreeWidgetItem *item1 = GTUtilsAnnotationsTreeView::findItem(os, "B");
     Runnable *filler1 = new EditAnnotationFiller(os, "BB", "30 ..120");
     GTUtilsDialog::waitForDialog(os, filler1);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item1));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item1));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -303,16 +305,16 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     //
     // Steps:
     //
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation C in annotation tree. Click F2. Change name to CC.
@@ -320,9 +322,9 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "C");
     Runnable *filler = new EditAnnotationFiller(os, "C", "20 ..40");
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -336,16 +338,16 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     //
     // Steps:
     //
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation C in annotation tree. Click F2. Change name to CC.
@@ -353,9 +355,9 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "C");
     Runnable *filler = new EditAnnotationFiller(os, "C", "20 ..40");
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -366,9 +368,9 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     QTreeWidgetItem *item1 = GTUtilsAnnotationsTreeView::findItem(os, "C");
     Runnable *filler1 = new EditAnnotationFiller(os, "C", "10 ..90");
     GTUtilsDialog::waitForDialog(os, filler1);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item1));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item1));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -381,25 +383,25 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     //
     // Steps:
     //
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation C in annotation tree. Click F2. Change name to CC.
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "C");
     Runnable *filler = new EditAnnotationFiller(os, "CC", "20 ..40");
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -409,9 +411,9 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     QTreeWidgetItem *item1 = GTUtilsAnnotationsTreeView::findItem(os, "B");
     Runnable *filler1 = new EditAnnotationFiller(os, "BB", "20 ..40");
     GTUtilsDialog::waitForDialog(os, filler1);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item1));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item1));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -424,16 +426,16 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     //Rename annotation
 
     // Steps:
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation C in annotation tree. Click F2. Change name to CC.
@@ -441,32 +443,32 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "C");
     Runnable *filler = new EditAnnotationFiller(os, "C", "20 ..40", true);
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     Runnable *checker = new EditAnnotationChecker(os, "", "complement(20..40)");
     GTUtilsDialog::waitForDialog(os, checker);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 }
 GUI_TEST_CLASS_DEFINITION(test_0004_1) {
     //Rename annotation
 
     // Steps:
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation C in annotation tree. Click F2. Change name to CC.
@@ -474,32 +476,32 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1) {
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "C");
     Runnable *filler = new EditAnnotationFiller(os, "CC", "20 ..40", true);
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     Runnable *checker = new EditAnnotationChecker(os, "CC", "complement(20..40)");
     GTUtilsDialog::waitForDialog(os, checker);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 }
 GUI_TEST_CLASS_DEFINITION(test_0004_2) {
     //Rename annotation
 
     // Steps:
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation C in annotation tree. Click F2. Change name to CC.
@@ -507,16 +509,16 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2) {
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "B");
     Runnable *filler = new EditAnnotationFiller(os, "B", "20 ..40", true);
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     Runnable *checker = new EditAnnotationChecker(os, "", "complement(20..40)");
     GTUtilsDialog::waitForDialog(os, checker);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 }
 
@@ -536,7 +538,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     //Annotation name: misc_feature
     //Location: 1..1000
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "group", "misc_feature", "1..1000"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
     //4. CHECK if new gb-format document is loaded into the annotation editor
     //4.1 CHECK if it contains group "group" with annotation "misc_feature" in it
@@ -545,9 +547,9 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "misc_feature");
 
     //5. Select misc_feature annotation and press <DEL>
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Delete"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
     //6. CHECK if misc_feature annotation is removed
     GTUtilsAnnotationsTreeView::findItem(os, "group  (0, 0)");
@@ -572,7 +574,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     //Annotation name: misc_feature
     //Location: 1..1000
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "group", "misc_feature", "1..1000"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
     //4. CHECK if new gb-format document is loaded into the annotation editor
@@ -583,9 +585,9 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "misc_feature");
 
     //5. Select misc_feature annotation and press <DEL>
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Delete"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
     //6. CHECK if misc_feature annotation is removed
     //TODO: 6.1 CHECK if "group" subgroups/annotations counter displays (0,0)
@@ -596,7 +598,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "group_new", "misc_feature_1", "1..500"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -604,9 +606,9 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     GTUtilsAnnotationsTreeView::findItem(os, "group  (0, 0)");
     QTreeWidgetItem *item1 = GTUtilsAnnotationsTreeView::findItem(os, "misc_feature_1");
 
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item1));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Delete"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item1));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTGlobals::sleep();
     annotationItem = GTUtilsAnnotationsTreeView::findItem(os, "misc_feature_1", options);
@@ -631,11 +633,11 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     //Annotation name: misc_feature
     //Location: 1..1000
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "group", "misc_feature", "1..1000"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "group_new", "misc_feature_1", "1..500"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
     //4. CHECK if new gb-format document is loaded into the annotation editor
@@ -650,14 +652,14 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     QTreeWidgetItem *item1 = GTUtilsAnnotationsTreeView::findItem(os, "misc_feature_1");
 
     //5. Select misc_feature annotation and press <DEL>
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Delete"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item1));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Delete"]);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item1));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
     //6. CHECK if misc_feature annotation is removed
@@ -672,26 +674,26 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     //Check rename annotation action at popup menu (UGENE-3449)
     // Rename annotation
     // Steps:
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
-    // 3. Check that menu item "Rename item" is disabled at popup menu of sequence view.
-    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "rename_item",
-                                                      PopupChecker::IsDisabled, GTGlobals::UseMouse));
+    // 3. Check that menu item { Edit -> Annotation } is absent at popup menu of sequence view.
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << ADV_MENU_EDIT << "edit_annotation_tree_item",
+                                                      PopupChecker::NotExists, GTGlobals::UseMouse));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
 
-    // 4. Check that menu item "Rename item" is disabled at popup menu of annotations view.
-    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "rename_item",
-                                                      PopupChecker::IsDisabled, GTGlobals::UseMouse));
+    // 4. Check that menu item { Edit -> Annotation } is absent at popup menu of annotations view.
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << ADV_MENU_EDIT << "edit_annotation_tree_item",
+                                                      PopupChecker::NotExists, GTGlobals::UseMouse));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "annotations_tree_widget"));
 
 }
@@ -699,34 +701,34 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1) {
     //Check rename annotation action at popup menu (UGENE-3449)
     // Rename annotation
     // Steps:
-    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/proj2.uprj
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj2.uprj");
+    // 1. Use menu {File->Open}. Open project _common_data/scenarios/project/1.gb
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 
     // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // 3. Select annotation B in annotation tree.
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "B_group  (0, 2)");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::doubleClick();
 
     item = GTUtilsAnnotationsTreeView::findItem(os, "B");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
 
-    // 4. Check that menu item "Rename item" is enabled at popup menu of sequence view.
-    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "rename_item",
+    // 4. Check that menu item { Edit -> Annotation } is enabled at popup menu of sequence view.
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << ADV_MENU_EDIT << "edit_annotation_tree_item",
                                                       PopupChecker::IsEnabled, GTGlobals::UseMouse));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
 
-    // 5. Check that menu item "Rename item" is enabled at popup menu of annotations view.
-    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "rename_item",
+    // 5. Check that menu item { Edit -> Annotation } is enabled at popup menu of annotations view.
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << ADV_MENU_EDIT << "edit_annotation_tree_item",
                                                       PopupChecker::IsEnabled, GTGlobals::UseMouse));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "annotations_tree_widget"));
 }
@@ -741,18 +743,18 @@ GUI_TEST_CLASS_DEFINITION(test_0006_2) {
 
     // 2. Select a group on annotations editor
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "CDS  (0, 4)");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
 
     // 3. Open context menu on sequence area
-    // Expected state: 'Rename item' action is disabled
-    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "rename_item",
-                                                      PopupChecker::IsDisabled, GTGlobals::UseMouse));
+    // Expected state: { Edit -> Annotation } action is disabled
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << ADV_MENU_EDIT << "edit_annotation_tree_item",
+                                                      PopupChecker::NotExists, GTGlobals::UseMouse));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
 
     // 3. Open context menu on sequence area
-    // Expected state: 'Rename item' action is enabled
-    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "rename_item",
+    // Expected state: { Edit -> Annotation } action is enabled
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << ADV_MENU_EDIT << "edit_annotation_tree_item",
                                                       PopupChecker::IsEnabled, GTGlobals::UseMouse));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "annotations_tree_widget"));
 }
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 e1472d5..7d0b829 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
@@ -53,8 +53,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qual", "val");
@@ -62,8 +62,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsAnnotationsTreeView::findItem(os, "qual");
     GTGlobals::sleep(1000);
@@ -75,8 +75,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qual", "val");
@@ -84,16 +84,16 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
+    GTMouseDriver::click(Qt::RightButton);
 
     Runnable *filler1 = new EditQualifierFiller(os, "qual1", "val1");
     GTUtilsDialog::waitForDialog(os, filler1);
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsAnnotationsTreeView::findItem(os, "qual");
     GTGlobals::sleep(1000);
@@ -107,8 +107,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qual", "val");
@@ -116,16 +116,16 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
+    GTMouseDriver::click(Qt::RightButton);
 
     Runnable *filler1 = new EditQualifierFiller(os, "qual1", "val1");
     GTUtilsDialog::waitForDialog(os, filler1);
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsAnnotationsTreeView::findItem(os, "qual");
     GTGlobals::sleep(1000);
@@ -141,17 +141,17 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "C");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
+    GTMouseDriver::click();
 
-    Runnable *filler = new RenameQualifierFiller(os, "qu");
+    Runnable *filler = new EditQualifierFiller(os, "qu");
     GTUtilsDialog::waitForDialog(os, filler);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -164,17 +164,17 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "B");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
+    GTMouseDriver::click();
 
-    Runnable *filler = new RenameQualifierFiller(os, "qu");
+    Runnable *filler = new EditQualifierFiller(os, "qu");
     GTUtilsDialog::waitForDialog(os, filler);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -187,26 +187,26 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "B");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
+    GTMouseDriver::click();
 
-    Runnable *filler = new RenameQualifierFiller(os, "qu");
+    Runnable *filler = new EditQualifierFiller(os, "qu");
     GTUtilsDialog::waitForDialog(os, filler);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "C");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
+    GTMouseDriver::click();
 
-    Runnable *filler1 = new RenameQualifierFiller(os, "qu1");
+    Runnable *filler1 = new EditQualifierFiller(os, "qu1");
     GTUtilsDialog::waitForDialog(os, filler1);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -220,16 +220,16 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qu", "va");
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "C");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -242,16 +242,16 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qu", "va");
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "B");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -264,24 +264,24 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qu", "va");
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "B");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler1 = new EditQualifierFiller(os, "qu1", "va1");
     GTUtilsDialog::waitForDialog(os, filler1);
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "C");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -297,13 +297,13 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 sequence"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 sequence"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "C");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
+    GTKeyboardDriver::keyPress(Qt::Key_Delete);
     GTGlobals::sleep();
 
     QTreeWidgetItem *qual1 = GTUtilsAnnotationsTreeView::findItem(os, "qual1", GTGlobals::FindOptions(false));
@@ -316,13 +316,13 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 sequence"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 sequence"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "B");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
+    GTKeyboardDriver::keyPress(Qt::Key_Delete);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -337,21 +337,21 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTUtilsAnnotationsTreeView::getItemCenter(os, "C");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
-    GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual1"));
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
     QTreeWidgetItem *qual1 = GTUtilsAnnotationsTreeView::findItem(os, "qual1", GTGlobals::FindOptions(false));
     CHECK_SET_ERR(qual1 == NULL, "There is annotation qual1, expected state there is no annotation qual1");
     GTUtilsAnnotationsTreeView::getItemCenter(os, "B");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "qual"));
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -365,16 +365,16 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qual", "val");
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "qual") != NULL, "Item qu not found in tree widget");
@@ -386,16 +386,16 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qual1", "val1");
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "qual1") != NULL, "Item qu not found in tree widget");
@@ -407,16 +407,16 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qual", "val");
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "qual") != NULL, "Item qu not found in tree widget");
@@ -425,8 +425,8 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     GTUtilsDialog::waitForDialog(os, filler1);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "qual1") != NULL, "Item qu not found in tree widget");
@@ -439,7 +439,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Click the "db_xref" qualifier value in any "CDS" annotation.
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
     GTGlobals::sleep();
 
     GTTreeWidget::click(os, GTUtilsAnnotationsTreeView::findItem(os, "db_xref"), AnnotationsTreeView::COLUMN_VALUE);
@@ -476,16 +476,16 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qual", "val");
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "qual") != NULL, "Item qu not found in tree widget");
@@ -494,8 +494,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     GTUtilsDialog::waitForDialog(os, filler1);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "new_qualifier") != NULL, "Item qu not found in tree widget");
@@ -507,16 +507,16 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qual", "val");
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "qual") != NULL, "Item qu not found in tree widget");
@@ -525,8 +525,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     GTUtilsDialog::waitForDialog(os, filler1);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "new_qualifier") != NULL, "Item qu not found in tree widget");
@@ -538,16 +538,16 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     Runnable *filler = new EditQualifierFiller(os, "qual", "val");
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "qual") != NULL, "Item qu not found in tree widget");
@@ -556,8 +556,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     GTUtilsDialog::waitForDialog(os, filler1);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "new_qualifier") != NULL, "Item qu not found in tree widget");
@@ -566,8 +566,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     GTUtilsDialog::waitForDialog(os, filler2);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "new_qualifier_1") != NULL, "Item qu not found in tree widget");
@@ -578,8 +578,8 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTFileDialog::openFile(os, sandBoxDir + "1anot_1seq.gen");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     QString longQualifierValueNoSpaces =
@@ -592,11 +592,11 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
     GTGlobals::sleep(1000);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
-    GTGlobals::sleep();
+    GTUtilsDialog::waitForDialogClosed();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "long") != NULL, "Item long not found in tree widget1");
 
     GTUtilsDocument::saveDocument(os, "1anot_1seq.gen");
@@ -605,16 +605,16 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
+    GTMouseDriver::click();
 
     QTreeWidgetItem* qualifierTreeItem = GTUtilsAnnotationsTreeView::findItem(os, "long");
     CHECK_SET_ERR(qualifierTreeItem->text(AnnotationsTreeView::COLUMN_VALUE) == longQualifierValueNoSpaces, "Different qualifier value!");
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_REMOVE << "Selected annotations and qualifiers"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "long"));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "long"));
     GTGlobals::sleep(1000);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 }
 
@@ -623,8 +623,8 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     GTFileDialog::openFile(os, sandBoxDir + "1anot_1seq.gen");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     QString longQualifierValueNoSpaces = "Mostqualifiervalueswillbeadescriptivetextphrasewhichmustbeenclosedindoublequotationmarks.";
@@ -633,10 +633,10 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
+    GTMouseDriver::click(Qt::RightButton);
 
-    GTGlobals::sleep();
+    GTUtilsDialog::waitForDialogClosed();
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "noSpaces") != NULL, "Item long not found in tree widget1");
 
     GTUtilsDocument::saveDocument(os, "1anot_1seq.gen");
@@ -645,15 +645,15 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
+    GTMouseDriver::click();
 
     QTreeWidgetItem* qualifierTreeItem = GTUtilsAnnotationsTreeView::findItem(os, "noSpaces");
     CHECK_SET_ERR(qualifierTreeItem->text(AnnotationsTreeView::COLUMN_VALUE) == longQualifierValueNoSpaces, "Different qualifier value!");
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_REMOVE << "Selected annotations and qualifiers"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "noSpaces"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "noSpaces"));
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 } // namespace GUITest_common_scenarios_annotations_qualifiers
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 66e278a..1c55dd2 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
@@ -65,8 +65,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -93,8 +93,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -121,8 +121,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -149,8 +149,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -177,8 +177,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -205,8 +205,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -233,8 +233,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -261,8 +261,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -289,8 +289,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -317,8 +317,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -345,8 +345,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -374,8 +374,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -403,8 +403,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -432,8 +432,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -461,8 +461,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -490,8 +490,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -518,8 +518,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -546,8 +546,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -574,8 +574,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -602,8 +602,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -630,8 +630,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -658,8 +658,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -686,8 +686,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -714,8 +714,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -742,8 +742,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -770,8 +770,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -798,8 +798,8 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
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 3311c9c..3162ce4 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
@@ -1092,11 +1092,6 @@ GUI_TEST_CLASS_DEFINITION(test_0015) {
     GTGlobals::sleep();
     CHECK_SET_ERR(complement -> isEnabled() == false, "button is not disabled");
 
-    GTGlobals::sleep();
-    QAbstractButton* translation = GTAction::button(os, "translation_action");
-    GTGlobals::sleep();
-    CHECK_SET_ERR(translation -> isEnabled() == false, "button is not disabled");
-
     QWidget* toolbar = GTWidget::findWidget(os, "views_tool_bar_result");
     CHECK_SET_ERR(toolbar != NULL, "Cannot find views_tool_bar_result");
     GTWidget::click(os, GTWidget::findWidget(os, "show_hide_details_view", toolbar));
@@ -1107,12 +1102,9 @@ GUI_TEST_CLASS_DEFINITION(test_0015) {
     GTGlobals::sleep();
     CHECK_SET_ERR(complement1 -> isEnabled() == true, "button is not enabled");
 
-    GTGlobals::sleep();
-    QAbstractButton* translation1 = GTAction::button(os, "translation_action");
-    GTGlobals::sleep();
-    CHECK_SET_ERR(translation1 -> isEnabled() == true, "button is not enabled");
-
-    }
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "translation_action", PopupChecker::IsEnabled));
+    GTWidget::click(os, GTWidget::findWidget(os, "translationsMenuToolbarButton"));
+}
 
 GUI_TEST_CLASS_DEFINITION(test_0015_1) {
     Runnable *filler = new CreateDocumentFiller(os,
@@ -1135,11 +1127,6 @@ GUI_TEST_CLASS_DEFINITION(test_0015_1) {
     GTGlobals::sleep();
     CHECK_SET_ERR(complement -> isEnabled() == false, "button is not disabled");
 
-    GTGlobals::sleep();
-    QAbstractButton* translation = GTAction::button(os, "translation_action");
-    GTGlobals::sleep();
-    CHECK_SET_ERR(translation -> isEnabled() == false, "button is not disabled");
-
     QWidget* toolbar = GTWidget::findWidget(os, "views_tool_bar_result");
     CHECK_SET_ERR(toolbar != NULL, "Cannot find views_tool_bar_result");
     GTWidget::click(os, GTWidget::findWidget(os, "show_hide_details_view", toolbar));
@@ -1150,12 +1137,9 @@ GUI_TEST_CLASS_DEFINITION(test_0015_1) {
     GTGlobals::sleep();
     CHECK_SET_ERR(complement1 -> isEnabled() == true, "button is not enabled");
 
-    GTGlobals::sleep();
-    QAbstractButton* translation1 = GTAction::button(os, "translation_action");
-    GTGlobals::sleep();
-    CHECK_SET_ERR(translation1 -> isEnabled() == true, "button is not enabled");
-
-    }
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "translation_action", PopupChecker::IsEnabled));
+    GTWidget::click(os, GTWidget::findWidget(os, "translationsMenuToolbarButton"));
+}
 
 GUI_TEST_CLASS_DEFINITION(test_0015_2) {
     Runnable *filler = new CreateDocumentFiller(os,
@@ -1178,12 +1162,6 @@ GUI_TEST_CLASS_DEFINITION(test_0015_2) {
     GTGlobals::sleep();
     CHECK_SET_ERR(complement -> isEnabled() == false, "button is not disabled");
 
-    GTGlobals::sleep();
-    QAbstractButton* translation = GTAction::button(os, "translation_action");
-    GTGlobals::sleep();
-    CHECK_SET_ERR(translation -> isEnabled() == false, "button is not disabled");
-    GTGlobals::sleep();
-
     QWidget* toolbar = GTWidget::findWidget(os, "views_tool_bar_result");
     CHECK_SET_ERR(toolbar != NULL, "Cannot find views_tool_bar_result");
     GTWidget::click(os, GTWidget::findWidget(os, "show_hide_details_view", toolbar));
@@ -1194,12 +1172,9 @@ GUI_TEST_CLASS_DEFINITION(test_0015_2) {
     GTGlobals::sleep();
     CHECK_SET_ERR(complement1 -> isEnabled() == true, "button is not enabled");
 
-    GTGlobals::sleep();
-    QAbstractButton* translation1 = GTAction::button(os, "translation_action");
-    GTGlobals::sleep();
-    CHECK_SET_ERR(translation1 -> isEnabled() == true, "button is not enabled");
-
-    }
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "translation_action", PopupChecker::IsEnabled));
+    GTWidget::click(os, GTWidget::findWidget(os, "translationsMenuToolbarButton"));
+}
 
 GUI_TEST_CLASS_DEFINITION(test_0016) {
 //    Create a sequence from text in FASTA format (UGENE-1564): single sequence, data starts with sequence header
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 a24983b..bfae2c8 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
@@ -67,7 +67,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){
     GTUtilsDialog::waitForDialog(os, filler2);
 
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
-    GTGlobals::sleep(1000);
+    GTGlobals::sleep();
 //Expected state: Dot plot view has appear. There is 1 line at view.
 //6. Use context menu on dot plot view {Dotplot->Remove}
 //Expected state: save "Dotplot" has appear.
@@ -111,6 +111,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2){//commit DotPlotWidget.cpp exitButton
     GTUtilsDialog::waitForDialog(os, filler2);
 
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
+    GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
     GTWidget::click(os, GTWidget::findWidget(os, "exitButton"));
@@ -197,7 +198,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014_1){
     GTUtilsDialog::waitForDialog(os, filler2);
 
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
-    GTGlobals::sleep(500);
+    GTGlobals::sleep();
     GTUtilsProjectTreeView::openView(os);
 
     for(int i=0;i<4;i++){
@@ -217,7 +218,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014_2){
     GTUtilsDialog::waitForDialog(os, filler2);
 
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Build dotplot...");
-    GTGlobals::sleep(500);
+    GTGlobals::sleep();
     GTUtilsProjectTreeView::openView(os);
 
     for(int i=0;i<4;i++){
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 cd9656c..9cf9617 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
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QApplication>
+
 #include "GTTestsMsaEditor.h"
 #include "primitives/GTAction.h"
 #include <primitives/GTComboBox.h>
@@ -275,8 +277,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002_3) {
     CHECK_SET_ERR(mdiWindow == NULL, "There is an MDI window");
 
     QPoint p = GTUtilsProjectTreeView::getItemCenter(os, "revcompl");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "View" << "Show offsets");
@@ -305,8 +307,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002_4) {
     GTGlobals::sleep();
 
     QPoint p = GTUtilsProjectTreeView::getItemCenter(os, "revcompl");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTUtilsMdi::click(os, GTGlobals::Maximize);
@@ -402,15 +404,15 @@ GUI_TEST_CLASS_DEFINITION(test_0003_4) {
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTGlobals::sleep(1000);
 #ifdef Q_OS_MAC
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
     GTGlobals::sleep(1000);
 #endif
     QWidget* mdiWindow = GTUtilsMdi::activeWindow(os, false);
     CHECK_SET_ERR(mdiWindow == NULL, "There is an MDI window");
 
     QPoint p = GTUtilsProjectTreeView::getItemCenter(os, "ma");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::checkSorted(os);
@@ -436,7 +438,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004)
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
 
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 6));
-    GTKeyboardDriver::keyClick(os, 'g', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'g', Qt::ControlModifier);
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
@@ -462,7 +464,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1)
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
 
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 6));
-    GTKeyboardDriver::keyClick(os, 'g', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'g', Qt::ControlModifier);
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
@@ -488,7 +490,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2)
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
 
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 6));
-    GTKeyboardDriver::keyClick(os, 'g', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'g', Qt::ControlModifier);
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, expectedRect);
@@ -606,8 +608,8 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "ma2_gapped"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "ma2_gapped"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTUtilsProjectTreeView::toggleView(os);
@@ -794,25 +796,25 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Tettigonia_viridissima"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     //Expected state: Tettigonia_viridissima renamed to Sequence_a
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Sequence_a"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     //4. Rlick Undo button.
     QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
     GTWidget::click(os,undo);
-    //GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
+    //GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
     GTGlobals::sleep();
 
     //Expected state: Tettigonia_viridissima renamed back
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Tettigonia_viridissima", "Tettigonia_viridissima"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 }
 
@@ -833,14 +835,14 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
 
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Tettigonia_viridissima"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     //Expected state: Tettigonia_viridissima renamed to Sequence_a
 
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Sequence_a"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     //4. Rlick Undo button. CHANGES: clicking undo by mouse
@@ -850,7 +852,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     //Expected state: Tettigonia_viridissima renamed back
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Tettigonia_viridissima", "Tettigonia_viridissima"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 }
 
@@ -871,23 +873,23 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
 
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Bicolorana_bicolor_EF540830"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,2));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     //Expected state: Tettigonia_viridissima renamed to Sequence_a
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Sequence_a"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,2));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     //4. Rlick Undo button.
-    GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
     GTGlobals::sleep();
 
     //Expected state: Tettigonia_viridissima renamed back
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Bicolorana_bicolor_EF540830", "Bicolorana_bicolor_EF540830"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,2));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 }
 
@@ -908,23 +910,23 @@ GUI_TEST_CLASS_DEFINITION(test_0007_3) {
 
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Phaneroptera_falcata"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,0));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     //Expected state: Tettigonia_viridissima renamed to Sequence_a
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Sequence_a"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,0));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     //4. Rlick Undo button.
-    GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
     GTGlobals::sleep();
 
     //Expected state: Tettigonia_viridissima renamed back
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Phaneroptera_falcata", "Phaneroptera_falcata"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,0));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 }
 
@@ -945,23 +947,23 @@ GUI_TEST_CLASS_DEFINITION(test_0007_4) {
 
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Conocephalus_sp."));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,5));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     //Expected state: Tettigonia_viridissima renamed to Sequence_a
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Sequence_a", "Sequence_a"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,5));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     //4. Rlick Undo button.
-    GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
     GTGlobals::sleep();
 
     //Expected state: Tettigonia_viridissima renamed back
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Conocephalus_sp.", "Conocephalus_sp."));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,5));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 }
 
@@ -975,18 +977,18 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
 //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
     QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "COI [m] COI");
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
-    GTKeyboardDriver::keySequence(os, "start bookmark");
+    GTKeyboardDriver::keySequence("start bookmark");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1001,18 +1003,18 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTGlobals::sleep();
 
 //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
-    GTKeyboardDriver::keySequence(os, "middle bookmark");
+    GTKeyboardDriver::keySequence("middle bookmark");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1025,18 +1027,18 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTMenu::showContextMenu(os, mdiWindow);
     GTGlobals::sleep();
 //     6. Create bookmark. Rename "New bookmark" to "end bookmark"
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
-    GTKeyboardDriver::keySequence(os, "end bookmark");
+    GTKeyboardDriver::keySequence("end bookmark");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1044,24 +1046,24 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
 //     Expected state: clicking on each bookmark will recall corresponding MSA position
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "start bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
     CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets doesnt equal");
 
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "middle bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
     CHECK_SET_ERR(midRO == RO && midLO == LO, "mid bookmark offsets doesnt equal");
 
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "end bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
@@ -1069,9 +1071,9 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
 //     7. Delete Start bookmark
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "start bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
     GTGlobals::sleep(500);
 
 //     Expected state: start bookmark doesn't present
@@ -1089,12 +1091,12 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {  //CHANGES: default names used
 
     //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
     QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "COI [m] COI");
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1109,12 +1111,12 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {  //CHANGES: default names used
     GTGlobals::sleep();
 
     //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1127,12 +1129,12 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {  //CHANGES: default names used
     GTMenu::showContextMenu(os, mdiWindow);
     GTGlobals::sleep();
     //     6. Create bookmark. Rename "New bookmark" to "end bookmark"
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1140,24 +1142,24 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {  //CHANGES: default names used
 
     //     Expected state: clicking on each bookmark will recall corresponding MSA position
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "New bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
     CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets doesnt equal");
 
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "New bookmark 2");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
     CHECK_SET_ERR(midRO == RO && midLO == LO, "mid bookmark offsets doesnt equal");
 
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "New bookmark 3");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
@@ -1166,8 +1168,8 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {  //CHANGES: default names used
 //     7. Delete Start bookmark
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_REMOVE_BOOKMARK));
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "New bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os,Qt::RightButton);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(500);
 
 //     Expected state: start bookmark doesn't present
@@ -1185,18 +1187,18 @@ GUI_TEST_CLASS_DEFINITION(test_0008_2) { //CHANGES: mid and end coordinates chan
 
     //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
     QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "COI [m] COI");
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
-    GTKeyboardDriver::keySequence(os, "start bookmark");
+    GTKeyboardDriver::keySequence("start bookmark");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1211,18 +1213,18 @@ GUI_TEST_CLASS_DEFINITION(test_0008_2) { //CHANGES: mid and end coordinates chan
     GTGlobals::sleep();
 
     //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
-    GTKeyboardDriver::keySequence(os, "middle bookmark");
+    GTKeyboardDriver::keySequence("middle bookmark");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1235,18 +1237,18 @@ GUI_TEST_CLASS_DEFINITION(test_0008_2) { //CHANGES: mid and end coordinates chan
     GTMenu::showContextMenu(os, mdiWindow);
     GTGlobals::sleep();
     //     6. Create bookmark. Rename "New bookmark" to "end bookmark"
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
-    GTKeyboardDriver::keySequence(os, "end bookmark");
+    GTKeyboardDriver::keySequence("end bookmark");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1254,24 +1256,24 @@ GUI_TEST_CLASS_DEFINITION(test_0008_2) { //CHANGES: mid and end coordinates chan
 
     //     Expected state: clicking on each bookmark will recall corresponding MSA position
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "start bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
     CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets doesnt equal");
 
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "middle bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
     CHECK_SET_ERR(midRO == RO && midLO == LO, "mid bookmark offsets doesnt equal");
 
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "end bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
@@ -1288,18 +1290,18 @@ GUI_TEST_CLASS_DEFINITION(test_0008_3) { //CHANGES: mid and end coordinates chan
 
     //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
     QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "HIV-1 [m] HIV-1");
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
-    GTKeyboardDriver::keySequence(os, "start bookmark");
+    GTKeyboardDriver::keySequence("start bookmark");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1314,18 +1316,18 @@ GUI_TEST_CLASS_DEFINITION(test_0008_3) { //CHANGES: mid and end coordinates chan
     GTGlobals::sleep();
 
     //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
-    GTKeyboardDriver::keySequence(os, "middle bookmark");
+    GTKeyboardDriver::keySequence("middle bookmark");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1338,18 +1340,18 @@ GUI_TEST_CLASS_DEFINITION(test_0008_3) { //CHANGES: mid and end coordinates chan
     GTMenu::showContextMenu(os, mdiWindow);
     GTGlobals::sleep();
     //     6. Create bookmark. Rename "New bookmark" to "end bookmark"
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
-    GTKeyboardDriver::keySequence(os, "end bookmark");
+    GTKeyboardDriver::keySequence("end bookmark");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
@@ -1357,24 +1359,24 @@ GUI_TEST_CLASS_DEFINITION(test_0008_3) { //CHANGES: mid and end coordinates chan
 
     //     Expected state: clicking on each bookmark will recall corresponding MSA position
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "start bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
     CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets doesnt equal");
 
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "middle bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
     CHECK_SET_ERR(midRO == RO && midLO == LO, "mid bookmark offsets doesnt equal");
 
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "end bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
@@ -1402,7 +1404,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 
     //Expected state: Column range = 12-14
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(11, 0), QPoint(13, 9));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep();
 
 
@@ -1440,7 +1442,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009_1) {
 
     //Expected state: Column range = 12-14
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(11, 0), QPoint(13, 9));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep();
 
     QString clipboardText = GTClipboard::text(os);
@@ -1476,7 +1478,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009_2) {
 
     //Expected state: Column range = 12-14
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(11, 0), QPoint(13, 9));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep();
 
     QString clipboardText = GTClipboard::text(os);
@@ -1509,9 +1511,9 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     GTUtilsMSAEditorSequenceArea::selectArea(os);
     GTGlobals::sleep();
 // copy to clipboard
-//    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+//    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY" << "copy_selection"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
 // Expected state: every sequense name the same as it amino translation
@@ -1542,7 +1544,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_1) {
     GTUtilsMSAEditorSequenceArea::selectArea(os);
 // copy to clipboard
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_selection"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: every sequense name the same as it amino translation
     QString clipboardText = GTClipboard::text(os);
@@ -1572,7 +1574,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010_2) {
     GTUtilsMSAEditorSequenceArea::selectArea(os);
 // copy to clipboard
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_selection"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: every sequense name the same as it amino translation
     QString clipboardText = GTClipboard::text(os);
@@ -1597,11 +1599,11 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 // 2. Select first sequence 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, QPoint(0, 0), QPoint(-1, 0));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: sequence changed from TTG -> CAA
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     GTGlobals::sleep();
     QString clipboardText = GTClipboard::text(os);
@@ -1614,11 +1616,11 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 
 // 3. Do step 2 again
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: sequence changed from CAA -> TTG
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     GTGlobals::sleep();
     clipboardText = GTClipboard::text(os);
@@ -1642,13 +1644,13 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1) {
 // 2. Select first sequence 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, QPoint(0, 0), QPoint(-1, 0));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: sequence changed from TTG -> CAA
 // CHANGES: copy by context menu
     GTGlobals::sleep();
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_selection"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     QString clipboardText = GTClipboard::text(os);
@@ -1661,14 +1663,14 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1) {
 
 // 3. Do step 2 again
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: sequence changed from CAA -> TTG
     GTGlobals::sleep();
 // CHANGES: copy by context menu
     GTGlobals::sleep();
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_selection"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     clipboardText = GTClipboard::text(os);
@@ -1699,7 +1701,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2) {
     GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_selection"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     QString clipboardText = GTClipboard::text(os);
@@ -1718,7 +1720,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2) {
 // Expected state: sequence changed from CAA -> TTG
     //GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(-1, 0));
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     GTGlobals::sleep();
     clipboardText = GTClipboard::text(os);
@@ -1743,7 +1745,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
 
     GTUtilsMSAEditorSequenceArea::selectArea(os);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTWidget::click(os,GTUtilsMdi::activeWindow(os));
 
 // Expected state: result alignement must be
@@ -1755,7 +1757,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, -1), QPoint(-1, 0));
 // copy to clipboard
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep();
 
 // Expected state: every sequense name the same as it amino translation
@@ -1778,7 +1780,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_1) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
 
     GTUtilsMSAEditorSequenceArea::selectArea(os);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTWidget::click(os,GTUtilsMdi::activeWindow(os));
 
 // Expected state: result alignement must be
@@ -1790,7 +1792,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_1) {
     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(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: every sequense name the same as it amino translation
     QString clipboardText = GTClipboard::text(os);
@@ -1812,14 +1814,14 @@ GUI_TEST_CLASS_DEFINITION(test_0012_2) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
 
     GTUtilsMSAEditorSequenceArea::selectArea(os);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // CHANGES: close and open MDI window
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "revcompl"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "revcompl"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // Expected state: result alignement must be
@@ -1831,7 +1833,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012_2) {
     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(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: every sequense name the same as it amino translation
     QString clipboardText = GTClipboard::text(os);
@@ -1891,8 +1893,8 @@ GUI_TEST_CLASS_DEFINITION(test_0013_1) {
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI_transl.aln"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI_transl.aln"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 
@@ -1952,12 +1954,12 @@ GUI_TEST_CLASS_DEFINITION(test_0014) {
     GTGlobals::sleep(5000);
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTGlobals::sleep();
 
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 
 // Expected state: UGENE not crash
     GTGlobals::sleep(5000);
@@ -1980,12 +1982,12 @@ GUI_TEST_CLASS_DEFINITION(test_0014_1) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTGlobals::sleep();
 
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 
 // Expected state: UGENE not crash
     GTGlobals::sleep();
@@ -2001,8 +2003,8 @@ GUI_TEST_CLASS_DEFINITION(test_0014_2) {
 // CHANGES: close and open MDI window, close Project tree view
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTGlobals::sleep();
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
     GTUtilsProjectTreeView::toggleView(os);
     GTGlobals::sleep();
@@ -2018,12 +2020,12 @@ GUI_TEST_CLASS_DEFINITION(test_0014_2) {
     GTGlobals::sleep(5000);
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTGlobals::sleep();
 
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 
 // Expected state: UGENE not crash
     GTGlobals::sleep(5000);
@@ -2045,9 +2047,9 @@ GUI_TEST_CLASS_DEFINITION(test_0015) {
     GTUtilsMdi::activeWindow(os);
 
 // 4. select document in project and press del
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
 // Expected state: UGENE not crash
@@ -2076,9 +2078,9 @@ GUI_TEST_CLASS_DEFINITION(test_0015_1) {
     GTUtilsMdi::activeWindow(os);
 
 // 4. select document in project and press del
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
 // Expected state: UGENE not crash
@@ -2105,9 +2107,9 @@ GUI_TEST_CLASS_DEFINITION(test_0015_2) {
     GTGlobals::sleep();
 
 // 4. select document in project and press del
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
 // Expected state: UGENE not crash
@@ -2142,9 +2144,9 @@ GUI_TEST_CLASS_DEFINITION(test_0016) {
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
 // copy to clipboard
-//    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+//    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTUtilsDialog::waitForDialog(os,new PopupChooser(os,QStringList()<<MSAE_MENU_COPY<<"copy_selection"));
-    GTMouseDriver::click(os,Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     QString clipboardText = GTClipboard::text(os);
@@ -2162,11 +2164,11 @@ GUI_TEST_CLASS_DEFINITION(test_0016_1) {
 
 // CHANGES: insert gaps in the beginning
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTGlobals::sleep(200);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTGlobals::sleep(200);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTGlobals::sleep();
 
 // 2. Open same file in text editor. Change first 3 bases of 'Phaneroptera_falcata'
@@ -2188,7 +2190,7 @@ GUI_TEST_CLASS_DEFINITION(test_0016_1) {
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
     GTGlobals::sleep();
 // copy to clipboard
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep();
 
     QString clipboardText = GTClipboard::text(os);
@@ -2222,16 +2224,16 @@ GUI_TEST_CLASS_DEFINITION(test_0016_2) {
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
 // copy to clipboard
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep();
 
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText == "CTT", "MSA part differs from expected");
 
 // CHANGES: select item in project tree view and press delete
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "ma2_gapped.aln"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "ma2_gapped.aln"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(5000);
 }
 
@@ -2424,12 +2426,12 @@ GUI_TEST_CLASS_DEFINITION(test_0019) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    QStringList preList = GTUtilsMSAEditorSequenceArea::getVisibaleNames(os);
+    QStringList preList = GTUtilsMSAEditorSequenceArea::getVisibleNames(os);
 // 2. Press button Enable collapsing
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
 
 // Expected state: Mecopoda_elongata__Ishigaki__J and Mecopoda_elongata__Sumatra_ folded together
-    QStringList postList = GTUtilsMSAEditorSequenceArea::getVisibaleNames(os);
+    QStringList postList = GTUtilsMSAEditorSequenceArea::getVisibleNames(os);
     CHECK_SET_ERR(preList.size() == postList.size() + 1, "Name lists differs not by 1");
 }
 
@@ -2440,12 +2442,12 @@ GUI_TEST_CLASS_DEFINITION(test_0019_1) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    QStringList preList = GTUtilsMSAEditorSequenceArea::getVisibaleNames(os);
+    QStringList preList = GTUtilsMSAEditorSequenceArea::getVisibleNames(os);
 // 2. Press button Enable collapsing
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
 
 // Expected state: Mecopoda_elongata__Ishigaki__J and Mecopoda_elongata__Sumatra_ folded together
-    QStringList postList = GTUtilsMSAEditorSequenceArea::getVisibaleNames(os);
+    QStringList postList = GTUtilsMSAEditorSequenceArea::getVisibleNames(os);
     CHECK_SET_ERR(preList.size() == postList.size() + 1, "Name lists differs not by 1");
 }
 
@@ -2456,12 +2458,12 @@ GUI_TEST_CLASS_DEFINITION(test_0019_2) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    QStringList preList = GTUtilsMSAEditorSequenceArea::getVisibaleNames(os);
+    QStringList preList = GTUtilsMSAEditorSequenceArea::getVisibleNames(os);
 // 2. Press button Enable collapsing
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
 
 // Expected state: Mecopoda_elongata__Ishigaki__J and Mecopoda_elongata__Sumatra_ folded together
-    QStringList postList = GTUtilsMSAEditorSequenceArea::getVisibaleNames(os);
+    QStringList postList = GTUtilsMSAEditorSequenceArea::getVisibleNames(os);
     CHECK_SET_ERR(preList.size() == postList.size() + 1, "Name lists differs not by 1");
 }
 
@@ -2475,13 +2477,13 @@ GUI_TEST_CLASS_DEFINITION(test_0020) {
 // 3. Click OK
     GTUtilsDialog::waitForDialog(os, new DeleteGapsDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_EDIT" << "remove_columns_of_gaps"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: UGENE not crashes, deletion is not performed
     GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0),QPoint(0,9));
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os,'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick('c',Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString text = GTClipboard::text(os);
     QString expected = "A\nA\nT\nA\nT\nT\nT\nA\nA\nA";
@@ -2499,26 +2501,26 @@ GUI_TEST_CLASS_DEFINITION(test_0020_1) {
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
     GTGlobals::sleep();
     for (int i=0; i<6; i++) {
-        GTKeyboardDriver::keyClick(os, ' ');
+        GTKeyboardDriver::keyClick( ' ');
         GTGlobals::sleep(100);
     }
 // 3. Select Edit -> remove columns of gaps -> remove columns with number of gaps 1.
     GTWidget::click(os,GTWidget::findWidget(os, "msa_editor_sequence_area"));
     GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(0,0),QPoint(19,9));
-    GTKeyboardDriver::keyClick(os,'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick('c',Qt::ControlModifier);
     GTGlobals::sleep(200);
     QString initial = GTClipboard::text(os);
 // 4. Click OK
     GTUtilsDialog::waitForDialog(os, new DeleteGapsDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_EDIT" << "remove_columns_of_gaps"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: UGENE not crashes, deletion is not performed
     GTWidget::click(os,GTWidget::findWidget(os, "msa_editor_sequence_area"));
     GTGlobals::sleep(500);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(0,0),QPoint(19,9));
-    GTKeyboardDriver::keyClick(os,'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick('c',Qt::ControlModifier);
     GTGlobals::sleep(200);
     QString final = GTClipboard::text(os);
 
@@ -2602,7 +2604,7 @@ GUI_TEST_CLASS_DEFINITION(test_0022){
 //3. Insert 3 gaps to first three positoons in "Phaneroptera_falcata"
     GTUtilsMSAEditorSequenceArea::click(os,QPoint(0,0));
     for(int i=0;i<3;i++){
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Space);
         GTGlobals::sleep(200);
     }
 //4. Select char at 4 position in "Phaneroptera_falcata"(A)
@@ -2625,7 +2627,7 @@ GUI_TEST_CLASS_DEFINITION(test_0022_1){//DIFFERENCE: Column label is tested
 //3. Insert 3 gaps to first three positoons in "Phaneroptera_falcata"
     GTUtilsMSAEditorSequenceArea::click(os,QPoint(0,0));
     for(int i=0;i<3;i++){
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Space);
         GTGlobals::sleep(200);
     }
 //4. Select char at 4 position in "Phaneroptera_falcata"(A)
@@ -2647,7 +2649,7 @@ GUI_TEST_CLASS_DEFINITION(test_0022_2){//DIFFERENCE: Line label is tested
 
 //3. Insert 3 gaps to first three positoons in "Phaneroptera_falcata"
     GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(-5,0),QPoint(-5,4));
-    GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
 
 //4. Select char at 4 position in "Phaneroptera_falcata"(A)
     GTUtilsMSAEditorSequenceArea::click(os,QPoint(3,0));
@@ -2669,7 +2671,7 @@ GUI_TEST_CLASS_DEFINITION(test_0023){
 //    3. Select data/samples/GENBANK/CVU55762_new.fa
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "CVU55762", "CVU55762"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,18));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
 //    Expected state: CVU55762 presents in list
 }
 
@@ -2679,7 +2681,7 @@ GUI_TEST_CLASS_DEFINITION(test_0024){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. select first symbol of first sequence
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0,0));
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 //3. press toolbar button "zoom to selection"
     int initOffset  = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
     //offsets are used to check zooming
@@ -2852,7 +2854,7 @@ GUI_TEST_CLASS_DEFINITION(test_0027){
     GTGlobals::sleep(500);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(3,2),QPoint(8,2));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText == "------", "Expected: ------ Found: " + clipboardText);
@@ -2870,7 +2872,7 @@ GUI_TEST_CLASS_DEFINITION(test_0027_1){
     GTGlobals::sleep(500);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(3,2),QPoint(8,3));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText == "------\n------", "Expected: ------\n------ Found: " + clipboardText);
@@ -2924,11 +2926,11 @@ GUI_TEST_CLASS_DEFINITION(test_0029){
         GTUtilsTaskTreeView::waitTaskFinished(os);
         //GTMouseDriver::click(os,Qt::RightButton);
 
-        GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"export.fasta"));
-        GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"Phaneroptera_falcata"));
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"export.fasta"));
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"Phaneroptera_falcata"));
         GTGlobals::sleep();
 
-        GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os,42,44));
+        GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os,42,44));
         GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Select"<< "Sequence region"));
         GTMenu::showContextMenu(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
         GTGlobals::sleep();
@@ -2960,14 +2962,14 @@ GUI_TEST_CLASS_DEFINITION(test_0029_1){//DIFFERENCE:gaps are trimmed, FASTQ form
     Runnable* r = new ExportSelectedSequenceFromAlignment(os,testDir + "_common_data/scenarios/sandbox/export.fasta",ExportSelectedSequenceFromAlignment::FASTQ,false);
     GTUtilsDialog::waitForDialog(os, r);
 
-    GTMouseDriver::click(os,Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"export.fastq"));
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"Bicolorana_bicolor_EF540830"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"export.fastq"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"Bicolorana_bicolor_EF540830"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Select"<< "Sequence region",GTGlobals::UseKey));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
 
@@ -2996,7 +2998,7 @@ GUI_TEST_CLASS_DEFINITION(test_0029_2){
     Runnable* r = new ExportSelectedSequenceFromAlignment(os,testDir + "_common_data/scenarios/sandbox/export.fasta",ExportSelectedSequenceFromAlignment::Genbank,true,false);
     GTUtilsDialog::waitForDialog(os, r);
 
-    GTMouseDriver::click(os,Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/sandbox/","export.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -3298,20 +3300,18 @@ GUI_TEST_CLASS_DEFINITION(test_0036){
 //Expected state: tree appeared
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0036_1){
+GUI_TEST_CLASS_DEFINITION(test_0036_1) {
 //1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(500);
+
 //2. Press "build tree" button on toolbar
 //Expected state: build tree dialog appeared
     //3. Fill dialog:
     //    Distanse matrix model: F84(Kimura/Jukes-Cantor/LogDet)
     //    Press "Build"
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk",1));
-    QAbstractButton *tree= GTAction::button(os,"Build Tree");
-    GTWidget::click(os,tree);
-
+    GTWidget::click(os, GTAction::button(os,"Build Tree"));
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //Expected state: tree appeared
@@ -3319,55 +3319,53 @@ GUI_TEST_CLASS_DEFINITION(test_0036_1){
     CHECK_SET_ERR(treeView!=NULL,"TreeView not found")
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0036_2){
+GUI_TEST_CLASS_DEFINITION(test_0036_2) {
 //1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(500);
+
 //2. Press "build tree" button on toolbar
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk",2));
-    QAbstractButton *tree= GTAction::button(os,"Build Tree");
-    GTWidget::click(os,tree);
-    GTGlobals::sleep(500);
+    GTWidget::click(os, GTAction::button(os,"Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //Expected state: build tree dialog appeared
 
 //3. Fill dialog:
 //    Distanse matrix model: F84(Kimura/Jukes-Cantor/LogDet)
 //    Press "Build"
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
-    CHECK_SET_ERR(treeView!=NULL,"TreeView not found")
+    CHECK_SET_ERR(treeView != NULL,"TreeView not found")
 //Expected state: tree appeared
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0036_3){
+GUI_TEST_CLASS_DEFINITION(test_0036_3) {
 //1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(500);
+
 //2. Press "build tree" button on toolbar
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk",3));
-    QAbstractButton *tree= GTAction::button(os,"Build Tree");
-    GTWidget::click(os,tree);
-    GTGlobals::sleep(500);
+    GTWidget::click(os, GTAction::button(os,"Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //Expected state: build tree dialog appeared
 
 //3. Fill dialog:
 //    Distanse matrix model: F84(Kimura/Jukes-Cantor/LogDet)
 //    Press "Build"
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
-    CHECK_SET_ERR(treeView!=NULL,"TreeView not found")
+    CHECK_SET_ERR(treeView != NULL,"TreeView not found")
 //Expected state: tree appeared
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0037){
+GUI_TEST_CLASS_DEFINITION(test_0037) {
 //1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //2. Press "build tree" button on toolbar
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk",0,0.5));
-    QAbstractButton *tree= GTAction::button(os,"Build Tree");
-    GTWidget::click(os,tree);
-    GTGlobals::sleep(500);
+    GTWidget::click(os, GTAction::button(os,"Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //Expected state: build tree dialog appeared
 
 //3. Fill dialog:
@@ -3380,15 +3378,15 @@ GUI_TEST_CLASS_DEFINITION(test_0037){
 //Expected state: tree appeared
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0037_1){
+GUI_TEST_CLASS_DEFINITION(test_0037_1) {
 //1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //2. Press "build tree" button on toolbar
-    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk",0,50));
-    QAbstractButton *tree= GTAction::button(os,"Build Tree");
-    GTWidget::click(os,tree);
-    GTGlobals::sleep();
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk", 0, 50));
+    GTWidget::click(os, GTAction::button(os,"Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //Expected state: build tree dialog appeared
 
 //3. Fill dialog:
@@ -3397,19 +3395,19 @@ GUI_TEST_CLASS_DEFINITION(test_0037_1){
 //    Coefficient of variation: 0.50(50.00/99.00)
 //    Press "Build"
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
-    CHECK_SET_ERR(treeView!=NULL,"TreeView not found")
+    CHECK_SET_ERR(treeView != NULL,"TreeView not found")
 //Expected state: tree appeared
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0037_2){
+GUI_TEST_CLASS_DEFINITION(test_0037_2) {
 //1. open document samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //2. Press "build tree" button on toolbar
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk",0,99));
-    QAbstractButton *tree= GTAction::button(os,"Build Tree");
-    GTWidget::click(os,tree);
-    GTGlobals::sleep();
+    GTWidget::click(os, GTAction::button(os,"Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //Expected state: build tree dialog appeared
 
 //3. Fill dialog:
@@ -3567,14 +3565,14 @@ 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(os,GTUtilsProjectTreeView::getItemCenter(os,"COI"));
+    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(os,Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(500);
 
     //Expected state: transl.aln appeared in project
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"COI_transl." + extention));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"COI_transl." + extention));
 
 }
 
@@ -3596,11 +3594,11 @@ GUI_TEST_CLASS_DEFINITION(test_0039_1){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0039_2){
-    test_0039_function(os, 2, "msf");
+    test_0039_function(os, 2, "meg");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0039_3){
-    test_0039_function(os, 3, "meg");
+    test_0039_function(os, 3, "msf");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0039_4){
@@ -3649,15 +3647,17 @@ GUI_TEST_CLASS_DEFINITION(test_0041) {
 
     // 3. Drag the selection with mouse to 5 bases to the right.
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0,0));
-    GTMouseDriver::press(os);
+    GTMouseDriver::press();
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(5,0));
-    GTMouseDriver::release(os);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
     // Expected state: alignment moved to 5 bases to the right.
 
     // 4. Drag the selection with mouse to one base to the left.
-    GTMouseDriver::press(os);
+    GTMouseDriver::press();
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(4,0));
-    GTMouseDriver::release(os);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
     // Expected state: alignment  moved to one bases to the left.
 
     // Check results
@@ -3932,16 +3932,16 @@ GUI_TEST_CLASS_DEFINITION(test_0049){
                                                                     ExportDocumentDialogFiller::CLUSTALW));\
     GTWidget::click(os, GTAction::button(os, "Save alignment as"));
     GTUtilsProjectTreeView::click(os, "COI.aln");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTFileDialog::openFile(os, sandBoxDir, "COI_test_0049.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(10,10));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTWidget::click(os, GTAction::button(os, "Save alignment"));
     GTUtilsProjectTreeView::click(os, "COI_test_0049.aln");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTFileDialog::openFile(os, sandBoxDir, "COI_test_0049.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -4078,7 +4078,7 @@ GUI_TEST_CLASS_DEFINITION(test_0053){
         GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
 
         GTUtilsDialog::waitForDialog(os,new PopupChooser(os,QStringList()<<MSAE_MENU_COPY<<"copy_formatted"));
-        GTMouseDriver::click(os,Qt::RightButton);
+        GTMouseDriver::click(Qt::RightButton);
         GTGlobals::sleep(3000);
 
         QString clipboardText = GTClipboard::text(os);
@@ -4109,7 +4109,7 @@ GUI_TEST_CLASS_DEFINITION(test_0053_1){
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(2, 0));
 
     GTUtilsDialog::waitForDialog(os,new PopupChooser(os,QStringList()<<MSAE_MENU_COPY<<"copy_formatted"));
-    GTMouseDriver::click(os,Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(3000);
 
     QString clipboardText = GTClipboard::text(os);
@@ -4167,7 +4167,7 @@ GUI_TEST_CLASS_DEFINITION(test_0053_3){
         GTUtilsMSAEditorSequenceArea::selectSequence(os, names.first());
 
         GTUtilsDialog::waitForDialog(os,new PopupChooser(os,QStringList()<<MSAE_MENU_COPY<<"copy_formatted"));
-        GTMouseDriver::click(os,Qt::RightButton);
+        GTMouseDriver::click(Qt::RightButton);
         GTGlobals::sleep(3000);
 
         QString clipboardText = GTClipboard::text(os);
@@ -4426,8 +4426,8 @@ GUI_TEST_CLASS_DEFINITION(test_0059){
 
             GTUtilsDialog::waitForDialog(os, new ColorDialogFiller(os, 255, 0, 0));
             QPoint cell2 = QPoint(1.5*cellWidth, 10);
-            GTMouseDriver::moveTo(os, alphabetColorsFrame->mapToGlobal(cell2));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(alphabetColorsFrame->mapToGlobal(cell2));
+            GTMouseDriver::click();
             GTGlobals::sleep(500);
             QColor cell2Color = GTWidget::getColor(os, dialog, alphabetColorsFrame->mapTo(dialog, cell2));
             CHECK_SET_ERR(cell2Color.name() == "#ff0000", "color was chanded wrong: " + cell2Color.name());
@@ -4604,8 +4604,7 @@ GUI_TEST_CLASS_DEFINITION(test_0062){
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     QDir().mkpath(sandBoxDir + "read_only_dir");
-    PermissionsSetter p;
-    p.setReadOnly(os, sandBoxDir + "read_only_dir");
+    GTFile::setReadOnly(os, sandBoxDir + "read_only_dir");
 //    Open "Export subalignment" dialog
     class custom: public CustomScenario{
     public:
@@ -4690,7 +4689,7 @@ GUI_TEST_CLASS_DEFINITION(test_0063){
                 CHECK_SET_ERR(expectedActions.contains(act->objectName()), act->objectName() + " unexpectidly found in menu");
             }
 
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Escape);
         }
     };
 
@@ -4768,7 +4767,7 @@ GUI_TEST_CLASS_DEFINITION(test_0068){
     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(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 //    Check the clipboard
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText.startsWith("TTAGTTTATTAATTCGAGCTGAACTAGGTCAACCAGGCTAT---TTAATTGGTGACGATCAAATTTACAAT"), "unexpected clipboard text: " + clipboardText);
@@ -4778,7 +4777,6 @@ GUI_TEST_CLASS_DEFINITION(test_0069){
 //    Open COI.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "Chikungunya_E1.fasta");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Press on some sequence in nameList
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-5, 2));
     QScrollBar* hscroll = GTWidget::findExactWidget<QScrollBar*>(os, "horizontal_names_scroll");
@@ -4786,43 +4784,51 @@ GUI_TEST_CLASS_DEFINITION(test_0069){
 //    Check keys:
 //    right,
     for(int i = 0; i<3; i++){
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["right"]);
-        GTGlobals::sleep(100);
+        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++){
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["left"]);
-        GTGlobals::sleep(100);
+        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(os, GTKeyboardDriver::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(os, GTKeyboardDriver::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(os, GTKeyboardDriver::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(os, GTKeyboardDriver::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++){
-        GTMouseDriver::scroll(os, -1);
+        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()));
     GTGlobals::sleep(500);
 
     for(int i = 0; i<2; i++){
-        GTMouseDriver::scroll(os, 1);
-        GTGlobals::sleep(100);
+        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()));
 }
@@ -4842,9 +4848,9 @@ GUI_TEST_CLASS_DEFINITION(test_0071){
 //    Click on some character on sequence area
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(2, 2));
 //    Press on other character with shift modifier
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(8, 8));
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
 //    Expected state: selection is created on these characters
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(2, 2), QPoint(8, 8)));
 }
@@ -4856,84 +4862,84 @@ GUI_TEST_CLASS_DEFINITION(test_0072){
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(5, 5));
 //    Check keys: arrows
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["up"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Up);
     GTGlobals::sleep(300);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(5,4), QPoint(5,4)));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["left"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Left);
     GTGlobals::sleep(300);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(4,4), QPoint(4,4)));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Down);
     GTGlobals::sleep(300);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(4,5), QPoint(4,5)));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["right"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Right);
     GTGlobals::sleep(300);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(5,5), QPoint(5,5)));
 
 //    shift + arrows
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["up"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick( Qt::Key_Up);
     GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(5,4), QPoint(5,5)));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["left"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Left);
     GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(4,4), QPoint(5,5)));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Down);
     GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(4,5), QPoint(5,5)));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["right"]);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Right);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTGlobals::sleep(300);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(5,5), QPoint(5,5)));
 //    end
     QScrollBar* hbar = GTWidget::findExactWidget<QScrollBar*>(os, "horizontal_sequence_scroll");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["end"]);
+    GTKeyboardDriver::keyClick( Qt::Key_End);
     GTGlobals::sleep(300);
     CHECK_SET_ERR(hbar->value() == hbar->maximum(), QString("end key scrollbar value: %1").arg(hbar->value()))
 //    home
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["home"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Home);
     GTGlobals::sleep(300);
     CHECK_SET_ERR(hbar->value() == 0, QString("home key works wrong. Scrollbar value: %1").arg(hbar->value()))
 //    page down
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pagedown"]);
+    GTKeyboardDriver::keyClick( Qt::Key_PageDown);
     GTGlobals::sleep(300);
     CHECK_SET_ERR(hbar->value() > 20, QString("page down key works wrong. Scrollbar value: %1").arg(hbar->value()))
 //    page up
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pageup"]);
+    GTKeyboardDriver::keyClick( Qt::Key_PageUp);
     GTGlobals::sleep(300);
     CHECK_SET_ERR(hbar->value() == 0, QString("page down key works wrong. Scrollbar value: %1").arg(hbar->value()))
 //  end+shift
     QScrollBar* vbar = GTWidget::findExactWidget<QScrollBar*>(os, "vertical_sequence_scroll");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["end"], GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( Qt::Key_End, Qt::ShiftModifier);
     GTGlobals::sleep(300);
     CHECK_SET_ERR(vbar->value() == vbar->maximum(), QString("shift + end key works wrong. Scrollbar value: %1").arg(vbar->value()))
 //  home+shift
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["home"], GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Home, Qt::ShiftModifier);
     GTGlobals::sleep(300);
     CHECK_SET_ERR(vbar->value() == 0, QString("shift + home key works wrong. Scrollbar value: %1").arg(vbar->value()))
 //  page down+shift
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pagedown"], GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( Qt::Key_PageDown, Qt::ShiftModifier);
     GTGlobals::sleep(300);
     CHECK_SET_ERR(vbar->value() > 20, QString("shift + page down key works wrong. Scrollbar value: %1").arg(vbar->value()))
 //  page up + shift
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pageup"], GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( Qt::Key_PageUp, Qt::ShiftModifier);
     GTGlobals::sleep(300);
     CHECK_SET_ERR(vbar->value() == 0, QString("shift + page down key works wrong. Scrollbar value: %1").arg(vbar->value()))
 //  wheel event
     for(int i = 0; i<3; i++){
-        GTMouseDriver::scroll(os, -1);
+        GTMouseDriver::scroll(-1);
         GTGlobals::sleep(100);
     }
     CHECK_SET_ERR(hbar->value() == 3, QString("scroll down works wrong. Scrollbar has value: %1").arg(hbar->value()));
     GTGlobals::sleep(500);
 
     for(int i = 0; i<2; i++){
-        GTMouseDriver::scroll(os, 1);
+        GTMouseDriver::scroll(1);
         GTGlobals::sleep(100);
     }
     CHECK_SET_ERR(hbar->value() == 1, QString("scroll up works wrong. Scrollbar has value: %1").arg(hbar->value()));
@@ -5042,9 +5048,10 @@ GUI_TEST_CLASS_DEFINITION(test_0076){
 //    Drag visible range with mouse
     QColor initColor1 = GTWidget::getColor(os, simple, simple->geometry().topLeft() + QPoint(5, 5));
     QString initColorS1 = initColor1.name();
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, QPoint(10, GTMouseDriver::getMousePosition().y()));
-    GTMouseDriver::release(os);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(QPoint(10, GTMouseDriver::getMousePosition().y()));
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 //    Expected state: visible range dragged
     QColor finalColor1 = GTWidget::getColor(os, simple, simple->geometry().topLeft() + QPoint(5, 5));
     QString finalColorS1 = finalColor1.name();
@@ -5056,22 +5063,23 @@ GUI_TEST_CLASS_DEFINITION(test_0077){
 //    Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    Open tree with msa
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk", 0, 0, true));
-    QAbstractButton *tree= GTAction::button(os,"Build Tree");
-    GTWidget::click(os,tree);
-    GTGlobals::sleep(500);
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    Press "refresh tree" button on tree view toolbar
     QWidget* button = GTAction::button(os, "Refresh tree");
     bool vis = button->isVisible();
-    if(vis){
+    if (vis) {
         GTWidget::click(os, button);
-    }else{
+    } else {
         QWidget* extButton = GTWidget::findWidget(os, "qt_toolbar_ext_button", GTWidget::findWidget(os, "msa_editor_tree_view_container_widget"));
         GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Refresh tree"));
         GTWidget::click(os, extButton);
     }
-    GTGlobals::sleep(1000);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: tree refreshed
 }
 
@@ -5093,7 +5101,7 @@ GUI_TEST_CLASS_DEFINITION(test_0078){
 
     GTWidget::click(os, GTWidget::findWidget(os, "treeView"));
     for(int i = 0; i<2; i++){
-        GTMouseDriver::scroll(os, 1);
+        GTMouseDriver::scroll(1);
         GTGlobals::sleep(100);
     }
     int val1 = hbar->value();
@@ -5101,6 +5109,123 @@ GUI_TEST_CLASS_DEFINITION(test_0078){
     GTGlobals::sleep();
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0079) {
+    // Open an alignment with some alphabet.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+
+    // Do the action for a sequence (or sequences) of the same alphabet.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 7));
+
+    GTClipboard::setText(os, ">human_T1\r\nACGTACG\r\n");
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY" << "paste"));
+    GTMouseDriver::click(Qt::RightButton);
+    GTGlobals::sleep();
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
+
+    // The sequence was added to the bottom of the alignment.
+    CHECK_SET_ERR(sequencesNameList.length() > 0, "No sequences");
+    CHECK_SET_ERR(sequencesNameList.last() == "human_T1", "No pasted sequences");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0080) {
+    // Open an alignment with some alphabet.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+
+    // Use a sequence of another alphabet.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 7));
+
+    GTClipboard::setText(os, ">human_T1\r\nACGTACS\r\n");
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY" << "paste"));
+
+    // A warning notification appears:
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Extended DNA\"");
+
+    GTMouseDriver::click(Qt::RightButton);
+    GTGlobals::sleep();
+
+    const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
+
+    // The sequence was added to the bottom of the alignment.
+    CHECK_SET_ERR(sequencesNameList.length() > 0, "No sequences");
+    CHECK_SET_ERR(sequencesNameList.last() == "human_T1", "No pasted sequences");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0081) {
+    // Open an alignment with some alphabet.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+
+    // Use a sequence of another alphabet.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 7));
+
+    GTClipboard::setText(os, ">human_T1\r\nACGTACS\r\n>human_T2\r\nACGTAC\r\n");
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY" << "paste"));
+
+    // A warning notification appears:
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Extended DNA\"");
+
+    GTMouseDriver::click(Qt::RightButton);
+    GTGlobals::sleep();
+
+    const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
+
+    // The sequence was added to the bottom of the alignment.
+    CHECK_SET_ERR(sequencesNameList.length() > 0, "No sequences");
+    CHECK_SET_ERR(sequencesNameList.last() == "human_T2", "No pasted sequences");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0082) {
+    // Open an alignment with some alphabet.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+
+    // Use a sequence of another alphabet.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 7));
+
+    GTClipboard::setText(os, ">human_T1\r\nACGTAC\r\n>human_T2\r\nACGTACS\r\n>human_T3\r\nACGTAC\r\n");
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY" << "paste"));
+
+    // A warning notification appears:
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Extended DNA\"");
+
+    GTMouseDriver::click(Qt::RightButton);
+    GTGlobals::sleep();
+
+    const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
+
+    // The sequence was added to the bottom of the alignment.
+    CHECK_SET_ERR(sequencesNameList.length() > 0, "No sequences");
+    CHECK_SET_ERR(sequencesNameList.last() == "human_T3", "No pasted sequences");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0083) {
+    // Open an alignment with some alphabet.
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+
+    // Use a sequence of another alphabet.
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(7, 3), QPoint(12, 7));
+
+    GTClipboard::setText(os, ">human_T1\r\nACGTAC\r\n>human_T2\r\nACGTACS\r\n>human_T3\r\nQQ\r\n");
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY" << "paste"));
+
+    // A warning notification appears:
+    GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Raw\"");
+
+    GTMouseDriver::click(Qt::RightButton);
+    GTGlobals::sleep();
+
+    const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
+
+    // The sequence was added to the bottom of the alignment.
+    CHECK_SET_ERR(sequencesNameList.length() > 0, "No sequences");
+    CHECK_SET_ERR(sequencesNameList.last() == "human_T3", "No pasted sequences");
+}
+
+
 GUI_TEST_CLASS_DEFINITION(test_fake) {
     Q_UNUSED(os);
 }
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 3045ebf..4e49503 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
@@ -244,6 +244,14 @@ GUI_TEST_CLASS_DECLARATION(test_0076)
 GUI_TEST_CLASS_DECLARATION(test_0077)
 GUI_TEST_CLASS_DECLARATION(test_0078)
 
+// alphabet
+GUI_TEST_CLASS_DECLARATION(test_0079)
+GUI_TEST_CLASS_DECLARATION(test_0080)
+GUI_TEST_CLASS_DECLARATION(test_0081)
+GUI_TEST_CLASS_DECLARATION(test_0082)
+GUI_TEST_CLASS_DECLARATION(test_0083)
+
+
 GUI_TEST_CLASS_DECLARATION(test_fake)
 #undef GUI_TEST_SUITE
 } // namespace U2
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 44eb982..b51ef8a 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
@@ -64,7 +64,7 @@ void checkAlignedRegion(HI::GUITestOpStatus& os, QRect selectionRect, const QStr
     selectionRect.adjust(-leftOffset, 0, -leftOffset, 0);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, selectionRect.topLeft(), selectionRect.bottomRight());
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardTest = GTClipboard::text(os);
@@ -92,7 +92,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
     GTWidget::click( os, align);
 
     GTUtilsProjectTreeView::click(os, "tub1.txt");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
     const bool hasMessage = logTracer.checkMessage("Cannot remove document tub1.txt");
@@ -123,7 +123,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
     GTWidget::click( os, align);
 
     GTUtilsProjectTreeView::click(os, "3000_sequences.aln");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
     const bool hasMessage = logTracer.checkMessage("Cannot remove document 3000_sequences.aln");
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 fce7824..f111816 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
@@ -60,13 +60,13 @@ using namespace HI;
 
 void test_1(HI::GUITestOpStatus &os,int i, QString expectedSec, int j = 0) {
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(j,i));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
 
     GTGlobals::sleep(500);
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,1));
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,i), QPoint(14, i));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardTest = GTClipboard::text(os);
@@ -113,7 +113,7 @@ void test_3(HI::GUITestOpStatus &os, int i=0, QString expectedSec=""){
     GTMenu::showContextMenu(os,seq);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,i), QPoint(14, i));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardTest = GTClipboard::text(os);
@@ -156,11 +156,11 @@ void test_4(HI::GUITestOpStatus &os, int startPos, int endPos, QString expectedS
         GTMenu::showContextMenu(os,seq);
     }
     else{
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
     }
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,i), QPoint(14, i));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardTest = GTClipboard::text(os);
@@ -254,7 +254,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
     GTMenu::showContextMenu(os,seq);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(13, 9));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardTest = GTClipboard::text(os);
@@ -295,7 +295,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1){
     GTMenu::showContextMenu(os,seq);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(12, 9));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardTest = GTClipboard::text(os);
@@ -338,7 +338,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
     GTMenu::showContextMenu(os,seq);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(12, 9));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardTest = GTClipboard::text(os);
@@ -384,7 +384,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1){
 //     QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
 //     GTUtilsDialog::waitForDialog(os,new DeleteGapsDialogFiller(os,1));
 //     GTWidget::click(os,seq);
-//    GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["delete"],GTKeyboardDriver::key["shift"]);
+//    GTKeyboardDriver::keyClick(Qt::Key_Delete,Qt::Key_Shift);
     QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_EDIT" << "remove_columns_of_gaps"));
     GTUtilsDialog::waitForDialog(os,new DeleteGapsDialogFiller(os,1));
@@ -393,7 +393,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1){
     GTGlobals::sleep(1000);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(12, 9));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardTest = GTClipboard::text(os);
@@ -439,21 +439,21 @@ void test_9(HI::GUITestOpStatus &os, int i=0){
         GTUtilsMSAEditorSequenceArea::click(os,QPoint(13,0));
     }
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTGlobals::sleep(100);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    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(os, 'c',GTKeyboardDriver::key["ctrl"]);
+        GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
         gaps=QString("--\n--\n--\n--\n--\n--\n--\n--\n--\n--");
     }
     else{
         GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(14,0), QPoint(15, 9));
-        GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+        GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
         gaps=QString("-A\n--\n--\n--\n--\n--\n--\n--\n--\n--");
     }
 
@@ -470,7 +470,7 @@ void test_9(HI::GUITestOpStatus &os, int i=0){
     GTMenu::showContextMenu(os,seq);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14, 9));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     clipboardTest = GTClipboard::text(os);
@@ -552,7 +552,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 //3. Try to edit MSA(insert spaces or something
     GTUtilsMSAEditorSequenceArea::click(os);
     for(int i = 0; i<7; i++){
-        GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["space"]);
+        GTKeyboardDriver::keyClick(Qt::Key_Space);
         GTGlobals::sleep(200);
     }
 //Expected state: UGENE not crash
@@ -565,11 +565,11 @@ GUI_TEST_CLASS_DEFINITION(test_0011){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Select region 4..11 from Zychia_baranovi sequence. Press "Delete" button.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(3,8), QPoint(10,8));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(200);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,8), QPoint(11,8));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     QString clipboardText = GTClipboard::text(os);
     GTWidget::click(os,GTWidget::findWidget(os, "msa_editor_sequence_area"));
@@ -581,7 +581,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){
     GTWidget::click(os,undo);
 //Expected state: Zychia_baranovi TTAGATTATTAA
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,8), QPoint(11,8));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     clipboardText = GTClipboard::text(os);
     GTWidget::click(os,GTWidget::findWidget(os, "msa_editor_sequence_area"));
@@ -592,7 +592,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){
     GTWidget::click(os,redo);
 //Expected state: Zychia_baranovi TTAA
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,8), QPoint(11,8));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText=="TTAA--------","\nExpected: TTAA--------\nFound:\n"+clipboardText);
@@ -604,11 +604,11 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Select region 4..11 from Zychia_baranovi sequence. Press "Delete" button.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(3,8), QPoint(10,8));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(200);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,8), QPoint(11,8));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     QString clipboardText = GTClipboard::text(os);
     GTWidget::click(os,GTWidget::findWidget(os, "msa_editor_sequence_area"));
@@ -616,10 +616,10 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1){
 //Expected state: Zychia_baranovi TTAA
 
 //DIFFERENCE: 3. Click ctrl+z
-    GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
 //Expected state: Zychia_baranovi TTAGATTATTAA
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,8), QPoint(11,8));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     clipboardText = GTClipboard::text(os);
     GTWidget::click(os,GTWidget::findWidget(os, "msa_editor_sequence_area"));
@@ -627,15 +627,15 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1){
 
 //4.DIFFERENCE: 3. Click ctrl+y or ctrl+shift+z
 #ifdef Q_OS_WIN
-    GTKeyboardDriver::keyClick(os, 'y', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'y', Qt::ControlModifier);
 #else
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
 #endif
 //Expected state: Zychia_baranovi TTAA
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,8), QPoint(11,8));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText=="TTAA--------","\nExpected: TTAA--------\nFound:\n"+clipboardText);
@@ -652,7 +652,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2){
     GTMenu::showContextMenu(os,seq);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(13, 9));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardTest = GTClipboard::text(os);
@@ -674,7 +674,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2){
     GTWidget::click(os,seq);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(13, 9));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     clipboardTest = GTClipboard::text(os);
@@ -696,7 +696,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2){
     GTWidget::click(os,seq);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(13, 9));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     clipboardTest = GTClipboard::text(os);
@@ -712,19 +712,19 @@ GUI_TEST_CLASS_DEFINITION(test_0011_3){
 //2. Insert seversl spaces somewhere
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,0));
     for(int i=0; i<6; i++){
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Space);
         GTGlobals::sleep(200);
     }
 //3. Undo this
     for (int i=0; i<6; i++){
-        GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
+        GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
         GTGlobals::sleep(200);
     }
 //Expected state: First sequwnce is AAGACTTCTTTTAA
     GTWidget::click(os,GTWidget::findWidget(os, "msa_editor_sequence_area"));
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(13, 0));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardTest = GTClipboard::text(os);
@@ -740,7 +740,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. Select region 3..8 for Conocephalus_discolor sequence. Press Ctrl+C.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2,4), QPoint(7, 4));
-    GTKeyboardDriver::keyClick(os, 'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
     GTGlobals::sleep(500);
 //Expected state: GCTTAT has copied to clipboard
     QString clipboardTest = GTClipboard::text(os);
@@ -822,14 +822,14 @@ GUI_TEST_CLASS_DEFINITION(test_0014){
 //    {Path:} _common_data/sandbox/result.aln
 //    {Add to project:} set checked
 //4. Click OK
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"result.aln"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"result.aln"));
+    GTMouseDriver::doubleClick();
 //Expected result: subaligniment created and added to project
 
 //5. Open result.aln in aligniment viewer
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0),QPoint(10,1));
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
 
     QString clipboardText = GTClipboard::text(os);
@@ -872,16 +872,16 @@ GUI_TEST_CLASS_DEFINITION(test_0015) {
 
 //4. Check sequences Montana_montana, Zychia_baranovi
             const QPoint p = dialog->mapToGlobal(table->geometry().topRight() + QPoint(-2, 2));
-            GTMouseDriver::moveTo(os,p);
-            GTMouseDriver::doubleClick(os);
+            GTMouseDriver::moveTo(p);
+            GTMouseDriver::doubleClick();
 
             const QStringList list = QStringList() << "Zychia_baranovi" << "Montana_montana";
             for (int i = 0; i < table->rowCount(); i++) {
-                GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+                GTKeyboardDriver::keyClick( Qt::Key_Down);
                 GTGlobals::sleep(100);
                 QCheckBox *box = qobject_cast<QCheckBox *>(table->cellWidget(i, 0));
                 if (list.contains(box->text())) {
-                    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+                    GTKeyboardDriver::keyClick( Qt::Key_Space);
                     GTGlobals::sleep(100);
                 }
             }
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 f4d1cf0..bbb277c 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
@@ -38,6 +38,7 @@
 #include <primitives/GTWidget.h>
 #include <base_dialogs/ColorDialogFiller.h>
 #include "primitives/PopupChooser.h"
+#include <utils/GTThread.h>
 
 namespace U2 {
 
@@ -203,7 +204,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
         QImage imgGraph1 = pixmapGraph1.toImage();
 
         GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(40,17));
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
         GTGlobals::sleep(500);
 
         //checking images changed
@@ -234,7 +235,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
 //    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));
-    GTMouseDriver::press(os);
+    GTMouseDriver::press();
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(15,5));
 
 //    Expected state: while mouse button is pressed graph overview is blocked. On mouse release overview updating starts.
@@ -259,7 +260,8 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
 
     CHECK_SET_ERR(c.name()=="#a0a0a4","simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
 #endif
-    GTMouseDriver::release(os);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0009){
@@ -278,9 +280,9 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
 
 //    2. Select one symbol.
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(5,5));
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 //    3. Press Delete button and release it after a while.
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["delete"]);
+    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.
@@ -297,7 +299,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
 
     CHECK_SET_ERR(c.name()=="#a0a0a4","simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
 
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyRelease(Qt::Key_Delete);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0010){
@@ -316,9 +318,9 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 
 //    2. Select one symbol.
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(5,5));
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 //    3. Press Delete button and release it after a while.
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["space"]);
+    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.
@@ -333,7 +335,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
     QRgb rgb = img.pixel(overviewGraph->rect().topLeft() + QPoint(5,5));
     QColor c(rgb);
 
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["space"]);
+    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
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 3733b0d..e729d44 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
@@ -60,14 +60,14 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 
     //3. Press Shift + R keys on the keyboard.
     //Expected result : the character is selected in the replacement mode(i.e.the border of the character are drawn using another color and / or bold).
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
     //4. Press a key on the keyboard with another character of the same alphabet(e.g C key).
     //Expected result : the original character of the alignment was replaced with the new one(e.g 'A' was replaced with 'C').Selection is in normal mode.
-    GTKeyboardDriver::keyClick(os, 'c');
+    GTKeyboardDriver::keyClick( 'c');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "C", QString("Incorrect selection content: expected - %1, received - %2").arg("C").arg(selectionContent));
@@ -91,10 +91,10 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
 
     //5. Press a key on the keyboard with another character of the same alphabet(e.g C key).
     //Expected result : the original character of the alignment was replaced with the new one(e.g 'A' was replaced with 'C').Selection is in normal mode.
-    GTKeyboardDriver::keyClick(os, 'a');
+    GTKeyboardDriver::keyClick( 'a');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "A", QString("Incorrect selection content: expected - %1, received - %2").arg("A").arg(selectionContent));
@@ -118,10 +118,10 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
 
     //5. Press a key on the keyboard with another character of the same alphabet(e.g C key).
     //Expected result : the original character of the alignment was replaced with the new one(e.g 'A' was replaced with 'C').Selection is in normal mode.
-    GTKeyboardDriver::keyClick(os, 'g');
+    GTKeyboardDriver::keyClick( 'g');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "G", QString("Incorrect selection content: expected - %1, received - %2").arg("G").arg(selectionContent));
@@ -153,7 +153,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
 
     //3. Press Shift + R keys on the keyboard.
     //Expected result : the character is selected in the replacement mode(i.e.the border of the character are drawn using another color and / or bold).
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
     //4. Press a key on the keyboard with another character of the same alphabet(e.g C key).
     //Expected result :
@@ -162,10 +162,10 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
     //"%1".Use "Undo", if you'd like to restore the original alignment.
     //Here "%1" is one of the values : "Standard DNA", "Extended DNA", "Standard RNA", "Extended RNA", "Standard amino acid", "Extended amino acid", "Raw".
     GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Extended DNA\"");
-    GTKeyboardDriver::keyClick(os, 'r');
+    GTKeyboardDriver::keyClick( 'r');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "R", QString("Incorrect selection content: expected - %1, received - %2").arg("R").arg(selectionContent));
@@ -182,7 +182,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1){
 
     //3. Press Shift + R keys on the keyboard.
     //Expected result : the character is selected in the replacement mode(i.e.the border of the character are drawn using another color and / or bold).
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
     //4. Press a key on the keyboard with another character of the same alphabet(e.g C key).
     //Expected result :
@@ -191,7 +191,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1){
     //"%1".Use "Undo", if you'd like to restore the original alignment.
     //Here "%1" is one of the values : "Standard DNA", "Extended DNA", "Standard RNA", "Extended RNA", "Standard amino acid", "Extended amino acid", "Raw".
     GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Extended DNA\"");
-    GTKeyboardDriver::keyClick(os, 'r');
+    GTKeyboardDriver::keyClick( 'r');
     GTGlobals::sleep();
 
     //5. Click "Undo".
@@ -204,7 +204,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1){
     GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Extended DNA\"");
     GTUtilsMsaEditor::redo(os);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "R", QString("Incorrect selection content: expected - %1, received - %2").arg("R").arg(selectionContent));
@@ -221,16 +221,16 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
 
     //3. Press Shift + R keys on the keyboard.
     //Expected result : the character is selected in the replacement mode(i.e.the border of the character are drawn using another color and / or bold).
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
     //4. Press a key on the keyboard with another character of the same alphabet(e.g C key).
     //Expected result :
     //The original character was replaced by the new one. The alphabet of the alignment has been changed.
     //There is NO notifications.
-    GTKeyboardDriver::keyClick(os, 'a');
+    GTKeyboardDriver::keyClick( 'a');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "A", QString("Incorrect selection content: expected - %1, received - %2").arg("A").arg(selectionContent));
@@ -247,16 +247,16 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1){
 
     //3. Press Shift + R keys on the keyboard.
     //Expected result : the character is selected in the replacement mode(i.e.the border of the character are drawn using another color and / or bold).
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
     //4. Press a key on the keyboard with another character of the same alphabet(e.g C key).
     //Expected result :
     //The original character was replaced by the new one. The alphabet of the alignment has been changed.
     //There is NO notifications.
-    GTKeyboardDriver::keyClick(os, 'a');
+    GTKeyboardDriver::keyClick( 'a');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep();
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "A", QString("Incorrect selection content: expected - %1, received - %2").arg("A").arg(selectionContent));
@@ -279,16 +279,16 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
     //2. Select a character and make active the replace mode for it.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 9), QPoint(9, 9));
 
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
     //3. Click another character in the alignment.
     //Expected result : the first character is no more in the replacement mode.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 8), QPoint(9, 8));
 
-    GTKeyboardDriver::keyClick(os, 'c');
+    GTKeyboardDriver::keyClick( 'c');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "T", QString("Incorrect selection content: expected - %1, received - %2").arg("T").arg(selectionContent));
@@ -304,12 +304,12 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
 
     //3. Replace the gap
     //Expected result : the gap is succesfully replaced.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
-    GTKeyboardDriver::keyClick(os, 'c');
+    GTKeyboardDriver::keyClick( 'c');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "C", QString("Incorrect selection content: expected - %1, received - %2").arg("C").arg(selectionContent));
@@ -324,12 +324,12 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
 
     //3. Replace the gap
     //Expected result : the gap is succesfully replaced.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
-    GTKeyboardDriver::keyClick(os, 'c');
+    GTKeyboardDriver::keyClick( 'c');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "C", QString("Incorrect selection content: expected - %1, received - %2").arg("C").arg(selectionContent));
@@ -344,12 +344,12 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 
     //3. Replace the gap
     //Expected result : the gap is succesfully replaced.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
-    GTKeyboardDriver::keyClick(os, 'c');
+    GTKeyboardDriver::keyClick( 'c');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "C", QString("Incorrect selection content: expected - %1, received - %2").arg("C").arg(selectionContent));
@@ -362,21 +362,21 @@ GUI_TEST_CLASS_DEFINITION(test_0011){
     //2. Select a gap after the last sequence character.
     GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(603, 9));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["up"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Up);
     GTGlobals::sleep(500);
 
     //3. Replace the gap
     //Expected result : the gap is succesfully replaced.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
     GTGlobals::sleep(1000);
-    GTKeyboardDriver::keyClick(os, 'c');
+    GTKeyboardDriver::keyClick( 'c');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "C", QString("Incorrect selection content: expected - %1, received - %2").arg("C").arg(selectionContent));
@@ -388,18 +388,18 @@ GUI_TEST_CLASS_DEFINITION(test_0012){
 
     //2. Select a gap before the first sequence character.
     GTUtilsMSAEditorSequenceArea::selectColumnInConsensus(os, 0);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 9), QPoint(0, 9));
 
     //3. Replace the gap
     //Expected result : the gap is succesfully replaced.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
-    GTKeyboardDriver::keyClick(os, 'c');
+    GTKeyboardDriver::keyClick( 'c');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "C", QString("Incorrect selection content: expected - %1, received - %2").arg("C").arg(selectionContent));
@@ -414,12 +414,12 @@ GUI_TEST_CLASS_DEFINITION(test_0013){
 
     //3. Replace the character
     //Expected result : the character is succesfully replaced.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
-    GTKeyboardDriver::keyClick(os, 'c');
+    GTKeyboardDriver::keyClick( 'c');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "C", QString("Incorrect selection content: expected - %1, received - %2").arg("C").arg(selectionContent));
@@ -435,12 +435,12 @@ GUI_TEST_CLASS_DEFINITION(test_0014){
 
     //3. Replace the character
     //Expected result : the character is succesfully replaced.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
-    GTKeyboardDriver::keyClick(os, 'c');
+    GTKeyboardDriver::keyClick( 'c');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "C", QString("Incorrect selection content: expected - %1, received - %2").arg("C").arg(selectionContent));
@@ -461,18 +461,18 @@ GUI_TEST_CLASS_DEFINITION(test_0015){
 
     //4. Replace the character
     //Expected result : the character is replaced in all sequences of the group.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
-    GTKeyboardDriver::keyClick(os, 'c');
+    GTKeyboardDriver::keyClick( 'c');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "C", QString("Incorrect selection content: expected - %1, received - %2").arg("C").arg(selectionContent));
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 13), QPoint(9, 13));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "C", QString("Incorrect selection content: expected - %1, received - %2").arg("C").arg(selectionContent));
@@ -488,12 +488,12 @@ GUI_TEST_CLASS_DEFINITION(test_0016){
 
     //3. Replace the character to gap by space key
     //Expected result : the character is succesfully replaced.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "-", QString("Incorrect selection content: expected - %1, received - %2").arg("-").arg(selectionContent));
@@ -503,12 +503,12 @@ GUI_TEST_CLASS_DEFINITION(test_0016){
 
     //4. Replace the character to gap by '-' key
     //Expected result : the character is succesfully replaced.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
-    GTKeyboardDriver::keyClick(os, '-');
+    GTKeyboardDriver::keyClick( '-');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "-", QString("Incorrect selection content: expected - %1, received - %2").arg("-").arg(selectionContent));
@@ -524,13 +524,13 @@ GUI_TEST_CLASS_DEFINITION(test_0017){
 
     //3. Press unsupported key
     //Expected result : the error notification appeared.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
     GTUtilsNotifications::waitForNotification(os, true, "It is not possible to insert the character into the alignment.");
-    GTKeyboardDriver::keyClick(os, ']');
+    GTKeyboardDriver::keyClick( ']');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "T", QString("Incorrect selection content: expected - %1, received - %2").arg("T").arg(selectionContent));
@@ -546,14 +546,14 @@ GUI_TEST_CLASS_DEFINITION(test_0018){
 
     //3. Press 'Escape'
     //Expected result : edit character mode is ended.
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ShiftModifier);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 
-    GTKeyboardDriver::keyClick(os, 'c');
+    GTKeyboardDriver::keyClick( 'c');
     GTGlobals::sleep(200);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text(os);
     CHECK_SET_ERR(selectionContent == "T", QString("Incorrect selection content: expected - %1, received - %2").arg("T").arg(selectionContent));
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 063b2f9..1c4edf8 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
@@ -53,6 +53,7 @@
 #include "runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 #include "GTUtilsTaskTreeView.h"
+#include <utils/GTThread.h>
 
 namespace U2 {
 
@@ -190,44 +191,42 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1){
     CHECK_SET_ERR(l->text()==s, "Found: " + l->text());
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0003){//commit sequenceInfo
+GUI_TEST_CLASS_DEFINITION(test_0003) {
 //    Options panel. Information tab. Sequence length
 //    1. Open file (samples/FASTA/human_T1.fa)
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Activate Information tab on Options panel at the right edge of UGENE window.
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_SEQ_INFO"));
-    QWidget *w = GTWidget::findWidget(os,"Common Statistics");
-    CHECK_SET_ERR(w != NULL, "No Common Statistics widget");
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Statistics);
 
-    QLabel *l = w->findChild<QLabel*>();
-    CHECK_SET_ERR(l != NULL, "No child label in Common Statistics widget");
-    GTWidget::click(os, w);
+    QLabel *statisticsLabel = GTWidget::findExactWidget<QLabel *>(os, "Common Statistics");
+    CHECK_SET_ERR(statisticsLabel != NULL, "No Common Statistics label");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTGlobals::sleep(1000);
-    CHECK_SET_ERR(l->text().contains("<tr><td><b>Length: </b></td><td>199 950 </td></tr>"),
-                  "Sequence length is wrong");
 //    Expected state: sequence length must be 199950
+    CHECK_SET_ERR(statisticsLabel->text().contains("<tr><td><b>Length: </b></td><td>199 950 </td></tr>"),
+                  "Sequence length is wrong");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0003_1){//commit sequenceInfo
+GUI_TEST_CLASS_DEFINITION(test_0003_1) {
 //    Options panel. Information tab. Sequence length
 //    1. Open file (_common_data/scenarios/_regression/1093/refrence.fa)
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/_regression/1093/","refrence.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Activate Information tab on Options panel at the right edge of UGENE window.
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_SEQ_INFO"));
-    QWidget *w = GTWidget::findWidget(os,"Common Statistics");
-    CHECK_SET_ERR(w != NULL, "No Common Statistics widget");
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Statistics);
 
-    QLabel *l = w->findChild<QLabel*>();
-    CHECK_SET_ERR(l != NULL, "No child label in Common Statistics widget");
-    GTWidget::click(os, w);
+    QLabel *statisticsLabel = GTWidget::findExactWidget<QLabel *>(os, "Common Statistics");
+    CHECK_SET_ERR(statisticsLabel != NULL, "No Common Statistics label");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTGlobals::sleep(1000);
-    CHECK_SET_ERR(l->text().contains("<tr><td><b>Length: </b></td><td>114 </td></tr>"),
-                  "Sequence length is wrong");
 //    Expected state: sequence length must be 114
+    CHECK_SET_ERR(statisticsLabel->text().contains("<tr><td><b>Length: </b></td><td>114 </td></tr>"),
+                  "Sequence length is wrong");
 }
 GUI_TEST_CLASS_DEFINITION(test_0004){
 //1. Open file (samples/FASTA/human_T1.fa)
@@ -240,13 +239,15 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 
     QPoint point=GTMouseDriver::getMousePosition();
 
-    GTMouseDriver::moveTo(os, point - QPoint(15,0));//move 15 pix left
-    GTMouseDriver::press(os);
+    GTMouseDriver::moveTo(point - QPoint(15,0));//move 15 pix left
+    GTMouseDriver::press();
+
+    GTMouseDriver::moveTo(point + QPoint(80,0));//move 80 pix right
+    GTMouseDriver::release();
 
-    GTMouseDriver::moveTo(os,point + QPoint(80,0));//move 80 pix right
-    GTMouseDriver::release(os);
+    GTThread::waitForMainThread();
 
-    GTKeyboardDriver::keyClick(os,'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick('c',Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString clipboardText = GTClipboard::text(os);
     QString text = QString("A:  \n"
@@ -303,8 +304,8 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
 // 2. Open view for "1.gb"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 sequence"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 sequence"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // 3. Press ctrl+f. Check focus. Find subsequence TA
@@ -312,9 +313,9 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 
     GTWidget::click(os, GTWidget::findWidget(os, "getAnnotationsPushButton"));
     GTGlobals::sleep(500);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
 
     GTGlobals::sleep();
 
@@ -330,14 +331,14 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1) {
 
     GTWidget::click(os, GTWidget::findWidget(os, "getAnnotationsPushButton"));
     GTGlobals::sleep(500);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__REMOVE_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
 }
@@ -347,13 +348,10 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "human_T1_cutted.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_SEQ_INFO"));
-    QWidget *w = GTWidget::findWidget(os,"Common Statistics");
-    CHECK_SET_ERR(w != NULL, "No Common Statistics widget");
-    GTWidget::click(os, w);
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Statistics);
 
-    QLabel *l = w->findChild<QLabel*>();
-    CHECK_SET_ERR(l != NULL, "No child label in Common Statistics widget");
+    QLabel *statisticsLabel = GTWidget::findExactWidget<QLabel *>(os, "Common Statistics");
+    CHECK_SET_ERR(statisticsLabel != NULL, "No Common Statistics widget");
 
     QString s = QString("<table cellspacing=5>"
                         "<tr><td><b>Length: </b></td><td>200 </td></tr>"
@@ -364,9 +362,9 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
                         "<tr><td><b>nmole/OD<sub>260</sub> : </b></td><td>0.43</td></tr>"
                         "<tr><td><b>") + QChar(0x3BC) + QString("g/OD<sub>260</sub> : </b></td><td>26.83</td></tr></table>");
 
-    GTGlobals::sleep(1000);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    CHECK_SET_ERR(l->text() == s, "Found: " + l->text());
+    CHECK_SET_ERR(statisticsLabel->text() == s, "Found: " + statisticsLabel->text());
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0008) {
@@ -374,13 +372,11 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_SEQ_INFO"));
-    QWidget *w = GTWidget::findWidget(os,"Common Statistics");
-    CHECK_SET_ERR(w != NULL, "No Common Statistics widget");
-    GTWidget::click(os, w);
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Statistics);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    QLabel *l = w->findChild<QLabel*>();
-    CHECK_SET_ERR(l != NULL, "No child label in Common Statistics widget");
+    QLabel *statisticsLabel = GTWidget::findExactWidget<QLabel *>(os, "Common Statistics");
+    CHECK_SET_ERR(statisticsLabel != NULL, "No Common Statistics widget");
 
     QString s = QString("Length: </b></td><td>199 950");
     QString s1 = QString("GC Content: </b></td><td>38.84%");
@@ -390,8 +386,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     QString s5 = QString("nmole/OD<sub>260</sub> : </b></td><td>0.00");
     QString s6 = QString("g/OD<sub>260</sub> : </b></td><td>27.76");
 
-    GTGlobals::sleep(1000);
-    QString labelText = l->text();
+    QString labelText = statisticsLabel->text();
 
     CHECK_SET_ERR(labelText.contains(s), QString("label text: %1. It does not contais %2").arg(labelText).arg(s));
     CHECK_SET_ERR(labelText.contains(s1), QString("label text: %1. It does not contais %2").arg(labelText).arg(s1));
@@ -407,22 +402,18 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "titin.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_SEQ_INFO"));
-    QWidget *w = GTWidget::findWidget(os,"Common Statistics");
-    CHECK_SET_ERR(w != NULL, "No Common Statistics widget");
-    GTWidget::click(os, w);
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Statistics);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    QLabel *l = w->findChild<QLabel*>();
-    CHECK_SET_ERR(l != NULL, "No child label in Common Statistics widget");
+    QLabel *statisticsLabel = GTWidget::findExactWidget<QLabel *>(os, "Common Statistics");
+    CHECK_SET_ERR(statisticsLabel != NULL, "No Common Statistics widget");
 
     QString s = QString("<table cellspacing=5>"
                         "<tr><td><b>Length: </b></td><td>26 926 </td></tr>"
                         "<tr><td><b>Molecular Weight: </b></td><td>2993901.23</td></tr>"
                         "<tr><td><b>Isoelectic Point: </b></td><td>6.74</td></tr></table>");
 
-    GTGlobals::sleep(1000);
-
-    CHECK_SET_ERR(l->text() == s, "Found: " + l->text());
+    CHECK_SET_ERR(statisticsLabel->text() == s, "Found: " + statisticsLabel->text());
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0010) {
@@ -430,17 +421,12 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_SEQ_INFO"));
-    QWidget *w = GTWidget::findWidget(os,"Common Statistics");
-    CHECK_SET_ERR(w != NULL, "No Common Statistics widget");
-    GTWidget::click(os, w);
-
-    QLabel *l = w->findChild<QLabel*>();
-    CHECK_SET_ERR(l != NULL, "No child label in Common Statistics widget");
-
-    QString labelText = l->text();
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Statistics);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTGlobals::sleep(1000);
+    QLabel *statisticsLabel = GTWidget::findExactWidget<QLabel *>(os, "Common Statistics");
+    CHECK_SET_ERR(statisticsLabel != NULL, "No Common Statistics widget");
+    QString labelText = statisticsLabel->text();
 
     QString s = QString("Length: </b></td><td>199 950");
     QString s1 = QString("GC Content: </b></td><td>38.84%");
@@ -460,8 +446,9 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
 
     // select sequence region
     GTUtilsSequenceView::selectSequenceRegion(os, 1, 40);
-    GTGlobals::sleep(1000);
-    CHECK_SET_ERR(labelText != l->text(), "Statistics did not change");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    CHECK_SET_ERR(labelText != statisticsLabel->text(), "Statistics did not change");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0011) {
@@ -471,21 +458,17 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "numbers_in_the_middle.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_SEQ_INFO"));
-    QWidget *w = GTWidget::findWidget(os,"Common Statistics");
-    CHECK_SET_ERR(w != NULL, "No Common Statistics widget");
-    GTWidget::click(os, w);
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Statistics);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    QLabel *l = w->findChild<QLabel*>();
-    CHECK_SET_ERR(l != NULL, "No child label in Common Statistics widget");
+    QLabel *statisticsLabel = GTWidget::findExactWidget<QLabel *>(os, "Common Statistics");
+    CHECK_SET_ERR(statisticsLabel != NULL, "No Common Statistics widget");
 
     QString s = QString("<table cellspacing=5>"
                         "<tr><td><b>Length: </b></td><td>230 </td></tr>"
                         "</table>");
 
-    GTGlobals::sleep(1000);
-
-    CHECK_SET_ERR(l->text() == s, "Found: " + l->text());
+    CHECK_SET_ERR(statisticsLabel->text() == s, "Found: " + statisticsLabel->text());
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0012) {
@@ -495,13 +478,11 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "numbers_in_the_middle.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTWidget::click(os, GTWidget::findWidget(os,"OP_SEQ_INFO"));
-    QWidget *w = GTWidget::findWidget(os,"Common Statistics");
-    CHECK_SET_ERR(w != NULL, "No Common Statistics widget");
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Statistics);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    QLabel *l = w->findChild<QLabel*>();
-    CHECK_SET_ERR(l != NULL, "No child label in Common Statistics widget");
-    GTWidget::click(os, w);
+    QLabel *statisticsLabel = GTWidget::findExactWidget<QLabel *>(os, "Common Statistics");
+    CHECK_SET_ERR(statisticsLabel != NULL, "No Common Statistics widget");
 
     QWidget *w0 = GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
     CHECK_SET_ERR(w0 != NULL, "ADV single sequence widget 0 is NULL");
@@ -509,7 +490,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
     QString s = QString("<table cellspacing=5>"
                         "<tr><td><b>Length: </b></td><td>70 </td></tr>"
                         "</table>");
-    CHECK_SET_ERR(l->text() == s, "Statistics is wrong!");
+    CHECK_SET_ERR(statisticsLabel->text() == s, "Statistics is wrong!");
 
     GTGlobals::sleep(1000);
     QWidget *w1 = GTWidget::findWidget(os, "ADV_single_sequence_widget_1");
@@ -523,7 +504,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
                 "<tr><td><b>Melting TM: </b></td><td>75.36 C</td></tr>"
                 "<tr><td><b>nmole/OD<sub>260</sub> : </b></td><td>1.35</td></tr>"
                 "<tr><td><b>") + QChar(0x3BC) + QString("g/OD<sub>260</sub> : </b></td><td>28.78</td></tr></table>");
-    CHECK_SET_ERR(l->text() == s, "Statistics is wrong!");
+    CHECK_SET_ERR(statisticsLabel->text() == s, "Statistics is wrong!");
 
     GTGlobals::sleep(1000);
     QWidget *w2 = GTWidget::findWidget(os, "ADV_single_sequence_widget_2");
@@ -533,7 +514,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
                             "<tr><td><b>Length: </b></td><td>70 </td></tr>"
                             "<tr><td><b>Molecular Weight: </b></td><td>5752.43</td></tr>"
                             "<tr><td><b>Isoelectic Point: </b></td><td>5.15</td></tr></table>");
-    CHECK_SET_ERR(l->text() == s, "Statistics is wrong!");
+    CHECK_SET_ERR(statisticsLabel->text() == s, "Statistics is wrong!");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0013) {
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 94b6568..12136c0 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
@@ -19,35 +19,28 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsItem>
-#include <QtGui/QMainWindow>
-#else
-#include <QtWidgets/QGraphicsItem>
-#include <QtWidgets/QMainWindow>
-#endif
-
-#include "GTTestsOptionPanelMSA.h"
+#include <QApplication>
+#include <QGraphicsItem>
+#include <QMainWindow>
 
-#include "primitives/GTAction.h"
-#include "api/GTBaseCompleter.h"
-#include <primitives/GTComboBox.h>
-#include <primitives/GTCheckBox.h>
-#include <primitives/GTDoubleSpinBox.h>
-#include "system/GTFile.h"
+#include <base_dialogs/ColorDialogFiller.h>
 #include <base_dialogs/GTFileDialog.h>
+#include <base_dialogs/MessageBoxFiller.h>
 #include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTAction.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTDoubleSpinBox.h>
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTRadioButton.h>
 #include <primitives/GTSlider.h>
 #include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <system/GTFile.h>
 
-#include <base_dialogs/MessageBoxFiller.h>
-#include <base_dialogs/ColorDialogFiller.h>
-#include "runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h"
-#include "runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h"
+#include <U2Core/AppContext.h>
 
+#include "GTTestsOptionPanelMSA.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
@@ -55,8 +48,9 @@
 #include "GTUtilsPhyTree.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-
-#include <U2Core/AppContext.h>
+#include "api/GTBaseCompleter.h"
+#include "runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h"
+#include "runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h"
 
 namespace U2{
 
@@ -186,14 +180,14 @@ GUI_TEST_CLASS_DEFINITION(general_test_0005){
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
 //    3. Delete Hetrodes_pupus_EF540832
     GTUtilsMSAEditorSequenceArea::selectSequence(os, "Hetrodes_pupus_EF540832");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::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));
 //    4. Select one column. Press delete
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(5, 0), QPoint(5,17));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(300);
 //    Expected state: Length is 603
     int length = GTUtilsOptionPanelMsa::getLength(os);
@@ -836,22 +830,30 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0006){
 //    1. Open file test/_common_data/alphabets/extended_amino.aln
     GTFileDialog::openFile(os, testDir + "_common_data/alphabets", "extended_amino.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Create custom color scheme
     const QString scheme = getName() + "_scheme";
     GTUtilsMSAEditorSequenceArea::createColorScheme(os, scheme, NewColorSchemeCreator::amino);
+
 //    3. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
+
 //    4. Select custom scheme
     QComboBox* colorScheme = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "colorScheme"));
     GTComboBox::setIndexWithText(os, colorScheme, scheme);
+
 //    5. Delete scheme which is selected
     GTUtilsMSAEditorSequenceArea::deleteColorScheme(os, scheme);
     GTGlobals::sleep(500);
-//    UGENE not crashess
-    for(int i = 0; i<29; i++){
-        GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(i,0), "#ffffff");
-    }
 
+//    UGENE doesn't crash
+    const QString currentScheme = GTUtilsOptionPanelMsa::getColorScheme(os);
+    CHECK_SET_ERR(currentScheme == "UGENE", QString("An unexpected color scheme is set: expect '%1', got '%2'")
+            .arg("UGENE").arg(currentScheme));
+
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Colors" << "UGENE", PopupChecker::IsChecked));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTGlobals::sleep(500);
 }
 
 namespace {
@@ -946,27 +948,33 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0009_1){
 //    1. Open file test/_common_data/scenarios/msa/ty3.aln.gz
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "ty3.aln.gz");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
+
 //    3. Select Phaneroptera_falcata as reference.
     GTUtilsOptionPanelMsa::addReference(os, "CfT-1_Cladosporium_fulvum");
+
 //    4. Check Disagreements highlighting type
     setHighlightingType(os, "Disagreements");
-    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4,1), "#ffffff");
-    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7,1), "#ffffff");
+    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 1), "#ffffff");
+    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(7, 1), "#ffffff");
 }
 
-GUI_TEST_CLASS_DEFINITION(highlighting_test_0010){
+GUI_TEST_CLASS_DEFINITION(highlighting_test_0010) {
 //    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);
+
 //    2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
+
 //    3. Select Phaneroptera_falcata as reference.
     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
+
 //    4. Check Gaps highlighting type
     setHighlightingType(os, "Gaps");
-    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4,2), "#c0c0c0");
+    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4, 2), "#c0c0c0");
 }
 
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0010_1){
@@ -1120,14 +1128,14 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0004){
     GTLineEdit::setText(os, line1, "wrong name");
     CHECK_SET_ERR(GTBaseCompleter::isEmpty(os), "Completer is not empty");
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 
     QLineEdit* line2 = GTUtilsOptionPanelMsa::getSeqLineEdit(os, 2);
     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(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 //    Expected state: empty popup helper appeared
 }
 
@@ -1396,8 +1404,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0009){
     bool created = f.open(QFile::ReadWrite);
     CHECK_SET_ERR(created, "file not created");
     f.close();
-    PermissionsSetter p;
-    p.setReadOnly(os, s);
+    GTFile::setReadOnly(os, s);
 
     setOutputPath(os, sandBoxDir,  fileName);
     align(os);
@@ -1405,11 +1412,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0009){
 //    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;
-#ifdef Q_OS_WIN
-    expected = "Task {Pairwise alignment task} finished with error: Failed to rename";
-#else
     expected = QString("Task {Pairwise alignment task} finished with error: No permission to write to \'%1\' file.").arg(fileName);
-#endif
     CHECK_SET_ERR(error.contains(expected), QString("enexpected error: %1").arg(error));
 }
 
@@ -1431,8 +1434,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0010){
     bool ok = QDir().mkpath(s);
     CHECK_SET_ERR(ok, "subdirectory not created");
 
-    PermissionsSetter p;
-    p.setReadOnly(os, s);
+    GTFile::setReadOnly(os, s);
 
     setOutputPath(os, sandBoxDir + dirName,  fileName);
     align(os);
@@ -1459,9 +1461,9 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0011){
     QString initialText = outputFileLineEdit->text();
     CHECK_SET_ERR(!initialText.isEmpty(), "line edit is empty");
     GTWidget::click(os, outputFileLineEdit);
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep(300);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(300);
     QString finalText = outputFileLineEdit->text();
 //Expected state: empty path can not be set
@@ -1590,11 +1592,12 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0005){
 //    1. Open data/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));
     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
-    GTGlobals::sleep();
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QCheckBox* showNamesCheck = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "showNamesCheck"));
     CHECK_SET_ERR(showNamesCheck != NULL, "showNamesCheck not found");
@@ -1610,32 +1613,41 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0005){
     QList<QGraphicsSimpleTextItem*> initDistanses = GTUtilsPhyTree::getVisiableDistances(os, treeView);
     int initNamesNumber =initNames.count();
     int initDistansesNumber = initDistanses.count();
+
 //    3. Uncheck "show names" checkbox.
     GTCheckBox::setChecked(os, showNamesCheck, false);
     GTGlobals::sleep(500);
+
 //    Expected state: names are not shown, align labels checkbox is disabled
     QList<QGraphicsSimpleTextItem*> names = GTUtilsPhyTree::getVisiableLabels(os, treeView);
     CHECK_SET_ERR(names.count() == 0, QString("unexpected number of names: %1").arg(names.count()));
     CHECK_SET_ERR(!alignLabelsCheck->isEnabled(), "align labels checkbox is unexpectidly enabled");
+
 //    4. Check "show names" checkbox.
     GTCheckBox::setChecked(os, showNamesCheck, true);
     GTGlobals::sleep(500);
+
 //    Expected state: names are shown, align labels checkbox is enabled
     names = GTUtilsPhyTree::getVisiableLabels(os, treeView);
     CHECK_SET_ERR(names.count() == initNamesNumber, QString("unexpected number of names: %1").arg(names.count()));
     CHECK_SET_ERR(alignLabelsCheck->isEnabled(), "align labels checkbox is unexpectidly disabled");
+
 //    5. Uncheck "show distanses" checkbox.
     GTCheckBox::setChecked(os, showDistancesCheck, false);
     GTGlobals::sleep(500);
+
 //    Expected state: distanses are not shown
     QList<QGraphicsSimpleTextItem*> distanses = GTUtilsPhyTree::getVisiableDistances(os, treeView);
     CHECK_SET_ERR(distanses.count() == 0, QString("unexpected number of distanses: %1").arg(names.count()));
+
 //    6. Check "show distanses" checkbox.
     GTCheckBox::setChecked(os, showDistancesCheck, true);
     GTGlobals::sleep(500);
+
 //    Expected state: distanses are shown
     distanses = GTUtilsPhyTree::getVisiableDistances(os, treeView);
     CHECK_SET_ERR(distanses.count() == initDistansesNumber, QString("unexpected number of distanses: %1").arg(names.count()));
+
 //    7. Check "align labels" checkbox.
     //saving init image
     GTCheckBox::setChecked(os, alignLabelsCheck, false);
@@ -1645,12 +1657,15 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0005){
     QImage initImg = initPixmap.toImage();//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
     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
@@ -1727,7 +1742,7 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0006){
     QComboBox* fontComboBox = GTWidget::findExactWidget<QComboBox*>(os, "fontComboBox");
     QLineEdit* l = fontComboBox->findChild<QLineEdit*>();
     GTLineEdit::setText(os, l, "Serif");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep(500);
 //    Expected: font changed
     QGraphicsSimpleTextItem* label = GTUtilsPhyTree::getVisiableLabels(os).at(0);
@@ -1739,7 +1754,7 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0006){
 
     QLineEdit* fontLineedit = fontSizeSpinBox->findChild<QLineEdit*>();
     GTLineEdit::setText(os, fontLineedit, "20");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
 //    Expected: size changed
     int pointSize = label->font().pointSize();
     CHECK_SET_ERR(pointSize == 20, QString("unexpected point size: %1").arg(pointSize));
@@ -1933,8 +1948,7 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0002){
     CHECK_SET_ERR(created, "file not created");
     f.close();
 
-    PermissionsSetter p;
-    p.setReadOnly(os, s);
+    GTFile::setReadOnly(os, s);
 
     setConsensusOutputPath(os, sandBoxDir + fileName);
 //    4. Press export button
@@ -1943,11 +1957,7 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0002){
 //    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;
-#ifdef Q_OS_WIN
-    expected = "Task {Export consensus to MSA} finished with error: Subtask {Save document} is failed: Failed to rename";
-#else
     expected = QString("Task {Export consensus to MSA} finished with error: Subtask {Save document} is failed: No permission to write to \'%1\' file.").arg(fileName);
-#endif
     CHECK_SET_ERR(error.contains(expected), QString("enexpected error: %1").arg(error));
 }
 
@@ -1964,8 +1974,7 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0003){
     QString s = sandBoxDir + dirName;
     bool ok = QDir().mkpath(s);
     CHECK_SET_ERR(ok, "subdirectory not created");
-    PermissionsSetter p;
-    p.setReadOnly(os, s);
+    GTFile::setReadOnly(os, s);
 
     setConsensusOutputPath(os, sandBoxDir + dirName + '/' + fileName);
 //    4. Press export button
@@ -2002,7 +2011,7 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0004){
 
     QLineEdit* pathLe = GTWidget::findExactWidget<QLineEdit*>(os, "pathLe");
     QString pathLeText = pathLe->text();
-    CHECK_SET_ERR(!pathLeText.isEmpty() && pathLeText.contains("COI_consensus.txt"), "wrong lineEdit text");
+    CHECK_SET_ERR(!pathLeText.isEmpty() && pathLeText.contains("COI_consensus.txt"), "wrong lineEdit text: " + pathLeText);
 }
 
 GUI_TEST_CLASS_DEFINITION(export_consensus_test_0005){
@@ -2099,7 +2108,7 @@ GUI_TEST_CLASS_DEFINITION(statistics_test_0003){
 //    5. delete symbol at point (0,0)
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,0));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(500);
 //    Expected state: similarity changed, updateButton ins disablec
     QString s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
@@ -2117,7 +2126,7 @@ GUI_TEST_CLASS_DEFINITION(statistics_test_0003){
 //    5. delete symbol at point (0,0)
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,0));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(500);
 //    Expected state: similarity not changed
     s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
@@ -2321,7 +2330,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0004){
 //    3. Press "build tree" button.
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
-    GTGlobals::sleep(1000);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //set some values
     expandFontSettings(os);
@@ -2342,7 +2351,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0004){
 #else
     GTLineEdit::setText(os, l, "Tahoma");
 #endif
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
 
     QSpinBox* fontSizeSpinBox = GTWidget::findExactWidget<QSpinBox*>(os, "fontSizeSpinBox");
     GTSpinBox::setValue(os, fontSizeSpinBox, 14);
@@ -2393,7 +2402,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0004_1){
 //    3. Press "build tree" button.
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
     GTWidget::click(os, GTWidget::findWidget(os, "BuildTreeButton"));
-    GTGlobals::sleep(1000);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //find widgets
     QCheckBox* showNamesCheck = GTWidget::findExactWidget<QCheckBox*>(os, "showNamesCheck");
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 8b6d4c3..7169bf1 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.cpp
@@ -21,6 +21,7 @@
 
 #include <U2Core/U2IdTypes.h>
 #include "GTUtilsAnnotationsTreeView.h"
+#include "GTUtilsOptionPanelSequenceView.h"
 #include "GTUtilsPcr.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSequenceView.h"
@@ -167,8 +168,8 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     CHECK_SET_ERR("9 - 1196" == GTUtilsPcr::getResultRegion(os, 0), "Wrong result");
 
     //5. Click the result.
-    GTMouseDriver::moveTo(os, GTUtilsPcr::getResultPoint(os, 0));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsPcr::getResultPoint(os, 0));
+    GTMouseDriver::click();
 
     //Expected: the extract button is enabled.
     QWidget *extractButton = GTWidget::findWidget(os, "extractProductButton");
@@ -177,22 +178,22 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     //6. Click the empty place of the table.
     QPoint emptyPoint = QPoint(GTUtilsPcr::getResultPoint(os, 0));
     emptyPoint.setY(emptyPoint.y() + 30);
-    GTMouseDriver::moveTo(os, emptyPoint);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(emptyPoint);
+    GTMouseDriver::click();
 
     //Expected: the extract button is disabled.
     CHECK_SET_ERR(!extractButton->isEnabled(), "Extract button is enabled");
 
     //7. Double click the result.
-    GTMouseDriver::moveTo(os, GTUtilsPcr::getResultPoint(os, 0));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsPcr::getResultPoint(os, 0));
+    GTMouseDriver::doubleClick();
 
     //Expected: the new file is opened "pIB2-SEC13_9-1196.gb".
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "pIB2-SEC13_9-1196.gb");
 
     // TODO: remove it after fixing UGENE-3657
-    GTKeyboardDriver::keyClick(os, 'w', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'w', Qt::ControlModifier);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0005) {
@@ -222,17 +223,17 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     CHECK_SET_ERR(3 == GTUtilsPcr::productsCount(os), "Wrong results count");
 
     //5. Click the 3rd result.
-    GTMouseDriver::moveTo(os, GTUtilsPcr::getResultPoint(os, 2));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsPcr::getResultPoint(os, 2));
+    GTMouseDriver::click();
 
     //Expected: the sequence selection is [2..3775].
     // TODO
 
     //6. Click the 2nd result with CTRL pressed.
-    GTMouseDriver::moveTo(os, GTUtilsPcr::getResultPoint(os, 1));
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTMouseDriver::moveTo(GTUtilsPcr::getResultPoint(os, 1));
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 
     //Expected: the sequence selection is not changed, two results are selected in the table.
     // TODO
@@ -246,9 +247,9 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTUtilsProjectTreeView::findIndex(os, "pIB2-SEC13_2-3775.gb");
 
     // TODO: remove it after fixing UGENE-3657
-    GTKeyboardDriver::keyClick(os, 'w', GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keyClick(os, 'w', GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keyClick(os, 'w', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'w', Qt::ControlModifier);
+    GTKeyboardDriver::keyClick( 'w', Qt::ControlModifier);
+    GTKeyboardDriver::keyClick( 'w', Qt::ControlModifier);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0006) {
@@ -281,8 +282,8 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     //Expected: the details dialog is shown, the GC note of the forward primer is red.
     GTGlobals::sleep();
     GTUtilsDialog::waitForDialog(os, new PrimersDetailsDialogFiller(os));
-    GTMouseDriver::moveTo(os, GTUtilsPcr::getDetailsPoint(os));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsPcr::getDetailsPoint(os));
+    GTMouseDriver::click();
 
     //6. Remove the last character of the forward primer.
     GTUtilsPcr::setPrimer(os, U2Strand::Direct, "AGACTCTTTCGTCTCACGCACTTCGCTGAT");
@@ -356,9 +357,9 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     CHECK_SET_ERR(0 == GTUtilsPcr::productsCount(os), "Wrong results count 1");
 
     //5. Right click on the sequence object in the project view -> Mark as circular.
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "pIB2-SEC13"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "pIB2-SEC13"));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Mark as circular"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     //6. Click the find button.
     GTWidget::click(os, GTWidget::findWidget(os, "findProductButton"));
@@ -465,5 +466,189 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     CHECK_SET_ERR(NULL == GTUtilsAnnotationsTreeView::findItem(os, "center", GTGlobals::FindOptions(false)), "Unexpected annotation 3");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0011) {
+    // The temperature label for one primer
+    GTUtilsPcr::clearPcrDir(os);
+
+    // 1. Open "_common_data/fasta/pcr_test.fa"
+    GTFileDialog::openFile(os, testDir + "_common_data/fasta", "pcr_test.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // 2. Open the PCR OP
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::InSilicoPcr);
+
+    // 3. Enter the primer "TTNGGTGATGWCGGTGAAARCCTCTGACMCATGCAGCT"
+    GTUtilsPcr::setPrimer(os, U2Strand::Direct, "TTNGGTGATGWCGGTGAAARCCTCTGACMCATGCAGCT");
+    GTGlobals::sleep();
+
+    // Expected: the temperature label contains the correct temperature, because the sequence has only one suitable region
+    CHECK_SET_ERR(!GTUtilsPcr::getPrimerInfo(os, U2Strand::Direct).contains("N/A"), "The temperature is not configured")
+
+    // 4. Clear the primer line edit
+    GTUtilsPcr::setPrimer(os, U2Strand::Direct, "");
+    GTGlobals::sleep();
+
+    // Expected: the temperature label is empty
+    CHECK_SET_ERR(GTUtilsPcr::getPrimerInfo(os, U2Strand::Direct).isEmpty(), "The temperature was not updated");
+
+    // 5. Enter the primer "TTCGGTS"
+    GTUtilsPcr::setPrimer(os, U2Strand::Direct, "TTCGGTS");
+    // Expected: the temperature is N/A, because the sequence contains a few regions that correspond to the primer
+    CHECK_SET_ERR(GTUtilsPcr::getPrimerInfo(os, U2Strand::Direct).contains("N/A"), "The temperature is not configured");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0012) {
+    // The warning messages for the primer pair
+    GTUtilsPcr::clearPcrDir(os);
+
+    // 1. Open "_common_data/fasta/begin-end.fa"
+    GTFileDialog::openFile(os, testDir + "_common_data/cmdline/pcr/begin-end.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // 2. Open the PCR OP
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::InSilicoPcr);
+
+    // 3. Enter the forward primer "KGGCCAHACAGRATATCTSTGGTAAGCAGT"
+    GTUtilsPcr::setPrimer(os, U2Strand::Direct, "KGGCCAHACAGRATATCTSTGGTAAGCAGT");
+
+    // Expected: the temperature is defined
+    CHECK_SET_ERR(!GTUtilsPcr::getPrimerInfo(os, U2Strand::Direct).contains("N/A"), "The temperature is not configured");
+
+    // 4. Clear the reverse primer "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNR"
+    GTUtilsPcr::setPrimer(os, U2Strand::Complementary, "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNR");
+    GTGlobals::sleep();
+
+    // Expected: the temperature is N/A, the primer pair info contains the message about non-ACGTN symbols
+    CHECK_SET_ERR(GTUtilsPcr::getPrimerInfo(os, U2Strand::Complementary).contains("N/A"), "The temperature is configured");
+
+    QLabel* warningLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os, "warningLabel"));
+    CHECK_SET_ERR(warningLabel != NULL, "Cannot find warningLabel");
+    CHECK_SET_ERR(warningLabel->text().contains("The primers contain a character from the Extended DNA alphabet."), "Incorrect warning message");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0013) {
+    // Find the product with degenerated primers
+    GTUtilsPcr::clearPcrDir(os);
+
+    // 1. Open "_common_data/fasta/pcr_test.fa"
+    GTFileDialog::openFile(os, testDir + "_common_data/fasta", "pcr_test.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // 2. Open the PCR OP
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::InSilicoPcr);
+
+    // 3. Enter the forward primer "TTNGGTGATGWCGGTGAAARCCTCTGACMCATGCAGCT"
+    GTUtilsPcr::setPrimer(os, U2Strand::Direct, "TTNGGTGATGWCGGTGAAARCCTCTGACMCATGCAGCT");
+    GTGlobals::sleep();
+
+    // Expected: the temperature label contains the correct temperature, because the sequence has only one suitable region
+    CHECK_SET_ERR(!GTUtilsPcr::getPrimerInfo(os, U2Strand::Direct).contains("N/A"), "The temperature is not configured");
+
+    // 4. Enter the reverse primer "GBGNCCTTGGATGACAATVGGTTCCAAGRCTC"
+    GTUtilsPcr::setPrimer(os, U2Strand::Complementary, "GBGNCCTTGGATGACAATVGGTTCCAAGRCTC");
+    GTGlobals::sleep();
+
+    // Expected: the temperature label contains the correct temperature, because the sequence has only one suitable region
+    CHECK_SET_ERR(!GTUtilsPcr::getPrimerInfo(os, U2Strand::Complementary).contains("N/A"), "The temperature is not configured");
+
+    // 5. Find product
+    GTWidget::click(os, GTWidget::findWidget(os, "findProductButton"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // Expected: one product is found
+    CHECK_SET_ERR(1 == GTUtilsPcr::productsCount(os), "Wrong results count");
+    CHECK_SET_ERR("9 - 1196" == GTUtilsPcr::getResultRegion(os, 0), "Wrong result");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0014) {
+    // Reverse-complement for the extended DNA alphabet
+    // 1. Open the PCT OP
+    // 2. Enter all symbols of extended DNA alphabet: "ACGTMRWSYKVHDBNX"
+    // 3. Click "Reverse-complement" button
+    // Expected state: the content of primer line edit is "XNVHDBMRSWYKACGT"
+    GTUtilsPcr::clearPcrDir(os);
+
+    GTFileDialog::openFile(os, testDir + "_common_data/fasta", "pcr_test.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::InSilicoPcr);
+
+    GTUtilsPcr::setPrimer(os, U2Strand::Direct, "ACGTMRWSYKVHDBNX");
+
+    GTWidget::click(os, GTWidget::findWidget(os, "reverseComplementButton", GTUtilsPcr::primerBox(os, U2Strand::Direct)));
+
+    QLineEdit* primerLineEdit = GTWidget::findExactWidget<QLineEdit*>(os, "primerEdit", GTUtilsPcr::primerBox(os, U2Strand::Direct));
+    CHECK_SET_ERR(primerLineEdit != NULL, "Forward primerEdit is NULL");
+
+    CHECK_SET_ERR(primerLineEdit->text() == "XNVHDBMRSWYKACGT", "Incorrect reverse-complement primer translation");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0015) {
+    // Degenerated character in perfect match region
+
+    // 1. Open murine.gb
+    GTUtilsPcr::clearPcrDir(os);
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // 2. Go to the PCR OP tab and add primers:
+    //    Forward: ACCCGTAGGTGGCAAGCTAGCTTAA
+    //    Reverse: TTTTCTATTCTCAGTTATGTATTTTT
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::InSilicoPcr);
+    GTUtilsPcr::setPrimer(os, U2Strand::Direct, "ACCCGTAGGTGGCAAGCTAGCTTAA");
+    GTGlobals::sleep();
+    GTUtilsPcr::setPrimer(os, U2Strand::Complementary, "TTTTCTATTCTCAGTTATGTATTTTT");
+    GTGlobals::sleep();
+
+    // 3. Find products
+    //    Expected state: there are two results
+    GTWidget::click(os, GTWidget::findWidget(os, "findProductButton"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    CHECK_SET_ERR(2 == GTUtilsPcr::productsCount(os), "Wrong results count 1");
+
+    // 4. Replace reverse primer with TTTTCTATTCTCAGTTATGTATTTTA
+    GTUtilsPcr::setPrimer(os, U2Strand::Complementary, "TTTTCTATTCTCAGTTATGTATTTTA");
+    GTGlobals::sleep();
+
+    // 5. Set mismatches to 1
+    GTUtilsPcr::setMismatches(os, U2Strand::Complementary, 1);
+
+    // 6. Find products
+    //    Expected state: there no products because the mismatch is located in 'Perfect Match' area
+    GTWidget::click(os, GTWidget::findWidget(os, "findProductButton"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    CHECK_SET_ERR(0 == GTUtilsPcr::productsCount(os), "Wrong results count 2");
+
+    // 7. Replace reverse primer with ATTTCTATTCTCAGTTATGTATTTTW
+    GTUtilsPcr::setPrimer(os, U2Strand::Complementary, "ATTTCTATTCTCAGTTATGTATTTTW");
+    GTGlobals::sleep();
+
+    // 8. Find products
+    //    Expected state: there are two results, because W= {A, T}
+    GTWidget::click(os, GTWidget::findWidget(os, "findProductButton"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    CHECK_SET_ERR(2 == GTUtilsPcr::productsCount(os), "Wrong results count 3");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0016) {
+    // Gaps are not allowed for primers
+    // 1. Open murine.gb
+    GTUtilsPcr::clearPcrDir(os);
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // 2. Go to the PCR OP tab
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::InSilicoPcr);
+
+    // 3. Try to input gap symbol '-'
+    GTUtilsPcr::setPrimer(os, U2Strand::Direct, "---");
+    GTGlobals::sleep();
+
+    // Expected state: '-' pressing is ignored
+    QLineEdit *primerEdit = dynamic_cast<QLineEdit*>(GTWidget::findWidget(os, "primerEdit", GTUtilsPcr::primerBox(os, U2Strand::Direct)));
+    CHECK_SET_ERR(primerEdit != NULL, "Cannot find primer line edit");
+    CHECK_SET_ERR(primerEdit->text().isEmpty(), "There are unexpected characters in PrimerLineEdit");
+}
+
 } // 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 76471a2..83b1ab7 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.h
@@ -40,6 +40,13 @@ 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)
+GUI_TEST_CLASS_DECLARATION(test_0016)
+
 } // 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 4b87186..13dfda1 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.cpp
@@ -24,6 +24,7 @@
 #include "GTDatabaseConfig.h"
 #include "GTTestsPrimerLibrary.h"
 #include "GTUtilsAnnotationsTreeView.h"
+#include "GTUtilsOptionPanelSequenceView.h"
 #include "utils/GTUtilsDialog.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsPcr.h"
@@ -136,16 +137,16 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     //3. Click the empty place of the table.
     QPoint emptyPoint = GTUtilsPrimerLibrary::getPrimerPoint(os, librarySize);
     emptyPoint.setY(emptyPoint.y() + 40);
-    GTMouseDriver::moveTo(os, emptyPoint);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(emptyPoint);
+    GTMouseDriver::click();
 
     //Expected: The remove button is disabled.
     QAbstractButton *removeButton = GTUtilsPrimerLibrary::getButton(os, GTUtilsPrimerLibrary::Remove);
     CHECK_SET_ERR(!removeButton->isEnabled(), "The remove button is enabled");
 
     //4. Select the primer.
-    GTMouseDriver::moveTo(os, GTUtilsPrimerLibrary::getPrimerPoint(os, librarySize));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsPrimerLibrary::getPrimerPoint(os, librarySize));
+    GTMouseDriver::click();
 
     //Expected: The remove button is enabled.
     CHECK_SET_ERR(removeButton->isEnabled(), "The remove button is disabled");
@@ -210,27 +211,27 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     //3. Click the empty place of the table.
     QPoint emptyPoint = GTUtilsPrimerLibrary::getPrimerPoint(os, lastPrimer);
     emptyPoint.setY(emptyPoint.y() + 40);
-    GTMouseDriver::moveTo(os, emptyPoint);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(emptyPoint);
+    GTMouseDriver::click();
 
     //Expected: The edit button is disabled.
     QAbstractButton *editButton = GTUtilsPrimerLibrary::getButton(os, GTUtilsPrimerLibrary::Edit);
     CHECK_SET_ERR(!editButton->isEnabled(), "The remove button is enabled");
 
     //4. Select several primers.
-    GTMouseDriver::moveTo(os, GTUtilsPrimerLibrary::getPrimerPoint(os, lastPrimer));
-    GTMouseDriver::click(os);
-    GTMouseDriver::moveTo(os, GTUtilsPrimerLibrary::getPrimerPoint(os, lastPrimer - 2));
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTMouseDriver::moveTo(GTUtilsPrimerLibrary::getPrimerPoint(os, lastPrimer));
+    GTMouseDriver::click();
+    GTMouseDriver::moveTo(GTUtilsPrimerLibrary::getPrimerPoint(os, lastPrimer - 2));
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
 
     //Expected: The edit button is disabled.
     CHECK_SET_ERR(!editButton->isEnabled(), "The remove button is enabled");
 
     //5. Select the primer P.
-    GTMouseDriver::moveTo(os, GTUtilsPrimerLibrary::getPrimerPoint(os, lastPrimer));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsPrimerLibrary::getPrimerPoint(os, lastPrimer));
+    GTMouseDriver::click();
 
     //Expected: The edit button is enabled.
     CHECK_SET_ERR(editButton->isEnabled(), "The remove button is disabled");
@@ -242,7 +243,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     parameters.primer = "CCCCCCCCCCCCCC";
     parameters.name = "test_0005";
     GTUtilsDialog::waitForDialog(os, new AddPrimerDialogFiller(os, parameters));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
 
     //Expected: the primer is changed in the table.
     CHECK_SET_ERR("CCCCCCCCCCCCCC" == GTUtilsPrimerLibrary::getPrimerSequence(os, lastPrimer), "The sequence is not changed");
@@ -274,7 +275,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
             ExportPrimersDialogFiller::setExportTarget(os, ExportPrimersDialogFiller::LocalFile);
-            ExportPrimersDialogFiller::setFormat(os, "fasta");
+            ExportPrimersDialogFiller::setFormat(os, "FASTA");
             ExportPrimersDialogFiller::setFilePath(os, sandBoxDir + "pcrlib/test_0006/primers.fa");
             GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
         }
@@ -329,7 +330,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);
         }
@@ -674,5 +675,94 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
     CHECK_SET_ERR("GACGCTAGCATCGACTAGCA" == fourthData, QString("An unexpected primer '%1' data: expect %2, got %3").arg("primerToImport10").arg("GACGCTAGCATCGACTAGCA").arg(fourthData));
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0014) {
+    // Degenerated primers in the primer library
+    // 1. Open primer library
+    GTUtilsPrimerLibrary::openLibrary(os);
+    GTUtilsPrimerLibrary::clearLibrary(os);
+
+    // 2. Create the forward primer "TTNGGTGATGWCGGTGAAARCCTCTGACMCATGCAGCT"
+    GTUtilsPrimerLibrary::addPrimer(os, "test_0014_forward", "TTNGGTGATGWCGGTGAAARCCTCTGACMCATGCAGCT");
+
+    // 3. Create the reverse primer "AAGCGCGCGAACAGAAGCGAGAAGCGAACT"
+    GTUtilsPrimerLibrary::addPrimer(os, "test_0014_reverse", "AAGCGCGCGAACAGAAGCGAGAAGCGAACT");
+
+    // 4. Edit the reverse primer. New value: "AAGCGNNNNNNNNNNNNNNNNNNNNNR"
+    GTUtilsPrimerLibrary::clickPrimer(os, 1);
+
+    AddPrimerDialogFiller::Parameters parameters;
+    parameters.primer = "AAGCGNNNNNNNNNNNNNNNNNNNNNR";
+    parameters.name = "test_0014_reverse_edit";
+    GTUtilsDialog::waitForDialog(os, new AddPrimerDialogFiller(os, parameters));
+
+    GTUtilsPrimerLibrary::clickButton(os, GTUtilsPrimerLibrary::Edit);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0015) {
+    // Find the product with the degenerated primers from the library
+    // 1. Open primer library
+    GTUtilsPrimerLibrary::openLibrary(os);
+    GTUtilsPrimerLibrary::clearLibrary(os);
+
+    // 2. Create the forward primer "GGGCCAAACAGGATATCTGTGGTAAGCAGT"
+    GTUtilsPrimerLibrary::addPrimer(os, "test_0015_forward", "GGGCCAAACAGGATATCTGTGGTAAGCAGT");
+
+    // 3. Create the reverse primer "AAGCGNNNNNNNNNNNNNNNNNNNNNR"
+    GTUtilsPrimerLibrary::addPrimer(os, "test_0015_reverse", "AAGCGNNNNNNNNNNNNNNNNNNNNNR");
+    GTUtilsPrimerLibrary::clickButton(os, GTUtilsPrimerLibrary::Close);
+
+    // 4. Open "_common_data/fasta/begin-end.fa"
+    GTFileDialog::openFile(os, testDir + "_common_data/cmdline/pcr/begin-end.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // 5. Set the primers from the library
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::InSilicoPcr);
+
+    GTUtilsDialog::waitForDialog(os, new PrimerLibrarySelectorFiller(os, 0, true));
+    GTWidget::click(os, GTUtilsPcr::browseButton(os, U2Strand::Direct));
+    GTGlobals::sleep();
+
+    GTUtilsDialog::waitForDialog(os, new PrimerLibrarySelectorFiller(os, 1, true));
+    GTWidget::click(os, GTUtilsPcr::browseButton(os, U2Strand::Complementary));
+
+    // 4. Find the product
+    GTWidget::click(os, GTWidget::findWidget(os, "findProductButton"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // Expected: 3 results were found
+    CHECK_SET_ERR(3 == GTUtilsPcr::productsCount(os), "Wrong results count");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0016) {
+    //    Import primers with degenerated symbols
+
+    //    1. Open the library, clear it.
+        GTUtilsPrimerLibrary::openLibrary(os);
+        GTUtilsPrimerLibrary::clearLibrary(os);
+
+    //    2. Click "Import".
+    //    3. Fill the dialog:
+    //        Import from: "Local file(s)";
+    //        Files: "_common_data/cmdline/primers/primer_degenerated_1.fasta",
+    //               "_common_data/cmdline/primers/primer_degenerated_2.fasta"
+    //    and accept the dialog.
+        class ImportFromSeveralFiles : public CustomScenario {
+            void run(HI::GUITestOpStatus &os) {
+                QWidget *dialog = QApplication::activeModalWidget();
+                CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
+                ImportPrimersDialogFiller::setImportTarget(os, ImportPrimersDialogFiller::LocalFiles);
+                ImportPrimersDialogFiller::addFile(os, testDir + "_common_data/cmdline/primers/primer_degenerated_1.fasta");
+                ImportPrimersDialogFiller::addFile(os, testDir + "_common_data/cmdline/primers/primer_degenerated_2.fasta");
+                GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+            }
+        };
+
+        GTUtilsDialog::waitForDialog(os, new ImportPrimersDialogFiller(os, new ImportFromSeveralFiles));
+        GTUtilsPrimerLibrary::clickButton(os, GTUtilsPrimerLibrary::Import);
+
+        const int librarySize = GTUtilsPrimerLibrary::librarySize(os);
+        CHECK_SET_ERR(2 == librarySize, QString("An unexpected library size: expect %1, got %2").arg(2).arg(librarySize));
+}
+
 } // GUITest_common_scenarios_primer_library
 } // U2
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 14f5359..4c79cb3 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.h
@@ -42,6 +42,9 @@ 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)
+GUI_TEST_CLASS_DECLARATION(test_0016)
 
 } // GUITest_common_scenarios_primer_library
 } // U2
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 bf0f82d..0f41c75 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.cpp
@@ -45,6 +45,7 @@
 #include "GTUtilsStartPage.h"
 #include "GTUtilsTaskTreeView.h"
 #include "utils/GTUtilsToolTip.h"
+#include <utils/GTThread.h>
 #include "system/GTClipboard.h"
 #include "system/GTFile.h"
 #include <base_dialogs/GTFileDialog.h>
@@ -121,14 +122,14 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTUtilsApp::checkUGENETitle(os, expectedTitle);
 
 //     3) File path at tooltip for "1CF7.PDB" must be "_common_data/scenarios/sandbox/1CF7.PDB"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
     GTGlobals::sleep(2000);
     GTUtilsToolTip::checkExistingToolTip(os, "_common_data/scenarios/sandbox/1CF7.PDB");
 
 // 7. Select "1CF7.PDB" in project tree and press Enter
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Enter"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
 
 // Expected state:
 //     1) Document is loaded,
@@ -164,7 +165,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTUtilsApp::checkUGENETitle(os, expectedTitle);
     GTUtilsDocument::checkDocument(os, "1CF7.PDB");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
     GTGlobals::sleep(2000);
     GTUtilsToolTip::checkExistingToolTip(os, "samples/PDB/1CF7.PDB");
 }
@@ -181,7 +182,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     QMenu *m = GTMenu::showMainMenu(os, MWMENU_FILE);
     QAction *result = GTMenu::getMenuItem(os, m, ACTION_PROJECTSUPPORT__EXPORT_PROJECT, false);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
     GTGlobals::sleep(100);
 
     GTUtilsProject::checkProject(os, GTUtilsProject::NotExists);
@@ -228,8 +229,8 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
     Runnable *filler = new ExportDocumentDialogFiller(os, testDir + "_common_data/scenarios/sandbox/", "1.gb",
                                                    ExportDocumentDialogFiller::Genbank, true, true, GTGlobals::UseMouse);
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsDocument::checkDocument(os, "1.gb.gz");
     GTGlobals::sleep(100);
@@ -295,11 +296,11 @@ GUI_TEST_CLASS_DEFINITION(test_0016) {
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Export document", GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "murine.gb"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "murine.gb"));
     GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "murine_copy1.gb"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "murine_copy1.gb"));
     GTGlobals::sleep();
 
     GTGlobals::sleep(2000);
@@ -417,13 +418,13 @@ GUI_TEST_CLASS_DEFINITION(test_0025) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_load_selected_documents", GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
     GTGlobals::sleep(1000);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(500);
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "<auto>", "misc_feature", "complement(1.. 20)"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 }
 
@@ -532,10 +533,10 @@ GUI_TEST_CLASS_DEFINITION(test_0035) {
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //select 2 objects
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
     GTUtilsProjectTreeView::click(os, "NC_001363");
     GTUtilsProjectTreeView::click(os, "NC_004718");
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "Open containing folder",
         PopupChecker::NotExists, GTGlobals::UseMouse));
     GTUtilsProjectTreeView::click(os, "NC_001363", Qt::RightButton);
@@ -547,10 +548,10 @@ GUI_TEST_CLASS_DEFINITION(test_0036) {
     GTFileDialog::openFile(os, dataDir+"samples/Genbank/", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //select 2 files
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
     GTUtilsProjectTreeView::click(os, "sars.gb");
     GTUtilsProjectTreeView::click(os, "murine.gb");
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "Open containing folder",
         PopupChecker::NotExists, GTGlobals::UseMouse));
     GTUtilsProjectTreeView::click(os, "sars.gb", Qt::RightButton);
@@ -591,11 +592,13 @@ GUI_TEST_CLASS_DEFINITION(test_0038){
 
     //check for first document
     GTUtilsProjectTreeView::doubleClickItem(os, "Contig1");
+    GTThread::waitForMainThread();
     title1 = GTUtilsMdi::activeWindowTitle(os);
     CHECK_SET_ERR(title1 == "BL060C3 [m] Contig1", "unexpected title for doc1: " + title1);
 
     //check for second document
     GTUtilsProjectTreeView::doubleClickItem(os, "Contig2");
+    GTThread::waitForMainThread();
     title2 = GTUtilsMdi::activeWindowTitle(os);
     CHECK_SET_ERR(title2 == "BL060C3 [m] Contig2", "unexpected title for doc2: " + title2);
 }
@@ -643,7 +646,7 @@ GUI_TEST_CLASS_DEFINITION(test_0039){
     GTUtilsProjectTreeView::click(os, "COI.aln");
     GTClipboard::setText(os, ">human_T1 (UCS\r\nACGT\r\nACG");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::findIndex(os, "human_T1 (UCS");
@@ -669,7 +672,7 @@ GUI_TEST_CLASS_DEFINITION(test_0040){
 
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsProjectTreeView::findIndex(os, "human_T1");
     GTUtilsProjectTreeView::findIndex(os, "human_T2");
@@ -683,7 +686,7 @@ GUI_TEST_CLASS_DEFINITION(test_0041){
     GTUtilsProjectTreeView::click(os, "COI.aln");
     GTClipboard::setText(os, ">human_T1 (UCS\nACGT\nACG");
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["insert"], GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Insert, Qt::ShiftModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "human_T1 (UCS");
@@ -700,7 +703,7 @@ GUI_TEST_CLASS_DEFINITION(test_0042){
 
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(GTUtilsMdi::activeWindowTitle(os).contains("Workflow Designer"), "Mdi window is not a WD window");
@@ -715,7 +718,7 @@ GUI_TEST_CLASS_DEFINITION(test_0043){
     QString fileContent = readFileToStr(dataDir + "samples/Newick/COI.nwk");
     GTClipboard::setText(os, fileContent);
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "Tree");
@@ -730,7 +733,7 @@ GUI_TEST_CLASS_DEFINITION(test_0044){
     QString fileContent = readFileToStr(dataDir + "samples/HMM/aligment15900.hmm");
     GTClipboard::setText(os, fileContent);
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "aligment15900");
@@ -747,7 +750,7 @@ GUI_TEST_CLASS_DEFINITION(test_0045){
     QString fileContent = readFileToStr(dataDir + "samples/Stockholm/CBS.sto");
     GTClipboard::setText(os, fileContent);
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "CBS");
@@ -764,7 +767,7 @@ GUI_TEST_CLASS_DEFINITION(test_0046){
     QString fileContent = readFileToStr(dataDir + "samples/PDB/1CF7.PDB");
     GTClipboard::setText(os, fileContent);
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "1CF7");
@@ -785,7 +788,7 @@ GUI_TEST_CLASS_DEFINITION(test_0047){
     QString fileContent = readFileToStr(dataDir + "samples/FASTA/human_T1.fa");
     GTClipboard::setText(os, fileContent);
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
@@ -801,7 +804,7 @@ GUI_TEST_CLASS_DEFINITION(test_0048){
     for(int i = 0; i < 10; i++){
         GTUtilsProjectTreeView::click(os, "COI.aln");
         GTClipboard::setText(os, QString(">human_T%1\r\nACGT\r\nACG").arg(QString::number(i)));
-        GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+        GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
         GTGlobals::sleep();
         uiLog.trace(QString("item number %1 inserted").arg(i));
     }
@@ -830,7 +833,7 @@ GUI_TEST_CLASS_DEFINITION(test_0049){
     QString fileContent = readFileToStr(dataDir + "samples/FASTA/human_T1.fa");
     GTClipboard::setText(os, fileContent);
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -848,7 +851,7 @@ GUI_TEST_CLASS_DEFINITION(test_0050){
     QString fileContent = readFileToStr(dataDir + "samples/FASTA/human_T1.fa");
     GTClipboard::setText(os, fileContent);
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -874,7 +877,7 @@ GUI_TEST_CLASS_DEFINITION(test_0051){
 
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
 
     GTUtilsProjectTreeView::findIndex(os, "Multiple alignment");
@@ -891,7 +894,7 @@ GUI_TEST_CLASS_DEFINITION(test_0052){
 
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge));
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -911,7 +914,7 @@ GUI_TEST_CLASS_DEFINITION(test_0053){
 
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsProjectTreeView::itemModificationCheck(os, GTUtilsProjectTreeView::findIndex(os, "clipboard.fa"), true);
 }
@@ -926,7 +929,7 @@ GUI_TEST_CLASS_DEFINITION(test_0054){
 
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate, 10, true));
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
 }
 
@@ -950,7 +953,7 @@ GUI_TEST_CLASS_DEFINITION(test_0055){
     GTClipboard::setText(os, fileContent);
 
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, new CustomScenarioCancel()));
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
 }
 
@@ -964,7 +967,7 @@ GUI_TEST_CLASS_DEFINITION(test_0056){
     GTClipboard::setText(os, fileContent);
 
     GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "Plain text"));
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
 }
 
@@ -994,7 +997,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057){
 
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new CheckPathScenario()));
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Align));
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
 }
 
@@ -1008,7 +1011,7 @@ GUI_TEST_CLASS_DEFINITION(test_0058) {
     GTClipboard::setText(os, fileContent);
 
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "project_test_0058/project_test_0058.ugenedb", "", "", true));
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //Expected: there are no dialog of file format choosing.
@@ -1018,7 +1021,7 @@ GUI_TEST_CLASS_DEFINITION(test_0059) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTGlobals::sleep();
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/FASTA/human_T1.fa");
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
@@ -1028,7 +1031,7 @@ GUI_TEST_CLASS_DEFINITION(test_0060) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTGlobals::sleep();
     GTClipboard::setText(os, "ACGT");
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "clipboard", GTGlobals::FindOptions(true, Qt::MatchContains));
@@ -1038,7 +1041,7 @@ GUI_TEST_CLASS_DEFINITION(test_0061) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/FASTA/human_T1.fa");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
@@ -1047,7 +1050,7 @@ GUI_TEST_CLASS_DEFINITION(test_0062) {
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/FASTA/human_T1.fa" << dataDir + "samples/HMM/aligment15900.hmm");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
@@ -1062,7 +1065,7 @@ GUI_TEST_CLASS_DEFINITION(test_0063) {
 
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/FASTA/human_T1.fa");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
@@ -1074,7 +1077,7 @@ GUI_TEST_CLASS_DEFINITION(test_0064) {
 
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/FASTA/human_T1.fa");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
@@ -1089,7 +1092,7 @@ GUI_TEST_CLASS_DEFINITION(test_0065) {
 
     GTClipboard::setText(os, ">human_T1\r\nACGTACG\r\n");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
@@ -1104,7 +1107,7 @@ GUI_TEST_CLASS_DEFINITION(test_0066) {
     GTClipboard::setText(os, ">human_T1\r\nACGTACG\r\n");
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY" << "paste"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
@@ -1117,7 +1120,7 @@ GUI_TEST_CLASS_DEFINITION(test_0067) {
 
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/FASTA/human_T1.fa");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
@@ -1129,7 +1132,7 @@ GUI_TEST_CLASS_DEFINITION(test_0068) {
     GTUtilsSequenceView::selectSequenceRegion(os, 1, 2);
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/FASTA/human_T1.fa");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     int len = GTUtilsSequenceView::getLengthOfSequence(os);
@@ -1141,7 +1144,7 @@ GUI_TEST_CLASS_DEFINITION(test_0069) {
     GTUtilsSequenceView::selectSequenceRegion(os, 1, 2);
     GTClipboard::setText(os, ">human_T1\r\nACGTACGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\r\n");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     int len = GTUtilsSequenceView::getLengthOfSequence(os);
@@ -1166,7 +1169,7 @@ GUI_TEST_CLASS_DEFINITION(test_0071) {
 
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/Genbank/sars.gb");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "NC_004718");
@@ -1181,7 +1184,7 @@ GUI_TEST_CLASS_DEFINITION(test_0072) {
     //select annotations
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/Genbank/sars.gb");
     //Ctrl+Shift+V в GUI-test?
-    //GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"] + GTKeyboardDriver::key["shift"]);
+    //GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier + Qt::Key_Shift);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
@@ -1195,7 +1198,7 @@ GUI_TEST_CLASS_DEFINITION(test_0073) {
 
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/FASTA/human_T1.fa");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
@@ -1207,7 +1210,7 @@ GUI_TEST_CLASS_DEFINITION(test_0074) {
 
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/Genbank/sars.gb");
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::findIndex(os, "NC_004718");
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 46d8493..4d58e6b 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
@@ -80,7 +80,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTUtilsDocument::checkDocument(os, "1CF7.PDB");
 
 //     3) File path at tooltip for "1CF7.PDB" must be "_common_data/scenarios/sandbox/1CF7.PDB"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
     GTGlobals::sleep();
     GTUtilsToolTip::checkExistingToolTip(os, "_common_data/scenarios/sandbox/1CF7.PDB");
 }
@@ -122,7 +122,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 //     1) project view with document "1CF7.PDB" has been opened,
     GTUtilsDocument::checkDocument(os, "1CF7.PDB");
 //     3) File path at tooltip for "1CF7.PDB" must be "samples/PDB/1CF7.PDB"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
     GTGlobals::sleep(2000);
     GTUtilsToolTip::checkExistingToolTip(os, "samples/PDB/1CF7.PDB");
 }
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
index a73f829..20d1aad 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.cpp
@@ -58,8 +58,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
 //  2. Create a bookmark
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsBookmarksTreeView::getItemCenter(os, "NC_014267 [s] NC_014267 sequence"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsBookmarksTreeView::getItemCenter(os, "NC_014267 [s] NC_014267 sequence"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
 //  3. Close project
@@ -76,13 +76,13 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 
     // 2. Create a bookmark. Change: Create 2 bookmarks.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsBookmarksTreeView::getItemCenter(os, "NC_014267 [s] NC_014267 sequence"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsBookmarksTreeView::getItemCenter(os, "NC_014267 [s] NC_014267 sequence"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsBookmarksTreeView::getItemCenter(os, "NC_014267 [s] NC_014267 sequence"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsBookmarksTreeView::getItemCenter(os, "NC_014267 [s] NC_014267 sequence"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     // 3. Close project
@@ -99,14 +99,14 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 
     // 2. Create a bookmark
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsBookmarksTreeView::getItemCenter(os, "NC_014267 [s] NC_014267 sequence"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsBookmarksTreeView::getItemCenter(os, "NC_014267 [s] NC_014267 sequence"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     //2'. Change: Remove the bookmark
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_REMOVE_BOOKMARK, GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsBookmarksTreeView::getItemCenter(os, "NC_014267 [s] NC_014267 sequence"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsBookmarksTreeView::getItemCenter(os, "NC_014267 [s] NC_014267 sequence"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     // 3. Close project
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 b0d5438..f2863d8 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
@@ -54,12 +54,12 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
 // 2. Open view for 1.gb document.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_load_selected_documents", GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
+    GTMouseDriver::click(Qt::RightButton);
 
 // Press Ctrl+N and add annotation to it annotations table.
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "CCC", "1.. 10"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -79,12 +79,12 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) { //CHANGES another annotation created
 
     // 2. Open view for 1.gb document.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_load_selected_documents", GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
+    GTMouseDriver::click(Qt::RightButton);
 
     // Press Ctrl+N and add annotation to it annotations table.
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "GROUP", "Annotation", "4.. 18"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
@@ -126,12 +126,12 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
 // 6. Load 1.gb document using context menu.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_load_selected_documents", GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
+    GTMouseDriver::click(Qt::RightButton);
 
 // Press Ctrl+N and add annotation "misc_feature" to the annotations table in 1.gb document.
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, false, "<auto>", "misc_feature", "complement(1.. 20)"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
 // Expected state: in project view 1.gb document has marked as modified (with blue color)
@@ -154,8 +154,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
 // 10) Open 1.gb view by context menu
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_load_selected_documents", GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: annotation added at step 6 already presents in document
     GTGlobals::sleep();
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 f3a99e0..3fd6d26 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
@@ -266,8 +266,8 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     CHECK_SET_ERR(1 == objectIndexes.size(), QString("Unexpected filtered object count: %1").arg(objectIndexes.size()));
 
     // 5. Double click it
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, objectIndexes.first()));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, objectIndexes.first()));
+    GTMouseDriver::doubleClick();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected: Sequence view has opened
@@ -278,8 +278,8 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
     // 7. Call right click menu on the item and select { Open view -> Open new view: Sequence View }
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Open view" << "Open new view: Sequence View"));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, objectIndexes.first()));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, objectIndexes.first()));
+    GTMouseDriver::click(Qt::RightButton);
 
     // Expected: Sequence view has opened
     CHECK_SET_ERR(NULL != GTUtilsMdi::findWindow(os, " [s] NC_001363"), "Sequence view hasn't opened");
@@ -296,8 +296,8 @@ void checkEditMenu(HI::GUITestOpStatus &os, const QString &groupName, const QStr
     GTUtilsProjectTreeView::getTreeView(os)->scrollTo(objectIndexes.first());
 
     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Edit", PopupChecker::NotExists));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, objectIndexes.first()));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, objectIndexes.first()));
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 void checkDeleteButton(HI::GUITestOpStatus &os, const QString &groupName, const QString &objectName) {
@@ -310,9 +310,9 @@ void checkDeleteButton(HI::GUITestOpStatus &os, const QString &groupName, const
     CHECK_SET_ERR(!objectIndexes.isEmpty(), QString("Expected a single object named '%1' in the '%2' group").arg(objectName, groupName));
     GTUtilsProjectTreeView::getTreeView(os)->scrollTo(objectIndexes.first());
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, objectIndexes.first()));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, objectIndexes.first()));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(200);
 
     groupIndexes = GTUtilsProjectTreeView::findFilteredIndexes(os, groupName);
@@ -325,8 +325,8 @@ void makeRightClick(HI::GUITestOpStatus &os, const QString &groupName) {
     CHECK_SET_ERR(groupIndexes.size() == 1, QString("Expected a single '%1' filter group in the project view").arg(groupName));
     GTUtilsProjectTreeView::getTreeView(os)->scrollTo(groupIndexes.first());
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, groupIndexes.first()));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, groupIndexes.first()));
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 }
@@ -395,8 +395,8 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "U2__ExportMSA2SequencesDialog", QDialogButtonBox::Cancel));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export/Import" << "Export alignment to sequence format..."));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, objectIndex));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, objectIndex));
+    GTMouseDriver::click(Qt::RightButton);
 
     // 7. Type to the project filter field "acacacacac"
     GTUtilsProjectTreeView::filterProject(os, "acacacacac");
@@ -416,8 +416,8 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "U2__ExportSequencesDialog", QDialogButtonBox::Cancel));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export/Import" << "Export sequences..."));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, objectIndex));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, objectIndex));
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0012) {
@@ -505,7 +505,7 @@ GUI_TEST_CLASS_DEFINITION(test_0014) {
 
     // 6. Remove typed word using a backspace
     for (int i = 0; i < 3; ++i) {
-        GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["backspace"]);
+        GTKeyboardDriver::keyPress(Qt::Key_Backspace);
         GTGlobals::sleep(100);
     }
     GTGlobals::sleep(3000);
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 b6239a9..3b44193 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
@@ -37,8 +37,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/project/proj2.uprj");
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTUtilsDocument::checkDocument(os, "1.gb", AnnotatedDNAViewFactory::ID);
 }
 
@@ -50,8 +50,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
     QModelIndex parent = GTUtilsProjectTreeView::findIndex(os, "1.gb");
     QModelIndex child = GTUtilsProjectTreeView::findIndex(os, "NC_001363 features", parent);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, child));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, child));
+    GTMouseDriver::doubleClick();
     GTUtilsDocument::checkDocument(os, "1.gb", AnnotatedDNAViewFactory::ID);
 }
 
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
index 6c5ede0..a373ef7 100644
--- 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
@@ -88,8 +88,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsApp::checkUGENETitle(os, expectedTitle);
 
 // 2. Double click on "[a] Annotations" sequence object, in project view tree
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // Expected result: NC_001363 sequence has been opened in sequence view
@@ -111,8 +111,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     CHECK_SET_ERR(activeWindow != NULL, "there is no active MDI window");
 
     QPoint p = activeWindow->mapToGlobal(activeWindow->rect().center());
-    GTMouseDriver::moveTo(os, QPoint(p.x(), 200));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(QPoint(p.x(), 200));
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: sequence view [1..4] has been opened, with sequence "AAAT"
     GTGlobals::sleep();
@@ -135,8 +135,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTUtilsDocument::checkDocument(os, "2.gb");
 
 // 2. Double click on "[a] Annotations" sequence object, in project view tree
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 //     Expected result: NC_001363 sequence has been opened in sequence view
@@ -160,8 +160,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     );
     GTUtilsDialog::waitForDialog(os, filler);
 
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: sequence view C has been opened, with sequence "GAATAGAAAAG"
 }
@@ -182,16 +182,16 @@ GUI_TEST_CLASS_DEFINITION(test_0003)
 
 // 2. Double click on "[a] Annotations" sequence object, in project view tree
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, "Annotations");
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 
 // Expected result: NC_001363 sequence has been opened in sequence view
     GTUtilsDocument::checkDocument(os, doc1, AnnotatedDNAViewFactory::ID);
 
 // 3. Select joined annotation B. Use context menu item {Export->Export Sequence of Selected Annotations}
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B_joined"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B_joined"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // Expected state: Export Sequence of Selected Annotations
@@ -211,8 +211,8 @@ GUI_TEST_CLASS_DEFINITION(test_0003)
         true
     );
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B_joined"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B_joined"));
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: sequence view B part 1 of 3 has been opened, with sequence "ACCCCACCCGTAGGTGGCAAGCTAGCTTAAG"
     GTUtilsSequenceView::checkSequence(os, "ACCCCACCCGTAGGTGGCAAGCTAGCTTAAG");
@@ -224,14 +224,14 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTUtilsDocument::checkDocument(os, "1.gb");
     GTUtilsDocument::checkDocument(os, "2.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::doubleClick();
     GTUtilsDocument::checkDocument(os, "1.gb", AnnotatedDNAViewFactory::ID);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << ACTION_EXPORT_ANNOTATIONS));
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(os, testDir+"_common_data/scenarios/sandbox/1.csv", ExportAnnotationsFiller::csv));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "B_joined"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "B_joined"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     bool equals = GTFile::equals(os, testDir+"_common_data/scenarios/sandbox/1.csv", testDir+"_common_data/scenarios/project/test_0004.csv");
@@ -242,16 +242,16 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QModelIndex nc_001363 = GTUtilsProjectTreeView::findIndex(os,"NC_001363 sequence", GTUtilsProjectTreeView::findIndex(os, "1.gb"));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, nc_001363));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, nc_001363));
+    GTMouseDriver::doubleClick();
     GTUtilsDocument::checkDocument(os, "1.gb", AnnotatedDNAViewFactory::ID);
     GTGlobals::sleep(100);
 
     QTreeWidgetItem* item = GTUtilsAnnotationsTreeView::findItem(os, "C");
     CHECK_SET_ERR(item != NULL, "AnnotationsTreeView is NULL");
 
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "C"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_EXPORT" << "action_export_annotations", GTGlobals::UseKey));
@@ -263,7 +263,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
         false
     );
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(1000);
     bool equals = GTFile::equals(os, testDir+"_common_data/scenarios/sandbox/1.csv", testDir+"_common_data/scenarios/project/test_0005.csv");
@@ -285,14 +285,14 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 
     GTGlobals::sleep();
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "misc_feature_group", "misc_feature", "complement(1.. 20)"));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
     GTGlobals::sleep();
 
 
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "misc_feature"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "misc_feature"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_EXPORT" << "action_export_sequence_of_selected_annotations", GTGlobals::UseKey));
@@ -305,8 +305,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
         true
     );
     GTUtilsDialog::waitForDialog(os, filler3);
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "misc_feature"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "misc_feature"));
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
 }
@@ -343,10 +343,10 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363"));
+    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(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0009) {
@@ -354,10 +354,10 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    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(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -372,10 +372,10 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     GTFileDialog::openFile(os, dataDir + "samples/GFF/", "5prime_utr_intron_A21.gff");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Ca21chr5 features"));
+    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(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     // the rest part of the test checks that a newly created association can be used for sequence export
 
@@ -386,10 +386,10 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
     GTUtilsProjectTreeView::dragAndDrop(os, idxGff, seqArea);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Ca21chr5 features"));
+    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(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -403,14 +403,14 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyPress(Qt::Key_Delete);
     GTGlobals::sleep(200);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    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(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0012) {
@@ -426,10 +426,10 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
     GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
     GTUtilsProjectTreeView::dragAndDrop(os, annIdx, seqArea);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    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(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -442,18 +442,18 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
     GTFileDialog::openFile(os, dataDir + "samples/GFF/", "5prime_utr_intron_A21.gff");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
     GTGlobals::sleep(200);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Ca21chr5 features"));
-    GTMouseDriver::click(os);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Ca21chr1 features"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Ca21chr5 features"));
+    GTMouseDriver::click();
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Ca21chr1 features"));
+    GTMouseDriver::click();
+    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(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 }
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 738a0ab..a2c5cd1 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
@@ -67,8 +67,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
 // 2. Double click on [a] Annotations sequence object, in project view tree
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, "Annotations");
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // Expected result: NC_001363 sequence has been opened in sequence view
@@ -95,8 +95,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
     QModelIndex parent = GTUtilsProjectTreeView::findIndex(os, "1.gb");
     QModelIndex child = GTUtilsProjectTreeView::findIndex(os, "NC_001363 sequence", parent);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os,child));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,child));
+    GTMouseDriver::click(Qt::RightButton);
 
 
     GTGlobals::sleep(3000);
@@ -115,8 +115,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
 // 2. Double click on [a] Annotations sequence object, in project view tree
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, "Annotations");
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 // Expected result: NC_001363 sequence has been opened in sequence view
     GTUtilsDocument::checkDocument(os, "1.gb", AnnotatedDNAViewFactory::ID);
@@ -134,7 +134,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
         false
     );
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
 // 5. Open file _common_data/scenarios/sandbox/exp2.aln
@@ -148,8 +148,8 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTUtilsProject::openFiles(os, testDir + "_common_data/scenarios/project/multiple.fa");
     GTGlobals::sleep(1000);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "multiple.fa"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "multiple.fa"));
+    GTMouseDriver::click();
 
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(1000);
@@ -163,7 +163,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
         GTGlobals::UseMouse
         );
     GTUtilsDialog::waitForDialog(os, filler);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/sandbox/exp2.aln");
@@ -179,19 +179,19 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "HIV-1.aln"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "HIV-1.aln"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, "export1.fa");
     GTUtilsProjectTreeView::scrollTo(os, "ru131");
 
-    GTKeyboardDriver::keyClick(os, 'w', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'w', Qt::ControlModifier);
     GTGlobals::sleep(1000);
 
     itemPos = GTUtilsProjectTreeView::getItemCenter(os, "ru131");
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 
     QWidget *activeWindow =  GTUtilsMdi::activeWindow(os);
@@ -220,16 +220,16 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTUtilsDialog::waitForDialog(os, new ExportToSequenceFormatFiller(os, dataDir + " _common_data/scenarios/sandbox/", "export1.fa",
                                 ExportToSequenceFormatFiller::FASTA, true, false));
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "Open New View", GTGlobals::UseMouse));
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Zychia_baranovi"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Zychia_baranovi"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     QWidget *activeWindow =  GTUtilsMdi::activeWindow(os);
     CHECK_SET_ERR(activeWindow->windowTitle().contains("Zychia_baranovi"), "fasta file with sequences has been not opened");
@@ -253,16 +253,16 @@ 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(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(1000);
 
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "Open New View", GTGlobals::UseMouse));
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Zychia_baranovi"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Zychia_baranovi"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(1000);
 
     GTGlobals::sleep(1000);
@@ -292,16 +292,16 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     GTUtilsDialog::waitForDialog(os, new ExportToSequenceFormatFiller(os, dataDir + " _common_data/scenarios/sandbox/", "export1.fa",
         ExportToSequenceFormatFiller::FASTA, true, false));
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(1000);
 
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "Open New View", GTGlobals::UseMouse));
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Zychia_baranovi"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Zychia_baranovi"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(1000);
 
     GTGlobals::sleep(1000);
@@ -336,8 +336,8 @@ 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(os, itemPos);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 // Expected result: NC_001363 sequence has been opened in sequence view
@@ -359,8 +359,8 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 
     QModelIndex parent = GTUtilsProjectTreeView::findIndex(os, "1.gb");
     QModelIndex child = GTUtilsProjectTreeView::findIndex(os, "NC_001363 sequence", parent);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, child));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, child));
+    GTMouseDriver::click(Qt::RightButton);
 
 // 5. Open file _common_data/scenarios/sandbox/exp2.msf
     GTGlobals::sleep();
@@ -395,8 +395,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 
     // 2. Double click on [a] Annotations sequence object, in project view tree
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, "Annotations");
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // Expected result: NC_001363 sequence has been opened in sequence view
@@ -418,8 +418,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 
     QModelIndex parent = GTUtilsProjectTreeView::findIndex(os, "1.gb");
     QModelIndex child = GTUtilsProjectTreeView::findIndex(os, "NC_001363 sequence", parent);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, child));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, child));
+    GTMouseDriver::click(Qt::RightButton);
 
     // 5. Open file _common_data/scenarios/sandbox/exp2.msf
     GTGlobals::sleep();
@@ -454,8 +454,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
 
     // 2. Double click on [a] Annotations sequence object, in project view tree
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, "Annotations");
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // Expected result: NC_001363 sequence has been opened in sequence view
@@ -477,8 +477,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
 
     QModelIndex parent = GTUtilsProjectTreeView::findIndex(os, "1.gb");
     QModelIndex child = GTUtilsProjectTreeView::findIndex(os, "NC_001363 sequence", parent);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, child));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, child));
+    GTMouseDriver::click(Qt::RightButton);
 
     // 5. Open file _common_data/scenarios/sandbox/exp2.msf
     GTGlobals::sleep();
@@ -513,8 +513,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
 
     // 2. Double click on [a] Annotations sequence object, in project view tree
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, "Annotations");
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // Expected result: NC_001363 sequence has been opened in sequence view
@@ -536,8 +536,8 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
 
     QModelIndex parent = GTUtilsProjectTreeView::findIndex(os, "1.gb");
     QModelIndex child = GTUtilsProjectTreeView::findIndex(os, "NC_001363 sequence", parent);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, child));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, child));
+    GTMouseDriver::click(Qt::RightButton);
 
     // 5. Open file _common_data/scenarios/sandbox/exp2.msf
     GTGlobals::sleep();
@@ -563,8 +563,8 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep(1000);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "A01.abi"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "A01.abi"));
+    GTMouseDriver::click(Qt::RightButton);
 
     }
 GUI_TEST_CLASS_DEFINITION(test_0008_1) {
@@ -580,8 +580,8 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep(1000);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "A01.abi"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "A01.abi"));
+    GTMouseDriver::click(Qt::RightButton);
     }
 GUI_TEST_CLASS_DEFINITION(test_0008_2) {
     GTFileDialog::openFile(os, dataDir + "samples/ABIF/", "A01.abi");
@@ -596,8 +596,8 @@ GUI_TEST_CLASS_DEFINITION(test_0008_2) {
     GTUtilsDialog::waitForDialog(os, filler);
     GTGlobals::sleep(1000);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "A01.abi"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "A01.abi"));
+    GTMouseDriver::click(Qt::RightButton);
     }
 
 } // namespace
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 f5a7ed0..e086715 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
@@ -73,8 +73,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
             GT_CHECK(btn != NULL, "Radio button not found");
 
             if (! btn->isEnabled()) {
-                GTMouseDriver::moveTo(os, btn->mapToGlobal(btn->rect().topLeft()));
-                GTMouseDriver::click(os);
+                GTMouseDriver::moveTo(btn->mapToGlobal(btn->rect().topLeft()));
+                GTMouseDriver::click();
             }
 
             QComboBox *comboBox = dialog->findChild<QComboBox*>();
@@ -99,16 +99,16 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
     GTGlobals::sleep(200);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(200);
     GTUtilsDocument::checkDocument(os, "1.gb", AnnotatedDNAViewFactory::ID);
 
     GTGlobals::sleep(2000);
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnnotationDialogComboBoxChecker(os, ""));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep(1000);
 }
 
@@ -127,8 +127,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002)
             GT_CHECK(btn != NULL, "Radio button not found");
 
             if (! btn->isEnabled()) {
-                GTMouseDriver::moveTo(os, btn->mapToGlobal(btn->rect().topLeft()));
-                GTMouseDriver::click(os);
+                GTMouseDriver::moveTo(btn->mapToGlobal(btn->rect().topLeft()));
+                GTMouseDriver::click();
             }
 
             QComboBox *comboBox = dialog->findChild<QComboBox*>();
@@ -162,15 +162,15 @@ GUI_TEST_CLASS_DEFINITION(test_0002)
     GTGlobals::sleep(100);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "action_open_view"));
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsDocument::checkDocument(os, "1.gb", AnnotatedDNAViewFactory::ID);
     QIcon itemIconBefore = qvariant_cast<QIcon>(item.data(Qt::DecorationRole));
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EDIT_MENU<<ACTION_DOCUMENT__UNLOCK));
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_DOCUMENT__UNLOCK));
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::click(Qt::RightButton);
 
     QIcon itemIconAfter = qvariant_cast<QIcon>(item.data(Qt::DecorationRole));
     if (itemIconBefore.cacheKey() == itemIconAfter.cacheKey() && !os.hasError()) {
@@ -178,12 +178,12 @@ GUI_TEST_CLASS_DEFINITION(test_0002)
     }
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnnotationDialogComboBoxChecker(os, ""));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep(1000);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EDIT_MENU<<ACTION_DOCUMENT__LOCK));
-    GTMouseDriver::moveTo(os, itemPos);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_DOCUMENT__LOCK));
+    GTMouseDriver::moveTo(itemPos);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
     GTGlobals::sleep();
@@ -199,8 +199,8 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/project/proj2.uprj");
     GTUtilsDocument::checkDocument(os, "1.gb");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTUtilsDocument::checkDocument(os, "1.gb", AnnotatedDNAViewFactory::ID);
 
     QModelIndex item = GTUtilsProjectTreeView::findIndex(os, "1.gb");
@@ -211,9 +211,9 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     QImage expectedImage = documentIcon.pixmap(32,32).toImage();
     CHECK_SET_ERR(expectedImage == foundImage, "Icon is locked");
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<< ACTION_PROJECT__EDIT_MENU << ACTION_DOCUMENT__LOCK));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_DOCUMENT__LOCK));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1.gb"));
+    GTMouseDriver::click(Qt::RightButton);
 
     icon = GTUtilsProjectTreeView::getIcon(os, item);
     foundImage = icon.pixmap(32,32).toImage();
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 c18f0a3..59fd67f 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
@@ -64,10 +64,10 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
 // 3. Close sequence view, then reopen it
     GTUtilsMdi::click(os, GTGlobals::Close);
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "seq4.fa"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "seq4.fa"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 
 // 4. Check that annotation have the qualifier "repeat homology"
@@ -75,13 +75,13 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     CHECK_SET_ERR(treeWidget != NULL, "Tree widget is NULL");
 
     QTreeWidgetItem *annotationsRoot = GTUtilsAnnotationsTreeView::findItem(os, "repeat_unit  (0, 325)");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, annotationsRoot->child(0)));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, annotationsRoot->child(0)));
+    GTMouseDriver::doubleClick();
     GTUtilsAnnotationsTreeView::findItem(os, "repeat_homology(%)");
 
 // 5. Close sequence view (it's needed to refresh screen since Ugene cannot close correctly on Win7 32bit)
     GTUtilsMdi::click(os, GTGlobals::Close);
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 }
 
 } // namespace GUITest_common_scenarios_repeat_finder
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 f86e575..cf0b5fa 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
@@ -65,7 +65,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTUtilsProject::openFiles(os, dataDir + "samples/FASTA/human_T1.fa");
     GTGlobals::sleep();
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 50));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 50));
     GTWidget::click(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(1000);
@@ -104,7 +104,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 // 3. Fill the next field in dialog:
 //     {Range:} 1..50
 //
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 50));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 50));
     GTWidget::click(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(1000);
@@ -202,7 +202,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 50));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 50));
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(1000);
     Runnable *removeDialog = new RemovePartFromSequenceDialogFiller(os,
@@ -271,7 +271,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     QTreeWidgetItem *dummyTest = GTUtilsAnnotationsTreeView::findItem(os, "DUMMY_1");
     CHECK_SET_ERR(dummyTest != NULL, "There is no annotation DUMMY_1");
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 2, 2));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 2, 2));
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep();
 
@@ -299,14 +299,14 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
 GUI_TEST_CLASS_DEFINITION(test_0009) {
     GTUtilsProject::openFiles(os, testDir + "_common_data/fasta/AMINO.fa");
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 10, 13));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 10, 13));
 
     GTWidget::click(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
     GTGlobals::sleep();
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(1000);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(1000);
 
     QString sequence = GTClipboard::text(os);
@@ -319,7 +319,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 11));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 11));
     GTKeyboardUtils::selectAll(os);
     GTGlobals::sleep(1000);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_COPY << ADV_COPY_TRANSLATION_ACTION, GTGlobals::UseKey));
@@ -337,9 +337,9 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_COPY" << "action_copy_annotation_sequence"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "DUMMY_1"));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "DUMMY_1"));
     GTGlobals::sleep(1000);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(1000);
 
     const QString expectedSequence = "AATGA";
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 5da44a3..ecf0670 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
@@ -20,21 +20,8 @@
  */
 
 #include "GTTestsSequenceView.h"
-#include "system/GTClipboard.h"
-#include <primitives/GTComboBox.h>
-#include <primitives/GTLineEdit.h>
-#include <primitives/GTScrollBar.h>
-#include <drivers/GTMouseDriver.h>
+
 #include "GTGlobals.h"
-#include <primitives/GTWidget.h>
-#include "primitives/GTAction.h"
-#include "primitives/GTMenu.h"
-#include "system/GTFile.h"
-#include <base_dialogs/GTFileDialog.h>
-#include "api/GTSequenceReadingModeDialog.h"
-#include <drivers/GTKeyboardDriver.h>
-#include <primitives/GTRadioButton.h>
-#include <primitives/GTTreeWidget.h>
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsAnnotationsHighlightingTreeView.h"
 #include "GTUtilsCircularView.h"
@@ -43,10 +30,12 @@
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "utils/GTUtilsToolTip.h"
-#include <base_dialogs/ColorDialogFiller.h>
-#include <base_dialogs/DefaultDialogFiller.h>
-#include "primitives/PopupChooser.h"
+
+#include "api/GTSequenceReadingModeDialog.h"
+
+#include "system/GTClipboard.h"
+#include "system/GTFile.h"
+
 #include "runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h"
@@ -63,23 +52,43 @@
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 #include "runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h"
 #include "runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h"
+
+#include "utils/GTUtilsToolTip.h"
+#include "utils/GTThread.h"
+
+#include <base_dialogs/GTFileDialog.h>
+#include <base_dialogs/ColorDialogFiller.h>
+#include <base_dialogs/DefaultDialogFiller.h>
 #include <base_dialogs/MessageBoxFiller.h>
-#include <U2View/DetView.h>
+#include <base_dialogs/MessageBoxFiller.h>
+
+#include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
+
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTScrollBar.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTAction.h>
+#include <primitives/GTMenu.h>
+#include <primitives/PopupChooser.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTTreeWidget.h>
+
 #include <U2Core/AppContext.h>
+
 #include <U2View/ADVConstants.h>
-#include <U2View/Overview.h>
+#include <U2View/DetView.h>
 #include <U2View/GSequenceLineView.h>
 #include <U2View/GSequenceGraphView.h>
+#include <U2View/Overview.h>
 
+#include <QApplication>
 #include <QGroupBox>
 #include <QTreeWidget>
 #include <QTreeWidgetItem>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
 
 namespace U2 {
 
@@ -149,10 +158,10 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     QWidget *w2 = GTWidget::findWidget(os, "ADV_single_sequence_widget_2");
     QWidget *w3 = GTWidget::findWidget(os, "ADV_single_sequence_widget_3");
 
-    QAbstractButton* b0 = GTAction::button(os,"translation_action", w0);
-    QAbstractButton* b1 = GTAction::button(os,"translation_action", w1);
-    QAbstractButton* b2 = GTAction::button(os,"translation_action", w2);
-    QAbstractButton* b3 = GTAction::button(os,"translation_action", w3);
+    QWidget *b0 = GTWidget::findWidget(os, "translationsMenuToolbarButton", w0, GTGlobals::FindOptions(false));
+    QWidget *b1 = GTWidget::findWidget(os, "translationsMenuToolbarButton", w1, GTGlobals::FindOptions(false));
+    QWidget *b2 = GTWidget::findWidget(os, "translationsMenuToolbarButton", w2);
+    QWidget *b3 = GTWidget::findWidget(os, "translationsMenuToolbarButton", w3);
     GTGlobals::sleep(3000);
 
     CHECK_SET_ERR(b0 == NULL, "b0 is not NULL");
@@ -181,12 +190,6 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     Runnable *chooser = new PopupChooser(os, QStringList() << "toggleDetailsView");
     GTUtilsDialog::waitForDialog(os, chooser);
     GTWidget::click(os, toggleViewButton);
-    GTGlobals::sleep();
-
-    GTGlobals::sleep();
-    QAbstractButton* translation = GTAction::button(os, "translation_action");
-
-    CHECK_SET_ERR(translation -> isEnabled() == false, "button is not disabled");
 
     GTGlobals::sleep();
     QAbstractButton* complement = GTAction::button(os, "complement_action");
@@ -198,11 +201,8 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTWidget::click(os, toggleViewButton);
     GTGlobals::sleep();
 
-    GTGlobals::sleep();
-    QAbstractButton* translation1 = GTAction::button(os, "translation_action");
-    GTGlobals::sleep();
-    CHECK_SET_ERR(translation1 -> isEnabled() == true, "button is not enabled");
-
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "translation_action", PopupChecker::IsEnabled));
+    GTWidget::click(os, GTWidget::findWidget(os, "translationsMenuToolbarButton"));
 
     GTGlobals::sleep();
     QAbstractButton* complement1 = GTAction::button(os, "complement_action");
@@ -225,12 +225,6 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     Runnable *chooser = new PopupChooser(os, QStringList() << "toggleAllSequenceViews");
     GTUtilsDialog::waitForDialog(os, chooser);
     GTWidget::click(os, toggleViewButton);
-    GTGlobals::sleep();
-
-    GTGlobals::sleep();
-    QAbstractButton* translation = GTAction::button(os, "translation_action");
-
-    CHECK_SET_ERR(translation -> isEnabled() == false, "button is not disabled");
 
     GTGlobals::sleep();
     QAbstractButton* complement = GTAction::button(os, "complement_action");
@@ -242,11 +236,8 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     GTWidget::click(os, toggleViewButton);
     GTGlobals::sleep();
 
-    GTGlobals::sleep();
-    QAbstractButton* translation1 = GTAction::button(os, "translation_action");
-
-    GTGlobals::sleep();
-    CHECK_SET_ERR(translation1 -> isEnabled() == true, "button is not enabled");
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "translation_action", PopupChecker::IsEnabled));
+    GTWidget::click(os, GTWidget::findWidget(os, "translationsMenuToolbarButton"));
 
     GTGlobals::sleep();
     QAbstractButton* complement1 = GTAction::button(os, "complement_action");
@@ -263,12 +254,6 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     Runnable *chooser = new PopupChooser(os, QStringList() << "toggleDetailsView");
     GTUtilsDialog::waitForDialog(os, chooser);
     GTWidget::click(os, toggleViewButton);
-    GTGlobals::sleep();
-
-    GTGlobals::sleep();
-    QAbstractButton* translation = GTAction::button(os, "translation_action");
-
-    CHECK_SET_ERR(translation -> isEnabled() == false, "button is not disabled");
 
     GTGlobals::sleep();
     QAbstractButton* complement = GTAction::button(os, "complement_action");
@@ -280,11 +265,8 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     GTWidget::click(os, toggleViewButton);
     GTGlobals::sleep();
 
-    GTGlobals::sleep();
-    QAbstractButton* translation1 = GTAction::button(os, "translation_action");
-
-    GTGlobals::sleep();
-    CHECK_SET_ERR(translation1 -> isEnabled() == true, "button is not enabled");
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "translation_action", PopupChecker::IsEnabled));
+    GTWidget::click(os, GTWidget::findWidget(os, "translationsMenuToolbarButton"));
 
     GTGlobals::sleep();
     CHECK_SET_ERR(complement -> isEnabled() == true, "button is not disabled");
@@ -292,10 +274,6 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     Runnable *chooser2 = new PopupChooser(os, QStringList() << "toggleDetailsView");
     GTUtilsDialog::waitForDialog(os, chooser2);
     GTWidget::click(os, toggleViewButton);
-    GTGlobals::sleep();
-
-    GTGlobals::sleep();
-    CHECK_SET_ERR(translation -> isEnabled() == false, "button is not disabled");
 
     GTGlobals::sleep();
     QAbstractButton* complement1 = GTAction::button(os, "complement_action");
@@ -325,7 +303,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_EXPORT" << "action_export_selected_sequence_region"));
     GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, testDir + "_common_data/scenarios/sandbox/", "exp.fasta"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0004_1) { //CHANGES: keyboard used instead mouse
@@ -338,7 +316,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1) { //CHANGES: keyboard used instead mouse
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_EXPORT" << "action_export_selected_sequence_region"));
     GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, testDir + "_common_data/scenarios/sandbox/", "exp.fasta"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0005) {
@@ -653,9 +631,9 @@ GUI_TEST_CLASS_DEFINITION(test_0023) {
     CHECK_SET_ERR( pair4.contains(U2Region(66, 20)), "No 67..86 region");
     CHECK_SET_ERR( pair4.contains(U2Region(606, 20)), "No 607..626 region");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Primers_DNA"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Primers_DNA"));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Mark as circular"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTWidget::click(os, GTWidget::findWidget(os, "render_area_Primers_DNA"));
 
@@ -665,8 +643,8 @@ GUI_TEST_CLASS_DEFINITION(test_0023) {
     settings.primersName = "linear";
     GTUtilsDialog::waitForDialog(os, new Primer3DialogFiller(os, settings));
 
-    GTMouseDriver::click(os);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click();
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(5000);
     pair1 = GTUtilsAnnotationsTreeView::getAnnotatedRegionsOfGroup(os, "pair 1  (0, 2)", "linear  (5, 0)");
@@ -695,8 +673,8 @@ GUI_TEST_CLASS_DEFINITION(test_0024) {
     CHECK_SET_ERR(wgt != NULL, "ADVSequenceWidget is NULL");
     GTUtilsCv::cvBtn::click(os, wgt);
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, "150000..199950,1..50000"));
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, "150000..199950,1..50000"));
+    GTKeyboardDriver::keyClick('a', Qt::ControlModifier);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "primer3_action"));
     Primer3DialogFiller::Primer3Settings settings;
@@ -704,7 +682,7 @@ GUI_TEST_CLASS_DEFINITION(test_0024) {
     GTUtilsDialog::waitForDialog(os, new Primer3DialogFiller(os, settings));
     GTWidget::click(os, wgt, Qt::RightButton);
 
-    GTGlobals::sleep(30000);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QList<U2Region> pair32 = GTUtilsAnnotationsTreeView::getAnnotatedRegionsOfGroup(os, "pair 32  (0, 2)");
     CHECK_SET_ERR( pair32.contains(U2Region(36311, 20)), "No 36312..36331 region");
@@ -734,8 +712,8 @@ GUI_TEST_CLASS_DEFINITION(test_0025) {
     ADVSingleSequenceWidget* wgt = GTUtilsSequenceView::getSeqWidgetByNumber(os);
     CHECK_SET_ERR(wgt != NULL, "ADVSequenceWidget is NULL");
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, "560..743,1..180"));
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, "560..743,1..180"));
+    GTKeyboardDriver::keyClick('a', Qt::ControlModifier);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "primer3_action"));
     GTUtilsDialog::waitForDialog(os, new Primer3DialogFiller(os));
@@ -931,8 +909,8 @@ GUI_TEST_CLASS_DEFINITION(test_0030) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new FindEnzymesDialogFiller(os, QStringList() << "YkrI"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Analyze" << "Find restriction sites"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Analyze" << "Find restriction sites..."));
+    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os)->getDetView(), Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
@@ -989,6 +967,14 @@ GUI_TEST_CLASS_DEFINITION(test_0030) {
 
     qint64 fileSize = GTFile::getSize(os, sandBoxDir + "/seq_view_test_0030.svg");
     CHECK_SET_ERR(fileSize > 15 * 1024 * 1024, QString("SVG file is too small: %1").arg(fileSize));
+    //remove document
+    GTWidget::click(os, GTUtilsProjectTreeView::getTreeView(os));
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
+    GTGlobals::sleep(100);
+
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
+    GTThread::waitForMainThread();
+    GTGlobals::sleep(500);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0031){
@@ -1099,8 +1085,6 @@ GUI_TEST_CLASS_DEFINITION(test_0031_3){
 
 #define GET_ACTIONS QMenu *activePopupMenu = qobject_cast<QMenu *>(QApplication::activePopupWidget()); \
 CHECK_SET_ERR(NULL != activePopupMenu, "Active popup menu is NULL"); \
-GTMenu::clickMenuItemByText(os, activePopupMenu, QStringList() << "Translation frames", GTGlobals::UseKey); \
-activePopupMenu = qobject_cast<QMenu *>(QApplication::activePopupWidget()); \
 QAction* direct1 = GTMenu::getMenuItem(os, activePopupMenu, "1 direct translation frame", true); \
 QAction* direct2 = GTMenu::getMenuItem(os, activePopupMenu, "2 direct translation frame", true); \
 QAction* direct3 = GTMenu::getMenuItem(os, activePopupMenu, "3 direct translation frame", true); \
@@ -1113,9 +1097,9 @@ GUI_TEST_CLASS_DEFINITION(test_0032){
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Click "Amino translations" button on mdi toolbar
-    QWidget* aminoToolbarButton = GTWidget::findWidget(os, "AminoToolbarButton");
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList()<<"Translation frames"<<"Show direct only"));
-    GTWidget::click(os, aminoToolbarButton);
+    QWidget *translationsMenuToolbarButton = GTWidget::findWidget(os, "translationsMenuToolbarButton");
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList()<<"Show direct only"));
+    GTWidget::click(os, translationsMenuToolbarButton);
 //    Check "Show direct only"
     class DirectPopupChecker : public CustomScenario {
         void run(HI::GUITestOpStatus &os) {
@@ -1129,17 +1113,17 @@ GUI_TEST_CLASS_DEFINITION(test_0032){
             CHECK_SET_ERR(!compl3->isChecked(), "check1: compl3 is checked");
 
 
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick(Qt::Key_Escape);
             GTGlobals::sleep(200);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick(Qt::Key_Escape);
         }
     };
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, new DirectPopupChecker));
-    GTWidget::click(os, aminoToolbarButton);
+    GTWidget::click(os, translationsMenuToolbarButton);
 
     //    Check "Show complementary only"
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList()<<"Translation frames"<<"Show complementary only"));
-    GTWidget::click(os, aminoToolbarButton);
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList()<<"Show complementary only"));
+    GTWidget::click(os, translationsMenuToolbarButton);
 
     class ComplPopupChecker : public CustomScenario {
         void run(HI::GUITestOpStatus &os) {
@@ -1153,17 +1137,17 @@ GUI_TEST_CLASS_DEFINITION(test_0032){
             CHECK_SET_ERR(compl3->isChecked(), "check2: compl3 is not checked");
 
 
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick(Qt::Key_Escape);
             GTGlobals::sleep(200);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick(Qt::Key_Escape);
         }
     };
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, new ComplPopupChecker));
-    GTWidget::click(os, aminoToolbarButton);
+    GTWidget::click(os, translationsMenuToolbarButton);
 
     //    Check "Show all"
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList()<<"Translation frames"<<"Show all"));
-    GTWidget::click(os, aminoToolbarButton);
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList()<<"Show all"));
+    GTWidget::click(os, translationsMenuToolbarButton);
 
     class AllPopupChecker : public CustomScenario {
         void run(HI::GUITestOpStatus &os) {
@@ -1177,13 +1161,13 @@ GUI_TEST_CLASS_DEFINITION(test_0032){
             CHECK_SET_ERR(compl3->isChecked(), "check3: compl3 is not checked");
 
 
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick(Qt::Key_Escape);
             GTGlobals::sleep(200);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick(Qt::Key_Escape);
         }
     };
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, new AllPopupChecker));
-    GTWidget::click(os, aminoToolbarButton);
+    GTWidget::click(os, translationsMenuToolbarButton);
 }
 #undef GET_ACTIONS
 
@@ -1225,7 +1209,7 @@ GUI_TEST_CLASS_DEFINITION(test_0035){
     QWidget* panView = GTWidget::findWidget(os, "pan_view_human_T1 (UCSC April 2002 chr7:115977709-117855134)");
     GTWidget::click(os, panView, Qt::LeftButton, QPoint(panView->rect().right() - 50, panView->rect().center().y()));
     GTGlobals::sleep(500);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
 //    Expected: Sequence scrolled to clicked position
     QWidget* det = GTWidget::findWidget(os, "det_view_human_T1 (UCSC April 2002 chr7:115977709-117855134)");
     QScrollBar* scrollBar = det->findChild<QScrollBar*>();
@@ -1244,7 +1228,7 @@ GUI_TEST_CLASS_DEFINITION(test_0036){
 //    Check "Sequence between selected annotations"  and
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select"
                                                       << "Sequence between selected annotations"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     QVector<U2Region> select = GTUtilsSequenceView::getSelection(os);
     CHECK_SET_ERR(select.size() ==1, QString("Wrong number of selections: %1").arg(select.size()));
     U2Region s = select.first();
@@ -1253,7 +1237,7 @@ GUI_TEST_CLASS_DEFINITION(test_0036){
 //    "Sequence around selected annotations" actions
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select"
                                                       << "Sequence around selected annotations"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     select = GTUtilsSequenceView::getSelection(os);
     CHECK_SET_ERR(select.size() ==1, QString("Wrong number of selections: %1").arg(select.size()));
     s = select.first();
@@ -1337,42 +1321,42 @@ GUI_TEST_CLASS_DEFINITION(test_0041){
     int initLength = det->getVisibleRange().length;
     GTWidget::click(os, det);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Down);
     GTGlobals::sleep(500);
     int start = GTUtilsSequenceView::getVisiableStart(os);
     CHECK_SET_ERR(start == 1, QString("1 Unexpected sequence start: %1").arg(start));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["right"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Right);
     GTGlobals::sleep(500);
     start = GTUtilsSequenceView::getVisiableStart(os);
     CHECK_SET_ERR(start == 2, QString("2 Unexpected sequence start: %1").arg(start));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["left"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Left);
     GTGlobals::sleep(500);
     start = GTUtilsSequenceView::getVisiableStart(os);
     CHECK_SET_ERR(start == 1, QString("3 Unexpected sequence start: %1").arg(start));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["up"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Up);
     GTGlobals::sleep(500);
     start = GTUtilsSequenceView::getVisiableStart(os);
     CHECK_SET_ERR(start == 0, QString("4 Unexpected sequence start: %1").arg(start));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pagedown"]);
+    GTKeyboardDriver::keyClick(Qt::Key_PageDown);
     GTGlobals::sleep(500);
     start = GTUtilsSequenceView::getVisiableStart(os);
     CHECK_SET_ERR(start == initLength, QString("5 Unexpected sequence start: %1").arg(start));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pageup"]);
+    GTKeyboardDriver::keyClick(Qt::Key_PageUp);
     GTGlobals::sleep(500);
     start = GTUtilsSequenceView::getVisiableStart(os);
     CHECK_SET_ERR(start == 0, QString("6 Unexpected sequence start: %1").arg(start));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["end"]);
+    GTKeyboardDriver::keyClick(Qt::Key_End);
     GTGlobals::sleep(500);
     start = GTUtilsSequenceView::getVisiableStart(os);
     CHECK_SET_ERR(start == 199950 - initLength, QString("7 Unexpected sequence start: %1").arg(start));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["home"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Home);
     GTGlobals::sleep(500);
     start = GTUtilsSequenceView::getVisiableStart(os);
     CHECK_SET_ERR(start == 0, QString("8 Unexpected sequence start: %1").arg(start));
@@ -1389,11 +1373,11 @@ GUI_TEST_CLASS_DEFINITION(test_0042){
     QString selected = GTUtilsAnnotationsTreeView::getSelectedItem(os);
     CHECK_SET_ERR(selected == "misc_feature", "Unexpected selected anntoation: " + selected);
 //    Click on annotation on seq view with right button
-    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList()<<"rename_item", PopupChecker::IsEnabled));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << ADV_MENU_EDIT << "edit_annotation_tree_item", PopupChecker::IsEnabled));
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << ADV_MENU_REMOVE
                                                       << "Selected annotations and qualifiers", PopupChecker::IsEnabled));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 //    Check context menu action
 }
 
@@ -1403,7 +1387,7 @@ GUI_TEST_CLASS_DEFINITION(test_0043){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    move mouse to annotation on det view
     GTUtilsSequenceView::clickAnnotationDet(os, "misc_feature", 2);
-    GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(20, 0));
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(20, 0));
     GTGlobals::sleep();
     QString tooltip = GTUtilsToolTip::getToolTip();
     QString expected = "<table><tr><td bgcolor=#ffff99 bordercolor=black width=15></td><td><big>misc_feature</big></td></tr><tr><td></td><td><b>Location"
@@ -1421,7 +1405,7 @@ GUI_TEST_CLASS_DEFINITION(test_0044){
     GTWidget::click(os, over);
     GTGlobals::sleep(1000);
     for(int i = 0; i<10; i++){
-        GTMouseDriver::scroll(os, 1);
+        GTMouseDriver::scroll(1);
         GTGlobals::sleep(200);
     }
     GTGlobals::sleep(1000);
@@ -1437,11 +1421,12 @@ GUI_TEST_CLASS_DEFINITION(test_0044_1){
     Overview* over = qobject_cast<Overview*>(GTWidget::findWidget(os, "OverviewRenderArea")->parentWidget()->parentWidget());
     GTWidget::click(os, over);
 
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(100, 0));
-    GTMouseDriver::release(os);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(100, 0));
+    GTMouseDriver::release();
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    GTThread::waitForMainThread();
 
     QVector<U2Region> selectionVector = GTUtilsSequenceView::getSelection(os);
     CHECK_SET_ERR(selectionVector.size() == 1, QString("unexpected number of selected regions: %1").arg(selectionVector.size()));
@@ -1454,12 +1439,12 @@ GUI_TEST_CLASS_DEFINITION(test_0044_2){
     GTUtilsTaskTreeView::waitTaskFinished(os);
     Overview* over = GTUtilsSequenceView::getOverviewByNumber(os);
     GTWidget::click(os, over);
-    GTMouseDriver::doubleClick(os);
-    GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(0, over->geometry().height()/3));
+    GTMouseDriver::doubleClick();
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(0, over->geometry().height()/3));
     GTGlobals::sleep();
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(over->geometry().width()/3, 0));
-    GTMouseDriver::release(os);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(over->geometry().width()/3, 0));
+    GTMouseDriver::release();
     GTGlobals::sleep();
 
     int start = GTUtilsSequenceView::getVisiableStart(os);
@@ -1508,7 +1493,7 @@ GUI_TEST_CLASS_DEFINITION(test_0045){
         }
     }
     GTWidget::click(os, vertical);
-    GTMouseDriver::scroll(os, 5);
+    GTMouseDriver::scroll(5);
     GTGlobals::sleep(1000);
     QImage final = GTWidget::getImage(os, pan);
     CHECK_SET_ERR(init != final, "pan view was not changed")
@@ -1578,11 +1563,12 @@ GUI_TEST_CLASS_DEFINITION(test_0050){
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
-            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Wrong annotation name"));
-            QLineEdit* nameEdit = GTWidget::findExactWidget<QLineEdit*>(os, "nameEdit", dialog);
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Illegal annotation name"));
+            QLineEdit* nameEdit = GTWidget::findExactWidget<QLineEdit*>(os, "leAnnotationName", dialog);
             GTLineEdit::setText(os, nameEdit, "//");
-
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
         }
     };
 
@@ -1592,19 +1578,26 @@ GUI_TEST_CLASS_DEFINITION(test_0050){
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
 
-            QLabel* statusLabel = GTWidget::findExactWidget<QLabel*>(os, "statusLabel", dialog);
-            QLineEdit* locationEdit = GTWidget::findExactWidget<QLineEdit*>(os, "locationEdit", dialog);
+            QRadioButton* gbFormatLocation = dialog->findChild<QRadioButton*>("rbGenbankFormat");
+            CHECK_SET_ERR(gbFormatLocation != NULL, "radio button rbGenbankFormat not found");
+            GTRadioButton::click(os, gbFormatLocation);
 
+            QLineEdit* locationEdit = GTWidget::findExactWidget<QLineEdit*>(os, "leLocation", dialog);
             GTLineEdit::clear(os, locationEdit);
-            CHECK_SET_ERR(statusLabel->text() == "<b><font color=\"#A6392E\">Location is empty!</font></b>", QString("1 Unexpected status: %1").arg(statusLabel->text()));
+
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Invalid location"));
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 
             GTLineEdit::setText(os, locationEdit, "1..");
-            CHECK_SET_ERR(statusLabel->text() == "<b><font color=\"#A6392E\">Invalid location!</font><b>", QString("2 Unexpected status: %1").arg(statusLabel->text()));
 
-            GTLineEdit::setText(os, locationEdit, "1..0");
-            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "New annotation locations is out of sequence bounds!"));
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Invalid location"));
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 
+            GTLineEdit::setText(os, locationEdit, "1..0");
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Invalid location"));
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
         }
     };
 
@@ -1613,11 +1606,11 @@ GUI_TEST_CLASS_DEFINITION(test_0050){
     GTUtilsAnnotationsTreeView::selectItems(os, QList<QTreeWidgetItem*>() << GTUtilsAnnotationsTreeView::findItem(os, "CDS"));
 
     GTUtilsDialog::waitForDialog(os, new EditAnnotationFiller(os, new WrongNameChecker));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTKeyboardDriver::keyClick(Qt::Key_F2);
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new EditAnnotationFiller(os, new WrongDistanceChecker));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTKeyboardDriver::keyClick(Qt::Key_F2);
     GTGlobals::sleep(1000);
 }
 
@@ -1642,7 +1635,7 @@ GUI_TEST_CLASS_DEFINITION(test_0050_1){
     GTUtilsAnnotationsTreeView::selectItems(os, QList<QTreeWidgetItem*>() << GTUtilsAnnotationsTreeView::findItem(os, "CDS"));
 
     GTUtilsDialog::waitForDialog(os, new EditAnnotationFiller(os, new custom));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep(1000);
 
 }
@@ -1658,8 +1651,8 @@ GUI_TEST_CLASS_DEFINITION(test_0051){
 
     GTUtilsDialog::waitForDialog(os, new ColorDialogFiller(os, 255, 0, 0));
     GTUtilsAnnotHighlightingTreeView::click(os, "CDS");
-    GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(20, 0));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(20, 0));
+    GTMouseDriver::click();
     GTGlobals::sleep(1000);
 
     QColor final = GTUtilsAnnotHighlightingTreeView::getItemColor(os, "CDS");
@@ -1703,13 +1696,15 @@ GUI_TEST_CLASS_DEFINITION(test_0052_1){
     GTGlobals::sleep(1000);
     QImage image1 = GTWidget::getImage(os, det);
 
-    GTWidget::click(os, GTAction::button(os, "translation_action"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "translation_action"));
+    GTWidget::click(os, GTWidget::findWidget(os, "translationsMenuToolbarButton"));
     GTGlobals::sleep(2000);
     GTWidget::click(os, det);
     GTGlobals::sleep(1000);
     QImage image2 = GTWidget::getImage(os, det);
 
-    GTWidget::click(os, GTAction::button(os, "translation_action"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "translation_action"));
+    GTWidget::click(os, GTWidget::findWidget(os, "translationsMenuToolbarButton"));
     GTGlobals::sleep(2000);
     GTWidget::click(os, det);
     GTGlobals::sleep(1000);
@@ -1731,9 +1726,9 @@ GUI_TEST_CLASS_DEFINITION(test_0053){
 
 //    Add label with shift+left mouse
     QWidget* graphView = GTUtilsSequenceView::getGraphView(os);
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
     GTWidget::click(os, graphView, Qt::LeftButton, QPoint(50, 50));
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
 
     QList<QVariant> list = GTUtilsSequenceView::getLabelPositions(os, GTUtilsSequenceView::getGraphView(os));
     CHECK_SET_ERR(list.size() == 1, QString("unexpected number of labels: %1").arg(list.size()));
@@ -1749,9 +1744,9 @@ GUI_TEST_CLASS_DEFINITION(test_0054){
     GTGlobals::sleep(500);
 //    Add label with shift+left mouse
     GSequenceGraphView* graphView = GTUtilsSequenceView::getGraphView(os);
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
     GTWidget::click(os, graphView, Qt::LeftButton, QPoint(50, 50));
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTGlobals::sleep(1000);
 //    Use context menu {graph->Graph settings}
     GTUtilsDialog::waitForDialog(os, new GraphSettingsDialogFiller(os, -1, -1, 0, 0, 255, 0, 0));
@@ -1869,7 +1864,6 @@ GUI_TEST_CLASS_DEFINITION(test_0057){
 //    In dialog select any value
     int labelsNum = GTUtilsSequenceView::getGraphLabels(os, graphView).size();
     CHECK_SET_ERR(labelsNum == 81, QString("unexpected labels number: %1").arg(labelsNum))
-    GTUtilsProject::closeProject(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0058){
@@ -1941,8 +1935,8 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget* nameLabel = GTWidget::findWidget(os, "nameLabel");
-    GTMouseDriver::moveTo(os, GTWidget::getWidgetCenter(os, nameLabel) + QPoint(2*nameLabel->geometry().width()/3, 0));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTWidget::getWidgetCenter(os, nameLabel) + QPoint(2*nameLabel->geometry().width()/3, 0));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(2000);
 
     QWidget *overViewSe2 = GTWidget::findWidget(os, "overview_NC_001363", NULL, false);
@@ -1962,10 +1956,10 @@ GUI_TEST_CLASS_DEFINITION(test_0061_1) {
     GTFileDialog::openFile(os, dataDir + "samples/PDB", "1CF7.PDB");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Check that first sequence name is '1CF7 chain A sequence'
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1CF7 chain A sequence"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1CF7 chain A sequence"));
     //3. Check that first annotation table name is '1CF7 chain A annotation'
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1CF7 chain A annotation"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "1CF7 chain A annotation [1CF7.PDB]"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1CF7 chain A annotation"));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "1CF7 chain A annotation [1CF7.PDB]"));
     //4. Check that there is 'molecule_name' qualifier with value 'PROTEIN (TRANSCRIPTION FACTOR E2F-4)'  in 'chain_info' annotation for chain A
     QString moleculeName = GTUtilsAnnotationsTreeView::getQualifierValue(os, "molecule_name", GTUtilsAnnotationsTreeView::findItem(os, "chain_info"));
     CHECK_SET_ERR(moleculeName == "PROTEIN (TRANSCRIPTION FACTOR E2F-4)", QString("Incorrect molecule name is detected for chain A: %1").arg(moleculeName));
@@ -1986,8 +1980,8 @@ GUI_TEST_CLASS_DEFINITION(test_0061_2) {
     GTFileDialog::openFile(os, testDir + "_common_data/pdb", "1CRN_without_compnd_tag.PDB");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Check that first annotation table name is '1CRN chain A sequence'
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1CRN chain A annotation"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "1CRN chain A annotation [1CRN_without_compnd_tag.PDB]"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1CRN chain A annotation"));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "1CRN chain A annotation [1CRN_without_compnd_tag.PDB]"));
 
     //3. Check that there is 'chain_id' qualifier with value 'A'  in 'chain_info' annotation for chain A
     QString chainId = GTUtilsAnnotationsTreeView::getQualifierValue(os, "chain_id" ,"chain_info");
@@ -2119,26 +2113,26 @@ GUI_TEST_CLASS_DEFINITION(test_0065) {
 
     U2Region visibleRange = GTUtilsSequenceView::getVisibleRange(os);
     for (int i = 0; i < 5; i++) {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+        GTKeyboardDriver::keyClick(Qt::Key_Down);
     }
     CHECK_SET_ERR(visibleRange.startPos == GTUtilsSequenceView::getVisibleRange(os).startPos, "Visible range was changed");
 
     for (int i = 0; i < 5; i++) {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["up"]);
+        GTKeyboardDriver::keyClick(Qt::Key_Up);
     }
     CHECK_SET_ERR(visibleRange.startPos == GTUtilsSequenceView::getVisibleRange(os).startPos, "Visible range was changed");
 
     visibleRange = GTUtilsSequenceView::getVisibleRange(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pagedown"]);
+    GTKeyboardDriver::keyClick(Qt::Key_PageUp);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pagedown"]);
+    GTKeyboardDriver::keyClick(Qt::Key_PageDown);
     GTGlobals::sleep();
     CHECK_SET_ERR(visibleRange.startPos != GTUtilsSequenceView::getVisibleRange(os).startPos, "Visible range was not changed on page down");
     visibleRange = GTUtilsSequenceView::getVisibleRange(os);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pageup"]);
+    GTKeyboardDriver::keyClick(Qt::Key_PageUp);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pageup"]);
+    GTKeyboardDriver::keyClick(Qt::Key_PageUp);
     GTGlobals::sleep();
     CHECK_SET_ERR(visibleRange.startPos != GTUtilsSequenceView::getVisibleRange(os).startPos, "Visible range was not changed on page up");
 }
@@ -2176,15 +2170,16 @@ GUI_TEST_CLASS_DEFINITION(test_0066) {
     GTWidget::click(os, bottomSplitterHandle);
     QPoint p1 = GTMouseDriver::getMousePosition();
     QPoint p2 = QPoint(p1.x(), p1.y() + 100);
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, p2);
-    GTMouseDriver::release(os);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(p2);
+    GTMouseDriver::release();
     GTGlobals::sleep();
     CHECK_SET_ERR(visibleRange.startPos == GTUtilsSequenceView::getVisiableStart(os), "Start position of visible range was changed on enlarge at the bottom");
 
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, p1);
-    GTMouseDriver::release(os);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(p1);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
     CHECK_SET_ERR(visibleRange.startPos == GTUtilsSequenceView::getVisiableStart(os), "Start position of visible range was changed on reduce at the bottom");
 
     QWidget* topSplitterHandle = GTWidget::findWidget(os, "qt_splithandle_det_view_NC_004718");
@@ -2192,15 +2187,16 @@ GUI_TEST_CLASS_DEFINITION(test_0066) {
     GTWidget::click(os, topSplitterHandle);
     p1 = GTMouseDriver::getMousePosition();
     p2 = QPoint(p1.x(), p1.y() - 100);
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, p2);
-    GTMouseDriver::release(os);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(p2);
+    GTMouseDriver::release();
     GTGlobals::sleep();
     CHECK_SET_ERR(visibleRange.startPos == GTUtilsSequenceView::getVisiableStart(os), "Start position of visible range was changed on enlarge at the top");
 
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, p1);
-    GTMouseDriver::release(os);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(p1);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
     CHECK_SET_ERR(visibleRange.startPos == GTUtilsSequenceView::getVisiableStart(os), "Start position of visible range was changed on reduce at the top");
 }
 
@@ -2231,10 +2227,10 @@ GUI_TEST_CLASS_DEFINITION(test_0067) {
     CHECK_SET_ERR(scrollBar->minimum() == scrollBar->maximum(), "There is something to scroll");
 
     GTWidget::click(os, seqWgt);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTWidget::click(os, wrapButton);
     GTWidget::click(os, seqWgt);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
 
     ExportSequenceImage::Settings s(ExportSequenceImage::DetailsView, U2Region(1, 3));
     GTUtilsDialog::waitForDialog(os, new ExportSequenceImage(os, sandBoxDir + "seq_image_0067", s));
@@ -2265,7 +2261,8 @@ GUI_TEST_CLASS_DEFINITION(test_0068) {
     GTWidget::click(os, wrapButton);
     U2Region visibleRange = GTUtilsSequenceView::getVisibleRange(os);
 
-    GTWidget::click(os, GTAction::button(os, "translation_action"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "translation_action"));
+    GTWidget::click(os, GTWidget::findWidget(os, "translationsMenuToolbarButton"));
     CHECK_SET_ERR(visibleRange != GTUtilsSequenceView::getVisibleRange(os), "Visible range was not changed on translation show/hide");
 
     GTWidget::click(os, GTAction::button(os, "complement_action"));
@@ -2293,9 +2290,10 @@ GUI_TEST_CLASS_DEFINITION(test_0069) {
     QPoint p1 = GTMouseDriver::getMousePosition();
     QPoint p2(p1.x() + 300, p1.y() + 200);
 
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, p2);
-    GTMouseDriver::release(os);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(p2);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 
     CHECK_SET_ERR(!GTUtilsSequenceView::getSelection(os).isEmpty(), "Nothing is selected");
 }
@@ -2347,6 +2345,159 @@ GUI_TEST_CLASS_DEFINITION(test_0071) {
     CHECK_SET_ERR(p.size() != QSize() && p.size() !=  seqWgt->getDetView()->getDetViewRenderArea()->size(), "Exported image size is incorrect");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0075) {
+    //1. Open "data/samples/FASTA/human_T1.fa".
+    GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+
+    //2. Click the translations toolbar button.
+    GTWidget::click(os, GTWidget::findWidget(os, "translationsMenuToolbarButton"));
+
+    //Expected: the menu appears.
+    QMenu *menu = qobject_cast<QMenu*>(QApplication::activePopupWidget());
+    CHECK_SET_ERR(NULL != menu, "No menu");
+
+    //3. Click "Show/hide translations".
+    GTMenu::clickMenuItem(os, menu, "translation_action");
+
+    //Expected: the menu doesn't disappear.
+    CHECK_SET_ERR(NULL != QApplication::activePopupWidget(), "Menu disappeared 1");
+
+    //4. Click "Show all".
+    GTMenu::clickMenuItemByText(os, menu, QStringList() << "Show all");
+
+    //Expected: the menu doesn't disappear.
+    CHECK_SET_ERR(NULL != QApplication::activePopupWidget(), "Menu disappeared 2");
+
+    //5. Click somewhere else.
+    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
+
+    //Expected: the menu disappears.
+    CHECK_SET_ERR(NULL == QApplication::activePopupWidget(), "Menu is shown");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0076) {
+    // UGENE-3267: Specifying a region when searching for restriction sites
+    // 1. Open /_common_data/genbank/pBR322.gb
+    // 2. Search the defauult set of the restriction site: "EcoRI"
+    // Expected state: the EcoRI restriction site is found on the zero-end position
+    // 4. Remove the circular mark
+    // 5. Search for the restriction site again
+    // Expected state: restriciton sites were recalculated and the is no annotation on zero position
+
+    GTFileDialog::openFile(os, testDir + "_common_data/genbank/pBR322.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "Find restriction sites"));
+    GTUtilsDialog::waitForDialog(os, new FindEnzymesDialogFiller(os, QStringList() << "EcoRI"));
+    GTMenu::showContextMenu(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    QString region = GTUtilsAnnotationsTreeView::getAnnotationRegionString(os, "EcoRI");
+    CHECK_SET_ERR(region == "join(4359..4361,1..3)", QString("EcoRI region is incorrect: %1").arg(region));
+
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "SYNPBR322"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Mark as circular"));
+    GTMouseDriver::click(Qt::RightButton);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "Find restriction sites"));
+    GTUtilsDialog::waitForDialog(os, new FindEnzymesDialogFiller(os, QStringList() << "EcoRI"));
+    GTMenu::showContextMenu(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "EcoRI", GTGlobals::FindOptions(false)) == NULL, "EcoRI is unexpectedly found");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0077) {
+    // UGENE-3267: Specifying a region when searching for restriction sites
+    // 1. Open /_common_data/genbank/pBR322.gb
+    // 2. Open Find enzymes dialog
+    // 3. Set search region: 4200..10 and find restriction sites
+    // Expected state: there is only one result
+    // 4. Open Find enzymes dialog
+    // 6. Set search region: 3900..900 and exclude region 4300..10, find restriction sites
+    // Expected state: no annotations on zero position
+
+    GTFileDialog::openFile(os, testDir + "_common_data/genbank/pBR322.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    const QStringList defaultEnzymes = QStringList() << "ClaI" << "DraI" << "EcoRI";
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "Find restriction sites"));
+    GTUtilsDialog::waitForDialog(os, new FindEnzymesDialogFiller(os, defaultEnzymes, 4200, 10));
+    GTMenu::showContextMenu(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "ClaI", GTGlobals::FindOptions(false)) == NULL, "ClaI is unexpectedly found");
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "DraI", GTGlobals::FindOptions(false)) == NULL, "DraI is unexpectedly found");
+    QString region = GTUtilsAnnotationsTreeView::getAnnotationRegionString(os, "EcoRI");
+    CHECK_SET_ERR(region == "join(4359..4361,1..3)", QString("EcoRI region is incorrect: %1").arg(region));
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "Find restriction sites"));
+    GTUtilsDialog::waitForDialog(os, new FindEnzymesDialogFiller(os, defaultEnzymes, 3900, 300, 4300, 10));
+    GTMenu::showContextMenu(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "EcoRI", GTGlobals::FindOptions(false)) == NULL, "EcoRI is unexpectedly found");
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "ClaI") != NULL, "ClaI is unexpectedly not found");
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "DraI") != NULL, "DraI is unexpectedly not found");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0078) {
+    // UGENE-3267: Specifying a region when searching for restriction sites
+    // 1. Open /samples/Genbank/murine.gb
+    // 2. Open Find enzymes dialog
+    // 3. Set start search position to 5000, end position to 1000
+    // Expected state: the line edits are red
+    // 4. Click Ok
+    // Expected state: message box appears
+    // 5. Set start search postion back to 1
+    // 6. Check the exclude checkbox
+    // 7. Click Ok
+    // Expected state: message box appears
+
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    class RegionSelectorChecker : public Filler {
+    public:
+        RegionSelectorChecker(HI::GUITestOpStatus &os)
+            : Filler(os, "FindEnzymesDialog") {}
+
+        void run() {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "activeModalWidget is NULL");
+
+            QWidget* regionSelector = GTWidget::findWidget(os, "region_selector_with_excluded");
+            CHECK_SET_ERR(regionSelector != NULL, "region_selector_with_excluded not found");
+
+            QLineEdit* start = GTWidget::findExactWidget<QLineEdit*>(os, "startLineEdit", regionSelector);
+            CHECK_SET_ERR(start != NULL, "startLineEdit of 'Search In' region not found");
+            GTLineEdit::setText(os, start, "5000");
+
+            QLineEdit* end = GTWidget::findExactWidget<QLineEdit*>(os, "endLineEdit", regionSelector);
+            CHECK_SET_ERR(end != NULL, "endLineEdit of 'Search In' region not found");
+            GTLineEdit::setText(os, end, "1000");
+
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+
+            GTLineEdit::setText(os, start, "1");
+
+            QCheckBox* exclude = GTWidget::findExactWidget<QCheckBox*>(os, "excludeCheckBox");
+            GTCheckBox::setChecked(os, exclude);
+
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_ANALYSE" << "Find restriction sites"));
+    GTUtilsDialog::waitForDialog(os, new RegionSelectorChecker(os));
+    GTMenu::showContextMenu(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
+}
+
 } // namespace GUITest_common_scenarios_sequence_view
 
 } // namespace U2
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 5f43e17..cf09f2d 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
@@ -106,7 +106,10 @@ GUI_TEST_CLASS_DECLARATION(test_0068)
 GUI_TEST_CLASS_DECLARATION(test_0069)
 GUI_TEST_CLASS_DECLARATION(test_0070)
 GUI_TEST_CLASS_DECLARATION(test_0071)
-
+GUI_TEST_CLASS_DECLARATION(test_0075)
+GUI_TEST_CLASS_DECLARATION(test_0076)
+GUI_TEST_CLASS_DECLARATION(test_0077)
+GUI_TEST_CLASS_DECLARATION(test_0078)
 
 #undef GUI_TEST_SUITE
 }
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 9e238a4..0f59a5c 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
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <QApplication>
 #include <QTreeWidgetItem>
 #include <QListWidget>
 
@@ -730,8 +731,8 @@ GUI_TEST_CLASS_DEFINITION(proj_test_0002) {
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__ADD_MENU << ACTION_PROJECT__CREATE_FOLDER));
     GTUtilsDialog::waitForDialog(os, new AddFolderDialogFiller(os, "pt0002_dir", GTGlobals::UseMouse));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "proj_test_0002"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "proj_test_0002"));
+    GTMouseDriver::click(Qt::RightButton);
 
     CHECK_SET_ERR(1 == model->rowCount(parentDir), "Invalid child item count");
     CHECK_SET_ERR(!lt.hasError(), "errors in log");
@@ -753,8 +754,8 @@ GUI_TEST_CLASS_DEFINITION(proj_test_0003) {
     CHECK_OP(os, );
 
     QModelIndex dirItem = GTUtilsProjectTreeView::findIndex(os, "proj_test_0003");
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "proj_test_0003"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "proj_test_0003"));
+    GTMouseDriver::doubleClick();
 
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "An invalid project tree view");
@@ -773,11 +774,11 @@ GUI_TEST_CLASS_DEFINITION(proj_test_0003) {
     QString subfolderName = subfolderItem.data().toString();
     CHECK_SET_ERR("pt0003_new_name" == subfolderName, "Renaming failed");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "pt0003_new_name"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "pt0003_new_name"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 
     subfolderItem = model->index(0, 0, dirItem);
     subfolderName = subfolderItem.data().toString();
@@ -880,8 +881,8 @@ GUI_TEST_CLASS_DEFINITION(proj_test_0006) {
     { // drag'n'drop
         const QModelIndex dirItem = GTUtilsProjectTreeView::findIndex(os, "proj_test_0006");
         const QModelIndex dirItem2 = GTUtilsProjectTreeView::findIndex(os, "pt0006_dir2");
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, dirItem2));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, dirItem2));
+        GTMouseDriver::click();
 
         GTUtilsProjectTreeView::dragAndDrop(os, dirItem2, dirItem);
     }
@@ -2422,22 +2423,22 @@ GUI_TEST_CLASS_DEFINITION(del_test_0001) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "dt0001_human_T1"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "dt0001_human_T1"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(3000);
     GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
     CHECK_OP(os, );
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__REMOVE_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(3000);
     QWidget *seqView = GTWidget::findWidget(os, "ADV_single_sequence_widget_0", NULL, GTGlobals::FindOptions(false));
     CHECK_SET_ERR(NULL == seqView, "Sequence view is not closed");
 
     const QModelIndex rbItem = GTUtilsProjectTreeView::findIndex(os, "Recycle bin");
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, rbItem));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, rbItem));
+    GTMouseDriver::doubleClick();
     GTUtilsProjectTreeView::findIndex(os, "dt0001_human_T1", GTGlobals::FindOptions(false));
     const QModelIndex objItem = GTUtilsProjectTreeView::findIndex(os, "dt0001_human_T1");
     CHECK_SET_ERR(rbItem == objItem.parent(), "Object is not in Recycle bin");
@@ -2461,21 +2462,21 @@ GUI_TEST_CLASS_DEFINITION(del_test_0002) {
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
     QAbstractItemModel *model = treeView->model();
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "dt0002_human_T1"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "dt0002_human_T1"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(3000);
     GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
     CHECK_OP(os, );
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "dt0002_COI"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "dt0002_COI"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(3000);
     GTWidget::findWidget(os, "msa_editor_dt0002_COI");
     CHECK_OP(os, );
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "dt0002_dir"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "dt0002_dir"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__REMOVE_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(3000);
     QWidget *seqView = GTWidget::findWidget(os, "ADV_single_sequence_widget_0", NULL, GTGlobals::FindOptions(false));
@@ -2484,7 +2485,7 @@ GUI_TEST_CLASS_DEFINITION(del_test_0002) {
     CHECK_SET_ERR(NULL == msaView, "MSA Editor is not closed");
 
     const QModelIndex rbItem = GTUtilsProjectTreeView::findIndex(os, "Recycle bin");
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, rbItem));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, rbItem));
     const QModelIndex dirItem = GTUtilsProjectTreeView::findIndex(os, "dt0002_dir");
     CHECK_SET_ERR(rbItem == dirItem.parent(), "Folder is not in Recycle bin");
     CHECK_SET_ERR(0 == model->rowCount(dirItem), "Objects of a folder in recycle bin are shown");
@@ -2505,19 +2506,19 @@ GUI_TEST_CLASS_DEFINITION(del_test_0003) {
     QAbstractItemModel *model = treeView->model();
 
     const QModelIndex rbItem = GTUtilsProjectTreeView::findIndex(os, "Recycle bin");
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "dt0003_human_T1"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "dt0003_human_T1"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(3000);
     QWidget *seqView = GTWidget::findWidget(os, "ADV_single_sequence_widget_0", NULL, GTGlobals::FindOptions(false));
     CHECK_SET_ERR(NULL == seqView, "Sequence view is opened");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, rbItem));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, rbItem));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"empty_rb"));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(3000);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, rbItem));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, rbItem));
     CHECK_SET_ERR(0 == model->rowCount(rbItem), "Recycle bin is not empty");
     CHECK_SET_ERR(!lt.hasError(), "errors in log");
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -2536,13 +2537,13 @@ GUI_TEST_CLASS_DEFINITION(export_test_0001) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "et0001_sequence"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "et0001_sequence"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE));
     GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, testDir + "_common_data/scenarios/sandbox/", "et0001_export.fasta"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(3000);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "et0001_export.fasta"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "et0001_export.fasta"));
     GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
     CHECK_OP(os, );
     CHECK_SET_ERR(!lt.hasError(), "errors in log");
@@ -2561,10 +2562,10 @@ GUI_TEST_CLASS_DEFINITION(export_test_0002) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "et0002_features"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "et0002_features"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "ep_exportAnnotations2CSV"));
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(testDir + "_common_data/scenarios/sandbox/et0002_features.gb", ExportAnnotationsFiller::genbank, os));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(5000);
 
     bool exported = QFileInfo(testDir + "_common_data/scenarios/sandbox/et0002_features.gb").exists();
@@ -2585,11 +2586,11 @@ GUI_TEST_CLASS_DEFINITION(export_test_0003) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "et0003_alignment"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "et0003_alignment"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_OBJECT));
     GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, testDir + "_common_data/scenarios/sandbox/", "et0003_alignment.aln",
         ExportDocumentDialogFiller::CLUSTALW, false, true));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(5000);
 
     GTWidget::findWidget(os, "msa_editor_et0003_alignment");
@@ -2610,12 +2611,12 @@ GUI_TEST_CLASS_DEFINITION(export_test_0004) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "et0004_assembly"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "et0004_assembly"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_OBJECT));
     GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, testDir + "_common_data/scenarios/sandbox/", "et0004_assembly.bam",
         ExportDocumentDialogFiller::BAM, false, true));
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, testDir + "_common_data/scenarios/sandbox/et0004_assembly.bam.ugenedb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(40000);
 
     GTWidget::findWidget(os, "assembly_browser_et0004_assembly.bam [as] et0004_assembly");
@@ -2636,11 +2637,11 @@ GUI_TEST_CLASS_DEFINITION(export_test_0005) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "et0005_variations"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "et0005_variations"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_OBJECT));
     GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, testDir + "_common_data/scenarios/sandbox/", "et0005_variations.vcf",
         ExportDocumentDialogFiller::VCF, false, true));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(5000);
 
     bool exported = QFileInfo(testDir + "_common_data/scenarios/sandbox/et0005_variations.vcf").exists();
@@ -2661,12 +2662,12 @@ GUI_TEST_CLASS_DEFINITION(export_test_0006) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "et0006_text"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "et0006_text"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_OBJECT));
     GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, testDir + "_common_data/scenarios/sandbox/", "et0006_text.txt",
         ExportDocumentDialogFiller::TEXT, false, true));
     GTUtilsDialog::waitForDialog(os, new SelectDocumentFormatDialogFiller(os));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(5000);
 
     GTWidget::findWidget(os, "et0006_text [t] et0006_text");
@@ -2687,11 +2688,11 @@ GUI_TEST_CLASS_DEFINITION(export_test_0007) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "et0007_chroma"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "et0007_chroma"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CHROMATOGRAM));
     GTUtilsDialog::waitForDialog(os, new ExportChromatogramFiller(os, testDir + "_common_data/scenarios/sandbox/", "et0007_chroma.scf",
         ExportChromatogramFiller::SCF, false, false, true));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(5000);
 
     GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
@@ -2712,11 +2713,11 @@ GUI_TEST_CLASS_DEFINITION(export_test_0008) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "et0008_tree"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "et0008_tree"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_OBJECT));
     GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, testDir + "_common_data/scenarios/sandbox/", "et0008_tree.nwk",
         ExportDocumentDialogFiller::NWK, false, true));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(5000);
 
     GTWidget::findWidget(os, "et0008_tree [tr] Tree");
@@ -2737,10 +2738,10 @@ GUI_TEST_CLASS_DEFINITION(export_test_0009) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "long name with bad symbols : /?/=+\\|*"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "long name with bad symbols : /?/=+\\|*"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE));
     GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, testDir + "_common_data/scenarios/sandbox/", "et0009_export.fasta"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(10000);
 
     QFileInfo f(ExportSelectedRegionFiller::defaultExportPath);
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 b6016ff..95ca914 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
@@ -85,9 +85,9 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
         const QString expectedFileName = "P1_S_" + QString::number(i) + "_test]" + alignmentFileExtension;
         GTUtilsDocument::checkDocument(os, expectedFileName);
 
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, expectedFileName.left(expectedFileName.length()
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, expectedFileName.left(expectedFileName.length()
             - alignmentFileExtension.length())));
-        GTMouseDriver::doubleClick(os);
+        GTMouseDriver::doubleClick();
         GTGlobals::sleep();
 
         const QStringList sequencesNameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
@@ -107,7 +107,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
             assert(0);
         }
         GTUtilsMdi::click(os, GTGlobals::Close);
-        GTMouseDriver::click(os);
+        GTMouseDriver::click();
     }
 }
 
@@ -139,10 +139,10 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
 // 4. Close sequence view, then reopen it
     GTUtilsMdi::click(os, GTGlobals::Close);
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "S"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "S"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 
 // 5. Check names and count of annotations
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 1db48b8..4f3f924 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
@@ -36,6 +36,7 @@
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 
 #include "GTTestsStartPage.h"
+#include "GTUtilsLog.h"
 #include "GTUtilsTaskTreeView.h"
 
 namespace U2 {
@@ -45,10 +46,15 @@ using namespace HI;
 GUI_TEST_CLASS_DEFINITION(test_0001){
 //    Start UGENE
 //    Press "Open file(s)" button on start page
+    GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/CLUSTALW/COI.aln"));
     GTUtilsStartPage::clickButton(os, GTUtilsStartPage::OpenFile);
 //    Expected state: File dialog is opened.
     GTGlobals::sleep(500);
+    bool hasWindowsWarning = l.checkMessage("ShellExecute '#' failed");
+    bool hasUnixWarning = l.checkMessage("gvfs-open: #: error opening location");
+    CHECK_SET_ERR(!hasWindowsWarning, "Windows warning");
+    CHECK_SET_ERR(!hasUnixWarning, "Unix warning");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0002){
@@ -80,7 +86,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
 //    Expected state: File added to "Resent files" list
 //    Remove file from project
     GTUtilsProjectTreeView::click(os, "COI.aln");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 //    Go to Start page
     GTUtilsStartPage::openStartPage(os);
 //    Click file name in "Resent files" list
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 39ce3f9..ebdac30 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
@@ -192,8 +192,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001_4) {
     QWidget* activeMDIWindow = GTUtilsMdi::activeWindow(os, false);
     CHECK_SET_ERR(activeMDIWindow == NULL, "there is active MDI window");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "se2"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se2"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     toolbar = GTWidget::findWidget(os, "views_tool_bar_se2");
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 599b4fe..4415f8b 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
@@ -25,6 +25,19 @@
 #include <QMainWindow>
 #include <QRgb>
 
+#include <GTGlobals.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/GTMenu.h>
+#include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <system/GTFile.h>
+#include <utils/GTKeyboardUtils.h>
+
 #include <U2Core/AppContext.h>
 
 #include <U2View/GraphicsButtonItem.h>
@@ -39,18 +52,6 @@
 #include "GTUtilsPhyTree.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "primitives/GTAction.h"
-#include <primitives/GTCheckBox.h>
-#include "system/GTFile.h"
-#include <base_dialogs/GTFileDialog.h>
-#include "GTGlobals.h"
-#include <drivers/GTKeyboardDriver.h>
-#include "utils/GTKeyboardUtils.h"
-#include "primitives/GTMenu.h"
-#include <drivers/GTMouseDriver.h>
-#include <primitives/GTWidget.h>
-#include <base_dialogs/MessageBoxFiller.h>
-#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h"
@@ -165,9 +166,9 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
     GTGlobals::sleep();
 
 //4. Remove document "COI.nwk" from project view.
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"COI.nwk"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"COI.nwk"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTGlobals::sleep(500);
 
@@ -176,8 +177,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
 
 //5. Double click on COI object.
 //Expected state: MSA editor view window opens
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 
 //6. Click on "Build tree" button on toolbar
@@ -197,53 +198,57 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1){
 //1. Open file samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os,dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(500);
+
 //2. Click on "Build tree" button on toolbar "Build Tree"
 //Expected state: "Create Philogenetic Tree" dialog appears
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk"));
 
     //DIFFERENCE: Context menu is used for building tree
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_TREES<<"Build Tree"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_TREES << "Build Tree"));
 
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
-    GTGlobals::sleep(500);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //3. Set save path to _common_data/scenarios/sandbox/COI.nwk Click  OK button
 //Expected state: philogenetic tree appears
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
-    CHECK_SET_ERR(treeView!=NULL,"TreeView not found")
+    CHECK_SET_ERR(treeView != NULL,"TreeView not found")
     GTGlobals::sleep();
+
 //4. Remove document "COI.nwk" from project view.
     //GTUtilsDialog::waitForDialog(os,new MessageBoxDialogFiller(os,QMessageBox::No));
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"COI.nwk"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.nwk"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTGlobals::sleep(500);
 
-    QWidget* w = GTWidget::findWidget(os, "treeView",NULL,GTGlobals::FindOptions(false));
-    CHECK_SET_ERR(w==0, "treeView not deleted")
+    QWidget* w = GTWidget::findWidget(os, "treeView", NULL, GTGlobals::FindOptions(false));
+    CHECK_SET_ERR(w == 0, "treeView not deleted")
 
-    GTUtilsProjectTreeView::findIndex(os,"COI.nwk",GTGlobals::FindOptions(false));
+    GTUtilsProjectTreeView::findIndex(os, "COI.nwk", GTGlobals::FindOptions(false));
 //Expected state: document "COI.nwk" not presents at project tree, tree editor view window closes
 
 //5. Double click on COI object.
 //Expected state: MSA editor view window opens
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"COI.aln"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
     GTGlobals::sleep(500);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
+
 //6. Click on "Build tree" button on toolbar
 //Expected state: "Create Philogenetic Tree" dialog appears
-    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os,testDir + "_common_data/scenarios/sandbox/COI.nwk"));
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk"));
     //DIFFERENCE: Context menu is used for building tree
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<MSAE_MENU_TREES<<"Build Tree"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_TREES << "Build Tree"));
 
-    GTGlobals::sleep(500);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
+
 //7. Click  OK button
 //Expected state: philogenetic tree appears
     GTGlobals::sleep(500);
     QWidget* w1 = GTWidget::findWidget(os, "treeView");
-    CHECK_SET_ERR(w1!=NULL,"treeView not found");
+    CHECK_SET_ERR(w1 != NULL,"treeView not found");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0002_2) {
@@ -268,9 +273,9 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 
 //4. Remove document "COI.nwk" from project view.
     //GTUtilsDialog::waitForDialog(os,new MessageBoxDialogFiller(os,QMessageBox::No));
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"COI.nwk"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"COI.nwk"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTGlobals::sleep(500);
 
@@ -282,8 +287,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
 
 //5. Double click on COI object.
 //Expected state: MSA editor view window opens
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 
 //6. Click on "Build tree" button on toolbar
@@ -300,21 +305,20 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     CHECK_SET_ERR(w1 != NULL,"treeView not found");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0003){
+GUI_TEST_CLASS_DEFINITION(test_0003) {
 //    Building tree with specific parameters
 //    1. Open file samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os,dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTLogTracer l;
-    GTGlobals::sleep(500);
+
 //    2. Click on "Build tree" button on toolbar
 //    Expected state: "Create Philogenetic Tree" dialog appears
 
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk",2,52));
 
-    QAbstractButton *tree= GTAction::button(os,"Build Tree");
-    GTWidget::click(os,tree);
-    GTGlobals::sleep(500);
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    3. Fill next fields in dialog:
 //    {Distance matrix model:} jukes-cantor
@@ -372,29 +376,32 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 //    Expected state: distance labels are not shown
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0005){
+GUI_TEST_CLASS_DEFINITION(test_0005) {
 //Align with muscle, then build tree
 //1. Open file samples/CLUSTALW/COI.aln
     GTFileDialog::openFile(os,dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(500);
+
 //2. Do menu {Actions->Align->Align With Muscle}
 //Expected state: "Align with muscle" dialog appears
-    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk"));
+
+//3. Click "Align" button
     GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os));
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Align" << "Align with MUSCLE...", GTGlobals::UseMouse);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-//3. Click "Align" button
 //4. Click on "Build tree" button on toolbar
-    QAbstractButton *tree= GTAction::button(os,"Build Tree");
-    GTWidget::click(os,tree);
-    GTGlobals::sleep(1000);
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/COI.nwk"));
+    GTWidget::click(os, GTAction::button(os,"Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //Expected state: "Create Philogenetic Tree" dialog appears
 //5. Set save path to _common_data/scenarios/sandbox/COI.nwk Click  OK button
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
-    CHECK_SET_ERR(treeView!=NULL,"TreeView not found");
+    CHECK_SET_ERR(treeView != NULL,"TreeView not found");
 //Expected state: philogenetic tree appears
 }
+
 int getCoord(HI::GUITestOpStatus &os, QGraphicsSimpleTextItem *node){
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
     QPointF sceneCoord = node->mapToScene(node->boundingRect().bottomLeft());
@@ -653,25 +660,25 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
     GTGlobals::sleep(500);
 //2. Create new bookmark for the file
     QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "COI [tr] Tree");
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseMouse));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keySequence(os, "start bookmark");
+    GTKeyboardDriver::keySequence("start bookmark");
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep(500);
 
     GTUtilsMdi::click(os, GTGlobals::Close);
 
     p = GTUtilsBookmarksTreeView::getItemCenter(os, "start bookmark");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(500);
 
     QWidget* treeView = GTWidget::findWidget(os,"treeView");
@@ -715,9 +722,9 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 
     GTUtilsDialog::waitForDialog(os, new BranchSettingsDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Branch Settings"));
-    GTMouseDriver::moveTo(os, globalCoord);
-    GTMouseDriver::click(os);
-    GTMouseDriver::click(os,Qt::RightButton);
+    GTMouseDriver::moveTo(globalCoord);
+    GTMouseDriver::click();
+    GTMouseDriver::click(Qt::RightButton);
 
 
     globalCoord.setX(globalCoord.x()-10);
@@ -755,9 +762,9 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 
 //    2. Do context menu {Collapse} for any node
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Collapse"));
-    GTMouseDriver::moveTo(os, globalCoord);
-    GTMouseDriver::click(os);
-    GTMouseDriver::click(os,Qt::RightButton);
+    GTMouseDriver::moveTo(globalCoord);
+    GTMouseDriver::click();
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(500);
 
@@ -777,8 +784,8 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 
 //    3. Do context menu {Expand} for same
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Collapse"));
-    GTMouseDriver::moveTo(os, globalCoord);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(globalCoord);
+    GTMouseDriver::click(Qt::RightButton);
 
     foreach (QGraphicsSimpleTextItem *item, branchList) {
         CHECK_SET_ERR(item->isVisible(), item->text() + " is not visible");
@@ -809,9 +816,9 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1) {
     QPoint globalCoord = GTUtilsPhyTree::getGlobalCoord(os, nodeList.last());
 
 //    2. Do context menu {Collapse} for any node
-    GTMouseDriver::moveTo(os, globalCoord);
+    GTMouseDriver::moveTo(globalCoord);
     GTGlobals::sleep(1000);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 
     QList<QGraphicsSimpleTextItem *> branchList;
@@ -829,9 +836,9 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1) {
 //    Expected state: this node's branches has dissapered
 
 //    3. Do context menu {Expand} for same
-    GTMouseDriver::moveTo(os, globalCoord);
+    GTMouseDriver::moveTo(globalCoord);
     GTGlobals::sleep(1000);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 
     foreach (QGraphicsSimpleTextItem *item, branchList) {
@@ -864,9 +871,9 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2) {
     QPoint globalCoord = GTUtilsPhyTree::getGlobalCoord(os, node);
 
 //    2. Do context menu {Collapse} for any node
-    GTMouseDriver::moveTo(os, globalCoord);
+    GTMouseDriver::moveTo(globalCoord);
     GTGlobals::sleep(1000);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 
     QList<QGraphicsSimpleTextItem *> branchList;
@@ -887,9 +894,9 @@ GUI_TEST_CLASS_DEFINITION(test_0011_2) {
     globalCoord = GTUtilsPhyTree::getGlobalCoord(os, node);
 
 //    3. Do context menu {Expand} for same
-    GTMouseDriver::moveTo(os, globalCoord);
+    GTMouseDriver::moveTo(globalCoord);
     GTGlobals::sleep(1000);
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 
     foreach (QGraphicsSimpleTextItem *item, branchList) {
@@ -950,9 +957,9 @@ GUI_TEST_CLASS_DEFINITION(test_0012){
     QPoint globalCoord = treeView->mapToGlobal(viewCord);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Swap Siblings"));
-    GTMouseDriver::moveTo(os,globalCoord);
-    GTMouseDriver::click(os);
-    GTMouseDriver::click(os,Qt::RightButton);
+    GTMouseDriver::moveTo(globalCoord);
+    GTMouseDriver::click();
+    GTMouseDriver::click(Qt::RightButton);
 
     qreal finalW=0;
     foreach(QGraphicsItem * item, lineList){
@@ -995,10 +1002,10 @@ GUI_TEST_CLASS_DEFINITION( test_0023 ) {
 
     // 5. Close the tree view
     GTUtilsMdi::click( os, GTGlobals::Close );
-    GTMouseDriver::click( os );
+    GTMouseDriver::click();
 
-    GTMouseDriver::moveTo( os, GTUtilsProjectTreeView::getItemCenter( os, "COI" ) );
-    GTMouseDriver::doubleClick( os );
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter( os, "COI" ) );
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep( 1000 );
 
     optionsPanelWidget = GTWidget::findWidget( os, "OP_MSA_ADD_TREE_WIDGET" );
@@ -1122,16 +1129,16 @@ GUI_TEST_CLASS_DEFINITION( test_0025 ) {
     CHECK_SET_ERR( !nodes.isEmpty(), "No nodes found");
 
     QPoint p = GTUtilsPhyTree::getGlobalCoord(os, nodes.first());
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
 
     CHECK_SET_ERR( !collapse->isEnabled(), "Collapse action is unexpectedly enabled");
     CHECK_SET_ERR( swap->isEnabled(), "Swap action is unexpectedly disnabled");
     CHECK_SET_ERR( !reroot->isEnabled(), "Reroot action is unexpectedly enabled");
 
     p = GTUtilsPhyTree::getGlobalCoord(os, nodes[5]);
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
 
     CHECK_SET_ERR( collapse->isEnabled(), "Collapse action is unexpectedly disabled");
     CHECK_SET_ERR( swap->isEnabled(), "Swap action is unexpectedly disabled");
@@ -1141,13 +1148,13 @@ GUI_TEST_CLASS_DEFINITION( test_0025 ) {
     CHECK_SET_ERR( collapse->text() == "Expand", "No Expand action");
 
     p = GTUtilsPhyTree::getGlobalCoord(os, nodes[3]);
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
     CHECK_SET_ERR( collapse->text() == "Collapse", "No Collapse action");
 
     p = GTUtilsPhyTree::getGlobalCoord(os, nodes[5]);
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
     CHECK_SET_ERR( collapse->text() == "Expand", "No Expand action");
 
     GTWidget::click(os, collapse);
@@ -1171,7 +1178,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026) {
 
 //    3. Do the context menu command "Reroot tree".
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os,  QStringList() << "Reroot tree"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -1203,7 +1210,7 @@ GUI_TEST_CLASS_DEFINITION(test_0027) {
 
 //    3. Do the context menu command "Swap siblings".
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os,  QStringList() << "Swap Siblings"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -1213,17 +1220,17 @@ GUI_TEST_CLASS_DEFINITION(test_0027) {
     CHECK_SET_ERR(distances == distancesNew, "Tree has incorrect distances");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0028){
+GUI_TEST_CLASS_DEFINITION(test_0028) {
     //    Swap siblings action.
 
     //    1. Open the file "data/samples/CLUSTALW/COI.aln"
     //    Expected state: a MSAEditor appears.
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/2298.nwk", 0, 0, true));
-    QAbstractButton *tree = GTAction::button(os, "Build Tree");
-    GTWidget::click(os, tree);
-    GTGlobals::sleep();
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //    2. Select the parent node of "Bicolorana_bicolor_EF540830" and "Roeseliana_roeseli".
     QList<qreal> distances = GTUtilsPhyTree::getOrderedRectangularBranchesDistances(os);
@@ -1238,7 +1245,7 @@ GUI_TEST_CLASS_DEFINITION(test_0028){
 
     //    3. Do the context menu command "Swap siblings".
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Swap Siblings"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -1270,7 +1277,7 @@ GUI_TEST_CLASS_DEFINITION(test_0029){
 
     //    3. Do the context menu command "Reroot tree".
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Reroot tree"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
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 b8fd93b..f2ddd62 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
@@ -57,7 +57,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){//DIFFERENCE: lock document is checked
 //2. Insert seversl spaces somewhere
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,0));
     for(int i=0; i<6; i++){
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Space);
         GTGlobals::sleep(200);
     }
 
@@ -69,18 +69,18 @@ GUI_TEST_CLASS_DEFINITION(test_0001){//DIFFERENCE: lock document is checked
         GTGlobals::sleep(200);
     }
 //4. lock document
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"COI.aln"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<ACTION_PROJECT__EDIT_MENU<<ACTION_DOCUMENT__LOCK));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"COI.aln"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList() << ACTION_DOCUMENT__LOCK));
+    GTMouseDriver::click(Qt::RightButton);
 
 //Expected state: Undo and redo buttons are disabled
     CHECK_SET_ERR(!undo->isEnabled(),"Undo button is enebled after locking document");
     CHECK_SET_ERR(!redo->isEnabled(),"Redo button is enebled after locking document");
 
 //5. Unlock document
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os,"COI.aln"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<ACTION_PROJECT__EDIT_MENU<<ACTION_DOCUMENT__UNLOCK));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"COI.aln"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList() << ACTION_DOCUMENT__UNLOCK));
+    GTMouseDriver::click(Qt::RightButton);
 
 //Expected state: undo and redo buttons are enebled and work properly
     CHECK_SET_ERR(undo->isEnabled(),"Undo button is disabled after unlocking document");
@@ -90,7 +90,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){//DIFFERENCE: lock document is checked
     GTWidget::click(os,GTUtilsMdi::activeWindow(os));
     GTWidget::click(os, undo);
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(9,0));
-    GTKeyboardDriver::keyClick(os,'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick('c',Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText=="--TAAGACTT","Undo works wrong. Found text is: " + clipboardText);
@@ -101,7 +101,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){//DIFFERENCE: lock document is checked
     GTGlobals::sleep(200);
     GTWidget::click(os, redo);
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(9,0));
-    GTKeyboardDriver::keyClick(os,'c',GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick('c',Qt::ControlModifier);
     GTGlobals::sleep(500);
     clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText=="----TAAGAC", "Redo works wrong. Found text is: " + clipboardText);
@@ -116,14 +116,14 @@ GUI_TEST_CLASS_DEFINITION(test_0002){//DIFFERENCE: delete sequence is checked
 //2. Delete 4-th sequence
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Roeseliana_roeseli", "Roeseliana_roeseli"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
 // Expected state: sequence deleted
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Montana_montana", "Montana_montana"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(500);
 
 //3. undo deletion
@@ -135,7 +135,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){//DIFFERENCE: delete sequence is checked
 //Expected state: deletion undone
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Roeseliana_roeseli", "Roeseliana_roeseli"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(500);
 
 //4. Redo delition
@@ -144,7 +144,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002){//DIFFERENCE: delete sequence is checked
 //Expected state: delition is redone
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,3));
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "Montana_montana", "Montana_montana"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(500);
 }
 
@@ -163,7 +163,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){//DIFFERENCE: add sequence is checked
     CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getNameList(os).contains("raw"), "raw is not added");
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,18));
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "raw", "raw"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
 
 //3. undo adding
     QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
@@ -182,7 +182,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){//DIFFERENCE: add sequence is checked
     CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getNameList(os).contains("raw"), "Adding raw is not redone");
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-10,18));
     GTUtilsDialog::waitForDialog(os, new RenameSequenceFiller(os, "raw", "raw"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0004){//DIFFERENCE: add sequence is checked
@@ -195,11 +195,11 @@ GUI_TEST_CLASS_DEFINITION(test_0004){//DIFFERENCE: add sequence is checked
     QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
 
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,0));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTWidget::click(os, undo);
 
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,0));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTWidget::click(os, undo);
 
     GTWidget::click(os, redo);
@@ -215,11 +215,11 @@ GUI_TEST_CLASS_DEFINITION(test_0005){//undo remove selection
 
     //remove selection
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(3,1));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     //Expected state: selection removed
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(3,1));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString clipdoardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipdoardText=="ACTT\nCTTA", QString("Expected ACTT\nCTTA, found: %1").arg(clipdoardText));
@@ -231,7 +231,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){//undo remove selection
     //Expected state: delition undone
     GTWidget::click(os,GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(3,1));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     clipdoardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipdoardText=="TAAG\nTAAG", QString("Expected TAAG\nTAAG, found: %1").arg(clipdoardText));
@@ -243,7 +243,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005){//undo remove selection
     //Expected state: delition redone
     GTWidget::click(os,GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(3,1));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     clipdoardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipdoardText=="ACTT\nCTTA", QString("Expected ACTT\nCTTA, found: %1").arg(clipdoardText));
@@ -259,11 +259,11 @@ GUI_TEST_CLASS_DEFINITION(test_0006){//undo replace_selected_rows_with_reverse-c
 // 2. Select first sequence 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, QPoint( 0, 0 ), QPoint( -1, 2 ) );
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: sequence changed from TTG -> CAA
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardText = GTClipboard::text(os);
@@ -283,7 +283,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006){//undo replace_selected_rows_with_reverse-c
 
 // Expected state: sequence changed from CAA -> TTG
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     clipboardText = GTClipboard::text(os);
@@ -304,7 +304,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006){//undo replace_selected_rows_with_reverse-c
 
 // Expected state: sequence changed from TTG -> CAA
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     clipboardText = GTClipboard::text(os);
@@ -329,11 +329,11 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1){//undo replace_selected_rows_with_reverse
 // 2. Select first sequence 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"));
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( -1, 2 ) );
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: sequence changed from TTG -> GTT
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     QString clipboardText = GTClipboard::text(os);
@@ -353,7 +353,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1){//undo replace_selected_rows_with_reverse
 
 // Expected state: sequence changed from GTT -> TTG
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     clipboardText = GTClipboard::text(os);
@@ -374,7 +374,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1){//undo replace_selected_rows_with_reverse
 
 // Expected state: sequence changed from TTG -> GTT
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     GTGlobals::sleep(500);
     clipboardText = GTClipboard::text(os);
@@ -402,11 +402,11 @@ GUI_TEST_CLASS_DEFINITION( test_0006_2 )
     GTUtilsDialog::waitForDialog( os, new PopupChooser( os, QStringList( ) << MSAE_MENU_EDIT
         << "replace_selected_rows_with_complement" ) );
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( -1, 2 ) );
-    GTMouseDriver::click( os, Qt::RightButton );
+    GTMouseDriver::click(Qt::RightButton );
 
 // Expected state: sequence changed from TTG -> AAC
     GTGlobals::sleep( 500 );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
 
     GTGlobals::sleep( 500 );
     QString clipboardText = GTClipboard::text( os );
@@ -427,7 +427,7 @@ GUI_TEST_CLASS_DEFINITION( test_0006_2 )
 
 // Expected state: sequence changed from AAC -> TTG
     GTGlobals::sleep( 500 );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
 
     GTGlobals::sleep( 500 );
     clipboardText = GTClipboard::text( os );
@@ -448,7 +448,7 @@ GUI_TEST_CLASS_DEFINITION( test_0006_2 )
 
 // Expected state: sequence changed from TTG -> AAC
     GTGlobals::sleep( 500 );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
 
     GTGlobals::sleep( 500 );
     clipboardText = GTClipboard::text( os );
@@ -471,7 +471,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){//remove columns with 3 or more gaps
 
     //save initial state
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString initAln = GTClipboard::text(os);
     QString expectedChangedAln = "AAGCTTCTTT\nAAGTTACTAA\nTAG---TTAT\nAAGC---TAT\n"
@@ -483,7 +483,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){//remove columns with 3 or more gaps
     GTUtilsDialog::waitForDialog(os, new RemoveGapColsDialogFiller(os, RemoveGapColsDialogFiller::Number,3));
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString changedAln = GTClipboard::text(os);
     CHECK_SET_ERR(changedAln == expectedChangedAln,"remove gaps option works wrong");
@@ -494,7 +494,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){//remove columns with 3 or more gaps
 
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText==initAln, "undo works wrong");
@@ -503,7 +503,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){//remove columns with 3 or more gaps
     QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
     GTWidget::click(os, redo);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText==expectedChangedAln, "redo works wrong");
@@ -516,7 +516,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1){//remove columns with 15 percents of gaps
 
     //save initial state
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString initAln = GTClipboard::text(os);
     QString expectedChangedAln = "AAGCCTTT\nAAGTCTAA\nTAG-TTAT\nAAGC-TAT\nTAGTTTAA\nTAGTTTAA\n"
@@ -527,7 +527,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1){//remove columns with 15 percents of gaps
     GTUtilsDialog::waitForDialog(os, new RemoveGapColsDialogFiller(os, RemoveGapColsDialogFiller::Percent,15));
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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);
@@ -538,7 +538,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1){//remove columns with 15 percents of gaps
 
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText==initAln, "undo works wrong");
@@ -547,7 +547,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1){//remove columns with 15 percents of gaps
     QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
     GTWidget::click(os, redo);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     clipboardText=GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText==expectedChangedAln, "redo works wrong");
@@ -560,7 +560,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2){//remove columns of gaps is tested
 
     //save initial state
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString initAln = GTClipboard::text(os);
     QString expectedChangedAln = "AAGCTTCTTTTAA\nAAGTTACTAA---\nTAG---TTATTAA\nAAGC---TATTAA\nTAGTTATTAA---\n"
@@ -571,7 +571,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2){//remove columns of gaps is tested
     GTUtilsDialog::waitForDialog(os, new RemoveGapColsDialogFiller(os, RemoveGapColsDialogFiller::Column));
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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);
@@ -582,7 +582,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2){//remove columns of gaps is tested
 
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText==initAln, "undo works wrong");
@@ -591,7 +591,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2){//remove columns of gaps is tested
     QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
     GTWidget::click(os, redo);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     clipboardText=GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText==expectedChangedAln, "redo works wrong\n" + clipboardText);
@@ -604,7 +604,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){//remove all gaps is tested
 
     //save initial state
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString initAln = GTClipboard::text(os);
     QString expectedChangedAln = "AAGCTTCTTTTAA\nAAGTTACTAA---\nTAGTTATTAA---\nAAGCTATTAA---\nTAGTTATTAA---\n"
@@ -614,7 +614,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){//remove all gaps is tested
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "Remove all gaps",GTGlobals::UseMouse));
     GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    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);
@@ -625,7 +625,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){//remove all gaps is tested
 
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText==initAln, "undo works wrong");
@@ -634,7 +634,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){//remove all gaps is tested
     QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
     GTWidget::click(os, redo);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     clipboardText=GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText==expectedChangedAln, "redo works wrong\n" + clipboardText);
@@ -646,14 +646,14 @@ GUI_TEST_CLASS_DEFINITION(test_0009){//rename msa is tested
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //rename msa
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__EDIT_MENU<<"Rename"));
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os, "ma2_gap_col"));
-    GTMouseDriver::click(os,Qt::RightButton);
-    GTKeyboardDriver::keySequence(os, "some_name");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    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);
 
     //Expected state: msa renamed
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os, "some_name"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "some_name"));
 
     //undo
     QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
@@ -661,13 +661,13 @@ GUI_TEST_CLASS_DEFINITION(test_0009){//rename msa is tested
     GTWidget::click(os, undo);
 
     //Expected state: rename undone
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os, "ma2_gap_col"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "ma2_gap_col"));
 
     //redo
     GTWidget::click(os, redo);
 
     //Expected state: rename redone
-    GTMouseDriver::moveTo(os,GTUtilsProjectTreeView::getItemCenter(os, "some_name"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "some_name"));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0010){//MUSCLE aligner undo test
@@ -676,7 +676,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){//MUSCLE aligner undo test
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString initAln = GTClipboard::text(os);
     QString expectedAln("AAG---AATAATTA\n"
@@ -696,7 +696,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){//MUSCLE aligner undo test
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
     GTGlobals::sleep(10000);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString changedAln = GTClipboard::text(os);
     CHECK_SET_ERR(changedAln==expectedAln, "Unexpected alignment" + changedAln);
@@ -706,7 +706,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){//MUSCLE aligner undo test
 
     //undo
     GTWidget::click(os,undo);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     changedAln = GTClipboard::text(os);
 
@@ -714,7 +714,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010){//MUSCLE aligner undo test
 
     //redo
     GTWidget::click(os,redo);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     changedAln = GTClipboard::text(os);
 
@@ -728,7 +728,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){//Kalign undo test
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString initAln = GTClipboard::text(os);
 
@@ -750,7 +750,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){//Kalign undo test
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(10000);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString changedAln = GTClipboard::text(os);
     CHECK_SET_ERR(changedAln==expectedAln, "Unexpected alignment" + changedAln);
@@ -760,7 +760,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){//Kalign undo test
 
     //undo
     GTWidget::click(os,undo);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(3000);
     changedAln = GTClipboard::text(os);
 
@@ -768,7 +768,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011){//Kalign undo test
 
     //redo
     GTWidget::click(os,redo);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(3000);
     changedAln = GTClipboard::text(os);
 
@@ -781,7 +781,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1){//Kalign undo test
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString initAln = GTClipboard::text(os);
 
@@ -803,7 +803,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1){//Kalign undo test
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     QString changedAln = GTClipboard::text(os);
     CHECK_SET_ERR(changedAln==expectedAln, "Unexpected alignment" + changedAln);
 
@@ -812,7 +812,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1){//Kalign undo test
 
     //undo
     GTWidget::click(os,undo);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     changedAln = GTClipboard::text(os);
 
@@ -820,7 +820,7 @@ GUI_TEST_CLASS_DEFINITION(test_0011_1){//Kalign undo test
 
     //redo
     GTWidget::click(os,redo);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     changedAln = GTClipboard::text(os);
 
@@ -833,7 +833,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012){//ClustalW aligner undo test
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString initAln = GTClipboard::text(os);
 
@@ -855,7 +855,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012){//ClustalW aligner undo test
 
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(17,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString changedAln = GTClipboard::text(os);
     CHECK_SET_ERR(changedAln==expectedAln, "Unexpected alignment\n" + changedAln);
@@ -865,7 +865,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012){//ClustalW aligner undo test
 
     //undo
     GTWidget::click(os,undo);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     changedAln = GTClipboard::text(os);
 
@@ -875,7 +875,7 @@ GUI_TEST_CLASS_DEFINITION(test_0012){//ClustalW aligner undo test
     GTWidget::click(os,redo);
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(17,10));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     changedAln = GTClipboard::text(os);
 
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 a543195..dc91971 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
@@ -69,6 +69,7 @@
 #endif
 
 #include <QProcess>
+//#include <P
 #include "../../workflow_designer/src/WorkflowViewItems.h"
 #include <U2Lang/WorkflowSettings.h>
 #include <QtCore/QFileInfo>
@@ -89,8 +90,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
    /* GTUtilsWorkflowDesigner::openWorkfolwDesigner(os);
     GTUtilsWorkflowDesigner::addSample(os, "call variants");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "call variants"));
-    GTMouseDriver::click(os);
+    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));
@@ -122,7 +123,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 
 
 
-    GTKeyboardDriver::keyClick(os, 'r' ,GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'r' ,Qt::ControlModifier);
     TaskScheduler* scheduller = AppContext::getTaskScheduler();
 
     GTGlobals::sleep(5000);
@@ -232,12 +233,12 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1){
         posList.append(item->pos());
     }
 
-    GTMouseDriver::moveTo(os,GTUtilsWorkflowDesigner::getItemCenter(os, "Write weight matrix"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Write weight matrix"));
+    GTMouseDriver::doubleClick();
 
     GTGlobals::sleep();
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Write weight matrix"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Write weight matrix"));
+    GTMouseDriver::doubleClick();
 
 //  Expected state: all arrows in schema still unbroken
         items = sceneView->items();
@@ -256,12 +257,12 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
 //    Expected state: workflow schema opened in Workflow designer
     QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
     CHECK_SET_ERR(table,"tableView not found");
-    GTMouseDriver::moveTo(os,GTUtilsWorkflowDesigner::getItemCenter(os,"Write Genbank"));
-    GTMouseDriver::click(os);
-    GTMouseDriver::moveTo(os,GTTableView::getCellPosition(os,table,1,3));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Write Genbank"));
+    GTMouseDriver::click();
+    GTMouseDriver::moveTo(GTTableView::getCellPosition(os,table,1,3));
+    GTMouseDriver::click();
     QString s = QDir().absoluteFilePath(testDir + "_common_data/scenarios/sandbox/");
-    GTKeyboardDriver::keySequence(os,s+"T1.gb");
+    GTKeyboardDriver::keySequence(s+"T1.gb");
     GTWidget::click(os,GTUtilsMdi::activeWindow(os));
 
     GTWidget::click(os,GTAction::button(os,"Run workflow"));
@@ -380,8 +381,8 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
     }
 
     GTWidget::setFocus(os,GTWidget::findWidget(os,"sceneView"));
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 //    3. Open this schema from examples
     GTUtilsWorkflowDesigner::addSample(os, "call variants");
 //    Expected state: items and links between them painted correctly
@@ -437,8 +438,8 @@ GUI_TEST_CLASS_DEFINITION(test_0013){
             QPointF scenePButton = p->mapToScene(p->boundingRect().center());
             QPoint viewP = sceneView->mapFromScene(scenePButton);
             QPoint globalBottomRightPos = sceneView->viewport()->mapToGlobal(viewP);
-            GTMouseDriver::moveTo(os, globalBottomRightPos);
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(globalBottomRightPos);
+            GTMouseDriver::click();
             GTGlobals::sleep(2000);
         }
     }
@@ -452,8 +453,8 @@ GUI_TEST_CLASS_DEFINITION(test_0013){
     QPointF scenePButton = in->mapToScene(in->boundingRect().center());
     QPoint viewP = sceneView->mapFromScene(scenePButton);
     QPoint globalBottomRightPos = sceneView->viewport()->mapToGlobal(viewP);
-    GTMouseDriver::moveTo(os, globalBottomRightPos);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(globalBottomRightPos);
+    GTMouseDriver::click();
 
     doc = qobject_cast<QTextEdit*>(GTWidget::findWidget(os,"doc"));
     CHECK_SET_ERR(doc->document()->toPlainText().contains("Input port \"Input assembly"),"expected text not found");
@@ -465,8 +466,8 @@ GUI_TEST_CLASS_DEFINITION(test_0015){
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 //    2. Select any worker on palette.
     GTUtilsWorkflowDesigner::addSample(os,"call variants");
-    GTMouseDriver::moveTo(os,GTUtilsWorkflowDesigner::getItemCenter(os,"Call Variants"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Call Variants"));
+    GTMouseDriver::click();
     GTGlobals::sleep(500);
     CHECK_SET_ERR(GTWidget::findWidget(os,"table"),"parameters table not found");
     CHECK_SET_ERR(GTWidget::findWidget(os,"doc"),"element documentation widget not found");
@@ -483,8 +484,8 @@ GUI_TEST_CLASS_DEFINITION(test_0015_1){//DIFFERENCE:file is loaded
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 //    2. Select any worker on palette.
-    GTMouseDriver::moveTo(os,GTUtilsWorkflowDesigner::getItemCenter(os,"Write Weight Matrix"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Write Weight Matrix"));
+    GTMouseDriver::click();
     GTGlobals::sleep(500);
     CHECK_SET_ERR(GTWidget::findWidget(os,"table"),"parameters table not found");
     CHECK_SET_ERR(GTWidget::findWidget(os,"doc"),"element documentation widget not found");
@@ -602,7 +603,7 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
 //            parameters["Annotations B"] = QDir(testDir).absolutePath() + "/_common_data/bedtools/mutation.gff";
             GTUtilsWizard::setAllParameters(os, parameters);
 
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Enter);
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Apply);
         }
     };
@@ -627,6 +628,63 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
     CHECK_SET_ERR(GTFile::equals(os, QDir(sandBoxDir).absolutePath() + "/wd_test_0060", QDir(testDir).absolutePath() + "/_common_data/bedtools/out17.bed"), "Output is incorrect");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0061) {
+    // UGENE-5162
+    // 1. Open WD
+    // 2. Add element "Call variants with SAM tools" on the scene
+    // Expected state: the parameter "Use reference from" is set to File, the element has one port and parameter "Reference"
+    // 3. Open "Call variants with SAM tools" sample
+    // Expected state: "Call variants" element has two ports, "Use reference from" is set to "Port", there is no parameter "Reference"
+    // 4. Set "Use reference from" to "Port"
+    // Expected state: the second port and its link disappeared
+    // 5. Remove "Read seqeunce" elements
+    // 6. Set input data:
+    //    Reference: /sampls/Assembly/chrM.fa
+    //    Input assembly dataset 1: /sampls/Assembly/chrM.sam
+    //    Input assembly dataset 2: /sampls/Assembly/chrM.sam
+    // 7. Run the workflow
+    // Expected state: there are two result files (for each dataset)
+
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
+    WorkflowProcessItem* item = GTUtilsWorkflowDesigner::addElement(os, "Call Variants with SAMtools");
+    CHECK_SET_ERR(item != NULL, "Failed to add Call variants element");
+    GTUtilsWorkflowDesigner::click(os, "Call Variants with SAMtools");
+
+    WorkflowPortItem* port = GTUtilsWorkflowDesigner::getPortById(os, item, "in-sequence");
+    CHECK_SET_ERR(port != NULL, "Cannot get in-sequence port 1");
+    CHECK_SET_ERR(!port->isVisible(), "In-sequence port is unexpectedly visible");
+    CHECK_SET_ERR(GTUtilsWorkflowDesigner::isParameterVisible(os, "Reference"), "Reference parameter is not visible");
+
+    GTUtilsWorkflowDesigner::addSample(os, "Call variants with SAMtools");
+    GTUtilsWorkflowDesigner::click(os, "Call Variants");
+    CHECK_SET_ERR(!GTUtilsWorkflowDesigner::isParameterVisible(os, "Reference"), "Reference parameter is unexpectedly visible");
+    item = GTUtilsWorkflowDesigner::getWorker(os, "Call Variants");
+    CHECK_SET_ERR(item != NULL, "Cannot find Call variants with SAMtools element");
+    port = GTUtilsWorkflowDesigner::getPortById(os, item, "in-sequence");
+    CHECK_SET_ERR(port != NULL, "Cannot get in-sequence port 2");
+    CHECK_SET_ERR(port->isVisible(), "In-sequence port is enexpectedly not visible");
+
+    GTUtilsWorkflowDesigner::removeItem(os, "Read Sequence");
+    GTUtilsWorkflowDesigner::removeItem(os, "To FASTA");
+
+    GTUtilsWorkflowDesigner::click(os, "Call Variants");
+    GTUtilsWorkflowDesigner::setParameter(os, "Use reference from", "File", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Reference", QDir().absoluteFilePath(dataDir + "samples/Assembly/chrM.fa"), GTUtilsWorkflowDesigner::lineEditWithFileSelector);
+    GTUtilsWorkflowDesigner::setParameter(os, "Output variants file", QDir().absoluteFilePath(sandBoxDir + "/test_ugene_5162.vcf"), GTUtilsWorkflowDesigner::lineEditWithFileSelector);
+
+    GTUtilsWorkflowDesigner::click(os, "Read Assembly (BAM/SAM)");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "/samples/Assembly", "chrM.sam");
+
+    GTUtilsWorkflowDesigner::createDataset(os);
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "/samples/Assembly", "chrM.sam");
+    GTUtilsWorkflowDesigner::runWorkflow(os);
+    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");
+}
+
 } // namespace GUITest_common_scenarios_workflow_designer
 
 } // namespace U2
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 1b1b425..f7e042a 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
@@ -50,6 +50,7 @@ GUI_TEST_CLASS_DECLARATION(test_0017)
 GUI_TEST_CLASS_DECLARATION(test_0058)
 GUI_TEST_CLASS_DECLARATION(test_0059)
 GUI_TEST_CLASS_DECLARATION(test_0060)
+GUI_TEST_CLASS_DECLARATION(test_0061)
 
 #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 77e079f..37b0b33 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
@@ -54,12 +54,12 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addSample(os, "Call variants with SAMtools");
 //    3. Set valid input data.
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
-    GTMouseDriver::click(os);
+    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");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    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");
 //    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.
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 0f16031..e9792d2 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
@@ -58,7 +58,7 @@ GUI_TEST_CLASS_DEFINITION( test_0001 ) {
     CHECK(nameFilter, );
     //hack. GTLineEdit can not set focus on widget. Don't know why
     GTWidget::click(os, nameFilter);
-    GTKeyboardDriver::keySequence(os,"HMM");
+    GTKeyboardDriver::keySequence("HMM");
     GTGlobals::sleep();
     // 4. Write "HMM".
 
@@ -92,11 +92,11 @@ GUI_TEST_CLASS_DEFINITION( test_0002 ) {
 
     // 3. Press Ctrl+F.
     //Expected: the "Name filter" line edit has the focus
-    GTKeyboardDriver::keyClick( os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick('f', Qt::ControlModifier);
     GTGlobals::sleep(200);
     // 4. Write "align muscle".
     //Expected: There is the muscle alignment sample after filtering.
-    GTKeyboardDriver::keySequence(os, "align muscle");
+    GTKeyboardDriver::keySequence("align muscle");
     GTGlobals::sleep(500);
 
     // Expected: There are two samples after filtering.
@@ -122,7 +122,7 @@ GUI_TEST_CLASS_DEFINITION( test_0002 ) {
     //5. Press Esc.
     //Expected: the name filter is clear, all samples are shown.
 
-    GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
     GTGlobals::sleep(200);
 
     int hiddenItemsCount = 0;
@@ -156,7 +156,7 @@ GUI_TEST_CLASS_DEFINITION( test_0003 ) {
     // 4. Write "NGS".
     //hack. GTLineEdit can not set focus on widget. Don't know why
     GTWidget::click(os,nameFilter);
-    GTKeyboardDriver::keySequence(os, "NGS");
+    GTKeyboardDriver::keySequence("NGS");
     GTGlobals::sleep();
 
     // Expected: There are two samples after filtering.
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
index 55596ab..32cc654 100644
--- 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
@@ -54,17 +54,17 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
     // 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(os,GTUtilsWorkflowDesigner::getItemCenter(os,"Write alignment"));
-    GTMouseDriver::click(os);
-    GTMouseDriver::moveTo(os,GTTableView::getCellPosition(os,table,1,1));
-    GTMouseDriver::click(os);
+    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(os, s+"/wd_pv_0001.sto");
+    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(os,GTUtilsWorkflowDesigner::getItemCenter(os,"Read alignment"));
-    GTMouseDriver::click(os);
+    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
@@ -111,13 +111,13 @@ GUI_TEST_CLASS_DEFINITION( test_0002 ) {
     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(os, writeAlignmentCenter);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(writeAlignmentCenter);
+    GTMouseDriver::click();
     QPoint cellPoint = GTTableView::getCellPosition(os, table, 1, 1);
-    GTMouseDriver::moveTo(os, cellPoint);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(cellPoint);
+    GTMouseDriver::click();
     QString dirPath = QFileInfo(testDir + "_common_data/scenarios/sandbox/").absoluteFilePath();
-    GTKeyboardDriver::keySequence(os, dirPath + "/wd_pv_0002.sto");
+    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);
@@ -129,8 +129,8 @@ GUI_TEST_CLASS_DEFINITION( test_0002 ) {
 
 //    4. Add that directory as input in WD
     QPoint readAlignmentCenter = GTUtilsWorkflowDesigner::getItemCenter(os, "Read alignment");
-    GTMouseDriver::moveTo(os, readAlignmentCenter);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(readAlignmentCenter);
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFolder(os, outputDir.path());
     GTGlobals::sleep(2000);
     GTWidget::click(os, activeWindow);
@@ -169,29 +169,29 @@ GUI_TEST_CLASS_DEFINITION( test_0003 ) {
 
     //2. Set some name for an output file
 
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, "Write Sequence" ) );
-    GTMouseDriver::click( os );
+    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( os, GTTableView::getCellPosition( os, table, 1, 3 ) );
-    GTMouseDriver::click( os );
-    GTKeyboardDriver::keySequence( os, "sequence.gb" );
+    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( os, GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
+    GTMouseDriver::click();
     QString dirPath = testDir + "_common_data/fasta/";
     GTUtilsWorkflowDesigner::setDatasetInputFile( os, dirPath, "fa1.fa" );
 
     //4. Set some nonexistent path to a file as the "Pattern file" parameter of the "Find Substrings" worker
 
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, "Find Pattern" ) );
-    GTMouseDriver::click( os );
-    GTMouseDriver::moveTo( os, GTTableView::getCellPosition( os, table, 1, 2 ) );
-    GTMouseDriver::click( os );
-    GTKeyboardDriver::keySequence( os, "pattern_file.txt" );
+    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
@@ -216,16 +216,16 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
     // 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(os,GTUtilsWorkflowDesigner::getItemCenter(os,"Write alignment"));
-    GTMouseDriver::click(os);
+    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(os, GTUtilsWorkflowDesigner::getItemCenter(os,"Read alignment"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Read alignment"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/clustal/", "align.aln");
     GTGlobals::sleep(2000);
 
@@ -275,19 +275,19 @@ GUI_TEST_CLASS_DEFINITION( test_0006 ) {
 
     //2. Set some name for an output file
 
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, "Write Sequence" ) );
-    GTMouseDriver::click( os );
+    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( os, GTTableView::getCellPosition( os, table, 1, 3 ) );
-    GTMouseDriver::click( os );
-    GTKeyboardDriver::keySequence( os, "sequence.gb" );
+    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( os, GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
+    GTMouseDriver::click();
     QString dirPath = testDir + "_common_data/fasta/";
     GTUtilsWorkflowDesigner::setDatasetInputFile( os, dirPath, "fa1.fa" );
 
@@ -296,11 +296,11 @@ GUI_TEST_CLASS_DEFINITION( test_0006 ) {
     newDir.mkdir("_empty_tmp");
 
     //5. Set the path to this directory as the "Database directory" parameter of the "CD Search" worker
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, "CD Search" ) );
-    GTMouseDriver::click( os );
-    GTMouseDriver::moveTo( os, GTTableView::getCellPosition( os, table, 1, 2 ) );
-    GTMouseDriver::click( os );
-    GTKeyboardDriver::keySequence( os, testDir + "_empty_tmp");
+    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
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 f5cceb4..ad15eff 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
@@ -92,8 +92,8 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 //    5. Paste "#$%not a script asdasd321 123" at the script text area. Click "Check syntax" button
 //    Expected state: messagebox "Script syntax check failed!" appears.
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "wd_scripting_test_0001"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "wd_scripting_test_0001"));
+    GTMouseDriver::click();
 
     GTUtilsDialog::waitForDialog(os, new ScriptEditorDialogSyntaxChecker(os, "#$%not a script asdasd321 123", "Script syntax check failed!"));
     GTWidget::click(os, GTAction::button(os, "editScriptAction"));
@@ -116,8 +116,8 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 //
 //  3. Paste "#$%not a script asdasd321 123" at the script text area. Click "Check syntax" button
 //  Expected state: messagebox "Script syntax check failed!" appears.
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os,"Write FASTA"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Write FASTA"));
+    GTMouseDriver::click();
 
     GTUtilsDialog::waitForDialog(os, new ScriptEditorDialogFiller(os, "", "#$%not a script asdasd321 123", true, "Script syntax check failed! Line: 1, error: Expected `end of file'"));
     GTUtilsWorkflowDesigner::setParameterScripting(os, "output file", "user script");
@@ -137,15 +137,15 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Show scripting options"));
     GTWidget::click(os, GTAction::button(os, GTAction::findActionByText(os, "Scripting mode")));
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os,"Write FASTA"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Write FASTA"));
+    GTMouseDriver::click();
 
     GTUtilsDialog::waitForDialog(os, new ScriptEditorDialogFiller(os, "", "url_out = url + \".result.fa\";"));
     GTUtilsWorkflowDesigner::setParameterScripting(os, "Output file", "user script", true);
     GTGlobals::sleep(3000);
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os,"Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Read Sequence"));
+    GTMouseDriver::click();
 
     QString dirPath = dataDir + "samples/FASTA/";
     GTUtilsWorkflowDesigner::setDatasetInputFile( os, dirPath, "human_T1.fa" );
@@ -164,8 +164,8 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTUtilsDialog::waitForDialog(os, new CreateElementWithScriptDialogFiller(os, "workflow_scripting_test_0004"));
     GTWidget::click(os, GTAction::button(os, "createScriptAction"));
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os,"workflow_scripting_test_0004"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"workflow_scripting_test_0004"));
+    GTMouseDriver::click();
 
     const QString scriptText = "if(size(in_seq) >= 10000) {out_seq = in_seq;}";
     GTUtilsDialog::waitForDialog(os, new ScriptEditorDialogFiller(os, "", scriptText));
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 681e0fa..c6794a1 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
@@ -523,7 +523,7 @@ GUI_TEST_CLASS_DEFINITION(save_uwl_gui_test_0002) {
     createTestConnection(os);
 
     QMap<QString, QStringList> doc2Objects;
-    doc2Objects["ugene_gui_test"] << "et0002_features" << "view_test_0001";
+    doc2Objects["ugene_gui_test"] /*<< "et0002_features"*/ << "view_test_0001";
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, doc2Objects, QSet<GObjectType>(),
         ProjectTreeItemSelectorDialogFiller::Separate));
 
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 ce8f5cc..649b7ff 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
@@ -250,9 +250,9 @@ GUI_TEST_CLASS_DEFINITION(test_1001_3) {
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Build dotplot...", GTGlobals::UseMouse);
     GTGlobals::sleep(5000);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTGlobals::sleep(5000);
 }
@@ -327,7 +327,7 @@ GUI_TEST_CLASS_DEFINITION(test_1013) {
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(-1, 0));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
 }
 
@@ -391,9 +391,9 @@ GUI_TEST_CLASS_DEFINITION(test_1015_3) {
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTUtilsMdi::click(os, GTGlobals::Close);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTGlobals::sleep(5000);
 }
@@ -411,9 +411,9 @@ GUI_TEST_CLASS_DEFINITION(test_1015_4) {
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTUtilsMdi::click(os, GTGlobals::Minimize);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTGlobals::sleep(5000);
 }
@@ -458,7 +458,7 @@ GUI_TEST_CLASS_DEFINITION(test_1020) {
     GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
     GTGlobals::sleep();
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     CHECK_SET_ERR(GTUtilsMdi::activeWindow(os)->windowTitle() == "Alignment profile for COI", "Unexpected active window name: " + GTUtilsMdi::activeWindow(os)->windowTitle());
 
@@ -498,11 +498,11 @@ GUI_TEST_CLASS_DEFINITION(test_1021) {
         GTGlobals::sleep();
 
         // 4) Click on human_T1.fa project tree view item
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+        GTMouseDriver::click();
 
         // 5) Press delete key
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
         GTGlobals::sleep();
 
         // Expected state: there are no empty MDI window opened, no bookmarks
@@ -517,7 +517,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021) {
         CHECK_SET_ERR(bookmarksCount == 0, "there are bookmarks");
     }
 
-//    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F4"], GTKeyboardDriver::key["alt"]);
+//    GTKeyboardDriver::keyClick( GTKeyboardDriver::key["F4"], Qt::AltModifier);
 //    GTGlobals::sleep();
 }
 
@@ -536,11 +536,11 @@ GUI_TEST_CLASS_DEFINITION(test_1021_1) {
         GTGlobals::sleep();
 
         // 4) Click on human_T1.fa project tree view item
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+        GTMouseDriver::click();
 
         // 5) Press delete key
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
         GTGlobals::sleep();
 
         // Expected state: there are no empty MDI window opened, no bookmarks
@@ -555,7 +555,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021_1) {
         CHECK_SET_ERR(bookmarksCount == 0, "there are bookmarks");
     }
 
-//    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F4"], GTKeyboardDriver::key["alt"]);
+//    GTKeyboardDriver::keyClick( GTKeyboardDriver::key["F4"], Qt::AltModifier);
 //    GTGlobals::sleep();
 }
 
@@ -574,11 +574,11 @@ GUI_TEST_CLASS_DEFINITION(test_1021_2) {
         GTGlobals::sleep();
 
         // 4) Click on human_T1.fa project tree view item
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+        GTMouseDriver::click();
 
         // 5) Press delete key
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
         GTGlobals::sleep();
 
         // Expected state: there are no empty MDI window opened, no bookmarks
@@ -614,11 +614,11 @@ GUI_TEST_CLASS_DEFINITION(test_1021_3) {
         }
 
         // 4) Click on human_T1.fa project tree view item
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+        GTMouseDriver::click();
 
         // 5) Press delete key
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
         GTGlobals::sleep();
 
         // Expected state: there are no empty MDI window opened, no bookmarks
@@ -654,11 +654,11 @@ GUI_TEST_CLASS_DEFINITION(test_1021_4) {
         }
 
         // 4) Click on human_T1.fa project tree view item
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+        GTMouseDriver::click();
 
         // 5) Press delete key
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
         GTGlobals::sleep();
 
         // Expected state: there are no empty MDI window opened, no bookmarks
@@ -684,10 +684,10 @@ GUI_TEST_CLASS_DEFINITION(test_1022) {
     GTWidget::click(os, GTWidget::findWidget(os, "build_dotplot_action_widget"));
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+    GTMouseDriver::click();
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
     GTGlobals::sleep(5000);
@@ -877,8 +877,8 @@ GUI_TEST_CLASS_DEFINITION(test_1047){
 //    Bug state: Zoom and color scheme changing simultaneously.
     QWidget* assembly_reads_area = GTWidget::findWidget(os, "assembly_reads_area");
     QPoint p = assembly_reads_area->mapToGlobal(assembly_reads_area->rect().center());
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::scroll(os, 10);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::scroll(10);
 //    Expected state: only zoom is changed
     QString currText = colorBox->currentText();
     CHECK_SET_ERR(currText == "Strand direction", "Color scheme unexpectidly changed");
@@ -905,11 +905,11 @@ GUI_TEST_CLASS_DEFINITION(test_1048){
     QWidget* w2 = GTUtilsMdi::activeWindow(os);
     GTWidget::click(os, w2);
     for (int i = 0;i < 50;i++){
-        GTKeyboardDriver::keyClick(os, '=', GTKeyboardDriver::key["shift"]);
+        GTKeyboardDriver::keyClick( '=', Qt::ShiftModifier);
         GTGlobals::sleep(50);
     }
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["home"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Home);
     GTGlobals::sleep(500);
     bool vis = GTWidget::findWidget(os, "AssemblyReadsAreaHint", GTUtilsMdi::activeWindow(os))->isVisible();
     CHECK_SET_ERR(!vis, "hint unexpectidly visiable");
@@ -919,12 +919,12 @@ GUI_TEST_CLASS_DEFINITION(test_1048){
     QWidget* w1 = GTUtilsMdi::activeWindow(os);
     GTWidget::click(os, w1);
     for (int i = 0;i < 50;i++){
-        GTKeyboardDriver::keyClick(os, '=', GTKeyboardDriver::key["shift"]);
+        GTKeyboardDriver::keyClick( '=', Qt::ShiftModifier);
         GTGlobals::sleep(50);
     }
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["home"]);
-    GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(10,10));
+    GTKeyboardDriver::keyClick( Qt::Key_Home);
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(10,10));
     GTGlobals::sleep(500);
     vis = GTWidget::findWidget(os, "AssemblyReadsAreaHint", GTUtilsMdi::activeWindow(os))->isVisible();
     CHECK_SET_ERR(vis, "hint unexpectidly invisiable");
@@ -1021,16 +1021,17 @@ GUI_TEST_CLASS_DEFINITION(test_1059) {
     GTUtilsWorkflowDesigner::click(os, GTUtilsWorkflowDesigner::getWorker(os, "Write Sequence"));
     GTGlobals::sleep(1000);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
 
     const QPoint workerCenterPos = GTUtilsWorkflowDesigner::getItemCenter(os, "Write Sequence");
-    GTMouseDriver::moveTo(os, workerCenterPos);
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, workerCenterPos + QPoint(100, 0));
-    GTMouseDriver::release(os);
+    GTMouseDriver::moveTo(workerCenterPos);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(workerCenterPos + QPoint(100, 0));
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 
     GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "nameEdit"), "Write Sequence 1");
 
@@ -1137,8 +1138,8 @@ GUI_TEST_CLASS_DEFINITION(test_1063) {
             QList<QTreeWidgetItem *> items = GTTreeWidget::getItems(tree->invisibleRootItem());
             foreach (QTreeWidgetItem *item, items) {
                 if (item->text(0) == "  Workflow Designer") {
-                    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-                    GTMouseDriver::click(os);
+                    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+                    GTMouseDriver::click();
                 }
             }
 
@@ -1148,8 +1149,6 @@ GUI_TEST_CLASS_DEFINITION(test_1063) {
         }
     };
 
-    GTLogTracer lt;
-
     //1) Set "Enable debugger" in Settings->WD
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new EnableWdDebuggerFiller()));
     GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
@@ -1167,8 +1166,8 @@ GUI_TEST_CLASS_DEFINITION(test_1063) {
 
     //4) Right - click on Read sequence element, click "Toggle breakpoint"
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Break at element..."));
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click(Qt::RightButton);
 
     //5) Run workflow
     GTUtilsWorkflowDesigner::runWorkflow(os);
@@ -1179,9 +1178,12 @@ GUI_TEST_CLASS_DEFINITION(test_1063) {
     CHECK_SET_ERR(pauseButton->isVisible() && !pauseButton->isEnabled(), "'Pause workflow' button is either invisible or active unexpectedly");
 
     //6) Click "Run schema" button
+    GTUtilsNotifications::waitForNotification(os, true, "The task 'Execute workflow' has been finished");
     GTUtilsWorkflowDesigner::runWorkflow(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTThread::waitForMainThread();
     //Expected state : run finished successfully
-    GTUtilsLog::check(os, lt);
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1064) {
@@ -1312,7 +1314,8 @@ GUI_TEST_CLASS_DEFINITION(test_1069) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //3. Close the sequence view
-    GTKeyboardDriver::keyClick(os, 'w', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'w', Qt::ControlModifier);
+    GTThread::waitForMainThread();
 
     //4. Open human_t1.fa
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
@@ -1334,7 +1337,7 @@ GUI_TEST_CLASS_DEFINITION(test_1071) {
     //3. Click OK.
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
     GTUtilsDialog::waitForDialog(os, new EditAnnotationFiller(os, "CDS", "asdfsadf12..25"));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     //expected state: Error message appears, UGENE does not crash.
@@ -1385,13 +1388,13 @@ GUI_TEST_CLASS_DEFINITION(test_1080) {
     public:
         OkClicker2(HI::GUITestOpStatus& _os) : Filler(_os, "EditMarkerDialog"){}
         virtual void run() {
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
-            GTKeyboardDriver::keySequence(os, "0.001");
+            GTKeyboardDriver::keyClick( Qt::Key_Tab);
+            GTKeyboardDriver::keyClick( Qt::Key_Tab);
+            GTKeyboardDriver::keyClick( Qt::Key_Tab);
+            GTKeyboardDriver::keyClick( Qt::Key_Tab);
+            GTKeyboardDriver::keyClick( Qt::Key_Tab);
+            GTKeyboardDriver::keyClick( Qt::Key_Tab);
+            GTKeyboardDriver::keySequence("0.001");
 
             GTUtilsDialog::clickButtonBox(os, QApplication::activeModalWidget(), QDialogButtonBox::Ok);
             GTGlobals::sleep(2000);
@@ -1408,8 +1411,8 @@ GUI_TEST_CLASS_DEFINITION(test_1080) {
             CHECK(NULL != w, );
 
             QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os, "table", w));
-            GTMouseDriver::moveTo(os, GTTableView::getCellPosition(os, table, 0,0));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(GTTableView::getCellPosition(os, table, 0,0));
+            GTMouseDriver::click();
 
             QToolButton* editButton = qobject_cast<QToolButton*>(GTWidget::findWidget(os, "editButton", w));
             CHECK_SET_ERR( editButton != NULL, "editButton not found!");
@@ -1433,8 +1436,8 @@ GUI_TEST_CLASS_DEFINITION(test_1080) {
     GTUtilsWorkflowDesigner::click(os, "Sequence Marker");
 
     QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"markerTable"));
-    GTMouseDriver::moveTo(os, GTTableView::getCellPosition(os, table, 0,0));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTableView::getCellPosition(os, table, 0,0));
+    GTMouseDriver::click();
 
     QToolButton* editButton = qobject_cast<QToolButton*>(GTWidget::findWidget(os, "editButton"));
     CHECK_SET_ERR( editButton != NULL, "editButton not found!");
@@ -1451,9 +1454,9 @@ GUI_TEST_CLASS_DEFINITION(test_1083) {
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //2. select sequence oject in projrct tree view. press delete
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 //Expected state: UGENE is not crashed
     GTUtilsProject::checkProject(os, GTUtilsProject::Empty);
 }
@@ -1505,7 +1508,7 @@ GUI_TEST_CLASS_DEFINITION(test_1113){//commit AboutDialogController.cpp
 
             GTGlobals::sleep();
 #ifdef Q_OS_MAC
-            GTKeyboardDriver::keyRelease(os,GTKeyboardDriver::key["f1"]);
+            GTKeyboardDriver::keyRelease(GTKeyboardDriver::key[Qt::Key_F1]);
 #endif
 
             QWidget* dialog = QApplication::activeModalWidget();
@@ -1527,7 +1530,7 @@ GUI_TEST_CLASS_DEFINITION(test_1113){//commit AboutDialogController.cpp
 #ifdef Q_OS_MAC
             GTWidget::click(os,GTWidget::findWidget(os,"close_button"));
 #else
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Escape);
 #endif
         }
     };
@@ -1543,7 +1546,7 @@ GUI_TEST_CLASS_DEFINITION(test_1113){//commit AboutDialogController.cpp
     GTWidget::click(os, w, Qt::LeftButton, QPoint(5,5));
     GTGlobals::sleep(500);
 #endif
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["f1"]);
+    GTKeyboardDriver::keyClick( Qt::Key_F1);
     GTGlobals::sleep(1000);
 //Expected state: About dialog appeared, shown info includes platform info (32/64)
 
@@ -1558,7 +1561,7 @@ GUI_TEST_CLASS_DEFINITION(test_1113_1){//commit AboutDialogController.cpp
         virtual void run(){
             GTGlobals::sleep();
 #ifdef Q_OS_MAC
-            GTMouseDriver::release(os);
+            GTMouseDriver::release();
 #endif
             QWidget* dialog = QApplication::activeModalWidget();
 //getting an info string
@@ -1579,7 +1582,7 @@ GUI_TEST_CLASS_DEFINITION(test_1113_1){//commit AboutDialogController.cpp
 #ifdef Q_OS_MAC
             GTWidget::click(os,GTWidget::findWidget(os,"close_button"));
 #else
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Escape);
 #endif
         }
     };
@@ -1639,7 +1642,7 @@ GUI_TEST_CLASS_DEFINITION(test_1121) {
 
     //3) Then delete line with amino alphabet.
     GTUtilsMSAEditorSequenceArea::selectSequence(os, "FOSB_HUMAN");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(500);
 
     //Expected state : Ugene did not crash on assert
@@ -1731,7 +1734,7 @@ GUI_TEST_CLASS_DEFINITION(test_1124){
             //    2. Hover the {Input files (long DNA reads to assembly)} field with mouse and wait the tooltip appeares.
             QListWidget* seqList = GTWidget::findExactWidget<QListWidget*>(os, "seqList", dialog);
             GTWidget::click(os, seqList);
-            GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(20,20));
+            GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(20,20));
             GTGlobals::sleep(3000);
             //    Expected state: tooltip is presented.
             GTUtilsToolTip::checkExistingToolTip(os, "The quality scores for FASTA sequences can be provided in an additional file");
@@ -1769,15 +1772,15 @@ GUI_TEST_CLASS_DEFINITION(test_1152) {
 
     GTFileDialog::openFile(os, dataDir + "/samples/FASTA/human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(200);
-    GTKeyboardDriver::keySequence(os, "TAACG");
+    GTKeyboardDriver::keySequence("TAACG");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"], GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter, Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keySequence(os, "AAAAAA");
+    GTKeyboardDriver::keySequence("AAAAAA");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"], GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter, Qt::ControlModifier);
     GTGlobals::sleep();
 
     //Expected state : 1 pattern is found
@@ -1819,11 +1822,10 @@ GUI_TEST_CLASS_DEFINITION(test_1155) {
 
     GTUtilsWorkflowDesigner::addInputFile(os, "Read Sequence", dataDir + "samples/Genbank/sars.gb");
 
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok,
-        "Please fix issues listed in the error list (located under workflow)."));
+
     GTGlobals::sleep(100);
     GTUtilsWorkflowDesigner::runWorkflow(os);
-
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1154) {
@@ -1867,8 +1869,8 @@ GUI_TEST_CLASS_DEFINITION(test_1156) {
             CHECK_SET_ERR(items.size() == 1, "Unexpected number of enzymes starting with 'BamHI'");
 
             const QPoint enzymePosition = availableEnzymeWidget->mapToGlobal(availableEnzymeWidget->visualItemRect(items.first()).center());
-            GTMouseDriver::moveTo(os, enzymePosition);
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(enzymePosition);
+            GTMouseDriver::click();
 
             GTWidget::click(os, GTWidget::findWidget(os, "addAllButton"));
 
@@ -1966,7 +1968,7 @@ GUI_TEST_CLASS_DEFINITION(test_1165){
 //Expected state: UGENE not crashes
     GTWidget::click(os,nameList);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os,GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1166) {
@@ -1979,17 +1981,19 @@ GUI_TEST_CLASS_DEFINITION(test_1166) {
 
     //2. Select any region in msa with left button, move it left
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(46,7));
-    GTMouseDriver::press(os);
+    GTMouseDriver::press();
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(40,7));
-    GTMouseDriver::release(os);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 
     //3. Drag the region you selected to its original place
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(43,7));
-    GTMouseDriver::press(os);
+    GTMouseDriver::press();
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(46,7));
-    GTMouseDriver::release(os);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 
     //4. Press right mouse button, choose "Align"->"Align with T-Coffee"
     //Expected state: UGENE not crashes
@@ -2063,8 +2067,8 @@ GUI_TEST_CLASS_DEFINITION(test_1182){
     WorkflowProcessItem* worker = GTUtilsWorkflowDesigner::addElement(os, "Grouper");
 //    2. The slot contains the size of created group which hold a number of element in each group
     WorkflowPortItem* port = GTUtilsWorkflowDesigner::getPortById(os, worker, "output-data");
-    GTMouseDriver::moveTo(os, GTGraphicsItem::getItemCenter(os, port));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTGraphicsItem::getItemCenter(os, port));
+    GTMouseDriver::click();
 
     QWidget* paramBox = GTWidget::findWidget(os, "paramBox");
     QTableWidget* table = paramBox->findChild<QTableWidget*>();
@@ -2087,9 +2091,9 @@ GUI_TEST_CLASS_DEFINITION(test_1184){
     GTUtilsWorkflowDesigner::setParameter(os, "Existing file", "Overwrite", GTUtilsWorkflowDesigner::comboValue);
 
     GTUtilsWorkflowDesigner::click(os, "Write FASTA");
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(GTUtilsWorkflowDesigner::getParameter(os, "Output file", true) == "file.fa",
@@ -2181,11 +2185,11 @@ GUI_TEST_CLASS_DEFINITION(test_1189){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //2) Press Ctrl+F
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick('f', Qt::ControlModifier);
     GTGlobals::sleep(500);
 
 //3) Select any region of the sequence
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 100, 200));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 100, 200));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
 
@@ -2210,7 +2214,7 @@ GUI_TEST_CLASS_DEFINITION(test_1189_1){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //2) Press Ctrl+F
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick('f', Qt::ControlModifier);
     GTGlobals::sleep(500);
 
 //3) Select any region of the sequence
@@ -2218,11 +2222,12 @@ GUI_TEST_CLASS_DEFINITION(test_1189_1){
     QPoint p;
     p=GTMouseDriver::getMousePosition();
     p.setX(p.x() - 100);
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::press(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::press();
     p.setX(p.x() + 200);
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::release(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 
 //4) Select "Selected region" in "Region" combobox of "Search in" area.
     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Search in"));
@@ -2273,9 +2278,9 @@ GUI_TEST_CLASS_DEFINITION(test_1199) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //2. Select document in project tree view. Press 'Delete'
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1CF7.PDB"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
 //Expected state: document removed, UGENE not crashes.
     GTUtilsProject::checkProject(os, GTUtilsProject::Empty);
@@ -2420,7 +2425,7 @@ GUI_TEST_CLASS_DEFINITION(test_1212){
 //    2. Do "Select->Sequence Region..."
 //    3. In single selection mode enter any region
 //    4. Press "Go" and UGENE hangs up/crashes
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os,"100..200"));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os,"100..200"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Select"<< "Sequence region"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
 //    Expected: region is selected
@@ -2435,7 +2440,7 @@ GUI_TEST_CLASS_DEFINITION(test_1212_1){
 //    2. Do "Select->Sequence Region..."
 //    3. In single selection mode enter any region
 //    4. Press "Go" and UGENE hangs up/crashes
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os,"1..199950"));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os,"1..199950"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Select"<< "Sequence region"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
 //    Expected: region is selected
@@ -2496,6 +2501,7 @@ GUI_TEST_CLASS_DEFINITION(test_1219) {
     GTUtilsProjectTreeView::checkObjectTypes(os, acceptableTypes, GTUtilsProjectTreeView::findIndex(os, "P1_human_T1_5.aln"));
 
     GTUtilsProjectTreeView::doubleClickItem(os, "P1_human_T1_1");
+
     const QStringList names = GTUtilsMSAEditorSequenceArea::getNameList(os);
     const QStringList expectedNames = QStringList() << "human_T1_39_45" << "P1_1_7";
     CHECK_SET_ERR(expectedNames == names, QString("There are unexpected sequence names in the msa: expect '%1', got '%2'").arg(expectedNames.join(", ")).arg(names.join(", ")));
@@ -2548,16 +2554,16 @@ GUI_TEST_CLASS_DEFINITION(test_1229) {
     GTUtilsProjectTreeView::rename(os, GTUtilsProjectTreeView::findIndex(os, "tub", secondDoc), "tub_2", GTGlobals::UseMouse);
 
     // 3. Select both sequence objects and export them as multiple alignment.
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "tub_1"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "tub_1"));
+    GTMouseDriver::click();
 
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE_AS_ALIGNMENT));
     GTUtilsDialog::waitForDialog(os, new ExportSequenceAsAlignmentFiller(os, sandBoxDir, "test_1229.aln", ExportSequenceAsAlignmentFiller::Clustalw, true));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -2750,17 +2756,17 @@ GUI_TEST_CLASS_DEFINITION(test_1252){
 
     GTWidget::click(os, GTWidget::findWidget(os, "getAnnotationsPushButton"));
     GTGlobals::sleep(500);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
 //    3. Delete found annotations from human_t1 annotations tree
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 //    4. Delete created annotations document
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__REMOVE_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(500);
 //check delition of annotation document
     GTUtilsProjectTreeView::findIndex(os, "Annotations", GTGlobals::FindOptions(false));
@@ -2769,14 +2775,14 @@ GUI_TEST_CLASS_DEFINITION(test_1252){
     GTWidget::click(os, GTWidget::findWidget(os, "getAnnotationsPushButton"));
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
     item = GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
 // delete annotations manually to cache MessageBox
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__REMOVE_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 //    Expected: pattern is found and annotation is stored in a new document
 
 }
@@ -2791,17 +2797,17 @@ GUI_TEST_CLASS_DEFINITION(test_1252_1){
     GTWidget::click(os, GTWidget::findWidget(os, "getAnnotationsPushButton"));
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
 //    3. Delete found annotations from human_t1 annotations tree
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 //    4. Delete created annotations document
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(500);
 //check delition of annotation document
     GTUtilsProjectTreeView::findIndex(os, "Annotations", GTGlobals::FindOptions(false));//checks inside
@@ -2809,14 +2815,14 @@ GUI_TEST_CLASS_DEFINITION(test_1252_1){
     GTWidget::click(os, GTWidget::findWidget(os, "getAnnotationsPushButton"));
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
     item = GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
 // delete annotations manually to cache MessageBox
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__REMOVE_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 //    Expected: pattern is found and annotation is stored in a new document
 }
 
@@ -2847,8 +2853,8 @@ GUI_TEST_CLASS_DEFINITION(test_1252_real) {
 
     QRect rect = tw->visualItemRect(tw->item(0, 1));
     QPoint globalP = tw->viewport()->mapToGlobal(rect.center());
-    GTMouseDriver::moveTo(os, globalP);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(globalP);
+    GTMouseDriver::click();
     GTGlobals::sleep(500);
     QComboBox* box = qobject_cast<QComboBox*>(tw->findChild<QComboBox*>());
 
@@ -2864,7 +2870,7 @@ GUI_TEST_CLASS_DEFINITION(test_1253){
 //    1. Open Find Pattern on the Options Panel
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep();
 //    2. Input any valid pattern
     GTUtilsOptionPanelSequenceView::enterPattern(os, "AAAAAAA", true);
@@ -2890,10 +2896,10 @@ GUI_TEST_CLASS_DEFINITION(test_1257){
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keySequence(os, ">S");
+    GTKeyboardDriver::keySequence(">S");
     GTGlobals::sleep();
 
     QWidget* prevButton = GTWidget::findWidget(os, "prevPushButton");
@@ -2910,16 +2916,16 @@ GUI_TEST_CLASS_DEFINITION(test_1259) {
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keySequence(os, ">S");
+    GTKeyboardDriver::keySequence(">S");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"], GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter, Qt::ControlModifier);
     GTGlobals::sleep();
-    GTKeyboardDriver::keySequence(os, "H");
+    GTKeyboardDriver::keySequence("H");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["back"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Backspace);
     GTGlobals::sleep();
 
     QTextEdit* textEdit = qobject_cast<QTextEdit*>(GTWidget::findWidget(os, "textPattern"));
@@ -2955,23 +2961,23 @@ GUI_TEST_CLASS_DEFINITION(test_1262) {
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
 
     //3. Delete created annotations document
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
+    GTMouseDriver::click(Qt::RightButton);
     //4. Click search again
 
     GTWidget::click(os, GTWidget::findWidget(os, "getAnnotationsPushButton"));
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
     GTUtilsTaskTreeView::waitTaskFinished(os);
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
 
     //delete new doc
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__REMOVE_SELECTED));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1263){
@@ -2989,15 +2995,15 @@ GUI_TEST_CLASS_DEFINITION(test_1263){
     QTreeWidgetItem* first = parent->child(0);
     QTreeWidgetItem* second = parent->child(1);
 //    5. Use context menu {Cloning->Create PCR product}
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, first));
-    GTMouseDriver::click(os);
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, second));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, first));
+    GTMouseDriver::click();
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, second));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Cloning"<<"Create PCR product"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 //    6. Press 'Ok'
     //TODO: complete after UGENE-4101 is fixed
 //    Excepted state: PCR product has been created
@@ -3054,7 +3060,7 @@ GUI_TEST_CLASS_DEFINITION(test_1274){
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    3. Click the cross button of the window to close it
-    GTKeyboardDriver::keyClick(os, 'w', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'w', Qt::ControlModifier);
 //    Expected state: UGENE not crashes
 }
 
@@ -3160,7 +3166,7 @@ GUI_TEST_CLASS_DEFINITION(test_1295) {
         void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
-            GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreemntDialogFiller(os));
+            GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreementDialogFiller(os));
 
             QComboBox *algorithmBox = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "algorithmBox", dialog));
             GTComboBox::setIndexWithText(os, algorithmBox, "MrBayes");
@@ -3221,8 +3227,8 @@ GUI_TEST_CLASS_DEFINITION(test_1299) {
     }
     QRect rect = tw->visualItemRect(tw->item(row, 1));
     QPoint globalP = tw->viewport()->mapToGlobal(rect.center());
-    GTMouseDriver::moveTo(os, globalP);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(globalP);
+    GTMouseDriver::click();
     GTGlobals::sleep(500);
     QComboBox* box = qobject_cast<QComboBox*>(tw->findChild<QComboBox*>());
 
@@ -3351,7 +3357,7 @@ GUI_TEST_CLASS_DEFINITION(test_1300_2) {
 //    Expected state: the sequecne view opens. There are two MSA Editors and one sequence view (active).
 //    5.1 document
     GTUtilsProjectTreeView::doubleClickItem(os, "murine.gb");
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     sequenceViewIsVisible = GTUtilsMdi::isAnyPartOfWindowVisible(os, "murine [s] NC_001363");
     CHECK_SET_ERR(sequenceViewIsVisible, "Sequence view is unexpectedly not visible");
@@ -3365,7 +3371,7 @@ GUI_TEST_CLASS_DEFINITION(test_1300_2) {
 //    5.2 sequence
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTUtilsProjectTreeView::doubleClickItem(os, "NC_001363");
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     sequenceViewIsVisible = GTUtilsMdi::isAnyPartOfWindowVisible(os, "murine [s] NC_001363");
     CHECK_SET_ERR(sequenceViewIsVisible, "Sequence view is unexpectedly not visible");
@@ -3379,7 +3385,7 @@ GUI_TEST_CLASS_DEFINITION(test_1300_2) {
 //    5.3 sequence
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTUtilsProjectTreeView::doubleClickItem(os, "NC_001363 features");
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     sequenceViewIsVisible = GTUtilsMdi::isAnyPartOfWindowVisible(os, "murine [s] NC_001363");
     CHECK_SET_ERR(sequenceViewIsVisible, "Sequence view is unexpectedly not visible");
@@ -3394,7 +3400,7 @@ GUI_TEST_CLASS_DEFINITION(test_1300_2) {
 //    Expected state: a popup menu is shown to select a MSA Editor to show. Select the first. There are two MSA Editors (the first one is active) and one sequence view.
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Activate view: COI [m] COI"));
     GTUtilsProjectTreeView::doubleClickItem(os, "COI");
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     sequenceViewIsVisible = GTUtilsMdi::isAnyPartOfWindowVisible(os, "murine [s] NC_001363");
     CHECK_SET_ERR(!sequenceViewIsVisible, "Sequence view is unexpectedly visible");
@@ -3419,7 +3425,7 @@ 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 LicenseAgreemntDialogFiller(os));
+            GTUtilsDialog::waitForDialog(os, new LicenseAgreementDialogFiller(os));
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
         }
     };
@@ -3614,8 +3620,8 @@ GUI_TEST_CLASS_DEFINITION(test_1324) {
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Search for TFBS with SITECON");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Search for TFBS with SITECON"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Search for TFBS with SITECON"));
+    GTMouseDriver::click();
     QString val;
 
 #if defined(Q_OS_LINUX) || defined (Q_OS_WIN)
@@ -3664,10 +3670,11 @@ public:
             CHECK_SET_ERR(actualPolicy == expectedPolicy, "size policy dont match");
             QSize prevSize = dialog->size();
             QPoint newBottomRight = QPoint(bottomRight.x() + 5, bottomRight.y() + 5);
-            GTMouseDriver::moveTo(os, bottomRight);
-            GTMouseDriver::press(os);
-            GTMouseDriver::moveTo(os, newBottomRight);
-            GTMouseDriver::release(os);
+            GTMouseDriver::moveTo(bottomRight);
+            GTMouseDriver::press();
+            GTMouseDriver::moveTo(newBottomRight);
+            GTMouseDriver::release();
+            GTThread::waitForMainThread();
             CHECK_SET_ERR(prevSize == dialog->size(), "size should not change");
             GTWidget::click(os, GTWidget::findButtonByText(os,"Cancel"));
         }
@@ -3733,9 +3740,9 @@ GUI_TEST_CLASS_DEFINITION(test_1342) {
             QAction *dataReadersAction = GTMenu::getMenuItem(os, activePopupMenu, "Data Readers", true);
             CHECK_SET_ERR(NULL == dataReadersAction, "Data Readers item is unexpectly found");
 
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Escape);
             GTGlobals::sleep(200);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Escape);
         }
     };
 
@@ -3744,8 +3751,8 @@ GUI_TEST_CLASS_DEFINITION(test_1342) {
     GTUtilsWorkflowDesigner::setCurrentTab(os, GTUtilsWorkflowDesigner::algoriths);
 
     // 2. print "mer" in line "Name filter"
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keySequence(os, "mer");
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
+    GTKeyboardDriver::keySequence("mer");
 
     // 3. use context menu at the edit field : Add element->Data readers->File lists
     // Expected : there is no "File list" element in the menu. UGENE doesn't crash
@@ -3764,7 +3771,7 @@ GUI_TEST_CLASS_DEFINITION(test_1347) {
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(3, 0));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep();
 
     QString clipboardText = GTClipboard::text(os);
@@ -3805,7 +3812,7 @@ GUI_TEST_CLASS_DEFINITION(test_1348) {
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "", "Remove element"));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Remove"));
     GTTreeWidget::click(os, treeItem);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(4000);
 
@@ -4000,7 +4007,7 @@ GUI_TEST_CLASS_DEFINITION(test_1386){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2) Modify it (e.g. insert a gap)
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(5,5));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
 //    3) Close the view of the document
     GTUtilsMdi::click( os, GTGlobals::Close );
 //    4) Select "Unload selected documents" for the document
@@ -4096,8 +4103,8 @@ GUI_TEST_CLASS_DEFINITION(test_1393) {
     // 3. Make sure that "Add document to project" checkbox is set and press "Export" button.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE_AS_ALIGNMENT));
     GTUtilsDialog::waitForDialog(os, new ExportSequenceAsAlignmentFiller(os, new ExportSeqsAsMsaScenario));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "trim_fa.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "trim_fa.fa"));
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state : New *.aln file appears in project view.Names of sequences in consensus area
@@ -4158,7 +4165,7 @@ GUI_TEST_CLASS_DEFINITION(test_1404) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Save sequence"));
     GTUtilsDialog::waitForDialog(os, new ExportSelectedSequenceFromAlignment(os, new ExportMsaToSeqScenario));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(5, 5));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1405) {
@@ -4237,7 +4244,7 @@ GUI_TEST_CLASS_DEFINITION(test_1409){
 
 //    3. Press F2 on the keyboard.
     GTUtilsDialog::waitForDialog(os, new EditAnnotationFiller(os, "CDS", "1042..2658"));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["f2"]);
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 //    Expected state: the "edit annotation" dialog had opened.
 }
@@ -4304,19 +4311,19 @@ GUI_TEST_CLASS_DEFINITION(test_1424) {
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 13, 10 ) );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["space"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Space );
     GTGlobals::sleep(200);
 
     GTUtilsMsaEditor::clickSequenceName(os, "Conocephalus_sp.");
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
     GTUtilsMsaEditor::undo(os);
 
     GTUtilsMsaEditor::clickSequenceName(os, "Conocephalus_sp.");
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
 
 
     GTUtilsMsaEditor::clickSequenceName(os, "Deracantha_deracantoides_EF540");
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
     GTUtilsMsaEditor::undo(os);
     GTUtilsMsaEditor::undo(os);
     GTUtilsMsaEditor::undo(os);
@@ -4349,8 +4356,8 @@ GUI_TEST_CLASS_DEFINITION(test_1426) {
     QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
     CHECK_SET_ERR(table,"tableView not found");
 
-    GTMouseDriver::moveTo(os,GTTableView::getCellPosition(os,table,1,0));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTableView::getCellPosition(os,table,1,0));
+    GTMouseDriver::click();
     GTGlobals::sleep(500);
 
     QLineEdit* line = qobject_cast<QLineEdit*>(table->findChild<QLineEdit*>());
@@ -4361,7 +4368,7 @@ GUI_TEST_CLASS_DEFINITION(test_1426) {
     GTGlobals::sleep(1000);
 #ifdef Q_OS_MAC
     GTGlobals::sleep();
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
 #endif
     CHECK_SET_ERR(GTWidget::findWidget(os, "addButton") != NULL, "addButton is hiden");
 
@@ -4388,18 +4395,18 @@ GUI_TEST_CLASS_DEFINITION(test_1428) {
 
     //2. Select the document and the sequence object itself in the Project View.
     QModelIndex docIdx = GTUtilsProjectTreeView::findIndex(os, "human_T1.fa", QModelIndex());
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, docIdx));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, docIdx));
+    GTMouseDriver::click();
     QModelIndex seqIdx = GTUtilsProjectTreeView::findIndex(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)", docIdx);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, seqIdx));
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, seqIdx));
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 
     //3. Use context menu {Export/Import->Export Sequences} and export sequence to any file.
     GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, sandBoxDir, "test_1428.fa"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os,  QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //Expected state: there is only one sequence in the file (it's the same as in human_t1.fa).
@@ -4508,7 +4515,7 @@ GUI_TEST_CLASS_DEFINITION(test_1434_1) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open find pattern option panel
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(200);
 
     //3. Use these settings :
@@ -4523,11 +4530,11 @@ GUI_TEST_CLASS_DEFINITION(test_1434_1) {
     GTComboBox::setIndexWithText(os, algorithmBox, "Regular expression");
 
     GTWidget::click(os, GTWidget::findWidget(os, "textPattern"));
-    GTKeyboardDriver::keySequence(os, "> header");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"], GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keySequence(os, "ATTCACCAAAGTTGAA");
-    GTKeyboardDriver::keyClick(os, '8', GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keySequence(os, "TGAAGGAAAAAATGCT");
+    GTKeyboardDriver::keySequence("> header");
+    GTKeyboardDriver::keyClick( Qt::Key_Enter, Qt::ControlModifier);
+    GTKeyboardDriver::keySequence("ATTCACCAAAGTTGAA");
+    GTKeyboardDriver::keyClick( '8', Qt::ShiftModifier);
+    GTKeyboardDriver::keySequence("TGAAGGAAAAAATGCT");
 
     GTUtilsOptionPanelSequenceView::setRegionType(os, "Custom region");
     GTLineEdit::setText(os, qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "editStart")), "1");
@@ -4544,7 +4551,7 @@ GUI_TEST_CLASS_DEFINITION(test_1434_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Open find pattern option panel
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(200);
 
     //3. Use these settings :
@@ -4559,17 +4566,17 @@ GUI_TEST_CLASS_DEFINITION(test_1434_2) {
     GTComboBox::setIndexWithText(os, algorithmBox, "Regular expression");
 
     GTWidget::click(os, GTWidget::findWidget(os, "textPattern"));
-    GTKeyboardDriver::keySequence(os, "ATTCACCAAAGTTGAA");
+    GTKeyboardDriver::keySequence("ATTCACCAAAGTTGAA");
     GTGlobals::sleep(200);
-    GTKeyboardDriver::keyClick(os, '8', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( '8', Qt::ShiftModifier);
     GTGlobals::sleep(200);
-    GTKeyboardDriver::keySequence(os, "TGAAGGAAAAAATGCT");
+    GTKeyboardDriver::keySequence("TGAAGGAAAAAATGCT");
     GTGlobals::sleep(200);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"], GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter, Qt::ControlModifier);
     GTGlobals::sleep(200);
-    GTKeyboardDriver::keyClick(os, ';');
+    GTKeyboardDriver::keyClick( ';');
     GTGlobals::sleep(200);
-    GTKeyboardDriver::keySequence(os, " comment");
+    GTKeyboardDriver::keySequence(" comment");
 
     GTUtilsOptionPanelSequenceView::setRegionType(os, "Custom region");
     GTLineEdit::setText(os, qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "editStart")), "1");
@@ -4592,7 +4599,7 @@ GUI_TEST_CLASS_DEFINITION(test_1446){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::click(os, "COI.aln");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
 //    Expected state: none of sequences starts from (translated), only sequence names have (translated) in the end
@@ -4623,7 +4630,7 @@ GUI_TEST_CLASS_DEFINITION(test_1455) {
 
     //3. Close WD
     GTUtilsMdi::click( os, GTGlobals::Close );
-    GTMouseDriver::click( os );
+    GTMouseDriver::click();
     //4. Reopen the scheme's file
     //   Expected result: scheme is loaded completely without any error messages in log
     GTFileDialog::openFile(os, sandBoxDir + "dump_sequence.uwl");
@@ -4867,7 +4874,7 @@ GUI_TEST_CLASS_DEFINITION(test_1445) {
     CHECK_SET_ERR(numSelectedSequences == 1, "There is no selection in MSA, but expected");
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "Remove sequence", GTGlobals::UseMouse));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1461_1) {
@@ -5003,7 +5010,7 @@ GUI_TEST_CLASS_DEFINITION(test_1491) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1497) {
-    GTKeyboardDriver::keyClick(os, '3', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '3', Qt::AltModifier);
     uiLog.error("log should contain some text for test 1497");
 
     // 1. Create or open some scheme in WD.
@@ -5011,18 +5018,18 @@ GUI_TEST_CLASS_DEFINITION(test_1497) {
     GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
 
     // 2. Select a few items(elements, links) in the scheme.
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read alignment"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read alignment"));
+    GTMouseDriver::click();
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Align with MUSCLE"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Align with MUSCLE"));
+    GTMouseDriver::click();
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Write alignment"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Write alignment"));
+    GTMouseDriver::click();
 
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 
     // 3. Try to copy something from the log widget to the clipboard by hotkey(Ctrl + C).
     // Expected state : you've got in the clipboard selected text from the log widget.
@@ -5031,9 +5038,9 @@ GUI_TEST_CLASS_DEFINITION(test_1497) {
     QWidget *logView = GTWidget::findWidget(os, "dock_log_view");
     GTWidget::click(os, logView);
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     const QString clipboardContent = GTClipboard::text(os);
 
@@ -5051,7 +5058,7 @@ GUI_TEST_CLASS_DEFINITION(test_1499) {
         void run(HI::GUITestOpStatus &os) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
-            GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreemntDialogFiller(os));
+            GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreementDialogFiller(os));
 
             QComboBox *algorithmBox = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "algorithmBox", dialog));
             GTComboBox::setIndexWithText(os, algorithmBox, "MrBayes");
@@ -5085,12 +5092,12 @@ GUI_TEST_CLASS_DEFINITION(test_1499) {
 
     // 6) Click the "Sort alignment by tree" button on the Tree View toolbar.
     // = > UGENE does not crash.
-    GTMouseDriver::moveTo(os, GTUtilsMsaEditor::getSequenceNameRect(os, "Zychia_baranovi").center());
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsMsaEditor::getSequenceNameRect(os, "Zychia_baranovi").center());
+    GTMouseDriver::click();
     GTGlobals::sleep(1000);
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, GTUtilsMsaEditor::getSequenceNameRect(os, "Montana_montana").center());
-    GTMouseDriver::release(os);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(GTUtilsMsaEditor::getSequenceNameRect(os, "Montana_montana").center());
+    GTMouseDriver::release();
 
     const QStringList msaSequences1 = GTUtilsMSAEditorSequenceArea::getNameList(os);
     CHECK_SET_ERR(msaSequences1 != msaSequences0, "MSA is not changed");
@@ -5128,7 +5135,7 @@ GUI_TEST_CLASS_DEFINITION(test_1506){
 //    6) Zoom in the tree using mouse scroll.
     GTWidget::click(os, GTWidget::findWidget(os, "treeView"));
     for(int i = 0; i<10; i++){
-        GTMouseDriver::scroll(os, 1);
+        GTMouseDriver::scroll(1);
         GTGlobals::sleep(300);
     }
 //    Expected: UGENE does not crash.
@@ -5146,6 +5153,7 @@ GUI_TEST_CLASS_DEFINITION(test_1508) {
     GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os, MuscleDialogFiller::Refine));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseMouse));
     GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 }
 
@@ -5171,10 +5179,11 @@ GUI_TEST_CLASS_DEFINITION(test_1510) {
     GTGlobals::sleep(500);
 
     WorkflowProcessItem* readSeq = GTUtilsWorkflowDesigner::getWorker(os, "Read Sequence 1");
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence 1"));
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(0, -200));
-    GTMouseDriver::release(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence 1"));
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(0, -200));
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
     CHECK_SET_ERR(readSeq != NULL, "\'Read Sequence 1\' element not found");
     GTGlobals::sleep(500);
     GTUtilsWorkflowDesigner::connect(os, readSeq, toBam);
@@ -5214,7 +5223,7 @@ GUI_TEST_CLASS_DEFINITION(test_1511) {
     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(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
     GTGlobals::sleep(200);
     numSelectedSequences = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
     CHECK_SET_ERR(numSelectedSequences == 0, "There is selection in MSA, but not expected (check #1)");
@@ -5222,7 +5231,7 @@ GUI_TEST_CLASS_DEFINITION(test_1511) {
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5,2), QPoint(-5,6));
     numSelectedSequences = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
     CHECK_SET_ERR(numSelectedSequences == 5, "There is no selection in MSA, but expected (check #2)");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
     GTGlobals::sleep(200);
     numSelectedSequences = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
     CHECK_SET_ERR(numSelectedSequences == 0, "There is selection in MSA, but not expected(check #2)");
@@ -5347,13 +5356,13 @@ GUI_TEST_CLASS_DEFINITION(test_1528){
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Make the "chrM.sorted.bam.ugenedb" read-only
-    PermissionsSetter p;
+
 //    3. Open "chrM.fa" in UGENE
 
 //    4. Drag and drop "chrM.fa" sequence object to the assembly
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "This action requires changing file:"));
     GTUtilsProjectTreeView::click(os, "chrM", "chrM.fa");
-    p.setReadOnlyFlag(os, sandBoxDir + "chrM.sorted.bam.ugenedb");
+    GTFile::setReadOnly(os, sandBoxDir + "chrM.sorted.bam.ugenedb");
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Set reference");
 
 //    Expected state: This action requires changing file:
@@ -5374,7 +5383,7 @@ GUI_TEST_CLASS_DEFINITION(test_1529) {
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(10, 10));
     GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
 
@@ -5475,8 +5484,8 @@ GUI_TEST_CLASS_DEFINITION(test_1551) {
 //    GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os));
     class Scenario : public CustomScenario {
         void run(HI::GUITestOpStatus &os) {
-            GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() - QPoint(5, 0));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() - QPoint(5, 0));
+            GTMouseDriver::click();
             QWidget *contextMenu = QApplication::activePopupWidget();
             CHECK_SET_ERR(NULL == contextMenu, "There is an unexpected context menu");
         }
@@ -5487,7 +5496,7 @@ GUI_TEST_CLASS_DEFINITION(test_1551) {
 
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new PopupChecker(os, new Scenario));
     GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new RenameSequenceFiller(os, "test_1551"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 }
 
@@ -5513,8 +5522,8 @@ GUI_TEST_CLASS_DEFINITION(test_1554) {
 
 //    5. Click somewhere on the tree view to close menu.
 //    Expected state: The context menu closes, there are not any another menus.
-    GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() - QPoint(5, 0));
-    GTMouseDriver::click(os, Qt::LeftButton);
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() - QPoint(5, 0));
+    GTMouseDriver::click(Qt::LeftButton);
     contextMenu = QApplication::activePopupWidget();
     CHECK_SET_ERR(NULL == contextMenu, "There is an unexpected context menu");
 }
@@ -5670,11 +5679,11 @@ GUI_TEST_CLASS_DEFINITION(test_1575) {
 
 //    3.1 Insert gap by pressing SPACE.
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 10));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::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(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText == "-\n-\n-", "Unexpected selection: " + clipboardText);
 
@@ -5684,7 +5693,7 @@ GUI_TEST_CLASS_DEFINITION(test_1575) {
 
 //    Expected state: all sequences in the group are changed simultaneously.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2, 10), QPoint(2, 12));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText == "-\n-\n-", "Unexpected selection 2: " + clipboardText);
 }
@@ -5775,7 +5784,7 @@ GUI_TEST_CLASS_DEFINITION(test_1585) {
 
     // 3. Select a sequence area including collapsed rows, sequences above and below them.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(3, 9), QPoint(10, 12));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
 
     const QString selection1 = GTClipboard::text(os);
@@ -5783,25 +5792,27 @@ GUI_TEST_CLASS_DEFINITION(test_1585) {
     // 4. Shift selected region.
     // Expected state : all sequences shifted simultaneously.If group is half - selected, the unselected sequences shifts too.
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(7, 10));
-    GTMouseDriver::press(os);
+    GTMouseDriver::press();
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(10, 10));
-    GTMouseDriver::release(os);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 
     GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(6, 9), QPoint(13, 12), selection1);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 
     GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(os, "Conocephalus_discolor");
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(6, 9), QPoint(11, 10));
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(9, 9));
-    GTMouseDriver::press(os);
+    GTMouseDriver::press();
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(11, 9));
-    GTMouseDriver::release(os);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 
     GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(8, 9), QPoint(13, 10), "GTCTAT\nGCTTAT");
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(6, 11), QPoint(14, 12));
     GTUtilsMSAEditorSequenceArea::checkSelection(os, QPoint(6, 11), QPoint(14, 12), "--GCTTATT\n--GCTTATT");
@@ -5820,7 +5831,7 @@ GUI_TEST_CLASS_DEFINITION(test_1586) {
     GTGlobals::sleep();
     //Save the initial content
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 13, 10 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString initialContent = GTClipboard::text( os );
 
@@ -5831,15 +5842,15 @@ GUI_TEST_CLASS_DEFINITION(test_1586) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMsaEditor::undo(os);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     //Deselect alignment
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(15, 15));
-    GTMouseDriver::click( os );
+    GTMouseDriver::click();
 
     //Check the undone state
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 13, 10 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString undoneContent = GTClipboard::text( os );
     CHECK_SET_ERR( undoneContent == initialContent,
@@ -5915,8 +5926,8 @@ GUI_TEST_CLASS_DEFINITION(test_1588) {
 
 
 
-//    GTMouseDriver::moveTo(os,dashboard->mapToGlobal(result.geometry().center()));
-//    GTMouseDriver::click(os);
+//    GTMouseDriver::moveTo(dashboard->mapToGlobal(result.geometry().center()));
+//    GTMouseDriver::click();
     GTGlobals::sleep(5000);
 }
 
@@ -5972,7 +5983,7 @@ GUI_TEST_CLASS_DEFINITION( test_1595 ){
     QListWidget* items = GTWidget::findExactWidget<QListWidget*>(os, "itemsArea", datasetWidget);
     GTListWidget::click(os, items, "sars.gb");
 //    6) Press Delete button.
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(1000);
 //    Expected: the selected files has been removed from the list.
     GTUtilsWorkflowDesigner::click(os, "Read Sequence");
@@ -5988,9 +5999,9 @@ GUI_TEST_CLASS_DEFINITION( test_1597 ) {
 
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keySequence(os, "ACAATGTATGCCTCTTGGTTTCTTCTATC");
+    GTKeyboardDriver::keySequence("ACAATGTATGCCTCTTGGTTTCTTCTATC");
 
     QLabel *obj = qobject_cast<QLabel*>(GTWidget::findWidget(os, "ArrowHeader_Save annotation(s) to"));
     GTWidget::click(os, obj);
@@ -5998,9 +6009,9 @@ GUI_TEST_CLASS_DEFINITION( test_1597 ) {
     QRadioButton *newTable = qobject_cast<QRadioButton *>(GTWidget::findWidget(os, "rbCreateNewTable"));
     GTWidget::click(os, newTable);
 
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keySequence(os, "ACGTCGTCGTCGTCAATGTATGCCTCTTGGTTTCTTCTATC");
+    GTKeyboardDriver::keySequence("ACGTCGTCGTCGTCAATGTATGCCTCTTGGTTTCTTCTATC");
 }
 
 GUI_TEST_CLASS_DEFINITION( test_1600_1 ){
@@ -6115,7 +6126,7 @@ GUI_TEST_CLASS_DEFINITION( test_1600_5 ){
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-5, 1));
 //    4. Use the context menu in the name list area { Edit -> Remove sequence }
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_EDIT" << "Remove sequence"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 //    Expected state: The chosen sequence has been removed from alignment, collapsing mode has been switched on
     QStringList names = GTUtilsMSAEditorSequenceArea::getNameList(os);
     int num = names.size();
@@ -6166,7 +6177,7 @@ GUI_TEST_CLASS_DEFINITION( test_1600_7 ){
 
 //    3. Select some area in MSA by left mouse button and press "Space" button
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,0));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    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);
@@ -6194,7 +6205,7 @@ GUI_TEST_CLASS_DEFINITION( test_1600_8 ){
 
 //    3. Select some area in MSA by left mouse button, then press "Del" button
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,0));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 //    Expected state: Selected area has been removed, collapsible item has retained
     QString seq = GTUtilsMSAEditorSequenceArea::getSequenceData(os, "Phaneroptera_falcata");
     CHECK_SET_ERR(seq == "AG-CTTCTTTTAA-", "unexpected sequence1: " + seq);
@@ -6221,8 +6232,8 @@ GUI_TEST_CLASS_DEFINITION( test_1603 ) {
 
     GTUtilsDocument::unloadDocument(os, docName, false);
     GTGlobals::sleep();
-    GTMouseDriver::moveTo( os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
+    GTMouseDriver::doubleClick();
     //TODO: check the expected state
 }
 
@@ -6326,12 +6337,12 @@ GUI_TEST_CLASS_DEFINITION( test_1622 )
 
     // 2. Save the initial content
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 17 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString initialContent = GTClipboard::text( os );
 
     // 2.1. Remove selection
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
     GTGlobals::sleep(200);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( ) );
 
@@ -6349,7 +6360,7 @@ GUI_TEST_CLASS_DEFINITION( test_1622 )
 
     // 7. Check the undone state
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 17 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString undoneContent = GTClipboard::text( os );
     CHECK_SET_ERR( undoneContent == initialContent,
@@ -6467,17 +6478,17 @@ GUI_TEST_CLASS_DEFINITION(test_1640) {
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(4, 3), QPoint(4, 3));
 
     //3. Press ctrl+left arrow to remove the selection.
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["left"], GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Left, Qt::ControlModifier);
 
     //4. Press and hold a bit shift+right arrow.
-    //GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
+    //Qt::Key_Shift
     for (int i=0; i<12; i++) {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["right"], GTKeyboardDriver::key["shift"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Right, Qt::ShiftModifier);
     }
-    //GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    //GTKeyboardDriver::keyRelease(Qt::Key_Shift);
 
     //Expected state: all sequences of each selected column are selected
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     QString chars = GTClipboard::text(os);
     CHECK_SET_ERR(chars == "TCAGTCTATTAA", "Wrong selection: " + chars);
 }
@@ -6547,10 +6558,10 @@ GUI_TEST_CLASS_DEFINITION(test_1645) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
     GTUtilsProject::openFiles(os, testDir + "_common_data/fasta/base_ext_nucl_all_symb.fa");
     GTGlobals::sleep();
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "base_ext_nucl_all_symb.fa"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "base_ext_nucl_all_symb.fa"));
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__UNLOAD_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     CHECK_SET_ERR(!GTUtilsDocument::isDocumentLoaded(os, "base_ext_nucl_all_symb.fa"), "Document should't be loaded");
 }
 
@@ -6610,24 +6621,24 @@ GUI_TEST_CLASS_DEFINITION( test_1654 ) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 15));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 15));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
 
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
     GTGlobals::sleep(5000);
 
     QWidget *createAnnotationsButton = GTWidget::findWidget(os, "getAnnotationsPushButton");
@@ -6677,16 +6688,16 @@ GUI_TEST_CLASS_DEFINITION( test_1660 ) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 15));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 15));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
 
     //TODO setSearchInregion method checking
 }
@@ -6696,11 +6707,11 @@ GUI_TEST_CLASS_DEFINITION(test_1661) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Open find pattern option panel
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(500);
 
     // 3. Enter pattern ACAATGTATGCCTCTTGGTTTCTTCTATC
-    GTKeyboardDriver::keySequence(os, "ACAATGTATGCCTCTTGGTTTCTTCTATC");
+    GTKeyboardDriver::keySequence("ACAATGTATGCCTCTTGGTTTCTTCTATC");
 
     // 4. Use settings : Region - custom region; 1 - 10000.
     GTUtilsOptionPanelSequenceView::setRegionType(os, "Custom region");
@@ -6754,7 +6765,7 @@ GUI_TEST_CLASS_DEFINITION(test_1664){
 //    2. Select something in the sequence area.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(5,5));
 //    3. Try to modify the selection with SHIFT+arrows.
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["right"], GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Right, Qt::ShiftModifier);
     GTGlobals::sleep();
 //    Expected state: selection changes its size.
     QRect expected = QRect(0, 0, 7, 6);
@@ -6873,10 +6884,10 @@ GUI_TEST_CLASS_DEFINITION(test_1673_2) {
     isTabOpened = GTUtilsOptionPanelMsa::isTabOpened(os, GTUtilsOptionPanelMsa::Statistics);
     CHECK_SET_ERR(isTabOpened, "The 'Statictics' tab is unexpectedly closed");
 
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["Ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
     GTUtilsOptionPanelMsa::toggleTab(os, GTUtilsOptionPanelMsa::General);
     GTUtilsOptionPanelMsa::toggleTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["Ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 
     isTabOpened = GTUtilsOptionPanelMsa::isTabOpened(os, GTUtilsOptionPanelMsa::General);
     CHECK_SET_ERR(!isTabOpened, "The 'General' tab is unexpectedly opened");
@@ -6891,7 +6902,7 @@ GUI_TEST_CLASS_DEFINITION(test_1673_3) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Press "Ctrl+F"
     //Expected result: "Search in Sequence" tab has been opened, the pattern field is in focus
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(500);
 
     QWidget* wgt = QApplication::focusWidget();
@@ -6908,7 +6919,7 @@ GUI_TEST_CLASS_DEFINITION(test_1673_4) {
     GTWidget::click(os, GTWidget::findWidget(os, "OP_ANNOT_HIGHLIGHT"));
     GTGlobals::sleep(500);
     GTWidget::findWidget(os, "prevAnnotationButton");
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(500);
 
     //Expected result: "Search in Sequence" tab has been opened, other tabs have been closed
@@ -6925,7 +6936,7 @@ GUI_TEST_CLASS_DEFINITION(test_1673_5){
 //    2. Open Sequence View, "Search in Sequence" tab, remove focus from the pattern field, press "Ctrl+F"
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(500);
 //    Expected result: "Search in Sequence" tab is still opened, the pattern field is in focus
     QString name = QApplication::focusWidget()->objectName();
@@ -7008,11 +7019,11 @@ GUI_TEST_CLASS_DEFINITION(test_1680) {
 //    3. Press "Shift"+"Arrow Up" a few times, then "Shift"+"Arrow Down" a few times
 //    Expected state: The selection changes on every keystroke, for "Arrow Up" it grows to
 //    the top of sequences list, for "Arrow Down" it does to the bottom
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
 
     int expectedSelectionSize = 1;
     for (int i = 0; i < 9; i++) {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["up"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Up);
         expectedSelectionSize++;
         const int currentSelectionSize = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
         CHECK_SET_ERR(expectedSelectionSize == currentSelectionSize, QString("An unexpected selection size: expect %1, got %2").arg(expectedSelectionSize).arg(currentSelectionSize));
@@ -7020,14 +7031,14 @@ GUI_TEST_CLASS_DEFINITION(test_1680) {
     }
 
     {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["up"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Up);
         const int currentSelectionSize = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
         CHECK_SET_ERR(10 == currentSelectionSize, QString("An unexpected selection size: expect %1, got %2").arg(10).arg(currentSelectionSize));
         GTGlobals::sleep(100);
     }
 
     for (int i = 0; i < 9; i++) {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Down);
         expectedSelectionSize--;
         const int currentSelectionSize = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
         CHECK_SET_ERR(expectedSelectionSize == currentSelectionSize, QString("An unexpected selection size: expect %1, got %2").arg(expectedSelectionSize).arg(currentSelectionSize));
@@ -7035,7 +7046,7 @@ GUI_TEST_CLASS_DEFINITION(test_1680) {
     }
 
     for (int i = 0; i < 8; i++) {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Down);
         expectedSelectionSize++;
         const int currentSelectionSize = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
         CHECK_SET_ERR(expectedSelectionSize == currentSelectionSize, QString("An unexpected selection size: expect %1, got %2").arg(expectedSelectionSize).arg(currentSelectionSize));
@@ -7043,20 +7054,20 @@ GUI_TEST_CLASS_DEFINITION(test_1680) {
     }
 
     {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Down);
         const int currentSelectionSize = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
         CHECK_SET_ERR(9 == currentSelectionSize, QString("An unexpected selection size: expect %1, got %2").arg(9).arg(currentSelectionSize));
         GTGlobals::sleep(100);
     }
 
     {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["up"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Up);
         const int currentSelectionSize = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
         CHECK_SET_ERR(8 == currentSelectionSize, QString("An unexpected selection size: expect %1, got %2").arg(8).arg(currentSelectionSize));
         GTGlobals::sleep(100);
     }
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Shift);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1681){
@@ -7353,8 +7364,8 @@ GUI_TEST_CLASS_DEFINITION( test_1701 ) {
     GTGlobals::sleep();
     const QPixmap before = GTWidget::getPixmap(os, pdb2);
 
-    GTMouseDriver::moveTo( os, GTUtilsProjectTreeView::getItemCenter(os, "1A5H.pdb"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1A5H.pdb"));
+    GTMouseDriver::doubleClick();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<< "Render Style"<< "Ball-and-Stick"));
     GTMenu::showContextMenu(os, pdb1);
@@ -7379,18 +7390,18 @@ GUI_TEST_CLASS_DEFINITION( test_1703 )
     GTGlobals::sleep(200);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( 0, 6, 12, 1 ) );
 
-    GTKeyboardDriver::keyPress(os,GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
     // 3. Select the upper row
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["up"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Up );
     GTGlobals::sleep(500);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( 0, 5, 12, 2 ) );
 
     // 4. Select the bottom row
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["down"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Down );
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["down"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Down );
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyRelease(os,GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( 0, 6, 12, 2 ) );
 }
 
@@ -7413,7 +7424,6 @@ GUI_TEST_CLASS_DEFINITION( test_1704 ){
     GTFileDialog::openFile(os, sandBoxDir, "1704_exported.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::doubleClickItem(os, "1704_exported.gb");
-    GTGlobals::sleep(1000);
 //    Expected state: all the annotations of the new file are identical to annotations of the old file
     GTUtilsAnnotationsTreeView::findItem(os, "hmm_signal  (0, 27)");
 //    Bug state: only the first annotations without qualifiers is opened
@@ -7425,7 +7435,7 @@ GUI_TEST_CLASS_DEFINITION(test_1708){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(9,1));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString initAln = GTClipboard::text(os);
 
@@ -7440,7 +7450,7 @@ GUI_TEST_CLASS_DEFINITION(test_1708){
 
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(9,1));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     QString changedAln = GTClipboard::text(os);
     CHECK_SET_ERR(changedAln==expectedAln, "Unexpected alignment\n" + changedAln);
@@ -7451,7 +7461,7 @@ GUI_TEST_CLASS_DEFINITION(test_1708){
     GTWidget::click(os,undo);
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(9,1));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(500);
     changedAln = GTClipboard::text(os);
 
@@ -7550,7 +7560,7 @@ GUI_TEST_CLASS_DEFINITION(test_1720){
 
     GTGlobals::sleep(8000);
 //4. Fill field "Resource ID" with value D11266. Click "OK"
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "D11266.gb"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "D11266.gb"));
     GTUtilsLog::check(os,l);
 //Expected state: project view with document "D11266.gb", no error messages in log appear
 }
@@ -7595,11 +7605,11 @@ GUI_TEST_CLASS_DEFINITION(test_1756){
 */
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Collect Motifs with SeqPos");
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Collect Motifs with SeqPos"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Collect Motifs with SeqPos"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setParameter(os, "Motif database", QStringList(), GTUtilsWorkflowDesigner::ComboChecks);
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Collect Motifs with SeqPos"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Collect Motifs with SeqPos"));
+    GTMouseDriver::click();
 
     GTUtilsDialog::waitForDialog( os, new MessageBoxDialogFiller( os, QMessageBox::Ok,
         "Please fix issues listed in the error list (located under workflow)."));
@@ -7646,12 +7656,12 @@ GUI_TEST_CLASS_DEFINITION(test_1733){
 
     GTUtilsWorkflowDesigner::addSample(os, "Call variants with SAMtools");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "samples/Assembly/", "chrM.sam");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "samples/Assembly/", "chrM.fa");
 
 }
@@ -7744,12 +7754,12 @@ GUI_TEST_CLASS_DEFINITION(test_1738){
 
     GTUtilsWorkflowDesigner::addSample(os, "Call variants with SAMtools");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bam/", "Mycobacterium.sorted.bam");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/fasta/", "Mycobacterium.fna");
 
     GTWidget::click(os,GTAction::button(os,"Run workflow"));
@@ -7985,8 +7995,8 @@ GUI_TEST_CLASS_DEFINITION(test_1784){
     //2. Export it as alignment
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE_AS_ALIGNMENT));
     GTUtilsDialog::waitForDialog(os, new ExportSequenceAsAlignmentFiller(os, testDir + "_common_data/scenarios/sandbox", "test_1784.aln", ExportSequenceAsAlignmentFiller::Clustalw, true));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
     //3. Drag and drop one more murine sequence object to the alignment
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "murine.gb", "NC_001363"));
@@ -7996,11 +8006,11 @@ GUI_TEST_CLASS_DEFINITION(test_1784){
     //4. Select the first sequence as reference
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0,0));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "set_seq_as_reference"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0,1));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "set_seq_as_reference"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     //Expected state: The only selected sequence is the reference.
 }
 
@@ -8052,11 +8062,11 @@ GUI_TEST_CLASS_DEFINITION(test_1808) {
     GTUtilsWorkflowDesigner::connect(os, read, write);
 
     // 3.Select any input and output file
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Annotations"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Annotations"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "samples/Genbank", "sars.gb");
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Write Annotations"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Write Annotations"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", outputFilePath, GTUtilsWorkflowDesigner::textValue);
 
     // 4.Validate schema
@@ -8099,7 +8109,7 @@ GUI_TEST_CLASS_DEFINITION( test_1821 ) {
 
     //5. Close WD
     GTUtilsMdi::click( os, GTGlobals::Close );
-    GTMouseDriver::click( os );
+    GTMouseDriver::click();
 
     //6. Open the file containing the saved scheme using "Open" button
     GTFileDialog::openFile( os, workflowOutputDirPath, "test.uwl" );
@@ -8117,11 +8127,11 @@ GUI_TEST_CLASS_DEFINITION(test_1831) {
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Align with MUSCLE"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Align with MUSCLE"));
+    GTMouseDriver::doubleClick();
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Write alignment"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Write alignment"));
+    GTMouseDriver::doubleClick();
 
     CHECK_SET_ERR(!GTUtilsWorkflowDesigner::isWorkerExtended(os, "Align with MUSCLE"), "\"Align with MUSCLE\" unexpectedly has extended style");
     CHECK_SET_ERR(!GTUtilsWorkflowDesigner::isWorkerExtended(os, "Write alignment"), "\"Write alignment\" unexpectedly has extended style");
@@ -8135,7 +8145,7 @@ GUI_TEST_CLASS_DEFINITION(test_1831) {
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Save workflow", GTGlobals::UseKey);
 
     GTUtilsMdi::click(os, GTGlobals::Close);
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 
     // 3) Reopen UGENE WD.
     GTFileDialog::openFile(os, workflowOutputDirPath, "test.uwl");
@@ -8201,14 +8211,14 @@ GUI_TEST_CLASS_DEFINITION( test_1859 ) {
 
     // 3) Set output file
 
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, annWriterName ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, annWriterName ) );
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setParameter( os, "Output file", outputFilePath,
         GTUtilsWorkflowDesigner::textValue );
 
     // 4) Set input file
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, annReaderName ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, annReaderName ) );
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile( os, dataDir + "samples/Genbank", "sars.gb" );
 
     GTLogTracer lt;
@@ -8218,8 +8228,7 @@ GUI_TEST_CLASS_DEFINITION( test_1859 ) {
     GTGlobals::sleep( );
 
     // 6) Block file for writing
-    PermissionsSetter p;
-    p.setReadOnly(os, outputFilePath);
+    GTFile::setReadOnly(os, outputFilePath);
 
     // 7) Run workflow again
     GTWidget::click( os,GTAction::button( os,"Run workflow" ) );
@@ -8247,11 +8256,11 @@ GUI_TEST_CLASS_DEFINITION(test_1860) {
 
     //4) Try to set output file
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, textWriterName));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, textWriterName));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", "test", GTUtilsWorkflowDesigner::textValue );
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, textReaderName));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, textReaderName));
+    GTMouseDriver::click();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1865) {
@@ -8263,8 +8272,8 @@ GUI_TEST_CLASS_DEFINITION(test_1865) {
     //2) Add elements: "Write sequence"
     GTUtilsWorkflowDesigner::addAlgorithm( os, sequenceWriterName);
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, sequenceWriterName));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, sequenceWriterName));
+    GTMouseDriver::click();
 
     }
 
@@ -8282,17 +8291,17 @@ GUI_TEST_CLASS_DEFINITION( test_1883 ){
 // 3. Use context menu: "Edit -> Replace selected rows with complement" or "reverse" or "reverse-complement"
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT
         << "replace_selected_rows_with_reverse") );
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 // Expected state: the bases in the selected area were replaced accordingly to the chosen variant
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     QString selectionContent = GTClipboard::text( os );
     CHECK_SET_ERR( "AATTATTAGACT" == selectionContent, "MSA changing is failed" );
 // 4. Press "Ctrl + Z"
-    GTKeyboardDriver::keyClick( os, 'z', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('z', Qt::ControlModifier );
     GTGlobals::sleep(200);
 // Expected result: all rows in the selection were restored
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     selectionContent = GTClipboard::text( os );
     CHECK_SET_ERR( "TCAGATTATTAA" == selectionContent, "MSA changing is failed" );
@@ -8314,10 +8323,10 @@ GUI_TEST_CLASS_DEFINITION( test_1884 )
 
     // 3. Select all the upper rows and make some extra "selection"
     const int extraUpperSelectionCount = 3;
-    GTKeyboardDriver::keyPress( os, GTKeyboardDriver::key["shift"] );
+    GTKeyboardDriver::keyPress(Qt::Key_Shift );
     GTGlobals::sleep(2000);
     for ( int i = 0; i < extraUpperSelectionCount; ++i ) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["up"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Up );
         GTGlobals::sleep(200);
     }
     const int upperSequencesCount = 4;
@@ -8327,12 +8336,12 @@ GUI_TEST_CLASS_DEFINITION( test_1884 )
     // 4. Decrease the selection
     const int deselectionCount = extraUpperSelectionCount - 1;
     for ( int i = 0; i < deselectionCount; ++i ) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["down"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Down );
         GTGlobals::sleep(200);
     }
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( 0, startRowNumber-1,
         alignmentLength, upperSequencesCount - deselectionCount ) );
-    GTKeyboardDriver::keyRelease( os, GTKeyboardDriver::key["shift"] );
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift );
 }
 
 GUI_TEST_CLASS_DEFINITION( test_1886_1 )
@@ -8347,12 +8356,12 @@ GUI_TEST_CLASS_DEFINITION( test_1886_1 )
     // 3. Shift the region but don't release left mouse button
     const QPoint mouseDragPosition( 7, 7 );
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition );
-    GTMouseDriver::press( os );
+    GTMouseDriver::press();
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition + QPoint( 3, 0 ) );
 
     // 4. Call context menu
     GTUtilsDialog::waitForDialog( os, new GTUtilsEscClicker( os, "msa sequence area context menu" ) );
-    GTMouseDriver::click( os, Qt::RightButton );
+    GTMouseDriver::click(Qt::RightButton );
     GTGlobals::sleep( 200 );
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( QPoint( 8, 4 ), QPoint( 13, 12 ) ) );
 }
@@ -8369,7 +8378,7 @@ GUI_TEST_CLASS_DEFINITION( test_1886_2 )
     // 3. Shift the region but don't release left mouse button
     const QPoint mouseDragPosition( 7, 7 );
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition );
-    GTMouseDriver::press( os );
+    GTMouseDriver::press();
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition + QPoint( 1, 0 ) );
     GTGlobals::sleep(500);
     GTUtilsMSAEditorSequenceArea::moveTo(os, mouseDragPosition + QPoint(2, 0));
@@ -8379,10 +8388,10 @@ GUI_TEST_CLASS_DEFINITION( test_1886_2 )
     // 4. Replace selected rows with reverse
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT
         << "replace_selected_rows_with_reverse") );
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     // 5. Obtain selection
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text( os );
     CHECK_SET_ERR( "--TGAC\n--TGAT\n--AGAC\n--AGAT\n--AGAT\n"
@@ -8401,7 +8410,7 @@ GUI_TEST_CLASS_DEFINITION( test_1897 ) {
     //4) Choose Highlighting/Gaps action from context-menu
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList( ) << "Highlighting"
         << "Gaps" ) );
-    GTMouseDriver::click( os, Qt::RightButton );
+    GTMouseDriver::click(Qt::RightButton );
 
     //5) Look at Hightlighting/Gaps action again
     QAction *action = GTAction::findActionByText( os, "Gaps" );
@@ -8417,12 +8426,12 @@ GUI_TEST_CLASS_DEFINITION(test_1908){
 
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addSample(os, "Call variants with SAMtools");
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "samples/Assembly/", "chrM.sam");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "samples/Assembly/", "chrM.fa");
 
 }
@@ -8485,12 +8494,12 @@ GUI_TEST_CLASS_DEFINITION( test_1919 )
 
     GTUtilsWorkflowDesigner::connect(os, fileList, fileConversion);
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "File List"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "File List"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bam", "scerevisiae.bam");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "File Format Conversion"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "File Format Conversion"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setParameter(os, "Document format", 2, GTUtilsWorkflowDesigner::comboValue);
 
     // add setting source url in input data
@@ -8503,9 +8512,10 @@ GUI_TEST_CLASS_DEFINITION( test_1919 )
 GUI_TEST_CLASS_DEFINITION( test_1921 )
 {
 //    1. Click rapidly on the "Show/hide log" button several (20) times (or use the Alt+3 hotkey).
+    Q_UNUSED(os);
     GTGlobals::sleep(2000);
     for (int i = 0; i < 20; i++) {
-        GTKeyboardDriver::keyClick(os, '3', GTKeyboardDriver::key["alt"]);
+        GTKeyboardDriver::keyClick( '3', Qt::AltModifier);
         GTGlobals::sleep(20);
     }
 //    Expected state: UGENE not crashes.
@@ -8587,7 +8597,7 @@ GUI_TEST_CLASS_DEFINITION(test_1984){
 GUI_TEST_CLASS_DEFINITION(test_1986){
 //1. Run UGENE
 //2. Use main toolbar { File -> Search NCBI Genbank }
-    GTUtilsDialog::waitForDialog(os, new NCBISearchDialogFillerDeprecated(os, "human", false,5));
+    GTUtilsDialog::waitForDialog(os, new NCBISearchDialogFillerDeprecated(os, "human", false,5, "Organism"));
     GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Search NCBI GenBank...");
     GTGlobals::sleep();
 
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 a9e7435..50efd7e 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
@@ -211,8 +211,8 @@ GUI_TEST_CLASS_DEFINITION(test_0057_1) {
     FindQualifierFiller::FindQualifierFillerSettings settings("db_xref", QString(), false, true, 1, false, false, false);
     GTUtilsDialog::waitForDialog(os, new FindQualifierFiller(os, settings));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Find qualifier..."));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "NC_004718 features [sars.gb]"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "NC_004718 features [sars.gb]"));
+    GTMouseDriver::click(Qt::RightButton);
 
     //Expected state : Found first qualifier with name db_xref and value GI:30124074
     QList<QTreeWidgetItem *> selectedItems = GTUtilsAnnotationsTreeView::getAllSelectedItems(os);
@@ -237,8 +237,8 @@ GUI_TEST_CLASS_DEFINITION(test_0057_2) {
     FindQualifierFiller::FindQualifierFillerSettings settings("db_xref", QString(), false, true);
     GTUtilsDialog::waitForDialog(os, new FindQualifierFiller(os, settings));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Find qualifier..."));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "NC_004718 features [sars.gb]"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "NC_004718 features [sars.gb]"));
+    GTMouseDriver::click(Qt::RightButton);
 
     //Expected state : Selected 58 qualifiers with name db_xref
     QList<QTreeWidgetItem *> selectedItems = GTUtilsAnnotationsTreeView::getAllSelectedItems(os);
@@ -270,8 +270,8 @@ GUI_TEST_CLASS_DEFINITION(test_0057_3) {
     FindQualifierFiller::FindQualifierFillerSettings settings(QString(), "pol polyprotein fragment", false, true, 1, false, false);
     GTUtilsDialog::waitForDialog(os, new FindQualifierFiller(os, settings));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Find qualifier..."));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "NC_001363 features [murine.gb]"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "NC_001363 features [murine.gb]"));
+    GTMouseDriver::click(Qt::RightButton);
 
     //Expected state : Founded first qualifier with name 'product' and value 'pol polyprotein fragment'
     QList<QTreeWidgetItem *> selectedItems = GTUtilsAnnotationsTreeView::getAllSelectedItems(os);
@@ -309,6 +309,7 @@ GUI_TEST_CLASS_DEFINITION(test_0057_4) {
     GTUtilsDialog::waitForDialog(os, new FindQualifierFiller(os, settings));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "find_qualifier_action"));
     GTUtilsAnnotationsTreeView::callContextMenuOnItem(os, featuresItem);
+    GTThread::waitForMainThread();
 
     QStringList qualValues;
     QList<QTreeWidgetItem*> items = GTUtilsAnnotationsTreeView::getAllSelectedItems(os);
@@ -442,9 +443,9 @@ GUI_TEST_CLASS_DEFINITION(test_0339) {
 //    Expected: Smith-Waterman dialog appears
 //    4. Close the dialog
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "SmithWatermanDialogBase", QDialogButtonBox::Cancel));
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["cmd"]);
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["cmd"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTKeyboardDriver::keyClick( 'f', Qt::ShiftModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
     GTGlobals::sleep();
 
 //    5. Press Ctrl+N
@@ -452,14 +453,14 @@ GUI_TEST_CLASS_DEFINITION(test_0339) {
 //    Expected: New annotation dialog appears
 //    6. Close the dialog
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "CreateAnnotationDialog", QDialogButtonBox::Cancel));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["cmd"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
 
 //    7. Press Ctrl+F
     // hotkey replaced with Cmd+F on Mac
 //    Expected: Search pattern panel appears
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["cmd"]);
-    GTThread::waitForMainThread(os);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
+    GTThread::waitForMainThread();
     GTGlobals::sleep();
     const bool isTabOpened = GTUtilsOptionPanelSequenceView::isTabOpened(os, GTUtilsOptionPanelSequenceView::Search);
     CHECK_SET_ERR(isTabOpened, "'Search in sequence' tab is not opened");
@@ -888,7 +889,7 @@ GUI_TEST_CLASS_DEFINITION(test_0652) {
     GTUtilsAnnotationsTreeView::addAnnotationsTableFromProject(os, "Ca20Chr1 features");
 
     //5) In annotations tree view open added annotation and put the mouse cursor over this annotation.
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "5_prime_UTR_intron"));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "5_prime_UTR_intron"));
     GTGlobals::sleep();
     //UGENE isn't chrashed showing tooltip.
 }
@@ -963,7 +964,7 @@ GUI_TEST_CLASS_DEFINITION(test_0666) {
 
     GTUtilsAnnotationsTreeView::selectItems(os, QStringList() << "pair 1  (0, 2)" << "pair 10  (0, 2)" << "pair 11  (0, 2)" << "pair 12  (0, 2)" << "pair 13  (0, 2)" << "pair 14  (0, 2)"
                                                               << "pair 15  (0, 2)" << "pair 16  (0, 2)" << "pair 17  (0, 2)" << "pair 18  (0, 2)" << "pair 19  (0, 2)");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 }
 
@@ -1009,7 +1010,7 @@ GUI_TEST_CLASS_DEFINITION(test_0681) {
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/681", "seq.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 9));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 9));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os)->getDetView(), Qt::RightButton);
 
@@ -1186,7 +1187,7 @@ GUI_TEST_CLASS_DEFINITION(test_0702) {
     GTUtilsDialog::waitForDialog(os, new ExportSequenceOfSelectedAnnotationsFiller(os, sandBoxDir + "1.fa",
         ExportSequenceOfSelectedAnnotationsFiller::Fastq, ExportSequenceOfSelectedAnnotationsFiller::SaveAsSeparate));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export" << "Export sequence of selected annotations..."));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0703) {
@@ -1206,6 +1207,7 @@ GUI_TEST_CLASS_DEFINITION(test_0703) {
     GTUtilsProjectTreeView::dragAndDrop(os, GTUtilsProjectTreeView::findIndex(os, "chrM", GTUtilsProjectTreeView::findIndex(os, "1.fa")),
         GTUtilsMdi::activeWindow(os));
 
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
     GTUtilsDocument::removeDocument(os, "1.fa");
     GTUtilsDocument::removeDocument(os, "1.ugenedb");
 
@@ -1216,7 +1218,6 @@ GUI_TEST_CLASS_DEFINITION(test_0703) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //Expected state : UGENE not crashes
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0729){
@@ -1304,8 +1305,8 @@ GUI_TEST_CLASS_DEFINITION(test_0746) {
     GTWidget::click(os, toggleViewButton);
     GTGlobals::sleep();
 
-    QAbstractButton* translation = GTAction::button(os, "translation_action");
-    CHECK_SET_ERR(translation -> isEnabled() == true, "button is not enabled");
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "translation_action", PopupChecker::IsEnabled));
+    GTWidget::click(os, GTWidget::findWidget(os, "translationsMenuToolbarButton"));
     GTGlobals::sleep();
     QAbstractButton* complement = GTAction::button(os, "complement_action");
     CHECK_SET_ERR(complement -> isEnabled() == true, "button is not enabled");
@@ -1331,8 +1332,8 @@ GUI_TEST_CLASS_DEFINITION(test_0750) {
     };
     GTUtilsDialog::waitForDialog(os, new DefaultDialogFiller(os, "",QDialogButtonBox::Ok, new Custom()));
     QTableView* table = GTWidget::findExactWidget<QTableView*>(os, "table");
-    GTMouseDriver::moveTo(os, GTTableView::getCellPoint(os, table, 2, 1));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTableView::getCellPoint(os, table, 2, 1));
+    GTMouseDriver::click();
     GTGlobals::sleep(500);
     GTWidget::click(os, GTWidget::findButtonByText(os, "...", table));
 //    5. Close the appeared dialog.
@@ -1407,8 +1408,8 @@ GUI_TEST_CLASS_DEFINITION(test_0768) {
     //    5. Paste "xyz" at the script text area. Click "Check syntax" button
     //    Expected state: messagebox "Syntax is OK!" appears.
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "test_0768"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "test_0768"));
+    GTMouseDriver::click();
 
     GTUtilsDialog::waitForDialog(os, new ScriptEditorDialogSyntaxChecker(os, "xyz", "Syntax is OK!"));
     GTWidget::click(os, GTAction::button(os, "editScriptAction"));
@@ -1456,9 +1457,9 @@ GUI_TEST_CLASS_DEFINITION(test_0775){
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, "1..2,5..10,15..20"));
-    //GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 10, 20));
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, "1..2,5..10,15..20"));
+    //GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 10, 20));
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
 //    2. Open "Region selection" dialog {Ctrl+a} fill it with next data:
 //        {Multiple range selection} checked
 //        {Multi region:} 1..2,5..10,15..20
@@ -1729,11 +1730,11 @@ GUI_TEST_CLASS_DEFINITION(test_0807) {
             GTWidget::click(os, addButton);
 
             QTableView *table = qobject_cast<QTableView*>(GTWidget::findWidget(os, "attributesTableView"));
-            GTMouseDriver::moveTo(os, GTTableView::getCellPosition(os, table, 0, table->model()->rowCount() - 1));
-            GTMouseDriver::click(os);
+            GTMouseDriver::moveTo(GTTableView::getCellPosition(os, table, 0, table->model()->rowCount() - 1));
+            GTMouseDriver::click();
 
-            GTKeyboardDriver::keySequence(os, "attr");
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+            GTKeyboardDriver::keySequence("attr");
+            GTKeyboardDriver::keyClick( Qt::Key_Enter);
 
             GTWidget::click(os, GTWidget::findWidget(os, "__qt__passive_wizardbutton1"));
             QLineEdit *templateEdit = dynamic_cast<QLineEdit*>(GTWidget::findWidget(os, "templateLineEdit"));
@@ -2055,7 +2056,7 @@ GUI_TEST_CLASS_DEFINITION(test_0835) {
 
     //3. Enable Circular View for one of the sequences(for example, "murine.gb").
     // = > The Circular View with the Restriction Site Map is shown.
-    GTWidget::click(os, GTWidget::findWidget(os, "CircularViewAction"));
+    GTWidget::click(os, GTWidget::findWidget(os, "CircularViewAction", GTWidget::findWidget(os, "views_tool_bar_NC_004718")));
 
     QWidget *restrictionMapTreeWidget = GTWidget::findWidget(os, "restrictionMapTreeWidget");
     CHECK_SET_ERR(NULL != restrictionMapTreeWidget && restrictionMapTreeWidget->isVisible(),
@@ -2064,11 +2065,12 @@ GUI_TEST_CLASS_DEFINITION(test_0835) {
     //4. Delete the sequence with the Circular View from the Project View.
     // = > The sequence has been deleted, the Circular View is not shown.
     //!= > The Restriction Site Map is NOT still shown.
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "sars.gb"));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
-    GTGlobals::sleep(100);
+    GTUtilsProjectTreeView::click(os, "sars.gb");
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTThread::waitForMainThread();
 
-    restrictionMapTreeWidget = GTWidget::findWidget(os, "restrictionMapTreeWidget");
+    restrictionMapTreeWidget = GTWidget::findWidget(os, "restrictionMapTreeWidget", NULL, GTGlobals::FindOptions(false));
     CHECK_SET_ERR(NULL == restrictionMapTreeWidget, "Restriction map widget is visible unexpectedly");
 }
 
@@ -2173,14 +2175,14 @@ GUI_TEST_CLASS_DEFINITION(test_0842) {
         GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "", "Remove element"));
         GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Remove"));
         GTTreeWidget::click(os, treeItem);
-        GTMouseDriver::click(os, Qt::RightButton);
+        GTMouseDriver::click(Qt::RightButton);
     }
     QTreeWidgetItem* treeItem1 = GTUtilsWorkflowDesigner::findTreeItem(os, "test1", GTUtilsWorkflowDesigner::algoriths, true, false);
     if(treeItem1 != NULL){
         GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "", "Remove element"));
         GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Remove"));
         GTTreeWidget::click(os, treeItem1);
-        GTMouseDriver::click(os, Qt::RightButton);
+        GTMouseDriver::click(Qt::RightButton);
     }
 
     const QStringList groupNames = GTUtilsWorkflowDesigner::getPaletteGroupNames(os);
@@ -2288,17 +2290,17 @@ GUI_TEST_CLASS_DEFINITION(test_0854) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "PBR322.gb"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "PBR322.gb"));
+    GTMouseDriver::click();
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE_AS_ALIGNMENT));
     GTUtilsDialog::waitForDialog(os, new ExportSequenceAsAlignmentFiller(os, sandBoxDir, "test_0854.aln", ExportSequenceAsAlignmentFiller::Clustalw, true));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os, MuscleDialogFiller::Default));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseMouse));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
@@ -2376,9 +2378,9 @@ GUI_TEST_CLASS_DEFINITION(test_0861_3) {
     CHECK_SET_ERR(highlightTree->topLevelItemCount() == 8, "Unexpected number of annotations");
 
     //3. Remove 3'UTR annotation group.
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "3'UTR  (0, 1)"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "3'UTR  (0, 1)"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(100);
 
     //Expected state : 3'UTR group disapeared from "Annotation type" window
@@ -2440,15 +2442,15 @@ GUI_TEST_CLASS_DEFINITION(test_0868){
 //    2. Zoom to any covered
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     for (int i = 0; i < 24; i++){
-        GTKeyboardDriver::keyClick(os, '=', GTKeyboardDriver::key["shift"]);
+        GTKeyboardDriver::keyClick( '=', Qt::ShiftModifier);
         GTGlobals::sleep(100);
     }
 
 //    3. Add bookmark
     GTUtilsBookmarksTreeView::addBookmark(os, GTUtilsMdi::activeWindow(os)->objectName(), "bookmark");
     GTGlobals::sleep();
-    GTMouseDriver::moveTo(os, GTUtilsBookmarksTreeView::getItemCenter(os, "bookmark"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsBookmarksTreeView::getItemCenter(os, "bookmark"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     QWidget* assembly_reads_area = GTWidget::findWidget(os, "assembly_reads_area");
@@ -2457,12 +2459,12 @@ GUI_TEST_CLASS_DEFINITION(test_0868){
 
 //    4. Go to any other region
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["home"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Home);
     GTGlobals::sleep();
 
 //    5. Double click on the bookmark
-    GTMouseDriver::moveTo(os, GTUtilsBookmarksTreeView::getItemCenter(os, "bookmark"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsBookmarksTreeView::getItemCenter(os, "bookmark"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
 //    Expected state: it shows the location that you saved before
@@ -2517,7 +2519,7 @@ GUI_TEST_CLASS_DEFINITION( test_0873 ){
 
     HIWebElement button = GTUtilsDashboard::findElement(os, "merged.fa", "BUTTON");
     GTUtilsDashboard::click(os, button);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     int sequenceLength = GTUtilsSequenceView::getLengthOfSequence(os);
     CHECK_SET_ERR(sequenceLength == 35594, "Sequence length is " + QString::number(sequenceLength) + ", expected 35594");
@@ -2577,7 +2579,7 @@ GUI_TEST_CLASS_DEFINITION(test_0886) {
     //CHECK_SET_ERR(errors[0].contains(""), " 1");
 
     GTUtilsProjectTreeView::click(os, "Gene.fa");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTLogTracer l2;
     GTUtilsNotifications::waitForNotification(os, false);
@@ -2688,10 +2690,10 @@ GUI_TEST_CLASS_DEFINITION(test_0896) {
     };
 
     GTUtilsDialog::waitForDialog(os, new OkClicker(os));
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "SAMtools"));
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "SAMtools"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "editConfiguration"));
-    GTMouseDriver::click(os);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click();
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::click(os, "File List");
@@ -3171,15 +3173,15 @@ GUI_TEST_CLASS_DEFINITION(test_0965) {
 
     //2. Create a few sub bookmarks for each view.
     GTUtilsBookmarksTreeView::addBookmark(os, GTUtilsMdi::activeWindow(os)->objectName(), "murine");
-    GTMouseDriver::moveTo(os, GTUtilsBookmarksTreeView::getItemCenter(os, "sars [s] NC_004718"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsBookmarksTreeView::getItemCenter(os, "sars [s] NC_004718"));
+    GTMouseDriver::doubleClick();
     GTUtilsBookmarksTreeView::addBookmark(os, GTUtilsMdi::activeWindow(os)->objectName(), "sars");
 
     //3. Press right mouse button on any bookmark connected with currently invisible view.
     //Expected state: "Add bookmark" action is disabled in appeared context menu.
-    GTMouseDriver::moveTo(os, GTUtilsBookmarksTreeView::getItemCenter(os, "murine"));
+    GTMouseDriver::moveTo(GTUtilsBookmarksTreeView::getItemCenter(os, "murine"));
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList(ACTION_ADD_BOOKMARK), PopupChecker::IsDisabled));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0967_1) {
@@ -3207,7 +3209,7 @@ GUI_TEST_CLASS_DEFINITION(test_0967_2) {
  * 2. Minimize and then restore the main window.
  *   Expected state: Log view should be not hidden.
 */
-    GTKeyboardDriver::keyClick(os, '3', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '3', Qt::AltModifier);
     GTGlobals::sleep();
     QWidget *logView = GTWidget::findWidget(os, "dock_log_view");
     CHECK_SET_ERR(NULL != logView, "Log View is NULL (check #1)");
@@ -3228,7 +3230,7 @@ GUI_TEST_CLASS_DEFINITION(test_0967_3) {
  * 2. Minimize and then restore the main window.
  *   Expected state: Tasks view should be not hidden
 */
-    GTKeyboardDriver::keyClick(os, '2', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '2', Qt::AltModifier);
     GTGlobals::sleep();
     QWidget *logView = GTWidget::findWidget(os, "taskViewTree");
     CHECK_SET_ERR(NULL != logView, "taskViewTree is NULL (check #1)");
@@ -3257,7 +3259,7 @@ GUI_TEST_CLASS_DEFINITION(test_0969) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0970) {
-
+Q_UNUSED(os);
     // 1. Enable Auto Annotations. Open human_T1.fa
     // 2. Open context menu for the Auto annotation in annotation tree view
     // Expected state: "Disable 'annotation' highlighting" item not presents in menu
@@ -3282,7 +3284,7 @@ GUI_TEST_CLASS_DEFINITION(test_0981_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 2));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 2));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os)->getDetView(), Qt::RightButton);
     GTGlobals::sleep(1000);
@@ -3308,9 +3310,9 @@ GUI_TEST_CLASS_DEFINITION(test_0986) {
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTGlobals::sleep(3000);
 
     GTGlobals::sleep(5000);
@@ -3359,9 +3361,9 @@ GUI_TEST_CLASS_DEFINITION(test_0986_3) {
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find pattern [Smith-Waterman]...", GTGlobals::UseMouse);
     GTGlobals::sleep(5000);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTGlobals::sleep(5000);
 }
@@ -3391,7 +3393,7 @@ GUI_TEST_CLASS_DEFINITION(test_0994) {
     GTFileDialog::openFile(os, testDir+"_common_data/scenarios/_regression/994/", "musMusc.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
-    GTMouseDriver::moveTo(os,GTUtilsAnnotationsTreeView::getItemCenter(os,"106-c1_38ftp"));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os,"106-c1_38ftp"));
     GTGlobals::sleep(1000);
 }
 
@@ -3493,7 +3495,7 @@ GUI_TEST_CLASS_DEFINITION(test_1000) {
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
             GTGlobals::sleep(500);
-            GTThread::waitForMainThread(os);
+            GTThread::waitForMainThread();
         }
 
     private:
@@ -3512,17 +3514,17 @@ GUI_TEST_CLASS_DEFINITION(test_1000) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
-            GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreemntDialogFiller(os));
+            GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreementDialogFiller(os));
             GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "algorithmComboBox", dialog), algorithm);
 
             //    4. Press "Start prediction".
             GTGlobals::sleep();
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
             GTGlobals::sleep();
-            GTThread::waitForMainThread(os);
+            GTThread::waitForMainThread();
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
             GTGlobals::sleep(500);
-            GTThread::waitForMainThread(os);
+            GTThread::waitForMainThread();
         }
 
     private:
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 d0ecd91..7b99bd5 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
@@ -202,10 +202,10 @@ GUI_TEST_CLASS_DEFINITION( test_2006 )
     GTFileDialog::openFile( os, dataDir + "samples/CLUSTALW/", "COI.aln" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( MSA_WIDTH, MSA_HEIGHT ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString initialMsaContent = GTClipboard::text( os );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
 
     // 2. Select the second symbol in the first line
     const QPoint initialSelectionPos( 1, 0 );
@@ -215,15 +215,16 @@ GUI_TEST_CLASS_DEFINITION( test_2006 )
     // 3. Drag it to the first symbol in the first line
     const QPoint mouseDragPosition( 1, 0 );
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition );
-    GTMouseDriver::press( os );
+    GTMouseDriver::press();
     GTGlobals::sleep( 200 );
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition + QPoint( 0, 0 ) );
-    GTMouseDriver::release( os );
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
     GTGlobals::sleep( 200 );
 
     // 4. Check that the content has not been changed
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( MSA_WIDTH, MSA_HEIGHT ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR( initialMsaContent == finalMsaContent, "MSA has unexpectedly changed" );
@@ -241,10 +242,10 @@ GUI_TEST_CLASS_DEFINITION( test_2007 )
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma_empty_line.aln" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 4 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString initialMsaContent = GTClipboard::text( os );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
 
     // 2. Select the fourth column of the second, third and fourth lines
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 3, 1 ), QPoint( 3, 3 ) );
@@ -253,15 +254,16 @@ GUI_TEST_CLASS_DEFINITION( test_2007 )
     // 3. Drag it to the left.
     const QPoint mouseDragPosition( 3, 2 );
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition );
-    GTMouseDriver::press( os );
+    GTMouseDriver::press();
     GTGlobals::sleep( 200 );
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition - QPoint( 1, 0 ) );
-    GTMouseDriver::release( os );
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
     GTGlobals::sleep( 200 );
 
     // Expected state: nothing happens
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 4 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR( initialMsaContent == finalMsaContent, "MSA has changed unexpectedly!" );
@@ -305,16 +307,16 @@ GUI_TEST_CLASS_DEFINITION( test_2012 ){
     GTLineEdit::setText(os, sequencelineEdit, "m");
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Down);
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Down);
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Down);
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep(500);
 
     QString selectedSequence = sequencelineEdit->text();
@@ -329,10 +331,10 @@ GUI_TEST_CLASS_DEFINITION( test_2021_1 )
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma.aln" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 17 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString initialMsaContent = GTClipboard::text( os );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
 
     // 2. Select a character in the sequence area
     const QPoint initialSelectionPos( 10, 10 );
@@ -344,7 +346,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_1 )
     int shiftCounter = 0;
     QPoint currentSelection = initialSelectionPos;
     while ( shiftCounter++ < totalShiftCount ) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["space"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Space );
         GTGlobals::sleep(200);
     }
     currentSelection.rx( ) += totalShiftCount;
@@ -352,7 +354,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_1 )
     // 4. Remove gaps with "Backspace" key
     shiftCounter = 0;
     while ( shiftCounter++ < totalShiftCount ) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Backspace );
         GTGlobals::sleep(200);
         currentSelection.rx( ) -= 1;
         GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( currentSelection,
@@ -361,7 +363,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_1 )
 
     // 5. Check that alignment content has returned to initial state
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 17 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR( initialMsaContent == finalMsaContent, "MSA has unexpectedly changed" );
@@ -373,10 +375,10 @@ GUI_TEST_CLASS_DEFINITION( test_2021_2 )
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma.aln" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 17 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString initialMsaContent = GTClipboard::text( os );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
 
     // 2. Select a region in the sequence area
     const QPoint initialSelectionLeftTop( 5, 5 );
@@ -392,7 +394,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_2 )
     QPoint currentSelectionLeftTop = initialSelectionLeftTop;
     QPoint currentSelectionRightBottom = initialSelectionRightBottom;
     while ( shiftCounter++ < totalShiftCount ) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["space"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Space );
         GTGlobals::sleep( 200 );
     }
     currentSelectionLeftTop.rx( ) += totalShiftCount * selectionWidth;
@@ -403,7 +405,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_2 )
     // 4. Remove gaps with "Backspace" key
     shiftCounter = 0;
     while ( shiftCounter++ < totalShiftCount ) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Backspace );
         GTGlobals::sleep( 200 );
         currentSelectionLeftTop.rx( ) -= selectionWidth;
         currentSelectionRightBottom.rx( ) -= selectionWidth;
@@ -413,7 +415,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_2 )
 
     // 5. Check that alignment content has returned to initial state
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 17 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR( initialMsaContent == finalMsaContent, "MSA has unexpectedly changed" );
@@ -427,7 +429,7 @@ GUI_TEST_CLASS_DEFINITION( test_2021_3 )
 
     // 2. Select a column in the sequence area
     GTUtilsMSAEditorSequenceArea::moveTo( os, QPoint( 0, 0 ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::click();
     GTUtilsMSAEditorSequenceArea::selectColumnInConsensus( os, 9 );
     GTGlobals::sleep( 200 );
 
@@ -435,13 +437,13 @@ GUI_TEST_CLASS_DEFINITION( test_2021_3 )
     const int totalShiftCount = 6;
     int shiftCounter = 0;
     while ( shiftCounter++ < totalShiftCount ) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Backspace );
         GTGlobals::sleep( 200 );
     }
 
     // 4. Check that all the empty columns were removed
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 14, 9 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR(  "AAGCTTCTTTTAA--\nAAGTTACTAA-----\nTAG---TTATTAA--\nAAGC---TATTAA--\n"
@@ -458,21 +460,21 @@ GUI_TEST_CLASS_DEFINITION( test_2021_4 )
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma2_gap_8_col.aln" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 20, 9 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString initialMsaContent = GTClipboard::text( os );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
 
     // 2. Select a region of trailing gaps
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 17, 4 ), QPoint( 19, 6 ) );
 
     // 3. Press "Backspace"
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Backspace );
     GTGlobals::sleep( 200 );
 
     // 4. Check that MSA does not changed
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 20, 9 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR( initialMsaContent == finalMsaContent, "MSA has unexpectedly changed" );
@@ -494,12 +496,12 @@ GUI_TEST_CLASS_DEFINITION( test_2021_5 )
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 9, 0 ), QPoint( 16, 9 ) );
 
     // 3. Remove gap columns by pressing "Backspace" key
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Backspace );
     GTGlobals::sleep( 200 );
 
     // 4. Check that all the empty columns were removed
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 14, 9 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR(  "AAGCTTCTTTTAA--\nAAGTTACTAA-----\nTAG---TTATTAA--\nAAGC---TATTAA--\n"
@@ -520,12 +522,12 @@ GUI_TEST_CLASS_DEFINITION( test_2021_6 )
     GTGlobals::sleep(200);
 
     //3. Press BACKSPACE.
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Backspace );
     GTGlobals::sleep( 200 );
 
     // 4. Expected state: the gap was deleted, selection moves to the previous symbol.
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 43, 0 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR(  "TAAGACTTCTAATTCGAGCCGAATTAGGTCAACCAGGATAC--C" == finalMsaContent,
@@ -543,12 +545,12 @@ GUI_TEST_CLASS_DEFINITION( test_2021_7 )
     GTGlobals::sleep(200);
 
     //3. Press BACKSPACE.
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Backspace );
     GTGlobals::sleep( 200 );
 
     // 4. Expected state: the gap was deleted, selection moves to the previous symbol.
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 2 ), QPoint( 13, 2 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR(  "TAG--TTATTAA--" == finalMsaContent,
@@ -567,12 +569,12 @@ GUI_TEST_CLASS_DEFINITION( test_2021_8 )
     GTGlobals::sleep(200);
 
     //3. Press BACKSPACE.
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Backspace );
     GTGlobals::sleep( 200 );
 
     // 4. Expected state: the gap was deleted, selection moves to the previous symbol.
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 1 ), QPoint( 44, 1 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR(  "TAAGCTTACTAATCCGGGCCGAATTAGGTCAACCTGGTTAT-CTA" == finalMsaContent,
@@ -590,12 +592,12 @@ GUI_TEST_CLASS_DEFINITION( test_2021_9 )
     GTGlobals::sleep(200);
 
     //3. Press BACKSPACE.
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Backspace );
     GTGlobals::sleep( 200 );
 
     // 4. Expected state: the gap was deleted, selection moves to the previous symbol.
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 2 ), QPoint( 46, 2 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR(  "TTAGTTTATTAATTCGAGCTGAACTAGGTCAACCAGGCTATTTAATT" == finalMsaContent,
@@ -608,8 +610,8 @@ GUI_TEST_CLASS_DEFINITION(test_2024){
 
 //    2. Add element "Local BLAST search"
     GTUtilsWorkflowDesigner::addAlgorithm( os, "Local BLAST search" );
-    GTMouseDriver::moveTo(os,GTUtilsWorkflowDesigner::getItemCenter(os, "Local BLAST search"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Local BLAST search"));
+    GTMouseDriver::click();
 
 //    Expected state: element has parameters "gap cost" and "match score"
     GTUtilsWorkflowDesigner::setParameter(os, "Gap costs", 2, GTUtilsWorkflowDesigner::comboValue);
@@ -626,12 +628,12 @@ GUI_TEST_CLASS_DEFINITION( test_2026 ) {
     GTUtilsMSAEditorSequenceArea::selectSequence(os, QString("Montana_montana"));
 
     // 3. Press shift, click down_arrow 4 times. Release shift.
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
     for (int i = 0; i < 4; ++i) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["down"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Down);
         GTGlobals::sleep( 500 );
     }
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTGlobals::sleep(3000);
 
     // Expected state: 5 sequences are selected
@@ -643,10 +645,10 @@ GUI_TEST_CLASS_DEFINITION( test_2026 ) {
         "Expected sequence is not selected");
 
     // 4. Release shift. Press shift again and click down arrow
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["down"] );
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick(Qt::Key_Down );
     GTGlobals::sleep( 500 );
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTGlobals::sleep(3000);
 
     // Expected state: 6 sequences selected
@@ -672,7 +674,7 @@ GUI_TEST_CLASS_DEFINITION( test_2030 ) {
 
     // 3. Insert four gaps with SPACE.
     for (int i = 0; i < 4; ++i) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["space"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Space );
         GTGlobals::sleep( 500 );
     }
 
@@ -682,7 +684,7 @@ GUI_TEST_CLASS_DEFINITION( test_2030 ) {
     GTGlobals::sleep(200);
 
     // 5. Delete one symbol with DELETE
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["delete"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Delete );
     GTGlobals::sleep( 200 );
 
     // Expected state: line length is 15.
@@ -727,8 +729,7 @@ GUI_TEST_CLASS_DEFINITION( test_2049 ){
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Codon table"));
-    GTWidget::click(os, GTWidget::findWidget(os, "AminoToolbarButton"));
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Codon table"));
     GTGlobals::sleep(500);
     QWidget* w = GTWidget::findWidget(os, "Codon table widget");
     int ititHeight = GTWidget::findWidget(os, "Leucine (Leu, L)",w)->geometry().height();
@@ -834,13 +835,13 @@ GUI_TEST_CLASS_DEFINITION( test_2077 ){
 
     // 4) Add file "human_T1.fa" to "Read Sequence" twice
 
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
+    GTMouseDriver::click();
     QString dirPath = dataDir + "samples/FASTA/";
     GTUtilsWorkflowDesigner::setDatasetInputFile( os, dirPath, "human_T1.fa" );
 
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
+    GTMouseDriver::click();
     QString dirPath1 = dataDir + "samples/FASTA/";
     GTUtilsWorkflowDesigner::setDatasetInputFile( os, dirPath1, "human_T1.fa" );
 
@@ -983,13 +984,13 @@ GUI_TEST_CLASS_DEFINITION( test_2124 ) {
         << "Custom schemes" << "Create new color scheme" ) );
     GTUtilsDialog::waitForDialog( os, new NewColorSchemeCreator( os, colorSchemeName,
         NewColorSchemeCreator::amino ) );
-    GTMouseDriver::click( os, Qt::RightButton );
+    GTMouseDriver::click(Qt::RightButton );
 
     // 3. Create a new color scheme for the amino alphabet.
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 1));
     GTUtilsDialog::waitForDialog( os, new PopupChooser( os, QStringList( ) << "Colors"
         << "Custom schemes" << colorSchemeName ) );
-    GTMouseDriver::click( os, Qt::RightButton );
+    GTMouseDriver::click(Qt::RightButton );
 }
 
 GUI_TEST_CLASS_DEFINITION(test_2091) {
@@ -1009,7 +1010,7 @@ GUI_TEST_CLASS_DEFINITION(test_2091) {
 
     //3. Call context menu on the name list area, select the {Edit -> Remove sequence} menu item.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "Remove sequence"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     //Expected state: the sequence is removed.
     QStringList modifiedNames = GTUtilsMSAEditorSequenceArea::getNameList(os);
 
@@ -1023,8 +1024,8 @@ GUI_TEST_CLASS_DEFINITION(test_2093_1) {
 
     // Simple scheme: read file list.
     GTUtilsWorkflowDesigner::addAlgorithm(os, "File List");
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "File List"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "File List"));
+    GTMouseDriver::click();
     QString dirPath = dataDir + "samples/FASTA/";
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dirPath, "human_T1.fa");
 
@@ -1075,10 +1076,10 @@ GUI_TEST_CLASS_DEFINITION( test_2128 )
     GTFileDialog::openFile( os, testDir + "_common_data/scenarios/msa", "ma.aln" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 17 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString initialMsaContent = GTClipboard::text( os );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
 
     // 2. Select a region in the sequence area
     QRect currentSelection( QPoint( 2, 5 ), QPoint( 8, 11 ) );
@@ -1088,8 +1089,7 @@ GUI_TEST_CLASS_DEFINITION( test_2128 )
     // 3. Add gaps by pressing "Ctrl + Space" key
     const int totalShiftCount = 3;
     for ( int shiftCounter = 0; shiftCounter < totalShiftCount; ++shiftCounter ) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["space"],
-            GTKeyboardDriver::key["ctrl"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Space, Qt::ControlModifier);
         GTGlobals::sleep( 200 );
         currentSelection.moveRight( currentSelection.right( ) + 1 );
         GTGlobals::sleep( 200 );
@@ -1098,8 +1098,7 @@ GUI_TEST_CLASS_DEFINITION( test_2128 )
 
     // 4. Remove gaps with "Ctrl + Backspace" key
     for ( int shiftCounter = 0; shiftCounter < totalShiftCount; ++shiftCounter ) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"],
-            GTKeyboardDriver::key["ctrl"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Backspace, Qt::ControlModifier );
         GTGlobals::sleep( 200 );
         currentSelection.moveLeft( currentSelection.left( ) - 1 );
         GTGlobals::sleep( 200 );
@@ -1108,7 +1107,7 @@ GUI_TEST_CLASS_DEFINITION( test_2128 )
 
     // 5. Check that alignment content has returned to initial state
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 11, 17 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR( initialMsaContent == finalMsaContent, "MSA has unexpectedly changed" );
@@ -1122,18 +1121,18 @@ GUI_TEST_CLASS_DEFINITION( test_2128_1 )
 
     //2. Select the six first symbols in the first sequence and press Space.
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 5, 0 ) );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["space"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Space );
     GTGlobals::sleep( 2000 );
 
     // Expected state: The first symbol T is on the 7 position.
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
     GTGlobals::sleep(200);
     const QPoint initialSelectionPos( 6, 0 );
     GTUtilsMSAEditorSequenceArea::click( os, initialSelectionPos );
     GTGlobals::sleep( 2000 );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
     GTGlobals::sleep(200);
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR(  "T" == finalMsaContent,
@@ -1141,16 +1140,16 @@ GUI_TEST_CLASS_DEFINITION( test_2128_1 )
 
     //3. Press the Ctrl + Space.
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 6, 0 ), QPoint( 12, 0 ) );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["space"], GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Space, Qt::ControlModifier );
     GTGlobals::sleep( 200 );
 
     // Expected state: The first symbol T is on the 8 position.
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
     GTGlobals::sleep(200);
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 7, 0 ), QPoint( 7, 0 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
     GTGlobals::sleep(200);
     const QString finalMsaContent1 = GTClipboard::text( os );
     CHECK_SET_ERR(  "T" == finalMsaContent1,
@@ -1158,16 +1157,16 @@ GUI_TEST_CLASS_DEFINITION( test_2128_1 )
 
     //4. Press the Ctrl + Backspace.
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 7, 0 ), QPoint( 13, 0 ) );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"], GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Backspace, Qt::ControlModifier );
     GTGlobals::sleep( 200 );
 
     // Expected state: The first symbol T is on the 8 position.
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
     GTGlobals::sleep(200);
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 6, 0 ), QPoint( 6, 0 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
     GTGlobals::sleep(200);
     const QString finalMsaContent2 = GTClipboard::text( os );
     CHECK_SET_ERR(  "T" == finalMsaContent2,
@@ -1175,16 +1174,16 @@ GUI_TEST_CLASS_DEFINITION( test_2128_1 )
 
     //5. Press the Backspace.
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 6, 0 ), QPoint( 12, 0 ) );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["back"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Backspace );
     GTGlobals::sleep( 200 );
 
     // Expected state: The first symbol T is on the 1 position.
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
     GTGlobals::sleep(200);
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 0, 0 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["esc"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Escape );
     GTGlobals::sleep(200);
     const QString finalMsaContent3 = GTClipboard::text( os );
     CHECK_SET_ERR(  "T" == finalMsaContent3,
@@ -1213,7 +1212,7 @@ GUI_TEST_CLASS_DEFINITION( test_2138 )
     GTGlobals::sleep(1000);
     //Expected state: alignment has been opened and whole msa alphabet is amino
     bool isAmino = GTUtilsMSAEditorSequenceArea::hasAminoAlphabet(os);
-    CHECK_SET_ERR(true == isAmino, "Aligment has wrong alphabet type");
+    CHECK_SET_ERR(false == isAmino, "Aligment has wrong alphabet type");
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2140 )
@@ -1241,12 +1240,12 @@ GUI_TEST_CLASS_DEFINITION( test_2144 )
 //    3. Fill input data, e.g.:
 //        "data/samples/Assembly/chrM.sam" as input to "Read Assembly SAM/BAM" element;
 //        "data/samples/Assembly/chrM.fa" as input to "Read Sequence" element;
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "samples/Assembly/", "chrM.sam");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "samples/Assembly/", "chrM.fa");
 
 //    4. Chose "Estimate" option in tool bar.
@@ -1265,20 +1264,20 @@ GUI_TEST_CLASS_DEFINITION( test_2150 ){
     GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
 
     // 3. Set "data/samples/CLUSTALW/ty3.aln.gz" as the input file.
-    GTMouseDriver::moveTo(os,GTUtilsWorkflowDesigner::getItemCenter(os,"Read alignment"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Read alignment"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "samples/CLUSTALW/", "ty3.aln.gz");
     GTGlobals::sleep();
 
     // 4. Set some name to the result file.
 //    QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
 //    CHECK_SET_ERR(table,"tableView not found");
-    GTMouseDriver::moveTo(os,GTUtilsWorkflowDesigner::getItemCenter(os,"Write alignment"));
-    GTMouseDriver::click(os);
-//    GTMouseDriver::moveTo(os,GTTableView::getCellPosition(os,table,1,1));
-//    GTMouseDriver::click(os);
+    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(os, s+"/2150_0001.sto");
+    GTKeyboardDriver::keySequence(s+"/2150_0001.sto");
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", s+"/2150_0001.aln", GTUtilsWorkflowDesigner::textValue);
     GTWidget::click(os,GTUtilsMdi::activeWindow(os));
 
@@ -1313,12 +1312,12 @@ GUI_TEST_CLASS_DEFINITION( test_2152 ){
 
     GTUtilsWorkflowDesigner::connect(os, fileList, fileCAP3);
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Assembly Sequences with CAP3"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Assembly Sequences with CAP3"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setParameter(os,"Output file", QDir().absoluteFilePath(sandBoxDir + "out.ace"),GTUtilsWorkflowDesigner::textValue);
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "File List"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "File List"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/cap3", "region1.fa");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/cap3", "region2.fa");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/cap3", "region3.fa");
@@ -1340,11 +1339,11 @@ GUI_TEST_CLASS_DEFINITION( test_2156 ){
 //    2. Select six symbols (45-50) of the first line.
     GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(44,0),QPoint(49,0));
 //    3. Press BACKSPACE.
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["back"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Backspace);
 //    Expected state: three gaps before the selected area are removed.
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(41,0),QPoint(44,0));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText == "CTAA", QString("Expected: CTAA, found: %1").arg(clipboardText) );
 
@@ -1372,14 +1371,15 @@ GUI_TEST_CLASS_DEFINITION( test_2160 )
     // 3. Shift msa
     const QPoint mouseDragPosition( 7, 7 );
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition );
-    GTMouseDriver::press( os );
+    GTMouseDriver::press();
     GTGlobals::sleep( 200 );
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition + QPoint( 3, 0 ) );
-    GTMouseDriver::release( os );
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
     GTGlobals::sleep( 200 );
 
     // 4. Press "Delete" key
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["delete"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Delete );
     GTGlobals::sleep( 200 );
 
     // 6. Check that alignment has not changed
@@ -1397,18 +1397,18 @@ GUI_TEST_CLASS_DEFINITION( test_2165 ) {
 
     //2. Copy the whole sequence to the clipboard
     GTWidget::click(os, GTWidget::findWidget(os, "annotated_DNA_scrollarea"));
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os));
     GTWidget::click(os, GTWidget::findWidget(os, "select_range_action"));
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     //3. Past the whole sequence to the find pattern field
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
     GTWidget::click(os, GTWidget::findWidget(os, "textPattern"));
 
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
-    GTThread::waitForMainThread(os);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
+    GTThread::waitForMainThread();
 
     //4. Press the "Search" button
 
@@ -1486,17 +1486,17 @@ GUI_TEST_CLASS_DEFINITION( test_2187 ) {
     CHECK_SET_ERR(treeWidget != NULL, "Tree widget is NULL");
 
     QTreeWidgetItem *annotationsRoot = GTUtilsAnnotationsTreeView::findItem(os, "repeat_unit  (0, 5)");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, annotationsRoot->child(0)));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, annotationsRoot->child(0)));
+    GTMouseDriver::doubleClick();
 
-    Runnable *filler = new EditAnnotationChecker(os, "repeat_unit", "join(251..251,252..252,253..253,254..254,255..255,256..256,257..257,258..258,259..259)");
+    Runnable *filler = new EditAnnotationChecker(os, "repeat_unit", "251..251,252..252,253..253,254..254,255..255,256..256,257..257,258..258,259..259");
     GTUtilsDialog::waitForDialog(os, filler);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["F2"]);
+    GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
     GTUtilsMdi::click(os, GTGlobals::Close);
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2192 ){
@@ -1509,12 +1509,12 @@ GUI_TEST_CLASS_DEFINITION( test_2192 ){
 //    2. Open Call Variants sample.
     GTUtilsWorkflowDesigner::addSample(os, "call variants");
 //    3. Set valid input data.
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
-    GTMouseDriver::click(os);
+    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");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM", "chrM.fa");
 //    4. Start the scheme.
     GTUtilsWorkflowDesigner::runWorkflow(os);
@@ -1638,12 +1638,12 @@ GUI_TEST_CLASS_DEFINITION( test_2266_1 ){
     GTUtilsWorkflowDesigner::addSample(os, "call variants");
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/ugenedb/", "Klebsislla.sort.bam.ugenedb");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/ugenedb/", "Klebsislla_ref.fa");
 
     GTUtilsWorkflowDesigner::click(os, "Call Variants");
@@ -1676,8 +1676,8 @@ GUI_TEST_CLASS_DEFINITION( test_2267_1 ){
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "D"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "D"));
+    GTMouseDriver::click(Qt::RightButton);
 //     4. Press Enter
 //     Expected state: Edit qualifier window closes
 }
@@ -1700,8 +1700,8 @@ GUI_TEST_CLASS_DEFINITION( test_2267_2 ){
     GTUtilsDialog::waitForDialog(os, filler);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "D"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "D"));
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2268 ) {
@@ -1739,8 +1739,7 @@ GUI_TEST_CLASS_DEFINITION( test_2268 ) {
 
 //    1. Forbid write access to the t-coffee directory (chmod 555 %t-coffee-dir%).
     // Permissions will be returned to the original state, if UGENE won't crash.
-    PermissionsSetter p;
-    p.setReadOnly(os, toolDir.path());
+    GTFile::setReadOnly(os, toolDir.path());
 
 //    2. Open "sample/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "/samples/CLUSTALW/", "COI.aln");
@@ -1770,7 +1769,7 @@ GUI_TEST_CLASS_DEFINITION( test_2314 ){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Scroll sequence area to the last columns
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 604));
-    GTKeyboardDriver::keyClick(os, 'g', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'g', Qt::ControlModifier);
     GTGlobals::sleep(500);
 //    3. Move to the right last column with mouse
     QWidget* consArea = GTWidget::findWidget(os, "consArea");
@@ -1918,37 +1917,38 @@ GUI_TEST_CLASS_DEFINITION(test_2292) {
     GTFileDialog::openFile(os, dataDir + "samples/ACE", "K26.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 
     GTGlobals::sleep();
 }
 
-GUI_TEST_CLASS_DEFINITION( test_2298 ){
+GUI_TEST_CLASS_DEFINITION(test_2298) {
 //    1. Open the file "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Build the tree and make it view together with msa
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/2298.nwk", 0, 0, true));
-    QAbstractButton *tree = GTAction::button(os,"Build Tree");
-    GTWidget::click(os, tree);
-    GTGlobals::sleep();
+    GTWidget::click(os, GTAction::button(os,"Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    3. Collapse any node on the tree
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
     QGraphicsItem* node = GTUtilsPhyTree::getNodes(os).at(1);
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
     treeView->ensureVisible(node);
-    GTThread::waitForMainThread(os);
-    GTMouseDriver::moveTo(os, GTUtilsPhyTree::getGlobalCoord(os, node));
-    GTMouseDriver::doubleClick(os);
+    GTThread::waitForMainThread();
+    GTMouseDriver::moveTo(GTUtilsPhyTree::getGlobalCoord(os, node));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
+
 //    Expected state: the appropriate sequences on the msa has collapsed into a group as well
-    QStringList l = GTUtilsMSAEditorSequenceArea::getVisibaleNames(os);
+    QStringList l = GTUtilsMSAEditorSequenceArea::getVisibleNames(os);
     int num = l.count();
     CHECK_SET_ERR(num == 3, QString("Unexpected visiable sequences number. Expected: 3, actual: %1").arg(num));
     GTGlobals::sleep();
 }
 
-
 GUI_TEST_CLASS_DEFINITION( test_2293 ){
 //    0. Ensure that Bowtie2 Build index tool is not set. Remove it, if it is.
 //    1. Do {main menu -> Tools -> ALign to reference -> Build index}.
@@ -2043,15 +2043,15 @@ GUI_TEST_CLASS_DEFINITION(test_2284) {
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint(0, 16 ), QPoint(0, 16 ) );
 
     //4. In status bar search field type "AATT"
-    GTKeyboardDriver::keyClick( os, 'f', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('f', Qt::ControlModifier );
     GTGlobals::sleep(200);
-    GTKeyboardDriver::keySequence(os, "AATT");
+    GTKeyboardDriver::keySequence("AATT");
 
     //5. Press the "Find forward" button a few times until selection reaches the end of the alignment
     //6. Press the button again
     for(int i = 0; i < 11; i++) {
         GTGlobals::sleep(200);
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Enter);
     }
 }
 
@@ -2063,7 +2063,7 @@ GUI_TEST_CLASS_DEFINITION( test_2285 ){
 //    2. Click the "Switch on/off collapsing" button on the toolbar.
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
 //    Expected state: Collapsed mode is switched on, there are one collapsed group.
-    int visableNamesNum = GTUtilsMSAEditorSequenceArea::getVisibaleNames(os).count();
+    int visableNamesNum = GTUtilsMSAEditorSequenceArea::getVisibleNames(os).count();
     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).
@@ -2079,12 +2079,12 @@ GUI_TEST_CLASS_DEFINITION( test_2285 ){
     GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(44, 13));
 //    5. Press Backspace.
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["back"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Backspace);
 
 //    Expected state: each sequence in the group loose one gap.
     GTUtilsMSAEditorSequenceArea::click(os);
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(43, 13), QPoint(43, 14));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     QString clipboardText = GTClipboard::text(os);
 
     CHECK_SET_ERR(clipboardText == "T\nT", "Unexpected selection. Expected: T\nT, actual: " + clipboardText);
@@ -2109,70 +2109,63 @@ GUI_TEST_CLASS_DEFINITION( test_2306 ) {
     // 3. Shift the region but don't release left mouse button
     const QPoint mouseDragPosition( 12, 12 );
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition );
-    GTMouseDriver::press( os );
+    GTMouseDriver::press();
     GTUtilsMSAEditorSequenceArea::moveTo( os, mouseDragPosition + QPoint( 3, 0 ) );
     GTGlobals::sleep( 200 );
-    GTMouseDriver::release( os );
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
+    GTThread::waitForMainThread();
     GTGlobals::sleep( 200 );
 
     // 4. Call context menu
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 5, 10 ), QPoint( 7, 15 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep( 200 );
     const QString finalMsaContent = GTClipboard::text( os );
     CHECK_SET_ERR("---\n---\n---\n---\n---\n---" == finalMsaContent, "Unexpected MSA content has occurred"  + finalMsaContent);
+}
 
-
-
-    }
-GUI_TEST_CLASS_DEFINITION( test_2309 ) {
+GUI_TEST_CLASS_DEFINITION(test_2309) {
     // 1. Open file "data/samples/CLUSTALW/COI.aln"
     GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Build tree for the alignment
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, testDir + "_common_data/scenarios/sandbox/2309.nwk", 0, 0, true));
-    QAbstractButton *tree= GTAction::button(os,"Build Tree");
-    GTWidget::click(os, tree);
-    GTGlobals::sleep(500);
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QStringList initialNames = GTUtilsMSAEditorSequenceArea::getNameList(os);
-    QAbstractButton *refresh= GTAction::button(os,"Refresh tree");
+    QAbstractButton *refresh= GTAction::button(os, "Refresh tree");
 
     CHECK(NULL != refresh, );
-    if(refresh->isVisible()){
+    if (refresh->isVisible()) {
         GTWidget::click(os, refresh);
-    }else{
-        GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Refresh tree"));
+    } else {
+        GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Refresh tree"));
         QToolBar* toolBar = qobject_cast<QToolBar*>(refresh->parent());
-        GTMouseDriver::moveTo(os, toolBar->mapToGlobal(toolBar->geometry().bottomRight())-QPoint(5,15));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(toolBar->mapToGlobal(toolBar->geometry().bottomRight())-QPoint(5,15));
+        GTMouseDriver::click();
     }
 
-    GTGlobals::sleep(500);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QStringList newNames = GTUtilsMSAEditorSequenceArea::getNameList(os);
     CHECK_SET_ERR(newNames == initialNames, "Wrong sequences order");
 
-    int key;
-#ifdef Q_OS_MAC
-    key = GTKeyboardDriver::key["cmd"];
-#else
-    key = GTKeyboardDriver::key["ctrl"];
-#endif
-        GTGlobals::sleep();
-        GTWidget::click(os, GTUtilsProjectTreeView::getTreeView(os));
-        GTKeyboardDriver::keyClick(os, 'a', key);
-        GTGlobals::sleep(100);
-
-        GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-        GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::NoToAll));
-        GTGlobals::sleep(200);
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
-        GTGlobals::sleep();
+    GTGlobals::sleep();
+    GTWidget::click(os, GTUtilsProjectTreeView::getTreeView(os));
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
+    GTGlobals::sleep(100);
 
+    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::NoToAll));
+    GTGlobals::sleep(200);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
+    GTGlobals::sleep();
 }
+
 GUI_TEST_CLASS_DEFINITION( test_2318 ) {
     class FirstItemPopupChooser : public PopupChooser {
     public:
@@ -2181,9 +2174,9 @@ GUI_TEST_CLASS_DEFINITION( test_2318 ) {
 
         virtual void run() {
             GTGlobals::sleep(1000);
-            GTMouseDriver::release(os);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+            GTMouseDriver::release();
+            GTKeyboardDriver::keyClick( Qt::Key_Down);
+            GTKeyboardDriver::keyClick( Qt::Key_Enter);
         }
     };
 
@@ -2344,11 +2337,11 @@ GUI_TEST_CLASS_DEFINITION( test_2343 ) {
     GTUtilsWorkflowDesigner::click(os, "Align with ClustalW");
 
     GTUtilsWorkflowDesigner::clickParameter(os, "Gap distance");
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     QWidget* wgt = QApplication::focusWidget();
     CHECK_SET_ERR( wgt != NULL, "No widnget in focus")
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Tab);
     GTGlobals::sleep();
 
     CHECK_SET_ERR( QApplication::focusWidget() != NULL, "No widget in focus");
@@ -2403,7 +2396,7 @@ GUI_TEST_CLASS_DEFINITION( test_2360 ) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Right click on document in project.
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
 
     // 3. Choose the context menu {Export/Import->Export nucleic alignment to amino translation}.
     // Expected state: Export dialog appears.
@@ -2411,7 +2404,7 @@ GUI_TEST_CLASS_DEFINITION( test_2360 ) {
     // 5. Click "Export".
     GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, 6));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_PROJECT__EXPORT_TO_AMINO_ACTION));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2364 ) {
@@ -2426,14 +2419,14 @@ GUI_TEST_CLASS_DEFINITION( test_2364 ) {
                                          GTUtilsWorkflowDesigner::getWorker(os, "Write Sequence"));
 
     //3. Set the input sequence file: "data/samples/FASTA/human_T1.fa".
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
     GTGlobals::sleep(300);
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "samples/FASTA", "human_T1.fa");
 
     //4. Set the output file: "out.fa".
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Write Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Write Sequence"));
+    GTMouseDriver::click();
     GTGlobals::sleep(300);
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", "out.fa", GTUtilsWorkflowDesigner::textValue);
 
@@ -2474,8 +2467,8 @@ GUI_TEST_CLASS_DEFINITION(test_2373) {
 
 //    5. Mouse press under the group in the name list
 //    Expected state:  nothing happens
-    GTMouseDriver::moveTo(os, GTUtilsMsaEditor::getSequenceNameRect(os, "Mecopoda_elongata__Ishigaki__J").center() + QPoint(0, 20));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsMsaEditor::getSequenceNameRect(os, "Mecopoda_elongata__Ishigaki__J").center() + QPoint(0, 20));
+    GTMouseDriver::click();
 
     GTUtilsLog::check(os, logTracer);
 }
@@ -2535,13 +2528,13 @@ GUI_TEST_CLASS_DEFINITION( test_2377 ) {
 
     GTUtilsWorkflowDesigner::connect( os, assemblyReader, assemblyWriter );
 
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, assemblyReaderName ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, assemblyReaderName ) );
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile( os, testDir + "_common_data/sam",
         "broken_without_reads.sam" );
 
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, assemblyWriterName ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, assemblyWriterName ) );
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setParameter( os, "Output file", "test",
         GTUtilsWorkflowDesigner::textValue );
 
@@ -2567,13 +2560,13 @@ GUI_TEST_CLASS_DEFINITION( test_2378_1 ) {
     // 2. Create scheme: read assembly->write assembly
     // 3. set _common_data\sam\scerevisiae.sam as input file
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Read Assembly");
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/sam", "scerevisiae.sam");
 
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Write Assembly");
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Write Assembly"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Write Assembly"));
+    GTMouseDriver::click();
     //QString //absPath =
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", QDir(testDir).absolutePath() + "_common_data/scenarios/sandbox/test_2378_1.bam", GTUtilsWorkflowDesigner::textValue);
 
@@ -2622,7 +2615,7 @@ GUI_TEST_CLASS_DEFINITION( test_2379 ) {
 #ifdef Q_OS_MACX
             GTWidget::click(os, GTWidget::findButtonByText(os, "Create", dialog));
 #else
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Enter);
 #endif
             GTGlobals::sleep();
         }
@@ -2770,7 +2763,7 @@ GUI_TEST_CLASS_DEFINITION( test_2401 ) {
 #ifdef Q_OS_MAC
     GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 #else
-    GTKeyboardDriver::keyClick(os, 'q', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'q', Qt::ControlModifier);
 #endif
     GTGlobals::sleep();
 
@@ -2812,11 +2805,11 @@ GUI_TEST_CLASS_DEFINITION(test_2402) {
     GTUtilsWorkflowDesigner::connect(os, readWorker, assemblyWorker);
 
     //Expected state: all slots are connected
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "samples/Genbank", "sars.gb");
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Assembly Sequences with CAP3"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Assembly Sequences with CAP3"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", outputFilePath, GTUtilsWorkflowDesigner::textValue);
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Well done!"));
@@ -2897,12 +2890,12 @@ GUI_TEST_CLASS_DEFINITION( test_2406 ) {
 
 //    2. Click on the output file field and input "TEST" file name and press Enter.
 //    Expected: TEST file name appears in the output file name field
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, sequenceWriterName));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, sequenceWriterName));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", "TEST", GTUtilsWorkflowDesigner::textValue);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
 
     GTGlobals::sleep(500);
     const QString expectedPreValue = "TEST";
@@ -2929,58 +2922,56 @@ GUI_TEST_CLASS_DEFINITION(test_2407) {
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "10000_sequences.aln"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "10000_sequences.aln"));
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__UNLOAD_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "10000_sequences.aln"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "10000_sequences.aln"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     CHECK_SET_ERR( !l.hasError( ), "File not removed from project!" );
 
     }
 
-GUI_TEST_CLASS_DEFINITION( test_2410 ) {
-    GTFileDialog::openFile( os, dataDir + "samples/FASTA/", "human_T1.fa" );
+GUI_TEST_CLASS_DEFINITION(test_2410) {
+    GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTGlobals::sleep( );
-
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller( os, 166740, 166755 ) );
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 166740, 166755));
 
-    QWidget *sequenceWidget = GTWidget::findWidget( os, "ADV_single_sequence_widget_0" );
-    CHECK_SET_ERR( NULL != sequenceWidget, "sequenceWidget is not present" );
+    QWidget *sequenceWidget = GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
+    CHECK_SET_ERR(NULL != sequenceWidget, "sequenceWidget is not present");
 
-    GTWidget::click( os, sequenceWidget );
-    GTKeyboardUtils::selectAll( os );
+    GTWidget::click(os, sequenceWidget);
+    GTKeyboardUtils::selectAll(os);
 
-    QWidget *graphAction = GTWidget::findWidget( os, "GraphMenuAction", sequenceWidget, false );
-    Runnable *chooser = new PopupChooser( os, QStringList( ) << "GC Content (%)" );
-    GTUtilsDialog::waitForDialog( os, chooser );
+    QWidget *graphAction = GTWidget::findWidget(os, "GraphMenuAction", sequenceWidget, false);
+    Runnable *chooser = new PopupChooser(os, QStringList() << "GC Content (%)");
+    GTUtilsDialog::waitForDialog(os, chooser);
 
-    GTWidget::click( os, graphAction );
-    GTGlobals::sleep(500);
+    GTWidget::click(os, graphAction);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTWidget::click( os, GTAction::button( os,
-        "action_zoom_in_human_T1 (UCSC April 2002 chr7:115977709-117855134)" ) );
+    GTWidget::click(os, GTAction::button(os,
+        "action_zoom_in_human_T1 (UCSC April 2002 chr7:115977709-117855134)"));
 
-    QWidget *renderArea = GTWidget::findWidget( os, "GSequenceGraphViewRenderArea", sequenceWidget );
-    const QPoint mouseInitialPos( 4 * renderArea->width( ) / 7, renderArea->height( ) / 2 );
-    GTWidget::click(os, renderArea, Qt::LeftButton, mouseInitialPos );
-    GTGlobals::sleep( 200 );
+    QWidget *renderArea = GTWidget::findWidget(os, "GSequenceGraphViewRenderArea", sequenceWidget);
+    const QPoint mouseInitialPos(4 * renderArea->width() / 7, renderArea->height() / 2);
+    GTWidget::click(os, renderArea, Qt::LeftButton, mouseInitialPos);
+    GTGlobals::sleep(200);
 
-    const QPoint mouseInitialAbsPos = GTMouseDriver::getMousePosition( );
-    const int rightMouseLimit = mouseInitialAbsPos.x( ) * 1.3;
+    const QPoint mouseInitialAbsPos = GTMouseDriver::getMousePosition();
+    const int rightMouseLimit = mouseInitialAbsPos.x() * 1.3;
 
-    for ( int x = mouseInitialAbsPos.x( ); x < rightMouseLimit; x += 5 ) {
-        const QPoint currentPos( x, mouseInitialAbsPos.y( ) );
-        GTMouseDriver::moveTo( os, currentPos );
+    for (int x = mouseInitialAbsPos.x(); x < rightMouseLimit; x += 5) {
+        const QPoint currentPos(x, mouseInitialAbsPos.y());
+        GTMouseDriver::moveTo(currentPos);
     }
 }
 
@@ -2990,17 +2981,17 @@ GUI_TEST_CLASS_DEFINITION( test_2415 ) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Right click on the object sequence name in the project view.
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)"));
 
     // 3. Click the menu {Edit -> Rename}.
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EDIT_MENU << "Rename"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Rename"));
+    GTMouseDriver::click(Qt::RightButton);
 
     // 4. Enter the new name: "name".
-    GTKeyboardDriver::keySequence(os, "name");
+    GTKeyboardDriver::keySequence("name");
 
     // 5. Press Enter.
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
 
     // Expected state: the sequence is renamed.
     GTUtilsProjectTreeView::findIndex(os, "name");
@@ -3023,15 +3014,15 @@ GUI_TEST_CLASS_DEFINITION( test_2424 ) {
     GTUtilsWorkflowDesigner::connect(os, seqReader, qualFilter);
     GTUtilsWorkflowDesigner::connect(os, qualFilter, seqWriter);
     //     2. Connect workers into schema, set input data and output data (for example eas.fastq from samples)
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
+    GTMouseDriver::click();
     QString dirPath = dataDir + "samples/FASTA/";
     GTUtilsWorkflowDesigner::setDatasetInputFile( os, dirPath, "human_T1.fa" );
 
     const QString outputFilePath = workflowOutputDir.absolutePath( ) + "/test.gb";
 
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, "Write Sequence" ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Write Sequence" ) );
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setParameter( os, "Output file", outputFilePath, GTUtilsWorkflowDesigner::textValue );
     //     3. Launch the schema.
     //     Expected state: schema didnt start, error "Quality filter example"
@@ -3054,9 +3045,9 @@ GUI_TEST_CLASS_DEFINITION( test_2430 ) {
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Read Sequence", true);
     GTUtilsWorkflowDesigner::toggleBreakpointManager(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, 'b', GTKeyboardDriver::key["ctrl"]);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( 'b', Qt::ControlModifier);
 
     GTGlobals::sleep();
     QStringList breakpoints = GTUtilsWorkflowDesigner::getBreakpointList(os);
@@ -3075,8 +3066,8 @@ GUI_TEST_CLASS_DEFINITION(test_2431) {
     GTGlobals::sleep(1000);
 
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Read Sequence", true);
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(1000);
     WorkflowProcessItem* readSeq = GTUtilsWorkflowDesigner::getWorker(os, "Read Sequence",GTGlobals::FindOptions(false));
     CHECK_SET_ERR(readSeq == NULL, "Item didn't deleted");
@@ -3164,7 +3155,7 @@ GUI_TEST_CLASS_DEFINITION( test_2449 ) {
     int prev = 0;
     while (0 < sizeSpinBox->value()) {
         prev = sizeSpinBox->value();
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Down);
         GTGlobals::sleep(100);
         if (prev <= sizeSpinBox->value()) {
             break;
@@ -3243,13 +3234,13 @@ GUI_TEST_CLASS_DEFINITION( test_2460 ) {
 
     QStringList list = GTUtilsMSAEditorSequenceArea::getNameList(os);
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 1), QPoint(-5, list.size() - 1));
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Delete);
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-5, 0));
 
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -3294,7 +3285,7 @@ GUI_TEST_CLASS_DEFINITION(test_2470) {
     GTUtilsDialog::waitForDialog(os, new OkClicker(os, testDir + "_common_data/scenarios/_regression/2470/nice_base.nhr",
         testDir + "_common_data/scenarios/sandbox/2470_fetched.fa"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "fetchMenu" << "fetchSequenceById"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::getItemCenter(os, "gnl|BL_ORD_ID|11 Conocephalus_sp");
@@ -3337,7 +3328,7 @@ GUI_TEST_CLASS_DEFINITION(test_2470_1) {
     GTUtilsDialog::waitForDialog(os, new OkClicker(os, testDir + "_common_data/scenarios/_regression/2470/nice_base.nhr",
         testDir + "_common_data/scenarios/sandbox/2470_1_fetched.fa"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "fetchMenu" << "fetchSequenceById"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::getItemCenter(os, "gnl|BL_ORD_ID|11 Conocephalus_sp");
@@ -3360,13 +3351,13 @@ GUI_TEST_CLASS_DEFINITION( test_2475 ) {
     GTUtilsWorkflowDesigner::addSample(os, "RNA-seq analysis with Tuxedo tools");
     GTGlobals::sleep();
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read RNA-seq Short Reads"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read RNA-seq Short Reads"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bowtie2", "reads_1.fq");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bowtie2", "reads_2.fq");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Find Splice Junctions with TopHat"));
-    GTMouseDriver::click(os);
+    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 basename", "human_T1_cutted", GTUtilsWorkflowDesigner::textValue);
 
@@ -3388,18 +3379,18 @@ GUI_TEST_CLASS_DEFINITION( test_2482 ) {
     CHECK_SET_ERR(items.size() >= 4, "Incorrect tree size");
 
     QPoint nodeCoords = GTUtilsPhyTree::getGlobalCoord(os, items.at(3));
-    GTMouseDriver::moveTo(os, nodeCoords);
+    GTMouseDriver::moveTo(nodeCoords);
 
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 
     // 4. Call context menu on the Tree Viewer.
     // Expected state: menu items "Swap Sublings" and "Reroot tree" are disabled.
     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList()<<"Reroot tree", PopupChecker::IsDisabled));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList()<<"Swap Siblings", PopupChecker::IsDisabled));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 }
 
@@ -3417,15 +3408,15 @@ GUI_TEST_CLASS_DEFINITION( test_2487 ) {
     CHECK_SET_ERR(items.size() != 0, "Tree is empty");
 
     QPoint rootCoords = GTUtilsPhyTree::getGlobalCoord(os, items.first());
-    GTMouseDriver::moveTo(os, rootCoords);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(rootCoords);
+    GTMouseDriver::click();
 
     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList()<<"Reroot tree", PopupChecker::IsDisabled));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList()<<"Collapse", PopupChecker::IsDisabled));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 }
 
@@ -3451,7 +3442,7 @@ GUI_TEST_CLASS_DEFINITION( test_2498 ) {
 
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows",
                                                       PopupChecker::IsDisabled, GTGlobals::UseMouse));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     //TODO: Expected state: this menu item is disabled for the empty msa.
 }
@@ -3492,20 +3483,20 @@ GUI_TEST_CLASS_DEFINITION( test_2513 ){
     QList<QGraphicsItem*> nodes = GTUtilsPhyTree::getNodes(os);
     CHECK_SET_ERR(!nodes.isEmpty(), "Nodes list is empty");
 
-    GTMouseDriver::moveTo(os, GTUtilsPhyTree::getGlobalCoord(os, nodes.last()));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsPhyTree::getGlobalCoord(os, nodes.last()));
+    GTMouseDriver::click();
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList()<<"Swap Siblings", PopupChecker::IsDisabled));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList()<<"Reroot tree", PopupChecker::IsEnabled));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(500);
 
-    GTMouseDriver::moveTo(os, GTUtilsPhyTree::getGlobalCoord(os, nodes.at(22)));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsPhyTree::getGlobalCoord(os, nodes.at(22)));
+    GTMouseDriver::click();
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList()<<"Swap Siblings", PopupChecker::IsEnabled));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList()<<"Reroot tree", PopupChecker::IsEnabled));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
 }
@@ -3517,7 +3508,7 @@ GUI_TEST_CLASS_DEFINITION( test_2519 ) {
 
     // 2. Go to position 20000.
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 20000));
-    GTKeyboardDriver::keyClick(os, 'g', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'g', Qt::ControlModifier);
 
     // 3. Call context menu, select menu item {Edit sequence -> Remove subsequence...}.
     // Expected state: a "Remove subsequence" dialog appears.
@@ -3542,8 +3533,8 @@ GUI_TEST_CLASS_DEFINITION( test_2538 ){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Call context menu on node just near root. Click "Collapse"
     GTGlobals::sleep(1000);
-    GTMouseDriver::moveTo(os, GTUtilsPhyTree::getGlobalCoord(os, GTUtilsPhyTree::getNodes(os).at(1)));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsPhyTree::getGlobalCoord(os, GTUtilsPhyTree::getNodes(os).at(1)));
+    GTMouseDriver::click();
     GTGlobals::sleep(1000);
 
     QWidget* treeView = GTWidget::findWidget(os, "treeView");
@@ -3551,10 +3542,10 @@ GUI_TEST_CLASS_DEFINITION( test_2538 ){
     QPixmap pixmap = QPixmap::grabWidget(treeView, treeView->rect());
     QImage initImg = pixmap.toImage();
 
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 //    3. Call context menu on node just near root. Click "Expand"
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
 //    Expected state: tree has the same view as at the beginning
     pixmap = QPixmap::grabWidget(treeView, treeView->rect());
@@ -3568,8 +3559,7 @@ GUI_TEST_CLASS_DEFINITION( test_2540 ){
 //    1. Forbid to write to the dir with the source bam(sam) file.
     QDir().mkpath(sandBoxDir + "test_2540");
     GTFile::copy(os, testDir + "_common_data/bam/chrM.sorted.bam", sandBoxDir + "test_2540/chrM.sorted.bam");
-    PermissionsSetter p;
-    p.setReadOnly(os, sandBoxDir + "test_2540");
+    GTFile::setReadOnly(os, sandBoxDir + "test_2540");
 //    2. Try to open this file with UGENE.
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "chrM.sorted.bam.ugenedb"));
     GTFileDialog::openFile(os, sandBoxDir + "test_2540/chrM.sorted.bam");
@@ -3588,10 +3578,9 @@ GUI_TEST_CLASS_DEFINITION( test_2542 ) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Lock the document
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__edit_menu"
-        << "action_document_lock"));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_document_lock"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
+    GTMouseDriver::click(Qt::RightButton);
 
     // 3. Do pairwise alignment with any sequences.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(1, 1));
@@ -3623,7 +3612,7 @@ GUI_TEST_CLASS_DEFINITION( test_2543 ) {
                 GTLineEdit::setText(os,saveLineEdit, saveTree);
             }
 
-            GTUtilsDialog::waitForDialogWhichMayRunOrNot( os, new LicenseAgreemntDialogFiller( os ) );
+            GTUtilsDialog::waitForDialogWhichMayRunOrNot( os, new LicenseAgreementDialogFiller( os ) );
             //Expected state: UGENE does not allow to create tree, the message dialog appears
             GTUtilsNotifications::waitForNotification(os, true);
 
@@ -3643,8 +3632,7 @@ GUI_TEST_CLASS_DEFINITION( test_2543 ) {
     const QString outputFilePath = testDir + "_common_data/scenarios/sandbox/gui_regr_2543";
     QDir sandboxDir( testDir + "_common_data/scenarios/sandbox" );
     sandboxDir.mkdir( "gui_regr_2543" );
-    PermissionsSetter p;
-    p.setReadOnly(os, outputFilePath);
+    GTFile::setReadOnly(os, outputFilePath);
     GTGlobals::sleep( 2000 );
 
     GTUtilsDialog::waitForDialog( os, new BuildTreeDialogFiller_test_2543( os, outputFilePath + "/test.nwk") );
@@ -3672,8 +3660,7 @@ GUI_TEST_CLASS_DEFINITION( test_2544 ){
 //    Expected state: the dialog has disappeared, subsequence has been removed
 
 //    4. Change permissions to the file to read-only
-    PermissionsSetter p;
-    p.setReadOnlyFlag(os, sandBoxDir + "test_2544.fa");
+    GTFile::setReadOnly(os, sandBoxDir + "test_2544.fa");
 //    5. Use context menu on the document item in project view { Save selected documents }
 
     class innerMessageBoxFiller: public MessageBoxDialogFiller{
@@ -3740,14 +3727,14 @@ GUI_TEST_CLASS_DEFINITION(test_2549) {
     GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open as...");
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick(os, '3', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '3', Qt::AltModifier);
     GTGlobals::sleep();
     GTWidget::click(os, GTWidget::findWidget(os, "dock_log_view"));
-    GTKeyboardDriver::keySequence(os, "this sequence needed to ensure that log view has text");
+    GTKeyboardDriver::keySequence("this sequence needed to ensure that log view has text");
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 
     const QString clipboardContent = GTClipboard::text(os);
     CHECK_SET_ERR(!clipboardContent.isEmpty(), "Clipboard is empty");
@@ -3775,14 +3762,14 @@ GUI_TEST_CLASS_DEFINITION(test_2566) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //2. Press Ctrl+F.
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep();
 
 //3. Enter the pattern: GCTAGCTTAAGTAACGCCAC
     QWidget *patternInputLine = QApplication::focusWidget();
     CHECK_SET_ERR(NULL != patternInputLine && patternInputLine->objectName() == "textPattern", "Focus is not on FindPattern widget");
 
-    GTKeyboardDriver::keySequence(os, "GCTAGCTTAAGTAACGCCAC");
+    GTKeyboardDriver::keySequence("GCTAGCTTAAGTAACGCCAC");
     GTGlobals::sleep(1000);
 
 //4. Choose the algorithm: Substitute.
@@ -3811,14 +3798,14 @@ GUI_TEST_CLASS_DEFINITION( test_2567 ) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Press Ctrl+F.
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep();
 
     //3. Enter the pattern: GCTAGCTTAAGTAACGCCAC
     QWidget *patternInputLine = QApplication::focusWidget();
     CHECK_SET_ERR(NULL != patternInputLine && patternInputLine->objectName() == "textPattern", "Focus is not on FindPattern widget");
 
-    GTKeyboardDriver::keySequence(os, "GCTAGCTTAAGTAACGCCAC");
+    GTKeyboardDriver::keySequence("GCTAGCTTAAGTAACGCCAC");
     GTGlobals::sleep(1000);
 
     //4. Choose the algorithm: Substitute.
@@ -3889,12 +3876,12 @@ GUI_TEST_CLASS_DEFINITION( test_2569 ){
     GTUtilsWorkflowDesigner::addSample(os, "call variants");
     GTGlobals::sleep();
 //    3. Set valid input data.
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
-    GTMouseDriver::click(os);
+    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");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    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::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -3919,7 +3906,7 @@ GUI_TEST_CLASS_DEFINITION( test_2570 ) {
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_BLAST_SUBMENU << ACTION_BLAST_FORMAT_DB));
     FormatDBSupportRunDialogFiller::Parameters p;
@@ -3927,7 +3914,7 @@ GUI_TEST_CLASS_DEFINITION( test_2570 ) {
     p.checkAlphabetType = true;
     p.alphabetType = FormatDBSupportRunDialogFiller::Parameters::Nucleotide;
     GTUtilsDialog::waitForDialog(os, new FormatDBSupportRunDialogFiller(os, p));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2577 ) {
@@ -3968,8 +3955,8 @@ GUI_TEST_CLASS_DEFINITION( test_2578 ) {
 //    4. Select any reference sequence.
 //    Expected state: the "Export" button is active.
     GTWidget::click(os, GTWidget::findWidget(os, "sequenceLineEdit"));
-    GTKeyboardDriver::keySequence(os, "Montana_montana");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keySequence("Montana_montana");
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep(300);
     CHECK_SET_ERR(exportButton->isEnabled(), "exportButton is disabled unexpectedly");
 
@@ -4026,7 +4013,7 @@ GUI_TEST_CLASS_DEFINITION(test_2581) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle"));
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsLog::check(os, l);
@@ -4049,7 +4036,7 @@ GUI_TEST_CLASS_DEFINITION(test_2581_1) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with ClustalW", GTGlobals::UseMouse));
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     GTUtilsLog::check(os, l);
@@ -4108,7 +4095,7 @@ GUI_TEST_CLASS_DEFINITION(test_2581_4) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with T-Coffee", GTGlobals::UseMouse));
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep();
     GTUtilsLog::check(os, l);
@@ -4130,7 +4117,7 @@ GUI_TEST_CLASS_DEFINITION(test_2581_5) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign", GTGlobals::UseMouse));
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsLog::check(os, l);
@@ -4158,7 +4145,7 @@ GUI_TEST_CLASS_DEFINITION(test_2583){
 
     GTUtilsDialog::waitForDialog(os, new ExportBlastResultDialogFiller(os, sandBoxDir + "test_2583/test_2583.aln", true));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "ADV_MENU_EXPORT" << "export_BLAST_result_to_alignment"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 //    "Export BLAST result to alignment" dialog appeared. Set some output file.
 //    check "add reference to alignment" checkBox
 //    Click "Export"
@@ -4196,13 +4183,13 @@ GUI_TEST_CLASS_DEFINITION( test_2612 ) {
     GTWidget::click(os, GTWidget::findWidget(os, "getAnnotationsPushButton"));
     GTGlobals::sleep(500);
     // Expected state: the annotation with pattern created and shown in sequence view.
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
     GTGlobals::sleep(1000);
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
     // 3. Delete annotation from annotation editor.
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     // Expected state: there is no annotation in sequence view.
     GTGlobals::sleep(100);
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature", GTGlobals::FindOptions(false))==NULL, "Annotations document not deleted");
@@ -4234,7 +4221,7 @@ GUI_TEST_CLASS_DEFINITION(test_2622) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Press Ctrl + F.
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep();
 
     // 4. Choose "Regular expression" algorithm.
@@ -4243,8 +4230,8 @@ GUI_TEST_CLASS_DEFINITION(test_2622) {
     // 5. Write "X+" in the pattern string.
     QWidget *textPattern = GTWidget::findWidget(os, "textPattern");
     GTWidget::click(os, textPattern);
-    GTKeyboardDriver::keyClick(os, 'X');
-    GTKeyboardDriver::keyClick(os, '=', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'X');
+    GTKeyboardDriver::keyClick( '=', Qt::ShiftModifier);
 
     // UGENE does not hang.
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -4261,7 +4248,7 @@ GUI_TEST_CLASS_DEFINITION(test_2622_1) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 3. Press Ctrl + F.
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep();
 
     // 4. Choose "Regular expression" algorithm.
@@ -4270,8 +4257,8 @@ GUI_TEST_CLASS_DEFINITION(test_2622_1) {
     // 5. Write "X+" in the pattern string.
     QWidget *textPattern = GTWidget::findWidget(os, "textPattern");
     GTWidget::click(os, textPattern);
-    GTKeyboardDriver::keyClick(os, 'X');
-    GTKeyboardDriver::keyClick(os, '=', GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyClick( 'X');
+    GTKeyboardDriver::keyClick( '=', Qt::ShiftModifier);
 
     // 6. Check "Results no longer than" and set the value 1.
     QCheckBox *boxUseMaxResultLen = qobject_cast<QCheckBox *>(GTWidget::findWidget(os, "boxUseMaxResultLen"));
@@ -4339,7 +4326,8 @@ GUI_TEST_CLASS_DEFINITION(test_2638){
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::click(os, "Assemble Transcripts with Cufflinks");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
+    GTGlobals::sleep(200);
 
     //    Launch pipeline
     GTUtilsWorkflowDesigner::runWorkflow(os);
@@ -4358,6 +4346,7 @@ GUI_TEST_CLASS_DEFINITION(test_2638){
 
 GUI_TEST_CLASS_DEFINITION(test_2640){
 //    0. Set CPU optimisation in settings dialog
+    GTGlobals::sleep();
     class custom : public CustomScenario {
     public:
         void run(HI::GUITestOpStatus &os) {
@@ -4397,7 +4386,8 @@ GUI_TEST_CLASS_DEFINITION(test_2640){
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::click(os, "Assemble Transcripts with Cufflinks");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
+    GTThread::waitForMainThread();
 
     //    Launch pipeline
     GTUtilsWorkflowDesigner::runWorkflow(os);
@@ -4441,17 +4431,17 @@ GUI_TEST_CLASS_DEFINITION(test_2651) {
 
     // 6. With Ctrl pressed, select all three annotation objects in the project view
     GTUtilsProjectTreeView::openView(os);
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
 
     GTUtilsProjectTreeView::click(os, "AB797210 features");
     GTUtilsProjectTreeView::click(os, "AB797204 features");
     GTUtilsProjectTreeView::click(os, "AB797201 features");
 
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 
     // 7. delete this objects through context menu
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__remove_selected_action"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     // Expected state : the objects are deleted, the popup is shown
     GTGlobals::FindOptions safeOptions(false);
@@ -4505,6 +4495,7 @@ GUI_TEST_CLASS_DEFINITION( test_2656 ) {
 
     GTUtilsDialog::waitForDialog(os, new DotplotLoadSequenceFiller(os, testDir + "_common_data/fasta", "empty_2.fa"));
     GTWidget::click(os, GTWidget::findWidget(os, "build_dotplot_action_widget"));
+    GTThread::waitForMainThread();
 
     CHECK_SET_ERR( l.hasError(), "An error should be in the log");
 }
@@ -4516,12 +4507,12 @@ GUI_TEST_CLASS_DEFINITION( test_2662 ){
     GTUtilsWorkflowDesigner::addSample(os, "call variants");
     GTGlobals::sleep(1000);
 //    3. Set valid input data.
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
-    GTMouseDriver::click(os);
+    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");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM", "chrM.fa");
 //    4. Start the scheme.
     GTUtilsWorkflowDesigner::runWorkflow(os);
@@ -4545,12 +4536,12 @@ GUI_TEST_CLASS_DEFINITION( test_2667 ) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Select the annotation object in the project view.
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::click();
 
 //    3. Press "delete" key.
 //    Expected state: the annotation object is removed from the document.
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::FindOptions options;
     options.failIfNotFound = false;
     GTUtilsProjectTreeView::findIndex(os, "NC_001363 features", options);
@@ -4599,8 +4590,8 @@ GUI_TEST_CLASS_DEFINITION(test_2690){
 //    4. Open the "Annotation highlighting" OP widget.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_ANNOT_HIGHLIGHT"));
 //    5. Select the first annotation.
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "ann1"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "ann1"));
+    GTMouseDriver::click();
 //    6. Click the "next annotation" button.
     QWidget* nextAnnotationButton = GTWidget::findWidget(os, "nextAnnotationButton");
     GTWidget::click(os, nextAnnotationButton);
@@ -4806,8 +4797,8 @@ GUI_TEST_CLASS_DEFINITION(test_2726) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(1,0), QPoint(1,0));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["backspace"]);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["backspace"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Backspace);
+    GTKeyboardDriver::keyClick( Qt::Key_Backspace);
 
     //Expected state : MSA view has opened, the "Undo" button is disabled.
     QAbstractButton *undoButton = GTAction::button(os, "msa_action_undo");
@@ -4853,9 +4844,9 @@ GUI_TEST_CLASS_DEFINITION(test_2730) {
     GTWidget::click(os, menuAction);
     GTGlobals::sleep(500);
 //Close file - UGENE does not crash.
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "abcd.fa"));
-    GTMouseDriver::click( os );
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "abcd.fa"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(500);
 }
 
@@ -4908,8 +4899,8 @@ GUI_TEST_CLASS_DEFINITION(test_2754) {
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     class custom : public CustomScenario {
@@ -4931,15 +4922,14 @@ GUI_TEST_CLASS_DEFINITION(test_2754) {
     GTUtilsDialog::waitForDialog(os, new FindQualifierFiller(os, new custom()));
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "find_qualifier_action"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_2761_1) {
 //    1. Open "samples/CLUSTALW/COI.aln".
     QDir().mkpath(sandBoxDir + "test_2761_1");
-    PermissionsSetter p;
-    p.setReadOnly(os, sandBoxDir + "test_2761_1");
+    GTFile::setReadOnly(os, sandBoxDir + "test_2761_1");
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Select some area in the MSA.
@@ -4961,7 +4951,7 @@ GUI_TEST_CLASS_DEFINITION(test_2761_1) {
     };
 
     GTUtilsDialog::waitForDialog(os,new customFiller(os));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 //    4. Set the destination path to the dir without write permissions.
 //    5. Click "Extract".
 //    Expected: the message about write permissions to the dir appears. The extraction task is not run.
@@ -4990,7 +4980,7 @@ GUI_TEST_CLASS_DEFINITION(test_2761_2) {
         };
 
         GTUtilsDialog::waitForDialog(os,new customFiller(os));
-        GTMouseDriver::click(os, Qt::RightButton);
+        GTMouseDriver::click(Qt::RightButton);
     //    4. Set the destination path to the dir that does not exists
     //    5. Click "Extract".
     //    Expected: the message about write permissions to the dir appears. The extraction task is not run.
@@ -5014,7 +5004,7 @@ GUI_TEST_CLASS_DEFINITION(test_2762) {
             QAbstractButton* cancel = buttonBox->button(QDialogButtonBox::Cancel);
             GTWidget::click(os, cancel);
 #else
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Escape);
 #endif
         }
     };
@@ -5147,16 +5137,16 @@ GUI_TEST_CLASS_DEFINITION(test_2784) {
     //Expected state : The "Align with MUSCLE" dialog has appeared
     //3. Check the "Translation to amino when aligning" checkbox and press "Align"
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(41, 0), QPoint(43, 17));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     const QString initialRegionContent = GTClipboard::text(os);
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 
     GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os, MuscleDialogFiller::Default, true, true));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseMouse));
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(10, 5));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     //Expected state : Alignment task has started.After some time it finishes without errors
     //and alignment gets changed somehow.The "Undo" button becomes active
@@ -5165,10 +5155,10 @@ GUI_TEST_CLASS_DEFINITION(test_2784) {
     CHECK_SET_ERR(undoButton->isEnabled(), "'Undo' button is unexpectedly disabled");
 
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(41, 0), QPoint(43, 17));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     const QString alignedRegionContent = GTClipboard::text(os);
     CHECK_SET_ERR(alignedRegionContent != initialRegionContent, "Alignment content has not been changed");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 
     //4. Click on the "Undo" button
     GTWidget::click(os, undoButton);
@@ -5176,10 +5166,10 @@ GUI_TEST_CLASS_DEFINITION(test_2784) {
     //Expected state : Alignment has been restored to its initial state.The "Undo" button gets disabled,
     //the "Redo" has been enabled
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(41, 0), QPoint(43, 17));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     const QString undoneRegionContent = GTClipboard::text(os);
     CHECK_SET_ERR(undoneRegionContent == initialRegionContent, "Undo hasn't reverted changes");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 
     CHECK_SET_ERR(!undoButton->isEnabled(), "'Undo' button is unexpectedly enabled");
 
@@ -5192,10 +5182,10 @@ GUI_TEST_CLASS_DEFINITION(test_2784) {
     //Expected state : Alignment has been changed.The "Redo" button gets disabled,
     //the "Undo" has been enabled
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(41, 0), QPoint(43, 17));
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     const QString redoneRegionContent = GTClipboard::text(os);
     CHECK_SET_ERR(redoneRegionContent == alignedRegionContent, "Redo hasn't changed the alignment");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Escape);
 
     CHECK_SET_ERR(!redoButton->isEnabled(), "'Redo' button is unexpectedly enabled");
     CHECK_SET_ERR(undoButton->isEnabled(), "'Undo' button is unexpectedly disabled");
@@ -5325,8 +5315,8 @@ GUI_TEST_CLASS_DEFINITION( test_2808 ){
     GTWidget::click(os, groupTable);
 
     QPoint p = GTTableView::getCellPosition(os, groupTable, 0, 0);
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
 
     CHECK_SET_ERR( addButton->isEnabled(), "AddButton is disabled!");
     CHECK_SET_ERR( editButton->isEnabled(), "EditButton is disabled!");
@@ -5410,14 +5400,14 @@ GUI_TEST_CLASS_DEFINITION(test_2829) {
     //4) Choose some annotation by left mouse button on the upper sequence view
     //Expected state: horisontal or vertical selection is shown on DotPlot
     QList<QTreeWidgetItem*> geneItems = GTUtilsAnnotationsTreeView::findItems(os, "gene", GTGlobals::FindOptions(false));
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, geneItems.at(1)));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, geneItems.at(1)));
+    GTMouseDriver::click();
 
     //5) In second sequence view click Remove sequence on the toolbar
     //Expected state: DotPlot closed and UGENE didn't crash
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"], GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Tab, Qt::ControlModifier);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"], GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Tab, Qt::ControlModifier);
     GTGlobals::sleep(500);
 
     QWidget* toolbar = GTWidget::findWidget(os, "views_tool_bar_NC_001363");
@@ -5492,8 +5482,8 @@ GUI_TEST_CLASS_DEFINITION(test_2884) {
     GTUtilsWorkflowDesigner::addAlgorithm( os, "Test for Diff. Expression with Cuffdiff");
     CHECK_OP(os, );
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Test for Diff. Expression with Cuffdiff"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Test for Diff. Expression with Cuffdiff"));
+    GTMouseDriver::click();
     CHECK_SET_ERR(GTUtilsWorkflowDesigner::getParameter(os, "Multi read correct") == "False", "'Mate inner distance', Parameter value doesn't amtch");
 }
 
@@ -5504,8 +5494,8 @@ GUI_TEST_CLASS_DEFINITION(test_2887) {
     GTUtilsWorkflowDesigner::addAlgorithm( os, "Find Splice Junctions with TopHat");
     CHECK_OP(os, );
     //3. check "Mate inner distance" parameter is 50
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Find Splice Junctions with TopHat"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Find Splice Junctions with TopHat"));
+    GTMouseDriver::click();
     CHECK_SET_ERR(GTUtilsWorkflowDesigner::getParameter(os, "Mate inner distance") == "50", "'Mate inner distance', Parameter value doesn't amtch");
 }
 
@@ -5594,7 +5584,7 @@ GUI_TEST_CLASS_DEFINITION(test_2894){
 //    6. Close the tree view while the task is performed.
 //    Expected state: UGENE doesn't crash, view is closed, task cancels.
     GTUtilsProjectTreeView::click(os, "test_2894_COI.nwk");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
 }
 
@@ -5752,7 +5742,7 @@ GUI_TEST_CLASS_DEFINITION(test_2907) {
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "EcoRI"));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "EcoRI"));
 
     //3. Stop cursor on EcoRI qualifier.Wait for tooltip
     //Expected state : tooltip will appear
@@ -5768,8 +5758,8 @@ GUI_TEST_CLASS_DEFINITION(test_2910) {
     // 3. Select a "Multiple Range Selection" mode, enter the region: 10000..15000
     // 4. Click the "Go" button.
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, "10000..15000"));
-    GTKeyboardDriver::keyClick(os, 'A', GTKeyboardDriver::key["ctrl"]);
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, "10000..15000"));
+    GTKeyboardDriver::keyClick( 'A', Qt::ControlModifier);
     GTGlobals::sleep();
 
     // Expected state: the region is selected, there is a label "[5001 bp]" on the pan view.
@@ -5787,8 +5777,8 @@ GUI_TEST_CLASS_DEFINITION(test_2910_1) {
     // 3. Select a "Multiple Range Selection" mode, enter the region: 2000..5000,100000..110000
     // 4. Click the "Go" button.
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, "2000..5000,100000..110000"));
-    GTKeyboardDriver::keyClick(os, 'A', GTKeyboardDriver::key["ctrl"]);
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, "2000..5000,100000..110000"));
+    GTKeyboardDriver::keyClick( 'A', Qt::ControlModifier);
     GTGlobals::sleep(500);
 
     // Expected state: the region is selected, there is a label "[3001 bp]" and "[10001 bp]" on the pan view.
@@ -5836,7 +5826,7 @@ GUI_TEST_CLASS_DEFINITION(test_2910_2) {
         }
     };
     GTUtilsDialog::waitForDialog(os, new CancelClicker(os));
-    GTKeyboardDriver::keyClick(os, 'A', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'A', Qt::ControlModifier);
     GTGlobals::sleep(500);
 }
 GUI_TEST_CLASS_DEFINITION(test_2910_3) {
@@ -5875,7 +5865,7 @@ GUI_TEST_CLASS_DEFINITION(test_2910_3) {
         }
     };
     GTUtilsDialog::waitForDialog(os, new CancelClicker(os));
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
     GTGlobals::sleep();
 }
 
@@ -5889,7 +5879,7 @@ GUI_TEST_CLASS_DEFINITION(test_2923) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsMdi::activeWindow(os);
 
-    GTKeyboardDriver::keyClick(os, 'w', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'w', Qt::ControlModifier);
     GTGlobals::sleep();
     QWidget *mdi = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false));
     CHECK_SET_ERR(NULL == mdi, "Sequence view is not closed");
@@ -6018,11 +6008,11 @@ GUI_TEST_CLASS_DEFINITION(test_2945){
     bottomLeftToolBar = mainToolBar->mapToGlobal(bottomLeftToolBar);
     GTGlobals::sleep();
 
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, bottomLeftToolBar);
-    GTMouseDriver::release(os);
-    GTThread::waitForMainThread(os);
-    GTGlobals::sleep(5000);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(bottomLeftToolBar);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
+    GTGlobals::sleep(15000);
     QPoint handlePosition = splitterHandler->pos();
 
     QAbstractButton* cvButton = GTAction::button(os, "CircularViewAction");
@@ -6038,11 +6028,11 @@ GUI_TEST_CLASS_DEFINITION(test_2945){
     GTGlobals::sleep();
 
     QPoint p = GTMouseDriver::getMousePosition();
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, p + QPoint(0, 50));
-    GTMouseDriver::release(os);
-    GTThread::waitForMainThread(os);
-    GTGlobals::sleep(5000);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(p + QPoint(0, 50));
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
+    GTGlobals::sleep(15000);
 
     CHECK_SET_ERR(handlePosition == splitterHandler->pos(), QString("Handler was moved: expected: %1, actual: %2").arg(splitter->pos().y()).arg(handlePosition.y()));
 }
@@ -6061,21 +6051,21 @@ GUI_TEST_CLASS_DEFINITION(test_2951) {
     GTUtilsWorkflowDesigner::connect(os, GTUtilsWorkflowDesigner::getWorker(os, "Read Sequence"), GTUtilsWorkflowDesigner::getWorker(os, "Write Sequence"));
 
     //4. Set the input sequence: _common_data/fasta/abcd.fa.
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/fasta/", "abcd.fa");
 
     //5. Set the correct output sequence.
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Write Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Write Sequence"));
+    GTMouseDriver::click();
     QString outFile = GUrl(sandBoxDir + "test_2951.gb").getURLString();
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", outFile, GTUtilsWorkflowDesigner::textValue);
 
     //6. Edit a script for "Sequence count limit":
     //    printToLog("test");
     //    1
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
+    GTMouseDriver::click();
     GTUtilsDialog::waitForDialog(os, new ScriptEditorDialogFiller(os, "", "printToLog(\"test message\");\n1"));
     GTUtilsWorkflowDesigner::setParameterScripting(os, "Sequence count limit", "user script");
 
@@ -6139,10 +6129,10 @@ GUI_TEST_CLASS_DEFINITION(test_2962_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     QPoint p = GTUtilsProjectTreeView::getItemCenter(os, "GXL_141618");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTUtilsCv::commonCvBtn::click(os);
 
     GTUtilsLog::check(os, l);
@@ -6166,9 +6156,9 @@ GUI_TEST_CLASS_DEFINITION(test_2971) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //Close file - UGENE does not crash.
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::click( os );
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(500);
 }
 
@@ -6233,9 +6223,9 @@ GUI_TEST_CLASS_DEFINITION(test_2981) {
     int initW = treeView->rect().width();
     GTGlobals::sleep(500);
 //    5. Hide/show a project view.
-    GTKeyboardDriver::keyClick(os, '1', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '1', Qt::AltModifier);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyClick(os, '1', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '1', Qt::AltModifier);
     GTGlobals::sleep(500);
 //    Expected state: the tree size is not changed.
     int finalW = treeView->rect().width();
@@ -6264,8 +6254,8 @@ GUI_TEST_CLASS_DEFINITION(test_2987) {
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "ep_exportAnnotations2CSV"));
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "test_2987/test_2987", ExportAnnotationsFiller::csv, os));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "test_2987.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "test_2987.gb"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     const QFile csvFile(sandBoxDir + "test_2987/test_2987");
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 31d6d11..7185018 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
@@ -19,25 +19,35 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTestsRegressionScenarios_3001_4000.h"
+#include <QDialogButtonBox>
+#include <QFileDialog>
+#include <QHeaderView>
+#include <QListWidget>
+#include <QMainWindow>
+#include <QMenu>
+#include <QPlainTextEdit>
+#include <QProgressBar>
+#include <QPushButton>
+#include <QTableWidget>
+#include <QWebElement>
+#include <QWebFrame>
+#include <QWebView>
+#include <QWizard>
 
-#include "primitives/GTAction.h"
-#include <primitives/GTCheckBox.h>
-#include "system/GTClipboard.h"
-#include <primitives/GTComboBox.h>
-#include "system/GTFile.h"
+#include <GTGlobals.h>
+#include <base_dialogs/DefaultDialogFiller.h>
 #include <base_dialogs/GTFileDialog.h>
-#include "GTGlobals.h"
+#include <base_dialogs/MessageBoxFiller.h>
 #include <drivers/GTKeyboardDriver.h>
-#include "utils/GTKeyboardUtils.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 <drivers/GTMouseDriver.h>
+#include <primitives/GTMenu.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>
@@ -45,16 +55,40 @@
 #include <primitives/GTToolbar.h>
 #include <primitives/GTTreeWidget.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/GTThread.h>
+#include <utils/GTUtilsDialog.h>
+#include <utils/GTUtilsToolTip.h>
+
+#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/AssemblyNavigationWidget.h>
+#include <U2View/DetView.h>
+#include <U2View/MSAEditor.h>
+#include <U2View/MSAEditorNameList.h>
+
+#include "../../workflow_designer/src/WorkflowViewItems.h"
 #include "GTDatabaseConfig.h"
-#include "GTUtilsAnnotationsTreeView.h"
+#include "GTTestsRegressionScenarios_3001_4000.h"
 #include "GTUtilsAnnotationsHighlightingTreeView.h"
+#include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsAssemblyBrowser.h"
 #include "GTUtilsBookmarksTreeView.h"
 #include "GTUtilsCircularView.h"
 #include "GTUtilsDashboard.h"
-#include "utils/GTUtilsDialog.h"
 #include "GTUtilsEscClicker.h"
 #include "GTUtilsExternalTools.h"
 #include "GTUtilsLog.h"
@@ -63,8 +97,8 @@
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsNotifications.h"
 #include "GTUtilsOptionPanelMSA.h"
-#include "GTUtilsOptionsPanel.h"
 #include "GTUtilsOptionPanelSequenceView.h"
+#include "GTUtilsOptionsPanel.h"
 #include "GTUtilsPhyTree.h"
 #include "GTUtilsProject.h"
 #include "GTUtilsProjectTreeView.h"
@@ -72,15 +106,11 @@
 #include "GTUtilsSharedDatabaseDocument.h"
 #include "GTUtilsTask.h"
 #include "GTUtilsTaskTreeView.h"
-#include "utils/GTUtilsToolTip.h"
-#include "utils/GTThread.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
-
-#include <base_dialogs/DefaultDialogFiller.h>
+#include "api/GTSequenceReadingModeDialog.h"
+#include "api/GTSequenceReadingModeDialogUtils.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"
@@ -144,13 +174,13 @@
 #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/umuscle/MuscleDialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.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"
 #include "runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h"
 #include "runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h"
@@ -160,40 +190,6 @@
 #include "runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 
-#include <U2Core/AppContext.h>
-#include <U2Core/ExternalToolRegistry.h>
-#include <U2Core/U2ObjectDbi.h>
-
-#include <U2Gui/ProjectViewModel.h>
-#include <U2Gui/ToolsMenu.h>
-
-#include "../../workflow_designer/src/WorkflowViewItems.h"
-
-#include <U2View/ADVConstants.h>
-#include <U2View/ADVSingleSequenceWidget.h>
-#include <U2View/AnnotatedDNAViewFactory.h>
-#include <U2View/AnnotationsTreeView.h>
-#include <U2View/AssemblyNavigationWidget.h>
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorNameList.h>
-#include <U2View/DetView.h>
-
-#include <QDialogButtonBox>
-#include <QFileDialog>
-#include <QHeaderView>
-#include <QListWidget>
-#include <QMainWindow>
-#include <QMenu>
-#include <QPlainTextEdit>
-#include <QProgressBar>
-#include <QPushButton>
-#include <QTableWidget>
-#include <QWebElement>
-#include <QWebFrame>
-#include <QWebView>
-#include <QWizard>
-
-
 namespace U2 {
 
 namespace GUITest_regression_scenarios {
@@ -251,10 +247,10 @@ GUI_TEST_CLASS_DEFINITION(test_3017) {
     GTGlobals::sleep(3000);
 
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(13,8));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
 
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep();
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR("S" == clipboardText, "Alignment is not locked" + clipboardText);
@@ -271,7 +267,7 @@ GUI_TEST_CLASS_DEFINITION(test_3031){
     GTWidget::click(os, GTWidget::findWidget(os, "addSeq"));
     //    Delete "Montana_montana" sequence
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-4, 4));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     //    5. Right click on any sequence name
     //    Expected state: action "Set this sequence as reference" is visible, "Unset reference sequence" is invisible
 }
@@ -290,8 +286,8 @@ GUI_TEST_CLASS_DEFINITION(test_3034) {
     GTUtilsDialog::waitForDialog( os, new PopupChooser( os, QStringList( ) << ACTION_PROJECT__ADD_MENU
                                                         << ACTION_PROJECT__ADD_OBJECT) );
     QPoint docCenter = GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa");
-    GTMouseDriver::moveTo(os, docCenter);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(docCenter);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsLog::check(os, l);
 }
@@ -318,13 +314,13 @@ GUI_TEST_CLASS_DEFINITION(test_3035){
     QModelIndex index = GTUtilsProjectTreeView::findIndex(os, "et0001_sequence", parent);
 
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, index));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, index));
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList()<<"action_project__edit_menu", PopupChecker::NotExists));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList()<<"action_project__remove_selected_action", PopupChecker::NotExists));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "action_open_view"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
     QString name = GTUtilsMdi::activeWindowTitle(os);
     CHECK_SET_ERR(name == " [s] et0001_sequence", QString("unexpected window title:%1").arg(name));
@@ -332,15 +328,15 @@ GUI_TEST_CLASS_DEFINITION(test_3035){
     GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, sandBoxDir, "test_3035.fa"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__export_import_menu_action"
                                                       << "export sequences"));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, index));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, index));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(500);
 
     GTUtilsDialog::waitForDialog(os, new ExportSequenceAsAlignmentFiller(os, sandBoxDir, "test_3035_1.aln", ExportSequenceAsAlignmentFiller::Clustalw));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__export_import_menu_action"
                                                       << "export sequences as alignment"));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, index));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, index));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
 }
@@ -385,9 +381,9 @@ GUI_TEST_CLASS_DEFINITION(test_3052) {
     GTFileDialog::openFile( os, testDir + "_common_data/bam", "scerevisiae.bam" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "chrM"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "chrM"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyPress(Qt::Key_Delete);
     GTGlobals::sleep();
 
     GTUtilsDocument::removeDocument(os, docName);
@@ -415,9 +411,9 @@ GUI_TEST_CLASS_DEFINITION(test_3052_1) {
     GTFileDialog::openFile( os, testDir + "_common_data/bam", "scerevisiae.bam" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "chrM"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "chrM"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTUtilsDocument::unloadDocument(os, docName, false);
     GTGlobals::sleep();
@@ -751,8 +747,8 @@ GUI_TEST_CLASS_DEFINITION(test_3128_1) {
     // 2. Find the "comment" annotation, click it.
     QTreeWidgetItem *item2 = GTUtilsAnnotationsTreeView::findItem(os, "comment");
     QPoint p2 = GTTreeWidget::getItemCenter(os, item2);
-    GTMouseDriver::moveTo(os, p2);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(p2);
+    GTMouseDriver::click();
     //Expected state: UGENE does not crash.
 }
 
@@ -822,9 +818,9 @@ GUI_TEST_CLASS_DEFINITION(test_3137) {
     GTUtilsSharedDatabaseDocument::importFiles(os, dbDoc, "/regression_test_3137", QStringList() << dataDir + "samples/CLUSTALW/COI.aln");
 
     // 4. Delete folder;
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "regression_test_3137"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "regression_test_3137"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__REMOVE_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     // 5. Wait for several seconds;
     GTGlobals::sleep(10000);
@@ -849,7 +845,7 @@ GUI_TEST_CLASS_DEFINITION(test_3138) {
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "abcd.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(200);
 
     GTWidget::click(os, GTWidget::findWidget(os, "ArrowHeader_Search algorithm"));
@@ -861,7 +857,7 @@ GUI_TEST_CLASS_DEFINITION(test_3138) {
 
     GTWidget::click(os, GTWidget::findWidget(os, "textPattern"));
     GTGlobals::sleep(200);
-    GTKeyboardDriver::keySequence(os, "A*");
+    GTKeyboardDriver::keySequence("A*");
 
     GTGlobals::sleep(500);
     GTWidget::click(os, GTWidget::findWidget(os, "getAnnotationsPushButton"));
@@ -907,7 +903,7 @@ GUI_TEST_CLASS_DEFINITION(test_3140) {
 //    4. Unpress the button.
 //    Expected: the overview rendereing task is finished. The overview is shown.
     for (int i = 0; i < 100; i++) {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Space);
         GTGlobals::sleep(50);
     }
 
@@ -960,7 +956,7 @@ GUI_TEST_CLASS_DEFINITION(test_3143){
     GTWidget::findWidget(os, "assembly_browser_chrM.sorted.bam [as] chrM");
 //    3. Remove this file from project and try to open it again;
     GTUtilsProjectTreeView::click(os, "chrM.sorted.bam.ugenedb");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 //    Expected state: Showed Import BAM File dialog.
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, "Replace"));
@@ -990,18 +986,18 @@ GUI_TEST_CLASS_DEFINITION(test_3144) {
     GTUtilsSharedDatabaseDocument::createFolder(os, dbDoc, "/regression_test_3144_1", "regression_test_3144_2");
 
     // 4. Remove the folder "regression_test_3144_2".
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "regression_test_3144_2"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "regression_test_3144_2"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__REMOVE_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     // Expected state : the folder "regression_test_3144_2" is moved to the "Recycle bin".
     QModelIndex rbIndex = GTUtilsProjectTreeView::findIndex(os, "Recycle bin");
     GTUtilsProjectTreeView::findIndex(os, "regression_test_3144_2", rbIndex);
 
     // 5. Remove the folder "regression_test_3144_1".
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "regression_test_3144_1"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "regression_test_3144_1"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__REMOVE_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     // Expected state : folders "regression_test_3144_1" is shown in the "Recycle bin", folder "regression_test_3144_2" disappears.
     rbIndex = GTUtilsProjectTreeView::findIndex(os, "Recycle bin");
@@ -1078,16 +1074,14 @@ public:
 GUI_TEST_CLASS_DEFINITION(test_3165){
 //    1. Set file read-only: "test/_common_data/scenarios/msa/ma.aln".
     GTFile::copy(os, testDir + "_common_data/scenarios/msa/ma.aln", sandBoxDir + "ma.aln");
-    PermissionsSetter p;
-    p.setReadOnly(os, sandBoxDir + "ma.aln");
-    //PermissionsSetter::setPermissions(sandBoxDir + "ma.aln"
+    GTFile::setReadOnly(os, sandBoxDir + "ma.aln");
 //    2. Open it with UGENE.
     GTFileDialog::openFile(os, sandBoxDir, "ma.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(500);
 //    3. Change the alignment (e.g. insert a gap).
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(1,1));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
 //    4. Close the project.
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
     GTUtilsDialog::waitForDialog(os, new test_3165_messageBoxDialogFiller(os, QMessageBox::Yes));
@@ -1115,7 +1109,7 @@ GUI_TEST_CLASS_DEFINITION(test_3170) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Select the region [301..350].
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 51, 102));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 51, 102));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
 
@@ -1145,7 +1139,7 @@ GUI_TEST_CLASS_DEFINITION(test_3175) {
     GTGlobals::sleep(200);
     // Expected: the first sequence is "TAAGACTTCTAA".
     GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 12, 0 ) );
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text( os );
     CHECK_SET_ERR( "TAAGACTTCTAA" == selectionContent, "MSA changing is failed" );
@@ -1185,11 +1179,11 @@ GUI_TEST_CLASS_DEFINITION(test_3187) {
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
     QWidget *reportWidget = GTWidget::findWidget(os, "qt_scrollarea_viewport");
-    GTMouseDriver::moveTo(os, reportWidget->rect().center());
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(reportWidget->rect().center());
+    GTMouseDriver::click();
 
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     QString reportText = GTClipboard::text(os);
 
     CHECK_SET_ERR(reportText.contains("Blast database has been successfully created"), "report didn't contain expected text");
@@ -1254,8 +1248,8 @@ GUI_TEST_CLASS_DEFINITION(test_3214) {
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Extract Consensus from Alignment as Sequence");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Extract Consensus from Alignment as Sequence"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Extract Consensus from Alignment as Sequence"));
+    GTMouseDriver::click();
 
     GTUtilsWorkflowDesigner::setParameter(os, "Threshold", 49, GTUtilsWorkflowDesigner::spinValue);
     GTUtilsWorkflowDesigner::setParameter(os, "Algorithm", 0, GTUtilsWorkflowDesigner::comboValue);
@@ -1263,8 +1257,8 @@ GUI_TEST_CLASS_DEFINITION(test_3214) {
 
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Extract Consensus from Alignment as Text");
 
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Extract Consensus from Alignment as Text"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Extract Consensus from Alignment as Text"));
+    GTMouseDriver::click();
 
     GTUtilsWorkflowDesigner::setParameter(os, "Algorithm", 0, GTUtilsWorkflowDesigner::comboValue);
     CHECK_SET_ERR(GTUtilsWorkflowDesigner::getAllParameters(os).size() == 1, "Too many parameters");
@@ -1366,8 +1360,8 @@ GUI_TEST_CLASS_DEFINITION(test_3220){
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
     CHECK_OP(os, );
 
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "D"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "D"));
+    GTMouseDriver::click(Qt::RightButton);
 
     //3. Add another qualifier to the same annotation
     filler = new EditQualifierFiller(os, "newqualifier2", "val\"2", GTGlobals::UseMouse, false);
@@ -1376,15 +1370,15 @@ GUI_TEST_CLASS_DEFINITION(test_3220){
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_ADD << "add_qualifier_action"));
     CHECK_OP(os, );
 
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "D"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "D"));
+    GTMouseDriver::click(Qt::RightButton);
 
     //4. Save the file and reload it
     GTUtilsDocument::unloadDocument(os, "human_T1.fa", true);
     GTUtilsDocument::loadDocument(os, "human_T1.fa");
 
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "D"));
-    GTMouseDriver::click(os, Qt::LeftButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "D"));
+    GTMouseDriver::click(Qt::LeftButton);
 
 
     QTreeWidgetItem *generalItem = GTUtilsAnnotationsTreeView::findItem(os, "D");
@@ -1414,8 +1408,8 @@ GUI_TEST_CLASS_DEFINITION(test_3221) {
     GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::Search);
 
     GTUtilsOptionPanelSequenceView::enterPattern(os, ">long_annotation_name");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"], GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keySequence(os, "ACGTAAA");
+    GTKeyboardDriver::keyClick( Qt::Key_Enter, Qt::ControlModifier);
+    GTKeyboardDriver::keySequence("ACGTAAA");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsOptionPanelSequenceView::openAnnotationParametersShowHideWidget(os, true);
@@ -1522,13 +1516,13 @@ GUI_TEST_CLASS_DEFINITION(test_3245) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Colors" << "Custom schemes" << "Create new color scheme"));
     GTUtilsDialog::waitForDialog(os, new NewColorSchemeCreator(os, colorSchemeName, NewColorSchemeCreator::nucl));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 1));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     // 4. Ensure that the new scheme is added to the context menu. Call the preferences dialog again.
     // 5. Remove the custom scheme and cancel the preferences dialog.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Colors" << "Custom schemes" << colorSchemeName));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 1));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     combo = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
     CHECK_SET_ERR(combo->count() - 1 == initialItemsNumber, "color scheme hasn't been added to the Options Panel");
@@ -1537,12 +1531,12 @@ GUI_TEST_CLASS_DEFINITION(test_3245) {
     GTUtilsDialog::waitForDialog(os, new NewColorSchemeCreator(os, colorSchemeName, NewColorSchemeCreator::nucl,
         NewColorSchemeCreator::Delete, true));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 1));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     // Expected state: the scheme presents in the context menu, it is shown in the preferences dialog.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Colors" << "Custom schemes" << colorSchemeName));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 1));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     combo = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "colorScheme"));
     CHECK_SET_ERR(combo->count() - 1 == initialItemsNumber, "color scheme hasn't been added to the Options Panel");
@@ -1554,9 +1548,9 @@ GUI_TEST_CLASS_DEFINITION(test_3250) {
     //Expected: there are no the "Export/Import" menu for the database connection.
     GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
     QPoint p = GTUtilsProjectTreeView::getItemCenter(os, "ugene_gui_test");
-    GTMouseDriver::moveTo(os, p);
+    GTMouseDriver::moveTo(p);
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "Export/Import", PopupChecker::NotExists));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 }
 
@@ -1579,10 +1573,10 @@ GUI_TEST_CLASS_DEFINITION(test_3253) {
     CHECK_SET_ERR( NULL != annotationTreeWidget, "annotationTreeWidget is NULL" );
 
     QSize startSize=chromaView->size();
-    GTMouseDriver::moveTo(os, QPoint(annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).x()+100,annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).y()));
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, QPoint(annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).x()+100,annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).y()+annotationTreeWidget->size().height()));
-    GTMouseDriver::release(os);
+    GTMouseDriver::moveTo(QPoint(annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).x()+100,annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).y()));
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(QPoint(annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).x()+100,annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).y()+annotationTreeWidget->size().height()));
+    GTMouseDriver::release();
     GTGlobals::sleep();
 
     QSize endSize=chromaView->size();
@@ -1619,11 +1613,11 @@ GUI_TEST_CLASS_DEFINITION(test_3253_1) {
 
     QWidget *detView = GTWidget::findWidget( os, "render_area_A1#berezikov");
     QSize  startSize=detView->size();
-    GTMouseDriver::moveTo(os, QPoint(annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).x()+100,annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).y()));
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, QPoint(annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).x()+100,annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).y()-detView->size().height()));
-    GTMouseDriver::release(os);
-    GTThread::waitForMainThread(os);
+    GTMouseDriver::moveTo(QPoint(annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).x()+100,annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).y()));
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(QPoint(annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).x()+100,annotationTreeWidget->mapToGlobal(annotationTreeWidget->pos()).y()-detView->size().height()));
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
     GTGlobals::sleep(5000);
     QSize endSize=detView->size();
     CHECK_SET_ERR( startSize != endSize, "detView is not resized" );
@@ -1658,12 +1652,12 @@ GUI_TEST_CLASS_DEFINITION(test_3253_2) {
     graphView = GTWidget::findWidget(os, "GSequenceGraphViewRenderArea");
     GTWidget::click(os, GTWidget::findWidget(os, "CHROMA_ACTION"));
 
-    GTMouseDriver::moveTo(os, QPoint(graphView->mapToGlobal(graphView->rect().bottomLeft()).x() + 100, graphView->mapToGlobal(graphView->rect().bottomLeft()).y() + 5));
+    GTMouseDriver::moveTo(QPoint(graphView->mapToGlobal(graphView->rect().bottomLeft()).x() + 100, graphView->mapToGlobal(graphView->rect().bottomLeft()).y() + 5));
     GTGlobals::sleep(100);
-    GTMouseDriver::press(os);
+    GTMouseDriver::press();
     GTGlobals::sleep(500);
-    GTMouseDriver::moveTo(os, QPoint(graphView->mapToGlobal(graphView->rect().bottomLeft()).x() + 100, graphView->mapToGlobal(graphView->rect().bottomLeft()).y() + graphView->height() / 2));
-    GTMouseDriver::release(os);
+    GTMouseDriver::moveTo(QPoint(graphView->mapToGlobal(graphView->rect().bottomLeft()).x() + 100, graphView->mapToGlobal(graphView->rect().bottomLeft()).y() + graphView->height() / 2));
+    GTMouseDriver::release();
     GTGlobals::sleep();
 
     QSize endSize=graphView->size();
@@ -1720,9 +1714,9 @@ GUI_TEST_CLASS_DEFINITION(test_3266){
     GTUtilsSharedDatabaseDocument::createFolder(os, doc, "/regression_3266_1", "regression_3266_2");
 
     //4. Remove the folder "2".
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "regression_3266_2"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "regression_3266_2"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__REMOVE_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     //Expected state: the folder "2" is in the Recycle bin.
     GTUtilsSharedDatabaseDocument::ensureItemExists(os, doc, "/Recycle bin/regression_3266_2");
@@ -1731,9 +1725,9 @@ GUI_TEST_CLASS_DEFINITION(test_3266){
     GTUtilsSharedDatabaseDocument::createFolder(os, doc, "/regression_3266_1", "regression_3266_2");
 
     //6. Remove the folder "1".
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "regression_3266_1"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "regression_3266_1"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__REMOVE_SELECTED));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     //Expected state: folders "1" and "2" both are in the Recycle bin.
     GTUtilsSharedDatabaseDocument::ensureItemExists(os, doc, "/Recycle bin/regression_3266_1");
@@ -1903,10 +1897,10 @@ GUI_TEST_CLASS_DEFINITION(test_3283) {
     GTFileDialog::openFile(os, dataDir + "samples/MMDB", "1CRN.prt");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //    2. Click to any annotation on the panoramic view.
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "1CRN chain 1 annotation"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "1CRN chain 1 annotation"));
     QTreeWidgetItem *item = GTUtilsAnnotationsTreeView::findItem(os, "sec_struct  (0, 5)");
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item));
+    GTMouseDriver::click();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3287) {
@@ -1965,9 +1959,9 @@ GUI_TEST_CLASS_DEFINITION(test_3305) {
 //    and accept it.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "ep_exportAnnotations2CSV"));
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "test_3305/test_3305.bed", ExportAnnotationsFiller::bed, os));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "test_3305.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
-    GTGlobals::sleep();
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "test_3305.gb"));
+    GTMouseDriver::click(Qt::RightButton);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    Expected state: the annotation is successfully exported, result file exists, there are no errors in the log.
     const QFile bedFile(sandBoxDir + "test_3305/test_3305.bed");
@@ -1990,7 +1984,7 @@ GUI_TEST_CLASS_DEFINITION(test_3306) {
     const int initialPos = scrollBar->value();
 
     for (int i = 0; i < 15; ++i) {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["down"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Down);
         GTGlobals::sleep(200);
     }
 
@@ -2021,9 +2015,9 @@ GUI_TEST_CLASS_DEFINITION(test_3307){
     GTUtilsTaskTreeView::waitTaskFinished(os, 60000);
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "MyDocument.gb"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(500);
 }
 
@@ -2085,7 +2079,7 @@ GUI_TEST_CLASS_DEFINITION(test_3313){
     GTGlobals::sleep(200);
 
     for(int i = 0; i < 10; i++) {
-        GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["space"] );
+        GTKeyboardDriver::keyClick(Qt::Key_Space );
         GTGlobals::sleep(200);
     }
     GTGlobals::sleep();
@@ -2112,7 +2106,7 @@ GUI_TEST_CLASS_DEFINITION(test_3318) {
     // 4. Make the sequence reference
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-5, 18));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "set_seq_as_reference"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     // 5. Change the highlighting mode to "Disagreements"
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
@@ -2126,19 +2120,20 @@ GUI_TEST_CLASS_DEFINITION(test_3318) {
     // 7. Drag the reference sequence in the list of sequences
     const QPoint mouseDragPosition(-5, 18);
     GTUtilsMSAEditorSequenceArea::moveTo(os, mouseDragPosition);
-//    GTMouseDriver::click(os);
+//    GTMouseDriver::click();
 //    GTGlobals::sleep();
-    //GTMouseDriver::dragAndDrop(os, GTMouseDriver::getMousePosition(), GTMouseDriver::getMousePosition() + QPoint(0, -200));
+    //GTMouseDriver::dragAndDrop(GTMouseDriver::getMousePosition(), GTMouseDriver::getMousePosition() + QPoint(0, -200));
 
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
     GTGlobals::sleep(1000);
-    GTMouseDriver::press(os);
+    GTMouseDriver::press();
     for(int i = 0; i<50; i++){
-        GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(0, -5));
+        GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(0, -5));
     }
     GTGlobals::sleep(200);
     //GTUtilsMSAEditorSequenceArea::moveTo(os, mouseDragPosition + QPoint(0, -10));
-    GTMouseDriver::release(os);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
     GTGlobals::sleep(200);
 
     // Expected result: the highlighting mode is the same, human_T1 is still the reference.
@@ -2155,12 +2150,12 @@ GUI_TEST_CLASS_DEFINITION(test_3321){
     QWidget* CircularViewAction = GTWidget::findWidget(os, "CircularViewAction", parent);
     GTWidget::click(os, CircularViewAction);
 //    Select region that contains zero position
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, "1..10,5823..5833"));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, "1..10,5823..5833"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Select"<< "Sequence region"));
     GTWidget::click(os, GTWidget::findWidget(os, "CV_ADV_single_sequence_widget_0"), Qt::RightButton);
     GTGlobals::sleep();
 //    Press "Ctrl+C"
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
 //    Make sure that buffer contains right region
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText == "AAATGAAAGAGGTCTTTCATT", "unecpected text in clipboard: " + clipboardText);
@@ -2168,24 +2163,19 @@ GUI_TEST_CLASS_DEFINITION(test_3321){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3328) {
-    class TestBody_3328 : public QRunnable {
-    public:
-        TestBody_3328(HI::GUITestOpStatus &os, QEventLoop *waiter) :
-            QRunnable(),
-            os(os),
-            waiter(waiter) {}
-        ~TestBody_3328() {
-            waiter->exit();
-        }
-
-        void run() {
-        //    1. Open "test/_common_data/fasta/human_T1_cutted.fa".
-            GTFileDialog::openFile(os, testDir + "/_common_data/fasta/", "human_T1_cutted.fa");
+//    1. Open "test/_common_data/fasta/human_T1_cutted.fa".
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-        //    2. Click the "Find restriction sites" button on the main toolbar.
-        //    3. Select a single enzyme: "AbaBGI". Start the search.
-            GTUtilsDialog::waitForDialog(os, new FindEnzymesDialogFiller(os, QStringList() << "AbaBGI"));
+//    2. Click the "Find restriction sites" button on the main toolbar.
+//    3. Select a single enzyme: "AbaBGI". Start the search.
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            //3. Press "Select by length"
+            //4. Input "7" and press "Ok"
+            GTUtilsDialog::waitForDialog(os, new InputIntFiller(os, 8));
+            GTWidget::click(os, GTWidget::findWidget(os, "selectByLengthButton"));
 
             GTWidget::click(os, GTToolbar::getWidgetForActionTooltip(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Find restriction sites..."));
             GTGlobals::sleep(2000);
@@ -2196,18 +2186,16 @@ GUI_TEST_CLASS_DEFINITION(test_3328) {
         //    Expected state: the task is canceled.
             CHECK_SET_ERR(0 == GTUtilsTaskTreeView::getTopLevelTasksCount(os), "There are unfinished tasks");
         }
-
-    private:
-        HI::GUITestOpStatus &os;
-        QEventLoop *waiter;
     };
 
     QThreadPool threadPool(this);
     QEventLoop waiter(this);
 
-    TestBody_3328 *testBody = new TestBody_3328(os, &waiter);
-    threadPool.start(testBody);
-    waiter.exec();
+    if(GTUtilsTaskTreeView::getTopLevelTasksCount(os) != 0){
+        QString s = GTUtilsTaskTreeView::getTaskStatus(os, "Auto-annotations update task");
+    //    Expected state: the task is canceled.
+        CHECK_SET_ERR(s == "Canceling...", "Unexpected task status: " + s);
+    }
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3332) {
@@ -2331,10 +2319,10 @@ GUI_TEST_CLASS_DEFINITION(test_3344) {
     GTGlobals::sleep();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "Annotations [test_3344.gb] *"));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "repeat_unit  (0, 3486)"));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "Annotations [test_3344.gb] *"));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "repeat_unit  (0, 3486)"));
 
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Delete);
     GTGlobals::sleep();
 
     GTUtilsLog::check(os, l);
@@ -2402,7 +2390,7 @@ GUI_TEST_CLASS_DEFINITION(test_3348) {
     CHECK_SET_ERR("76" == annotation->annotation->findFirstQualifierValue("repeat_homology(%)"), "Annotation qualifier not found");
 
     GTUtilsMdi::click(os, GTGlobals::Close);
-    GTMouseDriver::click(os);
+    GTMouseDriver::click();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3357) {
@@ -2418,9 +2406,9 @@ GUI_TEST_CLASS_DEFINITION(test_3357) {
     QWidget* w=GTWidget::findWidget(os, "ADV_single_sequence_widget_1");
     GTWidget::click(os, GTWidget::findWidget(os, "CircularViewAction",w));
     GTGlobals::sleep(500);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "standard_dna_rna_amino_1000.fa"));
-    GTMouseDriver::click( os );
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "standard_dna_rna_amino_1000.fa"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(500);
 }
 
@@ -2446,14 +2434,14 @@ GUI_TEST_CLASS_DEFINITION(test_3373) {
     GTUtilsWorkflowDesigner::connect( os, seqReader, revComplement);
     GTUtilsWorkflowDesigner::connect( os, revComplement, seqWriter);
 
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, "Write Sequence" ) );
-    GTMouseDriver::click( os );
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Write Sequence" ) );
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setParameter(os, "Document format", "genbank", GTUtilsWorkflowDesigner::comboValue);
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", "result.gb", GTUtilsWorkflowDesigner::textValue);
     GTWidget::click( os, GTUtilsMdi::activeWindow( os ) );
 
-    GTMouseDriver::moveTo( os, GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence"));
-    GTMouseDriver::click( os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence"));
+    GTMouseDriver::click();
     QString dirPath = testDir + "_common_data/fasta/";
     GTUtilsWorkflowDesigner::setDatasetInputFile( os, dirPath, "seq1.fa" );
 
@@ -2490,8 +2478,8 @@ GUI_TEST_CLASS_DEFINITION(test_3379) {
     GTGlobals::sleep(500);
 
     //4. Return to 'abcd.fa' view
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "seq1"));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "seq1"));
+    GTMouseDriver::doubleClick();
 
     //5. Try to launch Export dialog using context menu
     GTUtilsDialog::waitForDialog(os, new CircularViewExportImage(os, testDir + "_common_data/scenarios/sandbox/image.jpg"));
@@ -2516,10 +2504,11 @@ GUI_TEST_CLASS_DEFINITION(test_3384){
 //    Select an area on CV that contains zero position
     QWidget* cv = GTWidget::findWidget(os, "CV_ADV_single_sequence_widget_0");
     GTWidget::click(os, cv);
-    GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(20, -20));
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() + QPoint(0,40));
-    GTMouseDriver::release(os);
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(20, -20));
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(0,40));
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 //    Current state: SAFE_POINT triggers and selection is "beautiful" (see the attachment)
     GTUtilsLog::check(os, l);
 }
@@ -2556,8 +2545,8 @@ GUI_TEST_CLASS_DEFINITION(test_3398_1) {
 //    3. Call context menu on the document.
 //    Expected state: UGENE doesn't crash, a context menu is shown.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_load_selected_documents"));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "data_in_the_name_line.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "data_in_the_name_line.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3398_2) {
@@ -2576,8 +2565,8 @@ GUI_TEST_CLASS_DEFINITION(test_3398_2) {
     //    3. Call context menu on the document.
     //    Expected state: UGENE doesn't crash, a context menu is shown.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_load_selected_documents"));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "data_in_the_name_line.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "data_in_the_name_line.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3398_3) {
@@ -2596,8 +2585,8 @@ GUI_TEST_CLASS_DEFINITION(test_3398_3) {
     //    3. Call context menu on the document.
     //    Expected state: UGENE doesn't crash, a context menu is shown.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_load_selected_documents"));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "data_in_the_name_line.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "data_in_the_name_line.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3398_4) {
@@ -2616,8 +2605,8 @@ GUI_TEST_CLASS_DEFINITION(test_3398_4) {
     //    3. Call context menu on the document.
     //    Expected state: UGENE doesn't crash, a context menu is shown.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_load_selected_documents"));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "data_in_the_name_line.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "data_in_the_name_line.fa"));
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3437){
@@ -2641,8 +2630,8 @@ GUI_TEST_CLASS_DEFINITION(test_3402){
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__export_import_menu_action"
      << "action_project__export_as_sequence_action"));
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "3000_sequences.aln"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "3000_sequences.aln"));
+    GTMouseDriver::click(Qt::RightButton);
     //GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Select {Export/Import -> Export alignmnet to sequence format...}
 
@@ -2671,10 +2660,10 @@ GUI_TEST_CLASS_DEFINITION(test_3402){
     }
 
 //         Expected state: the fasta document is present in the project, open view task is in progress.
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "test_3402.fa"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "test_3402.fa"));
 //    Delete the fasta document from the project.
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(500);
 //    Current state: UGENE not crashes.
 }
@@ -2698,7 +2687,8 @@ GUI_TEST_CLASS_DEFINITION(test_3414){
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::click(os, "Assemble Transcripts with Cufflinks");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
+    GTGlobals::sleep(200);
 
     //    Launch pipeline
     GTUtilsWorkflowDesigner::runWorkflow(os);
@@ -2800,13 +2790,13 @@ GUI_TEST_CLASS_DEFINITION(test_3441) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3443) {
-    GTKeyboardDriver::keyClick(os, '3', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '3', Qt::AltModifier);
     GTGlobals::sleep();
 
     QWidget *logViewWidget = GTWidget::findWidget(os, "dock_log_view");
     CHECK_SET_ERR(logViewWidget->isVisible(), "Log view is expected to be visible");
 
-    GTKeyboardDriver::keyClick(os, '3', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '3', Qt::AltModifier);
     GTGlobals::sleep();
     CHECK_SET_ERR(!logViewWidget->isVisible(), "Log view is expected to be visible");
 
@@ -2816,34 +2806,34 @@ GUI_TEST_CLASS_DEFINITION(test_3443) {
 
     QWidget *projectViewWidget = GTWidget::findWidget(os, "project_view");
 
-    GTKeyboardDriver::keyClick(os, '1', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '1', Qt::AltModifier);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(!projectViewWidget->isVisible(), "Project view is expected to be invisible");
 
-    GTKeyboardDriver::keyClick(os, '1', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '1', Qt::AltModifier);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(projectViewWidget->isVisible(), "Project view is expected to be visible");
 
-    GTKeyboardDriver::keyClick(os, '2', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '2', Qt::AltModifier);
     GTGlobals::sleep();
 
     QWidget *taskViewWidget = GTWidget::findWidget(os, "dock_task_view");
     CHECK_SET_ERR(taskViewWidget->isVisible(), "Task view is expected to be visible");
 
-    GTKeyboardDriver::keyClick(os, '2', GTKeyboardDriver::key["alt"]);
+    GTKeyboardDriver::keyClick( '2', Qt::AltModifier);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(!taskViewWidget->isVisible(), "Task view is expected to be invisible");
 
-    GTKeyboardDriver::keyClick(os, 'b', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'b', Qt::ControlModifier);
     GTGlobals::sleep();
 
     QWidget *codonTableWidget = GTWidget::findWidget(os, "Codon table widget");
     CHECK_SET_ERR(codonTableWidget->isVisible(), "Codon table is expected to be visible");
 
-    GTKeyboardDriver::keyClick(os, 'b', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'b', Qt::ControlModifier);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(!codonTableWidget->isVisible(), "Codon table is expected to be invisible");
@@ -2865,8 +2855,8 @@ GUI_TEST_CLASS_DEFINITION(test_3450) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_HIGHLIGHTING"));
     GTWidget::click(os, GTWidget::findWidget(os, "sequenceLineEdit"));
-    GTKeyboardDriver::keySequence(os, "Montana_montana");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keySequence("Montana_montana");
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep(300);
 
     QComboBox* combo = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "highlightingScheme"));
@@ -2923,8 +2913,8 @@ GUI_TEST_CLASS_DEFINITION(test_3451) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_HIGHLIGHTING"));
     GTWidget::click(os, GTWidget::findWidget(os, "sequenceLineEdit"));
-    GTKeyboardDriver::keySequence(os, "Montana_montana");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keySequence("Montana_montana");
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep(300);
 
     QComboBox* combo = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "highlightingScheme"));
@@ -2982,17 +2972,17 @@ GUI_TEST_CLASS_DEFINITION(test_3452) {
     QPoint p2 = GTTreeWidget::getItemCenter(os, item2);
 
     //3. Select the annotaions and its several qualifiers.
-    GTMouseDriver::moveTo(os, p1);
-    GTMouseDriver::click(os);
-    GTMouseDriver::moveTo(os, pQual);
+    GTMouseDriver::moveTo(p1);
+    GTMouseDriver::click();
+    GTMouseDriver::moveTo(pQual);
     GTGlobals::sleep(500);
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTGlobals::sleep(500);
 
     //4. Try to drag selected annotaions.
-    GTMouseDriver::dragAndDrop(os, p1, p2);
+    GTMouseDriver::dragAndDrop(p1, p2);
     //Expected state: UGENE does not crash.
 }
 
@@ -3006,8 +2996,8 @@ GUI_TEST_CLASS_DEFINITION(test_3455) {
     //3. Choose a sample (but not open it).
     QTreeWidgetItem *sample = GTUtilsWorkflowDesigner::findTreeItem(os, "call variants", GTUtilsWorkflowDesigner::samples);
     sample->parent()->setExpanded(true);
-    GTMouseDriver::moveTo(os,GTTreeWidget::getItemCenter(os, sample));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, sample));
+    GTMouseDriver::click();
     CHECK_OP(os, );
 
     //4. Load any workflow.
@@ -3049,18 +3039,18 @@ GUI_TEST_CLASS_DEFINITION(test_3472) {
 
     GTWidget::setFocus(os, outputFilePathEdit);
 #ifndef Q_OS_MAC
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["home"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Home);
 #else
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["left"], GTKeyboardDriver::key["cmd"]);
+    GTKeyboardDriver::keyClick( Qt::LeftArrow, Qt::ControlModifier);
 #endif
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keySequence(os, "///123/123/123");
+    GTKeyboardDriver::keySequence("///123/123/123");
     GTGlobals::sleep();
 
     int deleteCounter = 100;
     while (0 < --deleteCounter) {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
         GTGlobals::sleep(100);
     }
 
@@ -3071,18 +3061,18 @@ GUI_TEST_CLASS_DEFINITION(test_3472) {
 
     GTWidget::setFocus(os, outputFilePathEdit);
 #ifndef Q_OS_MAC
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["home"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Home);
 #else
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["left"], GTKeyboardDriver::key["cmd"]);
+    GTKeyboardDriver::keyClick( Qt::LeftArrow, Qt::ControlModifier);
 #endif
     GTGlobals::sleep();
 
-    GTKeyboardDriver::keySequence(os, sandBoxDir + "123/123/123/1.aln");
+    GTKeyboardDriver::keySequence(sandBoxDir + "123/123/123/1.aln");
     GTGlobals::sleep();
 
     deleteCounter = 15;
     while (0 < --deleteCounter) {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
         GTGlobals::sleep(100);
     }
 
@@ -3163,13 +3153,13 @@ GUI_TEST_CLASS_DEFINITION(test_3478) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
     GTUtilsProject::openFiles(os, testDir + "_common_data/fasta/multy_fa.fa");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "multy_fa.fa"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "multy_fa.fa"));
     GTLogTracer l;
     FormatDBSupportRunDialogFiller::Parameters p;
     p.justCancel = true;
     GTUtilsDialog::waitForDialog(os, new FormatDBSupportRunDialogFiller(os, p));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "BLAST" << "FormatDB"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsLog::check(os, l);
 }
@@ -3199,14 +3189,15 @@ GUI_TEST_CLASS_DEFINITION(test_3484) {
 
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/sandbox/", "COI_3484.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os,
                                                                testDir + "_common_data/scenarios/sandbox/COI_3484.nwk",
                                                                0, 0, true));
-    QAbstractButton *tree= GTAction::button(os,"Build Tree");
-    GTWidget::click(os,tree);
-    GTGlobals::sleep(500);
+    GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
     QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
-    CHECK_SET_ERR(treeView!=NULL,"TreeView not found");
+    CHECK_SET_ERR(treeView != NULL,"TreeView not found");
 
     GTUtilsDocument::unloadDocument(os, "COI_3484.nwk", false);
     GTGlobals::sleep(500);
@@ -3217,7 +3208,7 @@ GUI_TEST_CLASS_DEFINITION(test_3484) {
     GTUtilsDocument::removeDocument(os, "COI_3484.nwk");
     GTUtilsDocument::loadDocument(os, "COI_3484.aln");
 
-    CHECK_SET_ERR( GTUtilsProjectTreeView::checkItem(os, "COI_3484  .nwk") == false, "Unauthorized tree opening!");
+    CHECK_SET_ERR(GTUtilsProjectTreeView::checkItem(os, "COI_3484  .nwk") == false, "Unauthorized tree opening!");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3484_1) {
@@ -3425,7 +3416,7 @@ GUI_TEST_CLASS_DEFINITION(test_3519_2) {
     };
     GTUtilsDialog::waitForDialog(os, new FindEnzymesDialogFiller(os, QStringList(), new AllEnzymesSearchScenario()));
     GTWidget::click(os, GTWidget::findWidget(os, "Find restriction sites_widget"));
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
     GTGlobals::sleep(40000);
 
     GTUtilsTaskTreeView::openView(os);
@@ -3435,7 +3426,7 @@ GUI_TEST_CLASS_DEFINITION(test_3519_2) {
     GTGlobals::sleep();
     CHECK_SET_ERR( GTUtilsTaskTreeView::checkTask(os, "SITECON search") == false, "SITECON task is still running");
     GTUtilsTaskTreeView::cancelTask(os, "Auto-annotations update task");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os, 360000);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3545){
@@ -3458,31 +3449,24 @@ GUI_TEST_CLASS_DEFINITION(test_3545){
     GTUtilsMdi::click(os, GTGlobals::Close);
 //    5. Save document "big.aln"
     GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-    GTKeyboardDriver::keyClick(os, 's', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 's', Qt::ControlModifier);
     GTGlobals::sleep(5000);
 
     //close project
     if (AppContext::getProject() != NULL) {
-        int key;
-#ifdef Q_OS_MAC
-        key = GTKeyboardDriver::key["cmd"];
-#else
-        key = GTKeyboardDriver::key["ctrl"];
-#endif
-
         GTGlobals::sleep();
         GTWidget::click(os, GTUtilsProjectTreeView::getTreeView(os));
-        GTKeyboardDriver::keyClick(os, 'a', key);
+        GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
         GTGlobals::sleep(100);
 
         //GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
         //GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new AppCloseMessageBoxDialogFiller(os));
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
         GTGlobals::sleep(500);
 #ifdef Q_OS_MAC
         GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 #else
-        GTKeyboardDriver::keyClick(os, 'q', key);
+        GTKeyboardDriver::keyClick( 'q', Qt::ControlModifier);
         GTGlobals::sleep(100);
 #endif
         GTGlobals::sleep(500);
@@ -3501,12 +3485,12 @@ GUI_TEST_CLASS_DEFINITION(test_3551){
 
     GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
     FormatDBSupportRunDialogFiller::Parameters p;
     p.customFiller_3551 = true;
     GTUtilsDialog::waitForDialog(os, new FormatDBSupportRunDialogFiller(os, p));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "BLAST" << "FormatDB"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3552){
@@ -3587,7 +3571,7 @@ GUI_TEST_CLASS_DEFINITION(test_3556) {
     GTUtilsMSAEditorSequenceArea::selectSequence(os, "1a0cA");
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "set_seq_as_reference"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_GENERAL"));
 
@@ -3609,9 +3593,9 @@ GUI_TEST_CLASS_DEFINITION(test_3557) {
     GTGlobals::sleep(500);
 
     GTUtilsMSAEditorSequenceArea::selectSequence(os, "2|1a0cA|gi|32470780");
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
     GTUtilsMSAEditorSequenceArea::selectSequence(os, "1a0cA");
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
 
     GTWidget::click(os, GTWidget::findWidget(os, "OP_PAIRALIGN"));
     GTGlobals::sleep(10000);
@@ -3823,8 +3807,8 @@ GUI_TEST_CLASS_DEFINITION(test_3603) {
     CHECK_SET_ERR(renderArea != NULL, "Render area is NULL");
     GTWidget::click(os, renderArea);
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os));
-    GTKeyboardDriver::keyClick(os, 'a', GTKeyboardDriver::key["ctrl"]);
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os));
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
 
     QLineEdit* start = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "editStart"));
     CHECK_SET_ERR(start != NULL, "Region start lineEdit is NULL");
@@ -3923,9 +3907,9 @@ GUI_TEST_CLASS_DEFINITION(test_3610) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 199950));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 199950));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(1000);
 
     class Scenario : public CustomScenario {
@@ -4170,7 +4154,7 @@ GUI_TEST_CLASS_DEFINITION(test_3629) {
 //    6. Switch view to "human_T1".
 //    Expected state: there are no attached annotations.
     GTUtilsProjectTreeView::doubleClickItem(os, "human_T1.fa");
-    GTThread::waitForMainThread(os);
+    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()));
 }
@@ -4222,15 +4206,15 @@ GUI_TEST_CLASS_DEFINITION(test_3639) {
     GTGlobals::FindOptions options;
     options.depth = 1;
     QModelIndex humanT1Doc = GTUtilsProjectTreeView::findIndex(os, "human_T1.fa", options);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, humanT1Doc));
-    GTMouseDriver::click(os);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Recycle bin"));
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["ctrl"]);
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["ctrl"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, humanT1Doc));
+    GTMouseDriver::click();
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Recycle bin"));
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
 
     //4. Remove items with "del" key.
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     //Expected state: the document is removed, the folder is not removed, no message boxes appear.
     CHECK_SET_ERR(!logTracer.hasError(), "Error message");
@@ -4254,24 +4238,18 @@ GUI_TEST_CLASS_DEFINITION(test_3640) {
     GTGlobals::FindOptions options;
     options.depth = 1;
     QModelIndex humanT1Doc = GTUtilsProjectTreeView::findIndex(os, "human_T1.fa", options);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, humanT1Doc));
-    GTMouseDriver::click(os);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "genomes"));
-    int key = GTKeyboardDriver::key["ctrl"];
-//#ifdef Q_OS_MAC
-//    key = GTKeyboardDriver::key["cmd"];
-//#else
-//    key = GTKeyboardDriver::key["ctrl"];
-//#endif
-    GTKeyboardDriver::keyPress(os, key);
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyRelease(os, key);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, humanT1Doc));
+    GTMouseDriver::click();
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "genomes"));;
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
 
     //4. Remove selected items via "del" key.
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
 
     //Expected state: the document is removed, the folder is not removed.
-    CHECK_SET_ERR(!logTracer.hasError(), "Error message");
+    CHECK_SET_ERR(!logTracer.hasError(), "Error message " + logTracer.getError());
     GTUtilsProjectTreeView::findIndex(os, "genomes");
     options.failIfNotFound = false;
     humanT1Doc = GTUtilsProjectTreeView::findIndex(os, "human_T1.fa", options);
@@ -4286,8 +4264,8 @@ GUI_TEST_CLASS_DEFINITION(test_3649) {
     //2. Export the sequence object as alignment.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE_AS_ALIGNMENT));
     GTUtilsDialog::waitForDialog(os, new ExportSequenceAsAlignmentFiller(os, testDir + "_common_data/scenarios/sandbox", "test_3649.aln", ExportSequenceAsAlignmentFiller::Clustalw, true));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "S"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "S"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     //3. Add a sequence from the file "_common_data/smith-waterman2/simple/05/query.txt" in the alignment.
@@ -4321,6 +4299,8 @@ GUI_TEST_CLASS_DEFINITION(test_3656) {
     GTLogTracer lt;
     GTUtilsSharedDatabaseDocument::connectToUgenePublicDatabase(os);
     CHECK_OP(os, );
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTThread::waitForMainThread();
     GTGlobals::sleep(5000);
 
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
@@ -4328,12 +4308,12 @@ GUI_TEST_CLASS_DEFINITION(test_3656) {
 
     QModelIndex prnt = GTUtilsProjectTreeView::findIndex(os, "Human (hg19)");
     QModelIndex idx = GTUtilsProjectTreeView::findIndex(os, "chr2", prnt);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, idx));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, idx));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE));
     GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, testDir + "_common_data/scenarios/sandbox/", "test_3656.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(GTUtilsTaskTreeView::checkTask(os, "Export sequence to document"), "Task is not running!");
@@ -4376,7 +4356,7 @@ GUI_TEST_CLASS_DEFINITION(test_3675){
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "some_not_existing_folder/COI.nwk", 0, 0, true));
     GTWidget::click(os, GTAction::button(os, GTAction::findAction(os, "Build Tree")));
-    GTGlobals::sleep();
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     CHECK_SET_ERR(QFile::exists(sandBoxDir + "some_not_existing_folder/COI.nwk"), "File sandBoxDir/some_not_existing_folder/COI.nwk does not exist");
 }
 
@@ -4440,16 +4420,16 @@ GUI_TEST_CLASS_DEFINITION(test_3690){
     CHECK_SET_ERR(wgt != NULL, "ActiveWindow is NULL");
     CHECK_SET_ERR(wgt->windowTitle() == "human_T1 [s] human_T1 (UCSC April 2002 chr7:115977709-117855134)", "human_T1.fa should be opened!");
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"], GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Tab, Qt::ControlModifier);
     GTGlobals::sleep();
 
     wgt = GTUtilsMdi::activeWindow(os);
     CHECK_SET_ERR(wgt != NULL, "ActiveWindow is NULL");
     CHECK_SET_ERR(wgt->windowTitle() == "Start Page", "Start Page should be opened!");
 
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["tab"], GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick( Qt::Key_Tab, Qt::ControlModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTGlobals::sleep();
 
     wgt = GTUtilsMdi::activeWindow(os);
@@ -4536,7 +4516,7 @@ GUI_TEST_CLASS_DEFINITION(test_3702){
 
     QModelIndex idx = GTUtilsProjectTreeView::findIndex(os, "human_T1.fa");
     CHECK_SET_ERR(idx.isValid(), "Index is invalid!");
-    GTMouseDriver::dragAndDrop(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"), p);
+    GTMouseDriver::dragAndDrop(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"), p);
 
     QWidget* wgt = GTUtilsMdi::activeWindow(os);
     CHECK_SET_ERR(wgt != NULL, "ActiveWindow is NULL");
@@ -4576,7 +4556,7 @@ GUI_TEST_CLASS_DEFINITION(test_3715) {
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
-    GTKeyboardDriver::keyClick(os, 'r', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'r', Qt::ControlModifier);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(GTUtilsWorkflowDesigner::checkErrorList(os, "Read Assembly") != 0, "Workflow errors list cant be empty");
@@ -4589,7 +4569,7 @@ GUI_TEST_CLASS_DEFINITION(test_3717){
 //    2. Click the last sequence in the name list area.
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-5, 17));
 //    3. Press Shift and click the second sequence in the name list area.
-    GTKeyboardDriver::keyPress(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-5, 1));
 //    Expected: sequences [2; last] are selected, the selection frame in the name list is shown.
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(0,1), QPoint(603, 17)));
@@ -4597,7 +4577,7 @@ GUI_TEST_CLASS_DEFINITION(test_3717){
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(-5, 0));
 //    Expected: the selection frame in the name list area is still shown and bound all sequences.
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(0,0), QPoint(603, 17)));
-    GTKeyboardDriver::keyRelease(os, GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3723) {
@@ -4636,7 +4616,7 @@ GUI_TEST_CLASS_DEFINITION(test_3724) {
 //    Expected state: nothing happens.
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new PopupChecker(os, QStringList()));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 }
 
@@ -4694,10 +4674,10 @@ GUI_TEST_CLASS_DEFINITION(test_3731) {
 
     QPoint itemCenter = GTUtilsAnnotationsTreeView::getItemCenter(os, "1CRN chain 1 annotation [1CRN.prt]");
     itemCenter.setX(itemCenter.x() + 10);
-    GTMouseDriver::moveTo(os, itemCenter);
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(itemCenter);
+    GTMouseDriver::click();
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_REMOVE << "Selected objects with annotations from view"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PredictSecondaryStructureDialogFiller(os, 20, 46));
@@ -4785,7 +4765,7 @@ GUI_TEST_CLASS_DEFINITION(test_3744) {
     QComboBox* algorithmBox = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "boxAlgorithm"));
     GTComboBox::setIndexWithText(os, algorithmBox, "Regular expression");
 
-    GTKeyboardDriver::keySequence(os, "ACT.G");
+    GTKeyboardDriver::keySequence("ACT.G");
 
     QWidget* createButton = GTWidget::findWidget(os, "getAnnotationsPushButton");
     CHECK_SET_ERR(!createButton->isEnabled(), "prevPushButton is unexpectidly enabled")
@@ -4799,13 +4779,13 @@ GUI_TEST_CLASS_DEFINITION(test_3749) {
 
     // 2. Select any base.
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(10, 10));
-    GTMouseDriver::click(os, Qt::LeftButton);
+    GTMouseDriver::click(Qt::LeftButton);
 
     class Scenario : public CustomScenario {
         void run(HI::GUITestOpStatus &os) {
-            //GTMouseDriver::moveTo(os, GTMouseDriver::getMousePosition() - QPoint(5, 0));
+            //GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() - QPoint(5, 0));
             GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 10));
-            GTMouseDriver::click(os);
+            GTMouseDriver::click();
             QWidget *contextMenu = QApplication::activePopupWidget();
             CHECK_SET_ERR(NULL == contextMenu, "There is an unexpected context menu");
         }
@@ -4815,12 +4795,12 @@ GUI_TEST_CLASS_DEFINITION(test_3749) {
     // Expected state: a context menu appears, a single base from the previous step is selected.
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, new Scenario));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(10, 9));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     // 4. Move the mouse to the any third base and click the left button.
     // Expected state: the context menu closes, the first selected base is the only selected base.
     // Current state: the context menu closes, there is a selection from the base from the second step to the base from the last step.
-    GTMouseDriver::click(os, Qt::LeftButton);
+    GTMouseDriver::click(Qt::LeftButton);
 
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(1, 10), QPoint(1, 10)));
 }
@@ -4837,10 +4817,10 @@ GUI_TEST_CLASS_DEFINITION(test_3753) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "et0001_sequence"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "et0001_sequence"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE));
     GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, testDir + "_common_data/scenarios/sandbox/", "et0001_export.fasta", false, "sequence_test_3753"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(3000);
 
     GTUtilsProjectTreeView::rename(os, "sequence_test_3753", "test3753_renamed");
@@ -4985,7 +4965,7 @@ GUI_TEST_CLASS_DEFINITION(test_3773) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(200);
     GTUtilsProjectTreeView::click(os, "aligment15900.hmm");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(200);
     GTUtilsLog::check(os, logTracer);
 }
@@ -5040,13 +5020,13 @@ GUI_TEST_CLASS_DEFINITION(test_3776) {
     QLineEdit *searchPattern = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "searchEdit"));
     CHECK_SET_ERR(searchPattern != NULL, "searchedit not found");
     GTLineEdit::setText(os, searchPattern, "CCCCTCCCATCA");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect( QPoint(1029, 1), QPoint(1043, 1)));
 
     for (int i = 0; i < 4; i++) {
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Enter);
         GTGlobals::sleep();
     }
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect( QPoint(1029, 16), QPoint(1043, 16)));
@@ -5127,7 +5107,7 @@ GUI_TEST_CLASS_DEFINITION(test_3785_1) {
 
     //4. Delete the document from the project.
     GTUtilsProjectTreeView::click(os, "fungal - all.aln");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(3000);
 
     //Expected: task is cancelled.
@@ -5157,7 +5137,7 @@ GUI_TEST_CLASS_DEFINITION(test_3785_2) {
 
     //4. Delete the object from the document.
     GTUtilsProjectTreeView::click(os, "fungal - all");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(3000);
 
     //Expected: task is cancelled.
@@ -5201,7 +5181,7 @@ GUI_TEST_CLASS_DEFINITION(test_3797) {
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
     GTUtilsMSAEditorSequenceArea::selectSequence(os, QString("Mecopoda_sp.__Malaysia_"));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["pageDown"]);
+    GTKeyboardDriver::keyClick( Qt::Key_PageDown);
 
     GTGlobals::sleep(5000);
 }
@@ -5212,11 +5192,11 @@ GUI_TEST_CLASS_DEFINITION(test_3805){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // 2. Save the initial content
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 51, 102));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 51, 102));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
 
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(500);
     const QString initialContent = GTClipboard::text( os );
 
@@ -5229,11 +5209,11 @@ GUI_TEST_CLASS_DEFINITION(test_3805){
     //5. Reverse complement sequence
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Reverse-complement sequence", GTGlobals::UseKey);
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 51, 102));
+    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( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(400);
     const QString newContent = GTClipboard::text( os );
 
@@ -5306,8 +5286,8 @@ GUI_TEST_CLASS_DEFINITION(test_3815) {
     //3. Check "Translate to amino alphabet" and press "Export".
     GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, testDir + "_common_data/scenarios/sandbox/", "test_3815.fa", true));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "cant_translate.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "cant_translate.fa"));
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //Expected state: task has finished with error, no output file has been produced.
@@ -5327,10 +5307,10 @@ GUI_TEST_CLASS_DEFINITION(test_3817) {
     GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(1000);
 
-    GTKeyboardDriver::keySequence(os, "ACTGCT");
+    GTKeyboardDriver::keySequence("ACTGCT");
 
     GTUtilsOptionPanelSequenceView::openSearchInShowHideWidget(os);
 
@@ -5360,7 +5340,7 @@ GUI_TEST_CLASS_DEFINITION(test_3821) {
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 2));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 2));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os)->getDetView(), Qt::RightButton);
     GTGlobals::sleep(1000);
@@ -5406,8 +5386,8 @@ GUI_TEST_CLASS_DEFINITION(test_3829){
     GTUtilsProjectTreeView::dragAndDrop(os, index, GTUtilsSequenceView::getSeqWidgetByNumber(os, 0)->getDetView());
     GTGlobals::sleep(2000);
 //    Expected state: there is a sequence with attached annotation table object, there is an annotation that is located beyond the sequence.
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "5_prime_UTR_intron"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "5_prime_UTR_intron"));
+    GTMouseDriver::click();
 //    Select the annotation in the tree view. Open "Statistics" options panel tab or try to find something in the selected region.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_SEQ_INFO"));
     GTGlobals::sleep(1000);
@@ -5527,8 +5507,8 @@ GUI_TEST_CLASS_DEFINITION(test_3868) {
     //2. Open the "Annotation highlighting" OP widget.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_ANNOT_HIGHLIGHT"));
     //Expected state: labels from genbank features are shown in annotations widgets
-    GTMouseDriver::moveTo(os, GTUtilsAnnotHighlightingTreeView::getItemCenter(os, "rep_origin"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotHighlightingTreeView::getItemCenter(os, "rep_origin"));
+    GTMouseDriver::click();
     GTGlobals::sleep();
 
     QLineEdit *qualifiersEdit = qobject_cast<QLineEdit *>(GTWidget::findWidget(os, "editQualifiers"));
@@ -5555,7 +5535,7 @@ GUI_TEST_CLASS_DEFINITION(test_3870) {
     int columnsNumber = GTUtilsMSAEditorSequenceArea::getNumVisibleBases(os);
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(columnsNumber - 10, 0), QPoint(columnsNumber, 10));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
 
     //3. Export sequences with terminal gaps to FASTA
     //Expected state: terminal gaps are not cut off
@@ -5612,8 +5592,8 @@ GUI_TEST_CLASS_DEFINITION(test_3895) {
     //Current state: there are two circular markers in the first line
     GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, sandBoxDir, "test_3895.gb", ExportDocumentDialogFiller::Genbank, false, false));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Export document"));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "pBR322.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "pBR322.gb"));
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTGlobals::sleep();
@@ -5708,9 +5688,9 @@ GUI_TEST_CLASS_DEFINITION(test_3903) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTLogTracer lt;
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
     GTGlobals::sleep(200);
-    GTKeyboardDriver::keySequence(os, "A");
+    GTKeyboardDriver::keySequence("A");
     GTGlobals::sleep(1000);
     CHECK_SET_ERR(lt.hasError() == false, "Log shouldn't contain errors");
 }
@@ -5721,7 +5701,7 @@ GUI_TEST_CLASS_DEFINITION(test_3904) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(5000);
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTUtilsMSAEditorSequenceArea::selectSequence(os, "Phaneroptera_falcata");
     GTLogTracer lt;
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "remove_columns_of_gaps"));
@@ -5883,6 +5863,7 @@ GUI_TEST_CLASS_DEFINITION(test_3950) {
 
     GTUtilsWorkflowDesigner::click(os, "File List");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bwa/", "nrsf-chr21.fastq");
+    GTUtilsWorkflowDesigner::createDataset(os);
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bwa/", "control-chr21.fastq");
 
     GTUtilsWorkflowDesigner::click(os, "Align reads with BWA MEM");
@@ -5913,9 +5894,9 @@ GUI_TEST_CLASS_DEFINITION(test_3953) {
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keySequence(os, pattern);
+    GTKeyboardDriver::keySequence(pattern);
     GTGlobals::sleep(1000);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["home"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Home);
     GTGlobals::sleep(1000);
 
     QPushButton* getAnnotations = qobject_cast<QPushButton*>(GTWidget::findWidget(os, "getAnnotationsPushButton"));
@@ -5923,7 +5904,7 @@ GUI_TEST_CLASS_DEFINITION(test_3953) {
     CHECK_SET_ERR(getAnnotations->isEnabled() == true, QString("getAnnotationsPushButton is not active"));
 
     for (int i=0;i<=pattern.length();i++){
-        GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+        GTKeyboardDriver::keyClick( Qt::Key_Delete);
         GTGlobals::sleep(200);
      }
     CHECK_SET_ERR(getAnnotations->isEnabled() == false, QString("getAnnotationsPushButton is active"));
@@ -6125,10 +6106,11 @@ GUI_TEST_CLASS_DEFINITION(test_3996) {
     QWidget *chromaView = GTWidget::findWidget(os, "chromatogram_view_A1#berezikov");
     const QRect chromaViewRect = chromaView->rect();
 
-    GTMouseDriver::moveTo(os, chromaView->mapToGlobal(chromaViewRect.center() - QPoint(20, 0)));
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, chromaView->mapToGlobal(chromaViewRect.center() + QPoint(20, 0)));
-    GTMouseDriver::release(os);
+    GTMouseDriver::moveTo(chromaView->mapToGlobal(chromaViewRect.center() - QPoint(20, 0)));
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(chromaView->mapToGlobal(chromaViewRect.center() + QPoint(20, 0)));
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
 
     GTUtilsLog::check(os, l);
 }
@@ -6150,7 +6132,7 @@ GUI_TEST_CLASS_DEFINITION(test_3998){
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::click(os, "sequence.fasta");
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 //    Current state: UGENE crashes
 //    b) Use menu
@@ -6161,7 +6143,7 @@ GUI_TEST_CLASS_DEFINITION(test_3998){
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::click(os, "sequence.fasta");
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 //    Current state: UGENE crashes
 //    c) Use menu
@@ -6172,7 +6154,7 @@ GUI_TEST_CLASS_DEFINITION(test_3998){
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::click(os, "sequence.fasta");
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
 //    Current state: error occured, sequence disappeared from the display
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 d12c99b..169958d 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
@@ -20,6 +20,7 @@
  */
 
 #include <QFile>
+#include <QGroupBox>
 #include <QListWidget>
 #include <QMainWindow>
 #include <QPlainTextEdit>
@@ -228,16 +229,10 @@ GUI_TEST_CLASS_DEFINITION(test_4009) {
     //4. Remove "big.aln" document
     GTUtilsDocument::removeDocument(os, "big.aln");
 
+    GTGlobals::sleep();
+    CHECK_SET_ERR(GTUtilsTaskTreeView::getTopLevelTasksCount(os)==0, "some tasks were not cancelled")
 
     //Current state: the task hangs, debug error occured with message "Infinite wait has timed out"
-    class Scenario : public CustomScenario {
-    public:
-        void run(HI::GUITestOpStatus &os) {
-            GTUtilsDialog::clickButtonBox(os, QApplication::activeModalWidget(), QDialogButtonBox::Cancel);
-        }
-    };
-    GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, new Scenario()));
-    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4010) {
@@ -296,15 +291,15 @@ GUI_TEST_CLASS_DEFINITION(test_4013) {
     int columnsNumber = GTUtilsMSAEditorSequenceArea::getNumVisibleBases(os);
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(columnsNumber - 10, 0), QPoint(columnsNumber, 10));
 
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
 
     GTGlobals::sleep();
     QRect oldRect = GTUtilsMSAEditorSequenceArea::getSelectedRect(os);
 
-    GTKeyboardDriver::keyClick(os, 'f', GTKeyboardDriver::key["ctrl"]);
-    GTKeyboardDriver::keySequence(os, "ACCCTATTTTATACCAACAAACTare");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
-    GTThread::waitForMainThread(os);
+    GTKeyboardDriver::keyClick( 'f', Qt::ControlModifier);
+    GTKeyboardDriver::keySequence("ACCCTATTTTATACCAACAAACTare");
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
+    GTThread::waitForMainThread();
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, oldRect);
 }
 
@@ -333,12 +328,12 @@ GUI_TEST_CLASS_DEFINITION(test_4022) {
             CHECK_SET_ERR(plainText != NULL, "plain text not found");
             GTWidget::click(os, plainText);
             GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No, "amount of data"));
-            GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+            GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
             GTGlobals::sleep();
 
             GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "An error occurred", "ExceptionWarning"));
             GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes, "amount of data"));
-            GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+            GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
 
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
         }
@@ -358,7 +353,7 @@ GUI_TEST_CLASS_DEFINITION(test_4026) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Close the MDI window.
-    GTKeyboardDriver::keyClick(os, 'w', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'w', Qt::ControlModifier);
 
     //3. Double click the sequence in the project.
     GTUtilsProjectTreeView::doubleClickItem(os, "NC_004718");
@@ -380,7 +375,7 @@ GUI_TEST_CLASS_DEFINITION(test_4030) {
 
     //3. Edit the alignment.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(1, 1), QPoint(1, 1));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
 
     //Expected state: hint about reference sequence is hidden
     QWidget *label = GTWidget::findWidget(os, "refSeqWarning");
@@ -418,7 +413,7 @@ GUI_TEST_CLASS_DEFINITION(test_4033) {
     //2. Ctrl + N.
     //Expected: if the "Existing table" radio button is not checked, then the URL line edit is disabled.
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, new Scenario));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep(500);
 }
 
@@ -543,7 +538,7 @@ GUI_TEST_CLASS_DEFINITION(test_4047){
     GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Raw DNA-Seq Data Processing", new custom()));
     GTUtilsWorkflowDesigner::addSample(os, "Raw DNA-Seq data processing");
     GTGlobals::sleep();
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     CHECK_SET_ERR(GTAction::button(os, "Show wizard")->isVisible() == false, "'Show wizard' button should not be at toolbar!");
 }
@@ -557,7 +552,7 @@ GUI_TEST_CLASS_DEFINITION(test_4059) {
 
     //2. Delete the "Text" object.
     GTUtilsProjectTreeView::click(os, "text");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     //3. Unload the document.
     MessageBoxDialogFiller *filler = new MessageBoxDialogFiller(os, "No");
@@ -566,8 +561,8 @@ GUI_TEST_CLASS_DEFINITION(test_4059) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //4. Load the document.
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "text.txt"));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "text.txt"));
+    GTKeyboardDriver::keyClick( Qt::Key_Enter);
 
     //Expected: no safe points triggered.
     CHECK_SET_ERR(!l.hasError(), "Errors in log");
@@ -617,10 +612,11 @@ GUI_TEST_CLASS_DEFINITION(test_4065) {
 /* 1. Open _common_data/scenarios/_regression/4065/example_bam.bam
  * 2. Check log for error: "No bam index given, preparing sequential import"
 */
+    GTFile::copy(os, testDir + "_common_data/scenarios/_regression/4065/example_bam.bam", sandBoxDir + "example_bam.bam");
+    GTFile::copy(os, testDir + "_common_data/scenarios/_regression/4065/example_bam.bam.bai", sandBoxDir + "example_bam.bam.bai");
     GTLogTracer l;
     GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "/test_4065.ugenedb"));
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4065/example_bam.bam");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFileDialog::openFile(os, sandBoxDir + "example_bam.bam");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     bool hasMessage = l.checkMessage("No bam index given");
@@ -666,15 +662,15 @@ GUI_TEST_CLASS_DEFINITION(test_4071) {
     GTUtilsProjectTreeView::click(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
 
     //3. Press "delete" key.
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     //4. Unload and load document.
     MessageBoxDialogFiller *filler = new MessageBoxDialogFiller(os, "No");
     GTUtilsDialog::waitForDialog(os, filler);
     GTUtilsDocument::unloadDocument(os, "human_T1.fa", false);
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+    GTKeyboardDriver::keyClick(Qt::Key_Enter);
 
     //Expected: no safe points are triggered.
     CHECK_SET_ERR(!l.hasError(), "Errors in log");
@@ -707,9 +703,11 @@ GUI_TEST_CLASS_DEFINITION(test_4072) {
     GTWidget::click(os, handle);
     QPoint p = GTMouseDriver::getMousePosition();
     p.setX( p.x() - 2*nameList->width()/3);
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::release(os);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::release();
+
+    GTThread::waitForMainThread();
 
     CHECK_SET_ERR(hNameScroll->isVisible(), "Scroll bar at the botton of name list area is invisible");
 
@@ -821,10 +819,10 @@ GUI_TEST_CLASS_DEFINITION(test_4095) {
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //GTCA
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 4));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 4));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
-    GTKeyboardDriver::keyClick( os, 'c', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
     GTGlobals::sleep(200);
     const QString selectionContent = GTClipboard::text( os );
     CHECK_SET_ERR( "GTCA" == selectionContent, "Sequence reversing is failed" );
@@ -868,8 +866,8 @@ GUI_TEST_CLASS_DEFINITION(test_4096) {
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE_AS_ALIGNMENT));
     GTUtilsDialog::waitForDialog(os, new ExportSequenceAsAlignmentFiller(os, new ExportSeqsAsMsaScenario));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::checkItem(os, "test_4096.aln");
@@ -889,8 +887,8 @@ GUI_TEST_CLASS_DEFINITION(test_4097) {
 
     GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, sandBoxDir, "test_4097.gb", ExportDocumentDialogFiller::VectorNTI, false, false));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Export document"));
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "unrefined.gb"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "unrefined.gb"));
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
     const QString resultFileContent = getFileContent(sandBoxDir + "test_4097.gb");
     CHECK_SET_ERR(false == resultFileContent.contains("Vector_NTI_Display_Data_(Do_Not_Edit!)",Qt::CaseInsensitive), "Unexpected file content");
@@ -982,7 +980,7 @@ GUI_TEST_CLASS_DEFINITION(test_4100) {
 
     GTUtilsSharedDatabaseDocument::doubleClickItem(os, databaseDoc, "JQ040024.1");
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
     GTUtilsSharedDatabaseDocument::disconnectDatabase(os, databaseDoc);
 }
@@ -1038,18 +1036,19 @@ GUI_TEST_CLASS_DEFINITION(test_4106){
     GTGlobals::sleep(200);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( 0, endPos-1, 1234, 1 ) );
 
-    GTKeyboardDriver::keyPress(os,GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["down"] );
-    GTGlobals::sleep(50);
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["down"] );
-    GTGlobals::sleep(50);
-    GTKeyboardDriver::keyRelease(os,GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick(Qt::Key_Down );
+    GTGlobals::sleep(200);
+    GTKeyboardDriver::keyClick(Qt::Key_Down );
+    GTGlobals::sleep(200);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( 0, endPos-1, 1234, 3 ) );
 
-    GTKeyboardDriver::keyPress(os,GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["down"] );
-    GTGlobals::sleep(50);
-    GTKeyboardDriver::keyRelease(os,GTKeyboardDriver::key["shift"]);
+    GTGlobals::sleep(200);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick(Qt::Key_Down );
+    GTGlobals::sleep(200);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( 0, endPos-1, 1234, 4 ) );
 
 }
@@ -1063,8 +1062,8 @@ GUI_TEST_CLASS_DEFINITION(test_4110){
     QModelIndex fol = GTUtilsProjectTreeView::findIndex(os, "test_4110");
     QModelIndex seqFol = GTUtilsProjectTreeView::findIndex(os, "NC_001363", fol);
     QModelIndex annFol = GTUtilsProjectTreeView::findIndex(os, "NC_001363 features", fol);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, seqFol));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, seqFol));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 //    Expected state: sequence is opened with its annotations on the same view.
     QList<QTreeWidgetItem*> annotationsInFile = GTTreeWidget::getItems(GTUtilsAnnotationsTreeView::getTreeWidget(os)->invisibleRootItem());
@@ -1214,24 +1213,6 @@ GUI_TEST_CLASS_DEFINITION(test_4118){
 
 }
 
-GUI_TEST_CLASS_DEFINITION(test_4120) {
-//    1. Open primer library.
-    GTUtilsPrimerLibrary::openLibrary(os);
-    const int expectedCount = GTUtilsPrimerLibrary::librarySize(os);
-
-//    2. Import a file to the library: "_common_data/fasta/illumina.fa".
-//    Expected state: there are no additional primers in the library, task generates a report that notifies about an error: "there are no applicable sequences".
-    GTUtilsNotifications::waitForNotification(os, false, testDir + "_common_data/fasta/illumina.fa: error: there are no applicable sequences");
-
-    GTUtilsDialog::waitForDialog(os, new ImportPrimersDialogFiller(os, QStringList() << testDir + "_common_data/fasta/illumina.fa"));
-    GTUtilsPrimerLibrary::clickButton(os, GTUtilsPrimerLibrary::Import);
-
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-
-    const int count = GTUtilsPrimerLibrary::librarySize(os);
-    CHECK_SET_ERR(expectedCount == count, "Primer was unexpectedly imported");
-}
-
 GUI_TEST_CLASS_DEFINITION(test_4121) {
 //    1. Open the Primer Library.
 //    2. Select two primes.
@@ -1250,9 +1231,9 @@ GUI_TEST_CLASS_DEFINITION(test_4121) {
             CHECK_SET_ERR(cbFormat != NULL, "cbFormat not found");
 
             if (isRawPresent) {
-                CHECK_SET_ERR(cbFormat->findText("raw") != -1, "raw format is present");
+                CHECK_SET_ERR(cbFormat->findText("Raw sequence") != -1, "raw format is present");
             } else {
-                CHECK_SET_ERR(cbFormat->findText("raw") == -1, "raw format is present");
+                CHECK_SET_ERR(cbFormat->findText("Raw sequence") == -1, "raw format is present");
             }
 
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
@@ -1293,13 +1274,13 @@ GUI_TEST_CLASS_DEFINITION(test_4122) {
 
     QTreeWidgetItem* annotationTable = GTUtilsAnnotationsTreeView::findItem(os, "NC_001363 features [murine.gb] *");
     CHECK_SET_ERR(NULL != annotationTable, "AnnotationTable (NC_001363 features [murine.gb]) is NULL or not changed");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "NC_001363 features [murine.gb] *"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "NC_001363 features [murine.gb] *"));
+    GTMouseDriver::click();
 
     QTreeWidgetItem* newItem = GTUtilsAnnotationsTreeView::findItem(os, "Misc. Feature",annotationTable);
     CHECK_SET_ERR(NULL != newItem, "New annotation is NULL or not created");
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "Misc. Feature"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "Misc. Feature"));
+    GTMouseDriver::click();
 
 }
 
@@ -1343,7 +1324,7 @@ GUI_TEST_CLASS_DEFINITION(test_4124) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(200);
     GTUtilsProjectTreeView::click(os, "out.ugenedb");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep(1000);
     QFile::remove(sandBoxDir+"out.ugenedb");
     GTGlobals::sleep();
@@ -1399,7 +1380,7 @@ GUI_TEST_CLASS_DEFINITION(test_4131) {
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
 
     //3. Enter any valid pattern.
-    GTKeyboardDriver::keySequence(os, pattern);
+    GTKeyboardDriver::keySequence(pattern);
     GTGlobals::sleep(1000);
 
     //4. Set output annotations name : -=_\,.<>;:[]#()$
@@ -1527,8 +1508,8 @@ GUI_TEST_CLASS_DEFINITION(test_4150) {
 
         QTreeView* treeView = dialog->findChild<QTreeView*>();
         const QModelIndex documentIndex = GTUtilsProjectTreeView::findIndex(os, treeView, "test_4150_murine.gb");
-        GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, treeView, documentIndex));
-        GTMouseDriver::click(os);
+        GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, treeView, documentIndex));
+        GTMouseDriver::click();
 
         GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 
@@ -1558,8 +1539,8 @@ GUI_TEST_CLASS_DEFINITION(test_4150) {
 
     // Do double click on the sequence object from the "murine.gb" file
     QModelIndex seqFile = GTUtilsProjectTreeView::findIndex(os, "NC_001363", from);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, seqFile));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, seqFile));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // Expected state: sequence view has opened, it contains a single set of annotations
@@ -1571,8 +1552,8 @@ GUI_TEST_CLASS_DEFINITION(test_4150) {
     GTUtilsMdi::click(os, GTGlobals::Close);
     QModelIndex murineFol = GTUtilsProjectTreeView::findIndex(os, "test_4150_murine.gb", to);
     QModelIndex seqFol = GTUtilsProjectTreeView::findIndex(os, "NC_001363", murineFol);
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, seqFol));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, seqFol));
+    GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
     // Expected state: sequence view has opened, it contains a single set of annotations
@@ -1643,8 +1624,8 @@ GUI_TEST_CLASS_DEFINITION(test_4156) {
 
             AppSettingsDialogFiller::openTab(os, AppSettingsDialogFiller::Resourses);
 
-            QSpinBox* memBox = dialog->findChild<QSpinBox*>("memBox");
-            CHECK_SET_ERR(memBox != NULL, "memBox not found");
+            QSpinBox* memBox = dialog->findChild<QSpinBox*>("memorySpinBox");
+            CHECK_SET_ERR(memBox != NULL, "memorySpinBox not found");
             GTSpinBox::setValue(os, memBox, 256, GTGlobals::UseKeyBoard);
 
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
@@ -1698,12 +1679,12 @@ GUI_TEST_CLASS_DEFINITION(test_4160) {
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
     GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keySequence(os, pattern);
+    GTKeyboardDriver::keySequence(pattern);
     GTGlobals::sleep(1000);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
-    GTMouseDriver::click(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
+    GTMouseDriver::click();
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4164){
@@ -1743,11 +1724,11 @@ GUI_TEST_CLASS_DEFINITION(test_4170) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
-    GTKeyboardDriver::keyClick( os, 'f', GTKeyboardDriver::key["ctrl"] );
+    GTKeyboardDriver::keyClick('f', Qt::ControlModifier );
     GTGlobals::sleep(1000);
-    GTKeyboardDriver::keySequence(os,">pattern1");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["enter"], GTKeyboardDriver::key["ctrl"] );
-    GTKeyboardDriver::keySequence(os,"TGGCAAGCT");
+    GTKeyboardDriver::keySequence(">pattern1");
+    GTKeyboardDriver::keyClick( Qt::Key_Enter, Qt::ControlModifier );
+    GTKeyboardDriver::keySequence("TGGCAAGCT");
 
     GTUtilsOptionPanelSequenceView::openAnnotationParametersShowHideWidget(os);
     GTGlobals::sleep(1000);
@@ -1766,14 +1747,14 @@ GUI_TEST_CLASS_DEFINITION(test_4170) {
     GTWidget::click(os, GTWidget::findWidget(os, "getAnnotationsPushButton"));
     GTGlobals::sleep(500);
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Annotations"));
     GTGlobals::sleep(1000);
     QTreeWidgetItem *item1 = GTUtilsAnnotationsTreeView::findItem(os, "pattern1");
     QTreeWidgetItem *item2 = GTUtilsAnnotationsTreeView::findItem(os, "pat", GTGlobals::FindOptions(false));
     CHECK_SET_ERR(item1 != NULL, "item1 not found!");
     CHECK_SET_ERR(item2 == NULL, "item2 found!");
 
-    GTMouseDriver::moveTo(os, GTTreeWidget::getItemCenter(os, item1));
+    GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, item1));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4179) {
@@ -1970,7 +1951,7 @@ GUI_TEST_CLASS_DEFINITION(test_4244){
             QLineEdit* leDescription = GTWidget::findExactWidget<QLineEdit*>(os, "leDescription", dialog);
             GTWidget::click(os, leDescription);
             GTClipboard::setText(os, s);
-            GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+            GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
             GTGlobals::sleep();
 
             QLineEdit* leAnnotationName = GTWidget::findExactWidget<QLineEdit*>(os, "leAnnotationName", dialog);
@@ -1988,19 +1969,19 @@ GUI_TEST_CLASS_DEFINITION(test_4244){
     };
 
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, new Scenario()));
-    GTKeyboardDriver::keyClick(os, 'n', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep(20000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "test_4244", ExportAnnotationsFiller::gff, os));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "name"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "name"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
     GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "test_4244.gb", ExportAnnotationsFiller::genbank, os));
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "name"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "name"));
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
     GTFileDialog::openFile(os, sandBoxDir + "test_4244.gb");
@@ -2074,7 +2055,7 @@ GUI_TEST_CLASS_DEFINITION(test_4276) {
 
     //5. Delete the alignment object
     GTUtilsProjectTreeView::click(os, "COI");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
     bool executed = GTUtilsTaskTreeView::checkTask(os, "Add sequences to alignment task");
@@ -2104,18 +2085,18 @@ GUI_TEST_CLASS_DEFINITION(test_4284){
     GTGlobals::sleep(200);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( 0, endPos-1, 1234, 1 ) );
 
-    GTKeyboardDriver::keyPress(os,GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["down"] );
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick(Qt::Key_Down );
     GTGlobals::sleep(50);
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["down"] );
+    GTKeyboardDriver::keyClick(Qt::Key_Down );
     GTGlobals::sleep(50);
-    GTKeyboardDriver::keyRelease(os,GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( 0, endPos-1, 1234, 3 ) );
 
-    GTKeyboardDriver::keyPress(os,GTKeyboardDriver::key["shift"]);
-    GTKeyboardDriver::keyClick( os, GTKeyboardDriver::key["down"] );
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick(Qt::Key_Down );
     GTGlobals::sleep(50);
-    GTKeyboardDriver::keyRelease(os,GTKeyboardDriver::key["shift"]);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( 0, endPos-1, 1234, 4 ) );
 
     CHECK_SET_ERR(msaEdistorSequenceAres->getFirstVisibleSequence() == 1, "MSA not scrolled");
@@ -2194,7 +2175,7 @@ GUI_TEST_CLASS_DEFINITION(test_4302_1) {
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Select any region
-    GTUtilsDialog::waitForDialog(os, new selectSequenceRegionDialogFiller(os, 1, 4));
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 1, 4));
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "select_range_action"));
     //3. Open main menu "Actions"
@@ -2209,8 +2190,8 @@ GUI_TEST_CLASS_DEFINITION(test_4302_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //2. Select any annotation
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTMouseDriver::moveTo(os, GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "CDS"));
+    GTMouseDriver::click();
     //3. Open main menu "Actions"
     //Expected state: menu item {Remove->Selected annotation and qualifiers} are enabled
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Remove" << "Selected annotations and qualifiers");
@@ -2339,8 +2320,8 @@ GUI_TEST_CLASS_DEFINITION(test_4309_1) {
     CHECK_SET_ERR(row != -1, QString("Document format parameter not found"));
     table->scrollTo(model->index(row,1));
 
-    GTMouseDriver::moveTo(os, GTTableView::getCellPosition(os,table,1,row));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTTableView::getCellPosition(os,table,1,row));
+    GTMouseDriver::click();
     GTGlobals::sleep(500);
 
     QComboBox* box = qobject_cast<QComboBox*>(table->findChild<QComboBox*>());
@@ -2560,7 +2541,7 @@ GUI_TEST_CLASS_DEFINITION(test_4359) {
             CHECK(NULL != button, );
             CHECK_SET_ERR(button->isDefault(), "Pick primers button doesn't default");
 
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Escape);
         }
     };
     GTUtilsDialog::waitForDialog(os, new EscClicker(os));
@@ -2626,10 +2607,10 @@ GUI_TEST_CLASS_DEFINITION(test_4373) {
     point.setY( cv->mapToGlobal( cv->geometry().topLeft()).y() + 100 );
     GTGlobals::sleep();
 
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, point);
-    GTMouseDriver::release(os);
-    GTThread::waitForMainThread(os);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(point);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
     GTGlobals::sleep();
 #ifdef Q_OS_LINUX
     GTGlobals::sleep(15000);//splitter is moved slowly on some versions of linux
@@ -2677,22 +2658,24 @@ GUI_TEST_CLASS_DEFINITION(test_4383) {
     QWidget *msaOffsetRight = GTWidget::findWidget(os, "msa_editor_offsets_view_widget_right", activeWindow);
     CHECK_SET_ERR(msaOffsetRight != NULL, "MsaOffset Left not found");
 
-    GTMouseDriver::moveTo(os, msaOffsetRight->mapToGlobal(QPoint(msaOffsetRight->rect().left() - 2, 7)));
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os,msaOffsetRight->mapToGlobal(QPoint(msaOffsetRight->rect().left() - 52, 50)));
-    GTMouseDriver::release(os);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTMouseDriver::moveTo(msaOffsetRight->mapToGlobal(QPoint(msaOffsetRight->rect().left() - 2, 7)));
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(msaOffsetRight->mapToGlobal(QPoint(msaOffsetRight->rect().left() - 52, 50)));
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
+    GTThread::waitForMainThread();
 
     GTGlobals::sleep();
     activeWindow = GTUtilsMdi::activeWindow(os);
     msaOffsetRight = GTWidget::findWidget(os, "msa_editor_offsets_view_widget_right", activeWindow);
-    GTMouseDriver::moveTo(os, msaOffsetRight->mapToGlobal(QPoint(msaOffsetRight->rect().left() - 2, 77)));
-    GTMouseDriver::press(os);
+    GTMouseDriver::moveTo(msaOffsetRight->mapToGlobal(QPoint(msaOffsetRight->rect().left() - 2, 77)));
+    GTMouseDriver::press();
     GTGlobals::sleep();
-    GTMouseDriver::moveTo(os,msaOffsetRight->mapToGlobal(QPoint(msaOffsetRight->rect().left() - 52, 120)));
-    GTMouseDriver::release(os);
+    GTMouseDriver::moveTo(msaOffsetRight->mapToGlobal(QPoint(msaOffsetRight->rect().left() - 52, 120)));
+    GTMouseDriver::release();
     GTGlobals::sleep();
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4386_1) {
@@ -2702,7 +2685,7 @@ GUI_TEST_CLASS_DEFINITION(test_4386_1) {
 
     //    2. Change this alignment by adding random gaps.
     GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(5, 5));
-    GTKeyboardDriver::keyClick(os, ' ');
+    GTKeyboardDriver::keyClick( ' ');
 
     //    3. Align with Muscle (or other algorithm).
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Align" << "Align with MUSCLE..."));
@@ -2890,7 +2873,7 @@ GUI_TEST_CLASS_DEFINITION(test_4463) {
     GTUtilsDialog::waitForDialog(os, new RemovePartFromSequenceDialogFiller(os, "10..20"));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Remove subsequence..."));
     GTWidget::click(os, GTUtilsAnnotationsTreeView::getTreeWidget(os));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsMdi::closeWindow(os, "test_4463.gb.gz");
     GTUtilsDocument::unloadDocument(os, "test_4463.gb.gz", true);
@@ -2922,7 +2905,7 @@ GUI_TEST_CLASS_DEFINITION(test_4486) {
 //    Expected state: UGENE doesn't crash.
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
 
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export" << "Visible reads"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export" << "Visible reads as sequences"));
     GTUtilsDialog::waitForDialog(os, new ExportReadsDialogFiller(os, sandBoxDir + "test_4486/reads.fa"));
     GTUtilsAssemblyBrowser::callContextMenu(os, GTUtilsAssemblyBrowser::Reads);
 
@@ -2965,9 +2948,9 @@ GUI_TEST_CLASS_DEFINITION(test_4489) {
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(5, 5), QPoint(10, 10));
     //3. Move it to the right with a mouse.
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(7, 7));
-    GTMouseDriver::press(os);
+    GTMouseDriver::press();
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(12, 7));
-    GTMouseDriver::release(os);
+    GTMouseDriver::release();
     GTGlobals::sleep();
 
     //Bug state : Overview is not recalculated.There is the "Waiting..." state.
@@ -2984,15 +2967,16 @@ GUI_TEST_CLASS_DEFINITION(test_4505) {
     GTLogTracer l;
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/Chikungunya_E1.fasta");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Delete any column
     GTUtilsMSAEditorSequenceArea::selectColumnInConsensus(os, 1);
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
-    GTThread::waitForMainThread(os);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
+    GTThread::waitForMainThread();
+    GTUtilsTaskTreeView::waitTaskFinished(os);
     //GTUtilsTaskTreeView::waitTaskFinished(os);
 //    3. Press "Undo"
     GTUtilsMsaEditor::undo(os);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Bug state: Error appeared in log: "[ERROR][19:02] Failed to create a multiple alignment row!"
     GTUtilsLog::check(os, l);
 //    4. Click right button on MSA
@@ -3048,7 +3032,7 @@ GUI_TEST_CLASS_DEFINITION(test_4508) {
 //    5. Accept the dialog.
 
     GTUtilsMsaEditor::removeColumn(os, 1);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     class Scenario2 : public CustomScenario {
         void run(HI::GUITestOpStatus &os) {
@@ -3090,13 +3074,13 @@ GUI_TEST_CLASS_DEFINITION(test_4524) {
 
     // Remove the first sequence.
     GTUtilsMSAEditorSequenceArea::selectSequence(os, "Phaneroptera_falcata");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    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 PopupChooserByText(os, QStringList() << "Export" << "Export as image"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(10, 10));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 
     GTGlobals::sleep(5000);
 
@@ -3166,7 +3150,7 @@ GUI_TEST_CLASS_DEFINITION(test_4563) {
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
 
             AppSettingsDialogFiller::openTab(os, AppSettingsDialogFiller::Resourses);
-            GTSpinBox::setValue(os, GTWidget::findExactWidget<QSpinBox *>(os, "memBox", dialog), 200);
+            GTSpinBox::setValue(os, GTWidget::findExactWidget<QSpinBox *>(os, "memorySpinBox", dialog), 200);
 
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
         }
@@ -3179,8 +3163,8 @@ GUI_TEST_CLASS_DEFINITION(test_4563) {
     GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
 
     // 4. Set "_common_data/scenarios/_regression/4563/test_ma.fa" as the input file.
-    GTMouseDriver::moveTo(os, GTUtilsWorkflowDesigner::getItemCenter(os, "Read alignment"));
-    GTMouseDriver::click(os);
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read alignment"));
+    GTMouseDriver::click();
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/scenarios/_regression/4563", "test_ma.fa");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/scenarios/_regression/4563", "test_ma_1.fa");
     GTLogTracer l;
@@ -3238,7 +3222,7 @@ GUI_TEST_CLASS_DEFINITION(test_4588) {
     GTUtilsDialog::waitForDialog(os, new OkClicker(os, testDir + "_common_data/scenarios/_regression/4588/BLAST/4588.00.nhr",
         testDir + "_common_data/scenarios/sandbox/4588_fetched.fa"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "fetchMenu" << "fetchSequenceById"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::getItemCenter(os, "gnl|BL_ORD_ID|24489 shortread24489");
@@ -3279,7 +3263,7 @@ GUI_TEST_CLASS_DEFINITION(test_4588_1) {
     GTUtilsDialog::waitForDialog(os, new OkClicker(os, testDir + "_common_data/scenarios/_regression/4588/BLAST_plus/4588.00.nhr",
         testDir + "_common_data/scenarios/sandbox/4588_1_fetched.fa"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "fetchMenu" << "fetchSequenceById"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::getItemCenter(os, "gnl|BL_ORD_ID|24481 shortread24481");
@@ -3323,7 +3307,7 @@ GUI_TEST_CLASS_DEFINITION(test_4588_2) {
     GTUtilsDialog::waitForDialog(os, new OkClicker(os, testDir + "_common_data/scenarios/_regression/4588/4588_1.gb",
         testDir + "_common_data/scenarios/sandbox/4588_1_fetched.fa"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "fetchMenu" << "fetchSequenceById"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4606) {
@@ -3434,7 +3418,7 @@ GUI_TEST_CLASS_DEFINITION(test_4621) {
 
     //3. Delete sequence object
     GTUtilsProjectTreeView::click(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //Expected state: UGENE does not crash.
 }
@@ -3499,7 +3483,7 @@ GUI_TEST_CLASS_DEFINITION(test_4674) {
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
     GTUtilsMsaEditor::clickSequenceName(os, "Zychia_baranovi");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
     MSAEditorTreeViewerUI* ui = qobject_cast<MSAEditorTreeViewerUI*>( GTUtilsPhyTree::getTreeViewerUi(os) );
@@ -3509,7 +3493,7 @@ GUI_TEST_CLASS_DEFINITION(test_4674) {
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
     GTUtilsMsaEditor::clickSequenceName(os, "Zychia_baranovi");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(!ui->isCurTreeViewerSynchronized(), "The connection with the tree is still there");
@@ -3546,20 +3530,21 @@ GUI_TEST_CLASS_DEFINITION(test_4674_1) {
     int seqNumber = GTUtilsMsaEditor::getSequencesCount(os);
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["z"], Qt::CTRL);
-    GTGlobals::sleep();
+    GTUtilsMsaEditor::undo(os);
+    GTThread::waitForMainThread();
 
     MSAEditorTreeViewerUI* ui = qobject_cast<MSAEditorTreeViewerUI*>( GTUtilsPhyTree::getTreeViewerUi(os) );
     CHECK_SET_ERR(ui != NULL, "Cannot find the tree");
     CHECK_SET_ERR(ui->isCurTreeViewerSynchronized(), "The connection with the tree is lost");
-    CHECK_SET_ERR(seqNumber == GTUtilsMsaEditor::getSequencesCount(os), "Undo was not undone");
+    CHECK_SET_ERR(seqNumber == GTUtilsMsaEditor::getSequencesCount(os), "Undo was not undone 1");
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["z"], Qt::CTRL);
-    GTGlobals::sleep();
+    GTUtilsMsaEditor::undo(os);
+    GTUtilsMsaEditor::undo(os);
+    GTThread::waitForMainThread();
 
     CHECK_SET_ERR(!ui->isCurTreeViewerSynchronized(), "The connection with the tree is still there");
-    CHECK_SET_ERR(seqNumber != GTUtilsMsaEditor::getSequencesCount(os), "Undo was not undone");
+    CHECK_SET_ERR(seqNumber != GTUtilsMsaEditor::getSequencesCount(os), "Undo was not undone 2");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4674_2) {
@@ -3586,7 +3571,7 @@ GUI_TEST_CLASS_DEFINITION(test_4674_2) {
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::No));
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(10, 10));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTGlobals::sleep();
 
     MSAEditorTreeViewerUI* ui = qobject_cast<MSAEditorTreeViewerUI*>( GTUtilsPhyTree::getTreeViewerUi(os) );
@@ -3596,14 +3581,14 @@ GUI_TEST_CLASS_DEFINITION(test_4674_2) {
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Yes));
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(10, 10));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Space"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Space);
     GTGlobals::sleep();
 
     CHECK_SET_ERR(!ui->isCurTreeViewerSynchronized(), "The connection with the tree is still there");
     CHECK_SET_ERR(alnLen != GTUtilsMSAEditorSequenceArea::getLength(os), "Undo was not undone");
 
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(10, 10));
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["Delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4687) {
@@ -3630,7 +3615,7 @@ GUI_TEST_CLASS_DEFINITION(test_4687) {
     CHECK_SET_ERR(label->isVisible(), "Label should be visible");
 
     //4. Undo changes
-    GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
     GTGlobals::sleep(500);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -3734,7 +3719,7 @@ GUI_TEST_CLASS_DEFINITION(test_4694) {
     GTWidget::click(os, GTWidget::findWidget(os, "alignButton"));
 
     //4. Undo changes
-    GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
     GTGlobals::sleep(500);
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //Expected state "Undo" button is disabled
@@ -3754,7 +3739,7 @@ GUI_TEST_CLASS_DEFINITION(test_4702_1) {
     CHECK_SET_ERR(1 == selectedItemsCount, QString("Incorrect selected annotations count: expected - %1, obtained - %2 ").arg(1).arg(selectedItemsCount));
     // 3. Use context menu on AnnotationsTreeView {Invert annotations selection}
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "invert_selection_action"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     // Expected state: all annotations other besides the originally selected annotation are selected
     selectedItemsCount = GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size();
     CHECK_SET_ERR(359 == selectedItemsCount, QString("Incorrect selected annotations count: expected - %1, obtained - %2 ").arg(359).arg(selectedItemsCount));
@@ -3773,7 +3758,7 @@ GUI_TEST_CLASS_DEFINITION(test_4702_2) {
     CHECK_SET_ERR(2 == selectedItemsCount, QString("Incorrect selected annotations count: expected - %1, obtained - %2 ").arg(2).arg(selectedItemsCount));
     // 3. Use context menu on AnnotationsTreeView {Invert annotations selection}
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "invert_selection_action"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     // Expected state: All annotations, except comment and source, are selected.
     selectedItemsCount = GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size();
     CHECK_SET_ERR(358 == selectedItemsCount, QString("Incorrect selected annotations count: expected - %1, obtained - %2 ").arg(358).arg(selectedItemsCount));
@@ -3791,8 +3776,8 @@ GUI_TEST_CLASS_DEFINITION(test_4702_3) {
     // 3. Use context menu on AnnotationsTreeView {Invert annotations selection}
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "invert_selection_action"));
     QPoint p = GTUtilsAnnotationsTreeView::getItemCenter(os, "comment");
-    GTMouseDriver::moveTo(os, p);
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click(Qt::RightButton);
     // Expected state: All annotations are selected.
     selectedItemsCount = GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size();
     CHECK_SET_ERR(359 == selectedItemsCount, QString("Incorrect selected annotations count: expected - %1, obtained - %2 ").arg(359).arg(selectedItemsCount));
@@ -3812,7 +3797,7 @@ GUI_TEST_CLASS_DEFINITION(test_4702_4) {
     CHECK_SET_ERR(1 == selectedItemsCount, QString("Incorrect selected annotations count: expected - %1, obtained - %2 ").arg(1).arg(selectedItemsCount));
     // 3. Use context menu on AnnotationsTreeView {Invert annotations selection}
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "invert_selection_action"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     // Expected state: All annotations are selected.
     selectedItemsCount = GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size();
     CHECK_SET_ERR(361 == selectedItemsCount, QString("Incorrect selected annotations count: expected - %1, obtained - %2 ").arg(361).arg(selectedItemsCount));
@@ -3832,7 +3817,7 @@ GUI_TEST_CLASS_DEFINITION(test_4702_5) {
     CHECK_SET_ERR(1 == selectedItemsCount, QString("Incorrect selected annotations count: expected - %1, obtained - %2 ").arg(1).arg(selectedItemsCount));
     // 3. Use context menu on AnnotationsTreeView {Invert annotations selection}
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "invert_selection_action"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     // Expected state: All annotations are selected.
     selectedItemsCount = GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size();
     CHECK_SET_ERR(361 == selectedItemsCount, QString("Incorrect selected annotations count: expected - %1, obtained - %2 ").arg(361).arg(selectedItemsCount));
@@ -3843,7 +3828,7 @@ GUI_TEST_CLASS_DEFINITION(test_4710){
 //    2) Run a workflow, e.g. I ran "Variation annotation with SnpEff" with the tutorial data.
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addSample(os, "SnpEff");
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
     GTUtilsWorkflowDesigner::click(os, "Input Variations File");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/vcf", "valid.vcf");
     GTUtilsWorkflowDesigner::runWorkflow(os);
@@ -4150,10 +4135,12 @@ GUI_TEST_CLASS_DEFINITION(test_4728) {
     startPos = seqWidget->mapToGlobal(QPoint(indent, widgetCenterHeight));
     endPos = seqWidget->mapToGlobal(QPoint(seqWidget->rect().width() - indent, widgetCenterHeight));
 
-    GTMouseDriver::moveTo(os, startPos);
-    GTMouseDriver::press(os);
-    GTMouseDriver::moveTo(os, endPos);
-    GTMouseDriver::release(os);
+    GTMouseDriver::moveTo(startPos);
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(endPos);
+    GTMouseDriver::release();
+    GTThread::waitForMainThread();
+    GTGlobals::sleep(200);
 
     //Expected state: all 4 symbols are selected
     QVector<U2Region> selection = GTUtilsSequenceView::getSelection(os);
@@ -4220,9 +4207,9 @@ GUI_TEST_CLASS_DEFINITION(test_4734) {
             QAction* showCircular = GTMenu::getMenuItem(os, activePopupMenu, "globalToggleViewAction", false);
             CHECK_SET_ERR(showCircular == NULL, "'Toggle circular view' menu item should be NULL");
 
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Escape);
             GTGlobals::sleep(200);
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Escape);
         }
     };
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, new AllPopupChecker));
@@ -4239,7 +4226,7 @@ GUI_TEST_CLASS_DEFINITION(test_4735) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
     GTGlobals::sleep();
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
     QWidget* simple = GTWidget::findWidget(os, "msa_overview_area_simple");
     CHECK_SET_ERR(simple->isVisible(), "simple overveiw is not visiable");
 
@@ -4274,7 +4261,7 @@ GUI_TEST_CLASS_DEFINITION(test_4735) {
     //4. Undo changes
     GTUtilsMsaEditor::undo(os);
     GTGlobals::sleep();
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
 
     //Check empty simple overview gray color again
     pixmap = GTWidget::getPixmap(os, simple);
@@ -4296,11 +4283,11 @@ GUI_TEST_CLASS_DEFINITION(test_4764_1) {
 
     //2. Add some gaps
     GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(5, 5));
-    GTKeyboardDriver::keyClick(os, ' ');
+    GTKeyboardDriver::keyClick( ' ');
     GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(5, 6));
-    GTKeyboardDriver::keyClick(os, ' ');
-    GTKeyboardDriver::keyClick(os, ' ');
-    GTKeyboardDriver::keyClick(os, ' ');
+    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));
@@ -4328,7 +4315,7 @@ GUI_TEST_CLASS_DEFINITION(test_4764_1) {
 
     //Expected state subalignment pasted correctly
     QString expectedClipboard = "-CTACTAATTCG\n---TTATTAATT\nTTGCTAATTCGA\nTTATTAATCCGG\nCTATTAATTCGA";
-    GTKeyboardDriver::keyClick(os, 'c', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
     GTGlobals::sleep(200);
     QString clipboardText = GTClipboard::text(os);
     GTWidget::click(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
@@ -4754,13 +4741,13 @@ GUI_TEST_CLASS_DEFINITION(test_4804_6) {
 
     //   4. Undo changes
     GTUtilsMsaEditor::undo(os);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //   5. Redo changes and check appearing notifications
     GTUtilsNotifications::waitForNotification(os, true, "from \"Standard DNA\" to \"Raw\". Use \"Undo\", if you'd like to restore the original alignment.");
     GTUtilsMsaEditor::redo(os);
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
@@ -4883,7 +4870,7 @@ GUI_TEST_CLASS_DEFINITION(test_4839_1) {
 
     //3. Call context menu on the name list area, select the {Edit -> Remove sequence} menu item.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "Remove sequence"));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     //Expected state: the sequences are removed.
     QStringList modifiedNames = GTUtilsMSAEditorSequenceArea::getNameList(os);
 
@@ -4926,7 +4913,7 @@ GUI_TEST_CLASS_DEFINITION(test_4852) {
 
     //3. Delete chrY.fa document from project view
     GTUtilsProjectTreeView::click(os, "chrY.fa");
-    GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["delete"]);
+    GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     //Expected state: 'find repeats' task cancelled
     GTGlobals::sleep(1000);
@@ -4984,7 +4971,7 @@ GUI_TEST_CLASS_DEFINITION(test_4871) {
     GTWidget::click(os, GTWidget::findWidget(os, "alignButton"));
 
     //4. Undo changes
-    GTKeyboardDriver::keyClick(os, 'z', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
     GTGlobals::sleep(500);
     GTUtilsTaskTreeView::waitTaskFinished(os);
     //Expected state "Undo" button is disabled
@@ -5003,7 +4990,7 @@ GUI_TEST_CLASS_DEFINITION(test_4885_1) {
 //    3. Doubleclick the first symbol of the first sequence.
 //    Expected state: overview doesn't start recalculation.
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
 
     QWidget *graphOverview = GTUtilsMsaEditor::getGraphOverview(os);
     CHECK_SET_ERR(NULL != graphOverview, "Graph overview is NULL");
@@ -5024,7 +5011,7 @@ GUI_TEST_CLASS_DEFINITION(test_4885_2) {
     GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os, QMessageBox::Cancel, "The alignment has been modified"));
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
-    GTMouseDriver::doubleClick(os);
+    GTMouseDriver::doubleClick();
 
     GTGlobals::sleep(500);
 }
@@ -5066,11 +5053,11 @@ GUI_TEST_CLASS_DEFINITION(test_4886) {
     QTreeView *treeView = GTUtilsProjectTreeView::getTreeView(os);
     CHECK_SET_ERR(NULL != treeView, "Invalid project tree view");
 
-    GTMouseDriver::moveTo(os, GTUtilsProjectTreeView::getItemCenter(os, "90-JRI-07.scf"));
+    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "90-JRI-07.scf"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CHROMATOGRAM));
     GTUtilsDialog::waitForDialog(os, new ExportChromatogramFiller(os, testDir + "_common_data/scenarios/sandbox/", "90-JRI-07.scf",
         ExportChromatogramFiller::SCF, false, false, true));
-    GTMouseDriver::click(os, Qt::RightButton);
+    GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(5000);
 
     GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
@@ -5088,7 +5075,7 @@ GUI_TEST_CLASS_DEFINITION(test_4908) {
     ADVSingleSequenceWidget *firstSeqWidget = GTUtilsSequenceView::getSeqWidgetByNumber(os, 0);
     GTWidget::click(os, firstSeqWidget);
     GTClipboard::setUrls(os, QList<QString>() << dataDir + "samples/FASTA/human_T1.fa");
-    GTKeyboardDriver::keyClick(os, 'v', GTKeyboardDriver::key["ctrl"]);
+    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
 
     //3. While the data is been pasted, select the second sequence
     ADVSingleSequenceWidget *secondSeqWidget = GTUtilsSequenceView::getSeqWidgetByNumber(os, 1);
@@ -5129,7 +5116,7 @@ GUI_TEST_CLASS_DEFINITION(test_4913) {
             CHECK_SET_ERR(combo != NULL, "wordSizeComboBox not found!");
             CHECK_SET_ERR(combo->currentText() == "6", QString("Value of wordSizeComboBox not equal 6, it has other default value: %1!").arg(combo->currentText()));
 
-            GTKeyboardDriver::keyClick(os, GTKeyboardDriver::key["esc"]);
+            GTKeyboardDriver::keyClick( Qt::Key_Escape);
         }
     };
 
@@ -5364,7 +5351,7 @@ GUI_TEST_CLASS_DEFINITION(test_4986) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_sequence_of_selected_annotations"));
     GTUtilsAnnotationsTreeView::callContextMenuOnItem(os, GTUtilsAnnotationsTreeView::findItem(os, "5_prime_UTR_intron"));
 
-    GTThread::waitForMainThread(os);
+    GTThread::waitForMainThread();
     CHECK_SET_ERR(l.hasError(), "There is no error in the log");
 }
 
@@ -5373,19 +5360,15 @@ GUI_TEST_CLASS_DEFINITION(test_4990) {
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/big.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
+    GTWidget::click(os, GTAction::button(os, "Show overview"));
 
     //2. Open "Export Consensus" OP tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
 
     //3. Press "Export" button 3x times
-    GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
-    GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
-    GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
-    GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
-    GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
-    GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
-    GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
-    GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
+    for(int i = 0; i < 24; i++){
+        GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
+    }
 
     //4. Remove "big.aln" document
     GTUtilsDocument::removeDocument(os, "big.aln");
@@ -5395,4 +5378,3 @@ GUI_TEST_CLASS_DEFINITION(test_4990) {
 } // namespace GUITest_regression_scenarios
 
 } // namespace U2
-
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 0cd6183..20229b8 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
@@ -70,7 +70,6 @@ GUI_TEST_CLASS_DECLARATION(test_4113)
 GUI_TEST_CLASS_DECLARATION(test_4116)
 GUI_TEST_CLASS_DECLARATION(test_4117)
 GUI_TEST_CLASS_DECLARATION(test_4118)
-GUI_TEST_CLASS_DECLARATION(test_4120)
 GUI_TEST_CLASS_DECLARATION(test_4121)
 GUI_TEST_CLASS_DECLARATION(test_4122)
 GUI_TEST_CLASS_DECLARATION(test_4124)
@@ -211,6 +210,7 @@ GUI_TEST_CLASS_DECLARATION(test_4839_2)
 GUI_TEST_CLASS_DECLARATION(test_4852)
 GUI_TEST_CLASS_DECLARATION(test_4860)
 GUI_TEST_CLASS_DECLARATION(test_4871)
+GUI_TEST_CLASS_DECLARATION(test_4881)
 GUI_TEST_CLASS_DECLARATION(test_4885_1)
 GUI_TEST_CLASS_DECLARATION(test_4885_2)
 GUI_TEST_CLASS_DECLARATION(test_4885_3)
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 a04e371..48c6563 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
@@ -19,10 +19,12 @@
  * MA 02110-1301, USA.
  */
 
+#include <QApplication>
 #include <QFile>
 #include <QListWidget>
 #include <QPlainTextEdit>
 #include <QTableView>
+#include <QTableWidget>
 #include <QWebElement>
 
 #include <U2Core/BaseDocumentFormats.h>
@@ -89,13 +91,45 @@
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
-
+#include "runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.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/ExportSequencesDialogFiller.h"
+#include "runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.h"
+#include "runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h"
+#include "runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h"
+#include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
+#include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
+#include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 
 namespace U2 {
 
 namespace GUITest_regression_scenarios {
 using namespace HI;
 
+GUI_TEST_CLASS_DEFINITION(test_5004) {
+    //1. Open file _common_data/scenarios/_regression/5004/short.fa
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/5004", "short.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    QWidget *sequenceWidget = GTWidget::findWidget(os, "ADV_single_sequence_widget_0");
+    CHECK_SET_ERR(NULL != sequenceWidget, "sequenceWidget is not present");
+
+    GTWidget::click(os, sequenceWidget);
+
+    GTLogTracer lt;
+    // 2. Show DNA Flexibility graph
+    // Expected state: no errors in log
+    QWidget *graphAction = GTWidget::findWidget(os, "GraphMenuAction", sequenceWidget, false);
+    Runnable *chooser = new PopupChooser(os, QStringList() << "DNA Flexibility");
+    GTUtilsDialog::waitForDialog(os, chooser);
+    GTWidget::click(os, graphAction);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    CHECK_SET_ERR(!lt.hasError(), "There is error in the log");
+}
+
 GUI_TEST_CLASS_DEFINITION(test_5012) {
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
@@ -177,6 +211,119 @@ GUI_TEST_CLASS_DEFINITION(test_5012_2) {
     CHECK_SET_ERR(l.hasError(), "There is no error in the log");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_5018) {
+#ifdef Q_OS_WIN
+    const QString homePlaceholder = "%UserProfile%";
+#else
+    const QString homePlaceholder = "~";
+#endif
+
+//    1. Ensure that there is no "test_5018.fa" file in the home dir.
+    const QString homePath = QDir::homePath();
+    if (GTFile::check(os, homePath + "/test_5018.fa")) {
+        QFile(homePath + "/test_5018.fa").remove();
+        CHECK_SET_ERR(!GTFile::check(os, homePath + "/test_5018.fa"), "File can't be removed");
+    }
+
+//    2. Open "data/samples/FASTA/human_T1.fa".
+    GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    3. Call context menu on the sequence object in the Project View, select {Export/Import -> Export sequences...} item.
+//    4. Set output path to "~/test_5018.fa" for *nix and "%HOME_DIR%\test_5018.fa" for Windows. Accept the dialog.
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export/Import" << "Export sequences..."));
+    GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, homePlaceholder + "/test_5018.fa"));
+    GTUtilsProjectTreeView::click(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)", Qt::RightButton);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: "test_5018.fa" appears in the home dir.
+    CHECK_SET_ERR(GTFile::check(os, homePath + "/test_5018.fa"), "File was not created");
+    GTUtilsDialog::waitForDialog(os, new MessageBoxNoToAllOrNo(os));
+    QFile(homePath + "/test_5018.fa").remove();
+    GTGlobals::sleep(5000);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5027_1) {
+    //1. Open preferences and set memory limit per task 500000MB
+    //2. Open WD and compose next scheme "File list" -> "SnpEff annotation and filtration"
+    //3. Run schema.
+    //Expected state : there is problem on dashboard "A problem occurred during allocating memory for running SnpEff."
+    class MemorySetter : public CustomScenario {
+    public:
+        MemorySetter(int memValue)
+            : memValue(memValue) {}
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
+
+            AppSettingsDialogFiller::openTab(os, AppSettingsDialogFiller::Resourses);
+
+            QSpinBox* memSpinBox = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "memorySpinBox"));
+            CHECK_SET_ERR(memSpinBox != NULL, "No memorySpinBox");
+            GTSpinBox::setValue(os, memSpinBox, memValue, GTGlobals::UseKeyBoard);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    private:
+        int memValue;
+    };
+
+    GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new MemorySetter(500000)));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+    GTGlobals::sleep();
+
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+    GTUtilsWorkflowDesigner::addSample(os, "SnpEff");
+    GTThread::waitForMainThread();
+    GTUtilsWorkflowDesigner::click(os, "Input Variations File");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/vcf", "valid.vcf");
+    GTUtilsWorkflowDesigner::runWorkflow(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTWebView::findElement(os, GTUtilsDashboard::getDashboard(os), "A problem occurred during allocating memory for running SnpEff.");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5027_2) {
+    //1. Open preferences and set memory limit per task 512MB
+    //2. Open WD and compose next scheme "File list" -> "SnpEff annotation and filtration"
+    //3. Run schema.
+    //Expected state : there is problem on dashboard "There is not enough memory to complete the SnpEff execution."
+    class MemorySetter : public CustomScenario {
+    public:
+        MemorySetter(int memValue)
+            : memValue(memValue) {}
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
+
+            AppSettingsDialogFiller::openTab(os, AppSettingsDialogFiller::Resourses);
+
+            QSpinBox* memSpinBox = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "memorySpinBox"));
+            CHECK_SET_ERR(memSpinBox != NULL, "No memorySpinBox");
+            GTSpinBox::setValue(os, memSpinBox, memValue, GTGlobals::UseKeyBoard);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    private:
+        int memValue;
+    };
+
+    GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new MemorySetter(256)));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+    GTGlobals::sleep();
+
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+    GTUtilsWorkflowDesigner::addSample(os, "SnpEff");
+    GTThread::waitForMainThread();
+    GTUtilsWorkflowDesigner::click(os, "Input Variations File");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/vcf", "valid.vcf");
+    GTUtilsWorkflowDesigner::runWorkflow(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTWebView::findElement(os, GTUtilsDashboard::getDashboard(os), "There is not enough memory to complete the SnpEff execution.");
+}
+
 GUI_TEST_CLASS_DEFINITION(test_5029) {
     GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Plugins...");
     GTGlobals::sleep();
@@ -201,6 +348,385 @@ GUI_TEST_CLASS_DEFINITION(test_5052) {
     CHECK_SET_ERR(title.contains("NC_"), "Wrong MDI window is active");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_5079) {
+    //1. Open "COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Set the consensus type to "Levitsky".
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
+    GTGlobals::sleep(200);
+    QComboBox *consensusCombo = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "consensusType"));
+    CHECK_SET_ERR(consensusCombo != NULL, "consensusCombo is NULL");
+    GTComboBox::setIndexWithText(os, consensusCombo, "Levitsky");
+
+    //3. Add an additional sequence from file : "test/_common_data/fasta/amino_ext.fa".
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/fasta/amino_ext.fa"));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align sequence to this alignment");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //4. Open the "Export consensus" OP tab.
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
+
+    GTLogTracer l;
+
+    //5. Press "Undo" button.
+    GTUtilsMsaEditor::undo(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //6. Press "Redo" button.
+    GTUtilsMsaEditor::redo(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //Expected state : the tab is successfully updated. No error in log.
+    CHECK_SET_ERR(!l.hasError(), "unexpected errors in log");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5082) {
+    GTLogTracer l;
+    // 1. Open "_common_data/clustal/big.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal/big.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // 2. Align it with MUSCLE.
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Align" << "Align with MUSCLE..."));
+    GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+
+    // Expected: Error notification appears with a correct human readable error. There is a error in log wit memory requirements.
+    GTUtilsNotifications::waitForNotification(os, true, "There is not enough memory to align these sequences with MUSCLE.");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    CHECK_SET_ERR(l.checkMessage("Not enough resources for the task, resource name:"), "No default error in log");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5090) {
+//    1. Open "_common_data/genbank/join_complement_ann.gb".
+//    Expected state: the file is successfully opened;
+//                    a warning appears. It contains next message: "The file contains joined annotations with regions, located on different strands. All such joined parts will be stored on the same strand."
+//                    there are two annotations: 'just_an_annotation' (40..50) and 'join_complement' (join(10..15,20..25)). // the second one should have another location after UGENE-3423 will be done
+
+    GTLogTracer logTracer;
+    GTUtilsNotifications::waitForNotification(os, false, "The file contains joined annotations with regions, located on different strands. All such joined parts will be stored on the same strand.");
+
+    GTFileDialog::openFile(os, testDir + "_common_data/genbank/join_complement_ann.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsLog::checkContainsError(os, logTracer, "The file contains joined annotations with regions, located on different strands. All such joined parts will be stored on the same strand.");
+
+    GTUtilsMdi::activateWindow(os, "join_complement_ann [s] A_SEQ_1");
+
+    const QString simpleAnnRegion = GTUtilsAnnotationsTreeView::getAnnotationRegionString(os, "just_an_annotation");
+    CHECK_SET_ERR("40..50" == simpleAnnRegion, QString("An incorrect annotation region: expected '%1', got '%2'").arg("40..50").arg(simpleAnnRegion));
+    const QString joinComplementAnnRegion = GTUtilsAnnotationsTreeView::getAnnotationRegionString(os, "join_complement");
+    CHECK_SET_ERR("join(10..15,20..25)" == joinComplementAnnRegion, QString("An incorrect annotation region: expected '%1', got '%2'").arg("join(10..15,20..25)").arg(simpleAnnRegion));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5128) {
+    //1. Open any 3D structure.
+    GTFileDialog::openFile(os, dataDir + "samples/PDB/1CF7.PDB");
+
+    //2. Context menu: { Molecular Surface -> * }.
+    //3. Select any model.
+    //Current state: crash
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Molecular Surface" << "SAS"));
+    GTWidget::click(os, GTWidget::findWidget(os, "1-1CF7"), Qt::RightButton);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5137) {
+    //    1. Open document test/_common_data/clustal/big.aln
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //    2. Add big sequence
+    GTFileDialogUtils *ob = new GTFileDialogUtils(os, testDir + "_common_data/fasta/", "PF07724_full_family.fa");
+    GTUtilsDialog::waitForDialog(os, ob);
+
+    QAbstractButton *align = GTAction::button(os, "Align sequence to this alignment");
+    CHECK_SET_ERR(align != NULL, "MSA \"Align sequence to this alignment\" action not found");
+    GTWidget::click(os, align);
+    GTUtilsNotifications::waitForNotification(os, true, "A problem occurred during adding sequences. The multiple alignment is no more available.");
+    GTGlobals::sleep();
+    GTUtilsProjectTreeView::click(os, "COI");
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+    GTGlobals::sleep(6000);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5138_1) {
+    //1. Open document test/_common_data/scenarios/msa/ma2_gapped.aln
+    GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Join));
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "big_aln.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //2. Do MSA area context menu->Statistics->generate distance matrix
+    //    Expected state: notification about low memory has appeared
+    Runnable* dis = new DistanceMatrixDialogFiller(os, DistanceMatrixDialogFiller::NONE, testDir + "_common_data/scenarios/sandbox/matrix.html");
+    GTUtilsDialog::waitForDialog(os, dis);
+    Runnable* pop = new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate distance matrix", GTGlobals::UseKey);
+    GTUtilsDialog::waitForDialog(os, pop);
+    GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
+    GTUtilsNotifications::waitForNotification(os, true, "not enough memory");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5138_2) {
+    //    1. Open document test/_common_data/clustal/big.aln
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/5138", "big_5138.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //    2. Do MSA area context menu->Statistics->generate grid profile
+    //    Expected state: notification about low memory has appeared
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_STATISTICS << "Generate grid profile", GTGlobals::UseKey));
+    GTUtilsDialog::waitForDialog(os, new GenerateAlignmentProfileDialogFiller(os, true, GenerateAlignmentProfileDialogFiller::NONE,
+        testDir + "_common_data/scenarios/sandbox/stat.html"));
+    GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
+    GTUtilsNotifications::waitForNotification(os, true, "not enough memory");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5199) {
+//    1. Open "data/samples/PDB/1CF7.PDB".
+    GTFileDialog::openFile(os, dataDir + "samples/PDB/1CF7.PDB");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Set focus to the first sequence.
+    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os));
+
+//    3. Click "Predict secondary structure" button on the toolbar;
+//    4. Select "PsiPred" algorithm.
+//    5. Click "OK" button.
+//    Expected state: UGENE doesn't crash, 4 results are found.
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
+
+            GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "algorithmComboBox", dialog), "PsiPred");
+            GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new LicenseAgreementDialogFiller(os));
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+
+            QTableWidget *resultsTable = GTWidget::findExactWidget<QTableWidget *>(os, "resultsTable", dialog);
+            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));
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new PredictSecondaryStructureDialogFiller(os, new Scenario));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Predict secondary structure");
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5208) {
+    //    1. Open the library, clear it.
+    GTUtilsPrimerLibrary::openLibrary(os);
+    GTUtilsPrimerLibrary::clearLibrary(os);
+
+    //    2. Click "Import".
+    //    3. Fill the dialog:
+    //        Import from: "Local file(s)";
+    //        Files: "_common_data/fasta/random_primers.fa"
+    //    and accept the dialog.
+    class ImportFromMultifasta : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
+            ImportPrimersDialogFiller::setImportTarget(os, ImportPrimersDialogFiller::LocalFiles);
+            ImportPrimersDialogFiller::addFile(os, testDir + "_common_data/fasta/random_primers.fa");
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+    GTLogTracer lt;
+    GTUtilsDialog::waitForDialog(os, new ImportPrimersDialogFiller(os, new ImportFromMultifasta));
+    GTUtilsPrimerLibrary::clickButton(os, GTUtilsPrimerLibrary::Import);
+
+    //    4. Check log.
+    //    Expected state: the library contains four primers, log contains no errors.
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    CHECK_SET_ERR(!lt.hasError(), "There is error in the log");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5216) {
+    // 1. Connect to the public database
+    //GTUtilsSharedDatabaseDocument::connectToUgenePublicDatabase(os);
+    GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
+
+    GTLogTracer lt;
+    // 2. Type to the project filter field "acct" then "acctt"
+    GTUtilsProjectTreeView::filterProjectSequental(os, QStringList() << "acct" << "accttt", true);
+    GTGlobals::sleep(3500);
+    CHECK_SET_ERR(!lt.hasError(), "There is error in the log");
+    //GTUtilsProjectTreeView::filterProject(os, "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5227) {
+    GTUtilsPcr::clearPcrDir(os);
+
+    //1. Open "samples/Genbank/CVU55762.gb".
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "CVU55762.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Open the PCR OP.
+    GTWidget::click(os, GTWidget::findWidget(os, "OP_IN_SILICO_PCR"));
+
+    //3. Set next parameters:
+    // the first primer : TTCTGGATTCA
+    // the first primer mismatches : 15
+    // the second primer : CGGGTAG
+    // the second primer mismatches : 12
+    // 3' perfect match: 10
+    // Maximum product : 100 bp
+    GTUtilsPcr::setPrimer(os, U2Strand::Direct, "TTCTGGATTCA");
+    GTUtilsPcr::setPrimer(os, U2Strand::Complementary, "CGGGTAG");
+
+    GTUtilsPcr::setMismatches(os, U2Strand::Direct, 15);
+    GTUtilsPcr::setMismatches(os, U2Strand::Complementary, 12);
+
+    QSpinBox *perfectSpinBox = dynamic_cast<QSpinBox*>(GTWidget::findWidget(os, "perfectSpinBox"));
+    GTSpinBox::setValue(os, perfectSpinBox, 10, GTGlobals::UseKeyBoard);
+
+    QSpinBox *productSizeSpinBox = dynamic_cast<QSpinBox*>(GTWidget::findWidget(os, "productSizeSpinBox"));
+    GTSpinBox::setValue(os, productSizeSpinBox, 100, GTGlobals::UseKeyBoard);
+
+    //4. Find products
+    //Expected state: log shouldn't contain errors
+    GTLogTracer lt;
+    GTWidget::click(os, GTWidget::findWidget(os, "findProductButton"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    CHECK_SET_ERR(!lt.hasError(), "There is error in the log");
+}
+
+
+GUI_TEST_CLASS_DEFINITION(test_5246) {
+    //1. Open file human_t1.fa
+    GTFileDialog::openFile(os, dataDir + "samples/FASTA/human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Show ORFs
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Show ORFs"));
+    GTWidget::click(os, GTWidget::findWidget(os, "toggleAutoAnnotationsButton"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    QTreeWidget *widget = GTUtilsAnnotationsTreeView::getTreeWidget(os);
+    QList<QTreeWidgetItem*> treeItems = GTTreeWidget::getItems(widget->invisibleRootItem());
+    CHECK_SET_ERR(839 == treeItems.size(), "Unexpected annotation count");
+
+    //3. Change amino translation
+    GTWidget::click(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
+    GTWidget::click(os, GTWidget::findWidget(os, "AminoToolbarButton", GTWidget::findWidget(os, "ADV_single_sequence_widget_0")));
+    QMenu *menu = qobject_cast<QMenu *>(QApplication::activePopupWidget());
+    GTMenu::clickMenuItemByName(os, menu, QStringList() << "14. The Alternative Flatworm Mitochondrial Code");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //Expected state: orfs recalculated
+    treeItems = GTTreeWidget::getItems(widget->invisibleRootItem());
+    CHECK_SET_ERR(2023 == treeItems.size(), "Unexpected annotation count");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5249) {
+    // 1. Open file "_common_data/pdb/1atp.pdb"
+    // Expected state: no crash and no errors in the log
+    GTLogTracer l;
+
+    GTFileDialog::openFile(os, testDir + "_common_data/pdb/1atp.pdb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    CHECK_SET_ERR(!l.hasError(), "Error in the log");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5268) {
+//    1. Open "data/samples/CLUSTALW/COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+
+//    2. Create a custom color scheme for the alignment with aan ppropriate alphabet.
+    GTUtilsDialog::waitForDialog(os, new NewColorSchemeCreator(os, "test_5268", NewColorSchemeCreator::nucl));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+
+//    3. Open "Highlighting" options panel tab.
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
+
+//    4. Select the custom color scheme.
+    GTUtilsOptionPanelMsa::setColorScheme(os, "test_5268");
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Colors" << "Custom schemes" << "test_5268", PopupChecker::IsChecked));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+
+//    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",
+                  QString("An incorrect color scheme is set in option panel: expect '%1', got '%2'")
+                  .arg("test_5268").arg(opColorScheme));
+
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Colors" << "Custom schemes" << "test_5268", PopupChecker::IsChecked));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+
+    GTGlobals::sleep(500);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5278) {
+    //1. Open file PBR322.gb from samples
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank", "PBR322.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //2. Find next restriction sites "AaaI" and "AagI"
+    GTUtilsDialog::waitForDialog(os, new FindEnzymesDialogFiller(os, QStringList() << "AaaI" << "AagI"));
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Find restriction sites"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsNotifications::waitForNotification(os, false);
+    //3. Open report and be sure fragments sorted by length (longest first)
+    GTUtilsDialog::waitForDialog(os, new DigestSequenceDialogFiller(os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Cloning" << "Digest into fragments...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    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");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5295) {
+//    1. Open "_common_data/pdb/Helix.pdb".
+    GTFileDialog::openFile(os, testDir + "_common_data/pdb/Helix.pdb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: UGENE doesn't crash, the 3d structure is shown.
+    QWidget *biostructWidget = GTWidget::findWidget(os, "1-");
+    const QImage image1 = GTWidget::getImage(os, biostructWidget);
+    QSet<QRgb> colors;
+    for (int i = 0; i < image1.width(); i++) {
+        for (int j = 0; j < image1.height(); j++) {
+            colors << image1.pixel(i, j);
+        }
+    }
+    CHECK_SET_ERR(colors.size() > 1, "Biostruct was not drawn");
+
+//    2. Call a context menu, open "Render Style" submenu.
+//    Expected state: "Ball-and-Stick" renderer is selected.
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Render Style" << "Ball-and-Stick", PopupChecker::CheckOptions(PopupChecker::IsChecked)));
+    GTWidget::click(os, biostructWidget, Qt::RightButton);
+
+//    3. Select "Model" renderer. Select "Ball-and-Stick" again.
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Render Style" << "Model"));
+    GTWidget::click(os, biostructWidget, Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Render Style" << "Ball-and-Stick"));
+    GTWidget::click(os, biostructWidget, Qt::RightButton);
+
+//    Expected state: UGENE doesn't crash, the 3d structure is shown.
+    const QImage image2 = GTWidget::getImage(os, biostructWidget);
+    colors.clear();
+    for (int i = 0; i < image2.width(); i++) {
+        for (int j = 0; j < image2.height(); j++) {
+            colors << image2.pixel(i, j);
+        }
+    }
+    CHECK_SET_ERR(colors.size() > 1, "Biostruct was not drawn after renderer change");
+}
 
 } // 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 5673e6a..7b47cac 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
@@ -30,11 +30,34 @@ namespace GUITest_regression_scenarios {
 
 #undef GUI_TEST_SUITE
 #define GUI_TEST_SUITE "GUITest_regression_scenarios"
+
+GUI_TEST_CLASS_DECLARATION(test_5004)
 GUI_TEST_CLASS_DECLARATION(test_5012)
 GUI_TEST_CLASS_DECLARATION(test_5012_1)
 GUI_TEST_CLASS_DECLARATION(test_5012_2)
+GUI_TEST_CLASS_DECLARATION(test_5018)
+GUI_TEST_CLASS_DECLARATION(test_5027_1)
+GUI_TEST_CLASS_DECLARATION(test_5027_2)
 GUI_TEST_CLASS_DECLARATION(test_5029)
 GUI_TEST_CLASS_DECLARATION(test_5052)
+GUI_TEST_CLASS_DECLARATION(test_5079)
+GUI_TEST_CLASS_DECLARATION(test_5082)
+GUI_TEST_CLASS_DECLARATION(test_5090)
+
+GUI_TEST_CLASS_DECLARATION(test_5128)
+GUI_TEST_CLASS_DECLARATION(test_5137)
+GUI_TEST_CLASS_DECLARATION(test_5138_1)
+GUI_TEST_CLASS_DECLARATION(test_5138_2)
+GUI_TEST_CLASS_DECLARATION(test_5199)
+
+GUI_TEST_CLASS_DECLARATION(test_5208)
+GUI_TEST_CLASS_DECLARATION(test_5216)
+GUI_TEST_CLASS_DECLARATION(test_5246)
+GUI_TEST_CLASS_DECLARATION(test_5249)
+GUI_TEST_CLASS_DECLARATION(test_5227)
+GUI_TEST_CLASS_DECLARATION(test_5268)
+GUI_TEST_CLASS_DECLARATION(test_5278)
+GUI_TEST_CLASS_DECLARATION(test_5295)
 
 #undef GUI_TEST_SUITE
 
diff --git a/src/plugins/annotator/CMakeLists.txt b/src/plugins/annotator/CMakeLists.txt
new file mode 100644
index 0000000..11fc8f3
--- /dev/null
+++ b/src/plugins/annotator/CMakeLists.txt
@@ -0,0 +1,4 @@
+set(UGENE_PLUGIN_NAME annotator)
+
+include(../../Plugin.cmake)
+
diff --git a/src/plugins/annotator/annotator.pro b/src/plugins/annotator/annotator.pro
index 8e4c734..9af8ddc 100644
--- a/src/plugins/annotator/annotator.pro
+++ b/src/plugins/annotator/annotator.pro
@@ -10,8 +10,8 @@ HEADERS += src/AnnotatorPlugin.h \
            src/CustomPatternAnnotationTask.h \
            src/GeneByGeneReportTask.h \
            src/GeneByGeneReportWorker.h
-FORMS += src/ui/CustomAutoAnnotationDialog.ui \
-         src/ui/FindAnnotationCollocationsDialog.ui
+FORMS += src/CustomAutoAnnotationDialog.ui \
+         src/FindAnnotationCollocationsDialog.ui
 SOURCES += src/AnnotatorPlugin.cpp \
            src/AnnotatorTests.cpp \
            src/CollocationsDialogController.cpp \
diff --git a/src/plugins/annotator/src/CollocationsDialogController.cpp b/src/plugins/annotator/src/CollocationsDialogController.cpp
index 3c7a7d1..1bc240c 100644
--- a/src/plugins/annotator/src/CollocationsDialogController.cpp
+++ b/src/plugins/annotator/src/CollocationsDialogController.cpp
@@ -57,7 +57,7 @@ CollocationsDialogController::CollocationsDialogController(QStringList _names, A
     task = NULL;
     qSort(allNames);
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467720");
+    new HelpButton(this, buttonBox, "17470653");
     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 dddfb27..c11f408 100644
--- a/src/plugins/annotator/src/CollocationsDialogController.h
+++ b/src/plugins/annotator/src/CollocationsDialogController.h
@@ -24,7 +24,7 @@
 
 #include "CollocationsSearchAlgorithm.h"
 
-#include <ui/ui_FindAnnotationCollocationsDialog.h>
+#include <ui_FindAnnotationCollocationsDialog.h>
 #include <U2Core/Task.h>
 #include <U2Core/U2Region.h>
 #include <U2Core/AnnotationData.h>
diff --git a/src/plugins/annotator/src/CustomAutoAnnotationDialog.cpp b/src/plugins/annotator/src/CustomAutoAnnotationDialog.cpp
index 596c5be..3b1dc8a 100644
--- a/src/plugins/annotator/src/CustomAutoAnnotationDialog.cpp
+++ b/src/plugins/annotator/src/CustomAutoAnnotationDialog.cpp
@@ -43,7 +43,7 @@ CustomAutoAnnotationDialog::CustomAutoAnnotationDialog(ADVSequenceObjectContext*
  : QDialog(ctx->getAnnotatedDNAView()->getWidget()), seqCtx(ctx)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467799");
+    new HelpButton(this, buttonBox, "17470732");
     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 927fd37..2c09f2e 100644
--- a/src/plugins/annotator/src/CustomAutoAnnotationDialog.h
+++ b/src/plugins/annotator/src/CustomAutoAnnotationDialog.h
@@ -24,7 +24,7 @@
 
 
 
-#include <ui/ui_CustomAutoAnnotationDialog.h>
+#include <ui_CustomAutoAnnotationDialog.h>
 
 namespace U2 {
 
diff --git a/src/plugins/annotator/src/CustomAutoAnnotationDialog.ui b/src/plugins/annotator/src/CustomAutoAnnotationDialog.ui
new file mode 100644
index 0000000..7f73a20
--- /dev/null
+++ b/src/plugins/annotator/src/CustomAutoAnnotationDialog.ui
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>CustomAutoAnnotationDialog</class>
+ <widget class="QDialog" name="CustomAutoAnnotationDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>330</width>
+    <height>205</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Plasmid Auto Annotations</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Selected features</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QCheckBox" name="promotersBox">
+        <property name="text">
+         <string>Promoter</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QCheckBox" name="originBox">
+        <property name="text">
+         <string>Origin</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QCheckBox" name="terminatorBox">
+        <property name="text">
+         <string>Terminator</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QCheckBox" name="primerBox">
+        <property name="text">
+         <string>Primer</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QCheckBox" name="genesBox">
+        <property name="text">
+         <string>Gene</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QCheckBox" name="featureBox">
+        <property name="text">
+         <string>Other features</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QCheckBox" name="regulatoryBox">
+        <property name="text">
+         <string>Regulatory</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </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="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>CustomAutoAnnotationDialog</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>CustomAutoAnnotationDialog</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/annotator/src/ui/FindAnnotationCollocationsDialog.ui b/src/plugins/annotator/src/FindAnnotationCollocationsDialog.ui
similarity index 100%
rename from src/plugins/annotator/src/ui/FindAnnotationCollocationsDialog.ui
rename to src/plugins/annotator/src/FindAnnotationCollocationsDialog.ui
diff --git a/src/plugins/annotator/src/ui/CustomAutoAnnotationDialog.ui b/src/plugins/annotator/src/ui/CustomAutoAnnotationDialog.ui
deleted file mode 100644
index 0d44f02..0000000
--- a/src/plugins/annotator/src/ui/CustomAutoAnnotationDialog.ui
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>CustomAutoAnnotationDialog</class>
- <widget class="QDialog" name="CustomAutoAnnotationDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>330</width>
-    <height>205</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Plasmid Auto Annotations</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QGroupBox" name="groupBox">
-     <property name="title">
-      <string>Selected features</string>
-     </property>
-     <layout class="QGridLayout" name="gridLayout">
-      <item row="0" column="0">
-       <widget class="QCheckBox" name="promotersBox">
-        <property name="text">
-         <string>Promoter</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="QCheckBox" name="originBox">
-        <property name="text">
-         <string>Origin</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QCheckBox" name="terminatorBox">
-        <property name="text">
-         <string>Terminator</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="QCheckBox" name="primerBox">
-        <property name="text">
-         <string>Primer</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="0">
-       <widget class="QCheckBox" name="genesBox">
-        <property name="text">
-         <string>Gene</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1">
-       <widget class="QCheckBox" name="featureBox">
-        <property name="text">
-         <string>Other features</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0">
-       <widget class="QCheckBox" name="regulatoryBox">
-        <property name="text">
-         <string>Regulatory</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </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="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>CustomAutoAnnotationDialog</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>CustomAutoAnnotationDialog</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/annotator/transl/english.ts b/src/plugins/annotator/transl/english.ts
index f0279e6..b20dfd8 100644
--- a/src/plugins/annotator/transl/english.ts
+++ b/src/plugins/annotator/transl/english.ts
@@ -4,47 +4,47 @@
 <context>
     <name>CustomAutoAnnotationDialog</name>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="14"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="14"/>
         <source>Plasmid Auto Annotations</source>
         <translation>Plasmid Auto Annotations</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="20"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="20"/>
         <source>Selected features</source>
         <translation>Selected features</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="26"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="26"/>
         <source>Promoter</source>
         <translation>Promoter</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="33"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="33"/>
         <source>Origin</source>
         <translation>Origin</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="40"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="40"/>
         <source>Terminator</source>
         <translation>Terminator</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="47"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="47"/>
         <source>Primer</source>
         <translation>Primer</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="54"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="54"/>
         <source>Gene</source>
         <translation>Gene</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="61"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="61"/>
         <source>Other features</source>
         <translation>Other features</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="68"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="68"/>
         <source>Regulatory</source>
         <translation>Regulatory</translation>
     </message>
@@ -52,57 +52,57 @@
 <context>
     <name>FindAnnotationCollocationsDialog</name>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="58"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="58"/>
         <source>1</source>
         <translation>1</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="63"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="63"/>
         <source>2</source>
         <translation>2</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="96"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="96"/>
         <source>Region size:</source>
         <translation>Region size:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="20"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="20"/>
         <source>Find Groups of Annotated Regions</source>
         <translation>Find Groups of Annotated Regions</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="158"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="158"/>
         <source>Save regions as annotations</source>
         <translation>Save regions as annotations</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="165"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="165"/>
         <source>Clear results</source>
         <translation>Clear results</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="176"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="176"/>
         <source>Result strand</source>
         <translation>Result strand</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="182"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="182"/>
         <source>Direct</source>
         <translation>Direct</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="189"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="189"/>
         <source>Complement</source>
         <translation>Complement</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="196"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="196"/>
         <source>Both</source>
         <translation>Both</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="219"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="219"/>
         <source>Annotation must fit into region</source>
         <translation>Annotation must fit into region</translation>
     </message>
diff --git a/src/plugins/annotator/transl/russian.ts b/src/plugins/annotator/transl/russian.ts
index 3ae7a17..e2d77ca 100644
--- a/src/plugins/annotator/transl/russian.ts
+++ b/src/plugins/annotator/transl/russian.ts
@@ -4,47 +4,47 @@
 <context>
     <name>CustomAutoAnnotationDialog</name>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="14"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="14"/>
         <source>Plasmid Auto Annotations</source>
         <translation>Поиск плазмид</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="20"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="20"/>
         <source>Selected features</source>
         <translation>Выбранные аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="26"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="26"/>
         <source>Promoter</source>
         <translation>Promoter</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="33"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="33"/>
         <source>Origin</source>
         <translation>Origin</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="40"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="40"/>
         <source>Terminator</source>
         <translation>Terminator</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="47"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="47"/>
         <source>Primer</source>
         <translation>Primer</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="54"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="54"/>
         <source>Gene</source>
         <translation>Gene</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="61"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="61"/>
         <source>Other features</source>
         <translation>Другие аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ui/CustomAutoAnnotationDialog.ui" line="68"/>
+        <location filename="../src/CustomAutoAnnotationDialog.ui" line="68"/>
         <source>Regulatory</source>
         <translation>Regulatory</translation>
     </message>
@@ -52,57 +52,57 @@
 <context>
     <name>FindAnnotationCollocationsDialog</name>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="58"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="58"/>
         <source>1</source>
         <translation>1</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="63"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="63"/>
         <source>2</source>
         <translation>2</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="96"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="96"/>
         <source>Region size:</source>
         <translation>Размер региона:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="20"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="20"/>
         <source>Find Groups of Annotated Regions</source>
         <translation>Поиск сгруппированных аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="158"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="158"/>
         <source>Save regions as annotations</source>
         <translation>Сохранить регионы как аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="165"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="165"/>
         <source>Clear results</source>
         <translation>Сбросить результаты</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="176"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="176"/>
         <source>Result strand</source>
         <translation>Расположение результатов</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="182"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="182"/>
         <source>Direct</source>
         <translation>Прямая</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="189"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="189"/>
         <source>Complement</source>
         <translation>Комплементарная</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="196"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="196"/>
         <source>Both</source>
         <translation>Обе</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindAnnotationCollocationsDialog.ui" line="219"/>
+        <location filename="../src/FindAnnotationCollocationsDialog.ui" line="219"/>
         <source>Annotation must fit into region</source>
         <translation>Аннотация должна содержаться в регионе</translation>
     </message>
diff --git a/src/plugins/api_tests/CMakeLists.txt b/src/plugins/api_tests/CMakeLists.txt
new file mode 100644
index 0000000..5b779e6
--- /dev/null
+++ b/src/plugins/api_tests/CMakeLists.txt
@@ -0,0 +1,8 @@
+set(UGENE_PLUGIN_NAME api_tests)
+
+include_directories(../../libs_3rdparty/samtools/src)
+include_directories(../../libs_3rdparty/samtools/src/samtools)
+
+include(../../Plugin.cmake)
+
+
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 7f2c11f..a14e274 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
@@ -708,14 +708,10 @@ IMPLEMENT_TEST( CInterfaceManualTests, chip_seq ) {
     error = setSchemeElementAttribute( scheme, conductGoId, L"output-dir", L"tools_output" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, writeAnnotations, L"document-format", L"bed" );
-    CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, writeAnnotations, L"url-out", L"genes.bed" );
+    error = setSchemeElementAttribute( scheme, writeAnnotations, L"url-out", L"genes.gb" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, writeAnnotations1, L"document-format", L"bed" );
-    CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, writeAnnotations1, L"url-out", L"peaks.bed" );
+    error = setSchemeElementAttribute( scheme, writeAnnotations1, L"url-out", L"peaks.gb" );
     CHECK_U2_ERROR( error );
 
     error = addFlowToScheme( scheme, readAnnotations, L"out-url", macsId, L"in-data" );
@@ -755,7 +751,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, chip_seq ) {
     error = addSchemeActorsBinding( scheme, macsId, L"peak-summits", peak2GeneId,
         L"in-data._treat-ann" );
     CHECK_U2_ERROR( error );
-    error = addSchemeActorsBinding( scheme, peak2GeneId, L"gene-annotation", conductGoId,
+    error = addSchemeActorsBinding( scheme, peak2GeneId, L"gene-annotation-url", conductGoId,
         L"in-data.in-ann" );
     CHECK_U2_ERROR( error );
     error = addSchemeActorsBinding( scheme, peak2GeneId, L"gene-annotation", writeAnnotations,
@@ -830,14 +826,10 @@ IMPLEMENT_TEST( CInterfaceManualTests, chip_seq_with_control ) {
     error = setSchemeElementAttribute( scheme, conductGoId, L"output-dir", L"tools_output" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, writeAnnotations, L"document-format", L"bed" );
-    CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, writeAnnotations, L"url-out", L"genes.bed" );
+    error = setSchemeElementAttribute( scheme, writeAnnotations, L"url-out", L"genes.gb" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, writeAnnotations1, L"document-format", L"bed" );
-    CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, writeAnnotations1, L"url-out", L"peaks.bed" );
+    error = setSchemeElementAttribute( scheme, writeAnnotations1, L"url-out", L"peaks.gb" );
     CHECK_U2_ERROR( error );
 
     error = addFlowToScheme( scheme, readAnnotations1, L"out-url", multiplexer, L"input-data-1" );
@@ -884,7 +876,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, chip_seq_with_control ) {
     error = addSchemeActorsBinding( scheme, macsId, L"peak-summits", peak2GeneId,
         L"in-data._treat-ann" );
     CHECK_U2_ERROR( error );
-    error = addSchemeActorsBinding( scheme, peak2GeneId, L"gene-annotation", conductGoId,
+    error = addSchemeActorsBinding( scheme, peak2GeneId, L"gene-annotation-url", conductGoId,
         L"in-data.in-ann" );
     CHECK_U2_ERROR( error );
     error = addSchemeActorsBinding( scheme, peak2GeneId, L"gene-annotation", writeAnnotations,
diff --git a/src/plugins/biostruct3d_view/CMakeLists.txt b/src/plugins/biostruct3d_view/CMakeLists.txt
new file mode 100644
index 0000000..98cf263
--- /dev/null
+++ b/src/plugins/biostruct3d_view/CMakeLists.txt
@@ -0,0 +1,5 @@
+set(UGENE_PLUGIN_NAME biostruct3d_view)
+
+file(GLOB SRCS src/*.cpp src/*.c src/*.h src/gl2ps/*)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/biostruct3d_view/biostruct3d_view.pro b/src/plugins/biostruct3d_view/biostruct3d_view.pro
index a667a66..9c42693 100644
--- a/src/plugins/biostruct3d_view/biostruct3d_view.pro
+++ b/src/plugins/biostruct3d_view/biostruct3d_view.pro
@@ -85,10 +85,10 @@ SOURCES += src/AnaglyphRenderer.cpp \
            src/gl2ps/gl2ps.cpp
 }
 
-FORMS += src/ui/BioStruct3DSubsetEditor.ui \
-         src/ui/SelectModelsDialog.ui \
-         src/ui/SettingsDialog.ui \
-         src/ui/StructuralAlignmentDialog.ui
+FORMS += src/BioStruct3DSubsetEditor.ui \
+         src/SelectModelsDialog.ui \
+         src/SettingsDialog.ui \
+         src/StructuralAlignmentDialog.ui
 
 RESOURCES += biostruct3d_view.qrc
 
diff --git a/src/plugins/biostruct3d_view/src/AnaglyphRenderer.cpp b/src/plugins/biostruct3d_view/src/AnaglyphRenderer.cpp
index d43000a..3f2d367 100644
--- a/src/plugins/biostruct3d_view/src/AnaglyphRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/AnaglyphRenderer.cpp
@@ -19,8 +19,6 @@
  * MA 02110-1301, USA.
  */
 
-#include <QOpenGLFunctions_2_0>
-
 #include "AnaglyphRenderer.h"
 
 #include "BioStruct3DGLWidget.h"
@@ -68,18 +66,17 @@ void AnaglyphRenderer::resize(int _width, int _height) {
 }
 
 void AnaglyphRenderer::draw() {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     CHECK_GL_ERROR
 
     GLFrame *glFrame = renderer->getGLFrame();
     float eyesShift = 5.0 * settings.eyesShift * glFrame->getCameraPosition().z / 200.0;
 
-    f->glMatrixMode(GL_MODELVIEW);
+    glMatrixMode(GL_MODELVIEW);
 
     // Prepare anaglyph textures
-    f->glPushMatrix();
+    glPushMatrix();
         //glTranslatef(eyesShift, 0, 0);
-        f->glLoadIdentity();
+        glLoadIdentity();
         gluLookAt(eyesShift, 0.0, glFrame->getCameraPosition().z, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
 
         // at this moment buffer must be clean glClear omitted as a slow operation
@@ -88,90 +85,88 @@ void AnaglyphRenderer::draw() {
         // isolate errors from main scene renderer
         CHECK_GL_ERROR
         renderer->draw();
-        f->glGetError();
+        glGetError();
 
-        f->glBindTexture(GL_TEXTURE_2D, anaglyphRenderTextureRight);
-        f->glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, width, height, 0);
-    f->glPopMatrix();
+        glBindTexture(GL_TEXTURE_2D, anaglyphRenderTextureRight);
+        glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, width, height, 0);
+    glPopMatrix();
 
-    f->glPushMatrix();
+    glPushMatrix();
         //glTranslatef(-eyesShift, 0, 0);
-        f->glLoadIdentity();
+        glLoadIdentity();
         gluLookAt(-eyesShift, 0.0, glFrame->getCameraPosition().z, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
 
-        f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
         // isolate errors from main scene renderer
         CHECK_GL_ERROR
         renderer->draw();
-        f->glGetError();
+        glGetError();
 
-        f->glBindTexture(GL_TEXTURE_2D, anaglyphRenderTextureLeft);
-        f->glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, width, height, 0);
-    f->glPopMatrix();
+        glBindTexture(GL_TEXTURE_2D, anaglyphRenderTextureLeft);
+        glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, width, height, 0);
+    glPopMatrix();
 
     // Draw anaglyph textures in ortho projection
-    f->glMatrixMode(GL_MODELVIEW);
-    f->glPushMatrix();
-    f->glLoadIdentity();
+    glMatrixMode(GL_MODELVIEW);
+    glPushMatrix();
+    glLoadIdentity();
 
-    f->glMatrixMode(GL_PROJECTION);
-    f->glPushMatrix();
+    glMatrixMode(GL_PROJECTION);
+    glPushMatrix();
 
         setOrthoProjection();
 
-        f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
         drawTexturesAnaglyph();
 
-    f->glMatrixMode(GL_PROJECTION);
-    f->glPopMatrix();
+    glMatrixMode(GL_PROJECTION);
+    glPopMatrix();
 
-    f->glMatrixMode(GL_MODELVIEW);
-    f->glPopMatrix();
+    glMatrixMode(GL_MODELVIEW);
+    glPopMatrix();
 
     CHECK_GL_ERROR
 }
 
 void AnaglyphRenderer::setOrthoProjection() {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     CHECK_GL_ERROR
 
-    f->glMatrixMode(GL_PROJECTION);
-    f->glLoadIdentity();
-    f->glOrtho(0, 1, 1, 0, -1, 1);
-    f->glMatrixMode(GL_MODELVIEW);
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    glOrtho(0, 1, 1, 0, -1, 1);
+    glMatrixMode(GL_MODELVIEW);
 
     CHECK_GL_ERROR
 }
 
 void AnaglyphRenderer::createEmptyTextures() {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     CHECK_GL_ERROR
 
     if(anaglyphRenderTextureLeft != 0) {
-        f->glDeleteTextures(1, &anaglyphRenderTextureLeft);
+        glDeleteTextures(1, &anaglyphRenderTextureLeft);
     }
     if(anaglyphRenderTextureRight != 0) {
-        f->glDeleteTextures(1, &anaglyphRenderTextureRight);
+        glDeleteTextures(1, &anaglyphRenderTextureRight);
     }
     if(tempAnaglyphRenderTexture != 0) {
-        f->glDeleteTextures(1, &tempAnaglyphRenderTexture);
+        glDeleteTextures(1, &tempAnaglyphRenderTexture);
     }
 
     // TODO : check for NPOT sizes
     GLuint texwidth = width, texheight = height;
 
     GLuint txtnumbers[3] = {0};
-    f->glGenTextures(3, txtnumbers);
+    glGenTextures(3, txtnumbers);
 
     char *txtdata = new char[texwidth * texheight * 4];
 
     for (GLuint *txtnumber = txtnumbers; txtnumber < txtnumbers + 3; ++txtnumber) {
-        f->glBindTexture(GL_TEXTURE_2D, *txtnumber);
-        f->glTexImage2D(GL_TEXTURE_2D, 0, 4, texwidth, texheight, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) txtdata);
+        glBindTexture(GL_TEXTURE_2D, *txtnumber);
+        glTexImage2D(GL_TEXTURE_2D, 0, 4, texwidth, texheight, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*) txtdata);
 
-        f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR);
-        f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR);
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
     }
 
     delete[] txtdata;
@@ -184,13 +179,12 @@ void AnaglyphRenderer::createEmptyTextures() {
 }
 
 void AnaglyphRenderer::drawTexturesAnaglyph() {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     CHECK_GL_ERROR
 
     drawTexture(anaglyphRenderTextureLeft, settings.rightEyeColor.red(), settings.rightEyeColor.green(), settings.rightEyeColor.blue(), 0.5f, false); // colored left image
 
-    f->glBindTexture(GL_TEXTURE_2D, tempAnaglyphRenderTexture);
-    f->glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, width, height, 0);    // Copy Our ViewPort To The Blur Texture (From 0,0 To 128,128... No Border)
+    glBindTexture(GL_TEXTURE_2D, tempAnaglyphRenderTexture);
+    glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, width, height, 0);    // Copy Our ViewPort To The Blur Texture (From 0,0 To 128,128... No Border)
 
     drawTexture(anaglyphRenderTextureRight, settings.leftEyeColor.red(), settings.leftEyeColor.green(), settings.leftEyeColor.blue(), 0.5f, false); // colored right image
     drawTexture(tempAnaglyphRenderTexture, 255, 255, 255, 1.0f, true);
@@ -200,39 +194,38 @@ void AnaglyphRenderer::drawTexturesAnaglyph() {
 
 void AnaglyphRenderer::drawTexture(GLuint anaglyphRenderTexture, int red, int green, int blue, float alpha, bool alphaOnly)
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     CHECK_GL_ERROR
 
-    f->glEnable(GL_TEXTURE_2D);
+    glEnable(GL_TEXTURE_2D);
 
     if (alphaOnly){
         // the second image is this, it has needed alpha color
-        f->glBlendFunc(GL_DST_ALPHA, GL_DST_ALPHA);
+        glBlendFunc(GL_DST_ALPHA, GL_DST_ALPHA);
     }
     else {
-        f->glBlendFunc(GL_ONE, GL_ONE);
+        glBlendFunc(GL_ONE, GL_ONE);
     }
 
-    f->glBindTexture(GL_TEXTURE_2D, anaglyphRenderTexture);
+    glBindTexture(GL_TEXTURE_2D, anaglyphRenderTexture);
 
-    f->glColor4ub(red, green, blue, (GLubyte) (alpha * 255.0));
-    f->glBegin(GL_QUADS);
-        f->glTexCoord2f(0, 1);
-        f->glVertex2f(0,0);
+    glColor4ub(red, green, blue, (GLubyte) (alpha * 255.0));
+    glBegin(GL_QUADS);
+        glTexCoord2f(0, 1);
+        glVertex2f(0,0);
 
-        f->glTexCoord2f(0, 0);
-        f->glVertex2f(0, 1);
+        glTexCoord2f(0, 0);
+        glVertex2f(0, 1);
 
-        f->glTexCoord2f(1, 0);
-        f->glVertex2f(1, 1);
+        glTexCoord2f(1, 0);
+        glVertex2f(1, 1);
 
-        f->glTexCoord2f(1, 1);
-        f->glVertex2f(1, 0);
-    f->glEnd();
+        glTexCoord2f(1, 1);
+        glVertex2f(1, 0);
+    glEnd();
 
     // Unbind the blur texture
-    f->glBindTexture(GL_TEXTURE_2D, 0);
-    f->glDisable(GL_TEXTURE_2D);
+    glBindTexture(GL_TEXTURE_2D, 0);
+    glDisable(GL_TEXTURE_2D);
 
     CHECK_GL_ERROR
 }
diff --git a/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.cpp b/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.cpp
index 2819bbc..bfc97b1 100644
--- a/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.cpp
@@ -41,30 +41,18 @@ QMutex BallAndStickGLRenderer::mutex;
 #define MAX_OPEN_VIEWS_NUMBER 8086
 
 BallAndStickGLRenderer::BallAndStickGLRenderer(const BioStruct3D& struc, const BioStruct3DColorScheme* s, const QList<int> &shownModels, const BioStruct3DRendererSettings *settings)
-    : BioStruct3DGLRenderer(struc,s,shownModels,settings)
+    : BioStruct3DGLRenderer(struc,s,shownModels,settings),
+      inited(false)
 {
-    {
-        QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
-        f->initializeOpenGLFunctions();
-        QMutexLocker lock(&mutex);
-        if (dlIndexStorage.size() == 0) {
-            dl = f->glGenLists(MAX_OPEN_VIEWS_NUMBER);
-            for (GLuint idx = dl+1; idx <= dl + MAX_OPEN_VIEWS_NUMBER; ++idx) {
-                dlIndexStorage.push_back(idx);
-            }
-        } else {
-            dl = dlIndexStorage.takeFirst();
-        }
-
-    }
 
-    create();
 }
 
 BallAndStickGLRenderer::~BallAndStickGLRenderer() {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
-    if (f->glIsList(dl)) {
-        f->glDeleteLists(dl, 1);
+    if (!inited) {
+        return;
+    }
+    if (glIsList(dl)) {
+        glDeleteLists(dl, 1);
     }
 
     QMutexLocker lock(&mutex);
@@ -73,38 +61,60 @@ BallAndStickGLRenderer::~BallAndStickGLRenderer() {
 }
 
 void BallAndStickGLRenderer::create() {
+    init();
     createDisplayList();
 }
 
 void BallAndStickGLRenderer::drawBioStruct3D() {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
-    f->glCallList(dl);
+    init();
+    glCallList(dl);
     CHECK_GL_ERROR;
 }
 
 void BallAndStickGLRenderer::update() {
+    init();
     createDisplayList();
 }
 
 void BallAndStickGLRenderer::updateColorScheme() {
+    init();
     createDisplayList();
 }
 
 void BallAndStickGLRenderer::updateShownModels() {
+    init();
     createDisplayList();
 }
 
 void BallAndStickGLRenderer::updateSettings() {
+    init();
     createDisplayList();
 }
 
+void BallAndStickGLRenderer::init() {
+    if (inited) {
+        return;
+    }
+
+    QMutexLocker lock(&mutex);
+    if (dlIndexStorage.size() == 0) {
+        dl = glGenLists(MAX_OPEN_VIEWS_NUMBER);
+        for (GLuint idx = dl+1; idx <= dl + MAX_OPEN_VIEWS_NUMBER; ++idx) {
+            dlIndexStorage.push_back(idx);
+        }
+    } else {
+        dl = dlIndexStorage.takeFirst();
+    }
+    inited = true;
+    create();
+}
+
 static void drawAtomsBonds(const Color4f &viewAtomColor, float renderDetailLevel, const Molecule3DModel &model, const BioStruct3DColorScheme* colorScheme)
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     GLUquadricObj *pObj = gluNewQuadric();
     gluQuadricNormals(pObj, GLU_SMOOTH);
 
-    f->glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, viewAtomColor.getConstData());
+    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, viewAtomColor.getConstData());
 
     static float bondThickness = 0.15f;
     float radius = 0.35f;
@@ -116,9 +126,9 @@ static void drawAtomsBonds(const Color4f &viewAtomColor, float renderDetailLevel
         {
             Vector3D pos = atom->coord3d;
             //glPushMatrix();
-            f->glTranslatef(pos.x, pos.y, pos.z);
+            glTranslatef(pos.x, pos.y, pos.z);
             gluSphere(pObj, radius, numSlices, numSlices);
-            f->glTranslatef(-pos.x, -pos.y, -pos.z);
+            glTranslatef(-pos.x, -pos.y, -pos.z);
             //glPopMatrix();
         }
     }
@@ -157,16 +167,15 @@ static void drawAtomsBonds(const Color4f &viewAtomColor, float renderDetailLevel
 
 void BallAndStickGLRenderer::createDisplayList()
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
-    if (f->glIsList(dl)) {
-        f->glDeleteLists(dl, 1);
+    if (glIsList(dl)) {
+        glDeleteLists(dl, 1);
     }
 
     float renderDetailLevel = settings->detailLevel;
 
     QList<Color4f> colors;
 
-    f->glNewList(dl, GL_COMPILE);
+    glNewList(dl, GL_COMPILE);
 
     foreach (const SharedMolecule mol, bioStruct.moleculeMap) {
         foreach (int index, shownModels) {
@@ -190,7 +199,7 @@ void BallAndStickGLRenderer::createDisplayList()
         }
     }
 
-    f->glEndList();
+    glEndList();
 
     CHECK_GL_ERROR;
 }
diff --git a/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.h b/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.h
index 57c1ebe..cf287db 100644
--- a/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.h
+++ b/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.h
@@ -43,9 +43,11 @@ public:
     virtual void updateSettings();
 
 private:
+    void init();
     void createDisplayList();
 
 private:
+    bool inited;
     GLuint dl;
     static QList<GLuint> dlIndexStorage;
     static QMutex mutex;
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.cpp b/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.cpp
index 81f5934..07ff2a6 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.cpp
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.cpp
@@ -25,7 +25,6 @@
 #include <QImageWriter>
 #include <QMessageBox>
 #include <QMouseEvent>
-#include <QOpenGLFunctions_2_0>
 #include <QTime>
 
 #include <U2Algorithm/MolecularSurfaceFactoryRegistry.h>
@@ -74,6 +73,11 @@ namespace U2 {
 
 int BioStruct3DGLWidget::widgetCount = 0;
 
+void BioStruct3DGLWidget::tryGL() {
+    volatile QOpenGLWidget wgt;
+    Q_UNUSED(wgt);
+}
+
 static QColor DEFAULT_BACKGROUND_COLOR = Qt::black;
 static QColor DEFAULT_SELECTION_COLOR = Qt::yellow;
 
@@ -189,23 +193,21 @@ Vector3D BioStruct3DGLWidget::getSceneCenter() const {
 }
 
 void BioStruct3DGLWidget::initializeGL() {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
-    f->initializeOpenGLFunctions();
     setLightPosition(Vector3D(0, 0.0, 1.0));
     GLfloat light_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0 };
     GLfloat light_specular[] = { 0.6f, 0.6f, 0.6f, 1.0 };
     GLfloat mat_specular[] = { 0.6f, 0.6f, 0.6f, 1.0 };
     GLfloat mat_shininess[] = { 90.0 };
 
-    f->glClearColor(backgroundColor.redF(), backgroundColor.greenF(), backgroundColor.blueF(), backgroundColor.alphaF());
-    f->glShadeModel (GL_SMOOTH);
-    f->glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
-    f->glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
-    f->glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
-    f->glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
-    f->glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
-    f->glEnable(GL_BLEND);                                         // Enable Blending
-    f->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+    glClearColor(backgroundColor.redF(), backgroundColor.greenF(), backgroundColor.blueF(), backgroundColor.alphaF());
+    glShadeModel (GL_SMOOTH);
+    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
+    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
+    glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
+    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
+    glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
+    glEnable(GL_BLEND);                                         // Enable Blending
+    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
     updateAllRenderers();
 
@@ -229,7 +231,6 @@ void BioStruct3DGLWidget::resizeGL(int width, int height) {
 }
 
 void BioStruct3DGLWidget::paintGL() {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     if (!isVisible()) {
         return;
     }
@@ -238,10 +239,10 @@ void BioStruct3DGLWidget::paintGL() {
 
         // Clear buffers, setup modelview matrix
         // Scene render unable to do this since it used by anaglyph renderer
-        f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
-        f->glMatrixMode(GL_MODELVIEW);
-        f->glLoadIdentity();
+        glMatrixMode(GL_MODELVIEW);
+        glLoadIdentity();
 
         gluLookAt(0.0, 0.0, glFrame->getCameraPosition().z, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
 
@@ -260,48 +261,46 @@ void BioStruct3DGLWidget::paintGL() {
 }
 
 void BioStruct3DGLWidget::draw() {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
-
-    f->glEnable(GL_DEPTH_TEST);
-    f->glEnable(GL_LIGHTING);
-    f->glEnable(GL_LIGHT0);
+    glEnable(GL_DEPTH_TEST);
+    glEnable(GL_LIGHTING);
+    glEnable(GL_LIGHT0);
 
-    f->glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
     Vector3D rotCenter = getSceneCenter();
 
-    f->glTranslatef(glFrame->getCameraPosition().x, glFrame->getCameraPosition().y, 0);
+    glTranslatef(glFrame->getCameraPosition().x, glFrame->getCameraPosition().y, 0);
 
-    f->glMultMatrixf(glFrame->getRotationMatrix());
-    f->glTranslatef(-rotCenter.x ,-rotCenter.y, -rotCenter.z);
+    glMultMatrixf(glFrame->getRotationMatrix());
+    glTranslatef(-rotCenter.x ,-rotCenter.y, -rotCenter.z);
 
     foreach (const BioStruct3DRendererContext &ctx, contexts) {
-        f->glPushMatrix();
+        glPushMatrix();
 
         Matrix44 colmt = ctx.biostruct->getTransform();
         colmt.transpose();
-        f->glMultMatrixf(colmt.data());
+        glMultMatrixf(colmt.data());
 
         ctx.renderer->drawBioStruct3D();
-        f->glPopMatrix();
+        glPopMatrix();
     }
 
     if(!molSurface.isNull()) {
-        f->glEnable(GL_CULL_FACE);
+        glEnable(GL_CULL_FACE);
 
-        f->glCullFace(GL_FRONT);
+        glCullFace(GL_FRONT);
         surfaceRenderer->drawSurface(*molSurface);
 
-        f->glCullFace(GL_BACK);
+        glCullFace(GL_BACK);
         surfaceRenderer->drawSurface(*molSurface);
 
-        f->glDisable(GL_CULL_FACE);
+        glDisable(GL_CULL_FACE);
         CHECK_GL_ERROR;
     }
 
-    f->glDisable(GL_LIGHTING);
-    f->glDisable(GL_LIGHT0);
-    f->glDisable(GL_DEPTH_TEST);
+    glDisable(GL_LIGHTING);
+    glDisable(GL_LIGHT0);
+    glDisable(GL_DEPTH_TEST);
 }
 
 Vector3D BioStruct3DGLWidget::getTrackballMapping(int x, int y)
@@ -474,9 +473,8 @@ void BioStruct3DGLWidget::updateAllRenderers() {
 
 void BioStruct3DGLWidget::setBackgroundColor(QColor backgroundColor)
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     this->backgroundColor=backgroundColor;
-    f->glClearColor(backgroundColor.redF(), backgroundColor.greenF(), backgroundColor.blueF(), backgroundColor.alphaF());
+    glClearColor(backgroundColor.redF(), backgroundColor.greenF(), backgroundColor.blueF(), backgroundColor.alphaF());
 }
 
 void BioStruct3DGLWidget::zoom( float delta )
@@ -570,7 +568,6 @@ void BioStruct3DGLWidget::sl_selectModels() {
 
 void BioStruct3DGLWidget::writeImage2DToFile( int format, int options, int nbcol, const char *fileName )
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     FILE *fp = NULL;
     const char* FOPEN_ARGS = "wb";
     const QByteArray title(fileName);
@@ -585,7 +582,7 @@ void BioStruct3DGLWidget::writeImage2DToFile( int format, int options, int nbcol
         return;
     }
 
-    f->glGetIntegerv(GL_VIEWPORT,viewport);
+    glGetIntegerv(GL_VIEWPORT,viewport);
 
     if (format == GL2PS_EPS) {
         // hack -> make widget aspect ratio 1:1
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.h b/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.h
index 3a9fbf5..fedc2f5 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.h
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.h
@@ -91,6 +91,9 @@ class BioStruct3DGLWidget : public QOpenGLWidget
 {
     Q_OBJECT
     static int widgetCount;
+public:
+    // Used in PluginChecker to detect whether the GL is available
+    static void tryGL();
 
 public:
     /*!
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.h b/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.h
index 068e784..9050906 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.h
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.h
@@ -32,7 +32,7 @@ class U2Region;
 class BioStruct3DObject;
 class BioStruct3DReference;
 
-class BioStruct3DSubsetEditor : public QWidget, public Ui::BioStruct3DSubsetEditor
+class BioStruct3DSubsetEditor : public QWidget, public Ui_BioStruct3DSubsetEditor
 {
     Q_OBJECT
 
diff --git a/src/plugins/biostruct3d_view/src/ui/BioStruct3DSubsetEditor.ui b/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.ui
similarity index 100%
rename from src/plugins/biostruct3d_view/src/ui/BioStruct3DSubsetEditor.ui
rename to src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.ui
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.cpp b/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.cpp
index 90864c3..b93402d 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.cpp
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.cpp
@@ -83,6 +83,17 @@ extern "C" Q_DECL_EXPORT Plugin* U2_PLUGIN_INIT_FUNC() {
     return NULL;
 }
 
+extern "C" Q_DECL_EXPORT bool U2_PLUGIN_VERIFY_FUNC() {
+    BioStruct3DGLWidget::tryGL();
+    return true;
+}
+
+extern "C" Q_DECL_EXPORT QString * U2_PLUGIN_FAIL_MASSAGE_FUNC() {
+    return new QString(BioStruct3DViewPlugin::tr("Unfortunately, your system does not have OpenGL Support.\n"
+                                                 "The 3D Structure Viewer is not available.\n"
+                                                 "You may try to upgrade your system by updating the video card driver."));
+}
+
 BioStruct3DViewPlugin::BioStruct3DViewPlugin()
     : Plugin(tr("3D Structure Viewer"), tr("Visualizes 3D structures of biological molecules."))
 {
diff --git a/src/plugins/biostruct3d_view/src/GLFrameManager.cpp b/src/plugins/biostruct3d_view/src/GLFrameManager.cpp
index 3ffa0d0..0715dd4 100644
--- a/src/plugins/biostruct3d_view/src/GLFrameManager.cpp
+++ b/src/plugins/biostruct3d_view/src/GLFrameManager.cpp
@@ -19,7 +19,6 @@
  * MA 02110-1301, USA.
  */
 
-#include <QOpenGLFunctions_2_0>
 #include <QOpenGLWidget>
 
 #include <U2Core/Vector3D.h>
@@ -92,12 +91,11 @@ void GLFrame::setCameraClip(float clipNear, float clipFar) {
 
 void GLFrame::rotateCamera(const Vector3D& rotAxis, float rotAngle )
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
-    f->glMatrixMode(GL_MODELVIEW);
-    f->glLoadIdentity();
-    f->glRotatef(rotAngle, rotAxis.x, rotAxis.y, rotAxis.z );
-    f->glMultMatrixf(rotMatrix.data());
-    f->glGetFloatv( GL_MODELVIEW_MATRIX, rotMatrix.data());
+    glMatrixMode(GL_MODELVIEW);
+    glLoadIdentity();
+    glRotatef(rotAngle, rotAxis.x, rotAxis.y, rotAxis.z );
+    glMultMatrixf(rotMatrix.data());
+    glGetFloatv( GL_MODELVIEW_MATRIX, rotMatrix.data());
 }
 
 #define ZOOM_FACTOR_ID "ZOOM_FACTOR"
@@ -129,10 +127,9 @@ void GLFrame::writeStateToMap( QVariantMap& state )
 
 void GLFrame::updateViewPort( int width, int height )
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
-    f->glViewport(0, 0, width, height);
-    f->glMatrixMode(GL_PROJECTION);
-    f->glLoadIdentity();
+    glViewport(0, 0, width, height);
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
     // Set view settings
     GLfloat aspect = GLfloat(width) / height;
     gluPerspective(zoomFactor, aspect, cameraClipNear, cameraClipFar);
diff --git a/src/plugins/biostruct3d_view/src/GraphicUtils.cpp b/src/plugins/biostruct3d_view/src/GraphicUtils.cpp
index e6a8a04..c347653 100644
--- a/src/plugins/biostruct3d_view/src/GraphicUtils.cpp
+++ b/src/plugins/biostruct3d_view/src/GraphicUtils.cpp
@@ -90,7 +90,6 @@ bool Color4f::operator== (const Color4f &a) const
 
 void glDrawCylinder(GLUquadric* pObj, const Vector3D& p1, const Vector3D& p2, double thickness, float renderDetailLevel)
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     int numSlices = (8 * renderDetailLevel);
     int numStacks = 1;
     static Vector3D zAxis(0.0, 0.0, 1.0);
@@ -100,11 +99,11 @@ void glDrawCylinder(GLUquadric* pObj, const Vector3D& p1, const Vector3D& p2, do
     float rotAngle = Rad2Deg* acos( vec.z / length );
     Vector3D rotAxis = vector_cross(zAxis, vec);
 
-    f->glPushMatrix();
-    f->glTranslatef(p1.x, p1.y, p1.z);
-    f->glRotatef(rotAngle, rotAxis.x, rotAxis.y, rotAxis.z);
+    glPushMatrix();
+    glTranslatef(p1.x, p1.y, p1.z);
+    glRotatef(rotAngle, rotAxis.x, rotAxis.y, rotAxis.z);
     gluCylinder(pObj, thickness, thickness, length, numSlices, numStacks);
-    f->glPopMatrix();
+    glPopMatrix();
 }
 
 /* class Helix3D : public Object3D */
@@ -123,31 +122,30 @@ Helix3D::Helix3D(const Color4f& cl, const Vector3D& c, const Vector3D& n, float
 
 void Helix3D::draw(float renderDetailLevel)
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
-    f->glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color.getConstData());
+    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color.getConstData());
     int numSlices = 10 * renderDetailLevel;
     int numStacks = 1;
     static float smallLength = 1.2f;
 
     radius=1.0f;
 
-    f->glPushMatrix();
-        f->glTranslatef(cterm.x, cterm.y, cterm.z);
-        f->glRotatef(rotAngle, rotAxis.x, rotAxis.y, rotAxis.z);
-        f->glPushMatrix();
-            f->glScalef(1,1,-1);
+    glPushMatrix();
+        glTranslatef(cterm.x, cterm.y, cterm.z);
+        glRotatef(rotAngle, rotAxis.x, rotAxis.y, rotAxis.z);
+        glPushMatrix();
+            glScalef(1,1,-1);
             gluDisk(pObj, 0, radius, numSlices, numSlices);
-        f->glPopMatrix();
+        glPopMatrix();
         gluCylinder(pObj, radius, radius, length - smallLength, numSlices, numStacks);
-        f->glTranslatef(0, 0, length - smallLength);
-        f->glPushMatrix();
-            f->glScalef(1,1,-1);
+        glTranslatef(0, 0, length - smallLength);
+        glPushMatrix();
+            glScalef(1,1,-1);
             gluDisk(pObj, 0, radius*1.2f, numSlices, numSlices);
-        f->glPopMatrix();
+        glPopMatrix();
         gluCylinder(pObj, radius*1.2f, radius*0.4f, smallLength, numSlices, numStacks);
-        f->glTranslatef(0, 0, smallLength);
+        glTranslatef(0, 0, smallLength);
         gluDisk(pObj, 0, radius*0.4f, numSlices, numStacks);
-    f->glPopMatrix();
+    glPopMatrix();
 }
 
 Helix3D::~Helix3D()
@@ -170,19 +168,18 @@ Strand3D::Strand3D( const Color4f& cl, const Vector3D& c, const Vector3D& n, con
 
 void Strand3D::draw(float renderDetailLevel)
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     Q_UNUSED(renderDetailLevel);
 
     float width = 1.5f;
     float height = 0.4f;
 
-    f->glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color.getConstData());
+    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color.getConstData());
 
-    f->glPushMatrix();
-    f->glTranslatef(cterm.x, cterm.y, cterm.z);
-    f->glRotatef(rotAngle, rotAxis.x, rotAxis.y, rotAxis.z);
+    glPushMatrix();
+    glTranslatef(cterm.x, cterm.y, cterm.z);
+    glRotatef(rotAngle, rotAxis.x, rotAxis.y, rotAxis.z);
     glCreateArrowPrimitive(width, height, length);
-    f->glPopMatrix();
+    glPopMatrix();
 
 }
 
@@ -197,7 +194,6 @@ void glDrawHalfWorm(const Vector3D& p0, const Vector3D& p1,
                                   double radius, bool cap1, bool cap2,
                                   double tension, float renderDetailLevel)
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     int i, j, k, m, offset=0;
     Vector3D R1, R2, Qt, p, dQt, H, V;
     double len, MG[4][3], T[4], t, prevlen=0.0, cosj, sinj;
@@ -355,42 +351,42 @@ void glDrawHalfWorm(const Vector3D& p0, const Vector3D& p1,
 
             /* create triangles from points along this and previous circle */
             if (i > 0) {
-                f->glBegin(GL_TRIANGLE_STRIP);
+                glBegin(GL_TRIANGLE_STRIP);
                 for (j = 0; j < wormSides; ++j) {
                     k = j + offset;
                     if (k >= wormSides) k -= wormSides;
-                    f->glNormal3d(Nx[k], Ny[k], Nz[k]);
-                    f->glVertex3d(Cx[k], Cy[k], Cz[k]);
-                    f->glNormal3d(pNx[j], pNy[j], pNz[j]);
-                    f->glVertex3d(pCx[j], pCy[j], pCz[j]);
+                    glNormal3d(Nx[k], Ny[k], Nz[k]);
+                    glVertex3d(Cx[k], Cy[k], Cz[k]);
+                    glNormal3d(pNx[j], pNy[j], pNz[j]);
+                    glVertex3d(pCx[j], pCy[j], pCz[j]);
                 }
-                f->glNormal3d(Nx[offset], Ny[offset], Nz[offset]);
-                f->glVertex3d(Cx[offset], Cy[offset], Cz[offset]);
-                f->glNormal3d(pNx[0], pNy[0], pNz[0]);
-                f->glVertex3d(pCx[0], pCy[0], pCz[0]);
-                f->glEnd();
+                glNormal3d(Nx[offset], Ny[offset], Nz[offset]);
+                glVertex3d(Cx[offset], Cy[offset], Cz[offset]);
+                glNormal3d(pNx[0], pNy[0], pNz[0]);
+                glVertex3d(pCx[0], pCy[0], pCz[0]);
+                glEnd();
             }
 
             /* put caps on the end */
             if (cap1 && i == 0) {
                 dQt.normalize();
-                f->glBegin(GL_POLYGON);
-                f->glNormal3d(-dQt.x, -dQt.y, -dQt.z);
+                glBegin(GL_POLYGON);
+                glNormal3d(-dQt.x, -dQt.y, -dQt.z);
                 for (j = wormSides - 1; j >= 0; --j) {
-                        f->glVertex3d(Cx[j], Cy[j], Cz[j]);
+                        glVertex3d(Cx[j], Cy[j], Cz[j]);
                 }
-                f->glEnd();
+                glEnd();
             }
             else if (cap2 && i == wormSegments) {
                 dQt.normalize();
-                f->glBegin(GL_POLYGON);
-                f->glNormal3d(dQt.x, dQt.y, dQt.z);
+                glBegin(GL_POLYGON);
+                glNormal3d(dQt.x, dQt.y, dQt.z);
                 for (j = 0; j < wormSides; ++j) {
                     k = j + offset;
                     if (k >= wormSides) k -= wormSides;
-                        f->glVertex3d(Cx[k], Cy[k], Cz[k]);
+                        glVertex3d(Cx[k], Cy[k], Cz[k]);
                 }
-                f->glEnd();
+                glEnd();
             }
 
             /* store this circle as previous for next round; instead of copying
@@ -416,12 +412,11 @@ void glDrawHalfBond( GLUquadric *pObj, const Vector3D& p1, const Vector3D&p2, do
 
 void glDrawAtom( GLUquadric* pObj, const Vector3D& pos, double r, float renderDetailLevel)
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     int numSlices = 10  * renderDetailLevel;
-    f->glPushMatrix();
-    f->glTranslatef(pos.x, pos.y, pos.z);
+    glPushMatrix();
+    glTranslatef(pos.x, pos.y, pos.z);
     gluSphere(pObj, r, numSlices, numSlices);
-    f->glPopMatrix();
+    glPopMatrix();
 }
 
 /*
@@ -491,7 +486,6 @@ Vector3D projectPointOnAxis( const Vector3D& point, const Vector3D& axisUnitVect
 
 void glCreateArrowPrimitive( float width, float height, float length )
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     float widthOffset = 1;
     float heightOffset = 1;
 
@@ -521,77 +515,77 @@ void glCreateArrowPrimitive( float width, float height, float length )
     static GLfloat n07[3] = { 0.7071f, 0, 0.7071f } ;
 
 
-    f->glBegin(GL_QUADS);
+    glBegin(GL_QUADS);
 
     // Draw arrow body as brick
 
-    f->glNormal3fv(n02);
-    f->glVertex3fv(b05);
-    f->glVertex3fv(b06); //glNormal3fv(n02);
-    f->glVertex3fv(b02); //glNormal3fv(n02);
-    f->glVertex3fv(b01); //glNormal3fv(n02);
-
-    f->glNormal3fv(n01);
-    f->glVertex3fv(b04);
-    f->glVertex3fv(b05); //glNormal3fv(n01);
-    f->glVertex3fv(b01); //glNormal3fv(n01);
-    f->glVertex3fv(b00); //glNormal3fv(n01);
-
-    f->glNormal3fv(n03);
-    f->glVertex3fv(b07);
-    f->glVertex3fv(b04); //glNormal3fv(n03);
-    f->glVertex3fv(b00); //glNormal3fv(n03);
-    f->glVertex3fv(b03); //glNormal3fv(n03);
-
-    f->glNormal3fv(n00);
-    f->glVertex3fv(b06);
-    f->glVertex3fv(b07); //glNormal3fv(n00);
-    f->glVertex3fv(b03); //glNormal3fv(n00);
-    f->glVertex3fv(b02); //glNormal3fv(n00);
-
-    f->glNormal3fv(n05);
-    f->glVertex3fv(b00);
-    f->glVertex3fv(b01); //glNormal3fv(n05);
-    f->glVertex3fv(b02); //glNormal3fv(n05);
-    f->glVertex3fv(b03); //glNormal3fv(n05);
+    glNormal3fv(n02);
+    glVertex3fv(b05);
+    glVertex3fv(b06); //glNormal3fv(n02);
+    glVertex3fv(b02); //glNormal3fv(n02);
+    glVertex3fv(b01); //glNormal3fv(n02);
+
+    glNormal3fv(n01);
+    glVertex3fv(b04);
+    glVertex3fv(b05); //glNormal3fv(n01);
+    glVertex3fv(b01); //glNormal3fv(n01);
+    glVertex3fv(b00); //glNormal3fv(n01);
+
+    glNormal3fv(n03);
+    glVertex3fv(b07);
+    glVertex3fv(b04); //glNormal3fv(n03);
+    glVertex3fv(b00); //glNormal3fv(n03);
+    glVertex3fv(b03); //glNormal3fv(n03);
+
+    glNormal3fv(n00);
+    glVertex3fv(b06);
+    glVertex3fv(b07); //glNormal3fv(n00);
+    glVertex3fv(b03); //glNormal3fv(n00);
+    glVertex3fv(b02); //glNormal3fv(n00);
+
+    glNormal3fv(n05);
+    glVertex3fv(b00);
+    glVertex3fv(b01); //glNormal3fv(n05);
+    glVertex3fv(b02); //glNormal3fv(n05);
+    glVertex3fv(b03); //glNormal3fv(n05);
 
     // Draw arrow head
 
-    f->glNormal3fv(n05);
-    f->glVertex3fv(b09);
-    f->glVertex3fv(b08);
-    f->glVertex3fv(b10);
-    f->glVertex3fv(b11);
+    glNormal3fv(n05);
+    glVertex3fv(b09);
+    glVertex3fv(b08);
+    glVertex3fv(b10);
+    glVertex3fv(b11);
 
-    f->glNormal3fv(n06);
-    f->glVertex3fv(b08);
-    f->glVertex3fv(b09);
-    f->glVertex3fv(b13);
-    f->glVertex3fv(b12);
+    glNormal3fv(n06);
+    glVertex3fv(b08);
+    glVertex3fv(b09);
+    glVertex3fv(b13);
+    glVertex3fv(b12);
 
-    f->glNormal3fv(n07);
-    f->glVertex3fv(b12);
-    f->glVertex3fv(b13);
-    f->glVertex3fv(b11);
-    f->glVertex3fv(b10);
+    glNormal3fv(n07);
+    glVertex3fv(b12);
+    glVertex3fv(b13);
+    glVertex3fv(b11);
+    glVertex3fv(b10);
 
-    f->glEnd();
+    glEnd();
 
-    f->glBegin(GL_TRIANGLES);
+    glBegin(GL_TRIANGLES);
 
     // Continue arrow head
 
-    f->glNormal3fv(n02);
-    f->glVertex3fv(b08);
-    f->glVertex3fv(b12); //glNormal3fv(n02);
-    f->glVertex3fv(b10); //glNormal3fv(n02);
+    glNormal3fv(n02);
+    glVertex3fv(b08);
+    glVertex3fv(b12); //glNormal3fv(n02);
+    glVertex3fv(b10); //glNormal3fv(n02);
 
-    f->glNormal3fv(n03);
-    f->glVertex3fv(b13);
-    f->glVertex3fv(b09); //glNormal3fv(n03);
-    f->glVertex3fv(b11); //glNormal3fv(n03);
+    glNormal3fv(n03);
+    glVertex3fv(b13);
+    glVertex3fv(b09); //glNormal3fv(n03);
+    glVertex3fv(b11); //glNormal3fv(n03);
 
-    f->glEnd();
+    glEnd();
 
 }
 
@@ -600,24 +594,23 @@ void accFrustum(GLdouble left, GLdouble right, GLdouble bottom,
                 GLdouble pixdy, GLdouble eyedx, GLdouble eyedy,
                 GLdouble focus)
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     GLdouble xwsize, ywsize;
     GLdouble dx, dy;
     GLint viewport[4];
 
-    f->glGetIntegerv (GL_VIEWPORT, viewport);
+    glGetIntegerv (GL_VIEWPORT, viewport);
 
     xwsize = right - left;
     ywsize = top - bottom;
     dx = -( pixdx*xwsize / (GLdouble) viewport[2] + eyedx * _near / focus );
     dy = -(pixdy*ywsize/(GLdouble) viewport[3] + eyedy * _near/ focus);
 
-    f->glMatrixMode(GL_PROJECTION);
-    f->glLoadIdentity();
-    f->glFrustum (left + dx, right + dx, bottom + dy, top + dy, _near, _far);
-    f->glMatrixMode(GL_MODELVIEW);
-    f->glLoadIdentity();
-    f->glTranslatef (-eyedx, -eyedy, 0.0);
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    glFrustum (left + dx, right + dx, bottom + dy, top + dy, _near, _far);
+    glMatrixMode(GL_MODELVIEW);
+    glLoadIdentity();
+    glTranslatef (-eyedx, -eyedy, 0.0);
 }
 
 void accPerspective(GLdouble fovy, GLdouble aspect,
diff --git a/src/plugins/biostruct3d_view/src/GraphicUtils.h b/src/plugins/biostruct3d_view/src/GraphicUtils.h
index 174890e..b3eb8e5 100644
--- a/src/plugins/biostruct3d_view/src/GraphicUtils.h
+++ b/src/plugins/biostruct3d_view/src/GraphicUtils.h
@@ -145,8 +145,7 @@ QPair<Vector3D,Vector3D> calcBestAxisThroughPoints(const QVector<Vector3D>& poin
 #define CHECK_GL_ERROR do { checkGlError(__FILE__, __LINE__); } while (0);
 
 inline void checkGlError(const char *file, int line) {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
-    GLenum error = f->glGetError();
+    GLenum error = glGetError();
     if (error != GL_NO_ERROR) {
         QString where = QString("%1:%2: ").arg(file).arg(line);
         QString msg = QString("OpenGL error (%1): %2").arg(error).arg((char*)gluErrorString(error));
diff --git a/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.cpp b/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.cpp
index 74c1cc5..73d62a6 100644
--- a/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.cpp
@@ -70,14 +70,13 @@ const QString ConvexMapRenderer::ID(QObject::tr("Convex Map"));
 /* class DotsRenderer : public MolecularSurfaceRenderer */
 void DotsRenderer::drawSurface( MolecularSurface& surface )
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     GLboolean ligting = glIsEnabled(GL_LIGHTING);
-    f->glDisable(GL_LIGHTING);
+    glDisable(GL_LIGHTING);
 
-    f->glPointSize(1.0f);
-    f->glColor3f(1.0f, 1.0f, 1.0f);
+    glPointSize(1.0f);
+    glColor3f(1.0f, 1.0f, 1.0f);
 
-    f->glBegin(GL_POINTS);
+    glBegin(GL_POINTS);
     foreach(const Face& face, surface.getFaces()) {
         float vct[3][3] = {
             {
@@ -96,15 +95,15 @@ void DotsRenderer::drawSurface( MolecularSurface& surface )
                 static_cast<float>(face.v[2].z),
             },
         };
-        f->glVertex3fv(vct[0]);
-        f->glVertex3fv(vct[1]);
-        f->glVertex3fv(vct[2]);
+        glVertex3fv(vct[0]);
+        glVertex3fv(vct[1]);
+        glVertex3fv(vct[2]);
 
         /*glVertex3f(face.v[0].x, face.v[0].y, face.v[0].z);
         glVertex3f(face.v[1].x, face.v[1].y, face.v[1].z);
         glVertex3f(face.v[2].x, face.v[2].y, face.v[2].z);*/
     }
-    f->glEnd();
+    glEnd();
 
     if (ligting) glEnable(GL_LIGHTING);
     CHECK_GL_ERROR;
@@ -114,20 +113,19 @@ void DotsRenderer::drawSurface( MolecularSurface& surface )
 /* class ConvexMapRenderer : public MolecularSurfaceRenderer */
 void ConvexMapRenderer::drawSurface( MolecularSurface& surface )
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     static GLfloat wall_mat[] = {1.f, 1.f, 1.f, 0.3f};
-    f->glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat);
+    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, wall_mat);
 
-    f->glBegin(GL_TRIANGLES);
+    glBegin(GL_TRIANGLES);
     foreach(const Face& face, surface.getFaces()) {
-        f->glNormal3f(face.n[0].x, face.n[0].y, face.n[0].z);
-        f->glVertex3f(face.v[0].x, face.v[0].y, face.v[0].z);
-        f->glNormal3f(face.n[1].x, face.n[1].y, face.n[1].z);
-        f->glVertex3f(face.v[1].x, face.v[1].y, face.v[1].z);
-        f->glNormal3f(face.n[2].x, face.n[2].y, face.n[2].z);
-        f->glVertex3f(face.v[2].x, face.v[2].y, face.v[2].z);
+        glNormal3f(face.n[0].x, face.n[0].y, face.n[0].z);
+        glVertex3f(face.v[0].x, face.v[0].y, face.v[0].z);
+        glNormal3f(face.n[1].x, face.n[1].y, face.n[1].z);
+        glVertex3f(face.v[1].x, face.v[1].y, face.v[1].z);
+        glNormal3f(face.n[2].x, face.n[2].y, face.n[2].z);
+        glVertex3f(face.v[2].x, face.v[2].y, face.v[2].z);
     }
-    f->glEnd( );
+    glEnd( );
     CHECK_GL_ERROR;
 }
 
diff --git a/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp b/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp
index 368f155..a80f122 100644
--- a/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp
@@ -33,10 +33,10 @@
 namespace U2 {
 
 SelectModelsDialog::SelectModelsDialog(const QList<int> &_modelIds, const QList<int> &_selectedItems, QWidget *parent /* = 0*/)
-: QDialog(parent), Ui::SelectModelsDialog()
+: QDialog(parent), Ui_SelectModelsDialog()
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467595");
+    new HelpButton(this, buttonBox, "17470524");
     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 9e4483c..1065b20 100644
--- a/src/plugins/biostruct3d_view/src/SelectModelsDialog.h
+++ b/src/plugins/biostruct3d_view/src/SelectModelsDialog.h
@@ -27,7 +27,7 @@
 
 namespace U2 {
 
-class SelectModelsDialog : public QDialog, public Ui::SelectModelsDialog
+class SelectModelsDialog : public QDialog, public Ui_SelectModelsDialog
 {
     Q_OBJECT
 
diff --git a/src/plugins/biostruct3d_view/src/ui/SelectModelsDialog.ui b/src/plugins/biostruct3d_view/src/SelectModelsDialog.ui
similarity index 100%
rename from src/plugins/biostruct3d_view/src/ui/SelectModelsDialog.ui
rename to src/plugins/biostruct3d_view/src/SelectModelsDialog.ui
diff --git a/src/plugins/biostruct3d_view/src/SettingsDialog.cpp b/src/plugins/biostruct3d_view/src/SettingsDialog.cpp
index e0403b4..efb49e2 100644
--- a/src/plugins/biostruct3d_view/src/SettingsDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/SettingsDialog.cpp
@@ -32,7 +32,7 @@ BioStruct3DSettingsDialog::BioStruct3DSettingsDialog()
 {
     setupUi(this);
 
-    new HelpButton(this, buttonBox, "17467592");
+    new HelpButton(this, buttonBox, "17470521");
 
     glWidget = NULL;
     initColorSchemes();
diff --git a/src/plugins/biostruct3d_view/src/SettingsDialog.h b/src/plugins/biostruct3d_view/src/SettingsDialog.h
index 11a1096..348f947 100644
--- a/src/plugins/biostruct3d_view/src/SettingsDialog.h
+++ b/src/plugins/biostruct3d_view/src/SettingsDialog.h
@@ -59,7 +59,7 @@ public:
 };
 
 
-class BioStruct3DSettingsDialog : public QDialog, private Ui::SettingsDialog
+class BioStruct3DSettingsDialog : public QDialog, private Ui_SettingsDialog
 {
     Q_OBJECT
 
diff --git a/src/plugins/biostruct3d_view/src/ui/SettingsDialog.ui b/src/plugins/biostruct3d_view/src/SettingsDialog.ui
similarity index 100%
rename from src/plugins/biostruct3d_view/src/ui/SettingsDialog.ui
rename to src/plugins/biostruct3d_view/src/SettingsDialog.ui
diff --git a/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.cpp b/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.cpp
index 0694578..e6b23d1 100644
--- a/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.cpp
@@ -56,7 +56,7 @@ StructuralAlignmentDialog::StructuralAlignmentDialog(const BioStruct3DObject *fi
         : QDialog(parent), task(0)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467598");
+    new HelpButton(this, buttonBox, "17470527");
 
     StructuralAlignmentAlgorithmRegistry *reg = AppContext::getStructuralAlignmentAlgorithmRegistry();
     foreach (const QString &id, reg->getFactoriesIds()) {
diff --git a/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.h b/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.h
index 5034e26..4931dc4 100644
--- a/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.h
+++ b/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.h
@@ -30,7 +30,7 @@ class StructuralAlignmentTask;
 class BioStruct3DObject;
 class BioStruct3DSubsetEditor;
 
-class StructuralAlignmentDialog : public QDialog, public Ui::StructuralAlignmentDialog
+class StructuralAlignmentDialog : public QDialog, public Ui_StructuralAlignmentDialog
 {
     Q_OBJECT
 
diff --git a/src/plugins/biostruct3d_view/src/ui/StructuralAlignmentDialog.ui b/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.ui
similarity index 100%
rename from src/plugins/biostruct3d_view/src/ui/StructuralAlignmentDialog.ui
rename to src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.ui
diff --git a/src/plugins/biostruct3d_view/src/TubeGLRenderer.cpp b/src/plugins/biostruct3d_view/src/TubeGLRenderer.cpp
index 434b39a..1ad29fa 100644
--- a/src/plugins/biostruct3d_view/src/TubeGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/TubeGLRenderer.cpp
@@ -30,7 +30,6 @@ const QString TubeGLRenderer::ID(QObject::tr("Tubes"));
 
 void TubeGLRenderer::drawTubes( const BioStruct3DColorScheme* colorScheme )
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     GLUquadricObj *pObj;    // Quadric Object
 
     pObj = gluNewQuadric();
@@ -45,7 +44,7 @@ void TubeGLRenderer::drawTubes( const BioStruct3DColorScheme* colorScheme )
             foreach(const SharedAtom atom, tubeAtoms) {
                 Color4f atomColor = colorScheme->getAtomColor(atom);
                 Vector3D pos = atom.constData()->coord3d;
-                f->glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, atomColor.getConstData());
+                glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, atomColor.getConstData());
                 glDrawAtom(pObj, pos, ribbonThickness, settings->detailLevel);
 
                 if (!firstPass) {
@@ -56,7 +55,7 @@ void TubeGLRenderer::drawTubes( const BioStruct3DColorScheme* colorScheme )
                             Vector3D bufPos = bufAtom.constData()->coord3d;
                             Color4f bufAtomColor = colorScheme->getAtomColor(bufAtom);
                             glDrawHalfBond(pObj, bufPos, pos, ribbonThickness, settings->detailLevel);
-                            f->glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bufAtomColor.getConstData());
+                            glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, bufAtomColor.getConstData());
                             glDrawHalfBond(pObj, pos, bufPos, ribbonThickness, settings->detailLevel);
                         }
                     }
diff --git a/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.cpp b/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.cpp
index 03b6d97..fa07c0b 100644
--- a/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.cpp
@@ -46,7 +46,6 @@ void VanDerWaalsGLRenderer::drawBioStruct3D( )
 
 void VanDerWaalsGLRenderer::drawAtoms( const BioStruct3DColorScheme* colorScheme )
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     static float tolerance = 0.45f;
     int numSlices = 10 * settings->detailLevel;
     GLUquadricObj *pObj = gluNewQuadric();
@@ -62,11 +61,11 @@ void VanDerWaalsGLRenderer::drawAtoms( const BioStruct3DColorScheme* colorScheme
                 float radius = AtomConstants::getAtomCovalentRadius(atom->atomicNumber);
                 Vector3D pos = atom->coord3d;
                 Color4f atomColor = colorScheme->getAtomColor(atom);
-                f->glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, atomColor.getConstData());
-                f->glPushMatrix();
-                f->glTranslatef(pos.x, pos.y, pos.z);
+                glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, atomColor.getConstData());
+                glPushMatrix();
+                glTranslatef(pos.x, pos.y, pos.z);
                 gluSphere(pObj, radius + tolerance, numSlices, numSlices);
-                f->glPopMatrix();
+                glPopMatrix();
             }
         }
     }
diff --git a/src/plugins/biostruct3d_view/src/WormsGLRenderer.cpp b/src/plugins/biostruct3d_view/src/WormsGLRenderer.cpp
index 1b3e978..b50df49 100644
--- a/src/plugins/biostruct3d_view/src/WormsGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/WormsGLRenderer.cpp
@@ -77,7 +77,6 @@ void WormsGLRenderer::create() {
 
 void WormsGLRenderer::drawWorms(  )
 {
-    QOpenGLFunctions_2_0 *f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_2_0>();
     GLUquadricObj *pObj;    // Quadric Object
 
     // Draw atoms as spheres
@@ -104,9 +103,9 @@ void WormsGLRenderer::drawWorms(  )
                     continue;
                 }
 
-                f->glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, getAtomColor(a1));
+                glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, getAtomColor(a1));
                 glDrawHalfWorm(a0->coord3d, a1->coord3d, a2->coord3d, a3->coord3d, ribbonThickness, false, false, tension, settings->detailLevel);
-                f->glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, getAtomColor(a2));
+                glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, getAtomColor(a2));
                 glDrawHalfWorm(a3->coord3d, a2->coord3d, a1->coord3d, a0->coord3d, ribbonThickness, false, false, tension, settings->detailLevel);
             }
 
@@ -116,7 +115,7 @@ void WormsGLRenderer::drawWorms(  )
                 const SharedAtom a1 = wormCoords.at(1);
                 const SharedAtom a2 = wormCoords.at(2);
                 Vector3D atomCoordFirst = model.openingAtom;
-                f->glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, getAtomColor(a0));
+                glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, getAtomColor(a0));
                 glDrawHalfWorm(atomCoordFirst, a0->coord3d, a1->coord3d, a2->coord3d, ribbonThickness, true, false, tension, settings->detailLevel);
                 glDrawHalfWorm(a2->coord3d, a1->coord3d, a0->coord3d, atomCoordFirst, ribbonThickness, false, false, tension, settings->detailLevel);
                 // Draw worm ending
@@ -124,7 +123,7 @@ void WormsGLRenderer::drawWorms(  )
                 const SharedAtom aN2 = wormCoords.at(size - 2);
                 const SharedAtom aN3 = wormCoords.at(size - 3);
                 Vector3D atomCoordLast = model.closingAtom;
-                f->glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, getAtomColor(aN1));
+                glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, getAtomColor(aN1));
                 glDrawHalfWorm(atomCoordLast, aN1->coord3d, aN2->coord3d, aN3->coord3d, ribbonThickness, true, false, tension, settings->detailLevel);
                 glDrawHalfWorm(aN3->coord3d, aN2->coord3d, aN1->coord3d, atomCoordLast, ribbonThickness, false, false, tension, settings->detailLevel);
             }
@@ -247,7 +246,6 @@ void WormsGLRenderer::createWorms()
 
 void WormsGLRenderer::createBioPolymerMap(const QMap<int, SharedMolecule> &moleculeMap, QMap<int, BioPolymer> &bioPolymerMap) {
     const char* alphaCarbonTag = "CA";
-    const char* phosophorTag = "P";
     const char* carbonylOxygenTag = "O";
 
     QMapIterator<int, SharedMolecule> i(moleculeMap);
@@ -261,7 +259,7 @@ void WormsGLRenderer::createBioPolymerMap(const QMap<int, SharedMolecule> &molec
             QMap<int, QPair<bool, bool> > checkList;
             foreach (const SharedAtom atom, model.atoms) {
                 int residueIdx = atom->residueIndex.toInt();
-                if ((atom->name.trimmed() == alphaCarbonTag) || (atom->name.trimmed() == phosophorTag)) {
+                if (atom->name.trimmed() == alphaCarbonTag) {
 
                     if (checkList.contains(residueIdx)) {
                         QPair<bool, bool> check = checkList.value(residueIdx);
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.cpp b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.cpp
index fd983fe..3fb71cb 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.cpp
@@ -74,6 +74,11 @@ namespace U2 {
 
 int BioStruct3DGLWidget::widgetCount = 0;
 
+void BioStruct3DGLWidget::tryGL() {
+    volatile QGLWidget wgt;
+    Q_UNUSED(wgt);
+}
+
 static QColor DEFAULT_BACKGROUND_COLOR = Qt::black;
 static QColor DEFAULT_SELECTION_COLOR = Qt::yellow;
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.h b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.h
index bbbb82b..c346756 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.h
@@ -99,6 +99,9 @@ class BioStruct3DGLWidget : public QGLWidget
 {
     Q_OBJECT
     static int widgetCount;
+public:
+    // Used in PluginChecker to detect whether the GL is available
+    static void tryGL();
 
 public:
     /*!
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.h b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.h
index 068e784..9050906 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.h
@@ -32,7 +32,7 @@ class U2Region;
 class BioStruct3DObject;
 class BioStruct3DReference;
 
-class BioStruct3DSubsetEditor : public QWidget, public Ui::BioStruct3DSubsetEditor
+class BioStruct3DSubsetEditor : public QWidget, public Ui_BioStruct3DSubsetEditor
 {
     Q_OBJECT
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.cpp b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.cpp
index 90864c3..b93402d 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.cpp
@@ -83,6 +83,17 @@ extern "C" Q_DECL_EXPORT Plugin* U2_PLUGIN_INIT_FUNC() {
     return NULL;
 }
 
+extern "C" Q_DECL_EXPORT bool U2_PLUGIN_VERIFY_FUNC() {
+    BioStruct3DGLWidget::tryGL();
+    return true;
+}
+
+extern "C" Q_DECL_EXPORT QString * U2_PLUGIN_FAIL_MASSAGE_FUNC() {
+    return new QString(BioStruct3DViewPlugin::tr("Unfortunately, your system does not have OpenGL Support.\n"
+                                                 "The 3D Structure Viewer is not available.\n"
+                                                 "You may try to upgrade your system by updating the video card driver."));
+}
+
 BioStruct3DViewPlugin::BioStruct3DViewPlugin()
     : Plugin(tr("3D Structure Viewer"), tr("Visualizes 3D structures of biological molecules."))
 {
diff --git a/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.cpp b/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.cpp
index 368f155..a80f122 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.cpp
@@ -33,10 +33,10 @@
 namespace U2 {
 
 SelectModelsDialog::SelectModelsDialog(const QList<int> &_modelIds, const QList<int> &_selectedItems, QWidget *parent /* = 0*/)
-: QDialog(parent), Ui::SelectModelsDialog()
+: QDialog(parent), Ui_SelectModelsDialog()
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467595");
+    new HelpButton(this, buttonBox, "17470524");
     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 9e4483c..1065b20 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.h
@@ -27,7 +27,7 @@
 
 namespace U2 {
 
-class SelectModelsDialog : public QDialog, public Ui::SelectModelsDialog
+class SelectModelsDialog : public QDialog, public Ui_SelectModelsDialog
 {
     Q_OBJECT
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.cpp b/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.cpp
index e0403b4..efb49e2 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.cpp
@@ -32,7 +32,7 @@ BioStruct3DSettingsDialog::BioStruct3DSettingsDialog()
 {
     setupUi(this);
 
-    new HelpButton(this, buttonBox, "17467592");
+    new HelpButton(this, buttonBox, "17470521");
 
     glWidget = NULL;
     initColorSchemes();
diff --git a/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.h b/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.h
index 11a1096..348f947 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.h
@@ -59,7 +59,7 @@ public:
 };
 
 
-class BioStruct3DSettingsDialog : public QDialog, private Ui::SettingsDialog
+class BioStruct3DSettingsDialog : public QDialog, private Ui_SettingsDialog
 {
     Q_OBJECT
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.cpp b/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.cpp
index 0694578..e6b23d1 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.cpp
@@ -56,7 +56,7 @@ StructuralAlignmentDialog::StructuralAlignmentDialog(const BioStruct3DObject *fi
         : QDialog(parent), task(0)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467598");
+    new HelpButton(this, buttonBox, "17470527");
 
     StructuralAlignmentAlgorithmRegistry *reg = AppContext::getStructuralAlignmentAlgorithmRegistry();
     foreach (const QString &id, reg->getFactoriesIds()) {
diff --git a/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.h b/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.h
index 5034e26..4931dc4 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.h
@@ -30,7 +30,7 @@ class StructuralAlignmentTask;
 class BioStruct3DObject;
 class BioStruct3DSubsetEditor;
 
-class StructuralAlignmentDialog : public QDialog, public Ui::StructuralAlignmentDialog
+class StructuralAlignmentDialog : public QDialog, public Ui_StructuralAlignmentDialog
 {
     Q_OBJECT
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.cpp b/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.cpp
index 7122e24..fa1545c 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.cpp
@@ -247,7 +247,6 @@ void WormsGLRenderer::createWorms()
 
 void WormsGLRenderer::createBioPolymerMap(const QMap<int, SharedMolecule> &moleculeMap, QMap<int, BioPolymer> &bioPolymerMap) {
     const char* alphaCarbonTag = "CA";
-    const char* phosophorTag = "P";
     const char* carbonylOxygenTag = "O";
 
     QMapIterator<int, SharedMolecule> i(moleculeMap);
@@ -261,7 +260,7 @@ void WormsGLRenderer::createBioPolymerMap(const QMap<int, SharedMolecule> &molec
             QMap<int, QPair<bool, bool> > checkList;
             foreach (const SharedAtom atom, model.atoms) {
                 int residueIdx = atom->residueIndex.toInt();
-                if ((atom->name.trimmed() == alphaCarbonTag) || (atom->name.trimmed() == phosophorTag)) {
+                if ((atom->name.trimmed() == alphaCarbonTag)) {
 
                     if (checkList.contains(residueIdx)) {
                         QPair<bool, bool> check = checkList.value(residueIdx);
diff --git a/src/plugins/biostruct3d_view/src/gl2ps/gl2ps.cpp b/src/plugins/biostruct3d_view/src/gl2ps/gl2ps.cpp
index b60b834..afe1746 100644
--- a/src/plugins/biostruct3d_view/src/gl2ps/gl2ps.cpp
+++ b/src/plugins/biostruct3d_view/src/gl2ps/gl2ps.cpp
@@ -72,7 +72,7 @@
 #endif
 
 #if defined(GL2PS_HAVE_ZLIB)
-#include <zlib.h>
+#include <3rdparty/zlib/zlib.h>
 #endif
 
 #if defined(GL2PS_HAVE_LIBPNG)
diff --git a/src/plugins/biostruct3d_view/transl/english.ts b/src/plugins/biostruct3d_view/transl/english.ts
index 666f3cc..c8c795c 100644
--- a/src/plugins/biostruct3d_view/transl/english.ts
+++ b/src/plugins/biostruct3d_view/transl/english.ts
@@ -4,27 +4,27 @@
 <context>
     <name>BioStruct3DSubsetEditor</name>
     <message>
-        <location filename="../src/ui/BioStruct3DSubsetEditor.ui" line="14"/>
+        <location filename="../src/BioStruct3DSubsetEditor.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/BioStruct3DSubsetEditor.ui" line="20"/>
+        <location filename="../src/BioStruct3DSubsetEditor.ui" line="20"/>
         <source>Structure</source>
         <translation>Structure</translation>
     </message>
     <message>
-        <location filename="../src/ui/BioStruct3DSubsetEditor.ui" line="37"/>
+        <location filename="../src/BioStruct3DSubsetEditor.ui" line="37"/>
         <source>Chain</source>
         <translation>Chain</translation>
     </message>
     <message>
-        <location filename="../src/ui/BioStruct3DSubsetEditor.ui" line="54"/>
+        <location filename="../src/BioStruct3DSubsetEditor.ui" line="54"/>
         <source>Region</source>
         <translation>Region</translation>
     </message>
     <message>
-        <location filename="../src/ui/BioStruct3DSubsetEditor.ui" line="64"/>
+        <location filename="../src/BioStruct3DSubsetEditor.ui" line="64"/>
         <source>Model</source>
         <translation>Model</translation>
     </message>
@@ -95,7 +95,7 @@
 <context>
     <name>SelectModelsDialog</name>
     <message>
-        <location filename="../src/ui/SelectModelsDialog.ui" line="14"/>
+        <location filename="../src/SelectModelsDialog.ui" line="14"/>
         <source>Select Models</source>
         <translation>Select Models</translation>
     </message>
@@ -103,57 +103,57 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="35"/>
+        <location filename="../src/SettingsDialog.ui" line="35"/>
         <source>Anaglyph view</source>
         <translation>Anaglyph view</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="49"/>
+        <location filename="../src/SettingsDialog.ui" line="49"/>
         <source>Eyes shift</source>
         <translation>Eyes shift</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="20"/>
+        <location filename="../src/SettingsDialog.ui" line="20"/>
         <source>Settings</source>
         <translation>Settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="279"/>
+        <location filename="../src/SettingsDialog.ui" line="279"/>
         <source>Set background color...</source>
         <translation>Set background color...</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="292"/>
+        <location filename="../src/SettingsDialog.ui" line="292"/>
         <source>Set selection color...</source>
         <translation>Set selection color...</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="301"/>
+        <location filename="../src/SettingsDialog.ui" line="301"/>
         <source>Detail level</source>
         <translation>Detail level</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="325"/>
+        <location filename="../src/SettingsDialog.ui" line="325"/>
         <source>Unselected regions shading</source>
         <translation>Unselected regions shading</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="96"/>
+        <location filename="../src/SettingsDialog.ui" line="96"/>
         <source>Glasses colors</source>
         <translation>Glasses colors</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="125"/>
+        <location filename="../src/SettingsDialog.ui" line="125"/>
         <source>Left</source>
         <translation>Left</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="135"/>
+        <location filename="../src/SettingsDialog.ui" line="135"/>
         <source>Right</source>
         <translation>Right</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="254"/>
+        <location filename="../src/SettingsDialog.ui" line="254"/>
         <source>Swap colors</source>
         <translation>Swap colors</translation>
     </message>
@@ -161,22 +161,22 @@
 <context>
     <name>StructuralAlignmentDialog</name>
     <message>
-        <location filename="../src/ui/StructuralAlignmentDialog.ui" line="14"/>
+        <location filename="../src/StructuralAlignmentDialog.ui" line="14"/>
         <source>Structural Alignment</source>
         <translation>Structural Alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/StructuralAlignmentDialog.ui" line="20"/>
+        <location filename="../src/StructuralAlignmentDialog.ui" line="20"/>
         <source>Algorithm</source>
         <translation>Algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ui/StructuralAlignmentDialog.ui" line="45"/>
+        <location filename="../src/StructuralAlignmentDialog.ui" line="45"/>
         <source>Reference</source>
         <translation>Reference</translation>
     </message>
     <message>
-        <location filename="../src/ui/StructuralAlignmentDialog.ui" line="61"/>
+        <location filename="../src/StructuralAlignmentDialog.ui" line="61"/>
         <source>Mobile</source>
         <translation>Mobile</translation>
     </message>
diff --git a/src/plugins/biostruct3d_view/transl/russian.ts b/src/plugins/biostruct3d_view/transl/russian.ts
index e2102b4..bc672c8 100644
--- a/src/plugins/biostruct3d_view/transl/russian.ts
+++ b/src/plugins/biostruct3d_view/transl/russian.ts
@@ -4,27 +4,27 @@
 <context>
     <name>BioStruct3DSubsetEditor</name>
     <message>
-        <location filename="../src/ui/BioStruct3DSubsetEditor.ui" line="14"/>
+        <location filename="../src/BioStruct3DSubsetEditor.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/BioStruct3DSubsetEditor.ui" line="20"/>
+        <location filename="../src/BioStruct3DSubsetEditor.ui" line="20"/>
         <source>Structure</source>
         <translation>Структура</translation>
     </message>
     <message>
-        <location filename="../src/ui/BioStruct3DSubsetEditor.ui" line="37"/>
+        <location filename="../src/BioStruct3DSubsetEditor.ui" line="37"/>
         <source>Chain</source>
         <translation>Цепь</translation>
     </message>
     <message>
-        <location filename="../src/ui/BioStruct3DSubsetEditor.ui" line="54"/>
+        <location filename="../src/BioStruct3DSubsetEditor.ui" line="54"/>
         <source>Region</source>
         <translation>Регион</translation>
     </message>
     <message>
-        <location filename="../src/ui/BioStruct3DSubsetEditor.ui" line="64"/>
+        <location filename="../src/BioStruct3DSubsetEditor.ui" line="64"/>
         <source>Model</source>
         <translation>Модель</translation>
     </message>
@@ -95,7 +95,7 @@
 <context>
     <name>SelectModelsDialog</name>
     <message>
-        <location filename="../src/ui/SelectModelsDialog.ui" line="14"/>
+        <location filename="../src/SelectModelsDialog.ui" line="14"/>
         <source>Select Models</source>
         <translation>Выбор моделей</translation>
     </message>
@@ -103,57 +103,57 @@
 <context>
     <name>SettingsDialog</name>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="35"/>
+        <location filename="../src/SettingsDialog.ui" line="35"/>
         <source>Anaglyph view</source>
         <translation>Стереоизображение</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="49"/>
+        <location filename="../src/SettingsDialog.ui" line="49"/>
         <source>Eyes shift</source>
         <translation>Сдвиг слоев</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="20"/>
+        <location filename="../src/SettingsDialog.ui" line="20"/>
         <source>Settings</source>
         <translation>Настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="279"/>
+        <location filename="../src/SettingsDialog.ui" line="279"/>
         <source>Set background color...</source>
         <translation>Выбрать цвет фона...</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="292"/>
+        <location filename="../src/SettingsDialog.ui" line="292"/>
         <source>Set selection color...</source>
         <translation>Выбрать цвет выделения...</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="301"/>
+        <location filename="../src/SettingsDialog.ui" line="301"/>
         <source>Detail level</source>
         <translation>Уровень детализации</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="325"/>
+        <location filename="../src/SettingsDialog.ui" line="325"/>
         <source>Unselected regions shading</source>
         <translation>Затемнение невыбранных регионов</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="96"/>
+        <location filename="../src/SettingsDialog.ui" line="96"/>
         <source>Glasses colors</source>
         <translation>Цвета очков</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="125"/>
+        <location filename="../src/SettingsDialog.ui" line="125"/>
         <source>Left</source>
         <translation>Левый</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="135"/>
+        <location filename="../src/SettingsDialog.ui" line="135"/>
         <source>Right</source>
         <translation>Правый</translation>
     </message>
     <message>
-        <location filename="../src/ui/SettingsDialog.ui" line="254"/>
+        <location filename="../src/SettingsDialog.ui" line="254"/>
         <source>Swap colors</source>
         <translation>Поменять местами</translation>
     </message>
@@ -161,22 +161,22 @@
 <context>
     <name>StructuralAlignmentDialog</name>
     <message>
-        <location filename="../src/ui/StructuralAlignmentDialog.ui" line="14"/>
+        <location filename="../src/StructuralAlignmentDialog.ui" line="14"/>
         <source>Structural Alignment</source>
         <translation>Структурное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ui/StructuralAlignmentDialog.ui" line="20"/>
+        <location filename="../src/StructuralAlignmentDialog.ui" line="20"/>
         <source>Algorithm</source>
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/ui/StructuralAlignmentDialog.ui" line="45"/>
+        <location filename="../src/StructuralAlignmentDialog.ui" line="45"/>
         <source>Reference</source>
         <translation>Референсная</translation>
     </message>
     <message>
-        <location filename="../src/ui/StructuralAlignmentDialog.ui" line="61"/>
+        <location filename="../src/StructuralAlignmentDialog.ui" line="61"/>
         <source>Mobile</source>
         <translation>Мобильная</translation>
     </message>
diff --git a/src/plugins/browser_support/CMakeLists.txt b/src/plugins/browser_support/CMakeLists.txt
new file mode 100644
index 0000000..6a9a08f
--- /dev/null
+++ b/src/plugins/browser_support/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME browser_support)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/browser_support/src/BrowserSupportPlugin.cpp b/src/plugins/browser_support/src/BrowserSupportPlugin.cpp
index 6a86b01..02c2212 100644
--- a/src/plugins/browser_support/src/BrowserSupportPlugin.cpp
+++ b/src/plugins/browser_support/src/BrowserSupportPlugin.cpp
@@ -132,7 +132,7 @@ void BrowserSupportPlugin::sl_clipboardCheck() {
             QString ensId = noOpen.left(idLength);
             ensId = ensId.simplified();
 
-            Task* task = new LoadRemoteDocumentAndOpenViewTask(ensId, "ENSEMBL", fullPath);
+            Task* task = new LoadRemoteDocumentAndAddToProjectTask(ensId, "ENSEMBL", fullPath);
             AppContext::getTaskScheduler()->registerTopLevelTask(task);
             QApplication::clipboard()->setText("");
         }
@@ -143,7 +143,7 @@ void BrowserSupportPlugin::sl_clipboardCheck() {
             QString ensId = noOpen.left(idLength);
             ensId = ensId.simplified();
 
-            Task* task = new LoadRemoteDocumentAndOpenViewTask(ensId, "PDB", fullPath);
+            Task* task = new LoadRemoteDocumentAndAddToProjectTask(ensId, "PDB", fullPath);
             AppContext::getTaskScheduler()->registerTopLevelTask(task);
             QApplication::clipboard()->setText("");
         }
diff --git a/src/plugins/chroma_view/CMakeLists.txt b/src/plugins/chroma_view/CMakeLists.txt
new file mode 100644
index 0000000..f4cd837
--- /dev/null
+++ b/src/plugins/chroma_view/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME chroma_view)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/chroma_view/src/ChromatogramView.cpp b/src/plugins/chroma_view/src/ChromatogramView.cpp
index ea3f595..8e0199e 100644
--- a/src/plugins/chroma_view/src/ChromatogramView.cpp
+++ b/src/plugins/chroma_view/src/ChromatogramView.cpp
@@ -274,6 +274,7 @@ void ChromatogramView::sl_addNewSequenceObject() {
     Project* p = AppContext::getProject();
 
     DocumentFormat* format = AppContext::getDocumentFormatRegistry()->getFormatById(m.format);
+    SAFE_POINT(NULL != format, QString("Format is not registered: '%1'").arg(m.format), );
     IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(m.io);
     U2OpStatus2Log os;
     Document* doc = format->createNewLoadedDocument(iof, m.url, os);
diff --git a/src/plugins/chroma_view/transl/english.ts b/src/plugins/chroma_view/transl/english.ts
index 48483cf..d16c739 100644
--- a/src/plugins/chroma_view/transl/english.ts
+++ b/src/plugins/chroma_view/transl/english.ts
@@ -56,7 +56,7 @@
     </message>
     <message>
         <location filename="../src/ChromatogramView.cpp" line="219"/>
-        <location filename="../src/ChromatogramView.cpp" line="355"/>
+        <location filename="../src/ChromatogramView.cpp" line="356"/>
         <source>The sequence is locked</source>
         <translation>The sequence is locked</translation>
     </message>
@@ -77,12 +77,12 @@
 <context>
     <name>U2::ChromatogramViewRenderArea</name>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="511"/>
+        <location filename="../src/ChromatogramView.cpp" line="512"/>
         <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="736"/>
+        <location filename="../src/ChromatogramView.cpp" line="737"/>
         <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 9ed5c7a..aea8f47 100644
--- a/src/plugins/chroma_view/transl/russian.ts
+++ b/src/plugins/chroma_view/transl/russian.ts
@@ -56,7 +56,7 @@
     </message>
     <message>
         <location filename="../src/ChromatogramView.cpp" line="219"/>
-        <location filename="../src/ChromatogramView.cpp" line="355"/>
+        <location filename="../src/ChromatogramView.cpp" line="356"/>
         <source>The sequence is locked</source>
         <translation>Последовательность заблокирована</translation>
     </message>
@@ -77,12 +77,12 @@
 <context>
     <name>U2::ChromatogramViewRenderArea</name>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="511"/>
+        <location filename="../src/ChromatogramView.cpp" line="512"/>
         <source>Chromatogram view (zoom in to see base calls)</source>
         <translation>Хроматограмма (приближайте масштаб)</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="736"/>
+        <location filename="../src/ChromatogramView.cpp" line="737"/>
         <source>original sequence</source>
         <translation>Исходная последовательность</translation>
     </message>
diff --git a/src/plugins/circular_view/CMakeLists.txt b/src/plugins/circular_view/CMakeLists.txt
new file mode 100644
index 0000000..501b3b6
--- /dev/null
+++ b/src/plugins/circular_view/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME circular_view)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/circular_view/circular_view.pri b/src/plugins/circular_view/circular_view.pri
index 59798e5..7dcb8dc 100644
--- a/src/plugins/circular_view/circular_view.pri
+++ b/src/plugins/circular_view/circular_view.pri
@@ -7,4 +7,4 @@ PLUGIN_MODE=ui
 
 include( ../../ugene_plugin_common.pri )
 
-greaterThan(QT_MAJOR_VERSION, 4): QT += printsupport
+QT += printsupport
diff --git a/src/plugins/circular_view/circular_view.pro b/src/plugins/circular_view/circular_view.pro
index 5902447..46fff1c 100644
--- a/src/plugins/circular_view/circular_view.pro
+++ b/src/plugins/circular_view/circular_view.pro
@@ -11,8 +11,8 @@ HEADERS += src/CircularItems.h \
            src/RestrictionMapWidget.h \
            src/SetSequenceOriginDialog.h \
            src/ShiftSequenceStartTask.h
-FORMS +=   src/ui/CircularViewSettingsWidget.ui \
-           src/ui/SetSequenceOriginDialog.ui
+FORMS +=   src/CircularViewSettingsWidget.ui \
+           src/SetSequenceOriginDialog.ui
 SOURCES += src/CircularItems.cpp \
            src/CircularView.cpp \
            src/CircularViewImageExportTask.cpp \
diff --git a/src/plugins/circular_view/src/CircularView.cpp b/src/plugins/circular_view/src/CircularView.cpp
index 713f790..6c9845c 100644
--- a/src/plugins/circular_view/src/CircularView.cpp
+++ b/src/plugins/circular_view/src/CircularView.cpp
@@ -24,15 +24,9 @@
 #include <QtGui/QFontMetrics>
 #include <QtGui/QPainter>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QDialog>
-#include <QtGui/QGridLayout>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QGridLayout>
-#endif
+#include <QApplication>
+#include <QDialog>
+#include <QGridLayout>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AnnotationSettings.h>
@@ -264,7 +258,10 @@ QList<AnnotationSelectionData> CircularView::selectAnnotationByCoord(const QPoin
             }
 
             res.append(AnnotationSelectionData(item->getAnnotation(), indx));
-            return res;
+            if (item->getAnnotation()->getType() != U2FeatureTypes::RestrictionSite) {
+                // only restriction sites can intersect
+                return res;
+            }
         }
     }
     foreach(CircularAnnotationItem* item, renderArea->circItems) {
@@ -497,17 +494,8 @@ CircularViewRenderArea::CircularViewRenderArea(CircularView* d)
 
     setMouseTracking(true);
 
-    ADVSequenceObjectContext* ctx = view->getSequenceContext();
-
     //build annotation items to get number of region levels for proper resize
-    AnnotationSettingsRegistry* asr = AppContext::getAnnotationsSettingsRegistry();
-    QSet<AnnotationTableObject *> anns = ctx->getAnnotationObjects(true);
-    foreach (AnnotationTableObject *ao, anns) {
-        foreach (Annotation *a, ao->getAnnotations()) {
-            AnnotationSettings *as = asr->getAnnotationSettings(a->getName());
-            buildAnnotationItem(DrawAnnotationPass_DrawFill, a, false, as);
-        }
-    }
+    buildItems(QFont());
 }
 
 void CircularViewRenderArea::adaptNumberOfLabels(int h) {
@@ -888,32 +876,9 @@ void CircularViewRenderArea::drawRulerCoordinates(QPainter &p, int startPos, int
 }
 
 void CircularViewRenderArea::drawAnnotations(QPainter &p) {
-    ADVSequenceObjectContext *ctx = view->getSequenceContext();
-
-    foreach (CircularAnnotationItem *item, circItems) {
-        delete item;
-    }
-    circItems.clear();
-    labelList.clear();
-    engagedLabelPositionToLabel.clear();
-    annotationYLevel.clear();
-    regionY.clear();
-
     QFont font = p.font();
     font.setPointSize(settings->labelFontSize);
-
-    AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
-    //TODO: there need const order of annotation tables
-    QSet<AnnotationTableObject *> anns = ctx->getAnnotationObjects(true);
-    QSet<AnnotationTableObject *> autoAnns = ctx->getAutoAnnotationObjects();
-    foreach (AnnotationTableObject *ao, anns) {
-        bool isAutoAnnotation = autoAnns.contains(ao);
-        foreach (Annotation *a, ao->getAnnotations()) {
-            AnnotationSettings *as = asr->getAnnotationSettings(a->getData());
-            buildAnnotationItem(DrawAnnotationPass_DrawFill, a, false, as);
-            buildAnnotationLabel(font, a, as, isAutoAnnotation);
-        }
-    }
+    buildItems(font);
 
     CircularAnnotationLabel::setLabelsVisible(labelList);
     evaluateLabelPositions(font);
@@ -921,7 +886,6 @@ void CircularViewRenderArea::drawAnnotations(QPainter &p) {
     foreach (CircularAnnotationItem* item, circItems) {
         item->paint(&p, NULL, this);
     }
-
     if (settings->labelMode == CircularViewSettings::None) {
         return;
     }
@@ -941,10 +905,10 @@ void CircularViewRenderArea::redraw() {
 
 bool isGreater(const U2Region &r1, const U2Region &r2) {
     return r1.startPos > r2.startPos;
-};
+}
 
 #define REGION_MIN_LEN 3
-void CircularViewRenderArea::buildAnnotationItem(DrawAnnotationPass pass, Annotation *a, bool selected /* = false */,
+void CircularViewRenderArea::buildAnnotationItem(DrawAnnotationPass pass, Annotation *a, int predefinedOrbit /* = -1*/, bool selected /* = false */,
     const AnnotationSettings* as /* = NULL */)
 {
     const SharedAnnotationData &aData = a->getData();
@@ -961,7 +925,7 @@ void CircularViewRenderArea::buildAnnotationItem(DrawAnnotationPass pass, Annota
     removeRegionsOutOfRange(location, seqLen);
 
     qStableSort(location.begin(), location.end(), isGreater);
-    int yLevel = findOrbit(location, a);
+    int yLevel = predefinedOrbit == -1 ? findOrbit(location, a) : predefinedOrbit;
 
     QPair<U2Region, U2Region> mergedRegions = mergeCircularJunctoinRegion(location, seqLen);
 
@@ -987,6 +951,44 @@ void CircularViewRenderArea::buildAnnotationItem(DrawAnnotationPass pass, Annota
     circItems[a] = item;
 }
 
+void CircularViewRenderArea::buildItems(QFont labelFont) {
+    ADVSequenceObjectContext *ctx = view->getSequenceContext();
+
+    qDeleteAll(circItems);
+    circItems.clear();
+    labelList.clear();
+    engagedLabelPositionToLabel.clear();
+    annotationYLevel.clear();
+    regionY.clear();
+
+    labelFont.setPointSize(settings->labelFontSize);
+
+    AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
+    QSet<AnnotationTableObject *> anns = ctx->getAnnotationObjects(true);
+    QSet<AnnotationTableObject *> autoAnns = ctx->getAutoAnnotationObjects();
+    QSet<Annotation*> restrictionSites;
+    foreach (AnnotationTableObject *ao, anns) {
+        bool isAutoAnnotation = autoAnns.contains(ao);
+        foreach (Annotation *a, ao->getAnnotations()) {
+            if (a->getType() == U2FeatureTypes::RestrictionSite) {
+                restrictionSites << a;
+                continue;
+            }
+            AnnotationSettings *as = asr->getAnnotationSettings(a->getData());
+            buildAnnotationItem(DrawAnnotationPass_DrawFill, a, -1, false, as);
+            buildAnnotationLabel(labelFont, a, as, isAutoAnnotation);
+        }
+    }
+
+    regionY.append(QVector<U2Region>());
+    foreach (Annotation* a, restrictionSites) {
+        AnnotationSettings *as = asr->getAnnotationSettings(a->getData());
+        buildAnnotationItem(DrawAnnotationPass_DrawFill, a,
+                            regionY.count() - 1, false, as);
+        buildAnnotationLabel(labelFont, a, as, true);
+    }
+}
+
 int CircularViewRenderArea::findOrbit(const QVector<U2Region> &location, Annotation *a) {
     int yLevel = 0;
     bool yFind = false;
diff --git a/src/plugins/circular_view/src/CircularView.h b/src/plugins/circular_view/src/CircularView.h
index cd771e9..9593bd5 100644
--- a/src/plugins/circular_view/src/CircularView.h
+++ b/src/plugins/circular_view/src/CircularView.h
@@ -38,14 +38,10 @@
 #include <U2View/AnnotatedDNAView.h>
 #include <U2View/GSequenceLineViewAnnotated.h>
 
-#include <QtGui/QFont>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QScrollBar>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QScrollBar>
-#endif
+#include <QFont>
+#include <QAction>
+#include <QScrollBar>
+
 
 namespace U2 {
 
@@ -161,7 +157,11 @@ protected:
     void resizeEvent(QResizeEvent *e);
     virtual void drawAll(QPaintDevice* pd);
     virtual U2Region getAnnotationYRange(Annotation *a, int ri, const AnnotationSettings *as) const;
-    void buildAnnotationItem(DrawAnnotationPass pass, Annotation *a, bool selected = false, const AnnotationSettings *as = NULL);
+
+    void buildAnnotationItem(DrawAnnotationPass pass, Annotation *a, int predefinedOrbit = -1, bool selected = false, const AnnotationSettings *as = NULL);
+    void buildAnnotationLabel( const QFont &font, Annotation *a, const AnnotationSettings *as, bool isAutoAnnotation = false);
+    void buildItems(QFont labelFont);
+
     virtual void drawAnnotations(QPainter& p);
 
     void redraw();
@@ -169,7 +169,6 @@ protected:
     void paintContent(QPainter& p, bool paintSelection = true, bool paintMarker = true);
     void paintContent(QPainter &p, int w, int h, bool paintSelection, bool paintMarker);
 
-    void buildAnnotationLabel( const QFont &font, Annotation *a, const AnnotationSettings *as, bool isAutoAnnotation = false);
     void drawSequenceName(QPainter& p);
     void drawRuler(QPainter& p);
     void drawRulerCoordinates(QPainter& p, int startPos, int seqLen);
@@ -225,6 +224,7 @@ private:
 
     CircularView* circularView;
     QList<QVector<U2Region> > regionY;
+
     QMap<Annotation *, CircularAnnotationItem *> circItems;
     TextItem* seqNameItem;
     TextItem* seqLenItem;
diff --git a/src/plugins/circular_view/src/CircularViewSettingsWidget.h b/src/plugins/circular_view/src/CircularViewSettingsWidget.h
index d951c7f..81ec0b0 100644
--- a/src/plugins/circular_view/src/CircularViewSettingsWidget.h
+++ b/src/plugins/circular_view/src/CircularViewSettingsWidget.h
@@ -24,7 +24,7 @@
 
 #include <U2Gui/U2SavableWidget.h>
 
-#include "ui/ui_CircularViewSettingsWidget.h"
+#include "ui_CircularViewSettingsWidget.h"
 
 namespace U2 {
 
diff --git a/src/plugins/circular_view/src/ui/CircularViewSettingsWidget.ui b/src/plugins/circular_view/src/CircularViewSettingsWidget.ui
similarity index 100%
rename from src/plugins/circular_view/src/ui/CircularViewSettingsWidget.ui
rename to src/plugins/circular_view/src/CircularViewSettingsWidget.ui
diff --git a/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.cpp b/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.cpp
index bbecf5c..a3d40e7 100644
--- a/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.cpp
+++ b/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.cpp
@@ -31,7 +31,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 = "17467583";
+const QString CircularViewSettingsWidgetFactory::GROUP_DOC_PAGE = "17470512";
 
 CircularViewSettingsWidgetFactory::CircularViewSettingsWidgetFactory(CircularViewContext* context)
     : ctx(context) {
diff --git a/src/plugins/circular_view/src/SetSequenceOriginDialog.h b/src/plugins/circular_view/src/SetSequenceOriginDialog.h
index 14b391d..c6950f4 100644
--- a/src/plugins/circular_view/src/SetSequenceOriginDialog.h
+++ b/src/plugins/circular_view/src/SetSequenceOriginDialog.h
@@ -22,7 +22,7 @@
 #ifndef _U2_SEQUENCE_ORIGIN_DIALOG_H_
 #define _U2_SEQUENCE_ORIGIN_DIALOG_H_
 
-#include <ui/ui_SetSequenceOriginDialog.h>
+#include <ui_SetSequenceOriginDialog.h>
 
 namespace U2 {
 
diff --git a/src/plugins/circular_view/src/ui/SetSequenceOriginDialog.ui b/src/plugins/circular_view/src/SetSequenceOriginDialog.ui
similarity index 100%
rename from src/plugins/circular_view/src/ui/SetSequenceOriginDialog.ui
rename to src/plugins/circular_view/src/SetSequenceOriginDialog.ui
diff --git a/src/plugins/circular_view/transl/english.ts b/src/plugins/circular_view/transl/english.ts
index ff74e87..1a49580 100644
--- a/src/plugins/circular_view/transl/english.ts
+++ b/src/plugins/circular_view/transl/english.ts
@@ -4,97 +4,97 @@
 <context>
     <name>CircularViewSettingsWidget</name>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="20"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="20"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="38"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="38"/>
         <source>Show title</source>
         <translation>Show title</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="48"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="48"/>
         <source>Show length</source>
         <translation>Show length</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="64"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="64"/>
         <source>Font</source>
         <translation>Font</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="84"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="84"/>
         <source>Size</source>
         <translation>Size</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="104"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="104"/>
         <source>Attribute</source>
         <translation>Attribute</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="150"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="150"/>
         <source>Bold</source>
         <translation>Bold</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="153"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="153"/>
         <source>B</source>
         <translation>B</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="193"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="193"/>
         <source>Inside</source>
         <translation>Inside</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="198"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="198"/>
         <source>Outside</source>
         <translation>Outside</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="203"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="203"/>
         <source>Inside/Outside</source>
         <translation>Inside/Outside</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="208"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="208"/>
         <source>None</source>
         <translation>None</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="292"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="292"/>
         <source>Label font size</source>
         <translation>Label font size</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="270"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="270"/>
         <source>Show ruler line</source>
         <translation>Show ruler line</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="222"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="222"/>
         <source>Font size</source>
         <translation>Font size</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="254"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="254"/>
         <source>Label position</source>
         <translation>Label position</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="280"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="280"/>
         <source>Show coordinates</source>
         <translation>Show coordinates</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="335"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="335"/>
         <source>There are no displayed Circular Views, so settings are hidden.</source>
         <translation>There are no displayed Circular Views, so settings are hidden.</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="363"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="363"/>
         <source>Open Circular View(s)</source>
         <translation>Open Circular View(s)</translation>
     </message>
@@ -126,17 +126,17 @@
 <context>
     <name>SetSequenceOriginDialog</name>
     <message>
-        <location filename="../src/ui/SetSequenceOriginDialog.ui" line="32"/>
+        <location filename="../src/SetSequenceOriginDialog.ui" line="32"/>
         <source>Set sequence origin</source>
         <translation>Set sequence origin</translation>
     </message>
     <message>
-        <location filename="../src/ui/SetSequenceOriginDialog.ui" line="40"/>
+        <location filename="../src/SetSequenceOriginDialog.ui" line="40"/>
         <source>New origin:</source>
         <translation>New origin:</translation>
     </message>
     <message>
-        <location filename="../src/ui/SetSequenceOriginDialog.ui" line="47"/>
+        <location filename="../src/SetSequenceOriginDialog.ui" line="47"/>
         <source>New sequence origin point. All annotations will be shifted relative to new origin point.</source>
         <translation>New sequence origin point. All annotations will be shifted relative to new origin point.</translation>
     </message>
@@ -240,17 +240,17 @@
 <context>
     <name>U2::CircularViewRenderArea</name>
     <message>
-        <location filename="../src/CircularView.cpp" line="493"/>
+        <location filename="../src/CircularView.cpp" line="490"/>
         <source>CircularView is NULL</source>
         <translation>CircularView is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularView.cpp" line="495"/>
+        <location filename="../src/CircularView.cpp" line="492"/>
         <source>Circular view settings are NULL</source>
         <translation>Circular view settings are NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularView.cpp" line="524"/>
+        <location filename="../src/CircularView.cpp" line="512"/>
         <source>circular view size %1 %2</source>
         <translation>circular view size %1 %2</translation>
     </message>
diff --git a/src/plugins/circular_view/transl/russian.ts b/src/plugins/circular_view/transl/russian.ts
index 1a334eb..bfa1622 100644
--- a/src/plugins/circular_view/transl/russian.ts
+++ b/src/plugins/circular_view/transl/russian.ts
@@ -4,97 +4,97 @@
 <context>
     <name>CircularViewSettingsWidget</name>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="20"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="20"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="38"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="38"/>
         <source>Show title</source>
         <translation>Показывать названия</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="48"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="48"/>
         <source>Show length</source>
         <translation>Показывать длину</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="64"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="64"/>
         <source>Font</source>
         <translation>Шрифт</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="84"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="84"/>
         <source>Size</source>
         <translation>Размер</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="104"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="104"/>
         <source>Attribute</source>
         <translation>Признак</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="150"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="150"/>
         <source>Bold</source>
         <translation>Жирный</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="153"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="153"/>
         <source>B</source>
         <translation>B</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="193"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="193"/>
         <source>Inside</source>
         <translation>Внутри</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="198"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="198"/>
         <source>Outside</source>
         <translation>Снаружи</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="203"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="203"/>
         <source>Inside/Outside</source>
         <translation>Внутри/Снаружи</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="208"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="208"/>
         <source>None</source>
         <translation>Нет</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="292"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="292"/>
         <source>Label font size</source>
         <translation>Размер шрифта</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="270"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="270"/>
         <source>Show ruler line</source>
         <translation>Показывать шкалу</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="222"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="222"/>
         <source>Font size</source>
         <translation>Размер шрифта</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="254"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="254"/>
         <source>Label position</source>
         <translation>Позиция ярлыка</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="280"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="280"/>
         <source>Show coordinates</source>
         <translation>Показывать координаты</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="335"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="335"/>
         <source>There are no displayed Circular Views, so settings are hidden.</source>
         <translation>Нет круговых видов, настройки скрыты.</translation>
     </message>
     <message>
-        <location filename="../src/ui/CircularViewSettingsWidget.ui" line="363"/>
+        <location filename="../src/CircularViewSettingsWidget.ui" line="363"/>
         <source>Open Circular View(s)</source>
         <translation>Открыть круговой вид(ы)</translation>
     </message>
@@ -126,17 +126,17 @@
 <context>
     <name>SetSequenceOriginDialog</name>
     <message>
-        <location filename="../src/ui/SetSequenceOriginDialog.ui" line="32"/>
+        <location filename="../src/SetSequenceOriginDialog.ui" line="32"/>
         <source>Set sequence origin</source>
         <translation>Установить последовательность отсчета</translation>
     </message>
     <message>
-        <location filename="../src/ui/SetSequenceOriginDialog.ui" line="40"/>
+        <location filename="../src/SetSequenceOriginDialog.ui" line="40"/>
         <source>New origin:</source>
         <translation>Отсчет с:</translation>
     </message>
     <message>
-        <location filename="../src/ui/SetSequenceOriginDialog.ui" line="47"/>
+        <location filename="../src/SetSequenceOriginDialog.ui" line="47"/>
         <source>New sequence origin point. All annotations will be shifted relative to new origin point.</source>
         <translation>Новая точка отсчета. Все аннотации будут сдвинуты относительно новой точки отсчета.</translation>
     </message>
@@ -240,17 +240,17 @@
 <context>
     <name>U2::CircularViewRenderArea</name>
     <message>
-        <location filename="../src/CircularView.cpp" line="493"/>
+        <location filename="../src/CircularView.cpp" line="490"/>
         <source>CircularView is NULL</source>
         <translation>CircularView is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularView.cpp" line="495"/>
+        <location filename="../src/CircularView.cpp" line="492"/>
         <source>Circular view settings are NULL</source>
         <translation>Circular view settings are NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularView.cpp" line="524"/>
+        <location filename="../src/CircularView.cpp" line="512"/>
         <source>circular view size %1 %2</source>
         <translation>Размер кругового вида %1 %2</translation>
     </message>
diff --git a/src/plugins/dbi_bam/CMakeLists.txt b/src/plugins/dbi_bam/CMakeLists.txt
new file mode 100644
index 0000000..b1b49dd
--- /dev/null
+++ b/src/plugins/dbi_bam/CMakeLists.txt
@@ -0,0 +1,6 @@
+set(UGENE_PLUGIN_NAME dbi_bam)
+
+include_directories(../../libs_3rdparty/samtools/src)
+include_directories(../../libs_3rdparty/samtools/src/samtools)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/dbi_bam/dbi_bam.pri b/src/plugins/dbi_bam/dbi_bam.pri
index e9bb1ba..18235ce 100644
--- a/src/plugins/dbi_bam/dbi_bam.pri
+++ b/src/plugins/dbi_bam/dbi_bam.pri
@@ -7,7 +7,9 @@ PLUGIN_VENDOR=Unipro
 include( ../../ugene_plugin_common.pri )
 
 use_bundled_zlib() {
-    INCLUDEPATH += ../../libs_3rdparty/zlib/src
+    macx: LIBS += -lzlib
+} else {
+    macx: LIBS += -lz
 }
 
 LIBS += -lugenedb -lsamtools
@@ -37,6 +39,13 @@ win32:DEFINES += _USE_MATH_DEFINES "inline=__inline" "__func__=__FUNCTION__" "R_
             LIBS += -lzlibd
         }
 
+        macx {
+            use_bundled_zlib() {
+                LIBS -= -lzlib
+                LIBS += -lzlibd
+            }
+        }
+
         unix:POST_TARGETDEPS -= ../../_release/libsamtools.a
         unix:POST_TARGETDEPS += ../../_debug/libsamtoolsd.a
     }
diff --git a/src/plugins/dbi_bam/src/BAMFormat.cpp b/src/plugins/dbi_bam/src/BAMFormat.cpp
index c25c986..59d4f39 100644
--- a/src/plugins/dbi_bam/src/BAMFormat.cpp
+++ b/src/plugins/dbi_bam/src/BAMFormat.cpp
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-//using 3rd-party zlib (not included in ugene bundle) on *nix
-#if defined(Q_OS_UNIX)
-#include <zlib.h>
-#else
-#include "zlib.h"
-#endif
+#include <3rdparty/zlib/zlib.h>
 
 #include <U2Core/DocumentModel.h>
 #include <U2Core/L10n.h>
@@ -49,7 +44,7 @@ BAMFormat::BAMFormat()
 : DbiDocumentFormat(
     BAM_DBI_ID,
     BaseDocumentFormats::BAM,
-    tr("BAM File"),
+    tr("BAM"),
     QStringList("bam"),
     DocumentFormatFlags(DocumentFormatFlag_NoPack) | DocumentFormatFlag_NoFullMemoryLoad
     | DocumentFormatFlag_Hidden | DocumentFormatFlag_SupportWriting)
diff --git a/src/plugins/dbi_bam/src/BgzfReader.h b/src/plugins/dbi_bam/src/BgzfReader.h
index 6608ced..80228ef 100644
--- a/src/plugins/dbi_bam/src/BgzfReader.h
+++ b/src/plugins/dbi_bam/src/BgzfReader.h
@@ -22,12 +22,7 @@
 #ifndef _U2_BAM_BGZF_READER_H_
 #define _U2_BAM_BGZF_READER_H_
 
-//using 3rd-party zlib (not included in ugene bundle) on *nix
-#if defined(Q_OS_UNIX)
-#include <zlib.h>
-#else
-#include "zlib.h"
-#endif
+#include <3rdparty/zlib/zlib.h>
 
 #include <U2Core/IOAdapter.h>
 #include "VirtualOffset.h"
diff --git a/src/plugins/dbi_bam/src/BgzfWriter.h b/src/plugins/dbi_bam/src/BgzfWriter.h
index e56f329..79fd619 100644
--- a/src/plugins/dbi_bam/src/BgzfWriter.h
+++ b/src/plugins/dbi_bam/src/BgzfWriter.h
@@ -22,12 +22,7 @@
 #ifndef _U2_BAM_BGZF_WRITER_H_
 #define _U2_BAM_BGZF_WRITER_H_
 
-//using 3rd-party zlib (not included in ugene bundle) on *nix
-#if defined(Q_OS_UNIX)
-#include <zlib.h>
-#else
-#include "zlib.h"
-#endif
+#include <3rdparty/zlib/zlib.h>
 
 #include <U2Core/IOAdapter.h>
 #include "VirtualOffset.h"
diff --git a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp
index 9b689f9..c52b49a 100644
--- a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp
+++ b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp
@@ -24,11 +24,13 @@
 #include <QTextEdit>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/FormatUtils.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/ProjectModel.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Task.h>
 #include <U2Core/TmpDirChecker.h>
 #include <U2Core/U2SafePoints.h>
@@ -36,7 +38,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/ObjectViewModel.h>
-#include <U2Core/QObjectScopedPointer.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "BAMDbiPlugin.h"
@@ -47,9 +49,15 @@
 namespace U2 {
 namespace BAM {
 
-ConvertToSQLiteDialog::ConvertToSQLiteDialog(const GUrl& _sourceUrl, BAMInfo& _bamInfo, bool sam) : QDialog(QApplication::activeWindow()), sourceUrl(_sourceUrl), bamInfo(_bamInfo) {
+static const QString DIR_HELPER_DOMAIN("ConvertToSQLiteDialog");
+
+ConvertToSQLiteDialog::ConvertToSQLiteDialog(const GUrl& _sourceUrl, BAMInfo& _bamInfo, bool sam)
+    : QDialog(QApplication::activeWindow()),
+      saveController(NULL),
+      sourceUrl(_sourceUrl),
+      bamInfo(_bamInfo) {
     ui.setupUi(this);
-    new HelpButton(this, ui.buttonBox, "17467668");
+    new HelpButton(this, ui.buttonBox, "17470600");
     ui.buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Import"));
     ui.buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -65,6 +73,8 @@ ConvertToSQLiteDialog::ConvertToSQLiteDialog(const GUrl& _sourceUrl, BAMInfo& _b
     ui.indexNotAvailableLabel->setStyleSheet( warningMessageStyleSheet );
     ui.referenceWarningLabel->setStyleSheet( warningMessageStyleSheet );
 
+    initSaveController();
+
     connect(ui.bamInfoButton, SIGNAL(clicked()), SLOT(sl_bamInfoButtonClicked()));
     connect(ui.refUrlButton, SIGNAL(clicked()), SLOT(sl_refUrlButtonClicked()));
     connect(ui.selectAllToolButton, SIGNAL(clicked()), SLOT(sl_selectAll()));
@@ -101,7 +111,6 @@ ConvertToSQLiteDialog::ConvertToSQLiteDialog(const GUrl& _sourceUrl, BAMInfo& _b
     }
     QPushButton* okButton = ui.buttonBox->button(QDialogButtonBox::Ok);
     ui.importUnmappedBox->setCheckState(bamInfo.isUnmappedSelected() ? Qt::Checked : Qt::Unchecked);
-    ui.destinationUrlEdit->setText(sourceUrl.dirPath() + "/" + sourceUrl.fileName() + ".ugenedb");
     ui.sourceUrlView->setText(QDir::cleanPath(sourceUrl.getURLString()));
     okButton->setFocus();
     connect(ui.tableWidget, SIGNAL(itemChanged(QTableWidgetItem*)), SLOT(sl_assemblyCheckChanged(QTableWidgetItem*)));
@@ -243,7 +252,7 @@ void ConvertToSQLiteDialog::sl_refUrlButtonClicked() {
     QString dir = currentUrl.dirPath() + "/" + currentUrl.baseFileName();
     QString value;
     #ifdef Q_OS_MAC
-        if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+        if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
             value = U2FileDialog::getOpenFileName(this, QObject::tr("Reference File"), dir, "", 0, QFileDialog::DontUseNativeDialog);
         } else
     #endif
@@ -297,6 +306,21 @@ bool ConvertToSQLiteDialog::checkReferencesState() {
     return true;
 }
 
+void ConvertToSQLiteDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = DIR_HELPER_DOMAIN;
+    config.defaultFileName = sourceUrl.dirPath() + "/" + sourceUrl.fileName() + ".ugenedb";
+    config.defaultFormatId = BaseDocumentFormats::UGENEDB;
+    config.fileDialogButton = ui.destinationUrlButton;
+    config.fileNameEdit = ui.destinationUrlEdit;
+    config.parentWidget = this;
+    config.saveTitle = BAMDbiPlugin::tr("Destination UGENEDB File");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::UGENEDB;
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
 namespace {
     bool checkWritePermissions(const QString &fileUrl) {
         QDir dir = QFileInfo(fileUrl).dir();
@@ -309,7 +333,7 @@ namespace {
 }
 
 void ConvertToSQLiteDialog::accept() {
-    destinationUrl = GUrl(ui.destinationUrlEdit->text());
+    destinationUrl = GUrl(saveController->getSaveFileName());
     bamInfo.setUnmappedSelected(ui.importUnmappedBox->checkState() == Qt::Checked);
     if(destinationUrl.isEmpty()) {
         ui.destinationUrlEdit->setFocus(Qt::OtherFocusReason);
@@ -372,20 +396,5 @@ void ConvertToSQLiteDialog::accept() {
     }
 }
 
-static const QString DIR_HELPER_DOMAIN("ConvertToSQLiteDialog");
-void ConvertToSQLiteDialog::on_destinationUrlButton_clicked() {
-    QString dir = sourceUrl.dirPath() + "/" + sourceUrl.baseFileName();
-        QString returnedValue;
-    #ifdef Q_OS_MAC
-        if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
-            returnedValue = U2FileDialog::getSaveFileName(this, BAMDbiPlugin::tr("Destination UGENEDB File"), dir, BAMDbiPlugin::tr("UGENEDB Files (*.ugenedb);;All Files (*)"), NULL, QFileDialog::DontConfirmOverwrite | QFileDialog::DontUseNativeDialog);
-        } else
-    #endif
-    returnedValue = U2FileDialog::getSaveFileName(this, BAMDbiPlugin::tr("Destination UGENEDB File"), dir, BAMDbiPlugin::tr("UGENEDB Files (*.ugenedb);;All Files (*)"), NULL, QFileDialog::DontConfirmOverwrite);
-    if(!returnedValue.isEmpty()) {
-        ui.destinationUrlEdit->setText(returnedValue);
-    }
-}
-
 } // namespace BAM
 } // namespace U2
diff --git a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.h b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.h
index 5ae67ca..b2cec24 100644
--- a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.h
+++ b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.h
@@ -22,17 +22,17 @@
 #ifndef _U2_BAM_CONVERT_TO_SQLITE_DIALOG_H_
 #define _U2_BAM_CONVERT_TO_SQLITE_DIALOG_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-#include <QtCore/QList>
+#include <QDialog>
+#include <QList>
+
 #include <U2Core/GUrl.h>
+
 #include "ui_ConvertToSQLiteDialog.h"
 
 namespace U2 {
+
+QT_FORWARD_DECLARE_CLASS(SaveDocumentController)
+
 namespace BAM {
 
 QT_FORWARD_DECLARE_CLASS(BAMInfo)
@@ -47,11 +47,11 @@ public:
     QString getReferenceUrl()const;
     bool        addToProject() const;
     void        hideAddToProjectOption();
+
 public slots:
     virtual void accept();
 
 private slots:
-    void on_destinationUrlButton_clicked();
     void sl_assemblyCheckChanged(QTableWidgetItem * item);
     void sl_bamInfoButtonClicked();
     void sl_refUrlButtonClicked();
@@ -65,15 +65,14 @@ private:
     void hideReferenceMessage();
     bool referenceFromFile();
     bool checkReferencesState();
+    void initSaveController();
 
-private:
-    Ui::ConvertToSQLiteDialog ui;
+    SaveDocumentController *saveController;
+    Ui_ConvertToSQLiteDialog ui;
 
     GUrl destinationUrl;
     GUrl sourceUrl;
     BAMInfo &bamInfo;
-
-    bool askIfDestFileExist;
 };
 
 } // namespace BAM
diff --git a/src/plugins/dbi_bam/src/Dbi.cpp b/src/plugins/dbi_bam/src/Dbi.cpp
index 0f4bab7..47b71c6 100644
--- a/src/plugins/dbi_bam/src/Dbi.cpp
+++ b/src/plugins/dbi_bam/src/Dbi.cpp
@@ -33,7 +33,7 @@
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/IOAdapterUtils.h>
 
-#include <sqlite3.h>
+#include <3rdparty/sqlite3/sqlite3.h>
 
 namespace U2 {
 namespace BAM {
diff --git a/src/plugins/dna_export/CMakeLists.txt b/src/plugins/dna_export/CMakeLists.txt
new file mode 100644
index 0000000..4c2544d
--- /dev/null
+++ b/src/plugins/dna_export/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME dna_export)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/dna_export/dna_export.pro b/src/plugins/dna_export/dna_export.pro
index 5b3e31a..fd1943e 100644
--- a/src/plugins/dna_export/dna_export.pro
+++ b/src/plugins/dna_export/dna_export.pro
@@ -28,17 +28,17 @@ HEADERS += src/CSVColumnConfiguration.h \
            src/ImportAnnotationsFromCSVTask.h \
            src/ImportQualityScoresTask.h \
            src/ImportQualityScoresWorker.h
-FORMS += src/ui/BaseContentDialog.ui \
-         src/ui/CSVColumnConfigurationDialog.ui \
-         src/ui/DNASequenceGeneratorDialog.ui \
-         src/ui/ExportBlastResultDialog.ui \
-         src/ui/ExportChromatogramDialog.ui \
-         src/ui/ExportMSA2MSADialog.ui \
-         src/ui/ExportMSA2SequencesDialog.ui \
-         src/ui/ExportSequences2MSADialog.ui \
-         src/ui/ExportSequencesDialog.ui \
-         src/ui/GetSequenceByIdDialog.ui \
-         src/ui/ImportAnnotationsFromCSVDialog.ui
+FORMS += src/BaseContentDialog.ui \
+         src/CSVColumnConfigurationDialog.ui \
+         src/DNASequenceGeneratorDialog.ui \
+         src/ExportBlastResultDialog.ui \
+         src/ExportChromatogramDialog.ui \
+         src/ExportMSA2MSADialog.ui \
+         src/ExportMSA2SequencesDialog.ui \
+         src/ExportSequences2MSADialog.ui \
+         src/ExportSequencesDialog.ui \
+         src/GetSequenceByIdDialog.ui \
+         src/ImportAnnotationsFromCSVDialog.ui
 SOURCES += src/CSVColumnConfigurationDialog.cpp \
            src/DNAExportPlugin.cpp \
            src/DNAExportPluginTests.cpp \
diff --git a/src/plugins/dna_export/src/ui/BaseContentDialog.ui b/src/plugins/dna_export/src/BaseContentDialog.ui
similarity index 100%
rename from src/plugins/dna_export/src/ui/BaseContentDialog.ui
rename to src/plugins/dna_export/src/BaseContentDialog.ui
diff --git a/src/plugins/dna_export/src/CSVColumnConfigurationDialog.cpp b/src/plugins/dna_export/src/CSVColumnConfigurationDialog.cpp
index b473091..b8337d6 100644
--- a/src/plugins/dna_export/src/CSVColumnConfigurationDialog.cpp
+++ b/src/plugins/dna_export/src/CSVColumnConfigurationDialog.cpp
@@ -37,7 +37,7 @@ CSVColumnConfigurationDialog::CSVColumnConfigurationDialog(QWidget* w, const Col
 : QDialog(w), config(_config)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467577");
+    new HelpButton(this, buttonBox, "17470505");
 
     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 7296fb5..608ccfa 100644
--- a/src/plugins/dna_export/src/CSVColumnConfigurationDialog.h
+++ b/src/plugins/dna_export/src/CSVColumnConfigurationDialog.h
@@ -22,7 +22,7 @@
 #ifndef _U2_CSV_COLUMN_CONFIGURATION_DIALOG_H_
 #define _U2_CSV_COLUMN_CONFIGURATION_DIALOG_H_
 
-#include <ui/ui_CSVColumnConfigurationDialog.h>
+#include <ui_CSVColumnConfigurationDialog.h>
 #include "CSVColumnConfiguration.h"
 
 namespace U2 {
diff --git a/src/plugins/dna_export/src/ui/CSVColumnConfigurationDialog.ui b/src/plugins/dna_export/src/CSVColumnConfigurationDialog.ui
similarity index 100%
rename from src/plugins/dna_export/src/ui/CSVColumnConfigurationDialog.ui
rename to src/plugins/dna_export/src/CSVColumnConfigurationDialog.ui
diff --git a/src/plugins/dna_export/src/DNASequenceGenerator.cpp b/src/plugins/dna_export/src/DNASequenceGenerator.cpp
index cf53f9b..151a3d3 100644
--- a/src/plugins/dna_export/src/DNASequenceGenerator.cpp
+++ b/src/plugins/dna_export/src/DNASequenceGenerator.cpp
@@ -254,7 +254,7 @@ QList<Task*> DNASequenceGeneratorTask::onGenerateTaskFinished( ) {
         IOAdapterUtils::url2io( cfg.getOutUrlString( ) ) );
 
     if (cfg.saveDoc) {
-        DocumentFormat *format = cfg.getDocumentFormat( );
+        DocumentFormat *format = AppContext::getDocumentFormatRegistry()->getFormatById(cfg.getDocumentFormatId());
         Document* doc = format->createNewLoadedDocument(iof, cfg.getOutUrlString(), stateInfo);
         CHECK_OP( stateInfo, resultTasks );
         const QSet<QString> &supportedFormats = format->getSupportedObjectTypes( );
diff --git a/src/plugins/dna_export/src/DNASequenceGenerator.h b/src/plugins/dna_export/src/DNASequenceGenerator.h
index e2dc26a..5723cf0 100644
--- a/src/plugins/dna_export/src/DNASequenceGenerator.h
+++ b/src/plugins/dna_export/src/DNASequenceGenerator.h
@@ -32,14 +32,13 @@ class GObject;
 class Document;
 class MAlignment;
 class DNAAlphabet;
-class DocumentFormat;
 class LoadDocumentTask;
 class SaveDocumentTask;
 
 class DNASequenceGeneratorConfig {
 public:
     DNASequenceGeneratorConfig()
-        : addToProj(false), saveDoc(true), format(NULL), alphabet(NULL), length(0), numSeqs(1), useRef(true), window(0), seed(0) {}
+        : addToProj(false), saveDoc(true), alphabet(NULL), length(0), numSeqs(1), useRef(true), window(0), seed(0) {}
 
     const DNAAlphabet* getAlphabet() const { assert(alphabet); return alphabet; }
 
@@ -57,7 +56,7 @@ public:
 
     QString getOutUrlString() const { return outUrl; }
 
-    DocumentFormat* getDocumentFormat() const { return format; }
+    const DocumentFormatId & getDocumentFormatId() const { return formatId; }
 
     bool addToProj;
     bool saveDoc;
@@ -66,7 +65,7 @@ public:
     // output sequence base name
     QString sequenceName;
     // output document format
-    DocumentFormat* format;
+    DocumentFormatId formatId;
     // output sequence alphabet
     const DNAAlphabet* alphabet;
     // output sequence length
diff --git a/src/plugins/dna_export/src/DNASequenceGeneratorDialog.cpp b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.cpp
index 8dc47fc..b2b3800 100644
--- a/src/plugins/dna_export/src/DNASequenceGeneratorDialog.cpp
+++ b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.cpp
@@ -26,12 +26,12 @@
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/GObjectTypes.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
 
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/SaveDocumentGroupController.h>
-#include <U2Core/QObjectScopedPointer.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "DNASequenceGenerator.h"
@@ -53,9 +53,11 @@ static QMap<char, qreal> initContent() {
 
 QMap<char, qreal> DNASequenceGeneratorDialog::content = initContent();
 
-DNASequenceGeneratorDialog::DNASequenceGeneratorDialog(QWidget* p) : QDialog(p) {
+DNASequenceGeneratorDialog::DNASequenceGeneratorDialog(QWidget* p)
+    : QDialog(p),
+      saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467800");
+    new HelpButton(this, buttonBox, "17470733");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Generate"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -64,19 +66,7 @@ DNASequenceGeneratorDialog::DNASequenceGeneratorDialog(QWidget* p) : QDialog(p)
     referenceButton->setChecked(true);
     sl_refButtonToggled(true);
 
-    SaveDocumentGroupControllerConfig conf;
-    conf.dfc.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.dfc.supportedObjectTypes << GObjectTypes::SEQUENCE << GObjectTypes::MULTIPLE_ALIGNMENT;
-    conf.dfc.allowPartialTypeMapping = true;
-    conf.parentWidget = this;
-    conf.fileNameEdit = outputEdit;
-    conf.formatCombo = formatCombo;
-    conf.fileDialogButton = outputButton;
-    conf.defaultFormatId = BaseDocumentFormats::FASTA;
-    //conf.defaultFileName = defaultFileName;
-    conf.saveTitle = tr("Save sequences");
-    saveGroupContoller = new SaveDocumentGroupController(conf, this);
+    initSaveController();
 
     generateButton = buttonBox->button(QDialogButtonBox::Ok);
     cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
@@ -86,7 +76,6 @@ DNASequenceGeneratorDialog::DNASequenceGeneratorDialog(QWidget* p) : QDialog(p)
     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) {
@@ -97,6 +86,25 @@ void DNASequenceGeneratorDialog::sl_stateChanged(int state) {
     }
 }
 
+void DNASequenceGeneratorDialog::initSaveController(){
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::FASTA;
+    config.fileDialogButton = outputButton;
+    config.fileNameEdit = outputEdit;
+    config.formatCombo = formatCombo;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save sequences");
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::SEQUENCE
+                                           << GObjectTypes::MULTIPLE_ALIGNMENT;
+    formatConstraints.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+    formatConstraints.allowPartialTypeMapping = true;
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
+
 void DNASequenceGeneratorDialog::sl_browseReference() {
     LastUsedDirHelper lod;
     QString filter = DNASequenceGenerator::prepareReferenceFileFilter();
@@ -116,9 +124,9 @@ void DNASequenceGeneratorDialog::sl_generate() {
     cfg.numSeqs = seqNumSpin->value();
     cfg.useRef = referenceButton->isChecked();
     cfg.refUrl = inputEdit->text();
-    cfg.outUrl = outputEdit->text();
+    cfg.outUrl = saveController->getSaveFileName();
     cfg.sequenceName = "Sequence ";
-    cfg.format = saveGroupContoller->getFormatToSave();
+    cfg.formatId = saveController->getFormatIdToSave();
     cfg.content = content;
     cfg.window = windowSpinBox->value();
     if(seedCheckBox->isChecked()) {
@@ -159,7 +167,7 @@ void DNASequenceGeneratorDialog::sl_refButtonToggled(bool checked) {
 BaseContentDialog::BaseContentDialog(QMap<char, qreal>& percentMap_, QWidget* p)
 : QDialog(p), percentMap(percentMap_) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467800");
+    new HelpButton(this, buttonBox, "17470733");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Save"));
 
     percentASpin->setValue(percentMap.value('A')*100.0);
diff --git a/src/plugins/dna_export/src/DNASequenceGeneratorDialog.h b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.h
index 5495218..8e14191 100644
--- a/src/plugins/dna_export/src/DNASequenceGeneratorDialog.h
+++ b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.h
@@ -25,23 +25,26 @@
 #include "ui_DNASequenceGeneratorDialog.h"
 #include "ui_BaseContentDialog.h"
 
-
 namespace U2 {
 
-class SaveDocumentGroupController;
+class SaveDocumentController;
 
 class DNASequenceGeneratorDialog : public QDialog, public Ui_DNASequenceGeneratorDialog {
     Q_OBJECT
 public:
     DNASequenceGeneratorDialog(QWidget* p=NULL);
+
 private slots:
     void sl_browseReference();
     void sl_configureContent();
     void sl_generate();
     void sl_refButtonToggled(bool checked);
     void sl_stateChanged(int state);
+
 private:
-    SaveDocumentGroupController* saveGroupContoller;
+    void initSaveController();
+
+    SaveDocumentController* saveController;
     static QMap<char, qreal> content;
     QPushButton* generateButton;
     QPushButton* cancelButton;
diff --git a/src/plugins/dna_export/src/ui/DNASequenceGeneratorDialog.ui b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.ui
similarity index 100%
rename from src/plugins/dna_export/src/ui/DNASequenceGeneratorDialog.ui
rename to src/plugins/dna_export/src/DNASequenceGeneratorDialog.ui
diff --git a/src/plugins/dna_export/src/ExportBlastResultDialog.cpp b/src/plugins/dna_export/src/ExportBlastResultDialog.cpp
index b027f06..e727919 100644
--- a/src/plugins/dna_export/src/ExportBlastResultDialog.cpp
+++ b/src/plugins/dna_export/src/ExportBlastResultDialog.cpp
@@ -19,31 +19,27 @@
  * MA 02110-1301, USA.
  */
 
-#include "ExportBlastResultDialog.h"
+#include <QMessageBox>
+#include <QPushButton>
 
 #include <U2Core/AppContext.h>
-#include <U2Core/Settings.h>
 #include <U2Core/BaseDocumentFormats.h>
-#include <U2Gui/DialogUtils.h>
-#include <U2Gui/SaveDocumentGroupController.h>
-#include <U2Gui/HelpButton.h>
 #include <U2Core/L10n.h>
+#include <U2Core/Settings.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <U2Gui/DialogUtils.h>
+#include <U2Gui/HelpButton.h>
+#include <U2Gui/SaveDocumentController.h>
 
-#define SETTINGS_ROOT QString("dna_export/")
+#include "ExportBlastResultDialog.h"
 
 namespace U2 {
 
-ExportBlastResultDialog::ExportBlastResultDialog(QWidget* p, const QString& defaultUrl): QDialog(p) {
+ExportBlastResultDialog::ExportBlastResultDialog(QWidget* p, const QString& defaultUrl)
+    : QDialog(p),
+      saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467728");
+    new HelpButton(this, buttonBox, "17470661");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -55,36 +51,39 @@ ExportBlastResultDialog::ExportBlastResultDialog(QWidget* p, const QString& defa
 
     nameIdBox->setCurrentIndex(0);
 
-
-    SaveDocumentGroupControllerConfig conf;
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.dfc.supportedObjectTypes+=GObjectTypes::MULTIPLE_ALIGNMENT;
-    conf.fileDialogButton = fileButton;
-    conf.formatCombo = formatCombo;
-    conf.fileNameEdit = fileNameEdit;
-    conf.parentWidget = this;
-    conf.defaultFileName = defaultUrl;
-    conf.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
-    saveContoller = new SaveDocumentGroupController(conf, this);
-
-
+    initSaveController(defaultUrl);
 }
 
-
 void ExportBlastResultDialog::accept() {
-    if (fileNameEdit->text().isEmpty()) {
+    if (saveController->getSaveFileName().isEmpty()) {
         QMessageBox::critical(this, L10N::errorTitle(), tr("File name is empty!"));
         return;
     }
 
-    url = saveContoller->getSaveFileName();
-    format = saveContoller->getFormatIdToSave();
+    url = saveController->getSaveFileName();
+    format = saveController->getFormatIdToSave();
     addToProjectFlag = addToProjectBox->isChecked();
     qualiferId = nameIdBox->currentText();
     addRefFlag = addRefBox->isChecked();
     QDialog::accept();
 }
 
+void ExportBlastResultDialog::initSaveController(const QString &defaultUrl) {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = defaultUrl;
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
+    config.fileDialogButton = fileButton;
+    config.fileNameEdit = fileNameEdit;
+    config.formatCombo = formatCombo;
+    config.parentWidget = this;
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
+
 void ExportBlastResultDialog::setOkButtonText(const QString& text) const {
     QPushButton* okButton = buttonBox->button(QDialogButtonBox::Ok);
     okButton->setText(text);
diff --git a/src/plugins/dna_export/src/ExportBlastResultDialog.h b/src/plugins/dna_export/src/ExportBlastResultDialog.h
index 859d79f..0ffd301 100644
--- a/src/plugins/dna_export/src/ExportBlastResultDialog.h
+++ b/src/plugins/dna_export/src/ExportBlastResultDialog.h
@@ -22,30 +22,26 @@
 #ifndef _U2_EXPORT_BLAST_RESULT_DIALOG_H_
 #define _U2_EXPORT_BLAST_RESULT_DIALOG_H_
 
+#include <QDialog>
+
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-#include <ui/ui_ExportBlastResultDialog.h>
+#include <ui_ExportBlastResultDialog.h>
 
 namespace U2 {
 
-class SaveDocumentGroupController;
+class SaveDocumentController;
 
-class ExportBlastResultDialog : public QDialog, Ui_ExportBlastResultDialog {
+class ExportBlastResultDialog : public QDialog, private Ui_ExportBlastResultDialog {
     Q_OBJECT
 public:
-    ExportBlastResultDialog(QWidget* p, const QString& defaultUrl = QString() );
+    ExportBlastResultDialog(QWidget* p, const QString& defaultUrl = QString());
 
     void setOkButtonText(const QString& text) const;
     void setFileLabelText(const QString& text) const;
 
     virtual void accept();
 
-
 public:
     QString url;
     DocumentFormatId format;
@@ -55,8 +51,9 @@ public:
     bool    addRefFlag;
 
 private:
-    SaveDocumentGroupController* saveContoller;
+    void initSaveController(const QString &defaultUrl);
 
+    SaveDocumentController* saveController;
 };
 
 }//namespace
diff --git a/src/plugins/dna_export/src/ui/ExportBlastResultDialog.ui b/src/plugins/dna_export/src/ExportBlastResultDialog.ui
similarity index 100%
rename from src/plugins/dna_export/src/ui/ExportBlastResultDialog.ui
rename to src/plugins/dna_export/src/ExportBlastResultDialog.ui
diff --git a/src/plugins/dna_export/src/ExportChromatogramDialog.cpp b/src/plugins/dna_export/src/ExportChromatogramDialog.cpp
index 2355262..c170d1a 100644
--- a/src/plugins/dna_export/src/ExportChromatogramDialog.cpp
+++ b/src/plugins/dna_export/src/ExportChromatogramDialog.cpp
@@ -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/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
@@ -37,8 +31,7 @@
 
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/SaveDocumentGroupController.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "ExportChromatogramDialog.h"
 #include "ExportUtils.h"
@@ -47,43 +40,46 @@
 
 namespace U2 {
 
-ExportChromatogramDialog::ExportChromatogramDialog(QWidget* p, const GUrl& fileUrl): QDialog(p) {
+ExportChromatogramDialog::ExportChromatogramDialog(QWidget* p, const GUrl& fileUrl) :
+    QDialog(p),
+    saveController(NULL)
+{
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467600");
+    new HelpButton(this, buttonBox, "17470529");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     addToProjectFlag = true;
 
-    QString newUrl = GUrlUtils::getNewLocalUrlByExtention(fileUrl, "chromatogram", ".scf", "_copy");
-    fileNameEdit->setText(newUrl);
-    formatCombo->addItem(BaseDocumentFormats::SCF.toUpper());
-    connect(fileButton, SIGNAL(clicked()), SLOT(sl_onBrowseClicked()));
+    initSaveController(fileUrl);
 }
 
-void ExportChromatogramDialog::sl_onBrowseClicked() {
-    LastUsedDirHelper lod;
-    QString filter;
+void ExportChromatogramDialog::initSaveController(const GUrl &fileUrl) {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = GUrlUtils::getNewLocalUrlByExtention(fileUrl, "chromatogram", ".scf", "_copy");
+    config.defaultFormatId = BaseDocumentFormats::SCF;
+    config.formatCombo = formatCombo;
+    config.fileDialogButton = fileButton;
+    config.fileNameEdit = fileNameEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select a file");
 
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Select a file"), lod.dir, "*.scf");
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    fileNameEdit->setText( lod.url );
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::SCF;
 
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
-
 void ExportChromatogramDialog::accept() {
-    if (fileNameEdit->text().isEmpty()) {
+    if (saveController->getSaveFileName().isEmpty()) {
         QMessageBox::critical(this, L10N::errorTitle(), tr("File name is empty!"));
         return;
     }
 
-    url = fileNameEdit->text();
+    url = saveController->getSaveFileName();
     addToProjectFlag = addToProjectBox->isChecked();
     reversed = reverseBox->isChecked();
     complemented = complementBox->isChecked();
+    format = saveController->getFormatIdToSave();
 
     QDialog::accept();
 }
diff --git a/src/plugins/dna_export/src/ExportChromatogramDialog.h b/src/plugins/dna_export/src/ExportChromatogramDialog.h
index 8545cfa..46e521d 100644
--- a/src/plugins/dna_export/src/ExportChromatogramDialog.h
+++ b/src/plugins/dna_export/src/ExportChromatogramDialog.h
@@ -22,41 +22,34 @@
 #ifndef _U2_EXPORT_CHROMATOGRAM_DIALOG_H_
 #define _U2_EXPORT_CHROMATOGRAM_DIALOG_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 #include <U2Core/global.h>
 
-#include "ui/ui_ExportChromatogramDialog.h"
+#include "ui_ExportChromatogramDialog.h"
 
 namespace U2 {
 
 class GUrl;
-class SaveDocumentGroupController;
+class SaveDocumentController;
 
 class ExportChromatogramDialog : public QDialog, Ui_ExportChromatogramDialog {
     Q_OBJECT
 public:
     ExportChromatogramDialog(QWidget* p, const GUrl& fileName);
 
-    virtual void accept();
+    void accept();
 
-public:
     QString url;
     DocumentFormatId format;
     bool addToProjectFlag;
     bool reversed;
     bool complemented;
 
-private slots:
-    void sl_onBrowseClicked();
-
 private:
-    SaveDocumentGroupController* saveController;
+    void initSaveController(const GUrl &fileUrl);
+
+    SaveDocumentController *saveController;
 };
 
 }//namespace
diff --git a/src/plugins/dna_export/src/ui/ExportChromatogramDialog.ui b/src/plugins/dna_export/src/ExportChromatogramDialog.ui
similarity index 100%
rename from src/plugins/dna_export/src/ui/ExportChromatogramDialog.ui
rename to src/plugins/dna_export/src/ExportChromatogramDialog.ui
diff --git a/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp b/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp
index a98bbbe..96487de 100644
--- a/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp
+++ b/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp
@@ -19,49 +19,36 @@
  * MA 02110-1301, USA.
  */
 
-#include "ExportMSA2MSADialog.h"
+#include <QMessageBox>
+#include <QPushButton>
 
 #include <U2Core/AppContext.h>
-#include <U2Core/Settings.h>
 #include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNATranslation.h>
+#include <U2Core/L10n.h>
+#include <U2Core/Settings.h>
+
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/GUIUtils.h>
-#include <U2Gui/SaveDocumentGroupController.h>
 #include <U2Gui/HelpButton.h>
-#include <U2Core/L10n.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#endif
-
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNATranslation.h>
+#include <U2Gui/SaveDocumentController.h>
 
+#include "ExportMSA2MSADialog.h"
 
 namespace U2 {
 
-ExportMSA2MSADialog::ExportMSA2MSADialog(const QString& defaultFileName, const DocumentFormatId& f, bool wholeAlignmentOnly, QWidget* p):  QDialog(p) {
+ExportMSA2MSADialog::ExportMSA2MSADialog(const QString& defaultFileName, const DocumentFormatId& defaultFormatId, bool wholeAlignmentOnly, QWidget* p)
+    : QDialog(p),
+      saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467510");
+    new HelpButton(this, buttonBox, "17470437");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     addToProjectFlag = true;
 
-    SaveDocumentGroupControllerConfig conf;
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.dfc.supportedObjectTypes+=GObjectTypes::MULTIPLE_ALIGNMENT;
-    conf.fileDialogButton = fileButton;
-    conf.formatCombo = formatCombo;
-    conf.fileNameEdit = fileNameEdit;
-    conf.parentWidget = this;
-    conf.defaultFileName = defaultFileName;
-    conf.defaultFormatId = f;
-    conf.saveTitle = tr("Export alignment");
-    saveContoller = new SaveDocumentGroupController(conf, this);
+    initSaveController(defaultFileName, defaultFormatId);
 
     const DNAAlphabet* al = AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
     DNATranslationRegistry* tr = AppContext::getDNATranslationRegistry();
@@ -80,12 +67,11 @@ ExportMSA2MSADialog::ExportMSA2MSADialog(const QString& defaultFileName, const D
 
     int height = layout()->minimumSize().height();
     setMaximumHeight(height);
-
 }
 
 void ExportMSA2MSADialog::updateModel(){
-    formatId = saveContoller->getFormatIdToSave();
-    file = saveContoller->getSaveFileName();
+    formatId = saveController->getFormatIdToSave();
+    file = saveController->getSaveFileName();
     translationTable = tableID[translationCombo->currentIndex()];
     addToProjectFlag = addDocumentButton->isChecked();
     exportWholeAlignment = wholeRangeButton->isChecked();
@@ -93,7 +79,7 @@ void ExportMSA2MSADialog::updateModel(){
 
 
 void ExportMSA2MSADialog::sl_exportClicked() {
-    if (fileNameEdit->text().isEmpty()) {
+    if (saveController->getSaveFileName().isEmpty()) {
         QMessageBox::warning(this, L10N::warningTitle(), tr("File is empty"));
         fileNameEdit->setFocus();
         return;
@@ -102,4 +88,21 @@ void ExportMSA2MSADialog::sl_exportClicked() {
     accept();
 }
 
-}//namespace
+void ExportMSA2MSADialog::initSaveController(const QString& defaultFileName, const DocumentFormatId& defaultFormatId) {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = defaultFileName;
+    config.defaultFormatId = defaultFormatId;
+    config.fileDialogButton = fileButton;
+    config.fileNameEdit = fileNameEdit;
+    config.formatCombo = formatCombo;
+    config.parentWidget = this;
+    config.saveTitle = tr("Export alignment");
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
+
+}   // namespace
diff --git a/src/plugins/dna_export/src/ExportMSA2MSADialog.h b/src/plugins/dna_export/src/ExportMSA2MSADialog.h
index 72ec947..b1d4e0a 100644
--- a/src/plugins/dna_export/src/ExportMSA2MSADialog.h
+++ b/src/plugins/dna_export/src/ExportMSA2MSADialog.h
@@ -24,11 +24,11 @@
 
 #include <U2Core/global.h>
 
-#include "ui/ui_ExportMSA2MSADialog.h"
+#include "ui_ExportMSA2MSADialog.h"
 
 namespace U2 {
 
-class SaveDocumentGroupController;
+class SaveDocumentController;
 
 class ExportMSA2MSADialog : public QDialog, Ui_ExportMSA2MSADialog {
     Q_OBJECT
@@ -46,7 +46,9 @@ private slots:
     void sl_exportClicked();
 
 private:
-    SaveDocumentGroupController* saveContoller;
+    void initSaveController(const QString &defaultFileName, const DocumentFormatId &defaultFormatId);
+
+    SaveDocumentController* saveController;
     QList<QString> tableID;
 };
 
diff --git a/src/plugins/dna_export/src/ui/ExportMSA2MSADialog.ui b/src/plugins/dna_export/src/ExportMSA2MSADialog.ui
similarity index 100%
rename from src/plugins/dna_export/src/ui/ExportMSA2MSADialog.ui
rename to src/plugins/dna_export/src/ExportMSA2MSADialog.ui
diff --git a/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp b/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp
index 8814169..e1af67e 100644
--- a/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp
+++ b/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp
@@ -19,63 +19,64 @@
  * MA 02110-1301, USA.
  */
 
-#include "ExportMSA2SequencesDialog.h"
+#include <QMessageBox>
+#include <QPushButton>
 
 #include <U2Core/AppContext.h>
-#include <U2Core/Settings.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/L10n.h>
+#include <U2Core/Settings.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
-#include <U2Gui/SaveDocumentGroupController.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <U2Gui/SaveDocumentController.h>
 
-#define SETTINGS_ROOT QString("dna_export/")
+#include "ExportMSA2SequencesDialog.h"
 
 namespace U2 {
 
-ExportMSA2SequencesDialog::ExportMSA2SequencesDialog(QWidget* p): QDialog(p) {
+ExportMSA2SequencesDialog::ExportMSA2SequencesDialog(QWidget* p)
+    : QDialog(p),
+      saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467509");
+    new HelpButton(this, buttonBox, "17470436");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     trimGapsFlag = false;
     addToProjectFlag = true;
 
-    SaveDocumentGroupControllerConfig conf;
-    conf.dfc.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.dfc.supportedObjectTypes+=GObjectTypes::SEQUENCE;
-    conf.fileDialogButton = fileButton;
-    conf.formatCombo = formatCombo;
-    conf.fileNameEdit = fileNameEdit;
-    conf.parentWidget = this;
-    conf.defaultFormatId = BaseDocumentFormats::FASTA;
-    saveContoller = new SaveDocumentGroupController(conf, this);
-
+    initSaveController();
 }
 
 void ExportMSA2SequencesDialog::accept() {
-    if (fileNameEdit->text().isEmpty()) {
+    if (saveController->getSaveFileName().isEmpty()) {
         QMessageBox::critical(this, L10N::errorTitle(), tr("File name is empty!"));
         return;
     }
 
-    url = saveContoller->getSaveFileName();
-    format = saveContoller->getFormatIdToSave();
+    url = saveController->getSaveFileName();
+    format = saveController->getFormatIdToSave();
     trimGapsFlag = trimGapsRB->isChecked();
     addToProjectFlag = addToProjectBox->isChecked();
 
     QDialog::accept();
 }
 
+void ExportMSA2SequencesDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::FASTA;
+    config.fileDialogButton = fileButton;
+    config.fileNameEdit = fileNameEdit;
+    config.formatCombo = formatCombo;
+    config.parentWidget = this;
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::SEQUENCE;
+    formatConstraints.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
 
-}//namespace
+}   // namespace U2
diff --git a/src/plugins/dna_export/src/ExportMSA2SequencesDialog.h b/src/plugins/dna_export/src/ExportMSA2SequencesDialog.h
index 0943535..791112d 100644
--- a/src/plugins/dna_export/src/ExportMSA2SequencesDialog.h
+++ b/src/plugins/dna_export/src/ExportMSA2SequencesDialog.h
@@ -22,20 +22,17 @@
 #ifndef _U2_EXPORT_MSA2SEQ_DIALOG_H_
 #define _U2_EXPORT_MSA2SEQ_DIALOG_H_
 
+#include <QDialog>
+
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-#include <ui/ui_ExportMSA2SequencesDialog.h>
+#include <ui_ExportMSA2SequencesDialog.h>
 
 namespace U2 {
 
-class SaveDocumentGroupController;
+class SaveDocumentController;
 
-class ExportMSA2SequencesDialog : public QDialog, Ui_ExportMSA2SequencesDialog {
+class ExportMSA2SequencesDialog : public QDialog, private Ui_ExportMSA2SequencesDialog {
     Q_OBJECT
 public:
     ExportMSA2SequencesDialog(QWidget* p);
@@ -49,7 +46,9 @@ public:
     bool                addToProjectFlag;
 
 private:
-    SaveDocumentGroupController* saveContoller;
+    void initSaveController();
+
+    SaveDocumentController* saveController;
 };
 
 }//namespace
diff --git a/src/plugins/dna_export/src/ui/ExportMSA2SequencesDialog.ui b/src/plugins/dna_export/src/ExportMSA2SequencesDialog.ui
similarity index 100%
rename from src/plugins/dna_export/src/ui/ExportMSA2SequencesDialog.ui
rename to src/plugins/dna_export/src/ExportMSA2SequencesDialog.ui
diff --git a/src/plugins/dna_export/src/ExportProjectViewItems.cpp b/src/plugins/dna_export/src/ExportProjectViewItems.cpp
index 6710530..e17cd6c 100644
--- a/src/plugins/dna_export/src/ExportProjectViewItems.cpp
+++ b/src/plugins/dna_export/src/ExportProjectViewItems.cpp
@@ -212,7 +212,7 @@ void ExportProjectViewItemsContoller::addExportImportMenu(QMenu& m) {
     if (sub != NULL) {
         sub->setObjectName(ACTION_PROJECT__EXPORT_MENU);
         sub->menuAction()->setObjectName(ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION);
-        QAction* beforeAction = GUIUtils::findActionAfter(m.actions(), ACTION_PROJECT__EDIT_MENU);
+        QAction* beforeAction = GUIUtils::findActionAfter(m.actions(), PROJECT_MENU_SEPARATOR_1);
         m.insertMenu(beforeAction, sub);
     }
 }
diff --git a/src/plugins/dna_export/src/ExportSequenceViewItems.cpp b/src/plugins/dna_export/src/ExportSequenceViewItems.cpp
index c0eab17..f0c9fa1 100644
--- a/src/plugins/dna_export/src/ExportSequenceViewItems.cpp
+++ b/src/plugins/dna_export/src/ExportSequenceViewItems.cpp
@@ -756,7 +756,7 @@ void ADVExportContext::fetchSequencesFromRemoteDB(const QString & listId) {
         QString dir = dlg->getDirectory();
         Task *t;
         if(dlg->isAddToProject()) {
-            t = new LoadRemoteDocumentAndOpenViewTask(listId, db, dir);
+            t = new LoadRemoteDocumentAndAddToProjectTask(listId, db, dir);
         } else {
             t = new LoadRemoteDocumentTask(listId, db, dir);
         }
diff --git a/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp b/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp
index ff2d775..5c5ea25 100644
--- a/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp
+++ b/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp
@@ -19,31 +19,27 @@
  * MA 02110-1301, USA.
  */
 
-#include "ExportSequences2MSADialog.h"
+#include <QMessageBox>
+#include <QPushButton>
 
 #include <U2Core/AppContext.h>
-#include <U2Core/Settings.h>
 #include <U2Core/BaseDocumentFormats.h>
-#include <U2Gui/DialogUtils.h>
-#include <U2Gui/HelpButton.h>
-#include <U2Gui/SaveDocumentGroupController.h>
 #include <U2Core/L10n.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <U2Core/Settings.h>
 
+#include <U2Gui/DialogUtils.h>
+#include <U2Gui/HelpButton.h>
+#include <U2Gui/SaveDocumentController.h>
 
-#define SETTINGS_ROOT QString("dna_export/")
+#include "ExportSequences2MSADialog.h"
 
 namespace U2 {
 
-ExportSequences2MSADialog::ExportSequences2MSADialog(QWidget* p, const QString& defaultUrl): QDialog(p) {
+ExportSequences2MSADialog::ExportSequences2MSADialog(QWidget* p, const QString& defaultUrl)
+    : QDialog(p),
+      saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467508");
+    new HelpButton(this, buttonBox, "17470435");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     okButton = buttonBox->button(QDialogButtonBox::Ok);
@@ -51,34 +47,39 @@ ExportSequences2MSADialog::ExportSequences2MSADialog(QWidget* p, const QString&
     addToProjectFlag = true;
     useGenbankHeader = false;
 
-    SaveDocumentGroupControllerConfig conf;
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.dfc.supportedObjectTypes+=GObjectTypes::MULTIPLE_ALIGNMENT;
-    conf.fileDialogButton = fileButton;
-    conf.formatCombo = formatCombo;
-    conf.fileNameEdit = fileNameEdit;
-    conf.parentWidget = this;
-    conf.defaultFileName = defaultUrl;
-    conf.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
-    saveContoller = new SaveDocumentGroupController(conf, this);
-
+    initSaveController(defaultUrl);
 }
 
-
 void ExportSequences2MSADialog::accept() {
-    if (fileNameEdit->text().isEmpty()) {
+    if (saveController->getSaveFileName().isEmpty()) {
         QMessageBox::critical(this, L10N::errorTitle(), tr("File name is empty!"));
         return;
     }
 
-    url = saveContoller->getSaveFileName();
-    format = saveContoller->getFormatIdToSave();
+    url = saveController->getSaveFileName();
+    format = saveController->getFormatIdToSave();
     addToProjectFlag = addToProjectBox->isChecked();
     useGenbankHeader = genbankBox->isChecked();
 
     QDialog::accept();
 }
 
+void ExportSequences2MSADialog::initSaveController(const QString &defaultUrl) {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = defaultUrl;
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;;
+    config.fileDialogButton = fileButton;
+    config.fileNameEdit = fileNameEdit;
+    config.formatCombo = formatCombo;
+    config.parentWidget = this;
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
+
 void ExportSequences2MSADialog::setOkButtonText(const QString& text) const {
     okButton->setText(text);
 }
diff --git a/src/plugins/dna_export/src/ExportSequences2MSADialog.h b/src/plugins/dna_export/src/ExportSequences2MSADialog.h
index 25d73b2..a7c4798 100644
--- a/src/plugins/dna_export/src/ExportSequences2MSADialog.h
+++ b/src/plugins/dna_export/src/ExportSequences2MSADialog.h
@@ -22,20 +22,17 @@
 #ifndef _U2_EXPORT_SEQ2MSA_DIALOG_H_
 #define _U2_EXPORT_SEQ2MSA_DIALOG_H_
 
+#include <QDialog>
+
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-#include <ui/ui_ExportSequences2MSADialog.h>
+#include <ui_ExportSequences2MSADialog.h>
 
 namespace U2 {
 
-class SaveDocumentGroupController;
+class SaveDocumentController;
 
-class ExportSequences2MSADialog : public QDialog, Ui_ExportSequences2MSADialog {
+class ExportSequences2MSADialog : public QDialog, private Ui_ExportSequences2MSADialog {
     Q_OBJECT
 public:
     ExportSequences2MSADialog(QWidget* p, const QString& defaultUrl = QString() );
@@ -45,7 +42,6 @@ public:
 
     virtual void accept();
 
-
 public:
     QString url;
     DocumentFormatId format;
@@ -53,9 +49,10 @@ public:
     bool    useGenbankHeader;
 
 private:
-    SaveDocumentGroupController* saveContoller;
-    QPushButton* okButton;
+    void initSaveController(const QString &defaultUrl);
 
+    SaveDocumentController* saveController;
+    QPushButton* okButton;
 };
 
 }//namespace
diff --git a/src/plugins/dna_export/src/ui/ExportSequences2MSADialog.ui b/src/plugins/dna_export/src/ExportSequences2MSADialog.ui
similarity index 100%
rename from src/plugins/dna_export/src/ui/ExportSequences2MSADialog.ui
rename to src/plugins/dna_export/src/ExportSequences2MSADialog.ui
diff --git a/src/plugins/dna_export/src/ExportSequencesDialog.cpp b/src/plugins/dna_export/src/ExportSequencesDialog.cpp
index 7561b55..e408f58 100644
--- a/src/plugins/dna_export/src/ExportSequencesDialog.cpp
+++ b/src/plugins/dna_export/src/ExportSequencesDialog.cpp
@@ -34,7 +34,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/GUIUtils.h>
 #include <U2Gui/HelpButton.h>
-#include <U2Gui/SaveDocumentGroupController.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "ExportSequencesDialog.h"
 
@@ -44,27 +44,17 @@ namespace U2 {
 
 ExportSequencesDialog::ExportSequencesDialog( bool m, bool allowComplement, bool allowTranslation,
     bool allowBackTranslation, const QString& defaultFileName, const QString &sourceFileBaseName,
-    const DocumentFormatId& id, QWidget* p )
-    : QDialog( p ), sequenceName( sourceFileBaseName )
-{
+    const DocumentFormatId& defaultFormatId, QWidget* p )
+    : QDialog(p),
+      sequenceName(sourceFileBaseName),
+      saveController(NULL),
+      defaultFileName(defaultFileName) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467507");
+    new HelpButton(this, buttonBox, "17470434");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    SaveDocumentGroupControllerConfig conf;
-    conf.dfc.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.dfc.supportedObjectTypes += GObjectTypes::SEQUENCE;
-    conf.parentWidget = this;
-    conf.fileNameEdit = fileNameEdit;
-    conf.formatCombo = formatCombo;
-    conf.fileDialogButton = fileButton;
-    conf.defaultFormatId = id;
-    conf.defaultFileName = defaultFileName;
-    conf.saveTitle = tr("Export Sequences");
-    conf.objectName = QString( );
-    saveGroupContoller = new SaveDocumentGroupController(conf, this);
+    initSaveController(defaultFormatId);
 
     multiMode = m;
     strand = TriState_Yes;
@@ -97,7 +87,6 @@ ExportSequencesDialog::ExportSequencesDialog( bool m, bool allowComplement, bool
 
     if (!multiMode) {
         saveModeBox->setEnabled(false);
-        //saveModeBox->setHidden(true);
     }
 
     if (!allowBackTranslation) {
@@ -165,23 +154,20 @@ ExportSequencesDialog::ExportSequencesDialog( bool m, bool allowComplement, bool
         }
     }
 
-    formatId = id;
+    formatId = defaultFormatId;
     QPushButton* exportButton = buttonBox->button(QDialogButtonBox::Ok);
     connect(exportButton, SIGNAL(clicked()), SLOT(sl_exportClicked()));
     connect(translateButton, SIGNAL(clicked()), SLOT(sl_translationTableEnabler()));
     connect(translationTableButton, SIGNAL(clicked()), SLOT(sl_translationTableEnabler()));
-    connect(formatCombo, SIGNAL(currentIndexChanged(int)), SLOT(sl_formatChanged(int)));
 
     int height = layout()->minimumSize().height();
     setMaximumHeight(height);
 }
 
-
-void ExportSequencesDialog::sl_formatChanged(int) {
-    QString text = saveGroupContoller->getFormatIdToSave();
+void ExportSequencesDialog::sl_formatChanged(const QString &newFormatId) {
     DocumentFormatRegistry *dfr = AppContext::getDocumentFormatRegistry();
     SAFE_POINT(NULL != dfr, "Invalid document format registry", );
-    if (dfr->getFormatById(text)->getSupportedObjectTypes().contains(GObjectTypes::ANNOTATION_TABLE)) {
+    if (dfr->getFormatById(newFormatId)->getSupportedObjectTypes().contains(GObjectTypes::ANNOTATION_TABLE)) {
         withAnnotationsBox->setEnabled(true);
         withAnnotationsBox->setChecked(true);
     } else {
@@ -190,6 +176,26 @@ void ExportSequencesDialog::sl_formatChanged(int) {
     }
 }
 
+void ExportSequencesDialog::initSaveController(const DocumentFormatId &defaultFormatId) {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = defaultFileName;
+    config.defaultFormatId = defaultFormatId;
+    config.fileDialogButton = fileButton;
+    config.fileNameEdit = fileNameEdit;
+    config.formatCombo = formatCombo;
+    config.parentWidget = this;
+    config.saveTitle = tr("Export Sequences");
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::SEQUENCE;
+    formatConstraints.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+
+    connect(saveController, SIGNAL(si_formatChanged(const QString &)), SLOT(sl_formatChanged(const QString &)));
+}
+
 void ExportSequencesDialog::updateModel() {
     strand = directStrandButton->isChecked() ? TriState_Yes : complementStrandButton->isChecked() ? TriState_No : TriState_Unknown;
     translate = translateButton->isChecked();
@@ -199,15 +205,15 @@ void ExportSequencesDialog::updateModel() {
     merge = mergeButton->isChecked();
     mergeGap = merge ? mergeSpinBox->value() : 0;
 
-    file = fileNameEdit->text();
+    file = saveController->getSaveFileName();
     QFileInfo fi(file);
     if( fi.isRelative() ) {
         // save it in root sequence directory
-        file = QFileInfo(saveGroupContoller->getDefaultFileName()).absoluteDir().absolutePath() + "/" + file;
+        file = QFileInfo(defaultFileName).absoluteDir().absolutePath() + "/" + file;
     }
     sequenceName = ( customSeqNameBox->isChecked( ) ) ? sequenceNameEdit->text( ) : QString( );
 
-    formatId = saveGroupContoller->getFormatIdToSave();
+    formatId = saveController->getFormatIdToSave();
     useSpecificTable = translationTableButton->isChecked();
     if (translate) {
         translationTable = tableID[translationTableCombo->currentIndex()];
@@ -223,9 +229,8 @@ void ExportSequencesDialog::updateModel() {
     withAnnotations = withAnnotationsBox->isChecked() && withAnnotationsBox->isEnabled();
 }
 
-
 void ExportSequencesDialog::sl_exportClicked() {
-    if (fileNameEdit->text().isEmpty()) {
+    if (saveController->getSaveFileName().isEmpty()) {
         QMessageBox::warning(this, L10N::warningTitle(), tr("File is empty"));
         fileNameEdit->setFocus();
         return;
diff --git a/src/plugins/dna_export/src/ExportSequencesDialog.h b/src/plugins/dna_export/src/ExportSequencesDialog.h
index e001528..958252a 100644
--- a/src/plugins/dna_export/src/ExportSequencesDialog.h
+++ b/src/plugins/dna_export/src/ExportSequencesDialog.h
@@ -22,18 +22,15 @@
 #ifndef _U2_EXPORT_SEQUENCES_DIALOG_H_
 #define _U2_EXPORT_SEQUENCES_DIALOG_H_
 
+#include <QDialog>
+
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-#include <ui/ui_ExportSequencesDialog.h>
+#include <ui_ExportSequencesDialog.h>
 
 namespace U2 {
 
-class SaveDocumentGroupController;
+class SaveDocumentController;
 
 class ExportSequencesDialog : public QDialog, Ui_ExportSequencesDialog {
     Q_OBJECT
@@ -70,10 +67,13 @@ public:
 private slots:
     void sl_exportClicked();
     void sl_translationTableEnabler();
-    void sl_formatChanged(int);
+    void sl_formatChanged(const QString &newFormatId);
 
 private:
-    SaveDocumentGroupController* saveGroupContoller;
+    void initSaveController(const DocumentFormatId &defaultFormatId);
+
+    SaveDocumentController* saveController;
+    const QString defaultFileName;
     QList<QString> tableID;
 };
 
diff --git a/src/plugins/dna_export/src/ui/ExportSequencesDialog.ui b/src/plugins/dna_export/src/ExportSequencesDialog.ui
similarity index 100%
rename from src/plugins/dna_export/src/ui/ExportSequencesDialog.ui
rename to src/plugins/dna_export/src/ExportSequencesDialog.ui
diff --git a/src/plugins/dna_export/src/GetSequenceByIdDialog.cpp b/src/plugins/dna_export/src/GetSequenceByIdDialog.cpp
index c2d0e60..c315a40 100644
--- a/src/plugins/dna_export/src/GetSequenceByIdDialog.cpp
+++ b/src/plugins/dna_export/src/GetSequenceByIdDialog.cpp
@@ -40,7 +40,7 @@ namespace U2 {
 
 GetSequenceByIdDialog::GetSequenceByIdDialog(QWidget *w): QDialog(w) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467727");
+    new HelpButton(this, buttonBox, "17470660");
 
     connect(toolButton, SIGNAL(clicked()), SLOT(sl_saveFilenameButtonClicked()));
     QString defaultPath = AppContext::getAppSettings()->getUserAppsSettings()->getDownloadDirPath();
diff --git a/src/plugins/dna_export/src/GetSequenceByIdDialog.h b/src/plugins/dna_export/src/GetSequenceByIdDialog.h
index d68eb97..fbc7c1a 100644
--- a/src/plugins/dna_export/src/GetSequenceByIdDialog.h
+++ b/src/plugins/dna_export/src/GetSequenceByIdDialog.h
@@ -22,7 +22,7 @@
 #ifndef GET_SEQUENCE_BY_ID_
 #define GET_SEQUENCE_BY_ID_
 
-#include "ui/ui_GetSequenceByIdDialog.h"
+#include "ui_GetSequenceByIdDialog.h"
 
 namespace U2 {
 
diff --git a/src/plugins/dna_export/src/GetSequenceByIdDialog.ui b/src/plugins/dna_export/src/GetSequenceByIdDialog.ui
new file mode 100644
index 0000000..2601648
--- /dev/null
+++ b/src/plugins/dna_export/src/GetSequenceByIdDialog.ui
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>getSequenceByIdDialog</class>
+ <widget class="QDialog" name="getSequenceByIdDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>464</width>
+    <height>184</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Get Sequences by ID</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="sizeConstraint">
+    <enum>QLayout::SetMinAndMaxSize</enum>
+   </property>
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetMinAndMaxSize</enum>
+     </property>
+     <item row="0" column="0">
+      <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>The sequences from selected BLAST results will be downloaded from
+NCBI Genbank by their GI identifier
+</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMinAndMaxSize</enum>
+       </property>
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>Save to directory:</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLineEdit" name="directoryEdit"/>
+       </item>
+       <item>
+        <widget class="QToolButton" name="toolButton">
+         <property name="text">
+          <string>...</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item row="2" column="0">
+      <widget class="QCheckBox" name="addBox">
+       <property name="text">
+        <string>Add to project</string>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <property name="sizeConstraint">
+      <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>
+       </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>getSequenceByIdDialog</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>getSequenceByIdDialog</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/ImportAnnotationsFromCSVDialog.cpp b/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.cpp
index 3f5dba8..d0f03ab 100644
--- a/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.cpp
+++ b/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.cpp
@@ -25,9 +25,11 @@
 
 #include <U2Core/Annotation.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/L10n.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -35,9 +37,8 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/SaveDocumentGroupController.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/ScriptEditorDialog.h>
-#include <U2Core/QObjectScopedPointer.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "CSVColumnConfigurationDialog.h"
@@ -58,10 +59,10 @@ namespace U2 {
 #define SKIP_LINES_PREFIX   QString("skip_lines_prefix")
 
 ImportAnnotationsFromCSVDialog::ImportAnnotationsFromCSVDialog(QWidget* w)
-: QDialog (w)
-{
+    : QDialog (w),
+      saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467577");
+    new HelpButton(this, buttonBox, "17470505");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -76,16 +77,7 @@ ImportAnnotationsFromCSVDialog::ImportAnnotationsFromCSVDialog(QWidget* w)
     connect(columnSeparatorRadioButton, SIGNAL(toggled(bool)), SLOT(sl_separatorRadioToggled(bool)));
     connect(scriptRadioButton, SIGNAL(toggled(bool)), SLOT(sl_scriptRadioToggled(bool)));
 
-    SaveDocumentGroupControllerConfig conf;
-    conf.dfc.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    conf.dfc.supportedObjectTypes += GObjectTypes::ANNOTATION_TABLE;
-    conf.fileDialogButton = saveFileButton;
-    conf.fileNameEdit = saveFileName;
-    conf.saveTitle = tr("Save imported annotations to");
-    conf.parentWidget = this;
-    conf.formatCombo = saveFormatCombo;
-
-    saveGroupController = new SaveDocumentGroupController(conf, this);
+    initSaveController();
 
     sl_separatorChanged(separatorEdit->text());
     sl_prefixToSkipChanged(prefixToSkipEdit->text());
@@ -200,8 +192,8 @@ void ImportAnnotationsFromCSVDialog::toTaskConfig(ImportAnnotationsFromCSVTaskCo
     assert(result() == QDialog::Accepted);
     toParsingConfig(config.parsingOptions);
     config.csvFile = readFileName->text();
-    config.df = saveGroupController->getFormatToSave();
-    config.dstFile = saveGroupController->getSaveFileName();
+    config.formatId = saveController->getFormatIdToSave();
+    config.dstFile = saveController->getSaveFileName();
     config.addToProject = addToProjectCheck->isChecked();
 }
 
@@ -243,6 +235,22 @@ void ImportAnnotationsFromCSVDialog::sl_linesToSkipChanged(int) {
     guessSeparator(true);
 }
 
+void ImportAnnotationsFromCSVDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.fileDialogButton = saveFileButton;
+    config.fileNameEdit = saveFileName;
+    config.formatCombo = saveFormatCombo;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save imported annotations to");
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::ANNOTATION_TABLE;
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+    formatConstraints.formatsToExclude << BaseDocumentFormats::VECTOR_NTI_SEQUENCE;
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
+
 void ImportAnnotationsFromCSVDialog::sl_guessSeparatorClicked() {
     guessSeparator(false);
 }
@@ -379,17 +387,13 @@ bool ImportAnnotationsFromCSVDialog::checkSeparators(bool silent) {
 }
 
 QString ImportAnnotationsFromCSVDialog::checkOutputGroup() {
-    QString outFile = saveGroupController->getSaveFileName();
+    QString outFile = saveController->getSaveFileName();
     if (outFile.isEmpty()) {
         QMessageBox::critical(this, L10N::errorTitle(), tr("Output file name is not set!"));
         saveFileName->setFocus();
         return QString();
     }
-    if (saveGroupController->getFormatToSave() == NULL) {
-        QMessageBox::critical(this, L10N::errorTitle(), tr("Output file format is not set!"));
-        saveFormatCombo->setFocus();
-        return QString();
-    }
+
     return outFile;
 }
 
diff --git a/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.h b/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.h
index 3037327..7719318 100644
--- a/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.h
+++ b/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.h
@@ -22,7 +22,7 @@
 #ifndef _U2_IMPORT_ANNOTATIONS_FROM_CSV_DIALOG_H_
 #define _U2_IMPORT_ANNOTATIONS_FROM_CSV_DIALOG_H_
 
-#include <ui/ui_ImportAnnotationsFromCSVDialog.h>
+#include <ui_ImportAnnotationsFromCSVDialog.h>
 
 #include "CSVColumnConfiguration.h"
 
@@ -30,11 +30,11 @@ class QTreeWidgetItem;
 
 namespace U2 {
 
-class SaveDocumentGroupController;
-class ImportAnnotationsFromCSVTaskConfig;
 class CSVParsingConfig;
+class ImportAnnotationsFromCSVTaskConfig;
+class SaveDocumentController;
 
-class ImportAnnotationsFromCSVDialog : public QDialog, Ui_ImportAnnotationsFromCSVDialog {
+class ImportAnnotationsFromCSVDialog : public QDialog, private Ui_ImportAnnotationsFromCSVDialog {
     Q_OBJECT
 public:
     ImportAnnotationsFromCSVDialog(QWidget* w);
@@ -45,7 +45,6 @@ public:
 public slots:
     virtual void accept();
 
-
 private slots:
     void sl_readFileClicked();
     void sl_previewClicked();
@@ -61,6 +60,8 @@ private slots:
     void sl_linesToSkipChanged(int);
 
 private:
+    void initSaveController();
+
     // returns input file name if no errors found or empty string
     QString checkInputGroup(bool silentFail);
     // returns output file name if no errors found or empty string
@@ -68,7 +69,6 @@ private:
 
     bool checkSeparators(bool silentFail);
 
-
     void prepareColumnsConfig(int numColumnsHint);
     QTableWidgetItem* createHeaderItem(int column) const;
     QString getHeaderItemText(int column) const;
@@ -78,7 +78,7 @@ private:
     void guessSeparator(bool silentFail);
     void preview(bool silentFail);
 
-    SaveDocumentGroupController* saveGroupController;
+    SaveDocumentController* saveController;
     QList<ColumnConfig>          columnsConfig;
 
     // script text used to parse separator
diff --git a/src/plugins/dna_export/src/ui/ImportAnnotationsFromCSVDialog.ui b/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.ui
similarity index 100%
rename from src/plugins/dna_export/src/ui/ImportAnnotationsFromCSVDialog.ui
rename to src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.ui
diff --git a/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.cpp b/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.cpp
index cd18f2e..bca0526 100644
--- a/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.cpp
+++ b/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.cpp
@@ -56,13 +56,11 @@ ImportAnnotationsFromCSVTask::ImportAnnotationsFromCSVTask(ImportAnnotationsFrom
 : Task(tr("Import annotations from CSV"), TaskFlags_NR_FOSCOE),
 config(_config), readTask(NULL), writeTask(NULL), addTask(NULL)
 {
-    assert(config.df != NULL);
     GCOUNTER(cvar,tvar,"ImportAnnotationsFromCSVTask");
     readTask = new ReadCSVAsAnnotationsTask(config.csvFile, config.parsingOptions);
     addSubTask(readTask);
 }
 
-
 static void adjustRelations(AnnotationTableObject *ao) {
     if (!ao->findRelatedObjectsByType(GObjectTypes::SEQUENCE).isEmpty()) {
         return; //nothing to adjust -> already has relation
@@ -166,11 +164,16 @@ QMap<QString, QList<SharedAnnotationData> > ImportAnnotationsFromCSVTask::prepar
 }
 
 Document * ImportAnnotationsFromCSVTask::prepareNewDocument(const QMap<QString, QList<SharedAnnotationData> > &groups) {
+    DocumentFormat *format = AppContext::getDocumentFormatRegistry()->getFormatById(config.formatId);
+    CHECK(NULL != format, NULL);
+
     IOAdapterId ioId = IOAdapterUtils::url2io(config.dstFile);
     IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(ioId);
+
     U2OpStatus2Log os;
-    Document *result = config.df->createNewLoadedDocument(iof, config.dstFile, os);
+    Document *result = format->createNewLoadedDocument(iof, config.dstFile, os);
     CHECK_OP(os, NULL);
+
     AnnotationTableObject* ao = new AnnotationTableObject("Annotations", result->getDbiRef());
     foreach (const QString &groupName, groups.keys()) {
         ao->addAnnotations(groups[groupName], groupName);
diff --git a/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.h b/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.h
index ebe5b66..6df792f 100644
--- a/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.h
+++ b/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.h
@@ -30,8 +30,6 @@
 
 namespace U2 {
 
-class DocumentFormat;
-
 // FIXME: implement splitToken as a default value for parsing script (i.e line.split(<separator>))
 class CSVParsingConfig {
 public:
@@ -50,12 +48,12 @@ public:
 
 class ImportAnnotationsFromCSVTaskConfig {
 public:
-    ImportAnnotationsFromCSVTaskConfig() : addToProject(true), df(NULL) {}
+    ImportAnnotationsFromCSVTaskConfig() : addToProject(true) {}
 
     QString             csvFile;
     QString             dstFile;
     bool                addToProject;
-    DocumentFormat*     df;
+    DocumentFormatId    formatId;
 
     CSVParsingConfig parsingOptions;
 };
diff --git a/src/plugins/dna_export/src/ui/GetSequenceByIdDialog.ui b/src/plugins/dna_export/src/ui/GetSequenceByIdDialog.ui
deleted file mode 100644
index 387a136..0000000
--- a/src/plugins/dna_export/src/ui/GetSequenceByIdDialog.ui
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>getSequenceByIdDialog</class>
- <widget class="QDialog" name="getSequenceByIdDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>350</width>
-    <height>150</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Get Sequences by ID</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0">
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>The sequences from selected BLAST results will be downloaded from
- NCBI Genbank by their GI identifier
-</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
-      <layout class="QHBoxLayout" name="horizontalLayout">
-       <item>
-        <widget class="QLabel" name="label">
-         <property name="text">
-          <string>Save to directory:</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QLineEdit" name="directoryEdit"/>
-       </item>
-       <item>
-        <widget class="QToolButton" name="toolButton">
-         <property name="text">
-          <string>...</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item row="2" column="0">
-      <widget class="QCheckBox" name="addBox">
-       <property name="text">
-        <string>Add to project</string>
-       </property>
-       <property name="checked">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </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>
-    <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="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>getSequenceByIdDialog</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>getSequenceByIdDialog</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/transl/english.ts b/src/plugins/dna_export/transl/english.ts
index 32ecbcc..376e306 100644
--- a/src/plugins/dna_export/transl/english.ts
+++ b/src/plugins/dna_export/transl/english.ts
@@ -4,45 +4,45 @@
 <context>
     <name>BaseContentDialog</name>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="20"/>
+        <location filename="../src/BaseContentDialog.ui" line="20"/>
         <source>Set Base Content</source>
         <translation>Set Base Content</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="26"/>
+        <location filename="../src/BaseContentDialog.ui" line="26"/>
         <source>Base conetnt</source>
         <translation>Base conetnt</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="55"/>
+        <location filename="../src/BaseContentDialog.ui" line="55"/>
         <source>A</source>
         <translation>A</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="68"/>
-        <location filename="../src/ui/BaseContentDialog.ui" line="107"/>
-        <location filename="../src/ui/BaseContentDialog.ui" line="146"/>
-        <location filename="../src/ui/BaseContentDialog.ui" line="185"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="94"/>
+        <location filename="../src/BaseContentDialog.ui" line="94"/>
         <source>C</source>
         <translation>C</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="133"/>
+        <location filename="../src/BaseContentDialog.ui" line="133"/>
         <source>G</source>
         <translation>G</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="172"/>
+        <location filename="../src/BaseContentDialog.ui" line="172"/>
         <source>T</source>
         <translation>T</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="199"/>
+        <location filename="../src/BaseContentDialog.ui" line="199"/>
         <source>GC Skew</source>
         <translation>GC Skew</translation>
     </message>
@@ -50,72 +50,72 @@
 <context>
     <name>CSVColumnConfigurationDialog</name>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="23"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="23"/>
         <source>Column role</source>
         <translation>Column role</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="36"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="36"/>
         <source>Annotation start position</source>
         <translation>Annotation start position</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="46"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="46"/>
         <source>Add offset</source>
         <translation>Add offset</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="59"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="59"/>
         <source> bp</source>
         <translation> bp</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="72"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="72"/>
         <source>Annotation end position</source>
         <translation>Annotation end position</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="82"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="82"/>
         <source>Inclusive</source>
         <translation>Inclusive</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="92"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="92"/>
         <source>Annotation length</source>
         <translation>Annotation length</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="99"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="99"/>
         <source>Complement strand mark</source>
         <translation>Complement strand mark</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="109"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="109"/>
         <source>Mark value</source>
         <translation>Mark value</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="126"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="126"/>
         <source>Annotation name</source>
         <translation>Annotation name</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="133"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="133"/>
         <source>Qualifier</source>
         <translation>Qualifier</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="29"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="29"/>
         <source>Ignore this column</source>
         <translation>Ignore this column</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="14"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="14"/>
         <source>Select the Role of the Column</source>
         <translation>Select the Role of the Column</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="174"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="174"/>
         <source>Annotation group</source>
         <translation>Annotation group</translation>
     </message>
@@ -123,84 +123,84 @@
 <context>
     <name>DNASequenceGeneratorDialog</name>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="14"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="14"/>
         <source>Generate Sequence</source>
         <translation>Generate Sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="26"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="26"/>
         <source>Parameters</source>
         <translation>Parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="34"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="34"/>
         <source>Length</source>
         <translation>Length</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="50"/>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="76"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="50"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="76"/>
         <source> bp</source>
         <translation> bp</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="66"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="66"/>
         <source>Window size</source>
         <translation>Window size</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="128"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="128"/>
         <source>Number of sequences</source>
         <translation>Number of sequences</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="135"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="135"/>
         <source>Initialize random generator manually</source>
         <translation>Initialize random generator manually</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="188"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="188"/>
         <source>Content</source>
         <translation>Content</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="194"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="194"/>
         <source>Reference</source>
         <translation>Reference</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="212"/>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="288"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="212"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="288"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="221"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="221"/>
         <source>Manual</source>
         <translation>Manual</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="236"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="236"/>
         <source>Configure...</source>
         <translation>Configure...</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="267"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="267"/>
         <source>Output</source>
         <translation>Output</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="273"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="273"/>
         <source>Output File</source>
         <translation>Output File</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="297"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="297"/>
         <source>Format</source>
         <translation>Format</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="323"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="323"/>
         <source>Add to project</source>
         <translation>Add to project</translation>
     </message>
@@ -208,37 +208,37 @@
 <context>
     <name>ExportBlastResultDialog</name>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="14"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="14"/>
         <source>Export BLAST Result to Multiple Alignment</source>
         <translation>Export BLAST Result to Multiple Alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="42"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="42"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="35"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="49"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="49"/>
         <source>File format to use</source>
         <translation>File format to use</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="25"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="25"/>
         <source>Qualifier to use as name</source>
         <translation>Qualifier to use as name</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="64"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="64"/>
         <source>Add reference to alignment</source>
         <translation>Add reference to alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="71"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="71"/>
         <source>Add document to the project</source>
         <translation>Add document to the project</translation>
     </message>
@@ -246,37 +246,37 @@
 <context>
     <name>ExportChromatogramDialog</name>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="14"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="14"/>
         <source>Export Chromatogram File</source>
         <translation>Export Chromatogram File</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="25"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="25"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="35"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="42"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="42"/>
         <source>File format to use</source>
         <translation>File format to use</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="56"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="56"/>
         <source>Reversed</source>
         <translation>Reversed</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="66"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="66"/>
         <source>Complemented</source>
         <translation>Complemented</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="75"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="75"/>
         <source>Add document to the project</source>
         <translation>Add document to the project</translation>
     </message>
@@ -339,129 +339,129 @@
 <context>
     <name>ImportAnnotationsFromCSVDialog</name>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="25"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="25"/>
         <source>File to read</source>
         <translation>File to read</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="35"/>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="60"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="35"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="60"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="44"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="44"/>
         <source>Results</source>
         <translation>Results</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="50"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="50"/>
         <source>Result file</source>
         <translation>Result file</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="67"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="67"/>
         <source>File format</source>
         <translation>File format</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="77"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="77"/>
         <source>Add result file to project</source>
         <translation>Add result file to project</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="96"/>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="111"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="96"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="111"/>
         <source>Column separator</source>
         <translation>Column separator</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="103"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="103"/>
         <source>File parsing</source>
         <translation>File parsing</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="140"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="140"/>
         <source>,</source>
         <translation>,</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="150"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="150"/>
         <source>Guess</source>
         <translation>Guess</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="157"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="157"/>
         <source>Script</source>
         <translation>Script</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="177"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="177"/>
         <source>Edit</source>
         <translation>Edit</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="184"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="184"/>
         <source>First  lines to skip</source>
         <translation>First  lines to skip</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="207"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="207"/>
         <source>Do not skip</source>
         <translation>Do not skip</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="210"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="210"/>
         <source> line(s)</source>
         <translation> line(s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="220"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="220"/>
         <source>Skip all lines starts with the text</source>
         <translation>Skip all lines starts with the text</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="246"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="246"/>
         <source>#</source>
         <translation>#</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="266"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="266"/>
         <source>Remove quotes</source>
         <translation>Remove quotes</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="283"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="283"/>
         <source>Default annotation name</source>
         <translation>Default annotation name</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="296"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="296"/>
         <source>misc_feature</source>
         <translation>misc_feature</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="259"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="259"/>
         <source>Interpret multiple separators like a single separator (try when separator is a whitespace character)</source>
         <translation>Interpret multiple separators like a single separator (try when separator is a whitespace character)</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="14"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="14"/>
         <source>Import Annotations from CSV</source>
         <translation>Import Annotations from CSV</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="313"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="313"/>
         <source>Results preview</source>
         <translation>Results preview</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="333"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="333"/>
         <source>Preview</source>
         <translation>Preview</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="357"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="357"/>
         <source>Raw file preview:</source>
         <translation>Raw file preview:</translation>
     </message>
@@ -641,23 +641,23 @@
 <context>
     <name>U2::BaseContentDialog</name>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="163"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="171"/>
         <source>Save</source>
         <translation>Save</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="246"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="269"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="254"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="277"/>
         <source>Base content</source>
         <translation>Base content</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="246"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="254"/>
         <source>Incorrect GC Skew value</source>
         <translation>Incorrect GC Skew value</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="269"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="277"/>
         <source>Total percentage has to be 100 %</source>
         <translation>Total percentage has to be 100 %</translation>
     </message>
@@ -723,44 +723,44 @@
 <context>
     <name>U2::DNASequenceGeneratorDialog</name>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="59"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="61"/>
         <source>Generate</source>
         <translation>Generate</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="60"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="62"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="78"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="96"/>
         <source>Save sequences</source>
         <translation>Save sequences</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="103"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="111"/>
         <source>Open file</source>
         <translation>Open file</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="130"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="139"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="144"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="138"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="147"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="152"/>
         <source>DNA Sequence Generator</source>
         <translation>DNA Sequence Generator</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="130"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="138"/>
         <source>Windows size bigger than sequence length</source>
         <translation>Windows size bigger than sequence length</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="139"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="147"/>
         <source>Reference url is not specified.</source>
         <translation>Reference url is not specified.</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="144"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="152"/>
         <source>Output file is no specified.</source>
         <translation>Output file is no specified.</translation>
     </message>
@@ -838,17 +838,17 @@
 <context>
     <name>U2::ExportBlastResultDialog</name>
     <message>
-        <location filename="../src/ExportBlastResultDialog.cpp" line="47"/>
+        <location filename="../src/ExportBlastResultDialog.cpp" line="43"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ExportBlastResultDialog.cpp" line="48"/>
+        <location filename="../src/ExportBlastResultDialog.cpp" line="44"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ExportBlastResultDialog.cpp" line="76"/>
+        <location filename="../src/ExportBlastResultDialog.cpp" line="59"/>
         <source>File name is empty!</source>
         <translation>File name is empty!</translation>
     </message>
@@ -856,22 +856,22 @@
 <context>
     <name>U2::ExportChromatogramDialog</name>
     <message>
-        <location filename="../src/ExportChromatogramDialog.cpp" line="53"/>
+        <location filename="../src/ExportChromatogramDialog.cpp" line="49"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ExportChromatogramDialog.cpp" line="54"/>
+        <location filename="../src/ExportChromatogramDialog.cpp" line="50"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ExportChromatogramDialog.cpp" line="68"/>
+        <location filename="../src/ExportChromatogramDialog.cpp" line="65"/>
         <source>Select a file</source>
         <translation>Select a file</translation>
     </message>
     <message>
-        <location filename="../src/ExportChromatogramDialog.cpp" line="79"/>
+        <location filename="../src/ExportChromatogramDialog.cpp" line="74"/>
         <source>File name is empty!</source>
         <translation>File name is empty!</translation>
     </message>
@@ -887,67 +887,67 @@
 <context>
     <name>U2::ExportMSA2MSADialog</name>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="20"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="20"/>
         <source>Export Nucleic Alignment to Amino Translation</source>
         <translation>Export Nucleic Alignment to Amino Translation</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="28"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="28"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="38"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="38"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="45"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="45"/>
         <source>File format to use</source>
         <translation>File format to use</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="55"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="55"/>
         <source>Amino translation</source>
         <translation>Amino translation</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="67"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="67"/>
         <source>Add document to the project</source>
         <translation>Add document to the project</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="77"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="77"/>
         <source>Export range</source>
         <translation>Export range</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="83"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="83"/>
         <source>Whole alignment</source>
         <translation>Whole alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="93"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="93"/>
         <source>Selected rows</source>
         <translation>Selected rows</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2MSADialog.cpp" line="49"/>
+        <location filename="../src/ExportMSA2MSADialog.cpp" line="46"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2MSADialog.cpp" line="50"/>
+        <location filename="../src/ExportMSA2MSADialog.cpp" line="47"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2MSADialog.cpp" line="63"/>
+        <location filename="../src/ExportMSA2MSADialog.cpp" line="99"/>
         <source>Export alignment</source>
         <translation>Export alignment</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2MSADialog.cpp" line="97"/>
+        <location filename="../src/ExportMSA2MSADialog.cpp" line="83"/>
         <source>File is empty</source>
         <translation>File is empty</translation>
     </message>
@@ -973,57 +973,57 @@
 <context>
     <name>U2::ExportMSA2SequencesDialog</name>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="14"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="14"/>
         <source>Convert Alignment to Separate Sequences</source>
         <translation>Convert Alignment to Separate Sequences</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="25"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="25"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="35"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="42"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="42"/>
         <source>File format to use</source>
         <translation>File format to use</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="54"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="54"/>
         <source>Add document to the project</source>
         <translation>Add document to the project</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="64"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="64"/>
         <source>Gap characters ('-')</source>
         <translation>Gap characters ('-')</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="70"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="70"/>
         <source>Keep</source>
         <translation>Keep</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="80"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="80"/>
         <source>Trim</source>
         <translation>Trim</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="47"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="43"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="48"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="44"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="68"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="54"/>
         <source>File name is empty!</source>
         <translation>File name is empty!</translation>
     </message>
@@ -1195,47 +1195,47 @@
 <context>
     <name>U2::ExportSequences2MSADialog</name>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="14"/>
+        <location filename="../src/ExportSequences2MSADialog.ui" line="14"/>
         <source>Export Sequences as Alignment</source>
         <translation>Export Sequences as Alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="25"/>
+        <location filename="../src/ExportSequences2MSADialog.ui" line="25"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="35"/>
+        <location filename="../src/ExportSequences2MSADialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="42"/>
+        <location filename="../src/ExportSequences2MSADialog.ui" line="42"/>
         <source>File format to use</source>
         <translation>File format to use</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="54"/>
+        <location filename="../src/ExportSequences2MSADialog.ui" line="54"/>
         <source>Add document to the project</source>
         <translation>Add document to the project</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="64"/>
+        <location filename="../src/ExportSequences2MSADialog.ui" line="64"/>
         <source>Use Genbank "SOURCE" tags as a name of sequences (for Genbank sequences only)</source>
         <translation>Use Genbank "SOURCE" tags as a name of sequences (for Genbank sequences only)</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequences2MSADialog.cpp" line="47"/>
+        <location filename="../src/ExportSequences2MSADialog.cpp" line="43"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequences2MSADialog.cpp" line="48"/>
+        <location filename="../src/ExportSequences2MSADialog.cpp" line="44"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequences2MSADialog.cpp" line="70"/>
+        <location filename="../src/ExportSequences2MSADialog.cpp" line="55"/>
         <source>File name is empty!</source>
         <translation>File name is empty!</translation>
     </message>
@@ -1243,147 +1243,147 @@
 <context>
     <name>U2::ExportSequencesDialog</name>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="20"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="20"/>
         <source>Export Selected Sequences</source>
         <translation>Export Selected Sequences</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="48"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="48"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="58"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="58"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="65"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="65"/>
         <source>File format to use</source>
         <translation>File format to use</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="31"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="31"/>
         <source>Export with annotations</source>
         <translation>Export with annotations</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="38"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="38"/>
         <source>Add document to the project</source>
         <translation>Add document to the project</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="75"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="75"/>
         <source>Use custom sequence name</source>
         <translation>Use custom sequence name</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="91"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="91"/>
         <source>Convertion options</source>
         <translation>Convertion options</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="97"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="97"/>
         <source>Save direct strand</source>
         <translation>Save direct strand</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="107"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="107"/>
         <source>Save complement strand</source>
         <translation>Save complement strand</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="114"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="114"/>
         <source>Save both strands</source>
         <translation>Save both strands</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="121"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="121"/>
         <source>Translate to amino alphabet</source>
         <translation>Save both strands</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="131"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="131"/>
         <source>Save all amino frames</source>
         <translation>Save all amino frames</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="161"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="161"/>
         <source>Back translation options</source>
         <translation>Back translation options</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="167"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="167"/>
         <source>Translate back to nucleic alphabet</source>
         <translation>Translate back to nucleic alphabet</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="179"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="179"/>
         <source>Most frequently used codons</source>
         <translation>Most frequently used codons</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="206"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="206"/>
         <source>Organism:</source>
         <translation>Organism:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="241"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="241"/>
         <source>Save as separate sequences</source>
         <translation>Save as separate sequences</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="192"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="192"/>
         <source>Frequency distribution</source>
         <translation>Frequency distribution</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="151"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="151"/>
         <source>Use custom translation table</source>
         <translation>Use custom translation table</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="228"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="228"/>
         <source>Merge options</source>
         <translation>Merge options</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="253"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="253"/>
         <source>Add gap symbols between sequences</source>
         <translation>Add gap symbols between sequences</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="234"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="234"/>
         <source>Merge sequences</source>
         <translation>Merge sequences</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="52"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="54"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="53"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="55"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="65"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="187"/>
         <source>Export Sequences</source>
         <translation>Export Sequences</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="160"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="149"/>
         <source>Select organism</source>
         <translation>Select organism</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="229"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="234"/>
         <source>File is empty</source>
         <translation>File is empty</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="234"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="239"/>
         <source>Organism for back translation not specified</source>
         <translation>Organism for back translation not specified</translation>
     </message>
@@ -1481,12 +1481,12 @@
 <context>
     <name>U2::ImportAnnotationsFromCSVDialog</name>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="84"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="244"/>
         <source>Save imported annotations to</source>
         <translation>Save imported annotations to</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="113"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="105"/>
         <source>//The script parses input line
  // and returns an array of parsed elements as the result
 var %1; //input line
@@ -1497,132 +1497,131 @@ var %1; //input line
 var %2; //parsed line number</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="158"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="150"/>
         <source>Invalid start position/end position/length configuration!</source>
         <translation>Invalid start position/end position/length configuration!</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="162"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="154"/>
         <source>Multiple columns are used as a name!</source>
         <translation>Multiple columns are used as a name!</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="308"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="316"/>
         <source>Column separator value: [%1], hex: [%2], length: %3</source>
         <translation>Column separator value: [%1], hex: [%2], length: %3</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="374"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="382"/>
         <source>Script is empty</source>
         <translation>Script is empty</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="389"/>
         <source>Output file format is not set!</source>
-        <translation>Output file format is not set!</translation>
+        <translation type="vanished">Output file format is not set!</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="384"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="392"/>
         <source>Output file name is not set!</source>
         <translation>Output file name is not set!</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="65"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="66"/>
         <source>Run</source>
         <translation>Run</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="66"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="67"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="166"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="158"/>
         <source>Invalid default annotation name!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="285"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="293"/>
         <source>Failed to guess separator sequence!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="306"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="314"/>
         <source>Column separator</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="326"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="334"/>
         <source>CSV Files</source>
         <translation>CSV Files</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="327"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="335"/>
         <source>Select CSV file to read</source>
         <translation>Select CSV file to read</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="341"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="349"/>
         <source>Enter input CSV file name</source>
         <translation>Enter input CSV file name</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="368"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="376"/>
         <source>Separator value is not set</source>
         <translation>Separator value is not set</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="471"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="475"/>
         <source>[ignored]</source>
         <translation>[ignored]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="474"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="478"/>
         <source>[qualifier %1]</source>
         <translation>[qualifier %1]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="477"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="481"/>
         <source>[name]</source>
         <translation>[name]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="481"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="485"/>
         <source>[start position with offset %1]</source>
         <translation>[start position with offset %1]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="483"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="487"/>
         <source>[start position]</source>
         <translation>[start position]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="488"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="492"/>
         <source>[end position (inclusive)]</source>
         <translation>[end position (inclusive)]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="490"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="494"/>
         <source>[end position]</source>
         <translation>[end position]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="494"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="498"/>
         <source>[length]</source>
         <translation>[length]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="498"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="502"/>
         <source>[complement]</source>
         <translation>[complement]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="500"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="504"/>
         <source>[complement if '%1']</source>
         <translation>[complement if '%1']</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="504"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="508"/>
         <source>[group]</source>
         <translation>[group]</translation>
     </message>
@@ -1635,12 +1634,12 @@ var %2; //parsed line number</translation>
         <translation>Import annotations from CSV</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="132"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="130"/>
         <source>Annotations can't be added to the document %1</source>
         <translation>Annotations can't be added to the document %1</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="136"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="134"/>
         <source>Document is locked and can't be modified %1</source>
         <translation>Document is locked and can't be modified %1</translation>
     </message>
@@ -1971,42 +1970,42 @@ You can use this worker to convert .fasta and .qual pair to fastq format.</trans
 <context>
     <name>U2::ReadCSVAsAnnotationsTask</name>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="190"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="193"/>
         <source>Parse CSV file %1</source>
         <translation>Parse CSV file %1</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="246"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="249"/>
         <source>Invalid annotation name: '%1'</source>
         <translation>Invalid annotation name: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="254"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="257"/>
         <source>Start offset is not numeric: '%1'</source>
         <translation>Start offset is not numeric: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="261"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="264"/>
         <source>End offset is not numeric: '%1'</source>
         <translation>End offset is not numeric: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="268"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="271"/>
         <source>Length is not numeric: '%1'</source>
         <translation>Length is not numeric: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="307"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="310"/>
         <source>Invalid location: start: %1  len: %2, in line :%3, ignoring</source>
         <translation>Invalid location: start: %1  len: %2, in line :%3, ignoring</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="315"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="318"/>
         <source>Can't parse line: '%1', error = %2, ignoring</source>
         <translation>Can't parse line: '%1', error = %2, ignoring</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="396"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="399"/>
         <source>Script result is not an array of strings!</source>
         <translation>Script result is not an array of strings!</translation>
     </message>
@@ -2037,30 +2036,36 @@ You can use this worker to convert .fasta and .qual pair to fastq format.</trans
 <context>
     <name>getSequenceByIdDialog</name>
     <message>
-        <location filename="../src/ui/GetSequenceByIdDialog.ui" line="22"/>
         <source>The sequences from selected BLAST results will be downloaded from
  NCBI Genbank by their GI identifier
 </source>
-        <translation>The sequences from selected BLAST results will be downloaded from
+        <translation type="vanished">The sequences from selected BLAST results will be downloaded from
  NCBI Genbank by their GI identifie</translation>
     </message>
     <message>
-        <location filename="../src/ui/GetSequenceByIdDialog.ui" line="14"/>
+        <location filename="../src/GetSequenceByIdDialog.ui" line="14"/>
         <source>Get Sequences by ID</source>
         <translation>Get Sequences by ID</translation>
     </message>
     <message>
-        <location filename="../src/ui/GetSequenceByIdDialog.ui" line="33"/>
+        <location filename="../src/GetSequenceByIdDialog.ui" line="34"/>
+        <source>The sequences from selected BLAST results will be downloaded from
+NCBI Genbank by their GI identifier
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/GetSequenceByIdDialog.ui" line="48"/>
         <source>Save to directory:</source>
         <translation>Save to directory:</translation>
     </message>
     <message>
-        <location filename="../src/ui/GetSequenceByIdDialog.ui" line="43"/>
+        <location filename="../src/GetSequenceByIdDialog.ui" line="58"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/GetSequenceByIdDialog.ui" line="52"/>
+        <location filename="../src/GetSequenceByIdDialog.ui" line="67"/>
         <source>Add to project</source>
         <translation>Add to project</translation>
     </message>
diff --git a/src/plugins/dna_export/transl/russian.ts b/src/plugins/dna_export/transl/russian.ts
index 1d5f175..bb0fdab 100644
--- a/src/plugins/dna_export/transl/russian.ts
+++ b/src/plugins/dna_export/transl/russian.ts
@@ -4,45 +4,45 @@
 <context>
     <name>BaseContentDialog</name>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="20"/>
+        <location filename="../src/BaseContentDialog.ui" line="20"/>
         <source>Set Base Content</source>
         <translation>Задать состав последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="26"/>
+        <location filename="../src/BaseContentDialog.ui" line="26"/>
         <source>Base conetnt</source>
         <translation>Состав</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="55"/>
+        <location filename="../src/BaseContentDialog.ui" line="55"/>
         <source>A</source>
         <translation>A</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="68"/>
-        <location filename="../src/ui/BaseContentDialog.ui" line="107"/>
-        <location filename="../src/ui/BaseContentDialog.ui" line="146"/>
-        <location filename="../src/ui/BaseContentDialog.ui" line="185"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="94"/>
+        <location filename="../src/BaseContentDialog.ui" line="94"/>
         <source>C</source>
         <translation>C</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="133"/>
+        <location filename="../src/BaseContentDialog.ui" line="133"/>
         <source>G</source>
         <translation>G</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="172"/>
+        <location filename="../src/BaseContentDialog.ui" line="172"/>
         <source>T</source>
         <translation>T</translation>
     </message>
     <message>
-        <location filename="../src/ui/BaseContentDialog.ui" line="199"/>
+        <location filename="../src/BaseContentDialog.ui" line="199"/>
         <source>GC Skew</source>
         <translation>GC смещение</translation>
     </message>
@@ -50,72 +50,72 @@
 <context>
     <name>CSVColumnConfigurationDialog</name>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="23"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="23"/>
         <source>Column role</source>
         <translation>Роль</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="36"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="36"/>
         <source>Annotation start position</source>
         <translation>Начальная позиция</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="46"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="46"/>
         <source>Add offset</source>
         <translation>Смещение</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="59"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="59"/>
         <source> bp</source>
         <translation> сим</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="72"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="72"/>
         <source>Annotation end position</source>
         <translation>Конечная позиция</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="82"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="82"/>
         <source>Inclusive</source>
         <translation>Включительно</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="92"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="92"/>
         <source>Annotation length</source>
         <translation>Длина аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="99"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="99"/>
         <source>Complement strand mark</source>
         <translation>Комплементарное направление</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="109"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="109"/>
         <source>Mark value</source>
         <translation>Метка</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="126"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="126"/>
         <source>Annotation name</source>
         <translation>Имя аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="133"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="133"/>
         <source>Qualifier</source>
         <translation>Квалификатор</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="29"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="29"/>
         <source>Ignore this column</source>
         <translation>Не использовать этот столбец</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="14"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="14"/>
         <source>Select the Role of the Column</source>
         <translation>Выберите роль данных в столбце</translation>
     </message>
     <message>
-        <location filename="../src/ui/CSVColumnConfigurationDialog.ui" line="174"/>
+        <location filename="../src/CSVColumnConfigurationDialog.ui" line="174"/>
         <source>Annotation group</source>
         <translation>Группа аннотации</translation>
     </message>
@@ -123,84 +123,84 @@
 <context>
     <name>DNASequenceGeneratorDialog</name>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="14"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="14"/>
         <source>Generate Sequence</source>
         <translation>Генерация последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="26"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="26"/>
         <source>Parameters</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="34"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="34"/>
         <source>Length</source>
         <translation>Длина</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="50"/>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="76"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="50"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="76"/>
         <source> bp</source>
         <translation> сим</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="66"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="66"/>
         <source>Window size</source>
         <translation>Размер окна</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="128"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="128"/>
         <source>Number of sequences</source>
         <translation>Число последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="135"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="135"/>
         <source>Initialize random generator manually</source>
         <translation>Инициализация генератора случайных чисел вручную</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="188"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="188"/>
         <source>Content</source>
         <translation>Состав</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="194"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="194"/>
         <source>Reference</source>
         <translation>Референс</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="212"/>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="288"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="212"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="288"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="221"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="221"/>
         <source>Manual</source>
         <translation>Вручную</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="236"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="236"/>
         <source>Configure...</source>
         <translation>Настроить...</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="267"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="267"/>
         <source>Output</source>
         <translation>Результат</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="273"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="273"/>
         <source>Output File</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="297"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="297"/>
         <source>Format</source>
         <translation>Формат</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNASequenceGeneratorDialog.ui" line="323"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="323"/>
         <source>Add to project</source>
         <translation>Добавить в проект</translation>
     </message>
@@ -208,37 +208,37 @@
 <context>
     <name>ExportBlastResultDialog</name>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="14"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="14"/>
         <source>Export BLAST Result to Multiple Alignment</source>
         <translation>Экспорт результатов BLAST в множественное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="42"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="42"/>
         <source>Export to file</source>
         <translation>Записать в файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="35"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="49"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="49"/>
         <source>File format to use</source>
         <translation>Используемый формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="25"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="25"/>
         <source>Qualifier to use as name</source>
         <translation>Использовать квалификатор в качестве имени</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="64"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="64"/>
         <source>Add reference to alignment</source>
         <translation>Добавить референс к выравниванию</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportBlastResultDialog.ui" line="71"/>
+        <location filename="../src/ExportBlastResultDialog.ui" line="71"/>
         <source>Add document to the project</source>
         <translation>Добавить документ к проекту</translation>
     </message>
@@ -246,37 +246,37 @@
 <context>
     <name>ExportChromatogramDialog</name>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="14"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="14"/>
         <source>Export Chromatogram File</source>
         <translation>Экспорт хроматограммы</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="25"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="25"/>
         <source>Export to file</source>
         <translation>Записать в файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="35"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="42"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="42"/>
         <source>File format to use</source>
         <translation>Используемый формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="56"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="56"/>
         <source>Reversed</source>
         <translation>Обратный</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="66"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="66"/>
         <source>Complemented</source>
         <translation>Комплементарный</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportChromatogramDialog.ui" line="75"/>
+        <location filename="../src/ExportChromatogramDialog.ui" line="75"/>
         <source>Add document to the project</source>
         <translation>Добавить документ к проекту</translation>
     </message>
@@ -339,129 +339,129 @@
 <context>
     <name>ImportAnnotationsFromCSVDialog</name>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="25"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="25"/>
         <source>File to read</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="35"/>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="60"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="35"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="60"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="44"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="44"/>
         <source>Results</source>
         <translation>Результаты</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="50"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="50"/>
         <source>Result file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="67"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="67"/>
         <source>File format</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="77"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="77"/>
         <source>Add result file to project</source>
         <translation>Добавить результат к проекту</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="96"/>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="111"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="96"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="111"/>
         <source>Column separator</source>
         <translation>Разделитель столбцов</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="103"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="103"/>
         <source>File parsing</source>
         <translation>Разбор файла</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="140"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="140"/>
         <source>,</source>
         <translation>,</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="150"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="150"/>
         <source>Guess</source>
         <translation>Определить</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="157"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="157"/>
         <source>Script</source>
         <translation>Скрипт</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="177"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="177"/>
         <source>Edit</source>
         <translation>Редактировать</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="184"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="184"/>
         <source>First  lines to skip</source>
         <translation>Пропускать сначала</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="207"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="207"/>
         <source>Do not skip</source>
         <translation>Не пропускать</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="210"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="210"/>
         <source> line(s)</source>
         <translation>строка(и)</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="220"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="220"/>
         <source>Skip all lines starts with the text</source>
         <translation>Пропускать строки, начинающиеся с текста</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="246"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="246"/>
         <source>#</source>
         <translation>#</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="266"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="266"/>
         <source>Remove quotes</source>
         <translation>Удалить кавычки</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="283"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="283"/>
         <source>Default annotation name</source>
         <translation>Имя аннотации по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="296"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="296"/>
         <source>misc_feature</source>
         <translation>misc_feature</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="259"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="259"/>
         <source>Interpret multiple separators like a single separator (try when separator is a whitespace character)</source>
         <translation>Интерпретировать повторяющийся разделитель как одиночный (используйте, когда разделителем служит пробел)</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="14"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="14"/>
         <source>Import Annotations from CSV</source>
         <translation>Импорт аннотаций из CSV</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="313"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="313"/>
         <source>Results preview</source>
         <translation>Просмотр результата</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="333"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="333"/>
         <source>Preview</source>
         <translation>Просмотр</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportAnnotationsFromCSVDialog.ui" line="357"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.ui" line="357"/>
         <source>Raw file preview:</source>
         <translation>Просмотр "сырого" файла:</translation>
     </message>
@@ -641,23 +641,23 @@
 <context>
     <name>U2::BaseContentDialog</name>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="163"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="171"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="246"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="269"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="254"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="277"/>
         <source>Base content</source>
         <translation>Основной состав</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="246"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="254"/>
         <source>Incorrect GC Skew value</source>
         <translation>Некорректное значение GC смещения</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="269"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="277"/>
         <source>Total percentage has to be 100 %</source>
         <translation>Сумма должна составлять 100 %</translation>
     </message>
@@ -723,44 +723,44 @@
 <context>
     <name>U2::DNASequenceGeneratorDialog</name>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="59"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="61"/>
         <source>Generate</source>
         <translation>Сгенерировать</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="60"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="62"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="78"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="96"/>
         <source>Save sequences</source>
         <translation>Сохранить последовательности</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="103"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="111"/>
         <source>Open file</source>
         <translation>Открыть файл</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="130"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="139"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="144"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="138"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="147"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="152"/>
         <source>DNA Sequence Generator</source>
         <translation>Генератор ДНК последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="130"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="138"/>
         <source>Windows size bigger than sequence length</source>
         <translation>Размер окна больше чем длина последовательности</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="139"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="147"/>
         <source>Reference url is not specified.</source>
         <translation>Путь до референса не указан.</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="144"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="152"/>
         <source>Output file is no specified.</source>
         <translation>Не указан выходной файл.</translation>
     </message>
@@ -838,17 +838,17 @@
 <context>
     <name>U2::ExportBlastResultDialog</name>
     <message>
-        <location filename="../src/ExportBlastResultDialog.cpp" line="47"/>
+        <location filename="../src/ExportBlastResultDialog.cpp" line="43"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ExportBlastResultDialog.cpp" line="48"/>
+        <location filename="../src/ExportBlastResultDialog.cpp" line="44"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ExportBlastResultDialog.cpp" line="76"/>
+        <location filename="../src/ExportBlastResultDialog.cpp" line="59"/>
         <source>File name is empty!</source>
         <translation>Не указано имя файла!</translation>
     </message>
@@ -856,22 +856,22 @@
 <context>
     <name>U2::ExportChromatogramDialog</name>
     <message>
-        <location filename="../src/ExportChromatogramDialog.cpp" line="53"/>
+        <location filename="../src/ExportChromatogramDialog.cpp" line="49"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ExportChromatogramDialog.cpp" line="54"/>
+        <location filename="../src/ExportChromatogramDialog.cpp" line="50"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ExportChromatogramDialog.cpp" line="68"/>
+        <location filename="../src/ExportChromatogramDialog.cpp" line="65"/>
         <source>Select a file</source>
         <translation>Выберите файл</translation>
     </message>
     <message>
-        <location filename="../src/ExportChromatogramDialog.cpp" line="79"/>
+        <location filename="../src/ExportChromatogramDialog.cpp" line="74"/>
         <source>File name is empty!</source>
         <translation>Не указано имя файла!</translation>
     </message>
@@ -887,67 +887,67 @@
 <context>
     <name>U2::ExportMSA2MSADialog</name>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="20"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="20"/>
         <source>Export Nucleic Alignment to Amino Translation</source>
         <translation>Экспорт выравнивания в амино трансляции</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="28"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="28"/>
         <source>Export to file</source>
         <translation>Записать в файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="38"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="38"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="45"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="45"/>
         <source>File format to use</source>
         <translation>Используемый формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="55"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="55"/>
         <source>Amino translation</source>
         <translation>Таблица трансляции</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="67"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="67"/>
         <source>Add document to the project</source>
         <translation>Добавить документ к проекту</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="77"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="77"/>
         <source>Export range</source>
         <translation>Рамки экспорта</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="83"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="83"/>
         <source>Whole alignment</source>
         <translation>Всё выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2MSADialog.ui" line="93"/>
+        <location filename="../src/ExportMSA2MSADialog.ui" line="93"/>
         <source>Selected rows</source>
         <translation>Выбранные строки</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2MSADialog.cpp" line="49"/>
+        <location filename="../src/ExportMSA2MSADialog.cpp" line="46"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2MSADialog.cpp" line="50"/>
+        <location filename="../src/ExportMSA2MSADialog.cpp" line="47"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2MSADialog.cpp" line="63"/>
+        <location filename="../src/ExportMSA2MSADialog.cpp" line="99"/>
         <source>Export alignment</source>
         <translation>Экспорт выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2MSADialog.cpp" line="97"/>
+        <location filename="../src/ExportMSA2MSADialog.cpp" line="83"/>
         <source>File is empty</source>
         <translation>Не указано имя файла</translation>
     </message>
@@ -973,57 +973,57 @@
 <context>
     <name>U2::ExportMSA2SequencesDialog</name>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="14"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="14"/>
         <source>Convert Alignment to Separate Sequences</source>
         <translation>Конвертировать выравнивание в разные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="25"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="25"/>
         <source>Export to file</source>
         <translation>Записать в файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="35"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="42"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="42"/>
         <source>File format to use</source>
         <translation>Используемый формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="54"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="54"/>
         <source>Add document to the project</source>
         <translation>Добавить документ к проекту</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="64"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="64"/>
         <source>Gap characters ('-')</source>
         <translation>Символы пробела ("-")</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="70"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="70"/>
         <source>Keep</source>
         <translation>Сохранять</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportMSA2SequencesDialog.ui" line="80"/>
+        <location filename="../src/ExportMSA2SequencesDialog.ui" line="80"/>
         <source>Trim</source>
         <translation>Удалять</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="47"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="43"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="48"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="44"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="68"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="54"/>
         <source>File name is empty!</source>
         <translation>Не указано имя файла!</translation>
     </message>
@@ -1195,47 +1195,47 @@
 <context>
     <name>U2::ExportSequences2MSADialog</name>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="14"/>
+        <location filename="../src/ExportSequences2MSADialog.ui" line="14"/>
         <source>Export Sequences as Alignment</source>
         <translation>Экспорт последовательностей в выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="25"/>
+        <location filename="../src/ExportSequences2MSADialog.ui" line="25"/>
         <source>Export to file</source>
         <translation>Записать в файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="35"/>
+        <location filename="../src/ExportSequences2MSADialog.ui" line="35"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="42"/>
+        <location filename="../src/ExportSequences2MSADialog.ui" line="42"/>
         <source>File format to use</source>
         <translation>Используемый формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="54"/>
+        <location filename="../src/ExportSequences2MSADialog.ui" line="54"/>
         <source>Add document to the project</source>
         <translation>Добавить документ к проекту</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequences2MSADialog.ui" line="64"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ExportSequences2MSADialog.cpp" line="47"/>
+        <location filename="../src/ExportSequences2MSADialog.cpp" line="43"/>
         <source>Export</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequences2MSADialog.cpp" line="48"/>
+        <location filename="../src/ExportSequences2MSADialog.cpp" line="44"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequences2MSADialog.cpp" line="70"/>
+        <location filename="../src/ExportSequences2MSADialog.cpp" line="55"/>
         <source>File name is empty!</source>
         <translation>Не указано имя файла!</translation>
     </message>
@@ -1243,147 +1243,147 @@
 <context>
     <name>U2::ExportSequencesDialog</name>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="20"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="20"/>
         <source>Export Selected Sequences</source>
         <translation>Экспорт выбранных последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="48"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="48"/>
         <source>Export to file</source>
         <translation>Записать в файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="58"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="58"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="65"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="65"/>
         <source>File format to use</source>
         <translation>Используемый формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="31"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="31"/>
         <source>Export with annotations</source>
         <translation>Экспортировать с аннотациями</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="38"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="38"/>
         <source>Add document to the project</source>
         <translation>Добавить документ к проекту</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="75"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="75"/>
         <source>Use custom sequence name</source>
         <translation>Использовать собственное имя последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="91"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="91"/>
         <source>Convertion options</source>
         <translation>Настройки трансляции</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="97"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="97"/>
         <source>Save direct strand</source>
         <translation>Сохранять прямую</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="107"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="107"/>
         <source>Save complement strand</source>
         <translation>Сохранять комплементарную</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="114"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="114"/>
         <source>Save both strands</source>
         <translation>Сохранять обе</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="121"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="121"/>
         <source>Translate to amino alphabet</source>
         <translation>Транслировать</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="131"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="131"/>
         <source>Save all amino frames</source>
         <translation>Сохранять все рамки трансляции</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="161"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="161"/>
         <source>Back translation options</source>
         <translation>Настройки обратной трансляции</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="167"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="167"/>
         <source>Translate back to nucleic alphabet</source>
         <translation>Транслировать обратно в алфавит нуклеотидов</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="179"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="179"/>
         <source>Most frequently used codons</source>
         <translation>Наиболее часто используемые кодоны</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="206"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="206"/>
         <source>Organism:</source>
         <translation>Организм:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="241"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="241"/>
         <source>Save as separate sequences</source>
         <translation>Сохр. послед. раздельно</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="192"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="192"/>
         <source>Frequency distribution</source>
         <translation>Частотное распределение</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="151"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="151"/>
         <source>Use custom translation table</source>
         <translation>Использовать собственную таблицу трансляций</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="228"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="228"/>
         <source>Merge options</source>
         <translation>Настройки группировки последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="253"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="253"/>
         <source>Add gap symbols between sequences</source>
         <translation>Добавлять пробелы между последовательностями</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportSequencesDialog.ui" line="234"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="234"/>
         <source>Merge sequences</source>
         <translation>Объединять последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="52"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="54"/>
         <source>Export</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="53"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="55"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="65"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="187"/>
         <source>Export Sequences</source>
         <translation>Экспорт последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="160"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="149"/>
         <source>Select organism</source>
         <translation>Выберите организм</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="229"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="234"/>
         <source>File is empty</source>
         <translation>Не указано имя файла</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.cpp" line="234"/>
+        <location filename="../src/ExportSequencesDialog.cpp" line="239"/>
         <source>Organism for back translation not specified</source>
         <translation>Не выбран организм для обратной трансляции</translation>
     </message>
@@ -1481,12 +1481,12 @@
 <context>
     <name>U2::ImportAnnotationsFromCSVDialog</name>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="84"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="244"/>
         <source>Save imported annotations to</source>
         <translation>Выберите файл для сохранения аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="113"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="105"/>
         <source>//The script parses input line
  // and returns an array of parsed elements as the result
 var %1; //input line
@@ -1497,132 +1497,131 @@ var %1; //input line
 var %2; //parsed line number</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="158"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="150"/>
         <source>Invalid start position/end position/length configuration!</source>
         <translation>Неправильная конфигурация координат аннотации!</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="162"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="154"/>
         <source>Multiple columns are used as a name!</source>
         <translation>В качестве имени аннотации можно выбрать только один столбец!</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="308"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="316"/>
         <source>Column separator value: [%1], hex: [%2], length: %3</source>
         <translation>Значение разделителя: [%1], hex: [%2], длина: %3</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="326"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="334"/>
         <source>CSV Files</source>
         <translation>CSV файлы</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="374"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="382"/>
         <source>Script is empty</source>
         <translation>Скрипт пуст</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="389"/>
         <source>Output file format is not set!</source>
-        <translation>Не задан формат файла с аннотациями!</translation>
+        <translation type="vanished">Не задан формат файла с аннотациями!</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="384"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="392"/>
         <source>Output file name is not set!</source>
         <translation>Не задано имя файла с аннотациями!</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="166"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="158"/>
         <source>Invalid default annotation name!</source>
         <translation>Неправильное имя аннотации по умолчанию!</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="285"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="293"/>
         <source>Failed to guess separator sequence!</source>
         <translation>Не удалось определить разделителный символ !</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="306"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="314"/>
         <source>Column separator</source>
         <translation>Разделитель столбцов</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="327"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="335"/>
         <source>Select CSV file to read</source>
         <translation>Выберите файл со столбцами</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="341"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="349"/>
         <source>Enter input CSV file name</source>
         <translation>Укажите исходный файл с данными</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="368"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="376"/>
         <source>Separator value is not set</source>
         <translation>Не задан символ разделитель столбцов</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="65"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="66"/>
         <source>Run</source>
         <translation>Запустить</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="66"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="67"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="471"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="475"/>
         <source>[ignored]</source>
         <translation>[не используется]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="474"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="478"/>
         <source>[qualifier %1]</source>
         <translation>[квалификатор: %1]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="477"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="481"/>
         <source>[name]</source>
         <translation>[имя]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="481"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="485"/>
         <source>[start position with offset %1]</source>
         <translation>[начальная позиция, смещение %1]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="483"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="487"/>
         <source>[start position]</source>
         <translation>[начальная позиция]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="488"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="492"/>
         <source>[end position (inclusive)]</source>
         <translation>[конечная позиция (включительно)]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="490"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="494"/>
         <source>[end position]</source>
         <translation>[конечная позиция]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="494"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="498"/>
         <source>[length]</source>
         <translation>[длина]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="498"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="502"/>
         <source>[complement]</source>
         <translation>[complement]</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="500"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="504"/>
         <source>[complement if '%1']</source>
         <translation>[комплементарная если '%1']</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="504"/>
+        <location filename="../src/ImportAnnotationsFromCSVDialog.cpp" line="508"/>
         <source>[group]</source>
         <translation>[группа]</translation>
     </message>
@@ -1635,12 +1634,12 @@ var %2; //parsed line number</translation>
         <translation>Импортировать аннотации из CSV</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="132"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="130"/>
         <source>Annotations can't be added to the document %1</source>
         <translation>Аннотации не могут быть добавлены к документу %1</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="136"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="134"/>
         <source>Document is locked and can't be modified %1</source>
         <translation>Документ заблокирован и не может быть изменён %1</translation>
     </message>
@@ -1971,42 +1970,42 @@ You can use this worker to convert .fasta and .qual pair to fastq format.</sourc
 <context>
     <name>U2::ReadCSVAsAnnotationsTask</name>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="190"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="193"/>
         <source>Parse CSV file %1</source>
         <translation>Разобрать CSV %1</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="246"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="249"/>
         <source>Invalid annotation name: '%1'</source>
         <translation>Неправильное имя аннотации: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="254"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="257"/>
         <source>Start offset is not numeric: '%1'</source>
         <translation>Смещение начала не является числом: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="261"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="264"/>
         <source>End offset is not numeric: '%1'</source>
         <translation>Смещение конца не является числом: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="268"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="271"/>
         <source>Length is not numeric: '%1'</source>
         <translation>Длина не является числом: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="307"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="310"/>
         <source>Invalid location: start: %1  len: %2, in line :%3, ignoring</source>
         <translation>Неверная позиция: начало: %1  длина: %2, в строке :%3, пропуск</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="315"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="318"/>
         <source>Can't parse line: '%1', error = %2, ignoring</source>
         <translation>Невозможно разобрать строку: '%1', ошибка = %2, пропуск</translation>
     </message>
     <message>
-        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="396"/>
+        <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="399"/>
         <source>Script result is not an array of strings!</source>
         <translation>Script result is not an array of strings!</translation>
     </message>
@@ -2037,29 +2036,35 @@ You can use this worker to convert .fasta and .qual pair to fastq format.</sourc
 <context>
     <name>getSequenceByIdDialog</name>
     <message>
-        <location filename="../src/ui/GetSequenceByIdDialog.ui" line="22"/>
         <source>The sequences from selected BLAST results will be downloaded from
  NCBI Genbank by their GI identifier
 </source>
-        <translation>Последовательности из выбранных аннотаций буду загружены из NCBI Genbank по идентификатору</translation>
+        <translation type="vanished">Последовательности из выбранных аннотаций буду загружены из NCBI Genbank по идентификатору</translation>
     </message>
     <message>
-        <location filename="../src/ui/GetSequenceByIdDialog.ui" line="14"/>
+        <location filename="../src/GetSequenceByIdDialog.ui" line="14"/>
         <source>Get Sequences by ID</source>
         <translation>Получить последовательность по идентификатору</translation>
     </message>
     <message>
-        <location filename="../src/ui/GetSequenceByIdDialog.ui" line="33"/>
+        <location filename="../src/GetSequenceByIdDialog.ui" line="34"/>
+        <source>The sequences from selected BLAST results will be downloaded from
+NCBI Genbank by their GI identifier
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/GetSequenceByIdDialog.ui" line="48"/>
         <source>Save to directory:</source>
         <translation>Сохранить в:</translation>
     </message>
     <message>
-        <location filename="../src/ui/GetSequenceByIdDialog.ui" line="43"/>
+        <location filename="../src/GetSequenceByIdDialog.ui" line="58"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/GetSequenceByIdDialog.ui" line="52"/>
+        <location filename="../src/GetSequenceByIdDialog.ui" line="67"/>
         <source>Add to project</source>
         <translation>Добавить в проект</translation>
     </message>
diff --git a/src/plugins/dna_flexibility/CMakeLists.txt b/src/plugins/dna_flexibility/CMakeLists.txt
new file mode 100644
index 0000000..a0264f1
--- /dev/null
+++ b/src/plugins/dna_flexibility/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME dna_flexibility)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/dna_flexibility/dna_flexibility.pro b/src/plugins/dna_flexibility/dna_flexibility.pro
index f95e8f7..0f99f51 100644
--- a/src/plugins/dna_flexibility/dna_flexibility.pro
+++ b/src/plugins/dna_flexibility/dna_flexibility.pro
@@ -11,7 +11,7 @@ HEADERS += src/DNAFlexDialog.h \
            src/HighFlexSettings.h \
            src/HighFlexResult.h
 
-FORMS += src/ui/DNAFlexDialog.ui
+FORMS += src/DNAFlexDialog.ui
 
 SOURCES += src/DNAFlexDialog.cpp \
            src/DNAFlexGraph.cpp \
diff --git a/src/plugins/dna_flexibility/src/DNAFlexDialog.cpp b/src/plugins/dna_flexibility/src/DNAFlexDialog.cpp
index da8ff9d..3ffccbc 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexDialog.cpp
+++ b/src/plugins/dna_flexibility/src/DNAFlexDialog.cpp
@@ -47,7 +47,7 @@ DNAFlexDialog::DNAFlexDialog(ADVSequenceObjectContext* _ctx)
   : QDialog(_ctx->getAnnotatedDNAView()->getWidget())
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467721");
+    new HelpButton(this, buttonBox, "17470654");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dna_flexibility/src/DNAFlexDialog.h b/src/plugins/dna_flexibility/src/DNAFlexDialog.h
index cae006c..9a695b3 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexDialog.h
+++ b/src/plugins/dna_flexibility/src/DNAFlexDialog.h
@@ -22,7 +22,7 @@
 #ifndef _U2_DNA_FLEX_DIALOG_H_
 #define _U2_DNA_FLEX_DIALOG_H_
 
-#include "ui/ui_DNAFlexDialog.h"
+#include "ui_DNAFlexDialog.h"
 
 #include "HighFlexSettings.h"
 
diff --git a/src/plugins/dna_flexibility/src/ui/DNAFlexDialog.ui b/src/plugins/dna_flexibility/src/DNAFlexDialog.ui
similarity index 100%
rename from src/plugins/dna_flexibility/src/ui/DNAFlexDialog.ui
rename to src/plugins/dna_flexibility/src/DNAFlexDialog.ui
diff --git a/src/plugins/dna_flexibility/src/DNAFlexGraph.cpp b/src/plugins/dna_flexibility/src/DNAFlexGraph.cpp
index fe0a03c..64ee02d 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexGraph.cpp
+++ b/src/plugins/dna_flexibility/src/DNAFlexGraph.cpp
@@ -32,6 +32,9 @@
 
 namespace U2 {
 
+const qint64 DNAFlexGraphFactory::DEFAULT_WINDOW_SIZE = 100;
+
+const int DNAFlexGraphFactory::DEFAULT_WINDOW_STEP = 1;
 
 /**
  * Name of the graph (shown to a user)
@@ -80,7 +83,7 @@ QList<QSharedPointer<GSequenceGraphData> > DNAFlexGraphFactory::createGraphs(GSe
  */
 GSequenceGraphDrawer* DNAFlexGraphFactory::getDrawer(GSequenceGraphView* view)
 {
-    GSequenceGraphWindowData wd(DEFAULT_WINDOW_STEP, DEFAULT_WINDOW_SIZE);
+    GSequenceGraphWindowData wd(DEFAULT_WINDOW_STEP, qMin(DEFAULT_WINDOW_SIZE, view->getSequenceLength()));
     return new GSequenceGraphDrawer(view, wd);
 }
 
diff --git a/src/plugins/dna_flexibility/src/DNAFlexGraph.h b/src/plugins/dna_flexibility/src/DNAFlexGraph.h
index 92e3caf..42ef8e3 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexGraph.h
+++ b/src/plugins/dna_flexibility/src/DNAFlexGraph.h
@@ -44,10 +44,10 @@ public:
 
 private:
     /** Default size of "window" on a graph */
-    static const int DEFAULT_WINDOW_SIZE = 100;
+    static const qint64 DEFAULT_WINDOW_SIZE;
 
     /** Default size of "step" on a graph */
-    static const int DEFAULT_WINDOW_STEP = 1;
+    static const int DEFAULT_WINDOW_STEP;
 };
 
 
diff --git a/src/plugins/dna_flexibility/transl/english.ts b/src/plugins/dna_flexibility/transl/english.ts
index bbe2bae..62af70c 100644
--- a/src/plugins/dna_flexibility/transl/english.ts
+++ b/src/plugins/dna_flexibility/transl/english.ts
@@ -4,52 +4,52 @@
 <context>
     <name>DNAFlexDialog</name>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="26"/>
+        <location filename="../src/DNAFlexDialog.ui" line="26"/>
         <source>DNA Flexibility</source>
         <translation>DNA Flexibility</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="32"/>
+        <location filename="../src/DNAFlexDialog.ui" line="32"/>
         <source>The DNA Flexibility plugin allows searching for high DNA flexibility regions.</source>
         <translation>The DNA Flexibility plugin allows searching for high DNA flexibility regions.</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="42"/>
+        <location filename="../src/DNAFlexDialog.ui" line="42"/>
         <source>Search Settings</source>
         <translation>Search Settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="48"/>
+        <location filename="../src/DNAFlexDialog.ui" line="48"/>
         <source>High DNA Flexibility Regions Settings</source>
         <translation>High DNA Flexibility Regions Settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="56"/>
+        <location filename="../src/DNAFlexDialog.ui" line="56"/>
         <source>Window size</source>
         <translation>Window size</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="79"/>
+        <location filename="../src/DNAFlexDialog.ui" line="79"/>
         <source>Window step</source>
         <translation>Window step</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="99"/>
+        <location filename="../src/DNAFlexDialog.ui" line="99"/>
         <source>Threshold</source>
         <translation>Threshold</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="150"/>
+        <location filename="../src/DNAFlexDialog.ui" line="150"/>
         <source>Remember Settings</source>
         <translation>Remember Settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="157"/>
+        <location filename="../src/DNAFlexDialog.ui" line="157"/>
         <source>Restore Defaults</source>
         <translation>Restore Defaults</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="185"/>
+        <location filename="../src/DNAFlexDialog.ui" line="185"/>
         <source>Output</source>
         <translation>Output</translation>
     </message>
@@ -99,7 +99,7 @@
 <context>
     <name>U2::DNAFlexGraphFactory</name>
     <message>
-        <location filename="../src/DNAFlexGraph.cpp" line="40"/>
+        <location filename="../src/DNAFlexGraph.cpp" line="43"/>
         <source>DNA Flexibility</source>
         <translation>DNA Flexibility</translation>
     </message>
diff --git a/src/plugins/dna_flexibility/transl/russian.ts b/src/plugins/dna_flexibility/transl/russian.ts
index b48b424..fe7cfe1 100644
--- a/src/plugins/dna_flexibility/transl/russian.ts
+++ b/src/plugins/dna_flexibility/transl/russian.ts
@@ -4,52 +4,52 @@
 <context>
     <name>DNAFlexDialog</name>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="26"/>
+        <location filename="../src/DNAFlexDialog.ui" line="26"/>
         <source>DNA Flexibility</source>
         <translation>ДНК гибкость</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="32"/>
+        <location filename="../src/DNAFlexDialog.ui" line="32"/>
         <source>The DNA Flexibility plugin allows searching for high DNA flexibility regions.</source>
         <translation>Модуль "ДНК гибкость" позволяет искать в ДНК районы повышенной гибкости.</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="42"/>
+        <location filename="../src/DNAFlexDialog.ui" line="42"/>
         <source>Search Settings</source>
         <translation>Параметры поиска</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="48"/>
+        <location filename="../src/DNAFlexDialog.ui" line="48"/>
         <source>High DNA Flexibility Regions Settings</source>
         <translation>Параметры районов повышенной гибкости</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="56"/>
+        <location filename="../src/DNAFlexDialog.ui" line="56"/>
         <source>Window size</source>
         <translation>Размер окна</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="79"/>
+        <location filename="../src/DNAFlexDialog.ui" line="79"/>
         <source>Window step</source>
         <translation>Шаг</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="99"/>
+        <location filename="../src/DNAFlexDialog.ui" line="99"/>
         <source>Threshold</source>
         <translation>Пороговая величина</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="150"/>
+        <location filename="../src/DNAFlexDialog.ui" line="150"/>
         <source>Remember Settings</source>
         <translation>Запомнить настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="157"/>
+        <location filename="../src/DNAFlexDialog.ui" line="157"/>
         <source>Restore Defaults</source>
         <translation>Настройки по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAFlexDialog.ui" line="185"/>
+        <location filename="../src/DNAFlexDialog.ui" line="185"/>
         <source>Output</source>
         <translation>Выходные параметры</translation>
     </message>
@@ -99,7 +99,7 @@
 <context>
     <name>U2::DNAFlexGraphFactory</name>
     <message>
-        <location filename="../src/DNAFlexGraph.cpp" line="40"/>
+        <location filename="../src/DNAFlexGraph.cpp" line="43"/>
         <source>DNA Flexibility</source>
         <translation>ДНК гибкость</translation>
     </message>
diff --git a/src/plugins/dna_graphpack/CMakeLists.txt b/src/plugins/dna_graphpack/CMakeLists.txt
new file mode 100644
index 0000000..d9712c0
--- /dev/null
+++ b/src/plugins/dna_graphpack/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME dna_graphpack)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/dna_stat/CMakeLists.txt b/src/plugins/dna_stat/CMakeLists.txt
new file mode 100644
index 0000000..dadcbb0
--- /dev/null
+++ b/src/plugins/dna_stat/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME dna_stat)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/dna_stat/dna_stat.pro b/src/plugins/dna_stat/dna_stat.pro
index 44bc132..9883c79 100644
--- a/src/plugins/dna_stat/dna_stat.pro
+++ b/src/plugins/dna_stat/dna_stat.pro
@@ -6,8 +6,8 @@ HEADERS += src/DistanceMatrixMSAProfileDialog.h \
            src/DNAStatPlugin.h \
            src/DNAStatProfileTask.h \
            src/DNAStatsWindow.h
-FORMS += src/ui/DistanceMatrixMSAProfileDialog.ui \
-         src/ui/DNAStatMSAProfileDialog.ui
+FORMS += src/DistanceMatrixMSAProfileDialog.ui \
+         src/DNAStatMSAProfileDialog.ui
 SOURCES += src/DistanceMatrixMSAProfileDialog.cpp \
            src/DNAStatMSAProfileDialog.cpp \
            src/DNAStatPlugin.cpp \
diff --git a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp
index b126241..a360f3e 100644
--- a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp
+++ b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp
@@ -19,21 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
-
+#include <qglobal.h>
+#include <QFile>
+#include <QMessageBox>
 #include <U2Core/AppContext.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DocumentModel.h>
+#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Core/MAlignmentObject.h>
 
 #include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include <U2View/MSAEditor.h>
 #include <U2View/WebWindow.h>
@@ -42,49 +38,49 @@
 
 namespace U2 {
 
-DNAStatMSAProfileDialog::DNAStatMSAProfileDialog(QWidget* p, MSAEditor* _c) : QDialog(p), ctx(_c) {
+const QString DNAStatMSAProfileDialog::HTML = "html";
+const QString DNAStatMSAProfileDialog::CSV = "csv";
+
+DNAStatMSAProfileDialog::DNAStatMSAProfileDialog(QWidget* p, MSAEditor* _c)
+    : QDialog(p),
+      ctx(_c),
+      saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467665");
+    new HelpButton(this, buttonBox, "17470597");
 
-    connect(fileButton, SIGNAL(clicked()), SLOT(sl_selectFile()));
-    connect(htmlRB, SIGNAL(toggled(bool)), SLOT(sl_formatChanged(bool)));
-    connect(csvRB, SIGNAL(toggled(bool)), SLOT(sl_formatChanged(bool)));
+    initSaveController();
+}
 
+void DNAStatMSAProfileDialog::sl_formatSelected() {
+    saveController->setFormat(csvRB->isChecked() ? CSV : HTML);
 }
 
-void DNAStatMSAProfileDialog::sl_selectFile() {
-    LastUsedDirHelper h("plugin_dna_stat");
-    QString filter;
-    if (csvRB->isChecked()) {
-        filter = tr("CSV files") + " (*.csv)";
+void DNAStatMSAProfileDialog::sl_formatChanged(const QString &newFormat) {
+    if (HTML == newFormat) {
+        htmlRB->setChecked(true);
     } else {
-        filter = tr("HTML files") + " (*.html)";
+        csvRB->setChecked(true);
     }
-    h.url = U2FileDialog::getSaveFileName(this, tr("Select file to save report to.."), h.dir, filter);
-    if (h.url.isEmpty()) {
-        return;
-    }
-    fileEdit->setText(h.url);
 }
 
-void DNAStatMSAProfileDialog::sl_formatChanged(bool) {
-    QString t = fileEdit->text();
-    if (t.isEmpty()) {
-        return;
-    }
-    QString ext = ".html";
-    if (csvRB->isChecked()) {
-        ext = ".csv";
-    }
-    if (t.endsWith(ext)) {
-        return;
-    }
-    QFileInfo fi(t);
-    QString dir = fi.absoluteDir().absolutePath();
-    if (!(dir.endsWith('/') || dir.endsWith('\\'))) {
-        dir.append('/');
-    }
-    fileEdit->setText(dir + fi.baseName() + ext);
+void DNAStatMSAProfileDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = "plugin_dna_stat";
+    config.defaultFormatId = HTML;
+    config.fileDialogButton = fileButton;
+    config.fileNameEdit = fileEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file to save report to..");
+
+    SaveDocumentController::SimpleFormatsInfo formats;
+    formats.addFormat(HTML, HTML.toUpper(), QStringList() << HTML);
+    formats.addFormat(CSV, CSV.toUpper(), QStringList() << CSV);
+
+    saveController = new SaveDocumentController(config, formats, this);
+
+    connect(saveController, SIGNAL(si_formatChanged(const QString &)), SLOT(sl_formatChanged(const QString &)));
+    connect(htmlRB, SIGNAL(toggled(bool)), SLOT(sl_formatSelected()));
+    connect(csvRB, SIGNAL(toggled(bool)), SLOT(sl_formatSelected()));
 }
 
 void DNAStatMSAProfileDialog::accept() {
@@ -101,7 +97,7 @@ void DNAStatMSAProfileDialog::accept() {
     s.stripUnused = !unusedCB->isChecked();
     s.countGapsInConsensusNumbering = !skipGapPositionsCB->isChecked();
     if (saveBox->isChecked()) {
-        s.outURL = fileEdit->text();
+        s.outURL = saveController->getSaveFileName();
         if (s.outURL.isEmpty()) {
             QMessageBox::critical(this, tr("Error"), tr("File URL is empty"));
             return;
@@ -131,97 +127,129 @@ void DNAStatMSAProfileTask::run() {
         setError(tr("No output file name specified"));
         return;
     }
+
+    QFile *f = NULL;
     if (s.outFormat == DNAStatMSAProfileOutputFormat_Show || s.outFormat == DNAStatMSAProfileOutputFormat_HTML) {
+        if (s.outFormat == DNAStatMSAProfileOutputFormat_HTML) {
+            f = new QFile(s.outURL);
+            if (!f->open(QIODevice::Truncate | QIODevice::WriteOnly)) {
+                setError(tr("Can't open file for write: %1").arg(s.outURL));
+                return;
+            }
+        }
         int maxVal = s.usePercents ? 100 : s.ma.getNumRows();
         QString colors[] = {"#ff5555", "#ff9c00", "#60ff00", "#a1d1e5", "#dddddd"};
 
-        //setup style
-        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+="--></STYLE>\n";
-
-        //header
-        resultText+= "<h2>" + tr("Multiple Sequence Alignment Grid Profile") + "</h2><br>\n";
-
-        resultText+="<table>\n";
-        resultText+= "<tr><td><b>"+tr("Alignment file:") + "</b></td><td>" + s.profileURL + "@" + s.profileName+ "</td></tr>\n";
-        resultText+= "<tr><td><b>"+tr("Table content:") + "</b></td><td>" +(s.usePercents ? tr("symbol percents") : tr("symbol counts")) + "</td></tr>\n";
-        resultText+= "</table>\n";
-        resultText+="<br><br>\n";
-
-        resultText+="<table class=tbl>";
-
-        //consensus numbers line
-        resultText+="<tr><td></td>";
-        int pos = 1;
-        for (int i=0; i< columns.size(); i++) {
-            ColumnStat& cs = columns[i];
-            QString posStr;
-            bool nums = s.countGapsInConsensusNumbering || cs.consChar!=MAlignment_GapChar;
-            posStr = nums? QString::number(pos++) : QString(" ");
-//            while(posStr.length() < maxLenLen) {posStr = (nums ? "0" : " ") + posStr;}
-            resultText+="<td width=20>" + posStr + "</td>";
-        }
-        resultText+="</tr>\n";
+        try {
+            //setup style
+            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 += "--></STYLE>\n";
+
+            //header
+            resultText += "<h2>" + tr("Multiple Sequence Alignment Grid Profile") + "</h2><br>\n";
+
+            resultText += "<table>\n";
+            resultText += "<tr><td><b>" + tr("Alignment file:") + "</b></td><td>" + s.profileURL + "@" + s.profileName + "</td></tr>\n";
+            resultText += "<tr><td><b>" + tr("Table content:") + "</b></td><td>" + (s.usePercents ? tr("symbol percents") : tr("symbol counts")) + "</td></tr>\n";
+            resultText += "</table>\n";
+            resultText += "<br><br>\n";
+
+            resultText += "<table class=tbl>";
+
+            //consensus numbers line
+            resultText += "<tr><td></td>";
+            int pos = 1;
+            for (int i = 0; i < columns.size(); i++) {
+                ColumnStat& cs = columns[i];
+                QString posStr;
+                bool nums = s.countGapsInConsensusNumbering || cs.consChar != MAlignment_GapChar;
+                posStr = nums ? QString::number(pos++) : QString(" ");
+                //            while(posStr.length() < maxLenLen) {posStr = (nums ? "0" : " ") + posStr;}
+                resultText += "<td width=20>" + posStr + "</td>";
+                FileAndDirectoryUtils::dumpStringToFile(f, resultText);
+            }
+            resultText += "</tr>\n";
 
-        //consensus chars line
+            //consensus chars line
 
-        resultText+="<tr><td> Consensus </td>";
-        for (int i=0; i< columns.size(); i++) {
-            ColumnStat& cs = columns[i];
-            resultText+="<td><b>" + QString(cs.consChar) + "</b></td>";
-        }
-        resultText+="</tr>\n";
-        //out char freqs
-        QByteArray aChars = s.ma.getAlphabet()->getAlphabetChars();
-        for (int i=0; i < aChars.size(); i++) {
-            char c = aChars[i];
-            if (c == MAlignment_GapChar && !s.reportGaps) {
-                continue;
-            }
-            if (s.stripUnused && unusedChars.contains(c)) {
-                continue;
+            resultText += "<tr><td> Consensus </td>";
+            for (int i = 0; i < columns.size(); i++) {
+                ColumnStat& cs = columns[i];
+                resultText += "<td><b>" + QString(cs.consChar) + "</b></td>";
             }
-            int idx = char2index[c];
-            resultText+="<tr>";
-            resultText+="<td> " + QString(c) + "</td>";
-            for (int j=0; j < columns.size(); j++) {
-                ColumnStat& cs = columns[j];
-                int val = cs.charFreqs[idx];
-                QString colorStr;
-                int hotness = qRound(100 * double(val) / maxVal);
-                if (hotness  >= 90)  {
-                    colorStr = " bgcolor=" + colors[0];
-                } else if (hotness >= 70) {
-                    colorStr = " bgcolor=" + colors[1];
-                } else if (hotness > 50) {
-                    colorStr = " bgcolor=" + colors[2];
-                } else if (hotness > 25) {
-                    colorStr = " bgcolor=" + colors[3];
-                } else if (hotness > 10) {
-                    colorStr = " bgcolor=" + colors[4];
+            resultText += "</tr>\n";
+            //out char freqs
+            QByteArray aChars = s.ma.getAlphabet()->getAlphabetChars();
+            for (int i = 0; i < aChars.size(); i++) {
+                char c = aChars[i];
+                if (c == MAlignment_GapChar && !s.reportGaps) {
+                    continue;
                 }
-                resultText+="<td"+colorStr+">" + QString::number(cs.charFreqs[idx]) + "</td>";
+                if (s.stripUnused && unusedChars.contains(c)) {
+                    continue;
+                }
+                int idx = char2index[c];
+                resultText += "<tr>";
+                resultText += "<td> " + QString(c) + "</td>";
+                for (int j = 0; j < columns.size(); j++) {
+                    ColumnStat& cs = columns[j];
+                    int val = cs.charFreqs[idx];
+                    QString colorStr;
+                    int hotness = qRound(100 * double(val) / maxVal);
+                    if (hotness >= 90) {
+                        colorStr = " bgcolor=" + colors[0];
+                    } else if (hotness >= 70) {
+                        colorStr = " bgcolor=" + colors[1];
+                    } else if (hotness > 50) {
+                        colorStr = " bgcolor=" + colors[2];
+                    } else if (hotness > 25) {
+                        colorStr = " bgcolor=" + colors[3];
+                    } else if (hotness > 10) {
+                        colorStr = " bgcolor=" + colors[4];
+                    }
+                    resultText += "<td" + colorStr + ">" + QString::number(cs.charFreqs[idx]) + "</td>";
+                    FileAndDirectoryUtils::dumpStringToFile(f, resultText);
+                }
+                resultText += "</tr>\n";
+            }
+            resultText += "</table>\n";
+
+            //legend:
+            resultText += "<br><br>\n";
+            resultText += "<table><tr><td><b>" + tr("Legend:") + "  </b>\n";
+            resultText += "<td bgcolor=" + colors[4] + ">10%</td>\n";
+            resultText += "<td bgcolor=" + colors[3] + ">25%</td>\n";
+            resultText += "<td bgcolor=" + colors[2] + ">50%</td>\n";
+            resultText += "<td bgcolor=" + colors[1] + ">70%</td>\n";
+            resultText += "<td bgcolor=" + colors[0] + ">90%</td>\n";
+            resultText += "</tr></table><br>\n";
+        } catch (std::bad_alloc &e) {
+            Q_UNUSED(e);
+            verticalColumnNames.clear();
+            columns.clear();
+            consenusChars.clear();
+            char2index.clear();
+            unusedChars.clear();
+            resultText.clear();
+            if (s.outFormat == DNAStatMSAProfileOutputFormat_Show) {
+                setError(tr("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."));
+            } else {
+                setError(tr("There is not enough memory to generate this grid profile in UGENE."));
             }
-            resultText+="</tr>\n";
+            return;
         }
-        resultText+="</table>\n";
-
-        //legend:
-        resultText+="<br><br>\n";
-        resultText+= "<table><tr><td><b>" + tr("Legend:")+"  </b>\n";
-        resultText+="<td bgcolor="+colors[4]+">10%</td>\n";
-        resultText+="<td bgcolor="+colors[3]+">25%</td>\n";
-        resultText+="<td bgcolor="+colors[2]+">50%</td>\n";
-        resultText+="<td bgcolor="+colors[1]+">70%</td>\n";
-        resultText+="<td bgcolor="+colors[0]+">90%</td>\n";
-        resultText+="</tr></table><br>\n";
     } else {
+        f = new QFile(s.outURL);
+        if (!f->open(QIODevice::Truncate | QIODevice::WriteOnly)) {
+            setError(tr("Can't open file for write: %1").arg(s.outURL));
+            return;
+        }
         //out char freqs
         QByteArray aChars = s.ma.getAlphabet()->getAlphabetChars();
-        for (int i=0; i < aChars.size(); i++) {
+        for (int i = 0; i < aChars.size(); i++) {
             char c = aChars[i];
             if (c == MAlignment_GapChar && !s.reportGaps) {
                 continue;
@@ -230,23 +258,20 @@ void DNAStatMSAProfileTask::run() {
                 continue;
             }
             int idx = char2index[c];
-            resultText+=QString(c);
-            for (int j=0; j < columns.size(); j++) {
+            resultText += QString(c);
+            for (int j = 0; j < columns.size(); j++) {
                 ColumnStat& cs = columns[j];
-                resultText+="," + QString::number(cs.charFreqs[idx]);
+                resultText += "," + QString::number(cs.charFreqs[idx]);
+                FileAndDirectoryUtils::dumpStringToFile(f, resultText);
             }
-            resultText+="\n";
+            resultText += "\n";
         }
     }
 
-    if (s.outFormat != DNAStatMSAProfileOutputFormat_Show) {
-        QFile f(s.outURL);
-        bool ok = f.open(QIODevice::Truncate | QIODevice::WriteOnly);
-        if (!ok) {
-            setError(tr("Can't open file for write: %1").arg(s.outURL));
-            return;
-        }
-        f.write(resultText.toLocal8Bit());
+    if (f != NULL) {
+        f->write(resultText.toLocal8Bit());
+        f->close();
+        delete f;
     }
 }
 
diff --git a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.h b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.h
index c060b0b..493fbf1 100644
--- a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.h
+++ b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.h
@@ -22,18 +22,22 @@
 #ifndef _U2_DNASTAT_MSA_PROFILE_DIALOG_H_
 #define _U2_DNASTAT_MSA_PROFILE_DIALOG_H_
 
-#include "ui/ui_DNAStatMSAProfileDialog.h"
+#include <QHash>
+#include <QSet>
 
 #include <U2Core/global.h>
+#include <U2Core/MAlignment.h>
+#include <U2Core/Task.h>
+#include <U2Core/global.h>
 #include <U2Core/Task.h>
 #include <U2Core/MAlignment.h>
 
-#include <QtCore/QHash>
-#include <QtCore/QSet>
+#include "ui_DNAStatMSAProfileDialog.h"
 
 namespace U2 {
 
 class MSAEditor;
+class SaveDocumentController;
 
 class DNAStatMSAProfileDialog : public QDialog, public Ui_DNAStatMSAProfileDialog {
     Q_OBJECT
@@ -41,15 +45,20 @@ class DNAStatMSAProfileDialog : public QDialog, public Ui_DNAStatMSAProfileDialo
 public:
     DNAStatMSAProfileDialog(QWidget* p, MSAEditor* ctx);
 
-    virtual void accept();
+    void accept();
 
 private slots:
-
-    void sl_selectFile();
-    void sl_formatChanged(bool);
+    void sl_formatSelected();
+    void sl_formatChanged(const QString &newFormat);
 
 private:
+    void initSaveController();
+
     MSAEditor* ctx;
+    SaveDocumentController *saveController;
+
+    static const QString HTML;
+    static const QString CSV;
 };
 
 enum DNAStatMSAProfileOutputFormat {
diff --git a/src/plugins/dna_stat/src/ui/DNAStatMSAProfileDialog.ui b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.ui
similarity index 100%
rename from src/plugins/dna_stat/src/ui/DNAStatMSAProfileDialog.ui
rename to src/plugins/dna_stat/src/DNAStatMSAProfileDialog.ui
diff --git a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp
index e179b9d..3b160b8 100644
--- a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp
+++ b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp
@@ -19,15 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDateTime>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QDateTime>
+#include <QFile>
+#include <QMessageBox>
+#include <QPushButton>
 
 #include <U2Algorithm/MSADistanceAlgorithm.h>
 #include <U2Algorithm/MSADistanceAlgorithmRegistry.h>
@@ -35,12 +30,12 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DocumentModel.h>
+#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Core/MAlignmentObject.h>
 #include <U2Core/TextUtils.h>
 
 #include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include <U2View/MSAEditor.h>
 #include <U2View/WebWindow.h>
@@ -49,9 +44,15 @@
 
 namespace U2 {
 
-DistanceMatrixMSAProfileDialog::DistanceMatrixMSAProfileDialog(QWidget* p, MSAEditor* _c) : QDialog(p), ctx(_c) {
+const QString DistanceMatrixMSAProfileDialog::HTML = "html";
+const QString DistanceMatrixMSAProfileDialog::CSV = "csv";
+
+DistanceMatrixMSAProfileDialog::DistanceMatrixMSAProfileDialog(QWidget* p, MSAEditor* _c)
+    : QDialog(p),
+      ctx(_c),
+      saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467666");
+    new HelpButton(this, buttonBox, "17470598");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Generate"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -67,45 +68,27 @@ DistanceMatrixMSAProfileDialog::DistanceMatrixMSAProfileDialog(QWidget* p, MSAEd
             groupStatisticsCheck->setEnabled(false);
     }
 
-    connect(fileButton, SIGNAL(clicked()), SLOT(sl_selectFile()));
-    connect(htmlRB, SIGNAL(toggled(bool)), SLOT(sl_formatChanged(bool)));
-    connect(csvRB, SIGNAL(toggled(bool)), SLOT(sl_formatChanged(bool)));
-
+    initSaveController();
 }
 
-void DistanceMatrixMSAProfileDialog::sl_selectFile() {
-    LastUsedDirHelper h("plugin_dna_stat");
-    QString filter;
-    if (csvRB->isChecked()) {
-        filter = tr("CSV files") + " (*.csv)";
-    } else {
-        filter = tr("HTML files") + " (*.html)";
-    }
-    h.url = U2FileDialog::getSaveFileName(this, tr("Select file to save report to.."), h.dir, filter);
-    if (h.url.isEmpty()) {
-        return;
-    }
-    fileEdit->setText(h.url);
-}
+void DistanceMatrixMSAProfileDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = "plugin_dna_stat";
+    config.defaultFormatId = HTML;
+    config.fileDialogButton = fileButton;
+    config.fileNameEdit = fileEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file to save report to..");
 
-void DistanceMatrixMSAProfileDialog::sl_formatChanged(bool) {
-    QString t = fileEdit->text();
-    if (t.isEmpty()) {
-        return;
-    }
-    QString ext = ".html";
-    if (csvRB->isChecked()) {
-        ext = ".csv";
-    }
-    if (t.endsWith(ext)) {
-        return;
-    }
-    QFileInfo fi(t);
-    QString dir = fi.absoluteDir().absolutePath();
-    if (!(dir.endsWith('/') || dir.endsWith('\\'))) {
-        dir.append('/');
-    }
-    fileEdit->setText(dir + fi.baseName() + ext);
+    SaveDocumentController::SimpleFormatsInfo formats;
+    formats.addFormat(HTML, HTML.toUpper(), QStringList() << HTML);
+    formats.addFormat(CSV, CSV.toUpper(), QStringList() << CSV);
+
+    saveController = new SaveDocumentController(config, formats, this);
+
+    connect(saveController, SIGNAL(si_formatChanged(const QString &)), SLOT(sl_formatChanged(const QString &)));
+    connect(htmlRB, SIGNAL(toggled(bool)), SLOT(sl_formatSelected()));
+    connect(csvRB, SIGNAL(toggled(bool)), SLOT(sl_formatSelected()));
 }
 
 void DistanceMatrixMSAProfileDialog::accept() {
@@ -124,7 +107,7 @@ void DistanceMatrixMSAProfileDialog::accept() {
     s.ctx = ctx;
 
     if (saveBox->isChecked()) {
-        s.outURL = fileEdit->text();
+        s.outURL = saveController->getSaveFileName();
         if (s.outURL.isEmpty()) {
             QMessageBox::critical(this, tr("Error"), tr("File URL is empty"));
             return;
@@ -135,9 +118,22 @@ void DistanceMatrixMSAProfileDialog::accept() {
     QDialog::accept();
 }
 
+void DistanceMatrixMSAProfileDialog::sl_formatSelected() {
+    saveController->setFormat(csvRB->isChecked() ? CSV : HTML);
+}
+
+void DistanceMatrixMSAProfileDialog::sl_formatChanged(const QString &newFormatId) {
+    if (HTML == newFormatId) {
+        htmlRB->setChecked(true);
+    } else {
+        csvRB->setChecked(true);
+    }
+}
+
 
 //////////////////////////////////////////////////////////////////////////
 // task
+
 DistanceMatrixMSAProfileTask::DistanceMatrixMSAProfileTask(const DistanceMatrixMSAProfileTaskSettings& _s)
 : Task(tr("Generate distance matrix"), TaskFlags_NR_FOSE_COSC), s(_s)
 {
@@ -158,11 +154,11 @@ void DistanceMatrixMSAProfileTask::prepare() {
     addSubTask(algo);
 }
 
-QList<Task*> DistanceMatrixMSAProfileTask::onSubTaskFinished(Task* subTask){
+QList<Task*> DistanceMatrixMSAProfileTask::onSubTaskFinished(Task* subTask) {
     MSADistanceAlgorithm* algo = qobject_cast<MSADistanceAlgorithm*>(subTask);
     QList<Task*> res;
     if (algo != NULL) {
-        if(algo->hasError() || algo->isCanceled()) {
+        if (algo->hasError() || algo->isCanceled()) {
             setError(algo->getError());
             return res;
         }
@@ -170,34 +166,48 @@ QList<Task*> DistanceMatrixMSAProfileTask::onSubTaskFinished(Task* subTask){
             setError(tr("No output file name specified"));
             return res;
         }
+        QFile *f = NULL;
         if (s.outFormat == DistanceMatrixMSAProfileOutputFormat_Show || s.outFormat == DistanceMatrixMSAProfileOutputFormat_HTML) {
-            QString colors[] = {"#ff5555", "#ff9c00", "#60ff00", "#a1d1e5", "#dddddd"};
+            if (s.outFormat == DistanceMatrixMSAProfileOutputFormat_HTML) {
+                f = new QFile(s.outURL);
+                if (!f->open(QIODevice::Truncate | QIODevice::WriteOnly)) {
+                    setError(tr("Can't open file for write: %1").arg(s.outURL));
+                    return res;
+                }
+            }
+            QString colors[] = { "#ff5555", "#ff9c00", "#60ff00", "#a1d1e5", "#dddddd" };
 
             //setup style
-            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+="--></STYLE>\n";
+            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 += "--></STYLE>\n";
 
             //header
-            resultText+= "<h2>" + tr("Multiple Sequence Alignment Distance Matrix") + "</h2><br>\n";
+            resultText += "<h2>" + tr("Multiple Sequence Alignment Distance Matrix") + "</h2><br>\n";
 
-            resultText+="<table>\n";
-            resultText+= "<tr><td><b>"+tr("Alignment file:") + "</b></td><td>" + s.profileURL + "@" + s.profileName+ "</td></tr>\n";
-            resultText+= "<tr><td><b>"+tr("Table content:") + "</b></td><td>" +(s.usePercents ? (algo->getName()+" in percent") : algo->getName()) + "</td></tr>\n";
-            resultText+= "</table>\n";
-            resultText+="<br><br>\n";
+            resultText += "<table>\n";
+            resultText += "<tr><td><b>" + tr("Alignment file:") + "</b></td><td>" + s.profileURL + "@" + s.profileName + "</td></tr>\n";
+            resultText += "<tr><td><b>" + tr("Table content:") + "</b></td><td>" + (s.usePercents ? (algo->getName() + " in percent") : algo->getName()) + "</td></tr>\n";
+            resultText += "</table>\n";
+            resultText += "<br><br>\n";
 
+            FileAndDirectoryUtils::dumpStringToFile(f, resultText);
             bool isSimilarity = algo->isSimilarityMeasure();
+            try {
+                createDistanceTable(algo, s.ma.getRows(), 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."));
+                return res;
+            }
 
-            createDistanceTable(algo, s.ma.getRows());
-
-            resultText+="<br><br>\n";
+            resultText += "<br><br>\n";
 
-            if(true == s.showGroupStatistic) {
-                resultText+= "<tr><td><b>"+tr("Group statistics of multiple alignment") + "</td></tr>\n";
-                resultText+="<table>\n";
+            if (true == s.showGroupStatistic) {
+                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;
@@ -208,70 +218,80 @@ QList<Task*> DistanceMatrixMSAProfileTask::onSubTaskFinished(Task* subTask){
                     row.setName(QString("Group %1: ").arg(i) + "(" + row.getName() + ")");
                     rows.append(s.ma.getRow(reg.startPos + qrand() % reg.length));
 
-                    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() + ", ";
+                    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() + ", ";
                     resultText += "\n";
                     i++;
-                    }
-                resultText+= "</table>\n";
-                resultText+="<br><br>\n";
-                createDistanceTable(algo, rows);
-                        }
-
-
-            //legend:
-            resultText+="<br><br>\n";
-            resultText+= "<table><tr><td><b>" + tr("Legend:")+"  </b>\n";
-            if(isSimilarity){
-                resultText+="<td bgcolor="+colors[4]+">10%</td>\n";
-                resultText+="<td bgcolor="+colors[3]+">25%</td>\n";
-                resultText+="<td bgcolor="+colors[2]+">50%</td>\n";
-                resultText+="<td bgcolor="+colors[1]+">70%</td>\n";
-                resultText+="<td bgcolor="+colors[0]+">90%</td>\n";
-            }else{
-                resultText+="<td bgcolor="+colors[0]+">10%</td>\n";
-                resultText+="<td bgcolor="+colors[1]+">25%</td>\n";
-                resultText+="<td bgcolor="+colors[2]+">50%</td>\n";
-                resultText+="<td bgcolor="+colors[3]+">70%</td>\n";
-                resultText+="<td bgcolor="+colors[4]+">90%</td>\n";
+                    FileAndDirectoryUtils::dumpStringToFile(f, resultText);
+                }
+                resultText += "</table>\n";
+                resultText += "<br><br>\n";
+                try {
+                    createDistanceTable(algo, rows, 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."));
+                    return res;
+                }
+
+
+                //legend:
+                resultText += "<br><br>\n";
+                resultText += "<table><tr><td><b>" + tr("Legend:") + "  </b>\n";
+                if (isSimilarity) {
+                    resultText += "<td bgcolor=" + colors[4] + ">10%</td>\n";
+                    resultText += "<td bgcolor=" + colors[3] + ">25%</td>\n";
+                    resultText += "<td bgcolor=" + colors[2] + ">50%</td>\n";
+                    resultText += "<td bgcolor=" + colors[1] + ">70%</td>\n";
+                    resultText += "<td bgcolor=" + colors[0] + ">90%</td>\n";
+                } else {
+                    resultText += "<td bgcolor=" + colors[0] + ">10%</td>\n";
+                    resultText += "<td bgcolor=" + colors[1] + ">25%</td>\n";
+                    resultText += "<td bgcolor=" + colors[2] + ">50%</td>\n";
+                    resultText += "<td bgcolor=" + colors[3] + ">70%</td>\n";
+                    resultText += "<td bgcolor=" + colors[4] + ">90%</td>\n";
+                }
+                resultText += "</tr></table><br>\n";
             }
-            resultText+="</tr></table><br>\n";
         } else {
-            resultText+= " ";
-            for (int i=0; i < s.ma.getNumRows(); i++) {
+            f = new QFile(s.outURL);
+            if (!f->open(QIODevice::Truncate | QIODevice::WriteOnly)) {
+                setError(tr("Can't open file for write: %1").arg(s.outURL));
+                return res;
+            }
+            resultText += " ";
+            for (int i = 0; i < s.ma.getNumRows(); i++) {
                 QString name = s.ma.getRow(i).getName();
                 TextUtils::wrapForCSV(name);
-                resultText+= "," + name;
+                resultText += "," + name;
+                FileAndDirectoryUtils::dumpStringToFile(f, resultText);
             }
-            resultText+="\n";
+            resultText += "\n";
 
-            for (int i=0; i < s.ma.getNumRows(); i++) {
+            for (int i = 0; i < s.ma.getNumRows(); i++) {
                 QString name = s.ma.getRow(i).getName();
                 TextUtils::wrapForCSV(name);
-                resultText+=name;
-                for (int j=0; j < s.ma.getNumRows(); j++) {
+                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));
-                    resultText+= "," + QString::number(val) + (s.usePercents ? "%" : "");
+                    resultText += "," + QString::number(val) + (s.usePercents ? "%" : "");
+                    FileAndDirectoryUtils::dumpStringToFile(f, resultText);
                 }
-                resultText+="\n";
+                resultText += "\n";
             }
         }
 
-        if (s.outFormat != DistanceMatrixMSAProfileOutputFormat_Show) {
-            QFile f(s.outURL);
-            bool ok = f.open(QIODevice::Truncate | QIODevice::WriteOnly);
-            if (!ok) {
-                setError(tr("Can't open file for write: %1").arg(s.outURL));
-                return res;
-            }
-            f.write(resultText.toLocal8Bit());
+        if (f != NULL) {
+            f->write(resultText.toLocal8Bit());
+            f->close();
+            delete f;
         }
     }
     return res;
 }
 
-void DistanceMatrixMSAProfileTask::createDistanceTable(MSADistanceAlgorithm* algo, const QList<MAlignmentRow> &rows)
+void DistanceMatrixMSAProfileTask::createDistanceTable(MSADistanceAlgorithm* algo, const QList<MAlignmentRow> &rows, QFile *f)
 {
     int maxVal = s.usePercents ? 100 : s.ma.getLength();
     QString colors[] = {"#ff5555", "#ff9c00", "#60ff00", "#a1d1e5", "#dddddd"};
@@ -279,23 +299,23 @@ void DistanceMatrixMSAProfileTask::createDistanceTable(MSADistanceAlgorithm* alg
     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";
+        resultText += "<tr><td><b>"+tr("There is not enough groups to create distance matrix!") + "</td></tr>\n";
         return;
     }
 
-    resultText+="<table class=tbl>\n";
-    resultText+="<tr><td></td>";
+    resultText += "<table class=tbl>\n";
+    resultText += "<tr><td></td>";
     for (int i=0; i < rows.size(); i++) {
         QString name = rows.at(i).getName();
-        resultText+="<td> " + name + "</td>";
+        resultText += "<td> " + name + "</td>";
     }
-    resultText+="</tr>\n";
+    resultText += "</tr>\n";
 
     //out char freqs
     for (int i=0; i < rows.size(); i++) {
         QString name = rows.at(i).getName();
-        resultText+="<tr>";
-        resultText+="<td> " + name + "</td>";
+        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();
@@ -319,11 +339,12 @@ void DistanceMatrixMSAProfileTask::createDistanceTable(MSADistanceAlgorithm* alg
                     colorStr = " bgcolor=" + colors[4];
                 }
             }
-            resultText+="<td"+colorStr+">" + QString::number(val) + (s.usePercents ? "%" : "") + "</td>";
+            resultText += "<td"+colorStr+">" + QString::number(val) + (s.usePercents ? "%" : "") + "</td>";
+            FileAndDirectoryUtils::dumpStringToFile(f, resultText);
         }
-        resultText+="</tr>\n";
+        resultText += "</tr>\n";
     }
-    resultText+="</table>\n";
+    resultText += "</table>\n";
 }
 
 
diff --git a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.h b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.h
index 934f32e..9ece48a 100644
--- a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.h
+++ b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.h
@@ -22,19 +22,24 @@
 #ifndef _U2_DISTANCE_MATRIX_MSA_PROFILE_DIALOG_H_
 #define _U2_DISTANCE_MATRIX_MSA_PROFILE_DIALOG_H_
 
-#include "ui/ui_DistanceMatrixMSAProfileDialog.h"
+#include <QHash>
+#include <QSet>
 
 #include <U2Core/global.h>
 #include <U2Core/Task.h>
 #include <U2Core/MAlignment.h>
 
-#include <QtCore/QHash>
-#include <QtCore/QSet>
+#include <QHash>
+#include <QSet>
+#include "ui_DistanceMatrixMSAProfileDialog.h"
+
+class QFile;
 
 namespace U2 {
 
 class MSAEditor;
 class MSADistanceAlgorithm;
+class SaveDocumentController;
 
 class DistanceMatrixMSAProfileDialog : public QDialog, public Ui_DistanceMatrixMSAProfileDialog {
     Q_OBJECT
@@ -42,15 +47,20 @@ class DistanceMatrixMSAProfileDialog : public QDialog, public Ui_DistanceMatrixM
 public:
     DistanceMatrixMSAProfileDialog(QWidget* p, MSAEditor* ctx);
 
-    virtual void accept();
+    void accept();
 
 private slots:
-
-    void sl_selectFile();
-    void sl_formatChanged(bool);
+    void sl_formatSelected();
+    void sl_formatChanged(const QString &newFormatId);
 
 private:
+    void initSaveController();
+
     MSAEditor* ctx;
+    SaveDocumentController *saveController;
+
+    static const QString HTML;
+    static const QString CSV;
 };
 
 enum DistanceMatrixMSAProfileOutputFormat {
@@ -82,7 +92,7 @@ public:
 
     virtual void prepare();
 
-    void createDistanceTable(MSADistanceAlgorithm* algo, const QList<MAlignmentRow> &rows);
+    void createDistanceTable(MSADistanceAlgorithm* algo, const QList<MAlignmentRow> &rows, QFile *f);
 
     QList<Task*> createStatisticsDocument(Task* subTask);
 
@@ -91,7 +101,6 @@ public:
     ReportResult report();
 
 private:
-
     DistanceMatrixMSAProfileTaskSettings   s;
     QString                         resultText;
 };
diff --git a/src/plugins/dna_stat/src/ui/DistanceMatrixMSAProfileDialog.ui b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.ui
similarity index 100%
rename from src/plugins/dna_stat/src/ui/DistanceMatrixMSAProfileDialog.ui
rename to src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.ui
diff --git a/src/plugins/dna_stat/transl/english.ts b/src/plugins/dna_stat/transl/english.ts
index 2285596..41c4fb0 100644
--- a/src/plugins/dna_stat/transl/english.ts
+++ b/src/plugins/dna_stat/transl/english.ts
@@ -4,67 +4,67 @@
 <context>
     <name>DNAStatMSAProfileDialog</name>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="14"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="14"/>
         <source>Generate Alignment Profile</source>
         <translation>Generate Alignment Profile</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="20"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="20"/>
         <source>Profile mode</source>
         <translation>Profile mode</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="26"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="26"/>
         <source>Counts</source>
         <translation>Counts</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="36"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="36"/>
         <source>Percents</source>
         <translation>Percents</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="46"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="46"/>
         <source>Custom options</source>
         <translation>Custom options</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="52"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="52"/>
         <source>Show scores for gaps</source>
         <translation>Show scores for gaps</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="59"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="59"/>
         <source>Show scores for symbols not used in alignment</source>
         <translation>Show scores for symbols not used in alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="66"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="66"/>
         <source>Skip gaps in consensus position increments</source>
         <translation>Skip gaps in consensus position increments</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="76"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="76"/>
         <source>Save profile to file</source>
         <translation>Save profile to file</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="88"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="88"/>
         <source>File</source>
         <translation>File</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="98"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="98"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="105"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="105"/>
         <source>Hypertext  (.HTML)</source>
         <translation>Hypertext  (.HTML)</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="115"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="115"/>
         <source>Comma separated ( .CSV)</source>
         <translation>Comma separated ( .CSV)</translation>
     </message>
@@ -72,62 +72,62 @@
 <context>
     <name>DistanceMatrixMSAProfileDialog</name>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="14"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="14"/>
         <source>Generate Distance Matrix</source>
         <translation>Generate Distance Matrix</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="22"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="22"/>
         <source>Distance algorithm</source>
         <translation>Distance algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="34"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="34"/>
         <source>Profile mode</source>
         <translation>Profile mode</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="40"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="40"/>
         <source>Counts</source>
         <translation>Counts</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="50"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="50"/>
         <source>Percents</source>
         <translation>Percents</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="57"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="57"/>
         <source>Exclude gaps</source>
         <translation>Exclude gaps</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="67"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="67"/>
         <source>Show group statistics of multiple alignment</source>
         <translation>Show group statistics of multiple alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="77"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="77"/>
         <source>Save profile to file</source>
         <translation>Save profile to file</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="89"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="89"/>
         <source>File</source>
         <translation>File</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="99"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="99"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="106"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="106"/>
         <source>Hypertext  (.HTML)</source>
         <translation>Hypertext  (.HTML)</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="116"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="116"/>
         <source>Comma separated ( .CSV)</source>
         <translation>Comma separated ( .CSV)</translation>
     </message>
@@ -143,27 +143,25 @@
 <context>
     <name>U2::DNAStatMSAProfileDialog</name>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="59"/>
         <source>CSV files</source>
-        <translation>CSV files</translation>
+        <translation type="vanished">CSV files</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="61"/>
         <source>HTML files</source>
-        <translation>HTML files</translation>
+        <translation type="vanished">HTML files</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="63"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="73"/>
         <source>Select file to save report to..</source>
         <translation>Select file to save report to..</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="106"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="102"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="106"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="102"/>
         <source>File URL is empty</source>
         <translation>File URL is empty</translation>
     </message>
@@ -171,57 +169,68 @@
 <context>
     <name>U2::DNAStatMSAProfileTask</name>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="119"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="115"/>
         <source>Generate alignment profile</source>
         <translation>Generate alignment profile</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="131"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="127"/>
         <source>No output file name specified</source>
         <translation>No output file name specified</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="149"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="155"/>
         <source>Alignment file:</source>
         <translation>Alignment file:</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="150"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
         <source>Table content:</source>
         <translation>Table content:</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="150"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
         <source>symbol percents</source>
         <translation>symbol percents</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="150"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
         <source>symbol counts</source>
         <translation>symbol counts</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="246"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="136"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="247"/>
         <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="258"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="238"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="240"/>
+        <source>There is not enough memory to generate this grid profile in UGENE.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="283"/>
         <source>Alignment profile</source>
         <translation>Alignment profile</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="258"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="283"/>
         <source>Alignment profile for %1</source>
         <translation>Alignment profile for %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="146"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="152"/>
         <source>Multiple Sequence Alignment Grid Profile</source>
         <translation>Multiple Sequence Alignment Grid Profile</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="214"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="222"/>
         <source>Legend:</source>
         <translation>Legend:</translation>
     </message>
@@ -343,37 +352,35 @@
 <context>
     <name>U2::DistanceMatrixMSAProfileDialog</name>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="55"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="56"/>
         <source>Generate</source>
         <translation>Generate</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="56"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="57"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="80"/>
         <source>CSV files</source>
-        <translation>CSV files</translation>
+        <translation type="vanished">CSV files</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="82"/>
         <source>HTML files</source>
-        <translation>HTML files</translation>
+        <translation type="vanished">HTML files</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="84"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="81"/>
         <source>Select file to save report to..</source>
         <translation>Select file to save report to..</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="129"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="112"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="129"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="112"/>
         <source>File URL is empty</source>
         <translation>File URL is empty</translation>
     </message>
@@ -381,57 +388,64 @@
 <context>
     <name>U2::DistanceMatrixMSAProfileTask</name>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="142"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="138"/>
         <source>Generate distance matrix</source>
         <translation>Generate distance matrix</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="170"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="166"/>
         <source>No output file name specified</source>
         <translation>No output file name specified</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="184"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="188"/>
         <source>Multiple Sequence Alignment Distance Matrix</source>
         <translation>Multiple Sequence Alignment Distance Matrix</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="187"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="191"/>
         <source>Alignment file:</source>
         <translation>Alignment file:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="188"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="192"/>
         <source>Table content:</source>
         <translation>Table content:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="199"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="202"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="234"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="209"/>
         <source>Group statistics of multiple alignment</source>
         <translation>Group statistics of multiple alignment</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="225"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="241"/>
         <source>Legend:</source>
         <translation>Legend:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="265"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="174"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="260"/>
         <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="282"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="302"/>
         <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="335"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="356"/>
         <source>Distance matrix</source>
         <translation>Distance matrix</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="335"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="356"/>
         <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 dc5e785..68a04fd 100644
--- a/src/plugins/dna_stat/transl/russian.ts
+++ b/src/plugins/dna_stat/transl/russian.ts
@@ -4,67 +4,67 @@
 <context>
     <name>DNAStatMSAProfileDialog</name>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="14"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="14"/>
         <source>Generate Alignment Profile</source>
         <translation>Генерация сеточного отчета для выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="20"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="20"/>
         <source>Profile mode</source>
         <translation>Использовать</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="26"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="26"/>
         <source>Counts</source>
         <translation>Числа</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="36"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="36"/>
         <source>Percents</source>
         <translation>Проценты</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="46"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="46"/>
         <source>Custom options</source>
         <translation>Дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="52"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="52"/>
         <source>Show scores for gaps</source>
         <translation>Включить в отчет статистику для пробелов</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="59"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="59"/>
         <source>Show scores for symbols not used in alignment</source>
         <translation>Включить в отчет неиспользуемые символы</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="66"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="66"/>
         <source>Skip gaps in consensus position increments</source>
         <translation>Не учитывать пробелы в шкале позиций</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="76"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="76"/>
         <source>Save profile to file</source>
         <translation>Сохранить отчет в файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="88"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="88"/>
         <source>File</source>
         <translation>Файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="98"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="98"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="105"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="105"/>
         <source>Hypertext  (.HTML)</source>
         <translation>Гипертекст (.HTML)</translation>
     </message>
     <message>
-        <location filename="../src/ui/DNAStatMSAProfileDialog.ui" line="115"/>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="115"/>
         <source>Comma separated ( .CSV)</source>
         <translation>Значения через запятую (.CSV)</translation>
     </message>
@@ -72,62 +72,62 @@
 <context>
     <name>DistanceMatrixMSAProfileDialog</name>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="14"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="14"/>
         <source>Generate Distance Matrix</source>
         <translation>Рассчитать матрицу расстояний</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="22"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="22"/>
         <source>Distance algorithm</source>
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="34"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="34"/>
         <source>Profile mode</source>
         <translation>Использовать</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="40"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="40"/>
         <source>Counts</source>
         <translation>Числа</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="50"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="50"/>
         <source>Percents</source>
         <translation>Проценты</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="57"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="57"/>
         <source>Exclude gaps</source>
         <translation>Исключить пробелы</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="67"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="67"/>
         <source>Show group statistics of multiple alignment</source>
         <translation>Показать групповую статистику множественного выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="77"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="77"/>
         <source>Save profile to file</source>
         <translation>Сохранить отчет в файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="89"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="89"/>
         <source>File</source>
         <translation>Файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="99"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="99"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="106"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="106"/>
         <source>Hypertext  (.HTML)</source>
         <translation>Гипертекст (.HTML)</translation>
     </message>
     <message>
-        <location filename="../src/ui/DistanceMatrixMSAProfileDialog.ui" line="116"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="116"/>
         <source>Comma separated ( .CSV)</source>
         <translation>Значения через запятую (.CSV)</translation>
     </message>
@@ -143,27 +143,25 @@
 <context>
     <name>U2::DNAStatMSAProfileDialog</name>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="59"/>
         <source>CSV files</source>
-        <translation>CSV файлы</translation>
+        <translation type="vanished">CSV файлы</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="61"/>
         <source>HTML files</source>
-        <translation>HTML файлы</translation>
+        <translation type="vanished">HTML файлы</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="63"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="73"/>
         <source>Select file to save report to..</source>
         <translation>Выберете файл для сохранения отчета..</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="106"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="102"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="106"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="102"/>
         <source>File URL is empty</source>
         <translation>Не указан файл для сохранения отчета</translation>
     </message>
@@ -171,57 +169,68 @@
 <context>
     <name>U2::DNAStatMSAProfileTask</name>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="119"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="115"/>
         <source>Generate alignment profile</source>
         <translation>Генерация сеточного отчета</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="131"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="127"/>
         <source>No output file name specified</source>
         <translation>Не указано имя файла для сохранения отчета</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="149"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="155"/>
         <source>Alignment file:</source>
         <translation>Файл:</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="150"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
         <source>Table content:</source>
         <translation>Результаты:</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="150"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
         <source>symbol percents</source>
         <translation>процент символа</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="150"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
         <source>symbol counts</source>
         <translation>количество символов</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="246"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="136"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="247"/>
         <source>Can't open file for write: %1</source>
         <translation>Не могу открыть файл для записи: %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="258"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="238"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="240"/>
+        <source>There is not enough memory to generate this grid profile in UGENE.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="283"/>
         <source>Alignment profile</source>
         <translation>Отчет для множественного выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="258"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="283"/>
         <source>Alignment profile for %1</source>
         <translation>Отчет для множественного выравнивания %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="146"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="152"/>
         <source>Multiple Sequence Alignment Grid Profile</source>
         <translation>Сеточный отчет для множественного выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="214"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="222"/>
         <source>Legend:</source>
         <translation>Легенда:</translation>
     </message>
@@ -343,37 +352,35 @@
 <context>
     <name>U2::DistanceMatrixMSAProfileDialog</name>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="55"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="56"/>
         <source>Generate</source>
         <translation>Создать отчет</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="56"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="57"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="80"/>
         <source>CSV files</source>
-        <translation>CSV файлы</translation>
+        <translation type="vanished">CSV файлы</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="82"/>
         <source>HTML files</source>
-        <translation>HTML файлы</translation>
+        <translation type="vanished">HTML файлы</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="84"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="81"/>
         <source>Select file to save report to..</source>
         <translation>Выберете файл для сохранения отчета..</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="129"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="112"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="129"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="112"/>
         <source>File URL is empty</source>
         <translation>Не указан файл для сохранения отчета</translation>
     </message>
@@ -381,57 +388,64 @@
 <context>
     <name>U2::DistanceMatrixMSAProfileTask</name>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="142"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="138"/>
         <source>Generate distance matrix</source>
         <translation>Рассчитать матрицу расстояний</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="170"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="166"/>
         <source>No output file name specified</source>
         <translation>Не указано имя файла для сохранения отчета</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="184"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="188"/>
         <source>Multiple Sequence Alignment Distance Matrix</source>
         <translation>Матрица расстояний множественного выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="187"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="191"/>
         <source>Alignment file:</source>
         <translation>Файл:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="188"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="192"/>
         <source>Table content:</source>
         <translation>Результаты:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="199"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="202"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="234"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="209"/>
         <source>Group statistics of multiple alignment</source>
         <translation>Групповая статистика множественного выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="225"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="241"/>
         <source>Legend:</source>
         <translation>Легенда:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="265"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="174"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="260"/>
         <source>Can't open file for write: %1</source>
         <translation>Не могу открыть файл для записи: %1</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="282"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="302"/>
         <source>There is not enough groups to create distance matrix!</source>
         <translation>Недостаточно групп для того, чтобы создать матрицу расстояний!</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="335"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="356"/>
         <source>Distance matrix</source>
         <translation>Матрица расстояний</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="335"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="356"/>
         <source>Distance matrix for %1</source>
         <translation>Матрица расстояний для %1</translation>
     </message>
diff --git a/src/plugins/dotplot/CMakeLists.txt b/src/plugins/dotplot/CMakeLists.txt
new file mode 100644
index 0000000..b08ff12
--- /dev/null
+++ b/src/plugins/dotplot/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME dotplot)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/dotplot/dotplot.pro b/src/plugins/dotplot/dotplot.pro
index f7f667e..32d9bc6 100644
--- a/src/plugins/dotplot/dotplot.pro
+++ b/src/plugins/dotplot/dotplot.pro
@@ -11,9 +11,9 @@ HEADERS += src/DotPlotClasses.h \
            src/DotPlotTasks.h \
            src/DotPlotWidget.h
 
-FORMS +=   src/ui/DotPlotDialog.ui \
-           src/ui/DotPlotFilterDialog.ui \
-           src/ui/DotPlotFilesDialog.ui
+FORMS +=   src/DotPlotDialog.ui \
+           src/DotPlotFilterDialog.ui \
+           src/DotPlotFilesDialog.ui
 
 SOURCES += src/DotPlotClasses.cpp \
            src/DotPlotDialog.cpp \
diff --git a/src/plugins/dotplot/src/DotPlotDialog.cpp b/src/plugins/dotplot/src/DotPlotDialog.cpp
index d2f7c8d..05a7ad8 100644
--- a/src/plugins/dotplot/src/DotPlotDialog.cpp
+++ b/src/plugins/dotplot/src/DotPlotDialog.cpp
@@ -53,7 +53,7 @@ DotPlotDialog::DotPlotDialog(QWidget *parent, AnnotatedDNAView* currentADV, int
 ,openSequenceTask(NULL), curURL("")
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467607");
+    new HelpButton(this, buttonBox, "17470536");
     startButton = buttonBox->button(QDialogButtonBox::Ok);
 
     SAFE_POINT(adv != NULL, "DotPlotDialog called without view context!", );
diff --git a/src/plugins/dotplot/src/DotPlotDialog.h b/src/plugins/dotplot/src/DotPlotDialog.h
index ffbab9c..fa04dd7 100644
--- a/src/plugins/dotplot/src/DotPlotDialog.h
+++ b/src/plugins/dotplot/src/DotPlotDialog.h
@@ -22,7 +22,7 @@
 #ifndef _U2_DOT_PLOT_DIALOG_H_
 #define _U2_DOT_PLOT_DIALOG_H_
 
-#include <ui/ui_DotPlotDialog.h>
+#include <ui_DotPlotDialog.h>
 
 #include <U2Algorithm/RepeatFinderSettings.h>
 #if (QT_VERSION < 0x050000) //Qt 5
diff --git a/src/plugins/dotplot/src/ui/DotPlotDialog.ui b/src/plugins/dotplot/src/DotPlotDialog.ui
similarity index 100%
rename from src/plugins/dotplot/src/ui/DotPlotDialog.ui
rename to src/plugins/dotplot/src/DotPlotDialog.ui
diff --git a/src/plugins/dotplot/src/DotPlotFilesDialog.cpp b/src/plugins/dotplot/src/DotPlotFilesDialog.cpp
index 69ad368..7735f00 100644
--- a/src/plugins/dotplot/src/DotPlotFilesDialog.cpp
+++ b/src/plugins/dotplot/src/DotPlotFilesDialog.cpp
@@ -40,7 +40,7 @@ DotPlotFilesDialog::DotPlotFilesDialog(QWidget *parent)
 : QDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467607");
+    new HelpButton(this, buttonBox, "17470536");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Next"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dotplot/src/DotPlotFilesDialog.h b/src/plugins/dotplot/src/DotPlotFilesDialog.h
index 1407977..0e8c07f 100644
--- a/src/plugins/dotplot/src/DotPlotFilesDialog.h
+++ b/src/plugins/dotplot/src/DotPlotFilesDialog.h
@@ -22,7 +22,7 @@
 #ifndef _U2_DOT_PLOT_FILES_DIALOG_H_
 #define _U2_DOT_PLOT_FILES_DIALOG_H_
 
-#include <ui/ui_DotPlotFilesDialog.h>
+#include <ui_DotPlotFilesDialog.h>
 
 namespace U2 {
 class ADVSequenceObjectContext;
diff --git a/src/plugins/dotplot/src/ui/DotPlotFilesDialog.ui b/src/plugins/dotplot/src/DotPlotFilesDialog.ui
similarity index 100%
rename from src/plugins/dotplot/src/ui/DotPlotFilesDialog.ui
rename to src/plugins/dotplot/src/DotPlotFilesDialog.ui
diff --git a/src/plugins/dotplot/src/DotPlotFilterDialog.cpp b/src/plugins/dotplot/src/DotPlotFilterDialog.cpp
index 3a5e6c2..8d05c7c 100644
--- a/src/plugins/dotplot/src/DotPlotFilterDialog.cpp
+++ b/src/plugins/dotplot/src/DotPlotFilterDialog.cpp
@@ -47,7 +47,7 @@ DotPlotFilterDialog::DotPlotFilterDialog(QWidget *parent, ADVSequenceObjectConte
 ,seqYItem(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467617");
+    new HelpButton(this, buttonBox, "17470546");
 
 
     {
diff --git a/src/plugins/dotplot/src/DotPlotFilterDialog.h b/src/plugins/dotplot/src/DotPlotFilterDialog.h
index d85dbe6..8541009 100644
--- a/src/plugins/dotplot/src/DotPlotFilterDialog.h
+++ b/src/plugins/dotplot/src/DotPlotFilterDialog.h
@@ -22,7 +22,7 @@
 #ifndef _U2_DOT_PLOT_FILTER_DIALOG_H_
 #define _U2_DOT_PLOT_FILTER_DIALOG_H_
 
-#include <ui/ui_DotPlotFilterDialog.h>
+#include <ui_DotPlotFilterDialog.h>
 
 namespace U2 {
 
diff --git a/src/plugins/dotplot/src/ui/DotPlotFilterDialog.ui b/src/plugins/dotplot/src/DotPlotFilterDialog.ui
similarity index 100%
rename from src/plugins/dotplot/src/ui/DotPlotFilterDialog.ui
rename to src/plugins/dotplot/src/DotPlotFilterDialog.ui
diff --git a/src/plugins/dotplot/src/DotPlotWidget.cpp b/src/plugins/dotplot/src/DotPlotWidget.cpp
index 75c6b61..a603acd 100644
--- a/src/plugins/dotplot/src/DotPlotWidget.cpp
+++ b/src/plugins/dotplot/src/DotPlotWidget.cpp
@@ -35,6 +35,7 @@
 #include <U2Core/DNATranslation.h>
 #include <U2Core/L10n.h>
 #include <U2Core/MultiTask.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -42,7 +43,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/ExportImageDialog.h>
 #include <U2Gui/GraphUtils.h>
-#include <U2Core/QObjectScopedPointer.h>
+#include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include <U2View/ADVSequenceObjectContext.h>
diff --git a/src/plugins/dotplot/transl/english.ts b/src/plugins/dotplot/transl/english.ts
index 61d4629..e3b5352 100644
--- a/src/plugins/dotplot/transl/english.ts
+++ b/src/plugins/dotplot/transl/english.ts
@@ -4,93 +4,93 @@
 <context>
     <name>DotPlotDialog</name>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="17"/>
+        <location filename="../src/DotPlotDialog.ui" line="17"/>
         <source>DotPlot</source>
         <translation>DotPlot</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="30"/>
+        <location filename="../src/DotPlotDialog.ui" line="30"/>
         <source>Dotplot parameters</source>
         <translation>Dotplot parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="52"/>
+        <location filename="../src/DotPlotDialog.ui" line="52"/>
         <source>Custom algorithm</source>
         <translation>Custom algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="99"/>
+        <location filename="../src/DotPlotDialog.ui" line="99"/>
         <source>X axis sequence</source>
         <translation>X axis sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="112"/>
+        <location filename="../src/DotPlotDialog.ui" line="112"/>
         <source>Minimum repeat length</source>
         <translation>Minimum repeat length</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="119"/>
+        <location filename="../src/DotPlotDialog.ui" line="119"/>
         <source>Y axis sequence</source>
         <translation>Y axis sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="126"/>
+        <location filename="../src/DotPlotDialog.ui" line="126"/>
         <source>Repeats  identity</source>
         <translation>Repeats  identity</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="151"/>
+        <location filename="../src/DotPlotDialog.ui" line="151"/>
         <source>bp</source>
         <translation>bp</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="179"/>
+        <location filename="../src/DotPlotDialog.ui" line="179"/>
         <source>Heuristic based selection of repeat length so the number of repeats in the sequence will not exceed 1000</source>
         <translation>Heuristic based selection of repeat length so the number of repeats in the sequence will not exceed 1000</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="182"/>
+        <location filename="../src/DotPlotDialog.ui" line="182"/>
         <source>1k</source>
         <translation>1k</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="207"/>
+        <location filename="../src/DotPlotDialog.ui" line="207"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="229"/>
+        <location filename="../src/DotPlotDialog.ui" line="229"/>
         <source>Resets repeats identity to 100%</source>
         <translation>Resets repeats identity to 100%</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="232"/>
+        <location filename="../src/DotPlotDialog.ui" line="232"/>
         <source>100</source>
         <translation>100</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="287"/>
+        <location filename="../src/DotPlotDialog.ui" line="287"/>
         <source>Search inverted repeats</source>
         <translation>Search for inverted repeats</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="294"/>
+        <location filename="../src/DotPlotDialog.ui" line="294"/>
         <source>Search direct repeats</source>
         <translation>Search for direct repeats</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="333"/>
-        <location filename="../src/ui/DotPlotDialog.ui" line="340"/>
+        <location filename="../src/DotPlotDialog.ui" line="333"/>
+        <location filename="../src/DotPlotDialog.ui" line="340"/>
         <source>default</source>
         <translation>default</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="365"/>
+        <location filename="../src/DotPlotDialog.ui" line="365"/>
         <source>Click to load a sequence from the file system. The sequence will be added to the combo boxes when it is loaded to the project</source>
         <translation>Click to load a sequence from the file system. The sequence will be added to the combo boxes when it is loaded to the project</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="368"/>
+        <location filename="../src/DotPlotDialog.ui" line="368"/>
         <source>Load Sequence</source>
         <translation>Load Sequence</translation>
     </message>
@@ -98,40 +98,40 @@
 <context>
     <name>DotPlotFilesDialog</name>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="38"/>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="72"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="38"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="72"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="23"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="23"/>
         <source>Build Dotplot from Sequences</source>
         <translation>Build Dotplot from Sequences</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="55"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="55"/>
         <source>File with first sequence</source>
         <translation>File with first sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="45"/>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="96"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="45"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="96"/>
         <source>Join all sequences found in the file</source>
         <translation>Join all sequences found in the file</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="62"/>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="130"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="62"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="130"/>
         <source>Gap size:</source>
         <translation>Gap size:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="79"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="79"/>
         <source>Compare sequence against itself</source>
         <translation>Compare sequence against itself</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="103"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="103"/>
         <source>File with second sequence</source>
         <translation>File with second sequence</translation>
     </message>
@@ -139,92 +139,92 @@
 <context>
     <name>DotPlotFilterDialog</name>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="17"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="17"/>
         <source>DotPlot</source>
         <translation>DotPlot</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="30"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="30"/>
         <source>Dotplot parameters</source>
         <translation>Dotplot parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="42"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="42"/>
         <source>No filtration applied</source>
         <translation>No filtration applied</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="45"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="45"/>
         <source>No Filtration</source>
         <translation>No Filtration</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="55"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="55"/>
         <source>Show results that intersect the features</source>
         <translation>Show results that intersect the features</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="58"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="58"/>
         <source>Features Intersection</source>
         <translation>Features Intersection</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="65"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="65"/>
         <source>Intersection Parameters</source>
         <translation>Intersection Parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="72"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="72"/>
         <source>Feature Name</source>
         <translation>Feature Name</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="80"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="80"/>
         <source>Select all names</source>
         <translation>Select all names</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="83"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="83"/>
         <source>Select All</source>
         <translation>Select All</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="90"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="90"/>
         <source>Invert the current selection</source>
         <translation>Invert the current selection</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="93"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="93"/>
         <source>Invert Selection</source>
         <translation>Invert Selection</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="100"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="100"/>
         <source>Clear the current selection</source>
         <translation>Clear the current selection</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="103"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="103"/>
         <source>Clear Selection</source>
         <translation>Clear Selection</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="110"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="110"/>
         <source>Select names of the features to intersection</source>
         <translation>Select names of the features to intersection</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="113"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="113"/>
         <source>Features Selection</source>
         <translation>Features Selection</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="139"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="139"/>
         <source>Select only different names</source>
         <translation>Select only different names</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="142"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="142"/>
         <source>Different Only</source>
         <translation>Different Only</translation>
     </message>
@@ -293,13 +293,13 @@
     </message>
     <message>
         <location filename="../src/DotPlotFilesDialog.cpp" line="151"/>
-        <source>Unable to detect file format %1.
+        <source>Unable to detect file format %1.
 Select valid file to build dotplot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/DotPlotFilesDialog.cpp" line="159"/>
-        <source>Unable to detect format of given file %1.
+        <source>Unable to detect format of given file %1.
 Select valid file to build dotplot</source>
         <translation type="unfinished"></translation>
     </message>
@@ -478,150 +478,150 @@ Select valid file to build dotplot</source>
 <context>
     <name>U2::DotPlotWidget</name>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="126"/>
+        <location filename="../src/DotPlotWidget.cpp" line="127"/>
         <source>Parameters</source>
         <translation>Parameters</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="129"/>
+        <location filename="../src/DotPlotWidget.cpp" line="130"/>
         <source>Save as image</source>
         <translation>Save as image</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="133"/>
+        <location filename="../src/DotPlotWidget.cpp" line="134"/>
         <source>Save</source>
         <translation>Save</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="136"/>
+        <location filename="../src/DotPlotWidget.cpp" line="137"/>
         <source>Load</source>
         <translation>Load</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="139"/>
+        <location filename="../src/DotPlotWidget.cpp" line="140"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="143"/>
+        <location filename="../src/DotPlotWidget.cpp" line="144"/>
         <source>Filter Results</source>
         <translation>Filter Results</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="217"/>
+        <location filename="../src/DotPlotWidget.cpp" line="218"/>
         <source>Save/Load</source>
         <translation>Save/Load</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="399"/>
+        <location filename="../src/DotPlotWidget.cpp" line="400"/>
         <source>Too many results</source>
         <translation>Too many results</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="399"/>
+        <location filename="../src/DotPlotWidget.cpp" line="400"/>
         <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="544"/>
-        <location filename="../src/DotPlotWidget.cpp" line="604"/>
+        <location filename="../src/DotPlotWidget.cpp" line="545"/>
+        <location filename="../src/DotPlotWidget.cpp" line="605"/>
         <source>File opening error</source>
         <translation>File opening error</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="544"/>
-        <location filename="../src/DotPlotWidget.cpp" line="604"/>
+        <location filename="../src/DotPlotWidget.cpp" line="545"/>
+        <location filename="../src/DotPlotWidget.cpp" line="605"/>
         <source>Error opening file %1</source>
         <translation>Error opening file %1</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="552"/>
-        <location filename="../src/DotPlotWidget.cpp" line="585"/>
-        <location filename="../src/DotPlotWidget.cpp" line="652"/>
+        <location filename="../src/DotPlotWidget.cpp" line="553"/>
+        <location filename="../src/DotPlotWidget.cpp" line="586"/>
+        <location filename="../src/DotPlotWidget.cpp" line="653"/>
         <source>Task is already running</source>
         <translation>Task is already running</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="552"/>
-        <location filename="../src/DotPlotWidget.cpp" line="585"/>
-        <location filename="../src/DotPlotWidget.cpp" line="652"/>
+        <location filename="../src/DotPlotWidget.cpp" line="553"/>
+        <location filename="../src/DotPlotWidget.cpp" line="586"/>
+        <location filename="../src/DotPlotWidget.cpp" line="653"/>
         <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="608"/>
+        <location filename="../src/DotPlotWidget.cpp" line="609"/>
         <source>Sequences are different</source>
         <translation>Sequences are different</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="608"/>
+        <location filename="../src/DotPlotWidget.cpp" line="609"/>
         <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="707"/>
-        <location filename="../src/DotPlotWidget.cpp" line="712"/>
+        <location filename="../src/DotPlotWidget.cpp" line="708"/>
+        <location filename="../src/DotPlotWidget.cpp" line="713"/>
         <source>Invalid sequence</source>
         <translation>Invalid sequence</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="707"/>
+        <location filename="../src/DotPlotWidget.cpp" line="708"/>
         <source>First selected sequence is invalid</source>
         <translation>First selected sequence is invalid</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="712"/>
+        <location filename="../src/DotPlotWidget.cpp" line="713"/>
         <source>Second selected sequence is invalid</source>
         <translation>Second selected sequence is invalid</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="722"/>
+        <location filename="../src/DotPlotWidget.cpp" line="723"/>
         <source>Wrong alphabet types</source>
         <translation>Wrong alphabet types</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="722"/>
+        <location filename="../src/DotPlotWidget.cpp" line="723"/>
         <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="801"/>
+        <location filename="../src/DotPlotWidget.cpp" line="802"/>
         <source>Save dot-plot</source>
         <translation>Save dotplot</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="801"/>
+        <location filename="../src/DotPlotWidget.cpp" line="802"/>
         <source>Save dot-plot data before closing?</source>
         <translation>Save dotplot data before closing?</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="962"/>
+        <location filename="../src/DotPlotWidget.cpp" line="963"/>
         <source>Invalid weight and height parameters!</source>
         <translation>Invalid weight and height parameters!</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="1056"/>
+        <location filename="../src/DotPlotWidget.cpp" line="1057"/>
         <source> (min length %1, identity %2%)</source>
         <translation> (min length %1, identity %2%)</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="215"/>
+        <location filename="../src/DotPlotWidget.cpp" line="216"/>
         <source>Dotplot</source>
         <translation>Dotplot</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="533"/>
+        <location filename="../src/DotPlotWidget.cpp" line="534"/>
         <source>Save Dotplot</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="533"/>
-        <location filename="../src/DotPlotWidget.cpp" line="578"/>
+        <location filename="../src/DotPlotWidget.cpp" line="534"/>
+        <location filename="../src/DotPlotWidget.cpp" line="579"/>
         <source>Dotplot files (*.dpt)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="578"/>
+        <location filename="../src/DotPlotWidget.cpp" line="579"/>
         <source>Load Dotplot</source>
         <translation></translation>
     </message>
diff --git a/src/plugins/dotplot/transl/russian.ts b/src/plugins/dotplot/transl/russian.ts
index 1725e5b..4898774 100644
--- a/src/plugins/dotplot/transl/russian.ts
+++ b/src/plugins/dotplot/transl/russian.ts
@@ -4,93 +4,93 @@
 <context>
     <name>DotPlotDialog</name>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="17"/>
+        <location filename="../src/DotPlotDialog.ui" line="17"/>
         <source>DotPlot</source>
         <translation>DotPlot</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="30"/>
+        <location filename="../src/DotPlotDialog.ui" line="30"/>
         <source>Dotplot parameters</source>
         <translation>Dotplot параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="52"/>
+        <location filename="../src/DotPlotDialog.ui" line="52"/>
         <source>Custom algorithm</source>
         <translation>Алгоритм по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="99"/>
+        <location filename="../src/DotPlotDialog.ui" line="99"/>
         <source>X axis sequence</source>
         <translation>Последовательность оси X</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="112"/>
+        <location filename="../src/DotPlotDialog.ui" line="112"/>
         <source>Minimum repeat length</source>
         <translation>Мин длина повторов</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="119"/>
+        <location filename="../src/DotPlotDialog.ui" line="119"/>
         <source>Y axis sequence</source>
         <translation>Последовательность оси Y</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="126"/>
+        <location filename="../src/DotPlotDialog.ui" line="126"/>
         <source>Repeats  identity</source>
         <translation>Идентичность повторов</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="151"/>
+        <location filename="../src/DotPlotDialog.ui" line="151"/>
         <source>bp</source>
         <translation>нк</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="179"/>
+        <location filename="../src/DotPlotDialog.ui" line="179"/>
         <source>Heuristic based selection of repeat length so the number of repeats in the sequence will not exceed 1000</source>
         <translation>Эвристический подбор длины повторов, с тем чтобы кол-во повторов в последовательности не превысило 1000</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="182"/>
+        <location filename="../src/DotPlotDialog.ui" line="182"/>
         <source>1k</source>
         <translation>1к</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="207"/>
+        <location filename="../src/DotPlotDialog.ui" line="207"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="229"/>
+        <location filename="../src/DotPlotDialog.ui" line="229"/>
         <source>Resets repeats identity to 100%</source>
         <translation>Сбросить к 100%</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="232"/>
+        <location filename="../src/DotPlotDialog.ui" line="232"/>
         <source>100</source>
         <translation>100</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="287"/>
+        <location filename="../src/DotPlotDialog.ui" line="287"/>
         <source>Search inverted repeats</source>
         <translation>Искать инвертированные повторы</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="294"/>
+        <location filename="../src/DotPlotDialog.ui" line="294"/>
         <source>Search direct repeats</source>
         <translation>Искать прямые повторы</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="333"/>
-        <location filename="../src/ui/DotPlotDialog.ui" line="340"/>
+        <location filename="../src/DotPlotDialog.ui" line="333"/>
+        <location filename="../src/DotPlotDialog.ui" line="340"/>
         <source>default</source>
         <translation>По умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="365"/>
+        <location filename="../src/DotPlotDialog.ui" line="365"/>
         <source>Click to load a sequence from the file system. The sequence will be added to the combo boxes when it is loaded to the project</source>
         <translation>Нажмите, чтобы загрузить последовательности из файловой системы. Последовательности будут добавлены в комбо-боксы, когда они будут загружены в проект</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotDialog.ui" line="368"/>
+        <location filename="../src/DotPlotDialog.ui" line="368"/>
         <source>Load Sequence</source>
         <translation>Загрузить</translation>
     </message>
@@ -98,40 +98,40 @@
 <context>
     <name>DotPlotFilesDialog</name>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="38"/>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="72"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="38"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="72"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="23"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="23"/>
         <source>Build Dotplot from Sequences</source>
         <translation>Построить dotplot последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="55"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="55"/>
         <source>File with first sequence</source>
         <translation>Файл с первой последовательностью</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="45"/>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="96"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="45"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="96"/>
         <source>Join all sequences found in the file</source>
         <translation>Соединить последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="62"/>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="130"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="62"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="130"/>
         <source>Gap size:</source>
         <translation>Длина пробела:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="79"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="79"/>
         <source>Compare sequence against itself</source>
         <translation>Саму с собой</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilesDialog.ui" line="103"/>
+        <location filename="../src/DotPlotFilesDialog.ui" line="103"/>
         <source>File with second sequence</source>
         <translation>Файл со второй последовательностью</translation>
     </message>
@@ -139,92 +139,92 @@
 <context>
     <name>DotPlotFilterDialog</name>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="17"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="17"/>
         <source>DotPlot</source>
         <translation>DotPlot</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="30"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="30"/>
         <source>Dotplot parameters</source>
         <translation>Параметры фильтрации</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="42"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="42"/>
         <source>No filtration applied</source>
         <translation>Фильтрация не применяется</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="45"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="45"/>
         <source>No Filtration</source>
         <translation>Без фильтрации</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="55"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="55"/>
         <source>Show results that intersect the features</source>
         <translation>показывать результаты, которые пересекают аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="58"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="58"/>
         <source>Features Intersection</source>
         <translation>Пересечение аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="65"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="65"/>
         <source>Intersection Parameters</source>
         <translation>Параметры пересечения</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="72"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="72"/>
         <source>Feature Name</source>
         <translation>Имя аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="80"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="80"/>
         <source>Select all names</source>
         <translation>Выбрать все имена</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="83"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="83"/>
         <source>Select All</source>
         <translation>Выбрать все</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="90"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="90"/>
         <source>Invert the current selection</source>
         <translation>Инвертировать текущее выделение</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="93"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="93"/>
         <source>Invert Selection</source>
         <translation>Инвертировать</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="100"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="100"/>
         <source>Clear the current selection</source>
         <translation>Очистить текущее выделение</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="103"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="103"/>
         <source>Clear Selection</source>
         <translation>Очистить</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="110"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="110"/>
         <source>Select names of the features to intersection</source>
         <translation>Выберете имена аннотаций для пересечения</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="113"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="113"/>
         <source>Features Selection</source>
         <translation>Выбор аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="139"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="139"/>
         <source>Select only different names</source>
         <translation>Выбрать только различные имена</translation>
     </message>
     <message>
-        <location filename="../src/ui/DotPlotFilterDialog.ui" line="142"/>
+        <location filename="../src/DotPlotFilterDialog.ui" line="142"/>
         <source>Different Only</source>
         <translation>Различные</translation>
     </message>
@@ -293,13 +293,13 @@
     </message>
     <message>
         <location filename="../src/DotPlotFilesDialog.cpp" line="151"/>
-        <source>Unable to detect file format %1.
+        <source>Unable to detect file format %1.
 Select valid file to build dotplot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/DotPlotFilesDialog.cpp" line="159"/>
-        <source>Unable to detect format of given file %1.
+        <source>Unable to detect format of given file %1.
 Select valid file to build dotplot</source>
         <translation type="unfinished"></translation>
     </message>
@@ -478,150 +478,150 @@ Select valid file to build dotplot</source>
 <context>
     <name>U2::DotPlotWidget</name>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="126"/>
+        <location filename="../src/DotPlotWidget.cpp" line="127"/>
         <source>Parameters</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="129"/>
+        <location filename="../src/DotPlotWidget.cpp" line="130"/>
         <source>Save as image</source>
         <translation>Сохранить как изображение</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="133"/>
+        <location filename="../src/DotPlotWidget.cpp" line="134"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="136"/>
+        <location filename="../src/DotPlotWidget.cpp" line="137"/>
         <source>Load</source>
         <translation>Загрузить</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="139"/>
+        <location filename="../src/DotPlotWidget.cpp" line="140"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="143"/>
+        <location filename="../src/DotPlotWidget.cpp" line="144"/>
         <source>Filter Results</source>
         <translation>Фильтрация результатов</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="217"/>
+        <location filename="../src/DotPlotWidget.cpp" line="218"/>
         <source>Save/Load</source>
         <translation>Сохранить/Загрузить</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="399"/>
+        <location filename="../src/DotPlotWidget.cpp" line="400"/>
         <source>Too many results</source>
         <translation>Слишком много результатов</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="399"/>
+        <location filename="../src/DotPlotWidget.cpp" line="400"/>
         <source>Too many results. Try to increase minimum repeat length</source>
         <translation>Слишком много результатов. Попробуйте уменьшить минимальную длину повтора</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="544"/>
-        <location filename="../src/DotPlotWidget.cpp" line="604"/>
+        <location filename="../src/DotPlotWidget.cpp" line="545"/>
+        <location filename="../src/DotPlotWidget.cpp" line="605"/>
         <source>File opening error</source>
         <translation>Ошибка открытия файла</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="544"/>
-        <location filename="../src/DotPlotWidget.cpp" line="604"/>
+        <location filename="../src/DotPlotWidget.cpp" line="545"/>
+        <location filename="../src/DotPlotWidget.cpp" line="605"/>
         <source>Error opening file %1</source>
         <translation>Ошибка открытия файла %1</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="552"/>
-        <location filename="../src/DotPlotWidget.cpp" line="585"/>
-        <location filename="../src/DotPlotWidget.cpp" line="652"/>
+        <location filename="../src/DotPlotWidget.cpp" line="553"/>
+        <location filename="../src/DotPlotWidget.cpp" line="586"/>
+        <location filename="../src/DotPlotWidget.cpp" line="653"/>
         <source>Task is already running</source>
         <translation>Задача уже запущена</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="552"/>
-        <location filename="../src/DotPlotWidget.cpp" line="585"/>
-        <location filename="../src/DotPlotWidget.cpp" line="652"/>
+        <location filename="../src/DotPlotWidget.cpp" line="553"/>
+        <location filename="../src/DotPlotWidget.cpp" line="586"/>
+        <location filename="../src/DotPlotWidget.cpp" line="653"/>
         <source>Build or Load DotPlot task is already running</source>
         <translation>Задача построения или загрузки dotplot уже запущена</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="608"/>
+        <location filename="../src/DotPlotWidget.cpp" line="609"/>
         <source>Sequences are different</source>
         <translation>Последовательности отличаются</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="608"/>
+        <location filename="../src/DotPlotWidget.cpp" line="609"/>
         <source>Current and loading sequences are different. Continue loading dot-plot anyway?</source>
         <translation>Текущая и загружаемая последовательность различаются. Продолжить загрузку?</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="707"/>
-        <location filename="../src/DotPlotWidget.cpp" line="712"/>
+        <location filename="../src/DotPlotWidget.cpp" line="708"/>
+        <location filename="../src/DotPlotWidget.cpp" line="713"/>
         <source>Invalid sequence</source>
         <translation>Некорректная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="707"/>
+        <location filename="../src/DotPlotWidget.cpp" line="708"/>
         <source>First selected sequence is invalid</source>
         <translation>Первая выделенная последовательность некорректна</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="712"/>
+        <location filename="../src/DotPlotWidget.cpp" line="713"/>
         <source>Second selected sequence is invalid</source>
         <translation>Вторая выделенная последовательность некорректна</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="722"/>
+        <location filename="../src/DotPlotWidget.cpp" line="723"/>
         <source>Wrong alphabet types</source>
         <translation>Неправильные типы алфавитов</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="722"/>
+        <location filename="../src/DotPlotWidget.cpp" line="723"/>
         <source>Both sequence must have the same alphabet</source>
         <translation>Обе последовательности должны иметь одинаковый алфавит</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="801"/>
+        <location filename="../src/DotPlotWidget.cpp" line="802"/>
         <source>Save dot-plot</source>
         <translation>Сохранить dotplot</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="801"/>
+        <location filename="../src/DotPlotWidget.cpp" line="802"/>
         <source>Save dot-plot data before closing?</source>
         <translation>Сохранить данные dotplot перед закрытием?</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="962"/>
+        <location filename="../src/DotPlotWidget.cpp" line="963"/>
         <source>Invalid weight and height parameters!</source>
         <translation>Некорректные параметры!</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="1056"/>
+        <location filename="../src/DotPlotWidget.cpp" line="1057"/>
         <source> (min length %1, identity %2%)</source>
         <translation>(мин. длина %1, идентичность %2%)</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="215"/>
+        <location filename="../src/DotPlotWidget.cpp" line="216"/>
         <source>Dotplot</source>
         <translation>Dotplot</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="533"/>
+        <location filename="../src/DotPlotWidget.cpp" line="534"/>
         <source>Save Dotplot</source>
         <translation>Сохранить dotplot</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="533"/>
-        <location filename="../src/DotPlotWidget.cpp" line="578"/>
+        <location filename="../src/DotPlotWidget.cpp" line="534"/>
+        <location filename="../src/DotPlotWidget.cpp" line="579"/>
         <source>Dotplot files (*.dpt)</source>
         <translation>Файлы dotplot (*.dpt)</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="578"/>
+        <location filename="../src/DotPlotWidget.cpp" line="579"/>
         <source>Load Dotplot</source>
         <translation>Загрузить dotplot</translation>
     </message>
diff --git a/src/plugins/enzymes/CMakeLists.txt b/src/plugins/enzymes/CMakeLists.txt
new file mode 100644
index 0000000..8157b2f
--- /dev/null
+++ b/src/plugins/enzymes/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME enzymes)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/enzymes/enzymes.pro b/src/plugins/enzymes/enzymes.pro
index 77a5b50..e3e0d45 100644
--- a/src/plugins/enzymes/enzymes.pro
+++ b/src/plugins/enzymes/enzymes.pro
@@ -14,13 +14,13 @@ HEADERS += src/CloningUtilTasks.h \
            src/FindEnzymesAlgorithm.h \
            src/FindEnzymesDialog.h \
            src/FindEnzymesTask.h
-FORMS += src/ui/ConstructMoleculeDialog.ui \
-         src/ui/CreateFragmentDialog.ui \
-         src/ui/DigestSequenceDialog.ui \
-         src/ui/EditFragmentDialog.ui \
-         src/ui/EnzymesSelectorDialog.ui \
-         src/ui/EnzymesSelectorWidget.ui \
-         src/ui/FindEnzymesDialog.ui
+FORMS += src/ConstructMoleculeDialog.ui \
+         src/CreateFragmentDialog.ui \
+         src/DigestSequenceDialog.ui \
+         src/EditFragmentDialog.ui \
+         src/EnzymesSelectorDialog.ui \
+         src/EnzymesSelectorWidget.ui \
+         src/FindEnzymesDialog.ui
 SOURCES += src/CloningUtilTasks.cpp \
            src/ConstructMoleculeDialog.cpp \
            src/CreateFragmentDialog.cpp \
diff --git a/src/plugins/enzymes/src/CloningUtilTasks.cpp b/src/plugins/enzymes/src/CloningUtilTasks.cpp
index ba5b775..1367cbe 100644
--- a/src/plugins/enzymes/src/CloningUtilTasks.cpp
+++ b/src/plugins/enzymes/src/CloningUtilTasks.cpp
@@ -171,6 +171,19 @@ static void prepareLeftDnaTerm(TermData& leftTerm,
 }
 */
 
+bool compareAnnotationsbyLength(const SharedAnnotationData &a1, const SharedAnnotationData& a2) {
+    int length1 = 0;
+    foreach(const U2Region &reg, a1->getRegions()) {
+        length1 += reg.length;
+    }
+
+    int length2 = 0;
+    foreach(const U2Region &reg, a2->getRegions()) {
+        length2 += reg.length;
+    }
+    return length1 > length2;
+}
+
 void DigestSequenceTask::run()
 {
     CHECK_OP(stateInfo,);
@@ -229,7 +242,6 @@ void DigestSequenceTask::run()
             rightTerm.overhang  += dnaObj->getSequenceData(U2Region(0, leftCutPos));
         }
         SharedAnnotationData ad = createFragment(leftCutPos, leftTerm, rightCutPos, rightTerm);
-        ad->name = QString("Fragment %1").arg(count);
         results.append(ad);
         ++count;
         ++prev;
@@ -268,26 +280,27 @@ void DigestSequenceTask::run()
         QByteArray rightOverhang = first == prev ? leftOverhang : firstRightOverhang;
         SharedAnnotationData ad1 = createFragment(leftCutPos, DNAFragmentTerm(lastCutter->id, leftOverhang, leftOverhangIsDirect),
             firstCutPos, DNAFragmentTerm(firstCutter->id, rightOverhang, rightOverhangIsDirect));
-        ad1->name = QString("Fragment 1");
         results.append(ad1);
     } else {
         QByteArray lastLeftOverhang = dnaObj->getSequenceData(U2Region(leftOverhangStart, lastCutPos - leftOverhangStart));
         if (isCircular) {
             SharedAnnotationData ad = createFragment(lastCutPos, DNAFragmentTerm(lastCutter->id, lastLeftOverhang, leftOverhangIsDirect),
                 firstCutPos, DNAFragmentTerm(firstCutter->id, firstRightOverhang,rightOverhangIsDirect));
-            ad->name = QString("Fragment 1");
             results.append(ad);
         } else {
             SharedAnnotationData ad1 = createFragment(seqRange.startPos, DNAFragmentTerm(),
                 firstCutPos, DNAFragmentTerm(firstCutter->id, firstRightOverhang, rightOverhangIsDirect));
             SharedAnnotationData ad2 = createFragment(lastCutPos, DNAFragmentTerm(lastCutter->id, lastLeftOverhang, leftOverhangIsDirect),
                 seqRange.endPos(), DNAFragmentTerm());
-            ad1->name = QString("Fragment 1");
-            ad2->name = QString("Fragment %1").arg(count);
             results.append(ad1);
             results.append(ad2);
         }
     }
+    qSort(results.begin(), results.end(), compareAnnotationsbyLength);
+    
+    for (int fragmentCounter = 0; fragmentCounter < results.size(); fragmentCounter++) {
+        results[fragmentCounter]->name = QString("Fragment %1").arg(fragmentCounter + 1);
+    }
 }
 
 void DigestSequenceTask::saveResults()
diff --git a/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp b/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp
index 8fdfbaf..5c8cd5f 100644
--- a/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp
+++ b/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp
@@ -23,17 +23,18 @@
 #include <QScopedPointer>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/GUrlUtils.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/ProjectTreeController.h>
 #include <U2Gui/ProjectTreeItemSelectorDialog.h>
-#include <U2Core/QObjectScopedPointer.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "ConstructMoleculeDialog.h"
 #include "CreateFragmentDialog.h"
@@ -41,29 +42,31 @@
 
 namespace U2 {
 
-ConstructMoleculeDialog::ConstructMoleculeDialog(const QList<DNAFragment>& fragmentList,  QWidget* p )
-: QDialog(p), fragments(fragmentList)
-{
+ConstructMoleculeDialog::ConstructMoleculeDialog(const QList<DNAFragment>& fragmentList, QWidget* p)
+    : QDialog(p),
+    fragments(fragmentList),
+    saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467743");
+    new HelpButton(this, buttonBox, "17468951");
 
     tabWidget->setCurrentIndex(0);
+    const QString coreLengthStr = ConstructMoleculeDialog::tr("core length");
 
-    foreach (const DNAFragment& frag, fragments) {
-        QString fragItem = QString("%1 (%2) %3 [%4 bp]").arg(frag.getSequenceName())
+    foreach(const DNAFragment& frag, fragments) {
+        QString fragItem = QString("%1 (%2) %3 [%4 - %5 bp]")
+            .arg(frag.getSequenceName())
             .arg(frag.getSequenceDocName())
-            .arg(frag.getName()).arg(frag.getLength());
+            .arg(frag.getName())
+            .arg(coreLengthStr)
+            .arg(frag.getLength(true));
         fragmentListWidget->addItem(fragItem);
     }
 
+    initSaveController();
 
-    LastUsedDirHelper lod;
-    GUrl url = GUrlUtils::rollFileName(lod.dir + "/new_mol.gb", DocumentUtils::getNewDocFileNameExcludesHint());
-    filePathEdit->setText(url.getURLString());
     fragmentListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
     molConstructWidget->setColumnWidth(1, molConstructWidget->width()*0.5);
 
-    connect(browseButton, SIGNAL(clicked()), SLOT(sl_onBrowseButtonClicked()));
     connect(fragmentListWidget, SIGNAL( itemDoubleClicked ( QListWidgetItem* ) ),  SLOT(sl_onTakeButtonClicked()));
     connect(takeButton, SIGNAL(clicked()), SLOT(sl_onTakeButtonClicked()));
     connect(takeAllButton, SIGNAL(clicked()), SLOT(sl_onTakeAllButtonClicked()));
@@ -96,7 +99,7 @@ void ConstructMoleculeDialog::accept()
     LigateFragmentsTaskConfig cfg;
     cfg.checkOverhangs = !makeBluntBox->isChecked();
     cfg.makeCircular = makeCircularBox->isChecked();
-    cfg.docUrl = filePathEdit->text();
+    cfg.docUrl = saveController->getSaveFileName();
     cfg.openView = openViewBox->isChecked();
     cfg.saveDoc = saveImmediatlyBox->isChecked();
     cfg.annotateFragments = annotateFragmentsBox->isChecked();
@@ -107,17 +110,6 @@ void ConstructMoleculeDialog::accept()
     QDialog::accept();
 }
 
-
-void ConstructMoleculeDialog::sl_onBrowseButtonClicked()
-{
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Set new molecule file name"), lod.dir, tr("Genbank (*.gb )"));
-    if (!lod.url.isEmpty()) {
-        GUrl result = lod.url;
-        filePathEdit->setText(result.getURLString());
-    }
-}
-
 void ConstructMoleculeDialog::sl_onTakeButtonClicked()
 {
     QList<QListWidgetItem*> items = fragmentListWidget->selectedItems();
@@ -283,6 +275,23 @@ void ConstructMoleculeDialog::update()
 
 }
 
+void ConstructMoleculeDialog::initSaveController() {
+    LastUsedDirHelper lod;
+
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = lod.dir + "/new_mol.gb";
+    config.defaultFormatId = BaseDocumentFormats::PLAIN_GENBANK;
+    config.fileDialogButton = browseButton;
+    config.fileNameEdit = filePathEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Set new molecule file name");
+    config.rollOutProjectUrls = true;
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::PLAIN_GENBANK;
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
 void ConstructMoleculeDialog::sl_makeCircularBoxClicked()
 {
     update();
diff --git a/src/plugins/enzymes/src/ConstructMoleculeDialog.h b/src/plugins/enzymes/src/ConstructMoleculeDialog.h
index 55015c0..88f2bad 100644
--- a/src/plugins/enzymes/src/ConstructMoleculeDialog.h
+++ b/src/plugins/enzymes/src/ConstructMoleculeDialog.h
@@ -22,20 +22,22 @@
 #ifndef _U2_CONSTRUCT_MOLECULE_DIALOG_H_
 #define _U2_CONSTRUCT_MOLECULE_DIALOG_H_
 
-#include <QtCore/QList>
-#include <ui/ui_ConstructMoleculeDialog.h>
+#include <QList>
+#include <ui_ConstructMoleculeDialog.h>
 
 #include "CloningUtilTasks.h"
 
 namespace U2 {
 
+class SaveDocumentController;
+
 class ConstructMoleculeDialog : public QDialog, public Ui_ConstructMoleculeDialog {
     Q_OBJECT
 public:
     ConstructMoleculeDialog(const QList<DNAFragment>& fragments, QWidget* parent);
     virtual void accept();
+
 private slots:
-    void sl_onBrowseButtonClicked();
     void sl_onTakeButtonClicked();
     void sl_onTakeAllButtonClicked();
     void sl_onAddFromProjectButtonClicked();
@@ -53,8 +55,11 @@ protected:
 
 private:
     void update();
+    void initSaveController();
+
     QList<DNAFragment> fragments;
     QList<int> selected;
+    SaveDocumentController *saveController;
 };
 
 
diff --git a/src/plugins/enzymes/src/ConstructMoleculeDialog.ui b/src/plugins/enzymes/src/ConstructMoleculeDialog.ui
new file mode 100644
index 0000000..8d699a9
--- /dev/null
+++ b/src/plugins/enzymes/src/ConstructMoleculeDialog.ui
@@ -0,0 +1,374 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ConstructMoleculeDialog</class>
+ <widget class="QDialog" name="ConstructMoleculeDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>657</width>
+    <height>477</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>400</width>
+    <height>400</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Construct Molecule</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="sizeConstraint">
+    <enum>QLayout::SetMinAndMaxSize</enum>
+   </property>
+   <item>
+    <widget class="QTabWidget" name="tabWidget">
+     <property name="currentIndex">
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="tab">
+      <attribute name="title">
+       <string>Construction</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMinAndMaxSize</enum>
+       </property>
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>Available fragments (core length - length without sticky ends):</string>
+         </property>
+         <property name="margin">
+          <number>1</number>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <layout class="QGridLayout" name="gridLayout">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMinAndMaxSize</enum>
+         </property>
+         <item row="0" column="0" rowspan="5">
+          <widget class="QListWidget" name="fragmentListWidget">
+           <property name="toolTip">
+            <string>Fragments available from active project</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <widget class="QPushButton" name="takeButton">
+           <property name="toolTip">
+            <string>Add selected fragments to new molecule contents</string>
+           </property>
+           <property name="text">
+            <string>Add</string>
+           </property>
+          </widget>
+         </item>
+         <item row="4" column="1">
+          <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 row="3" column="1">
+          <widget class="QPushButton" name="fromProjectButton">
+           <property name="text">
+            <string>From Project</string>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="1">
+          <widget class="QPushButton" name="takeAllButton">
+           <property name="toolTip">
+            <string>Add all available fragments to molecule contets</string>
+           </property>
+           <property name="text">
+            <string>Add All</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>New molecule contents:</string>
+         </property>
+         <property name="margin">
+          <number>1</number>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QTreeWidget" name="molConstructWidget">
+         <property name="acceptDrops">
+          <bool>false</bool>
+         </property>
+         <property name="toolTip">
+          <string>New molecule contents</string>
+         </property>
+         <column>
+          <property name="text">
+           <string>5'</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Fragment</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>3'</string>
+          </property>
+         </column>
+         <column>
+          <property name="text">
+           <string>Inverted</string>
+          </property>
+         </column>
+        </widget>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout">
+         <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="QToolButton" name="upButton">
+           <property name="toolTip">
+            <string>Move selected fragment up</string>
+           </property>
+           <property name="text">
+            <string>Up</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QToolButton" name="downButton">
+           <property name="toolTip">
+            <string>Move selected fragment down</string>
+           </property>
+           <property name="text">
+            <string>Down</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QToolButton" name="removeButton">
+           <property name="toolTip">
+            <string>Remove selected fragment from new molecule</string>
+           </property>
+           <property name="text">
+            <string>Remove</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QToolButton" name="editFragmentButton">
+           <property name="text">
+            <string>Edit</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QToolButton" name="clearButton">
+           <property name="toolTip">
+            <string>Clear molecule contents</string>
+           </property>
+           <property name="text">
+            <string>Clear All</string>
+           </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>
+        <widget class="QCheckBox" name="annotateFragmentsBox">
+         <property name="text">
+          <string>Annotate fragments in new molecule</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="makeBluntBox">
+         <property name="enabled">
+          <bool>true</bool>
+         </property>
+         <property name="toolTip">
+          <string>Setting this option checked will result in ignoring overhangs while constructing new molecule.</string>
+         </property>
+         <property name="whatsThis">
+          <string/>
+         </property>
+         <property name="text">
+          <string>Force "blunt" and omit all overhangs</string>
+         </property>
+         <property name="checked">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="makeCircularBox">
+         <property name="enabled">
+          <bool>true</bool>
+         </property>
+         <property name="toolTip">
+          <string>Circulirize result molecule</string>
+         </property>
+         <property name="text">
+          <string>Make circular</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab_2">
+      <attribute name="title">
+       <string>Output</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_3">
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <widget class="QLabel" name="label_3">
+           <property name="text">
+            <string>Path to file:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLineEdit" name="filePathEdit"/>
+         </item>
+         <item>
+          <widget class="QToolButton" name="browseButton">
+           <property name="text">
+            <string>...</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="openViewBox">
+         <property name="enabled">
+          <bool>true</bool>
+         </property>
+         <property name="text">
+          <string>Open view for new molecule</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QCheckBox" name="saveImmediatlyBox">
+         <property name="enabled">
+          <bool>true</bool>
+         </property>
+         <property name="text">
+          <string>Save immediately</string>
+         </property>
+        </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>308</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </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>accepted()</signal>
+   <receiver>ConstructMoleculeDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>328</x>
+     <y>456</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>328</x>
+     <y>238</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>ConstructMoleculeDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>328</x>
+     <y>456</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>328</x>
+     <y>238</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/enzymes/src/CreateFragmentDialog.cpp b/src/plugins/enzymes/src/CreateFragmentDialog.cpp
index a59283b..f761b82 100644
--- a/src/plugins/enzymes/src/CreateFragmentDialog.cpp
+++ b/src/plugins/enzymes/src/CreateFragmentDialog.cpp
@@ -49,7 +49,7 @@ CreateFragmentDialog::CreateFragmentDialog(ADVSequenceObjectContext* ctx,  QWidg
 {
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467742");
+    new HelpButton(this, buttonBox, "17470675");
 
     tabWidget->setCurrentIndex(0);
 
@@ -69,7 +69,7 @@ CreateFragmentDialog::CreateFragmentDialog(U2SequenceObject* obj, const U2Region
     : QDialog(p)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467742");
+    new HelpButton(this, buttonBox, "17470675");
     seqObj = obj;
 
     QList<GObject*> aObjects = GObjectUtils::findAllObjects(UOF_LoadedOnly,GObjectTypes::ANNOTATION_TABLE);
diff --git a/src/plugins/enzymes/src/CreateFragmentDialog.h b/src/plugins/enzymes/src/CreateFragmentDialog.h
index cd596b7..44f4c1e 100644
--- a/src/plugins/enzymes/src/CreateFragmentDialog.h
+++ b/src/plugins/enzymes/src/CreateFragmentDialog.h
@@ -24,7 +24,7 @@
 
 #include "DNAFragment.h"
 #include <U2Gui/RegionSelector.h>
-#include <ui/ui_CreateFragmentDialog.h>
+#include <ui_CreateFragmentDialog.h>
 
 namespace U2 {
 
diff --git a/src/plugins/enzymes/src/ui/CreateFragmentDialog.ui b/src/plugins/enzymes/src/CreateFragmentDialog.ui
similarity index 100%
rename from src/plugins/enzymes/src/ui/CreateFragmentDialog.ui
rename to src/plugins/enzymes/src/CreateFragmentDialog.ui
diff --git a/src/plugins/enzymes/src/DNAFragment.cpp b/src/plugins/enzymes/src/DNAFragment.cpp
index 24dd46d..495ce73 100644
--- a/src/plugins/enzymes/src/DNAFragment.cpp
+++ b/src/plugins/enzymes/src/DNAFragment.cpp
@@ -243,14 +243,22 @@ void DNAFragment::setRightOverhang(const QByteArray& overhang)
     setOverhang(qName, buf);
 }
 
-int DNAFragment::getLength() const
-{
+int DNAFragment::getLength(bool coreLength) const {
     assert(!isEmpty());
     QVector<U2Region> regions = getFragmentRegions();
     int len = 0;
-    foreach (const U2Region& r, regions) {
+    foreach(const U2Region& r, regions) {
         len += r.length;
     }
+    if (!coreLength) {
+        if (annotatedFragment->findFirstQualifierValue(QUALIFIER_RIGHT_STRAND) == OVERHANG_STRAND_DIRECT) {
+            len += annotatedFragment->findFirstQualifierValue(QUALIFIER_RIGHT_OVERHANG).length();
+        }
+        if (annotatedFragment->findFirstQualifierValue(QUALIFIER_LEFT_STRAND) == OVERHANG_STRAND_DIRECT) {
+            len += annotatedFragment->findFirstQualifierValue(QUALIFIER_LEFT_OVERHANG).length();
+        }
+    }
+
     return len;
 }
 
diff --git a/src/plugins/enzymes/src/DNAFragment.h b/src/plugins/enzymes/src/DNAFragment.h
index 5fd4711..c559d00 100644
--- a/src/plugins/enzymes/src/DNAFragment.h
+++ b/src/plugins/enzymes/src/DNAFragment.h
@@ -85,7 +85,7 @@ public:
     QString getSequenceDocName() const;
     QVector<U2Region> getFragmentRegions() const;
     QByteArray getSequence(U2OpStatus &os) const;
-    int getLength() const;
+    int getLength(bool coreLength = false) const;
     bool isInverted() const { return reverseCompl; }
     const DNAAlphabet* getAlphabet() const;
     QByteArray getSourceSequence(U2OpStatus &os) const;
diff --git a/src/plugins/enzymes/src/DigestSequenceDialog.cpp b/src/plugins/enzymes/src/DigestSequenceDialog.cpp
index 5816afb..02597a7 100644
--- a/src/plugins/enzymes/src/DigestSequenceDialog.cpp
+++ b/src/plugins/enzymes/src/DigestSequenceDialog.cpp
@@ -58,7 +58,7 @@ DigestSequenceDialog::DigestSequenceDialog(ADVSequenceObjectContext* ctx, QWidge
     : QDialog(p),seqCtx(ctx), timer(NULL), animationCounter(0)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467741");
+    new HelpButton(this, buttonBox, "17470674");
 
     okButton = buttonBox->button(QDialogButtonBox::Ok);
     tabWidget->setCurrentIndex(0);
diff --git a/src/plugins/enzymes/src/DigestSequenceDialog.h b/src/plugins/enzymes/src/DigestSequenceDialog.h
index 958965a..c2bd7fd 100644
--- a/src/plugins/enzymes/src/DigestSequenceDialog.h
+++ b/src/plugins/enzymes/src/DigestSequenceDialog.h
@@ -39,7 +39,7 @@
 #include <U2Gui/MainWindow.h>
 
 #include "EnzymesQuery.h"
-#include "ui/ui_DigestSequenceDialog.h"
+#include "ui_DigestSequenceDialog.h"
 
 namespace U2 {
 
diff --git a/src/plugins/enzymes/src/ui/DigestSequenceDialog.ui b/src/plugins/enzymes/src/DigestSequenceDialog.ui
similarity index 100%
rename from src/plugins/enzymes/src/ui/DigestSequenceDialog.ui
rename to src/plugins/enzymes/src/DigestSequenceDialog.ui
diff --git a/src/plugins/enzymes/src/EditFragmentDialog.cpp b/src/plugins/enzymes/src/EditFragmentDialog.cpp
index 3e882f8..1b2d91d 100644
--- a/src/plugins/enzymes/src/EditFragmentDialog.cpp
+++ b/src/plugins/enzymes/src/EditFragmentDialog.cpp
@@ -49,7 +49,7 @@ EditFragmentDialog::EditFragmentDialog( DNAFragment& fragment, QWidget* p )
 {
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467748");
+    new HelpButton(this, buttonBox, "17470681");
 
     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 b634e6f..9ca9e2e 100644
--- a/src/plugins/enzymes/src/EditFragmentDialog.h
+++ b/src/plugins/enzymes/src/EditFragmentDialog.h
@@ -24,7 +24,7 @@
 
 #include "DNAFragment.h"
 
-#include <ui/ui_EditFragmentDialog.h>
+#include <ui_EditFragmentDialog.h>
 
 namespace U2 {
 
diff --git a/src/plugins/enzymes/src/ui/EditFragmentDialog.ui b/src/plugins/enzymes/src/EditFragmentDialog.ui
similarity index 100%
rename from src/plugins/enzymes/src/ui/EditFragmentDialog.ui
rename to src/plugins/enzymes/src/EditFragmentDialog.ui
diff --git a/src/plugins/enzymes/src/EnzymesQuery.cpp b/src/plugins/enzymes/src/EnzymesQuery.cpp
index 6779488..ba6be1e 100644
--- a/src/plugins/enzymes/src/EnzymesQuery.cpp
+++ b/src/plugins/enzymes/src/EnzymesQuery.cpp
@@ -145,7 +145,7 @@ QString EnzymesSelectorDialogHandler::getSelectedString(QDialog* dlg) {
 EnzymesSelectorDialog::EnzymesSelectorDialog(EnzymesSelectorDialogHandler* parent)
 : factory(parent) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467733");
+    new HelpButton(this, buttonBox, "17470666");
 
     QVBoxLayout* vl = new QVBoxLayout();
     enzSel = new EnzymesSelectorWidget();
diff --git a/src/plugins/enzymes/src/EnzymesQuery.h b/src/plugins/enzymes/src/EnzymesQuery.h
index 7070259..af69c83 100644
--- a/src/plugins/enzymes/src/EnzymesQuery.h
+++ b/src/plugins/enzymes/src/EnzymesQuery.h
@@ -24,7 +24,7 @@
 
 #include <U2Algorithm/EnzymeModel.h>
 #include "FindEnzymesDialog.h"
-#include <ui/ui_EnzymesSelectorDialog.h>
+#include <ui_EnzymesSelectorDialog.h>
 
 #include <U2Lang/QDScheme.h>
 #include <U2Lang/QueryDesignerRegistry.h>
diff --git a/src/plugins/enzymes/src/ui/EnzymesSelectorDialog.ui b/src/plugins/enzymes/src/EnzymesSelectorDialog.ui
similarity index 100%
rename from src/plugins/enzymes/src/ui/EnzymesSelectorDialog.ui
rename to src/plugins/enzymes/src/EnzymesSelectorDialog.ui
diff --git a/src/plugins/enzymes/src/ui/EnzymesSelectorWidget.ui b/src/plugins/enzymes/src/EnzymesSelectorWidget.ui
similarity index 100%
rename from src/plugins/enzymes/src/ui/EnzymesSelectorWidget.ui
rename to src/plugins/enzymes/src/EnzymesSelectorWidget.ui
diff --git a/src/plugins/enzymes/src/FindEnzymesDialog.cpp b/src/plugins/enzymes/src/FindEnzymesDialog.cpp
index ba7725f..89fdeb4 100644
--- a/src/plugins/enzymes/src/FindEnzymesDialog.cpp
+++ b/src/plugins/enzymes/src/FindEnzymesDialog.cpp
@@ -24,41 +24,37 @@
 #include "EnzymesIO.h"
 #include <limits>
 
-#include <U2Core/GObjectReference.h>
 #include <U2Core/AppContext.h>
-#include <U2Core/Settings.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DNASequenceSelection.h>
+#include <U2Core/GObjectReference.h>
 #include <U2Core/L10n.h>
 #include <U2Core/Log.h>
+#include <U2Core/Settings.h>
 #include <U2Core/Timer.h>
-#include <U2Gui/HelpButton.h>
+#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2Gui/CreateAnnotationWidgetController.h>
-#include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/GUIUtils.h>
+#include <U2Gui/HelpButton.h>
+#include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/RegionSelectorWithExcludedRegion.h>
+
 #include <U2View/ADVSequenceObjectContext.h>
 #include <U2View/AnnotatedDNAView.h>
 #include <U2View/AutoAnnotationUtils.h>
-#include <U2Core/DNASequenceSelection.h>
-#include <U2Core/DNASequenceObject.h>
+
 #include <U2Formats/GenbankLocationParser.h>
 
 #include <QtCore/QCoreApplication>
 #include <QtCore/QDir>
 #include <QtCore/QTextStream>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QTreeWidget>
-#include <QtGui/QMessageBox>
-#include <QtGui/QInputDialog>
-#include <QtGui/QHeaderView>
-#else
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QInputDialog>
-#include <QtWidgets/QHeaderView>
-#endif
+#include <QVBoxLayout>
+#include <QTreeWidget>
+#include <QMessageBox>
+#include <QInputDialog>
+#include <QHeaderView>
 
 
 //TODO: group by TYPE, ORGANIZM
@@ -520,7 +516,7 @@ void EnzymesSelectorWidget::sl_saveEnzymesFile()
 FindEnzymesDialog::FindEnzymesDialog(ADVSequenceObjectContext* sctx)
 : QDialog(sctx->getAnnotatedDNAView()->getWidget()), seqCtx(sctx) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467733");
+    new HelpButton(this, buttonBox, "17470666");
 
     maxHitSB->setMaximum(INT_MAX);
     minHitSB->setMaximum(INT_MAX);
@@ -528,10 +524,11 @@ FindEnzymesDialog::FindEnzymesDialog(ADVSequenceObjectContext* sctx)
     maxHitSB->setMinimum(ANY_VALUE);
     minHitSB->setMinimum(ANY_VALUE);
 
-    rs = new RegionSelector(this, sctx->getSequenceLength(), false, sctx->getSequenceSelection());
-    rs->setEnabled(false);
-    rangeSelectorLayout->addWidget(rs);
-    connect(excludeRegionBox,SIGNAL(toggled(bool)),rs,SLOT(setEnabled(bool)));
+    regionSelector = new RegionSelectorWithExludedRegion(this,
+                                                         sctx->getSequenceLength(),
+                                                         sctx->getSequenceSelection(),
+                                                         sctx->getSequenceObject()->isCircular());
+    searchRegionLayout->addWidget(regionSelector);
 
     initSettings();
 
@@ -556,19 +553,18 @@ void FindEnzymesDialog::sl_onSelectionModified(int total, int nChecked) {
 void FindEnzymesDialog::accept() {
     QList<SEnzymeData> selectedEnzymes = enzSel->getSelectedEnzymes();
 
-    if (excludeRegionBox->isChecked()){
-        bool isRegionOk=false;
-        rs->getRegion(&isRegionOk);
-        if(!isRegionOk){
-            rs->showErrorMessage();
-            return;
-        }
+    if (regionSelector->hasError()) {
+        QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox(QMessageBox::Warning, L10N::errorTitle(), tr("Invalid 'Search' region!"), QMessageBox::Ok, this);
+        msgBox->setInformativeText(regionSelector->getErrorMessage());
+        msgBox->exec();
+        CHECK(!msgBox.isNull(), );
+        return;
     }
+
     if (selectedEnzymes.isEmpty()) {
         int ret = QMessageBox::question(this, windowTitle(),
-            tr("<html><body align=\"center\">No enzymes are selected!\
-                Do you want to turn off <br>enzymes annotations highlighting?</body></html>"),
-            QMessageBox::Yes, QMessageBox::No );
+            tr("<html><body align=\"center\">No enzymes are selected! Do you want to turn off <br>enzymes annotations highlighting?</body></html>"),
+            QMessageBox::Yes, QMessageBox::No);
         if (ret == QMessageBox::Yes) {
             QAction* toggleAction = AutoAnnotationUtils::findAutoAnnotationsToggleAction(seqCtx, ANNOTATION_GROUP_ENZYME);
             if (toggleAction) {
@@ -607,7 +603,12 @@ void FindEnzymesDialog::initSettings()
     int minHitValue = AppContext::getSettings()->getValue(EnzymeSettings::MIN_HIT_VALUE, 1).toInt();
     int maxHitValue = AppContext::getSettings()->getValue(EnzymeSettings::MAX_HIT_VALUE, 2).toInt();
 
-    QString exludedRegionStr = AppContext::getSettings()->getValue(EnzymeSettings::NON_CUT_REGION, "").toString();
+    U2Region searchRegion = AppContext::getSettings()->getValue(EnzymeSettings::SEARCH_REGION, QVariant::fromValue(U2Region())).value<U2Region>();
+    if (!searchRegion.isEmpty() && U2Region(0, seqCtx->getSequenceLength()).contains(searchRegion)) {
+        regionSelector->setIncludeRegion(searchRegion);
+    }
+
+    QString exludedRegionStr = AppContext::getSettings()->getValue(EnzymeSettings::EXCLUDED_REGION, "").toString();
     bool excludeRegionOn = false;
     if (!exludedRegionStr.isEmpty()) {
         U2Location location;
@@ -615,11 +616,11 @@ void FindEnzymesDialog::initSettings()
         if (!location->isEmpty()) {
             excludeRegionOn = true;
             const U2Region& range = location->regions.first();
-            rs->setCustomRegion(range);
+            regionSelector->setExcludeRegion(range);
         }
     }
 
-    excludeRegionBox->setChecked(excludeRegionOn);
+    regionSelector->setExcludedCheckboxChecked(excludeRegionOn);
 
     filterGroupBox->setChecked(useHitCountControl);
     if (useHitCountControl) {
@@ -643,13 +644,11 @@ void FindEnzymesDialog::saveSettings()
     }
 
     QVector<U2Region> range;
-    if (excludeRegionBox->isChecked()) {
-        U2Region r=rs->getRegion();//todo add check on wrong region
-        if (r.length != 0) {
-            range.append(r);
-        }
+    if (regionSelector->getExcludeRegion() != U2Region()) {
+        range.append(regionSelector->getExcludeRegion());
     }
-    AppContext::getSettings()->setValue(EnzymeSettings::NON_CUT_REGION, QVariant::fromValue(range) );
+    AppContext::getSettings()->setValue(EnzymeSettings::EXCLUDED_REGION, QVariant::fromValue(range) );
+    AppContext::getSettings()->setValue(EnzymeSettings::SEARCH_REGION, QVariant::fromValue(regionSelector->getIncludeRegion()) );
 
     enzSel->saveSettings();
 
@@ -657,7 +656,8 @@ void FindEnzymesDialog::saveSettings()
 
 void FindEnzymesDialog::initDefaultSettings()
 {
-    AppContext::getSettings()->setValue(EnzymeSettings::NON_CUT_REGION, "" );
+    AppContext::getSettings()->setValue(EnzymeSettings::EXCLUDED_REGION, "" );
+    AppContext::getSettings()->setValue(EnzymeSettings::SEARCH_REGION, "" );
 }
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/src/plugins/enzymes/src/FindEnzymesDialog.h b/src/plugins/enzymes/src/FindEnzymesDialog.h
index 711eeca..1584e89 100644
--- a/src/plugins/enzymes/src/FindEnzymesDialog.h
+++ b/src/plugins/enzymes/src/FindEnzymesDialog.h
@@ -23,26 +23,21 @@
 #define _U2_ENZYMES_DIALOG_H_
 
 #include <U2Gui/MainWindow.h>
-#include <U2Gui/RegionSelector.h>
 
-#include <ui/ui_EnzymesSelectorWidget.h>
-#include <ui/ui_FindEnzymesDialog.h>
+#include <ui_EnzymesSelectorWidget.h>
+#include <ui_FindEnzymesDialog.h>
 
 #include <U2Algorithm/EnzymeModel.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 {
 
 class ADVSequenceObjectContext;
 class CreateAnnotationWidgetController;
 class EnzymeGroupTreeItem;
+class RegionSelectorWithExludedRegion;
 
 class EnzymesSelectorWidget : public QWidget, public Ui_EnzymesSelectorWidget {
     Q_OBJECT
@@ -104,7 +99,7 @@ private:
     void saveSettings();
     ADVSequenceObjectContext*           seqCtx;
     EnzymesSelectorWidget*              enzSel;
-    RegionSelector*                      rs;
+    RegionSelectorWithExludedRegion*    regionSelector;
 };
 
 class EnzymeTreeItem;
diff --git a/src/plugins/enzymes/src/FindEnzymesDialog.ui b/src/plugins/enzymes/src/FindEnzymesDialog.ui
new file mode 100644
index 0000000..cc2be59
--- /dev/null
+++ b/src/plugins/enzymes/src/FindEnzymesDialog.ui
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>FindEnzymesDialog</class>
+ <widget class="QDialog" name="FindEnzymesDialog">
+  <property name="enabled">
+   <bool>true</bool>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>638</width>
+    <height>433</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Find Restriction Sites</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QWidget" name="enzymesSelectorWidget" native="true">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="filterGroupBox">
+     <property name="toolTip">
+      <string>Include only enzymes that cut from 'Minimum Hits' to 'Maximum Hits' times</string>
+     </property>
+     <property name="title">
+      <string>Filter by number of results:</string>
+     </property>
+     <property name="checkable">
+      <bool>true</bool>
+     </property>
+     <property name="checked">
+      <bool>false</bool>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_6">
+      <item>
+       <widget class="QLabel" name="label_2">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Minimum hits:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QSpinBox" name="minHitSB">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" 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="minimum">
+         <number>1</number>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="label_3">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>Maximum hits:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QSpinBox" name="maxHitSB">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" 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>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Search  in:</string>
+     </property>
+     <layout class="QVBoxLayout" name="searchRegionLayout"/>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_3">
+     <item>
+      <widget class="QLabel" name="statusLabel">
+       <property name="text">
+        <string><status label></string>
+       </property>
+      </widget>
+     </item>
+     <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>
+    </layout>
+   </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>accepted()</signal>
+   <receiver>FindEnzymesDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>318</x>
+     <y>412</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>318</x>
+     <y>216</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>FindEnzymesDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>318</x>
+     <y>412</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>318</x>
+     <y>216</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/enzymes/src/FindEnzymesTask.cpp b/src/plugins/enzymes/src/FindEnzymesTask.cpp
index 737e28a..c7188b8 100644
--- a/src/plugins/enzymes/src/FindEnzymesTask.cpp
+++ b/src/plugins/enzymes/src/FindEnzymesTask.cpp
@@ -46,13 +46,12 @@ FindEnzymesToAnnotationsTask::FindEnzymesToAnnotationsTask(AnnotationTableObject
     : Task(tr("Find and store enzymes"), TaskFlags_NR_FOSCOE), dnaSeqRef(seqRef), enzymes(enzymes), aObj(aobj), cfg(config), fTask(NULL)
 {
     GCOUNTER(cvar, tvar, "FindEnzymesToAnnotationsTask");
-    U2SequenceObject dnaSeq("sequence",dnaSeqRef);
-    seqRange = U2Region(0, dnaSeq.getSequenceLength());
 }
 
 void FindEnzymesToAnnotationsTask::prepare() {
     CHECK_EXT(!enzymes.isEmpty(), stateInfo.setError(tr("No enzymes selected.")), );
-    fTask = new FindEnzymesTask(dnaSeqRef, seqRange, enzymes, cfg.maxResults, cfg.circular);
+    U2SequenceObject dnaSeq("sequence",dnaSeqRef);
+    fTask = new FindEnzymesTask(dnaSeqRef, cfg.searchRegion.isEmpty() ? U2Region(0, dnaSeq.getSequenceLength()) : cfg.searchRegion, enzymes, cfg.maxResults, cfg.circular, cfg.excludedRegions);
     addSubTask(fTask);
 }
 
@@ -65,25 +64,9 @@ QList<Task *> FindEnzymesToAnnotationsTask::onSubTaskFinished(Task *subTask) {
     CHECK_EXT(!aObj->isStateLocked(), stateInfo.setError(tr("Annotation table is read-only")), result);
 
     bool useSubgroups = enzymes.size() > 1 || cfg.groupName.isEmpty();
-    bool useWholeSequenceRange = cfg.excludedRegions.isEmpty();
     QMap<QString, QList<SharedAnnotationData> > resultMap;
     foreach (const SEnzymeData &ed, enzymes) {
         QList<SharedAnnotationData> anns = fTask->getResultsAsAnnotations(ed->id);
-        bool inRegion = false;
-        if (!useWholeSequenceRange) {
-            // filter
-            foreach (const SharedAnnotationData &data, anns) {
-                const U2Region &annRegion = data->location->regions.first();
-                if (annRegion.findOverlappingRegion(cfg.excludedRegions) != -1) {
-                    inRegion = true;
-                    break;
-                }
-            }
-            if (inRegion) {
-                continue;
-            }
-        }
-
         if (anns.size() >= cfg.minHitCount && anns.size() <= cfg.maxHitCount) {
             QString group = useSubgroups ? cfg.groupName + "/" + ed->id : cfg.groupName;
             resultMap[group].append(anns);
@@ -122,8 +105,11 @@ Task::ReportResult FindEnzymesToAnnotationsTask::report() {
 
 //////////////////////////////////////////////////////////////////////////
 // find multiple enzymes task
-FindEnzymesTask::FindEnzymesTask(const U2EntityRef& seqRef, const U2Region& region, const QList<SEnzymeData>& enzymes, int mr, bool _circular)
-:Task(tr("Find Enzymes"), TaskFlags_NR_FOSCOE), maxResults(mr), circular(_circular)
+FindEnzymesTask::FindEnzymesTask(const U2EntityRef& seqRef, const U2Region& region, const QList<SEnzymeData>& enzymes, int mr, bool _circular, QVector<U2Region> excludedRegions)
+    : Task(tr("Find Enzymes"), TaskFlags_NR_FOSCOE),
+      maxResults(mr),
+      excludedRegions(excludedRegions),
+      circular(_circular)
 {
     U2SequenceObject seq("sequence", seqRef);
 
@@ -136,6 +122,15 @@ FindEnzymesTask::FindEnzymesTask(const U2EntityRef& seqRef, const U2Region& regi
 }
 
 void FindEnzymesTask::onResult(int pos, const SEnzymeData& enzyme, const U2Strand& strand) {
+    if (pos > seqlen) {
+        pos %= seqlen;
+    }
+    foreach (const U2Region &r, excludedRegions) {
+        if (U2Region(pos, enzyme->seq.length()).intersects(r)) {
+            return;
+        }
+    }
+
     QMutexLocker l(&resultsLock);
     if (results.size() > maxResults) {
         if (!isCanceled()) {
@@ -186,6 +181,7 @@ QList<SharedAnnotationData> FindEnzymesTask::getResultsAsAnnotations(const QStri
                     continue;
                 }
                 SharedAnnotationData ad(new AnnotationData);
+                ad->type = U2FeatureTypes::RestrictionSite;
                 ad->name = r.enzyme->id;
                 ad->location->regions << U2Region(r.pos, seqlen - r.pos);
                 ad->location->regions << U2Region(0, r.enzyme->seq.size() - (seqlen - r.pos));
@@ -199,6 +195,7 @@ QList<SharedAnnotationData> FindEnzymesTask::getResultsAsAnnotations(const QStri
                 res.append(ad);
             } else {
                 SharedAnnotationData ad(new AnnotationData);
+                ad->type = U2FeatureTypes::RestrictionSite;
                 ad->name = r.enzyme->id;
                 ad->location->regions << U2Region(r.pos, r.enzyme->seq.size());
                 ad->setStrand(r.strand);
@@ -232,8 +229,13 @@ void FindEnzymesTask::cleanup() {
 // find single enzyme task
 FindSingleEnzymeTask::FindSingleEnzymeTask(const U2EntityRef& _seqRef, const U2Region& region, const SEnzymeData& _enzyme,
                                            FindEnzymesAlgListener* l, bool _circular, int mr)
-: Task(tr("Find enzyme '%1'").arg(_enzyme->id), TaskFlag_NoRun),
-dnaSeqRef(_seqRef), region(region), enzyme(_enzyme), maxResults(mr), resultListener(l), circular(_circular)
+    : Task(tr("Find enzyme '%1'").arg(_enzyme->id), TaskFlag_NoRun),
+      dnaSeqRef(_seqRef),
+      region(region),
+      enzyme(_enzyme),
+      maxResults(mr),
+      resultListener(l),
+      circular(_circular)
 {
     U2SequenceObject dnaSeq("sequence", dnaSeqRef);
 
@@ -241,19 +243,18 @@ dnaSeqRef(_seqRef), region(region), enzyme(_enzyme), maxResults(mr), resultListe
     if (resultListener == NULL) {
         resultListener = this;
     }
-    if (region.length != dnaSeq.getSequenceLength()) {
-        circular = false;
-    }
-    SequenceDbiWalkerConfig swc;
 
     const int BLOCK_READ_FROM_DB = 128000;
     static const int chunkSize = BLOCK_READ_FROM_DB;
 
+    SequenceDbiWalkerConfig swc;
     swc.seqRef = dnaSeqRef;
     swc.range = region;
     swc.chunkSize = qMax(enzyme->seq.size(), chunkSize);
     swc.lastChunkExtraLen = swc.chunkSize/2;
-    swc.overlapSize = enzyme->seq.size()-1;
+    swc.overlapSize = enzyme->seq.size() - 1;
+    swc.walkCircular = circular;
+    swc.walkCircularDistance = swc.overlapSize;
 
     addSubTask(new SequenceDbiWalkerTask(swc, this, tr("Find enzyme '%1' parallel").arg(enzyme->id)));
 }
@@ -278,7 +279,8 @@ void FindSingleEnzymeTask::onRegion(SequenceDbiWalkerSubtask* t, TaskStateInfo&
         return;
     }
     U2SequenceObject dnaSequenceObject("sequence", dnaSeqRef);
-    if (dnaSequenceObject.getSequenceLength() < enzyme->seq.length()) {
+    qint64 sequenceLen = dnaSequenceObject.getSequenceLength();
+    if (sequenceLen < enzyme->seq.length()) {
         return;
     }
     SAFE_POINT(enzyme->alphabet != NULL, tr("No enzyme alphabet"), );
@@ -296,8 +298,18 @@ void FindSingleEnzymeTask::onRegion(SequenceDbiWalkerSubtask* t, TaskStateInfo&
                                 || seqAlphabet->getId() == BaseDNAAlphabetIds::NUCL_RNA_EXTENDED();
 
     U2Region chunkRegion = t->getGlobalRegion();
-    DNASequence dnaSeq = dnaSequenceObject.getSequence(chunkRegion, ti);
+    DNASequence dnaSeq;
+    if (U2Region(0, sequenceLen).contains(chunkRegion)) {
+        dnaSeq = dnaSequenceObject.getSequence(chunkRegion, ti);
+    } else {
+        U2Region partOne = U2Region(0, sequenceLen).intersect(chunkRegion);
+        dnaSeq = dnaSequenceObject.getSequence(partOne, ti);
+        CHECK_OP(ti, );
+        U2Region partTwo = U2Region(0, chunkRegion.endPos() % sequenceLen);
+        dnaSeq.seq.append(dnaSequenceObject.getSequence(partTwo, ti).seq);
+    }
     CHECK_OP(ti, );
+
     // Note that enzymes algorithm filters N symbols in sequence by itself
     if (useExtendedComparator) {
         FindEnzymesAlgorithm<ExtendedDNAlphabetComparator> algo;
@@ -346,11 +358,10 @@ Task* FindEnzymesAutoAnnotationUpdater::createAutoAnnotationsUpdateTask( const A
     cfg.minHitCount = AppContext::getSettings()->getValue(EnzymeSettings::MIN_HIT_VALUE, 1).toInt();
     cfg.maxHitCount = AppContext::getSettings()->getValue(EnzymeSettings::MAX_HIT_VALUE, INT_MAX).toInt();
     cfg.maxResults = AppContext::getSettings()->getValue(EnzymeSettings::MAX_RESULTS, 500000).toInt();
-
-    QString locationStr = AppContext::getSettings()->getValue(EnzymeSettings::NON_CUT_REGION, "").toString();
+    cfg.searchRegion = AppContext::getSettings()->getValue(EnzymeSettings::SEARCH_REGION, QVariant::fromValue(U2Region())).value<U2Region>();
 
     QVector<U2Region> excludedRegions =
-        AppContext::getSettings()->getValue(EnzymeSettings::NON_CUT_REGION, QVariant::fromValue(QVector<U2Region>()) ).value< QVector<U2Region> >();
+        AppContext::getSettings()->getValue(EnzymeSettings::EXCLUDED_REGION, QVariant::fromValue(QVector<U2Region>()) ).value< QVector<U2Region> >();
 
     if (!excludedRegions.isEmpty()) {
         cfg.excludedRegions = excludedRegions;
diff --git a/src/plugins/enzymes/src/FindEnzymesTask.h b/src/plugins/enzymes/src/FindEnzymesTask.h
index 86b386c..31cbd4d 100644
--- a/src/plugins/enzymes/src/FindEnzymesTask.h
+++ b/src/plugins/enzymes/src/FindEnzymesTask.h
@@ -54,8 +54,13 @@ public:
 class FindEnzymesTask;
 
 struct FindEnzymesTaskConfig {
-    FindEnzymesTaskConfig(): maxResults(0x7FFFFFFF), minHitCount(1),
-        maxHitCount(INT_MAX), circular(false), isAutoAnnotationUpdateTask(false) {}
+    FindEnzymesTaskConfig()
+        : maxResults(0x7FFFFFFF),
+          minHitCount(1),
+          maxHitCount(INT_MAX),
+          circular(false),
+          isAutoAnnotationUpdateTask(false) {}
+    U2Region            searchRegion;
     QVector<U2Region>   excludedRegions;
     QString             groupName;
     int                 maxResults;
@@ -78,7 +83,6 @@ public:
 private:
     U2EntityRef                         dnaSeqRef;
     QList<SEnzymeData>                  enzymes;
-    U2Region                            seqRange;
     QPointer<AnnotationTableObject>     aObj;
     FindEnzymesTaskConfig               cfg;
     FindEnzymesTask *                   fTask;
@@ -87,7 +91,8 @@ private:
 class FindEnzymesTask : public Task, public FindEnzymesAlgListener {
     Q_OBJECT
 public:
-    FindEnzymesTask(const U2EntityRef& seqRef, const U2Region& region, const QList<SEnzymeData>& enzymes, int maxResults = 0x7FFFFFFF, bool _circular = false);
+    FindEnzymesTask(const U2EntityRef& seqRef, const U2Region& region, const QList<SEnzymeData>& enzymes, int maxResults = 0x7FFFFFFF,
+                    bool _circular = false, QVector<U2Region> excludedRegions = QVector<U2Region>());
 
     QList<FindEnzymesAlgResult>  getResults() const {return results;}
 
@@ -103,6 +108,7 @@ private:
     void registerResult(const FindEnzymesAlgResult& r);
 
     int                                 maxResults;
+    QVector<U2Region>                   excludedRegions;
     bool                                circular;
     int                                 seqlen;
     QList<FindEnzymesAlgResult>         results;
diff --git a/src/plugins/enzymes/src/ui/ConstructMoleculeDialog.ui b/src/plugins/enzymes/src/ui/ConstructMoleculeDialog.ui
deleted file mode 100644
index 378aafc..0000000
--- a/src/plugins/enzymes/src/ui/ConstructMoleculeDialog.ui
+++ /dev/null
@@ -1,374 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ConstructMoleculeDialog</class>
- <widget class="QDialog" name="ConstructMoleculeDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>657</width>
-    <height>477</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>400</width>
-    <height>400</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Construct Molecule</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <property name="sizeConstraint">
-    <enum>QLayout::SetMinAndMaxSize</enum>
-   </property>
-   <item>
-    <widget class="QTabWidget" name="tabWidget">
-     <property name="currentIndex">
-      <number>0</number>
-     </property>
-     <widget class="QWidget" name="tab">
-      <attribute name="title">
-       <string>Construction</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_2">
-       <property name="sizeConstraint">
-        <enum>QLayout::SetMinAndMaxSize</enum>
-       </property>
-       <item>
-        <widget class="QLabel" name="label">
-         <property name="text">
-          <string>Available fragments:</string>
-         </property>
-         <property name="margin">
-          <number>1</number>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QGridLayout" name="gridLayout">
-         <property name="sizeConstraint">
-          <enum>QLayout::SetMinAndMaxSize</enum>
-         </property>
-         <item row="0" column="0" rowspan="5">
-          <widget class="QListWidget" name="fragmentListWidget">
-           <property name="toolTip">
-            <string>Fragments available from active project</string>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="1">
-          <widget class="QPushButton" name="takeButton">
-           <property name="toolTip">
-            <string>Add selected fragments to new molecule contents</string>
-           </property>
-           <property name="text">
-            <string>Add</string>
-           </property>
-          </widget>
-         </item>
-         <item row="4" column="1">
-          <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 row="3" column="1">
-          <widget class="QPushButton" name="fromProjectButton">
-           <property name="text">
-            <string>From Project</string>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="1">
-          <widget class="QPushButton" name="takeAllButton">
-           <property name="toolTip">
-            <string>Add all available fragments to molecule contets</string>
-           </property>
-           <property name="text">
-            <string>Add All</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_2">
-         <property name="text">
-          <string>New molecule contents:</string>
-         </property>
-         <property name="margin">
-          <number>1</number>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QTreeWidget" name="molConstructWidget">
-         <property name="acceptDrops">
-          <bool>false</bool>
-         </property>
-         <property name="toolTip">
-          <string>New molecule contents</string>
-         </property>
-         <column>
-          <property name="text">
-           <string>5'</string>
-          </property>
-         </column>
-         <column>
-          <property name="text">
-           <string>Fragment</string>
-          </property>
-         </column>
-         <column>
-          <property name="text">
-           <string>3'</string>
-          </property>
-         </column>
-         <column>
-          <property name="text">
-           <string>Inverted</string>
-          </property>
-         </column>
-        </widget>
-       </item>
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout">
-         <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="QToolButton" name="upButton">
-           <property name="toolTip">
-            <string>Move selected fragment up</string>
-           </property>
-           <property name="text">
-            <string>Up</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="downButton">
-           <property name="toolTip">
-            <string>Move selected fragment down</string>
-           </property>
-           <property name="text">
-            <string>Down</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="removeButton">
-           <property name="toolTip">
-            <string>Remove selected fragment from new molecule</string>
-           </property>
-           <property name="text">
-            <string>Remove</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="editFragmentButton">
-           <property name="text">
-            <string>Edit</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="clearButton">
-           <property name="toolTip">
-            <string>Clear molecule contents</string>
-           </property>
-           <property name="text">
-            <string>Clear All</string>
-           </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>
-        <widget class="QCheckBox" name="annotateFragmentsBox">
-         <property name="text">
-          <string>Annotate fragments in new molecule</string>
-         </property>
-         <property name="checked">
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QCheckBox" name="makeBluntBox">
-         <property name="enabled">
-          <bool>true</bool>
-         </property>
-         <property name="toolTip">
-          <string>Setting this option checked will result in ignoring overhangs while constructing new molecule.</string>
-         </property>
-         <property name="whatsThis">
-          <string/>
-         </property>
-         <property name="text">
-          <string>Force "blunt" and omit all overhangs</string>
-         </property>
-         <property name="checked">
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QCheckBox" name="makeCircularBox">
-         <property name="enabled">
-          <bool>true</bool>
-         </property>
-         <property name="toolTip">
-          <string>Circulirize result molecule</string>
-         </property>
-         <property name="text">
-          <string>Make circular</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="tab_2">
-      <attribute name="title">
-       <string>Output</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_3">
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout_2">
-         <item>
-          <widget class="QLabel" name="label_3">
-           <property name="text">
-            <string>Path to file:</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QLineEdit" name="filePathEdit"/>
-         </item>
-         <item>
-          <widget class="QToolButton" name="browseButton">
-           <property name="text">
-            <string>...</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <widget class="QCheckBox" name="openViewBox">
-         <property name="enabled">
-          <bool>true</bool>
-         </property>
-         <property name="text">
-          <string>Open view for new molecule</string>
-         </property>
-         <property name="checked">
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QCheckBox" name="saveImmediatlyBox">
-         <property name="enabled">
-          <bool>true</bool>
-         </property>
-         <property name="text">
-          <string>Save immediately</string>
-         </property>
-        </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>308</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-    </widget>
-   </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>accepted()</signal>
-   <receiver>ConstructMoleculeDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>328</x>
-     <y>456</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>328</x>
-     <y>238</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>ConstructMoleculeDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>328</x>
-     <y>456</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>328</x>
-     <y>238</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/enzymes/src/ui/FindEnzymesDialog.ui b/src/plugins/enzymes/src/ui/FindEnzymesDialog.ui
deleted file mode 100644
index fe39ade..0000000
--- a/src/plugins/enzymes/src/ui/FindEnzymesDialog.ui
+++ /dev/null
@@ -1,204 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>FindEnzymesDialog</class>
- <widget class="QDialog" name="FindEnzymesDialog">
-  <property name="enabled">
-   <bool>true</bool>
-  </property>
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>638</width>
-    <height>433</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Find Restriction Sites</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QWidget" name="enzymesSelectorWidget" native="true">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="filterGroupBox">
-     <property name="toolTip">
-      <string>Include only enzymes that cut from 'Minimum Hits' to 'Maximum Hits' times</string>
-     </property>
-     <property name="title">
-      <string>Filter by number of results:</string>
-     </property>
-     <property name="checkable">
-      <bool>true</bool>
-     </property>
-     <property name="checked">
-      <bool>false</bool>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_6">
-      <item>
-       <widget class="QLabel" name="label_2">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>Minimum hits:</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QSpinBox" name="minHitSB">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Expanding" 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="minimum">
-         <number>1</number>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QLabel" name="label_3">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text">
-         <string>Maximum hits:</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QSpinBox" name="maxHitSB">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Expanding" 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>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="excludeRegionBox">
-     <property name="toolTip">
-      <string>Enzymes must not cut in the following region</string>
-     </property>
-     <property name="title">
-      <string>Exclude region:</string>
-     </property>
-     <property name="checkable">
-      <bool>true</bool>
-     </property>
-     <property name="checked">
-      <bool>false</bool>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_2">
-      <item>
-       <layout class="QHBoxLayout" name="rangeSelectorLayout"/>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_3">
-     <item>
-      <widget class="QLabel" name="statusLabel">
-       <property name="text">
-        <string><status label></string>
-       </property>
-      </widget>
-     </item>
-     <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>
-    </layout>
-   </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>accepted()</signal>
-   <receiver>FindEnzymesDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>318</x>
-     <y>412</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>318</x>
-     <y>216</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>FindEnzymesDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>318</x>
-     <y>412</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>318</x>
-     <y>216</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/enzymes/transl/english.ts b/src/plugins/enzymes/transl/english.ts
index afbdb0d..f753566 100644
--- a/src/plugins/enzymes/transl/english.ts
+++ b/src/plugins/enzymes/transl/english.ts
@@ -4,147 +4,147 @@
 <context>
     <name>ConstructMoleculeDialog</name>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="20"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="20"/>
         <source>Construct Molecule</source>
         <translation>Construct Molecule</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="33"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="33"/>
         <source>Construction</source>
         <translation>Construction</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="42"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="42"/>
         <source>Available fragments:</source>
         <translation>Available fragments:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="57"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="57"/>
         <source>Fragments available from active project</source>
         <translation>Fragments available from active project</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="64"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="64"/>
         <source>Add selected fragments to new molecule contents</source>
         <translation>Add selected fragments to new molecule contents</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="67"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="67"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="87"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="87"/>
         <source>From Project</source>
         <translation>From Project</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="94"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="94"/>
         <source>Add all available fragments to molecule contets</source>
         <translation>Add all available fragments to molecule contets</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="97"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="97"/>
         <source>Add All</source>
         <translation>Add All</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="106"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="106"/>
         <source>New molecule contents:</source>
         <translation>New molecule contents:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="119"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="119"/>
         <source>New molecule contents</source>
         <translation>New molecule contents</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="123"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="123"/>
         <source>5'</source>
         <translation>5'</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="128"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="128"/>
         <source>Fragment</source>
         <translation>Fragment</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="133"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="133"/>
         <source>3'</source>
         <translation>3'</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="138"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="138"/>
         <source>Inverted</source>
         <translation>Inverted</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="161"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="161"/>
         <source>Move selected fragment up</source>
         <translation>Move selected fragment up</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="164"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="164"/>
         <source>Up</source>
         <translation>Up</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="171"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="171"/>
         <source>Move selected fragment down</source>
         <translation>Move selected fragment down</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="174"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="174"/>
         <source>Down</source>
         <translation>Down</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="181"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="181"/>
         <source>Remove selected fragment from new molecule</source>
         <translation>Remove selected fragment from new molecule</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="184"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="184"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="198"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="198"/>
         <source>Clear molecule contents</source>
         <translation>Clear molecule contents</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="201"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="201"/>
         <source>Clear All</source>
         <translation>Clear All</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="223"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="223"/>
         <source>Annotate fragments in new molecule</source>
         <translation>Annotate fragments in new molecule</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="242"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="242"/>
         <source>Force "blunt" and omit all overhangs</source>
         <translation>Force "blunt" and omit all overhangs</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="258"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="258"/>
         <source>Make circular</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="236"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="236"/>
         <source>Setting this option checked will result in ignoring overhangs while constructing new molecule.</source>
         <translation>Setting this option checked will result in ignoring overhangs while constructing new molecule.</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="191"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="191"/>
         <source>Edit</source>
         <translation>Edit</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="255"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="255"/>
         <source>Circulirize result molecule</source>
         <translation>Circulirize result molecule</translation>
     </message>
@@ -153,27 +153,27 @@
         <translation type="vanished">Make circlurar</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="266"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="266"/>
         <source>Output</source>
         <translation>Output</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="274"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="274"/>
         <source>Path to file:</source>
         <translation>Path to file:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="284"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="284"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="296"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="296"/>
         <source>Open view for new molecule</source>
         <translation>Open view for new molecule</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="309"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="309"/>
         <source>Save immediately</source>
         <translation>Save immediately</translation>
     </message>
@@ -181,39 +181,39 @@
 <context>
     <name>CreateFragmentDialog</name>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="14"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="14"/>
         <source>Create DNA Fragment</source>
         <translation>Create DNA Fragment</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="24"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="24"/>
         <source>Fragment Options</source>
         <translation>Fragment Options</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="35"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="35"/>
         <source>Include Left Overhang</source>
         <translation>Include Left Overhang</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="49"/>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="95"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="49"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="95"/>
         <source>Direct</source>
         <translation>Direct</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="59"/>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="105"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="59"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="105"/>
         <source>Reverse-complement</source>
         <translation>Reverse-complement</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="81"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="81"/>
         <source>Include Right Overhang</source>
         <translation>Include Right Overhang</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="143"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="143"/>
         <source>Output</source>
         <translation>Output</translation>
     </message>
@@ -221,100 +221,100 @@
 <context>
     <name>DigestSequenceDialog</name>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="20"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="20"/>
         <source>Digest Sequence into Fragments</source>
         <translation>Digest Sequence into Fragments</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="30"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="30"/>
         <source>Restriction Sites</source>
         <translation>Restriction Sites</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="38"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="38"/>
         <source>Target Sequence:</source>
         <translation>Target Sequence:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="54"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="54"/>
         <source><sequence name></source>
         <translation><sequence name></translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="65"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="65"/>
         <source>Available enzymes:</source>
         <translation>Available enzymes:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="78"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="78"/>
         <source>Selected enzymes:</source>
         <translation>Selected enzymes:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="91"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="91"/>
         <source>Add --></source>
         <translation>Add --></translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="101"/>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="168"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="101"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="168"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="108"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="108"/>
         <source>Clear
  Selection </source>
         <translation>Clear
  Selection</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="129"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="129"/>
         <source>Add All --></source>
         <translation>Add All --></translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="139"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="139"/>
         <source>Conserved Annotations</source>
         <translation>Conserved Annotations</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="145"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="145"/>
         <source>List of conserved annotations:</source>
         <translation>List of conserved annotations:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="152"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="152"/>
         <source>Conserved annotations can not be "distrupted" when cutting occurs</source>
         <translation>Conserved annotations can not be "distrupted" when cutting occurs</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="161"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="161"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="175"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="175"/>
         <source>Remove All</source>
         <translation>Remove All</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="211"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="211"/>
         <source>Output</source>
         <translation>Output</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="244"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="244"/>
         <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/ui/DigestSequenceDialog.ui" line="247"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="247"/>
         <source>Circular molecule</source>
         <translation>Circular molecule</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="254"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="254"/>
         <source><hint label></source>
         <translation><hint label></translation>
     </message>
@@ -322,64 +322,64 @@
 <context>
     <name>EditFragmentDialog</name>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="20"/>
+        <location filename="../src/EditFragmentDialog.ui" line="20"/>
         <source>Edit Molecule Fragment</source>
         <translation>Edit Molecule Fragment</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="43"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="135"/>
+        <location filename="../src/EditFragmentDialog.ui" line="43"/>
+        <location filename="../src/EditFragmentDialog.ui" line="135"/>
         <source>Overhang</source>
         <translation>Overhang</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="63"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="155"/>
+        <location filename="../src/EditFragmentDialog.ui" line="63"/>
+        <location filename="../src/EditFragmentDialog.ui" line="155"/>
         <source>Custom overhang</source>
         <translation>Custom overhang</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="34"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="129"/>
+        <location filename="../src/EditFragmentDialog.ui" line="34"/>
+        <location filename="../src/EditFragmentDialog.ui" line="129"/>
         <source>Type</source>
         <translation>Type</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="77"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="169"/>
+        <location filename="../src/EditFragmentDialog.ui" line="77"/>
+        <location filename="../src/EditFragmentDialog.ui" line="169"/>
         <source>5'-3'</source>
         <translation>5'-3'</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="94"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="186"/>
+        <location filename="../src/EditFragmentDialog.ui" line="94"/>
+        <location filename="../src/EditFragmentDialog.ui" line="186"/>
         <source>3'-5'</source>
         <translation>3'-5'</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="123"/>
+        <location filename="../src/EditFragmentDialog.ui" line="123"/>
         <source>Right End</source>
         <translation>Right End</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="220"/>
+        <location filename="../src/EditFragmentDialog.ui" line="220"/>
         <source>Preview:</source>
         <translation>Preview:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="110"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="205"/>
+        <location filename="../src/EditFragmentDialog.ui" line="110"/>
+        <location filename="../src/EditFragmentDialog.ui" line="205"/>
         <source>Reset</source>
         <translation>Reset</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="28"/>
+        <location filename="../src/EditFragmentDialog.ui" line="28"/>
         <source>Left End</source>
         <translation>Left End</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="53"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="145"/>
+        <location filename="../src/EditFragmentDialog.ui" line="53"/>
+        <location filename="../src/EditFragmentDialog.ui" line="145"/>
         <source>Blunt</source>
         <translation>Blunt</translation>
     </message>
@@ -387,7 +387,7 @@
 <context>
     <name>EnzymesSelectorDialog</name>
     <message>
-        <location filename="../src/ui/EnzymesSelectorDialog.ui" line="20"/>
+        <location filename="../src/EnzymesSelectorDialog.ui" line="20"/>
         <source>Select Enzymes</source>
         <translation>Select Enzymes</translation>
     </message>
@@ -395,87 +395,87 @@
 <context>
     <name>EnzymesSelectorWidget</name>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="20"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="20"/>
         <source>Select enzymes</source>
         <translation>Select enzymes</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="36"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="36"/>
         <source>Filter by name:</source>
         <translation>Filter by name:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="81"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="81"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="86"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="86"/>
         <source>Accession</source>
         <translation>Accession</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="91"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="91"/>
         <source>Type</source>
         <translation>Type</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="96"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="96"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="101"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="101"/>
         <source>Organizm / Details</source>
         <translation>Organizm / Details</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="110"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="110"/>
         <source>Selected enzymes:</source>
         <translation>Selected enzymes:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="154"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="154"/>
         <source>Load enzymes database</source>
         <translation>Load enzymes database</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="157"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="157"/>
         <source>Open enzymes </source>
         <translation>Open enzymes </translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="167"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="167"/>
         <source>Export enzymes</source>
         <translation>Export enzymes</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="164"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="164"/>
         <source>Export current selection as new database</source>
         <translation>Export current selection as new database</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="181"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="181"/>
         <source>Select all enzymes in database</source>
         <translation>Select all enzymes in database</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="221"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="221"/>
         <source>Hint: selection file should contain enzymes' names separtated by whitespaces or commas</source>
         <translation>Hint: selection file should contain enzymes' names separtated by whitespaces or commas</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="231"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="231"/>
         <source>Save selected enzymes list to a text file</source>
         <translation>Save selected enzymes list to a text file</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="184"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="184"/>
         <source>Select All</source>
         <translation>Select All</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="126"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="126"/>
         <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; }
@@ -488,47 +488,47 @@ p, li { white-space: pre-wrap; }
 <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/ui/EnzymesSelectorWidget.ui" line="191"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="191"/>
         <source>Empty selection</source>
         <translation>Empty selection</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="194"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="194"/>
         <source>Select None</source>
         <translation>Select None</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="201"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="201"/>
         <source>Select enzymes by length of recognition sequence</source>
         <translation>Select enzymes by length of recognition sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="204"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="204"/>
         <source>Select by length</source>
         <translation>Select by length</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="211"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="211"/>
         <source>Invert current selection</source>
         <translation>Invert current selection</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="214"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="214"/>
         <source>Invert selection</source>
         <translation>Invert selection</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="224"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="224"/>
         <source>Load selection</source>
         <translation>Load selection</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="234"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="234"/>
         <source>Save selection</source>
         <translation>Save selection</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="248"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="248"/>
         <source>REBASE Info</source>
         <translation>REBASE Info</translation>
     </message>
@@ -536,42 +536,45 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>FindEnzymesDialog</name>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="17"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="17"/>
         <source>Find Restriction Sites</source>
         <translation>Find Restriction Sites</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="33"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="33"/>
         <source>Include only enzymes that cut from 'Minimum Hits' to 'Maximum Hits' times</source>
         <translation>Include only enzymes that cut from 'Minimum Hits' to 'Maximum Hits' times</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="36"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="36"/>
         <source>Filter by number of results:</source>
         <translation>Filter by number of results:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="54"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="54"/>
         <source>Minimum hits:</source>
         <translation>Minimum hits:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="89"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="89"/>
         <source>Maximum hits:</source>
         <translation>Maximum hits:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="118"/>
+        <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>Enzymes must not cut in the following region</translation>
+        <translation type="vanished">Enzymes must not cut in the following region</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="121"/>
         <source>Exclude region:</source>
-        <translation>Exclude region:</translation>
+        <translation type="vanished">Exclude region:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="141"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="128"/>
         <source><status label></source>
         <translation><status label></translation>
     </message>
@@ -599,52 +602,51 @@ p, li { white-space: pre-wrap; }
  Please construct molecule from available fragments.</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="114"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="284"/>
         <source>Set new molecule file name</source>
         <translation>Set new molecule file name</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="114"/>
         <source>Genbank (*.gb )</source>
-        <translation>Genbank (*.gb )</translation>
+        <translation type="vanished">Genbank (*.gb )</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="203"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="192"/>
         <source>Blunt</source>
         <translation>Blunt</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="204"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="193"/>
         <source>Fwd</source>
         <translation>Fwd</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="205"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="194"/>
         <source>Rev</source>
         <translation>Rev</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="222"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="211"/>
         <source>Left end</source>
         <translation>Left end</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="231"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="220"/>
         <source>Right end</source>
         <translation>Right end</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="233"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="222"/>
         <source>yes</source>
         <translation>yes</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="233"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="222"/>
         <source>no</source>
         <translation>no</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="234"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="223"/>
         <source>Make fragment reverse complement</source>
         <translation>Make fragment reverse complement</translation>
     </message>
@@ -721,42 +723,42 @@ Choose another region.</translation>
 <context>
     <name>U2::DigestSequenceTask</name>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="131"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="136"/>
         <source>Can't use restriction site %1 for digestion,  cleavage site is unknown </source>
         <translation>Can't use restriction site %1 for digestion,  cleavage site is unknown </translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="200"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="218"/>
         <source>Unable to digest into fragments: intersecting restriction sites %1 (%2..%3) and %4 (%5..%6)</source>
         <translation>Unable to digest into fragments: intersecting restriction sites %1 (%2..%3) and %4 (%5..%6)</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="306"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="324"/>
         <source>circular</source>
         <translation>circular</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="306"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="324"/>
         <source>linear</source>
         <translation>linear</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="307"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="325"/>
         <source><h3><br>Digest into fragments %1 (%2)</h3></source>
         <translation><h3><br>Digest into fragments %1 (%2)</h3></translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="308"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="326"/>
         <source><br>Generated %1 fragments.</source>
         <translation><br>Generated %1 fragments.</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="317"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="335"/>
         <source><br><br>&nbsp;&nbsp;&nbsp;&nbsp;%1:&nbsp;&nbsp;&nbsp;&nbsp;From %3 (%2) To %5 (%4) - %6 bp </source>
         <translation><br><br>&nbsp;&nbsp;&nbsp;&nbsp;%1:&nbsp;&nbsp;&nbsp;&nbsp;From %3 (%2) To %5 (%4) - %6 bp </translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="343"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="361"/>
         <source>Conserved annotation %1 (%2) is disrupted by the digestion. Try changing the restriction sites.</source>
         <translation>Conserved annotation %1 (%2) is disrupted by the digestion. Try changing the restriction sites.</translation>
     </message>
@@ -934,102 +936,102 @@ To start ligation create a project or open an existing.</translation>
 <context>
     <name>U2::EnzymesSelectorWidget</name>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="157"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="153"/>
         <source>File not exists: %1</source>
         <translation>File not exists: %1</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="164"/>
-        <location filename="../src/FindEnzymesDialog.cpp" line="202"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="160"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="198"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="208"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="204"/>
         <source>New enzymes database has been saved.</source>
         <translation>New enzymes database has been saved.</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="209"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="205"/>
         <source>Do you want to work with new database?</source>
         <translation>Do you want to work with new database?</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="312"/>
-        <location filename="../src/FindEnzymesDialog.cpp" line="514"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="308"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="510"/>
         <source>Select enzyme database file</source>
         <translation>Select enzyme database file</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="348"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="344"/>
         <source>Minimum length</source>
         <translation>Minimum length</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="348"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="344"/>
         <source>Enter minimum length of recognition sites</source>
         <translation>Enter minimum length of recognition sites</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="389"/>
-        <location filename="../src/FindEnzymesDialog.cpp" line="398"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="385"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="394"/>
         <source>Save selection</source>
         <translation>Save selection</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="389"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="385"/>
         <source>Can not save empty selection!</source>
         <translation>Can not save empty selection!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="394"/>
-        <location filename="../src/FindEnzymesDialog.cpp" line="462"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="390"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="458"/>
         <source>Select enzymes selection</source>
         <translation>Select enzymes selection</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="398"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="394"/>
         <source>Failed to open %1 for writing</source>
         <translation>Failed to open %1 for writing</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="411"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="407"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="411"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="407"/>
         <source>No enzyme selected!</source>
         <translation>No enzyme selected!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="416"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="412"/>
         <source>Selected enzyme has no ID!</source>
         <translation>Selected enzyme has no ID!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="462"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="458"/>
         <source>Selection files</source>
         <translation>Selection files</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="467"/>
-        <location filename="../src/FindEnzymesDialog.cpp" line="482"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="463"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="478"/>
         <source>Load selection</source>
         <translation>Load selection</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="467"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="463"/>
         <source>Failed to open selection file %1</source>
         <translation>Failed to open selection file %1</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="482"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="478"/>
         <source>Enzymes selection is empty!</source>
         <translation>Enzymes selection is empty!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="506"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="502"/>
         <source>Failed to load %1 from selection.</source>
         <translation>Failed to load %1 from selection.</translation>
     </message>
@@ -1037,7 +1039,7 @@ To start ligation create a project or open an existing.</translation>
 <context>
     <name>U2::FindEnzymesAutoAnnotationUpdater</name>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="319"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="331"/>
         <source>Restriction Sites</source>
         <translation>Restriction Sites</translation>
     </message>
@@ -1045,22 +1047,31 @@ To start ligation create a project or open an existing.</translation>
 <context>
     <name>U2::FindEnzymesDialog</name>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="553"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="569"/>
         <source><html><body align="center">No enzymes are selected!                Do you want to turn off <br>enzymes annotations highlighting?</body></html></source>
-        <translation><html><body align="center">No enzymes are selected!                Do you want to turn off <br>enzymes annotations highlighting?</body></html></translation>
+        <translation type="vanished"><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="591"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="557"/>
+        <source>Invalid 'Search' region!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FindEnzymesDialog.cpp" line="566"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/FindEnzymesDialog.cpp" line="587"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="591"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="587"/>
         <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>
@@ -1068,18 +1079,18 @@ To start ligation create a project or open an existing.</translation>
 <context>
     <name>U2::FindEnzymesTask</name>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="126"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="109"/>
         <source>Find Enzymes</source>
         <translation>Find Enzymes</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="142"/>
-        <location filename="../src/FindEnzymesTask.cpp" line="268"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="137"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="269"/>
         <source>Number of results exceed %1, stopping</source>
         <translation>Number of results exceed %1, stopping</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="220"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="217"/>
         <source>Found %1 restriction sites</source>
         <translation>Number of results exceed %1, stopping</translation>
     </message>
@@ -1092,17 +1103,17 @@ To start ligation create a project or open an existing.</translation>
         <translation>Find and store enzymes</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="54"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="52"/>
         <source>No enzymes selected.</source>
         <translation>No enzymes selected.</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="64"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="63"/>
         <source>Annotation table does not exist</source>
         <translation>Annotation table does not exist</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="65"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="64"/>
         <source>Annotation table is read-only</source>
         <translation>Annotation table is read-only</translation>
     </message>
@@ -1110,27 +1121,27 @@ To start ligation create a project or open an existing.</translation>
 <context>
     <name>U2::FindSingleEnzymeTask</name>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="235"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="232"/>
         <source>Find enzyme '%1'</source>
         <translation>Find enzyme '%1'</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="258"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="259"/>
         <source>Find enzyme '%1' parallel</source>
         <translation>Find enzyme '%1' parallel</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="284"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="286"/>
         <source>No enzyme alphabet</source>
         <translation>No enzyme alphabet</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="286"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="288"/>
         <source>Non-nucleic enzyme alphabet: %1, enzyme: %2, skipping..</source>
         <translation>Non-nucleic enzyme alphabet: %1, enzyme: %2, skipping..</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="291"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="293"/>
         <source>Failed to get sequence alphabet</source>
         <translation>Failed to get sequence alphabet</translation>
     </message>
@@ -1138,22 +1149,22 @@ To start ligation create a project or open an existing.</translation>
 <context>
     <name>U2::LigateFragmentsTask</name>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="365"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="383"/>
         <source>Fragments %1 and  %2 are inconsistent. Blunt and sticky ends incompatibility</source>
         <translation>Fragments %1 and  %2 are inconsistent. Blunt and sticky ends incompatibility</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="375"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="393"/>
         <source>Right overhang from %1 and left overhang from %2 are inconsistent.</source>
         <translation>Right overhang from %1 and left overhang from %2 are inconsistent.</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="421"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="439"/>
         <source>Unknown DNA alphabet in fragment %1 of %2</source>
         <translation>Unknown DNA alphabet in fragment %1 of %2</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="488"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="506"/>
         <source>Add constructed molecule</source>
         <translation>Add constructed molecule</translation>
     </message>
diff --git a/src/plugins/enzymes/transl/russian.ts b/src/plugins/enzymes/transl/russian.ts
index f9eb922..58a0b34 100644
--- a/src/plugins/enzymes/transl/russian.ts
+++ b/src/plugins/enzymes/transl/russian.ts
@@ -4,147 +4,147 @@
 <context>
     <name>ConstructMoleculeDialog</name>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="20"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="20"/>
         <source>Construct Molecule</source>
         <translation>Сшивка фрагментов</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="33"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="33"/>
         <source>Construction</source>
         <translation>Создание молекулы</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="42"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="42"/>
         <source>Available fragments:</source>
         <translation>Доступные фрагменты:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="57"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="57"/>
         <source>Fragments available from active project</source>
         <translation>Фрагменты доступные из активного проекта</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="64"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="64"/>
         <source>Add selected fragments to new molecule contents</source>
         <translation>Добавить выбранные фрагменты в состав новой молекулы</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="67"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="67"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="87"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="87"/>
         <source>From Project</source>
         <translation>Из проекта</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="94"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="94"/>
         <source>Add all available fragments to molecule contets</source>
         <translation>Добавить все доступные фрагменты в состав новой молекулы</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="97"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="97"/>
         <source>Add All</source>
         <translation>Добавить все</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="106"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="106"/>
         <source>New molecule contents:</source>
         <translation>Состав новой молекулы:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="119"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="119"/>
         <source>New molecule contents</source>
         <translation>Состав новой молекулы</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="123"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="123"/>
         <source>5'</source>
         <translation>5'</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="128"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="128"/>
         <source>Fragment</source>
         <translation>Фрагмент</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="133"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="133"/>
         <source>3'</source>
         <translation>3'</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="138"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="138"/>
         <source>Inverted</source>
         <translation>Инвертирован</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="161"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="161"/>
         <source>Move selected fragment up</source>
         <translation>Переместить на один уровень вверх</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="164"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="164"/>
         <source>Up</source>
         <translation>Вверх</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="171"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="171"/>
         <source>Move selected fragment down</source>
         <translation>Переместить на уровень вниз</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="174"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="174"/>
         <source>Down</source>
         <translation>Вниз</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="181"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="181"/>
         <source>Remove selected fragment from new molecule</source>
         <translation>Удалить выбранный фрагмент из состава молекулы</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="184"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="184"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="198"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="198"/>
         <source>Clear molecule contents</source>
         <translation>Убрать все фрагменты</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="201"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="201"/>
         <source>Clear All</source>
         <translation>Очистить все</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="223"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="223"/>
         <source>Annotate fragments in new molecule</source>
         <translation>Аннотировать фрагменты в новой молекуле</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="242"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="242"/>
         <source>Force "blunt" and omit all overhangs</source>
         <translation>Не учитывать липкие концы и исключить их</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="258"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="258"/>
         <source>Make circular</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="236"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="236"/>
         <source>Setting this option checked will result in ignoring overhangs while constructing new molecule.</source>
         <translation>Включение опции позволяет не учитывать липкие концы фрагментов при создании новой молекулы.</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="191"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="191"/>
         <source>Edit</source>
         <translation>Редактировать</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="255"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="255"/>
         <source>Circulirize result molecule</source>
         <translation>Сделать создаваемую молекулу круговой</translation>
     </message>
@@ -153,27 +153,27 @@
         <translation type="vanished">Круговая молекула</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="266"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="266"/>
         <source>Output</source>
         <translation>Выходные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="274"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="274"/>
         <source>Path to file:</source>
         <translation>Путь к файлу:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="284"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="284"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="296"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="296"/>
         <source>Open view for new molecule</source>
         <translation>Загрузить созданную молекулу</translation>
     </message>
     <message>
-        <location filename="../src/ui/ConstructMoleculeDialog.ui" line="309"/>
+        <location filename="../src/ConstructMoleculeDialog.ui" line="309"/>
         <source>Save immediately</source>
         <translation>Сохранить сразу</translation>
     </message>
@@ -181,39 +181,39 @@
 <context>
     <name>CreateFragmentDialog</name>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="14"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="14"/>
         <source>Create DNA Fragment</source>
         <translation>Создать фрагмент ДНК</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="24"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="24"/>
         <source>Fragment Options</source>
         <translation>Параметры фрагмента</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="35"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="35"/>
         <source>Include Left Overhang</source>
         <translation>Добавить левый выступ</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="49"/>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="95"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="49"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="95"/>
         <source>Direct</source>
         <translation>Прямая цепь</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="59"/>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="105"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="59"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="105"/>
         <source>Reverse-complement</source>
         <translation>Обратная</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="81"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="81"/>
         <source>Include Right Overhang</source>
         <translation>Доавить правый выступ</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateFragmentDialog.ui" line="143"/>
+        <location filename="../src/CreateFragmentDialog.ui" line="143"/>
         <source>Output</source>
         <translation>Выходные параметры</translation>
     </message>
@@ -221,99 +221,99 @@
 <context>
     <name>DigestSequenceDialog</name>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="20"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="20"/>
         <source>Digest Sequence into Fragments</source>
         <translation>Разбить на фрагменты</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="30"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="30"/>
         <source>Restriction Sites</source>
         <translation>Сайты рестрикции</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="38"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="38"/>
         <source>Target Sequence:</source>
         <translation>Исходная последовательность:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="54"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="54"/>
         <source><sequence name></source>
         <translation><имя последовательности></translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="65"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="65"/>
         <source>Available enzymes:</source>
         <translation>Доступные ферменты:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="78"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="78"/>
         <source>Selected enzymes:</source>
         <translation>Выбранные ферменты:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="91"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="91"/>
         <source>Add --></source>
         <translation>Добавить --></translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="101"/>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="168"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="101"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="168"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="108"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="108"/>
         <source>Clear
  Selection </source>
         <translation>Очистить выборку</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="129"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="129"/>
         <source>Add All --></source>
         <translation>Добавить Все --></translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="139"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="139"/>
         <source>Conserved Annotations</source>
         <translation>Сохраненные аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="145"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="145"/>
         <source>List of conserved annotations:</source>
         <translation>Список сохраненных аннотаций:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="152"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="152"/>
         <source>Conserved annotations can not be "distrupted" when cutting occurs</source>
         <translation>Сохраненные аннотации не могут быть "distrupted" в процессе резки</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="161"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="161"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="175"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="175"/>
         <source>Remove All</source>
         <translation>Удалить все</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="211"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="211"/>
         <source>Output</source>
         <translation>Выходные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="244"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="244"/>
         <source>Use this option to treat the molecule as circular</source>
         <translation>Используйте эту опцию, чтобы использовать молекулу как круговую</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="247"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="247"/>
         <source>Circular molecule</source>
         <translation>Круговая молекула</translation>
     </message>
     <message>
-        <location filename="../src/ui/DigestSequenceDialog.ui" line="254"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="254"/>
         <source><hint label></source>
         <translation><hint label></translation>
     </message>
@@ -321,64 +321,64 @@
 <context>
     <name>EditFragmentDialog</name>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="20"/>
+        <location filename="../src/EditFragmentDialog.ui" line="20"/>
         <source>Edit Molecule Fragment</source>
         <translation>Редактировать фрагмент</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="28"/>
+        <location filename="../src/EditFragmentDialog.ui" line="28"/>
         <source>Left End</source>
         <translation>Левый конец</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="43"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="135"/>
+        <location filename="../src/EditFragmentDialog.ui" line="43"/>
+        <location filename="../src/EditFragmentDialog.ui" line="135"/>
         <source>Overhang</source>
         <translation>Выступ</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="63"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="155"/>
+        <location filename="../src/EditFragmentDialog.ui" line="63"/>
+        <location filename="../src/EditFragmentDialog.ui" line="155"/>
         <source>Custom overhang</source>
         <translation>Задать выступ</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="77"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="169"/>
+        <location filename="../src/EditFragmentDialog.ui" line="77"/>
+        <location filename="../src/EditFragmentDialog.ui" line="169"/>
         <source>5'-3'</source>
         <translation>5'-3'</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="94"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="186"/>
+        <location filename="../src/EditFragmentDialog.ui" line="94"/>
+        <location filename="../src/EditFragmentDialog.ui" line="186"/>
         <source>3'-5'</source>
         <translation>3'-5'</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="123"/>
+        <location filename="../src/EditFragmentDialog.ui" line="123"/>
         <source>Right End</source>
         <translation>Правый конец</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="34"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="129"/>
+        <location filename="../src/EditFragmentDialog.ui" line="34"/>
+        <location filename="../src/EditFragmentDialog.ui" line="129"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="220"/>
+        <location filename="../src/EditFragmentDialog.ui" line="220"/>
         <source>Preview:</source>
         <translation>Предварительный просмотр:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="110"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="205"/>
+        <location filename="../src/EditFragmentDialog.ui" line="110"/>
+        <location filename="../src/EditFragmentDialog.ui" line="205"/>
         <source>Reset</source>
         <translation>Сбросить</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="53"/>
-        <location filename="../src/ui/EditFragmentDialog.ui" line="145"/>
+        <location filename="../src/EditFragmentDialog.ui" line="53"/>
+        <location filename="../src/EditFragmentDialog.ui" line="145"/>
         <source>Blunt</source>
         <translation>Срез</translation>
     </message>
@@ -386,7 +386,7 @@
 <context>
     <name>EnzymesSelectorDialog</name>
     <message>
-        <location filename="../src/ui/EnzymesSelectorDialog.ui" line="20"/>
+        <location filename="../src/EnzymesSelectorDialog.ui" line="20"/>
         <source>Select Enzymes</source>
         <translation>Выбрать сайты рестрикции</translation>
     </message>
@@ -394,97 +394,97 @@
 <context>
     <name>EnzymesSelectorWidget</name>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="20"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="20"/>
         <source>Select enzymes</source>
         <translation>Выбрать ферменты</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="36"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="36"/>
         <source>Filter by name:</source>
         <translation>Фильтр по имени:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="81"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="81"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="86"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="86"/>
         <source>Accession</source>
         <translation>Идентификатор</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="91"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="91"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="96"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="96"/>
         <source>Sequence</source>
         <translation>Последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="101"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="101"/>
         <source>Organizm / Details</source>
         <translation>Организм / Детали</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="110"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="110"/>
         <source>Selected enzymes:</source>
         <translation>Выбранные ферменты:</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="154"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="154"/>
         <source>Load enzymes database</source>
         <translation>Load enzymes database</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="157"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="157"/>
         <source>Open enzymes </source>
         <translation>Открыть ферменты </translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="167"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="167"/>
         <source>Export enzymes</source>
         <translation>Экспортировать ферменты</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="224"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="224"/>
         <source>Load selection</source>
         <translation>Загрузить выделенное</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="234"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="234"/>
         <source>Save selection</source>
         <translation>Сохранить выделенное</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="164"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="164"/>
         <source>Export current selection as new database</source>
         <translation>Экспортировать текущее выделение как базу данных</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="181"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="181"/>
         <source>Select all enzymes in database</source>
         <translation>Выделить все ферменты в базе данных</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="221"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="221"/>
         <source>Hint: selection file should contain enzymes' names separtated by whitespaces or commas</source>
         <translation>Подсказка: выделенный файл должен содержать имена ферментов, разделенных пробелами или запятыми</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="231"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="231"/>
         <source>Save selected enzymes list to a text file</source>
         <translation>Сохранить список выделенных ферментов в текстовый файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="184"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="184"/>
         <source>Select All</source>
         <translation>Выбрать все</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="126"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="126"/>
         <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; }
@@ -497,37 +497,37 @@ p, li { white-space: pre-wrap; }
 <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/ui/EnzymesSelectorWidget.ui" line="191"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="191"/>
         <source>Empty selection</source>
         <translation>Пустое выделение</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="194"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="194"/>
         <source>Select None</source>
         <translation>Очистить выборку</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="201"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="201"/>
         <source>Select enzymes by length of recognition sequence</source>
         <translation>Выбрать ферменты по длине выбранной последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="204"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="204"/>
         <source>Select by length</source>
         <translation>Выбрать по длине</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="211"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="211"/>
         <source>Invert current selection</source>
         <translation>Инвертировать текущее выделение</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="214"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="214"/>
         <source>Invert selection</source>
         <translation>Инвертировать</translation>
     </message>
     <message>
-        <location filename="../src/ui/EnzymesSelectorWidget.ui" line="248"/>
+        <location filename="../src/EnzymesSelectorWidget.ui" line="248"/>
         <source>REBASE Info</source>
         <translation>REBASE Инфо</translation>
     </message>
@@ -535,42 +535,45 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>FindEnzymesDialog</name>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="17"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="17"/>
         <source>Find Restriction Sites</source>
         <translation>Рестрикционный анализ</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="33"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="33"/>
         <source>Include only enzymes that cut from 'Minimum Hits' to 'Maximum Hits' times</source>
         <translation>Включить только ферменты, разрезающие от Минимум до Максимум раз</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="36"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="36"/>
         <source>Filter by number of results:</source>
         <translation>Фильтровать по числу результатов:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="54"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="54"/>
         <source>Minimum hits:</source>
         <translation>Минимум:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="89"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="89"/>
         <source>Maximum hits:</source>
         <translation>Максимум:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="118"/>
+        <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>Ферменты не должны "разрезать" данный регион</translation>
+        <translation type="vanished">Ферменты не должны "разрезать" данный регион</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="121"/>
         <source>Exclude region:</source>
-        <translation>Исключить регион:</translation>
+        <translation type="vanished">Исключить регион:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindEnzymesDialog.ui" line="141"/>
+        <location filename="../src/FindEnzymesDialog.ui" line="128"/>
         <source><status label></source>
         <translation><статус></translation>
     </message>
@@ -597,52 +600,51 @@ p, li { white-space: pre-wrap; }
         <translation>Выберите фрагменты, составляющие новую молекулу.</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="114"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="284"/>
         <source>Set new molecule file name</source>
         <translation>Задайте имя файла</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="114"/>
         <source>Genbank (*.gb )</source>
-        <translation>Genbank (*.gb )</translation>
+        <translation type="vanished">Genbank (*.gb )</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="203"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="192"/>
         <source>Blunt</source>
         <translation>"Срез"</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="204"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="193"/>
         <source>Fwd</source>
         <translation>Прям</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="205"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="194"/>
         <source>Rev</source>
         <translation>Обр</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="222"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="211"/>
         <source>Left end</source>
         <translation>Левый конец</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="231"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="220"/>
         <source>Right end</source>
         <translation>Правый конец</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="233"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="222"/>
         <source>yes</source>
         <translation>да</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="233"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="222"/>
         <source>no</source>
         <translation>нет</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="234"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="223"/>
         <source>Make fragment reverse complement</source>
         <translation>Сделать фрагмент обратно-комплементарным</translation>
     </message>
@@ -719,42 +721,42 @@ Choose another region.</translation>
 <context>
     <name>U2::DigestSequenceTask</name>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="131"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="136"/>
         <source>Can't use restriction site %1 for digestion,  cleavage site is unknown </source>
         <translation>Невозможно использовать сайт %1 для разбиения на фрагменты, точка разреза неопределена</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="200"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="218"/>
         <source>Unable to digest into fragments: intersecting restriction sites %1 (%2..%3) and %4 (%5..%6)</source>
         <translation>Не удалость разбить на фрагменты перескающиеся сайты рестрикции  %1 (%2..%3) и %4 (%5..%6)</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="306"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="324"/>
         <source>circular</source>
         <translation>круговая</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="306"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="324"/>
         <source>linear</source>
         <translation>линейная</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="307"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="325"/>
         <source><h3><br>Digest into fragments %1 (%2)</h3></source>
         <translation><h3><br>Разбиение на фрагменты %1 (%2)</h3></translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="308"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="326"/>
         <source><br>Generated %1 fragments.</source>
         <translation><br>Создано %1 фрагментов.</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="317"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="335"/>
         <source><br><br>&nbsp;&nbsp;&nbsp;&nbsp;%1:&nbsp;&nbsp;&nbsp;&nbsp;From %3 (%2) To %5 (%4) - %6 bp </source>
         <translation><br><br>&nbsp;&nbsp;&nbsp;&nbsp;%1:&nbsp;&nbsp;&nbsp;&nbsp;От %3 (%2) До %5 (%4) - %6 bp </translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="343"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="361"/>
         <source>Conserved annotation %1 (%2) is disrupted by the digestion. Try changing the restriction sites.</source>
         <translation>Conserved annotation %1 (%2) is disrupted by the digestion. Try changing the restriction sites.</translation>
     </message>
@@ -928,102 +930,102 @@ To start ligation create a project or open an existing.</source>
 <context>
     <name>U2::EnzymesSelectorWidget</name>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="157"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="153"/>
         <source>File not exists: %1</source>
         <translation>Файл не найден: %1</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="164"/>
-        <location filename="../src/FindEnzymesDialog.cpp" line="202"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="160"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="198"/>
         <source>Error</source>
         <translation>Проблема</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="208"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="204"/>
         <source>New enzymes database has been saved.</source>
         <translation>Новая база ферментов рестрикции создана.</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="209"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="205"/>
         <source>Do you want to work with new database?</source>
         <translation>Хотите ли вы работать с новой базой ферментов рестрикции?</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="312"/>
-        <location filename="../src/FindEnzymesDialog.cpp" line="514"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="308"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="510"/>
         <source>Select enzyme database file</source>
         <translation>Выбор базы ферментов рестрикции</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="348"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="344"/>
         <source>Minimum length</source>
         <translation>Минимальная длина</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="348"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="344"/>
         <source>Enter minimum length of recognition sites</source>
         <translation>Введите минимальную длину сайта распознавания</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="389"/>
-        <location filename="../src/FindEnzymesDialog.cpp" line="398"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="385"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="394"/>
         <source>Save selection</source>
         <translation>Сохранить выделение</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="389"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="385"/>
         <source>Can not save empty selection!</source>
         <translation>Невозможно сохранить пустое выделение!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="394"/>
-        <location filename="../src/FindEnzymesDialog.cpp" line="462"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="390"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="458"/>
         <source>Select enzymes selection</source>
         <translation>Выбрать ферменты</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="398"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="394"/>
         <source>Failed to open %1 for writing</source>
         <translation>Невозможно открыть %1 для записи</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="411"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="407"/>
         <source>Error!</source>
         <translation>Проблема!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="411"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="407"/>
         <source>No enzyme selected!</source>
         <translation>Фермент не выбран!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="416"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="412"/>
         <source>Selected enzyme has no ID!</source>
         <translation>Выбранный фермент не имеет идентификатора!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="462"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="458"/>
         <source>Selection files</source>
         <translation>Файлы с выделением</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="467"/>
-        <location filename="../src/FindEnzymesDialog.cpp" line="482"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="463"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="478"/>
         <source>Load selection</source>
         <translation>Загрузить выделение</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="467"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="463"/>
         <source>Failed to open selection file %1</source>
         <translation>Невозможно открыть файл %1</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="482"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="478"/>
         <source>Enzymes selection is empty!</source>
         <translation>Выделение пусто!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="506"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="502"/>
         <source>Failed to load %1 from selection.</source>
         <translation>Невозможно загрузить %1 из выделения.</translation>
     </message>
@@ -1031,7 +1033,7 @@ To start ligation create a project or open an existing.</source>
 <context>
     <name>U2::FindEnzymesAutoAnnotationUpdater</name>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="319"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="331"/>
         <source>Restriction Sites</source>
         <translation>Сайты рестрикции</translation>
     </message>
@@ -1039,22 +1041,31 @@ To start ligation create a project or open an existing.</source>
 <context>
     <name>U2::FindEnzymesDialog</name>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="553"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="550"/>
         <source>Total number of enzymes: %1, selected %2</source>
         <translation>Число ферментов в базе: %1, выбрано %2</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="569"/>
         <source><html><body align="center">No enzymes are selected!                Do you want to turn off <br>enzymes annotations highlighting?</body></html></source>
-        <translation><html><body align="center">Ферменты не выбраны!                Отключить <br>подсветку аннотаций ферментов?</body></html></translation>
+        <translation type="vanished"><html><body align="center">Ферменты не выбраны!                Отключить <br>подсветку аннотаций ферментов?</body></html></translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="591"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="557"/>
+        <source>Invalid 'Search' region!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/FindEnzymesDialog.cpp" line="566"/>
+        <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>
+    </message>
+    <message>
+        <location filename="../src/FindEnzymesDialog.cpp" line="587"/>
         <source>Error!</source>
         <translation>Проблема!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="591"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="587"/>
         <source>Minimum hit value must be lesser or equal then maximum!</source>
         <translation>Минимальное значение должно быть меньше либо равно максимального!</translation>
     </message>
@@ -1062,18 +1073,18 @@ To start ligation create a project or open an existing.</source>
 <context>
     <name>U2::FindEnzymesTask</name>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="126"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="109"/>
         <source>Find Enzymes</source>
         <translation>Поиск ферментов</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="142"/>
-        <location filename="../src/FindEnzymesTask.cpp" line="268"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="137"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="269"/>
         <source>Number of results exceed %1, stopping</source>
         <translation>Кол-во результатов превысило %1, задача остановлена</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="220"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="217"/>
         <source>Found %1 restriction sites</source>
         <translation>Найдено %1 сайтов рестрикции</translation>
     </message>
@@ -1086,17 +1097,17 @@ To start ligation create a project or open an existing.</source>
         <translation>Найти и сохранить ферменты</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="54"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="52"/>
         <source>No enzymes selected.</source>
         <translation>Сайты рестрикции не выбраны.</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="64"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="63"/>
         <source>Annotation table does not exist</source>
         <translation>Таблица аннотаций не существует</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="65"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="64"/>
         <source>Annotation table is read-only</source>
         <translation>Таблица аннотаций не доступна для записи</translation>
     </message>
@@ -1104,27 +1115,27 @@ To start ligation create a project or open an existing.</source>
 <context>
     <name>U2::FindSingleEnzymeTask</name>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="235"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="232"/>
         <source>Find enzyme '%1'</source>
         <translation>Поиск энзима '%1'</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="258"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="259"/>
         <source>Find enzyme '%1' parallel</source>
         <translation>Параллельный поиск энзима '%1'</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="284"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="286"/>
         <source>No enzyme alphabet</source>
         <translation>Нет алфавита</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="286"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="288"/>
         <source>Non-nucleic enzyme alphabet: %1, enzyme: %2, skipping..</source>
         <translation>Ненуклеотидный алфавит: %1, энзим %2 игнорируется..</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesTask.cpp" line="291"/>
+        <location filename="../src/FindEnzymesTask.cpp" line="293"/>
         <source>Failed to get sequence alphabet</source>
         <translation>Невозможно получить алфавит последовательности</translation>
     </message>
@@ -1132,22 +1143,22 @@ To start ligation create a project or open an existing.</source>
 <context>
     <name>U2::LigateFragmentsTask</name>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="365"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="383"/>
         <source>Fragments %1 and  %2 are inconsistent. Blunt and sticky ends incompatibility</source>
         <translation>Фрагменты %1 и  %2 несопоставимы. Липкий конец и срез невозможно соединить</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="375"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="393"/>
         <source>Right overhang from %1 and left overhang from %2 are inconsistent.</source>
         <translation>Правый липкий конец фрагмента %1 несовместим с левым липким концом фрагмента %2.</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="421"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="439"/>
         <source>Unknown DNA alphabet in fragment %1 of %2</source>
         <translation>Неизвестный алфавит у фрагмента %1 последовательности %2</translation>
     </message>
     <message>
-        <location filename="../src/CloningUtilTasks.cpp" line="488"/>
+        <location filename="../src/CloningUtilTasks.cpp" line="506"/>
         <source>Add constructed molecule</source>
         <translation>Добавить созданную молекулу</translation>
     </message>
diff --git a/src/plugins/expert_discovery/expert_discovery.license b/src/plugins/expert_discovery/expert_discovery.license
deleted file mode 100644
index d159169..0000000
--- a/src/plugins/expert_discovery/expert_discovery.license
+++ /dev/null
@@ -1,339 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/src/plugins/expert_discovery/expert_discovery.pri b/src/plugins/expert_discovery/expert_discovery.pri
deleted file mode 100644
index 04a0c53..0000000
--- a/src/plugins/expert_discovery/expert_discovery.pri
+++ /dev/null
@@ -1,8 +0,0 @@
-# include (expert_discovery.pri)
-
-PLUGIN_ID=expert_discovery
-PLUGIN_NAME=Expert Discovery
-PLUGIN_VENDOR=Unipro
-PLUGIN_MODE=ui
-CONFIG += warn_off
-include( ../../ugene_plugin_common.pri )
diff --git a/src/plugins/expert_discovery/expert_discovery.pro b/src/plugins/expert_discovery/expert_discovery.pro
deleted file mode 100644
index e567946..0000000
--- a/src/plugins/expert_discovery/expert_discovery.pro
+++ /dev/null
@@ -1,71 +0,0 @@
-include (expert_discovery.pri)
-
-# Input
-HEADERS += 	src/ExpertDiscoveryPlugin.h \
-		src/ExpertDiscoveryView.h \
-		src/ExpertDiscoveryViewCtx.h \
-		src/ExpertDiscoveryPosNegDialog.h \
-		src/ExpertDiscoveryControlDialog.h \
-		src/ExpertDiscoveryPosNegMrkDialog.h \
-		src/ExpertDiscoveryControlMrkDialog.h \
-		src/ExpertDiscoveryAdvSetDialog.h \
-	        src/ExpertDiscoverySetupRecBoundDialog.h \
-		src/ExpertDiscoveryPropTable.h \
-		src/ExpertDiscoveryTask.h \
-		src/ExpertDiscoveryData.h \
-		src/ExpertDiscoverySet.h \
-		src/ExpertDiscoveryGraphs.h \
-		src/ExpertDiscoveryExtSigWiz.h \
-		src/ExpertDiscoveryCSUtil.h \
-		src/ExpertDiscoveryTreeWidgets.h \
-		src/ExpertDiscoveryTreeWidgetsCtrl.h \
-		src/ExpertDiscoveryPersistent.h \
-		src/ExpertDiscoverySearchDialogController.h \
-	   	src/DDisc/definitions.h \
-		src/DDisc/statmath.h \
-		src/DDisc/Signal.h  \
-		src/DDisc/Sequence.h  \
-		src/DDisc/MetaInfo.h  \
-		src/DDisc/Extractor.h  \
-		src/DDisc/Context.h  
-
-FORMS +=   src/ui/ExpertDiscoveryPosNegDialog.ui \
-	   src/ui/ExpertDiscoveryControlDialog.ui \
-	   src/ui/ExpertDiscoveryPosNegMrkDialog.ui \
-	   src/ui/ExpertDiscoveryControlMrkDialog.ui \
-	   src/ui/ExpertDiscoveryAdvSetDialog.ui \
-	   src/ui/ExpertDiscoverySigExtrWiz.ui \
-	   src/ui/ExpertDiscoverySetupRecBoundDialog.ui \
-           src/ui/ExpertDiscoverySearchDialog.ui \
-
-SOURCES += 	src/ExpertDiscoveryPlugin.cpp \
-		src/ExpertDiscoveryView.cpp \
-		src/ExpertDiscoveryViewCtx.cpp \
-		src/ExpertDiscoveryPosNegDialog.cpp \
-		src/ExpertDiscoveryControlDialog.cpp \
-		src/ExpertDiscoveryPosNegMrkDialog.cpp \
-		src/ExpertDiscoveryControlMrkDialog.cpp \
-		src/ExpertDiscoveryAdvSetDialog.cpp \
-	        src/ExpertDiscoverySetupRecBoundDialog.cpp \
-		src/ExpertDiscoveryPropTable.cpp \
-		src/ExpertDiscoveryTask.cpp \
-		src/ExpertDiscoveryData.cpp \
-		src/ExpertDiscoverySet.cpp \
-		src/ExpertDiscoveryGraphs.cpp \
-		src/ExpertDiscoveryExtSigWiz.cpp \
-		src/ExpertDiscoveryCSUtil.cpp \
-		src/ExpertDiscoveryTreeWidgets.cpp \
-		src/ExpertDiscoveryTreeWidgetsCtrl.cpp \
-		src/ExpertDiscoveryPersistent.cpp \
-		src/ExpertDiscoverySearchDialogController.cpp \
-	   	src/DDisc/Definitions.cpp \
-		src/DDisc/statmath.cpp \
-		src/DDisc/Signal.cpp  \
-		src/DDisc/Sequence.cpp  \
-		src/DDisc/MetaInfo.cpp  \
-		src/DDisc/Extractor.cpp  \
-		src/DDisc/Context.cpp  
-RESOURCES += expert_discovery.qrc
-TRANSLATIONS += transl/english.ts transl/russian.ts
-
-
diff --git a/src/plugins/expert_discovery/expert_discovery.qrc b/src/plugins/expert_discovery/expert_discovery.qrc
deleted file mode 100644
index ae77c7c..0000000
--- a/src/plugins/expert_discovery/expert_discovery.qrc
+++ /dev/null
@@ -1,31 +0,0 @@
-<RCC>
-    <qresource prefix="/expert_discovery" >
-	<file>images/control.png</file>
-	<file>images/cs.png</file>
-	<file>images/csroot.png</file>
-	<file>images/distance.png</file>
-	<file>images/folder.png</file>
-	<file>images/interval.png</file>
-	<file>images/mrkroot.png</file>
-	<file>images/negseq.png</file>
-	<file>images/posseq.png</file>
-	<file>images/repetition.png</file>
-	<file>images/sequence.png</file>
-	<file>images/sequences.png</file>
-	<file>images/ts.png</file>
-	<file>images/undefined.png</file>
-	<file>images/extractSignals.png</file>
-	<file>images/extractSignals2.png</file>
-	<file>images/genRep.png</file>
-	<file>images/loadControlsSeq.png</file>
-	<file>images/loadControlsSeqAnnot.png</file>
-	<file>images/loadMarkup.png</file>
-	<file>images/newDoc.png</file>
-	<file>images/optRecBound.png</file>
-	<file>images/setRecBound.png</file>
-	<file>images/fileopen.png</file>
-	<file>images/filenew.png</file>
-	<file>images/filesave.png</file>
-      
-    </qresource>
-</RCC>
diff --git a/src/plugins/expert_discovery/images/ExpertDiscovery.ico b/src/plugins/expert_discovery/images/ExpertDiscovery.ico
deleted file mode 100644
index 8a84ca3..0000000
Binary files a/src/plugins/expert_discovery/images/ExpertDiscovery.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/ExpertDiscoveryDoc.ico b/src/plugins/expert_discovery/images/ExpertDiscoveryDoc.ico
deleted file mode 100644
index 44fc19d..0000000
Binary files a/src/plugins/expert_discovery/images/ExpertDiscoveryDoc.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/ExpertDiscoveryDoc.png b/src/plugins/expert_discovery/images/ExpertDiscoveryDoc.png
deleted file mode 100644
index fe2eef4..0000000
Binary files a/src/plugins/expert_discovery/images/ExpertDiscoveryDoc.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/control.ico b/src/plugins/expert_discovery/images/control.ico
deleted file mode 100644
index 820d5f4..0000000
Binary files a/src/plugins/expert_discovery/images/control.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/control.png b/src/plugins/expert_discovery/images/control.png
deleted file mode 100644
index b4cbb9c..0000000
Binary files a/src/plugins/expert_discovery/images/control.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/cs.ico b/src/plugins/expert_discovery/images/cs.ico
deleted file mode 100644
index 18ce30d..0000000
Binary files a/src/plugins/expert_discovery/images/cs.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/cs.png b/src/plugins/expert_discovery/images/cs.png
deleted file mode 100644
index 56a3772..0000000
Binary files a/src/plugins/expert_discovery/images/cs.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/csroot.ico b/src/plugins/expert_discovery/images/csroot.ico
deleted file mode 100644
index 0323e7e..0000000
Binary files a/src/plugins/expert_discovery/images/csroot.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/csroot.png b/src/plugins/expert_discovery/images/csroot.png
deleted file mode 100644
index 4636ad4..0000000
Binary files a/src/plugins/expert_discovery/images/csroot.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/distance.ico b/src/plugins/expert_discovery/images/distance.ico
deleted file mode 100644
index e968d89..0000000
Binary files a/src/plugins/expert_discovery/images/distance.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/distance.png b/src/plugins/expert_discovery/images/distance.png
deleted file mode 100644
index 7fb10f0..0000000
Binary files a/src/plugins/expert_discovery/images/distance.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/extractSignals.ico b/src/plugins/expert_discovery/images/extractSignals.ico
deleted file mode 100644
index d4f6fa0..0000000
Binary files a/src/plugins/expert_discovery/images/extractSignals.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/extractSignals.png b/src/plugins/expert_discovery/images/extractSignals.png
deleted file mode 100644
index 20cc0b1..0000000
Binary files a/src/plugins/expert_discovery/images/extractSignals.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/extractSignals2.ico b/src/plugins/expert_discovery/images/extractSignals2.ico
deleted file mode 100644
index 5ce7791..0000000
Binary files a/src/plugins/expert_discovery/images/extractSignals2.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/extractSignals2.png b/src/plugins/expert_discovery/images/extractSignals2.png
deleted file mode 100644
index 279eb5d..0000000
Binary files a/src/plugins/expert_discovery/images/extractSignals2.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/filenew.png b/src/plugins/expert_discovery/images/filenew.png
deleted file mode 100644
index 43f0eb8..0000000
Binary files a/src/plugins/expert_discovery/images/filenew.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/fileopen.png b/src/plugins/expert_discovery/images/fileopen.png
deleted file mode 100644
index e2ee397..0000000
Binary files a/src/plugins/expert_discovery/images/fileopen.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/filesave.png b/src/plugins/expert_discovery/images/filesave.png
deleted file mode 100644
index c0686c2..0000000
Binary files a/src/plugins/expert_discovery/images/filesave.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/folder.ico b/src/plugins/expert_discovery/images/folder.ico
deleted file mode 100644
index ed1836d..0000000
Binary files a/src/plugins/expert_discovery/images/folder.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/folder.png b/src/plugins/expert_discovery/images/folder.png
deleted file mode 100644
index dba5c57..0000000
Binary files a/src/plugins/expert_discovery/images/folder.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/genRep.ico b/src/plugins/expert_discovery/images/genRep.ico
deleted file mode 100644
index f34d1f8..0000000
Binary files a/src/plugins/expert_discovery/images/genRep.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/genRep.png b/src/plugins/expert_discovery/images/genRep.png
deleted file mode 100644
index 4e2202e..0000000
Binary files a/src/plugins/expert_discovery/images/genRep.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/icon1.ico b/src/plugins/expert_discovery/images/icon1.ico
deleted file mode 100644
index c04bd86..0000000
Binary files a/src/plugins/expert_discovery/images/icon1.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/icon1.png b/src/plugins/expert_discovery/images/icon1.png
deleted file mode 100644
index 69607d0..0000000
Binary files a/src/plugins/expert_discovery/images/icon1.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/interval.ico b/src/plugins/expert_discovery/images/interval.ico
deleted file mode 100644
index 3a550d5..0000000
Binary files a/src/plugins/expert_discovery/images/interval.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/interval.png b/src/plugins/expert_discovery/images/interval.png
deleted file mode 100644
index bfdf991..0000000
Binary files a/src/plugins/expert_discovery/images/interval.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/loadControlsSeq.ico b/src/plugins/expert_discovery/images/loadControlsSeq.ico
deleted file mode 100644
index 14599e1..0000000
Binary files a/src/plugins/expert_discovery/images/loadControlsSeq.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/loadControlsSeq.png b/src/plugins/expert_discovery/images/loadControlsSeq.png
deleted file mode 100644
index 5469d03..0000000
Binary files a/src/plugins/expert_discovery/images/loadControlsSeq.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/loadControlsSeqAnnot.ico b/src/plugins/expert_discovery/images/loadControlsSeqAnnot.ico
deleted file mode 100644
index d5dde21..0000000
Binary files a/src/plugins/expert_discovery/images/loadControlsSeqAnnot.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/loadControlsSeqAnnot.png b/src/plugins/expert_discovery/images/loadControlsSeqAnnot.png
deleted file mode 100644
index 4ff8ef9..0000000
Binary files a/src/plugins/expert_discovery/images/loadControlsSeqAnnot.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/loadMarkup.ico b/src/plugins/expert_discovery/images/loadMarkup.ico
deleted file mode 100644
index c2221bc..0000000
Binary files a/src/plugins/expert_discovery/images/loadMarkup.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/loadMarkup.png b/src/plugins/expert_discovery/images/loadMarkup.png
deleted file mode 100644
index 282870a..0000000
Binary files a/src/plugins/expert_discovery/images/loadMarkup.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/mrkroot.ico b/src/plugins/expert_discovery/images/mrkroot.ico
deleted file mode 100644
index ac189e6..0000000
Binary files a/src/plugins/expert_discovery/images/mrkroot.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/mrkroot.png b/src/plugins/expert_discovery/images/mrkroot.png
deleted file mode 100644
index 9f2a264..0000000
Binary files a/src/plugins/expert_discovery/images/mrkroot.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/negseq.ico b/src/plugins/expert_discovery/images/negseq.ico
deleted file mode 100644
index d9e624f..0000000
Binary files a/src/plugins/expert_discovery/images/negseq.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/negseq.png b/src/plugins/expert_discovery/images/negseq.png
deleted file mode 100644
index 9a83260..0000000
Binary files a/src/plugins/expert_discovery/images/negseq.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/newDoc.ico b/src/plugins/expert_discovery/images/newDoc.ico
deleted file mode 100644
index 28b948b..0000000
Binary files a/src/plugins/expert_discovery/images/newDoc.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/newDoc.png b/src/plugins/expert_discovery/images/newDoc.png
deleted file mode 100644
index 58723b7..0000000
Binary files a/src/plugins/expert_discovery/images/newDoc.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/optRecBound.ico b/src/plugins/expert_discovery/images/optRecBound.ico
deleted file mode 100644
index f2dcb84..0000000
Binary files a/src/plugins/expert_discovery/images/optRecBound.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/optRecBound.png b/src/plugins/expert_discovery/images/optRecBound.png
deleted file mode 100644
index 52872ad..0000000
Binary files a/src/plugins/expert_discovery/images/optRecBound.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/posseq.ico b/src/plugins/expert_discovery/images/posseq.ico
deleted file mode 100644
index 0268bf6..0000000
Binary files a/src/plugins/expert_discovery/images/posseq.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/posseq.png b/src/plugins/expert_discovery/images/posseq.png
deleted file mode 100644
index 8e1f3d0..0000000
Binary files a/src/plugins/expert_discovery/images/posseq.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/repetition.ico b/src/plugins/expert_discovery/images/repetition.ico
deleted file mode 100644
index ca8b7b8..0000000
Binary files a/src/plugins/expert_discovery/images/repetition.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/repetition.png b/src/plugins/expert_discovery/images/repetition.png
deleted file mode 100644
index 80fcfa0..0000000
Binary files a/src/plugins/expert_discovery/images/repetition.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/sequence.ico b/src/plugins/expert_discovery/images/sequence.ico
deleted file mode 100644
index 6c262a8..0000000
Binary files a/src/plugins/expert_discovery/images/sequence.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/sequence.png b/src/plugins/expert_discovery/images/sequence.png
deleted file mode 100644
index 7dd1011..0000000
Binary files a/src/plugins/expert_discovery/images/sequence.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/sequences.ico b/src/plugins/expert_discovery/images/sequences.ico
deleted file mode 100644
index ce0e4b2..0000000
Binary files a/src/plugins/expert_discovery/images/sequences.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/sequences.png b/src/plugins/expert_discovery/images/sequences.png
deleted file mode 100644
index 7a82a12..0000000
Binary files a/src/plugins/expert_discovery/images/sequences.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/setRecBound.ico b/src/plugins/expert_discovery/images/setRecBound.ico
deleted file mode 100644
index 0b81676..0000000
Binary files a/src/plugins/expert_discovery/images/setRecBound.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/setRecBound.png b/src/plugins/expert_discovery/images/setRecBound.png
deleted file mode 100644
index 295bedf..0000000
Binary files a/src/plugins/expert_discovery/images/setRecBound.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/ts.ico b/src/plugins/expert_discovery/images/ts.ico
deleted file mode 100644
index 8f8755b..0000000
Binary files a/src/plugins/expert_discovery/images/ts.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/ts.png b/src/plugins/expert_discovery/images/ts.png
deleted file mode 100644
index d113852..0000000
Binary files a/src/plugins/expert_discovery/images/ts.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/undefined.ico b/src/plugins/expert_discovery/images/undefined.ico
deleted file mode 100644
index d60ae32..0000000
Binary files a/src/plugins/expert_discovery/images/undefined.ico and /dev/null differ
diff --git a/src/plugins/expert_discovery/images/undefined.png b/src/plugins/expert_discovery/images/undefined.png
deleted file mode 100644
index d4d36da..0000000
Binary files a/src/plugins/expert_discovery/images/undefined.png and /dev/null differ
diff --git a/src/plugins/expert_discovery/src/DDisc/Context.cpp b/src/plugins/expert_discovery/src/DDisc/Context.cpp
deleted file mode 100644
index 9b8d45d..0000000
--- a/src/plugins/expert_discovery/src/DDisc/Context.cpp
+++ /dev/null
@@ -1,268 +0,0 @@
-// Context.cpp: implementation of the Context interface.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "Context.h"
-#include "Signal.h"
-
-namespace DDisc {
-
-//////////////////////////////////////////////////////////////////////
-// Context: Abstract search context
-//////////////////////////////////////////////////////////////////////
-
-Context::Context()
-{
-	reset();
-}
-
-Context::~Context()
-{
-
-}
-
-void Context::reset()
-{
-	setEof(false);
-	setSearchRegion(Interval());
-	setPosition(0);
-	setLength(0);
-}
-
-void Context::destroy() 
-{
-	delete this;
-}
-
-//////////////////////////////////////////////////////////////////////
-// ConInterval: Search context for interval operation
-//////////////////////////////////////////////////////////////////////
-
-ConInterval::ConInterval()
-: Context()
-{
-	pSubContext = NULL;
-}
-
-ConInterval::~ConInterval()
-{
-	if (pSubContext) pSubContext->destroy();
-}
-
-void ConInterval::reset()
-{
-	Context::reset();	
-	getSubContext().reset();
-}
-
-void ConInterval::setSubContext(Context &rContext) 
-{
-	if (pSubContext) pSubContext->destroy();
-	pSubContext = &rContext;
-}
-
-Context& ConInterval::getSubContext() const 
-{
-	return *pSubContext;
-}
-
-bool ConInterval::isSignalPart(int nPos) const
-{
-	return pSubContext->isSignalPart(nPos);
-}
-
-std::string ConInterval::getTSName(int nPos) const
-{
-	return pSubContext->getTSName(nPos);
-}
-
-int ConInterval::getDistributionHash() const
-{
-   return pSubContext->getDistributionHash();
-}
-
-
-//////////////////////////////////////////////////////////////////////
-// ConReiteration: Search context for reiteration operation
-//////////////////////////////////////////////////////////////////////
-
-ConReiteration::ConReiteration()
-: Context()
-{
-	pSubContext = NULL;
-	setReiterationNo(1);
-	setNextReiterationContext(NULL);
-	setFound(false);
-}
-
-ConReiteration::~ConReiteration()
-{
-	if (pSubContext) pSubContext->destroy();
-	delete getNextReiterationContext();
-}
-
-void ConReiteration::reset()
-{
-	setFound(false);
-	Context::reset();	
-	getSubContext().reset();
-	ConReiteration* pNR = getNextReiterationContext();
-	if (pNR) pNR->reset();
-}
-
-void ConReiteration::setSubContext(Context &rContext) 
-{
-	if (pSubContext) pSubContext->destroy();
-	pSubContext = &rContext;
-}
-
-Context& ConReiteration::getSubContext() const 
-{
-	return *pSubContext;
-}
-
-void ConReiteration::init(const OpReiteration* pOp) {
-	if (getReiterationNo()<=pOp->getCount().getTo()) {
-		setNextReiterationContext(new ConReiteration());
-		ConReiteration& rNR = *getNextReiterationContext();
-		rNR.setSearchRegion( Interval(0,0) );
-		rNR.setReiterationNo( getReiterationNo() + 1 );
-		rNR.setSubContext(pOp->getArgument()->createCompartibleContext());
-		rNR.init(pOp);
-	}
-}
-
-bool ConReiteration::isSignalPart(int nPos) const
-{
-	return pSubContext->isSignalPart(nPos) 
-		|| (getNextReiterationContext() && getNextReiterationContext()->isSignalPart(nPos));
-}
-
-std::string ConReiteration::getTSName(int nPos) const
-{
-	if (pSubContext->isSignalPart(nPos))
-		return pSubContext->getTSName(nPos);
-	else if (getNextReiterationContext())
-		return getNextReiterationContext()->getTSName(nPos);
-	else
-		return std::string();
-}
-
-int ConReiteration::getDistributionHash() const
-{
-   int result = 1;
-   if (getNextReiterationContext())
-      result = getNextReiterationContext()->getDistributionHash();
-   result *= pSubContext->getDistributionHash();
-   return result;
-}
-
-//////////////////////////////////////////////////////////////////////
-// ConDistance: Search context for distance operation
-//////////////////////////////////////////////////////////////////////
-
-ConDistance::ConDistance()
-: Context()
-{
-	pSubContext1 = NULL;
-	pSubContext2 = NULL;
-	setBOF(true);
-	setI(0);
-}
-
-ConDistance::~ConDistance()
-{
-	if (pSubContext1) pSubContext1->destroy();
-	if (pSubContext2) pSubContext2->destroy();
-}
-
-void ConDistance::reset()
-{
-	setBOF(true);
-	setI(0);
-	Context::reset();
-	getSubContext1().reset();
-	getSubContext2().reset();
-}
-void ConDistance::setSubContext1(Context &rContext) 
-{
-	if (pSubContext1) pSubContext1->destroy();
-	pSubContext1 = &rContext;
-}
-
-Context& ConDistance::getSubContext1() const 
-{
-	return *pSubContext1;
-}
-
-void ConDistance::setSubContext2(Context &rContext) 
-{
-	if (pSubContext2) pSubContext2->destroy();
-	pSubContext2 = &rContext;
-}
-
-Context& ConDistance::getSubContext2() const 
-{
-	return *pSubContext2;
-}
-
-bool ConDistance::isSignalPart(int nPos) const
-{
-	return pSubContext1->isSignalPart(nPos) || pSubContext2->isSignalPart(nPos);
-}
-
-std::string ConDistance::getTSName(int nPos) const
-{
-	if (pSubContext1->isSignalPart(nPos))
-		return pSubContext1->getTSName(nPos);
-	else
-		return pSubContext2->getTSName(nPos);
-}
-
-
-int ConDistance::getDistributionHash() const
-{
-   return pSubContext1->getDistributionHash() *
-          pSubContext2->getDistributionHash();
-}
-
-//////////////////////////////////////////////////////////////////////
-// ConTS: Search context for terminal symbol
-//////////////////////////////////////////////////////////////////////
-
-ConTS::ConTS(std::string name)
-: Context()
-{
-	this->name = name;
-}
-
-ConTS::~ConTS()
-{
-}
-
-void ConTS::reset()
-{
-	Context::reset();
-}
-
-bool ConTS::isSignalPart(int nPos) const
-{
-	return (nPos >= getPosition() && nPos < getPosition() + getLength());
-}
-
-std::string ConTS::getTSName(int nPos) const
-{
-	if (isSignalPart(nPos))
-		return name;
-	else 
-		return std::string();
-}
-
-int ConTS::getDistributionHash() const
-{
-   return getPosition() + getLength();
-}
-
-
-};
-
diff --git a/src/plugins/expert_discovery/src/DDisc/Context.h b/src/plugins/expert_discovery/src/DDisc/Context.h
deleted file mode 100644
index 2f0d9e0..0000000
--- a/src/plugins/expert_discovery/src/DDisc/Context.h
+++ /dev/null
@@ -1,239 +0,0 @@
-#ifndef CONTEXT_H__INCLUDED_
-#define CONTEXT_H__INCLUDED_
-
-#include "definitions.h"
-#include "Signal.h"
-
-namespace DDisc {
-
-/**
- *	Context is a general interface used to store current
- * search position for signal node and describe it. 
- */
-class Context  
-{
-public:
-   /**
-    *	Resets context. This method should be called when 
-    * when you are going to find signal on next sequence.
-    */
-	virtual void reset();
-   /**
-    *	Context class cannot be destroyed using delete. To
-    * destroy it call this method.
-    */
-	void destroy();
-   /**
-    *	Checks when position nPos of sequence is part of 
-    * current signal realization.
-    * 
-    * @param nPos position on sequence
-    * @return true if nPos is part of current signal realization
-    */
-	virtual bool isSignalPart(int nPos) const = 0;
-   
-	/**
-	*	Checks when position nPos of sequence is part of 
-	* current signal realization and return name of terminal symbol.
-	* 
-	* @param nPos position on sequence
-	* @return name of TS in position or empty string
-	*/
-	virtual std::string getTSName(int nPos) const = 0;
-   
-   /**
-    *	Calculates hash of current signal realization. This is
-    * used to avoid search of equivalent signals.
-    */
-   virtual int getDistributionHash() const = 0;
-
-protected:
-   /**
-    * This class cannot be constructed or copied, so constructors
-    * destructor and operator = declared as protected
-    */
-   Context();
-	Context(const Context &);
-    Context& operator =(const Context &rContext);
-	virtual ~Context();
-
-   /**
-    *	Flag EOF become true if search is done for current sequence
-    */
-	FLAG(Eof);
-   /**
-    *	Interval of sequence where search is performed
-    */
-   PROPERTY(Interval, SearchRegion);
-   /**
-    *	Position of signal node associated with context
-    */
-	PROPERTY(int, Position);
-   /**
-    *	Length of signal node associated with context
-    */
-	PROPERTY(int, Length);
-};
-
-
-/**
- *	Realization of Context interface for interval operation
- * @see OpInterval
- */
-class ConInterval : public Context
-{
-public:
-	virtual void reset();
-protected:
-	ConInterval();
-	ConInterval(const ConInterval &);
-	virtual ~ConInterval();
-    ConInterval& operator =(const ConInterval &rContext);
-
-   /**
-    *	Sets context of operation argument
-    * @param rContext reference to operation argument context
-    */
-	void setSubContext(Context &rContext);
-   /**
-    * Gets context of operation argument
-    * @return reference to operation argument context
-    */
-	Context& getSubContext() const;
-   virtual bool isSignalPart(int nPos) const;
-   virtual std::string getTSName(int nPos) const;
-   virtual int getDistributionHash() const;
-private:
-   /**
-    *	Pointer to operation argument context
-    */
-   Context *pSubContext;
-
-	friend class OpInterval;
-};
-
-/**
- *	Realization of Context interface for reiteration operation
- * @see OpReiteration
- */
-class ConReiteration : public Context
-{
-	friend class OpReiteration;
-public:
-	virtual void reset();
-	void init(const OpReiteration*);
-protected:
-	ConReiteration();
-	ConReiteration(const ConReiteration&);
-	virtual ~ConReiteration();
-    ConReiteration& operator =(const ConReiteration &rContext);
-
-   /**
-   *	Sets context of operation argument
-   * @param rContext reference to operation argument context
-   */
-   void setSubContext(Context &rContext);
-   /**
-   * Gets context of operation argument
-   * @return reference to operation argument context
-   */
-	Context& getSubContext() const;
-	virtual bool isSignalPart(int nPos) const;
-	virtual std::string getTSName(int nPos) const;
-   virtual int getDistributionHash() const;
-private:
-   /**
-    *	Pointer to operation argument context
-    */
-	Context *pSubContext;
-   /**
-    *	 Context of next reiteration instance
-    */
-   VAR_PROPERTY(ConReiteration*, NextReiterationContext);
-   /**
-    *	 Number of current reiteration
-    */
-	PROPERTY(int, ReiterationNo);
-   /**
-    *	 Found is set to true, if next reiteration was found
-    */
-	FLAG(Found);
-};
-
-/**
-* Realization of Context interface for Distance operation
-* @see OpDistance
-*/
-class ConDistance : public Context
-{
-public:
-	virtual void reset();
-protected:
-	ConDistance();
-	ConDistance(const ConDistance&);
-	virtual ~ConDistance();
-    ConDistance& operator =(const ConDistance &rContext);
-
-   /**
-    * Sets context of first operation argument
-    * @param rContext reference to operation argument context
-    */
-	void setSubContext1(Context &rContext);
-	/**
-    * Gets context of first operation argument
-    * @return reference to first operation argument context
-    */
-   Context& getSubContext1() const;
-   /**
-    * Sets context of second operation argument
-    * @param rContext reference to operation argument context
-    */
-	void setSubContext2(Context &rContext);
-   /**
-    * Gets context of second operation argument
-    * @return reference to second operation argument context
-    */
-	Context& getSubContext2() const;
-	virtual bool isSignalPart(int nPos) const;
-	virtual std::string getTSName(int nPos) const;
-   virtual int getDistributionHash() const;
-private:
-   /**
-    *	Pointer to first operation argument context
-    */
-	Context *pSubContext1;
-   /**
-    *	Pointer to second operation argument context
-    */
-   Context *pSubContext2;
-	FLAG(BOF);
-	PROPERTY(int, I);
-	friend class OpDistance;
-};
-
-/**
-* Realization of Context interface for terminal symbol
-* @see TS
-*/
-class ConTS : public Context
-{
-public:
-	virtual void reset();
-protected:
-	ConTS(std::string name);
-	ConTS(const ConTS&);
-	virtual ~ConTS();
-    ConTS& operator =(const ConTS &rContext);
-	virtual bool isSignalPart(int nPos) const;
-	virtual std::string getTSName(int nPos) const;
-    virtual int getDistributionHash() const;
-
-	friend class TS;
-
-private:
-	std::string name;
-};
-
-};
-
-#endif // CONTEXT_H__INCLUDED_
diff --git a/src/plugins/expert_discovery/src/DDisc/Definitions.cpp b/src/plugins/expert_discovery/src/DDisc/Definitions.cpp
deleted file mode 100644
index 75e99ae..0000000
--- a/src/plugins/expert_discovery/src/DDisc/Definitions.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-#include "definitions.h"
-
-#include <stdarg.h>
-
-#include <strstream>
-#include <stdexcept>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-namespace DDisc {
-
-using namespace std;
-
-/**
- * Converts integer to string
- */
-string to_string(int v) {
-	if (v==PINF || v==MINF) return "UNL";
-	char buffer[MAX_STR_INT];
-	sprintf(buffer,"%d",v);
-	return string(buffer);
-}
-
-/**
-* Converts double to string
-*/
-string to_string(double v) {
-	if (v==PINF || v==MINF) return "UNL";
-	char buffer[MAX_STR_INT];
-	sprintf(buffer,"%f",v);
-	return string(buffer);
-}
-
-string readTAG(istream& in) {
-	char buf[BUF_SIZE];
-	string result;
-	in >> ws;
-	in.clear();
-	if (in.get() != '<' || in.fail()) 
-		throw runtime_error("Invalid file format");
-	do {
-		try {
-			in.clear();
-			in.getline(buf, BUF_SIZE, '>');
-			result += buf;
-		}
-		catch (exception &ex) {	
-			cout << ex.what();
-			exit(0);
-		}
-	} while (in.fail() && !in.eof());
-	return result;
-}
-
-string& to_upper(string &str) {
-	for (unsigned i=0; i<str.length(); i++) str[i] = toupper(str[i]);
-	return str;
-}
-
-bool parse(const char* source, const char* format,...) {
-	va_list marker;
-	va_start(marker, format);
-	strstream s;
-	strstream f;
-	char cs, cf;
-	s << source;
-	f << format;
-	s >> ws;
-	f >> ws;
-	while (s.good() && f.good()) {
-		s.get(cs);
-		f.get(cf);
-		if (!f.good()) continue;
-		if (cf == '%') {
-			s.putback(cs);
-			f.get(cf);
-			switch (cf) {
-			case 'd': { 
-					int &i = *va_arg(marker, int*);
-					s >> i;
-					if (s.fail()) {
-						s.clear();
-						char buf[4];
-						buf[3] = 0;
-						s.read(buf,3);
-						if (strnicmp(buf,"UNL",3)) {
-							va_end(marker);
-							return false;
-						}
-						i = INF;
-					}
-					if (s.eof()) f.putback(f.get());
-				}
-				break;
-			case 's': {
-					char *str = va_arg(marker, char*);
-					f.get(cf);
-					if (f.eof()) cf = ' ';
-					if (isspace(cf)) s >> str;
-					else s.getline(str,BUF_SIZE,cf);
-					if (!f.eof()) {
-						f.putback(cf);
-						s.putback(cf);
-					}
-					s.clear();
-				}
-				break;
-			default: 
-				va_end(marker);
-				return false;
-			}
-		} else
-		if (isspace(cf)) {
-			f >> ws;
-			s >> ws;
-		} else 
-		if (toupper(cf) != toupper(cs)) {
-			va_end(marker);
-			return false;
-		}
-	}
-	va_end(marker);
-	if (!f.eof()) {
-	    return false;
-	}
-	return true;
-}
-
-ostream& writeInt(ostream& out, int v) {
-	if ( v==MINF || v==PINF) out << "UNL";
-	else out << v;
-	return out;
-}
-
-
-bool isValidWord15(const char* strWord) {
-	static const char complementator[26] = {
-	// 'E' = error
-	/* 'A','B','C','D','E','F','G','H','I','J','K','L','M', */
-	   'T','V','G','H','E','E','C','D','E','E','M','E','K',
-	/* 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z   */
-	   'N','E','E','E','Y','S','A','U','B','W','E','R','E'
-	};
-
-	const char *pChar = strWord;
-	while (*pChar) {
-		char ch = toupper(*pChar);
-		if (ch<'A' || ch >'Z' || complementator[ch-'A'] == 'E')
-			return false;
-		pChar++;
-	}
-	return true;
-}
-
-#ifdef __TARGET_UNIX
-char *strupr(char *s) {
-    int length = strlen(s);
-    for (int i=0; i<length; i++) s[i] = toupper(s[i]);
-    return s;
-}
-#endif
-
-};
diff --git a/src/plugins/expert_discovery/src/DDisc/Extractor.cpp b/src/plugins/expert_discovery/src/DDisc/Extractor.cpp
deleted file mode 100644
index d036dcc..0000000
--- a/src/plugins/expert_discovery/src/DDisc/Extractor.cpp
+++ /dev/null
@@ -1,653 +0,0 @@
-#include "Extractor.h"
-#include "Context.h"
-#include "statmath.h"
-#include <assert.h>
-#include <string.h>
-
-using namespace std;
-#define INVALID_VALUE -1
-#define UNDEFINED_VALUE (double) 0xFFFFFFFF
-
-namespace DDisc {
-
-const double EPS	= 0.00000000001;
-const TSNO INVALID_TSNO = {-1,-1};
-
-/////////////////////////////////////////////////////////////////////////
-// Predicat Base
-/////////////////////////////////////////////////////////////////////////
-
-PredicatBase::PredicatBase(const MetaInfoBase &rBase) 
-   : rMIBase(rBase)
-{
-    setPredicatNumber(0);
-}
-
-PredicatBase::~PredicatBase()
-{
-   for (int i=0; i<getPredicatNumber(); i++)
-      delete base[i];
-}
-
-void PredicatBase::create(vector<Operation*>& rPredicates) {
-   base = rPredicates;
-   setPredicatNumber((int)base.size());
-   int family_num = rMIBase.getFamilyNumber();
-   family_size.resize(family_num+1);
-   family_size[0] = 0;
-   for (int i=1; i<family_num+1; i++) {
-      family_size[i] = rMIBase.getSignalFamily(i-1).getSignalNumber() + family_size[i-1];
-   }
-}
-
-Operation *PredicatBase::getPredicat(int i) const
-{
-   return base[i]->Clone();
-}
-
-
-void PredicatBase::getFirstTSNO(TSNO& no) const 
-{
-   no.iFamily = 0;
-   no.iSignal = 0;
-}
-
-TS* PredicatBase::getPrevTS(TSNO& no) const {
-   no.iSignal--;
-   while (no.iSignal<0) {
-      no.iFamily--;
-      if (no.iFamily < 0)
-         break;
-      no.iSignal = rMIBase.getSignalFamily(no.iFamily).getSignalNumber() - 1;
-   }
-   if (no.iFamily < 0) 
-      return NULL;
-
-   const Family& family = rMIBase.getSignalFamily(no.iFamily);
-   int signal_num = family.getSignalNumber();
-   if (no.iSignal >= signal_num)
-      return NULL;
-
-   const MetaInfo& rMI = family.getMetaInfo(no.iSignal);
-   TS *pTS = new TS;
-   pTS->setFromMarking(true);
-   pTS->setFamily(family.getName());
-   pTS->setName(rMI.getName());
-
-   return pTS;
-}
-
-TS* PredicatBase::getNextTS(TSNO& no) const
-{
-   int family_num = rMIBase.getFamilyNumber();
-   if (no.iFamily >= family_num) 
-      return NULL;
-   const Family& family = rMIBase.getSignalFamily(no.iFamily);
-   int signal_num = family.getSignalNumber();
-   if (no.iSignal >= signal_num)
-      return NULL;
-
-   const MetaInfo& rMI = family.getMetaInfo(no.iSignal);
-   TS *pTS = new TS;
-   pTS->setFromMarking(true);
-   pTS->setFamily(family.getName());
-   pTS->setName(rMI.getName());
-
-   no.iSignal++;
-   while (no.iSignal >= signal_num) {
-      no.iFamily++;
-      no.iSignal = 0;
-      if (no.iFamily >= family_num)
-         break;
-      else 
-         signal_num = rMIBase.getSignalFamily(no.iFamily).getSignalNumber();
-   }
-   return pTS;
-}
-
-
-int PredicatBase::getAbsoletePos(const TSNO& no) const
-{
-   return family_size[no.iFamily] + no.iSignal;
-}
-
-int PredicatBase::getTSNumber()
-{
-   return family_size.back();
-}
-
-
-/////////////////////////////////////////////////////////////////////////
-// Signal Extractor
-/////////////////////////////////////////////////////////////////////////
-
-
-Extractor::Extractor(const SequenceBase* pYesBase, 
-                     const SequenceBase* pNoBase, 
-                     PredicatBase* pPredicatBase)
-    : m_pYesBase(pYesBase)
-    , m_pNoBase(pNoBase)
-    , m_pPredicatBase(pPredicatBase)
-    , m_bFirst(true)
-{
-    memset(&m_SP, 0, sizeof(m_SP));
-    setFisherBound(0);
-    setProbabilityBound(0);
-    setInterestFisher(0);
-    setInterestProbability(0);
-    setCoverageBound(0);
-    setMaxComplexity(0);
-    setMinComplexity(0);
-    setMinCorrelationOnPos(0);
-    setMaxCorrelationOnPos(0);
-    setMinCorrelationOnNeg(0);
-    setMaxCorrelationOnNeg(0);
-    setCorrelationImportant(false);
-    setCheckFisherMinimization(false);
-    setStoreOnlyDifferent(false);
-    setUmBound(0);
-    setUmSamplesBound(0);
-    setUmEnabled(false);
-}
-
-Extractor::~Extractor(void)
-{
-   clearInternalData();
-}
-
-bool Extractor::step(Signal **result)
-{
-   Signal* pSignal;
-   *result = NULL;
-   if (m_bFirst) {
-      pSignal = getNextSignal();
-      m_bFirst = false;
-   }
-   else {
-      do {
-         pSignal = getNextSignal(&m_SP);
-      } while (pSignal && alreadyFound(pSignal));
-   }
-   if (pSignal) {
-      if (check(pSignal, &m_SP))
-      {
-         if (!isStoreOnlyDifferent() ||
-            isNewDistribution(m_SP.distribution_hash))
-         {
-            addToFound(pSignal);
-            storeDistribution(m_SP.distribution_hash);
-            pSignal->setPriorParamsDefined(true);
-            pSignal->setPriorProbability(100*m_SP.condition_probability);
-            pSignal->setPriorFisher(m_SP.fisher_criterion);
-            pSignal->setPriorPosCoverage(100*m_SP.coverage);
-            pSignal->setPriorNegCoverage(100*m_SP.neg_coverage);
-            *result = pSignal;
-         }
-      }
-      return true;
-   }
-   else {
-      return false;
-   }
-}
-
-
-double Extractor::progress()
-{
-   double progress;
-
-   if (selection_stack.empty()) {
-      progress = 100;
-   }
-   else {
-      SelectionNode &node = selection_stack.front();
-      progress = 
-         100*(
-         (m_pPredicatBase->getAbsoletePos(node.tsno) -1 + 
-         node.predicat/(1.0*m_pPredicatBase->getPredicatNumber())
-         ) / (1.0*m_pPredicatBase->getTSNumber()));
-   }
-   return progress;
-}
-
-Signal* Extractor::getNextSignal(const SignalParams* prev_res /* = NULL*/)
-{
-   SelectionNode cur;
-
-   if (prev_res == NULL) {
-      clearInternalData();
-      m_pPredicatBase->getFirstTSNO(cur.tsno);
-      cur.structure = m_pPredicatBase->getNextTS(cur.tsno);
-      cur.ts = 0;
-      cur.min_probability = 0;
-      cur.max_fisher = 1;
-      cur.predicat = INVALID_VALUE;
-      cur.predicat_tsno = INVALID_TSNO;
-      signal.attach(cur.structure);
-      selection_stack.push_back(cur);
-      return &signal;
-   }
-   else {
-      assert(!selection_stack.empty());
-      selection_stack.back().min_probability = prev_res->condition_probability;
-      selection_stack.back().max_fisher = prev_res->fisher_criterion;
-   }
-   assert(!selection_stack.empty());
-   if (selection_stack.empty())
-      return NULL;
-   if (needBranchThisNode(prev_res)) {
-      if (!doBranch()) 
-         if (!doNext())
-            return NULL;
-   }
-   else 
-      if (!doNext())
-         return NULL;
-   signal.attach(selection_stack.back().structure);
-   return &signal;
-}
-
-void Extractor::clearInternalData(void)
-{
-   signal.detach();
-   while (!selection_stack.empty()) {
-      delete selection_stack.back().structure;
-      selection_stack.pop_back();
-   }
-}
-
-bool Extractor::doBranch()
-{
-   assert(!selection_stack.empty());
-   SelectionNode& cur = selection_stack.back();
-   TS* pTS = NULL;
-
-   if (cur.predicat == INVALID_VALUE) {
-      cur.predicat = 0;
-      cur.predicat_tsno = INVALID_TSNO;
-   }
-   else {
-      if (cur.predicat_tsno == INVALID_TSNO) {
-         cur.predicat++;
-         cur.predicat_tsno = INVALID_TSNO;
-      }
-      else {
-         pTS = m_pPredicatBase->getNextTS(cur.predicat_tsno);
-         if (pTS == NULL) {
-            cur.predicat++;
-            cur.predicat_tsno = INVALID_TSNO;				
-         }
-      }
-   }
-   if (cur.predicat >= m_pPredicatBase->getPredicatNumber()) {
-      cur.ts++;
-      cur.predicat = 0;
-      cur.predicat_tsno = INVALID_TSNO;		
-   }
-   Operation* predicat = m_pPredicatBase->getPredicat(cur.predicat);
-   SelectionNode new_node;
-   new_node.structure = cur.structure->Clone();
-   new_node.predicat = INVALID_VALUE;
-   new_node.predicat_tsno = INVALID_TSNO;
-   new_node.ts = cur.ts;
-   new_node.tsno = cur.tsno;
-   //new_node.min_probability = 
-
-   switch (predicat->getArgumentNumber()) {
-   case 1: 
-      assert(pTS == NULL);
-      break;
-   case 2: 
-      if (cur.predicat_tsno == INVALID_TSNO) {
-         assert(pTS == NULL);
-         m_pPredicatBase->getFirstTSNO(cur.predicat_tsno);
-         pTS = m_pPredicatBase->getNextTS(cur.predicat_tsno);
-      }
-      if (!pTS) {
-         delete new_node.structure;
-         return false;
-      }
-      predicat->setArgument(pTS, 1);
-      break;
-   default: assert(0);
-   }
-   if (insertPredicat(new_node.structure, new_node.ts, predicat)) {
-      selection_stack.push_back(new_node);
-      return true;
-   }
-   else {
-      delete new_node.structure;
-      delete predicat;
-      return false;
-   }
-}
-
-bool Extractor::insertPredicat(Operation *&structure, int ts, Operation* predicat, int *pId, Operation *pParent)
-{
-   int id=0;
-   if (!pId) pId = &id;
-
-   int arg_num = structure->getArgumentNumber();
-   switch ( arg_num ) {
-   case 0:
-      if (*pId == ts) {
-         predicat->setArgument(structure,0);
-         if (pParent) {
-            int parent_arg_num = pParent->getArgumentNumber();
-            int i;
-            for (i=0;i<parent_arg_num; i++) {
-               if (pParent->getArgument(i) == structure) 
-                  break;
-            }
-            assert( i != parent_arg_num );
-            pParent->setArgument(predicat,i);
-         }
-         else structure = predicat;
-         return true;
-      }
-      (*pId)++;
-      break;
-   case 1: {
-      Operation *pOp = structure->getArgument(0);
-      if (insertPredicat(pOp,ts,predicat,pId,structure)) {
-         return true;
-      }
-      break;
-           }
-   case 2: {
-      Operation *pOp1 = structure->getArgument(0);
-      Operation *pOp2 = structure->getArgument(1);
-      if (insertPredicat(pOp1,ts,predicat,pId,structure) ||
-         insertPredicat(pOp2,ts,predicat,pId,structure)) {
-            return true;
-      }
-      break;
-           }
-   }
-   return false;
-}
-
-bool Extractor::doNext()
-{
-   assert(!selection_stack.empty());
-   signal.detach();
-   SelectionNode cur;
-
-   while (1) {
-      cur = selection_stack.back();
-      if (selection_stack.size() == 1) {
-         delete cur.structure;
-         cur.structure = m_pPredicatBase->getNextTS(cur.tsno);
-         cur.ts = 0;
-         cur.min_probability = 0;
-         cur.max_fisher = 1;
-         cur.predicat = INVALID_VALUE;
-         cur.predicat_tsno = INVALID_TSNO;
-
-         if (!cur.structure) {
-            selection_stack.pop_back();
-            return false;
-         }
-         else {
-            selection_stack.back() = cur;
-            signal.attach(cur.structure);
-            return true;
-         }
-      }
-      else {
-         delete cur.structure;
-         selection_stack.pop_back();
-         if (doBranch()) {
-            signal.attach(selection_stack.back().structure);
-            return true;
-         }
-      }
-   }
-   return false;
-}
-
-bool Extractor::needBranchThisNode(const SignalParams* prev_res) const {
-   if (prev_res->coverage < getCoverageBound())
-	   return false;
-
-   bool prob_inc;
-   bool fish_dec;
-   if (prev_res->condition_probability >= 1) 
-      return false;
-   if (getMaxComplexity() != 0 && (int)selection_stack.size() >= getMaxComplexity())
-      return false;
-   if ((int)selection_stack.size() <= getMinComplexity())
-      return true;
-
-   if (selection_stack.size()>=2) {
-      SelectionStack::const_iterator iter = selection_stack.end();
-      iter--;
-      iter--;
-      prob_inc = (*iter).min_probability < prev_res->condition_probability;
-      if (isCheckFisherMinimization())
-         fish_dec = (*iter).max_fisher > prev_res->fisher_criterion;
-      else 
-         fish_dec = true;
-   }
-   else {
-      prob_inc = true;
-      fish_dec = true;
-   }
-
-   if (!prob_inc ||
-      !fish_dec ||
-      prev_res->condition_probability < getInterestProbability() ||
-      prev_res->fisher_criterion > getInterestFisher()
-      )
-      return false;
-   else 
-      return true;
-}
-
-bool Extractor::check(Signal *pSignal, SignalParams *pSP /* = NULL */)
-{
-	SignalParams& sp = *pSP;
-	int t00 = 0;
-	int t01 = 0;
-	int t10 = 0;
-	int t11 = 0;
-	
-	Context& context = pSignal->createCompartibleContext();
-	bool first;
-	int found_count = 0;
-	sp.distribution_hash = 0;
-
-	for (int i=0; i<m_pYesBase->getSize(); i++) {
-      const Sequence& rSeq = m_pYesBase->getSequence(i);
-      int count = 0;
-      first = true;
-      while (pSignal->find(rSeq, context)) {
-         if (first) {
-            first = false;
-            found_count++;
-         }
-         sp.distribution_hash += i * context.getDistributionHash();
-         count++;
-      }
-      if (!count) t01++;
-      else t11 += count;
-      context.reset();
-   }
-   context.reset();
-
-   sp.coverage = found_count / double(m_pYesBase->getSize());
-   sp.um_criterion = UNDEFINED_VALUE;
-   if (sp.coverage < getCoverageBound()) {
-      sp.condition_probability = 0;
-      sp.fisher_criterion = 1;
-      context.destroy();
-      return false;
-   }
-
-   found_count = 0;
-   for (int i=0; i<m_pNoBase->getSize(); i++) {
-      const Sequence& rSeq = m_pNoBase->getSequence(i);
-      int count = 0;
-      first = true;
-      while (pSignal->find(rSeq, context)) 
-      {
-         if (first) {
-            first = false;
-            found_count++;
-         }
-         count++;
-         sp.distribution_hash += i * context.getDistributionHash();
-      }
-      if (!count) t00++;
-      else t10 += count;
-      context.reset();
-   }
-   context.destroy();
-   sp.neg_coverage = found_count / double(m_pNoBase->getSize());
-
-   double total_found = t10 + t11;
-   if (total_found) sp.condition_probability = t11 / total_found;
-   else sp.condition_probability = 0;
-	
-	sp.fisher_criterion = fisher(t00, t01, t10, t11);
-
-   bool prob_inc;
-   bool fish_dec;
-   if (selection_stack.size() >= 2 &&
-      (int) selection_stack.size() > getMinComplexity()) {
-         SelectionStack::const_iterator iter = selection_stack.end();
-         iter--;
-         iter--;
-         prob_inc = (*iter).min_probability < sp.condition_probability;
-         if (isCheckFisherMinimization())
-            fish_dec = (*iter).max_fisher > sp.fisher_criterion;
-         else 
-            fish_dec = true;
-   }
-   else {
-      prob_inc = true;
-      fish_dec = true;
-   }
-
-   if (prob_inc &&
-      fish_dec &&
-      sp.condition_probability - getProbabilityBound() >= -EPS &&
-      sp.fisher_criterion - getFisherBound() <= EPS)
-   {
-      if (isUmEnabled() && t00 + t01 + t10 + t11 >= getUmSamplesBound()) {
-			sp.um_criterion = ul(t00, t01, t10, t11);
-			if (sp.um_criterion <= getUmBound())
-				return false;
-      }
-
-      if (isCorrelationImportant())	
-         return checkCorrelation(pSignal->getSignal());
-      else
-         return true;
-   }
-   else
-   {
-      return false;
-   }
-}
-
-bool Extractor::checkCorrelation(Operation *pOp) {
-   assert(pOp != NULL);
-   if (pOp->getType() == OP_DISTANCE) {
-      int sp[2][2] = {{0,0},{0,0}}; // positive statistics
-      int sn[2][2] = {{0,0},{0,0}}; // negative statistics
-
-      Signal s1(pOp->getArgument(0));
-      Signal s2(pOp->getArgument(1));
-      Context& con1 = s1.createCompartibleContext();
-      Context& con2 = s2.createCompartibleContext();
-
-      int bs1, bs2;
-
-      for (int i=0; i<m_pYesBase->getSize(); i++) {
-         const Sequence& rSeq = m_pYesBase->getSequence(i);
-
-         if (s1.find(rSeq, con1)) bs1 = 1;
-         else bs1 = 0;
-         if (s2.find(rSeq, con2)) bs2 = 1;
-         else bs2 = 0;
-
-         sp[bs1][bs2]++;
-         con1.reset();
-         con2.reset();
-      }
-
-      double CorrelationOnPositive = corelation(sp[0][0], sp[0][1], sp[1][0], sp[1][1]);
-
-      if (CorrelationOnPositive == CORELATION_UNDEFINED ||
-         CorrelationOnPositive <= getMinCorrelationOnPos() ||
-         CorrelationOnPositive >= getMaxCorrelationOnPos()) 
-      {
-         con1.destroy();
-         con2.destroy();
-         s1.detach();
-         s2.detach();
-         return false;
-      }
-
-      for (int i=0; i<m_pNoBase->getSize(); i++) {
-         const Sequence& rSeq = m_pNoBase->getSequence(i);
-
-         if (s1.find(rSeq, con1)) bs1 = 1;
-         else bs1 = 0;
-         if (s2.find(rSeq, con2)) bs2 = 1;
-         else bs2 = 0;
-
-         sn[bs1][bs2]++;
-         con1.reset();
-         con2.reset();
-      }
-
-      con1.destroy();
-      con2.destroy();
-      s1.detach();
-      s2.detach();
-
-      double CorrelationOnNegative = corelation(sn[0][0], sn[0][1], sn[1][0], sn[1][1]);
-
-      if (CorrelationOnNegative == CORELATION_UNDEFINED ||
-         CorrelationOnNegative <= getMinCorrelationOnNeg() ||
-         CorrelationOnNegative >= getMaxCorrelationOnNeg()) 
-      {
-         return false;
-      }
-   }
-
-   int arg_num = pOp->getArgumentNumber();
-   if (arg_num == 0) return true;
-   else {
-      for (int i=0; i<arg_num;i++)
-         if(!checkCorrelation(pOp->getArgument(i)))
-            return false;
-   }
-   return true;
-}
-
-bool Extractor::alreadyFound(Signal *pSignal) const
-{
-   int hash = pSignal->getHash();
-   return m_AlreadyFound.find(hash) != m_AlreadyFound.end();
-}
-
-void Extractor::addToFound(Signal *pSignal)
-{
-   m_AlreadyFound.insert(pSignal->getHash());
-}
-
-bool Extractor::isNewDistribution(int distribution_hash) const
-{
-   return m_DistributionHash.find(distribution_hash) == m_DistributionHash.end();
-}
-
-void Extractor::storeDistribution(int distribution_hash)
-{
-   m_DistributionHash.insert(distribution_hash);
-}
-
-
-}
diff --git a/src/plugins/expert_discovery/src/DDisc/Extractor.h b/src/plugins/expert_discovery/src/DDisc/Extractor.h
deleted file mode 100644
index 13fb4b0..0000000
--- a/src/plugins/expert_discovery/src/DDisc/Extractor.h
+++ /dev/null
@@ -1,129 +0,0 @@
-#ifndef _EXTRACTOR_H
-#define _EXTRACTOR_H
-#include "definitions.h"
-
-#include "MetaInfo.h"
-#include "Signal.h"
-#include "Sequence.h"
-
-#include <istream>
-#include <vector>
-#include <list>
-#include <set>
-
-namespace DDisc {
-
-struct SignalParams;
-
-struct TSNO {
-   int iFamily;
-   int iSignal;
-   inline bool operator ==(const TSNO& tsno) {
-      return (iFamily ==tsno.iFamily && iSignal==tsno.iSignal);
-   }
-};
-
-
-class PredicatBase
-{
-public:
-   PredicatBase(const MetaInfoBase &rBase);
-   ~PredicatBase();
-   void create(vector<Operation*>& rPredicates);
-   Operation *getPredicat(int i) const;
-   void getFirstTSNO(TSNO& no) const;
-   TS* getNextTS(TSNO& no) const;
-   TS* getPrevTS(TSNO& no) const;
-   int getAbsoletePos(const TSNO& no) const;
-   int getTSNumber();
-private:
-   vector<int> family_size;
-   vector<Operation*> base;
-   const MetaInfoBase &rMIBase;
-
-   PROPERTY(int, PredicatNumber);
-};
-
-
-typedef vector<bool> Optimizer;
-
-struct SelectionNode {
-   Operation *structure;
-   int ts;
-   TSNO tsno;
-   int predicat;
-   TSNO predicat_tsno;
-   double min_probability;
-   double max_fisher;
-};
-
-struct SignalParams {
-   double condition_probability;
-   double fisher_criterion;
-   double coverage;
-   double neg_coverage;
-   int distribution_hash;
-   double um_criterion;
-};
-
-typedef list<SelectionNode> SelectionStack;
-
-class Extractor
-{
-public:
-   Extractor(const SequenceBase* pYesBase, 
-             const SequenceBase* pNoBase, 
-             PredicatBase* pPredicatBase);
-   ~Extractor(void);
-   double progress();
-   bool step(Signal **result);
-
-protected:
-   bool check(Signal *pSignal, SignalParams *pSP);
-
-   Signal* getNextSignal(const SignalParams* prev_res = NULL);
-   void clearInternalData(void);
-   bool needBranchThisNode(const SignalParams* prev_res) const;
-   bool doBranch();
-   bool doNext();
-   bool insertPredicat(Operation *&structure, int ts, Operation* predicat, int *pId = 0, Operation *pParent = 0);
-   bool checkCorrelation(Operation *pOp);
-   bool alreadyFound(Signal *pSignal) const;
-   void addToFound(Signal *pSignal);
-   bool isNewDistribution(int distribution_hash) const;
-   void storeDistribution(int distribution_hash);
-
-private:
-   bool m_bFirst;
-   Signal signal;
-   SelectionStack selection_stack;
-   SignalParams m_SP;
-
-   const SequenceBase* m_pYesBase;
-   const SequenceBase* m_pNoBase;
-   PredicatBase* m_pPredicatBase;
-   set<int> m_AlreadyFound;
-   set<int> m_DistributionHash;
-
-   PROPERTY(double, FisherBound);
-   PROPERTY(double, ProbabilityBound);
-   PROPERTY(double, InterestFisher);
-   PROPERTY(double, InterestProbability);
-   PROPERTY(double, CoverageBound);
-   PROPERTY(int, MaxComplexity);
-   PROPERTY(int, MinComplexity);
-   PROPERTY(double, MinCorrelationOnPos);
-   PROPERTY(double, MaxCorrelationOnPos);
-   PROPERTY(double, MinCorrelationOnNeg);
-   PROPERTY(double, MaxCorrelationOnNeg);
-   MODIFIABLE_FLAG( CorrelationImportant );
-   MODIFIABLE_FLAG( CheckFisherMinimization );
-   MODIFIABLE_FLAG( StoreOnlyDifferent );
-   PROPERTY(double, UmBound);
-   PROPERTY(int, UmSamplesBound);
-   MODIFIABLE_FLAG( UmEnabled);
-};
-
-}
-
-#endif // _EXTRACTOR_H
diff --git a/src/plugins/expert_discovery/src/DDisc/MetaInfo.cpp b/src/plugins/expert_discovery/src/DDisc/MetaInfo.cpp
deleted file mode 100644
index e477e8a..0000000
--- a/src/plugins/expert_discovery/src/DDisc/MetaInfo.cpp
+++ /dev/null
@@ -1,251 +0,0 @@
-#include "MetaInfo.h"
-#include <stdexcept>
-#include <string.h>
-using namespace std;
-
-namespace DDisc {
-
-//////////////////////////////////////////////////////////////////////
-// MetaInfo: �������������� � ������� �� ��������
-//////////////////////////////////////////////////////////////////////
-
-MetaInfo::MetaInfo(void)
-{
-
-}
-
-MetaInfo::~MetaInfo(void)
-{
-
-}
-
-MetaInfo::MetaInfo(const MetaInfo& mi)
-{
-	*this = mi;
-}
-
-const MetaInfo& MetaInfo::operator =(const MetaInfo& mi)
-{
-	setNo(mi.getNo());
-	setName(mi.getName());
-	setMethodName(mi.getMethodName());
-	return *this;
-}
-
-istream& MetaInfo::load(istream& in)
-{
-	char buf[BUF_SIZE];
-	in >> ws;
-	string eof = "</";
-	string s = readTAG(in);
-	eof += to_upper(s);
-	eof += ">";
-	int no;
-	if (!parse(eof.c_str(),"</SIGNAL %d>", &no)) throw runtime_error("Invalid file format");
-	setNo(no);
-	in >> ws;
-	in.getline(buf, BUF_SIZE);
-	string loaded = strupr(buf);
-	if (!parse(loaded.c_str(),"NAME %s", buf)) throw runtime_error("Invalid file format");
-	if (!strlen(buf)) throw runtime_error("Invalid file format");
-	setName(buf);
-
-	in >> ws;
-	in.getline(buf, BUF_SIZE);
-	loaded = strupr(buf);
-	if (!parse(loaded.c_str(),"METHOD_NAME %s", buf)) 
-		throw runtime_error("Invalid file format");
-	if (!strlen(buf)) throw runtime_error("Invalid file format");
-	setMethodName(buf);
-	bool err;
-	do {
-		in >> ws;
-		in.getline(buf, BUF_SIZE);
-		err = (strnicmp(buf, eof.c_str(), eof.length())!=0);
-	} while (err && !in.eof());
-	if (err) throw runtime_error("Invalid file format");
-	return in;
-}
-
-ostream& MetaInfo::save(ostream& out) const
-{
-	runtime_error("MetaInfo::save() not implemented");
-	return out;
-}
-
-//////////////////////////////////////////////////////////////////////
-// Family: ��������� ��������, �������� ���������������
-//////////////////////////////////////////////////////////////////////
-
-Family::Family(void)
-{
-
-}
-
-Family::~Family(void)
-{
-
-}
-
-Family::Family(const Family& family)
-{
-	*this = family;
-}
-
-const Family& Family::operator =(const Family& family)
-{
-	setName( family.getName() );
-	data = family.data;
-	return *this;
-}
-
-istream& Family::load(istream& in)
-{
-	char buf[BUF_SIZE];
-	string s = readTAG(in);
-	string name = to_upper(s);	
-	setName(name);
-	in >> ws;
-	in.getline(buf, BUF_SIZE);
-	if (in.fail()) throw runtime_error("Invalid file format");
-	int signumber;
-	if (!parse(strupr(buf),"SIGNAL_NUMBER %d", &signumber))
-		throw runtime_error("Invalid file format");
-	MetaInfo metainfo;
-	while (signumber--) {
-		metainfo.load(in);
-		data.push_back(metainfo);
-		in >> ws;
-	}
-	in >> ws;
-	in.getline(buf, BUF_SIZE);
-	if (in.fail()) throw runtime_error("Invalid file format");
-	string eof = "</" + name + ">";
-	if (strnicmp(buf, eof.c_str(), eof.length())) throw runtime_error("Invalid file format");
-	return in;
-}
-
-ostream& Family::save(ostream& out) const
-{
-	runtime_error("Family::save() not implemented");
-	return out;
-}
-
-const MetaInfo& Family::getMetaInfo(int no) const
-{
-	return data[no];
-}
-
-const MetaInfo& Family::getMetaInfo(const string name) const
-{
-	int nSize = (int) data.size();
-	for (int i=0; i<nSize; i++)
-	{
-		if (data[i].getName() == name)
-			return data[i];
-	}
-	throw range_error("No such meta info");
-}
-
-MetaInfo& Family::getMetaInfo(int no)
-{
-	return data[no];
-}
-
-int Family::getSignalNumber() const
-{
-	return (int) data.size();
-}	
-
-void Family::AddInfo(const MetaInfo& info)
-{
-	data.push_back(info);
-}
-
-//////////////////////////////////////////////////////////////////////
-// MetaInfoBase: ���� ��������������, ���������� ���������� � ���� ����������
-//////////////////////////////////////////////////////////////////////
-
-MetaInfoBase::MetaInfoBase(void)
-{
-
-}
-
-MetaInfoBase::~MetaInfoBase(void)
-{
-
-}
-
-void MetaInfoBase::clear()
-{
-	data.clear();
-}
-
-istream& MetaInfoBase::load(istream& in)
-{
-	data.clear();
-	in >> ws;
-	while (!in.eof()) {
-		Family family;
-		family.load(in);
-		data.push_back(family);
-		in >> ws;
-	}
-	return in;
-}
-
-ostream& MetaInfoBase::save(ostream& out) const
-{
-	throw runtime_error("MetaInfoBase::save() not implemented");
-	return out;
-}
-
-const Family& MetaInfoBase::getSignalFamily(int no) const
-{
-	return data[no];
-}
-
-Family& MetaInfoBase::getSignalFamily(int no)
-{
-	return data[no];
-}
-
-void MetaInfoBase::addFamily(const Family& rFamily)
-{
-	data.push_back(rFamily);
-}
-
-const Family& MetaInfoBase::getSignalFamily(const string name) const
-{
-	for (unsigned i=0; i<data.size(); i++) 
-		if ( stricmp(name.c_str(),data[i].getName().c_str()) == 0 ) 
-			return data[i];
-	throw range_error("No such family");
-}
-
-int MetaInfoBase::getFamilyNumber() const
-{
-	return static_cast<int>(data.size());
-}
-
-void MetaInfoBase::insert(const char* family, MetaInfo& mi)
-{
-   try {
-      Family& f = const_cast<Family&>(getSignalFamily(family));
-      try { f.getMetaInfo(mi.getName()); }
-      catch (...) {
-         f.AddInfo(mi);
-      }
-   }
-   catch (...) {
-      Family f;
-      f.AddInfo(mi);
-      f.setName(family);
-      addFamily(f);
-   }
-}
-
-
-};
-
-
diff --git a/src/plugins/expert_discovery/src/DDisc/MetaInfo.h b/src/plugins/expert_discovery/src/DDisc/MetaInfo.h
deleted file mode 100644
index d324863..0000000
--- a/src/plugins/expert_discovery/src/DDisc/MetaInfo.h
+++ /dev/null
@@ -1,164 +0,0 @@
-#if !defined(META_INFO_H__INCLUDED_)
-#define      META_INFO_H__INCLUDED_
-
-#include "definitions.h"
-#include <vector>
-#include <iostream>
-using namespace std;
-
-namespace DDisc {
-
-/**
- * This class contains description about elementary signal from marking (also
- * known as terminal symbol).
- */
-class MetaInfo
-{
-public:
-	MetaInfo(void);
-	MetaInfo(const MetaInfo&);
-	const MetaInfo& operator =(const MetaInfo&);
-	virtual ~MetaInfo(void);
-   /**
-    * Deserialize class from stream
-    */
-	virtual std::istream& load(std::istream& in);
-   /**
-   * Serialize class from stream
-   */
-	virtual std::ostream& save(std::ostream& out) const;
-
-	PROPERTY(int, No);
-   /**
-    * Name of item
-    */
-   PROPERTY(string, Name);
-   /**
-    * Method, used to find this item
-    */
-	PROPERTY(string, MethodName);
-};
-
-/**
- * Family of elementary signals from marking
- */
-class Family
-{
-public:
-	Family();
-	Family(const Family&);
-	const Family& operator =(const Family&);
-	virtual ~Family();
-   /**
-    * Deserialize class from stream
-    */
-   virtual std::istream& load(std::istream& in);
-   /**
-    * Serialize class from stream
-    */
-	virtual std::ostream& save(std::ostream& out) const;
-   /**
-    * Extracts particular signal information from family
-    * @param no number of elementary signal to extract
-    * @return elementary signal information 
-    * @see MetaInfo
-    */
-   const MetaInfo& getMetaInfo(int no) const;
-   /**
-    * Extracts particular signal information from family (const version)
-    * @param no number of elementary signal to extract
-    * @return elementary signal information 
-    * @see MetaInfo
-    */
-	MetaInfo& getMetaInfo(int no);
-   /**
-    * Extracts particular signal information from family
-    * @param name name of elementary signal to extract
-    * @return elementary signal information 
-    * @see MetaInfo
-    */
-	const MetaInfo& getMetaInfo(const string name) const;
-   /**
-    * @return number of signals in family
-    */
-	int getSignalNumber() const; 
-   /**
-    * Add signal information to family
-    */
-	void AddInfo(const MetaInfo& info);
-private:
-	typedef vector<MetaInfo> Data;
-	Data data;
-   /**
-    * Name of the family
-    */
-	PROPERTY(string, Name);
-};
-
-/**
- * Elementary signal description database
- */
-class MetaInfoBase
-{
-public:
-	MetaInfoBase();
-	virtual ~MetaInfoBase();
-   /**
-   * Deserialize class from stream
-   */
-   virtual std::istream& load(std::istream& in);
-   /**
-   * Serialize class from stream
-   */
-	virtual std::ostream& save(std::ostream& out) const;
-   /**
-    * Extracts particular family from DB
-    * @param no number of family to extract
-    * @return signal family
-    * @see Family
-    */
-	const Family& getSignalFamily(int no) const;
-   /**
-   * Extracts particular family from DB (const version)
-   * @param no number of family to extract
-   * @return signal family
-   * @see Family
-   */
-	Family& getSignalFamily(int no);
-   /**
-    * Extracts particular family from DB
-    * @param name name of family to extract
-    * @return signal family
-    * @see Family
-    */
-	const Family& getSignalFamily(const string name) const;
-   /**
-    * @return number of families in DB
-    */
-	int getFamilyNumber() const;
-   /**
-    * Clears database
-    */
-	void clear();
-   /**
-    * Adds family to DB
-    */
-	void addFamily(const Family& rFamily);
-   /**
-    * inserts signal to family
-    * @param family name of family
-    * @param mi signal information to insert
-    */
-   void insert(const char* family, MetaInfo& mi);
-private:
-	MetaInfoBase(const MetaInfoBase&);
-	const MetaInfoBase& operator =(const MetaInfoBase&);
-	typedef vector<Family> Data;
-	Data data;
-};
-
-};
-
-
-#endif // META_INFO_H__INCLUDED_
-
diff --git a/src/plugins/expert_discovery/src/DDisc/Sequence.cpp b/src/plugins/expert_discovery/src/DDisc/Sequence.cpp
deleted file mode 100644
index b4f452b..0000000
--- a/src/plugins/expert_discovery/src/DDisc/Sequence.cpp
+++ /dev/null
@@ -1,402 +0,0 @@
-// Sequence.cpp: implementation of the Sequence class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "Sequence.h"
-#include <stdexcept>
-#include <algorithm>
-#include <string.h>
-using namespace std;
-
-namespace DDisc {
-
-//////////////////////////////////////////////////////////////////////
-// Marking: �������� ���������� ������������������
-//////////////////////////////////////////////////////////////////////
-
-Marking::Marking()
-{
-
-}
-
-Marking::~Marking()
-{
-
-}
-
-Marking::Marking(const Marking& m)
-{
-        *this = m;
-}
-
-const Marking& Marking::operator = (const Marking& m)
-{
-        marking = m.marking;
-        return *this;
-}
-
-
-bool Marking::Comparator::operator ()(const Interval& a, const Interval& b) const {
-        if (a.getFrom()<b.getFrom()) return true;
-        else 
-        if (a.getFrom()>b.getFrom()) return false;
-        else 
-        if (a.getTo()<b.getTo()) return true;
-        else return false;
-}
-
-Interval Marking::hasSignalAt(Interval interval, string name, string family) const
-{
-    to_upper(name);
-    to_upper(family);
-
-	if(marking.empty() || marking.count(family) == 0){
-		return Interval();
-	}
-	MarkingData::const_iterator family_pos = marking.find(family);
-	if (family_pos==marking.end()) return Interval();
-	const FamilyMarking& family_marking = family_pos->second;
-	FamilyMarking::const_iterator signal_pos = family_marking.find(name);
-	if (signal_pos == family_marking.end()) return Interval();
-	const IntervalSet& set = signal_pos->second;
-
-	IntervalSet::const_iterator iter = set.begin();
-	while (iter != set.end()) {
-		const Interval& sig = *iter;
-		if (interval.isInInterval(sig.getFrom()) && interval.isInInterval(sig.getTo()))
-			return sig;
-		iter++;
-	}
-	return Interval();
-}
-
-void Marking::clear()
-{
-        marking.clear();
-}
-
-void Marking::set(string name, string family, Interval interval)
-{
-	to_upper(name);
-	to_upper(family);
-	IntervalSet& set = marking[family][name];
-	set.insert(interval);
-}
-
-
-//////////////////////////////////////////////////////////////////////
-// Sequence: ���������� ������������������
-//////////////////////////////////////////////////////////////////////
-
-Sequence::Sequence()
-{
-	pMarking = NULL;
-	setHasScore(false);
-	setScore(0);
-}
-
-Sequence::~Sequence()
-{
-
-}
-
-Sequence::Sequence(const Sequence& seq)
-{
-        *this = seq;
-}
-
-Sequence::Sequence (const string & name, const string& seq){
-	setName(name);
-	setSequence(seq);
-}
-
-const Sequence& Sequence::operator = (const Sequence& seq)
-{
-        setName(seq.getName());
-        setSequence(seq.getSequence());
-		setHasScore(seq.isHasScore());
-		setScore(seq.getScore());
-        pMarking = seq.pMarking;
-        return *this;
-}
-
-Marking& Sequence::getSequenceMarking()
-{
-	if (!pMarking) throw runtime_error("No marking for this sequence");
-	return *const_cast<Marking*>(pMarking);
-}
-
-const Marking& Sequence::getSequenceMarking() const 
-{
-   if (!pMarking) throw runtime_error("No marking for this sequence");
-   return *pMarking;
-}
-
-void Sequence::setSequenceMarking(const Marking& rMarking)
-{
-	pMarking = &rMarking;
-}
-
-istream& Sequence::load(istream& in)
-{
-        char buf[BUF_SIZE];
-        in >> ws;
-        if (in.get() != '>' || in.fail()) throw runtime_error("Invalid file format");
-        in >> ws;
-        in.getline(buf,BUF_SIZE);
-        int end = strlen(buf) - 1;
-        while (end>=0 &&isspace(buf[end])) {
-           buf[end] = 0;
-           end--;
-        }
-        if (end == 0) throw runtime_error("Invalid file format");
-
-        setName(buf);
-        setSequence("");
-        do {
-                in.clear();
-                in.getline(buf,BUF_SIZE,'>');
-                char *token = strtok(buf, " \n\t");
-                while (token) {
-                        setSequence( getSequence() + strupr(token) );
-                        token = strtok(NULL, " \n\t");
-                }
-        } while (in.fail() && !in.eof());
-        if (!in.eof()) in.putback('>');
-        return in;
-}
-
-ostream& Sequence::save(ostream& out) const
-{
-        out << "> " << getName().c_str() << endl;
-        out << getSequence().c_str() << endl;
-        return out;
-}
-
-size_t Sequence::getSize() const
-{
-	return getSequence().size();
-}
-
-void DDisc::Sequence::clearMarking(void)
-{
-	pMarking = NULL;
-}
-
-//////////////////////////////////////////////////////////////////////
-// MarkingBase: ���� �������� ���������� ��������������������
-//////////////////////////////////////////////////////////////////////
-
-MarkingBase::MarkingBase()
-{
-
-}
-
-MarkingBase::~MarkingBase()
-{
-
-}
-
-const Marking& MarkingBase::getMarking(int objno) const
-{
-   Data::const_iterator i = data.find(objno);
-   if (i == data.end()) throw range_error("No marking for this index");
-   return i->second;
-}
-
-void MarkingBase::clear()
-{
-   data.clear();
-}
-
-Marking& MarkingBase::getMarking(int objno)
-{
-   Data::iterator i = data.find(objno);
-   if (i == data.end()) throw range_error("No marking for this index");
-   return i->second;
-}
-
-void MarkingBase::setMarking(int objno, const Marking& rMrk)
-{
-	data[objno] =  rMrk;
-}
-
-istream& MarkingBase::load(istream& in)
-{
-	data.clear();
-    in >> ws;
-    while (!in.eof()) {
-            string s = readTAG(in);
-            string family = to_upper(s);
-            string family_eof = "/" + family;
-            string object;
-            s = readTAG(in);
-            object = to_upper(s);
-            while (strnicmp(object.c_str(), family_eof.c_str(), family_eof.length())!=0) {
-                    int objno;
-                    if (!parse(object.c_str(),"OBJECT %d",&objno)) 
-                            runtime_error("Invalid file format");
-                    objno--;
-                    string object_eof = "</" + object + ">";
-                    char item[BUF_SIZE];
-                    in >> ws;
-                    in.clear();
-                    in.getline(item, BUF_SIZE);
-                    while (strnicmp(item, object_eof.c_str(), object_eof.length())!=0) {
-                            int from, to;
-                            char name[BUF_SIZE];
-                            strupr(item);
-                            if (!parse(item,"%d..%d %s ", &from, &to, &name[0]))
-							{
-                                    throw runtime_error("Invalid file format");
-                            }       
-                            strupr(name);
-                            data[objno].set(name, family, Interval(from-1, to-1));
-                            in >> ws;
-                            in.clear();
-                            in.getline(item, BUF_SIZE);
-                    }
-                    in >> ws;
-                    s = readTAG(in);
-                    object = to_upper(s);
-            }
-            in >> ws;
-            if (in.eof()) continue;
-            s = readTAG(in);
-            object = to_upper(s);
-    }
-    return in;
-}
-
-ostream& MarkingBase::save(ostream& out) const
-{
-        throw logic_error("Marking::save() not implemented");
-        return out;
-}
-
-//////////////////////////////////////////////////////////////////////
-// SequenceBase: ���� ���������� ��������������������
-//////////////////////////////////////////////////////////////////////
-
-SequenceBase::SequenceBase()
-{
-
-}
-
-SequenceBase::~SequenceBase()
-{
-
-}
-
-void SequenceBase::setMarking(const MarkingBase& rBase)
-{
-   for (int i=0; i<getSize(); i++) {
-      try {
-         data[i].setSequenceMarking( rBase.getMarking(i) );
-      }
-      catch (range_error) {
-         data[i].clearMarking();
-      }
-   }
-}
-
-void SequenceBase::clearMarking(void)
-{
-   for (int i=0; i<getSize(); i++)
-      data[i].clearMarking();
-}
-
-
-const Sequence& SequenceBase::getSequence(int objno) const
-{
-        return data[objno];
-}
-
-int SequenceBase::getSize() const
-{
-        return static_cast<int>(data.size());
-}
-
-void SequenceBase::clear()
-{
-	data.clear();
-}
-
-void SequenceBase::clearScores()
-{
-	for (int i=0; i<(int)data.size(); i++)
-	{
-		data[i].setHasScore(false);
-		data[i].setScore(0);
-	}
-}
-
-istream& SequenceBase::load(istream& in)
-{
-  data.clear();
-  in.clear();
-  Sequence seq;
-  do {
-    seq.load(in);
-    data.push_back(seq);
-  } while (!in.eof());
-  return in;
-}
-
-ostream& SequenceBase::save(ostream& out) const
-{
-        for (unsigned i=0; i<data.size(); i++) {
-                data[i].save(out);
-        }
-        return out;
-}
-
-Sequence& SequenceBase::getSequence(int objno)
-{
-	return data[objno];
-}
-
-int SequenceBase::addSequence(const Sequence& rSeq)
-{
-	data.push_back(rSeq);
-   return (int)data.size() - 1;
-}
-
-vector<double> SequenceBase::getScores()
-{
-	int nSize = getSize();
-	vector<double> vScores;
-	vScores.resize(nSize);
-	for (int i=0; i<nSize; i++)
-	{
-		Sequence& rSeq = getSequence(i);
-		if (rSeq.isHasScore())
-		{
-			vScores[i] = rSeq.getScore();
-		}
-		else
-		{
-			vScores[i] = 0;
-		}
-	}
-	return vScores;
-}
-
-int SequenceBase::findSequence(std::string code)
-{
-   for (int i=0; i<(int)data.size(); i++)
-      if (data[i].getSequence() == code)
-         return i;
-   return -1;
-}
-
-int SequenceBase::getObjNo(const char* strId) const
-{
-   for (int i=0; i<(int)data.size(); i++)
-      if (stricmp(data[i].getName().c_str(), strId) == 0)
-         return i;
-   return -1;
-}
-
-
-};
diff --git a/src/plugins/expert_discovery/src/DDisc/Sequence.h b/src/plugins/expert_discovery/src/DDisc/Sequence.h
deleted file mode 100644
index f17134f..0000000
--- a/src/plugins/expert_discovery/src/DDisc/Sequence.h
+++ /dev/null
@@ -1,243 +0,0 @@
-// Sequence.h: interface for the Sequence class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(SEQUENCE_H__INCLUDED_)
-#define      SEQUENCE_H__INCLUDED_
-
-#include "definitions.h"
-#include <map>
-#include <list>
-#include <set>
-#include <vector>
-
-namespace DDisc {
-/**
- * Sequence marking. This class contains positions of 
- * particular signal on particular sequence.
- */
-class Marking 
-{
-public:
-	Marking();
-	virtual ~Marking();
-   /**
-    * Checks if sequence in region has signal name from family.
-    * @return location of signal if sequence has, Interval() if no.
-    */
-	Interval hasSignalAt(Interval region, std::string name, std::string family) const;
-   /**
-    * Add position of signal to the marking.
-    * @param name name of the signal
-    * @param family family of the signal
-    * @param interval region where signal is located
-    */
-	void set(std::string name, std::string family, Interval interval);
-   /**
-    * Clears sequence marking
-    */
-	void clear();
-
-   std::set<std::string> getFamilies() {
-      std::set<std::string> result;
-      MarkingData::iterator i = marking.begin();
-      while (i != marking.end()) {
-         result.insert(i->first);
-         i++;
-      }
-      return result;
-   }
-
-   std::set<std::string> getSignals(std::string family) {
-      std::set<std::string> result;
-      const FamilyMarking& familyMrk = marking[family];
-      FamilyMarking::const_iterator i = familyMrk.begin();
-      while (i != familyMrk.end()) {
-         result.insert(i->first);
-         i++;
-      }
-      return result;
-   }
-
-   Marking(const Marking&);
-	const Marking& operator = (const Marking&);
-
-	struct Comparator
-	{
-		bool operator()(const Interval& _Left, const Interval& _Right) const;
-	};
-	typedef std::set<Interval, Comparator> IntervalSet;
-	typedef std::map<std::string, IntervalSet> FamilyMarking;
-	typedef std::map<std::string, FamilyMarking> MarkingData;
-	MarkingData marking;
-};
-
-/**
- * Class representing genome sequence
- */
-class Sequence  
-{
-public:
-	Sequence();
-   Sequence(const Sequence&);
-   Sequence (const std::string& name, const std::string& seq);
-   const Sequence& operator = (const Sequence&);
-	virtual ~Sequence();
-
-   /**
-   * Deserialize class from stream
-   */
-   virtual std::istream& load(std::istream& in);
-   /**
-   * Serialize class from stream
-   */
-   virtual std::ostream& save(std::ostream& out) const;
-   /**
-    * @return marking of sequence
-    */
-   Marking &getSequenceMarking();
-   /**
-    * @return marking of sequence (const version)
-    */
-	const Marking &getSequenceMarking() const;
-   /**
-    * Sets marking for sequence
-    */
-	void setSequenceMarking(const Marking&);
-   /**
-    * Clears marking
-    */
-	void clearMarking(void);
-   /**
-    * @return number of signals in marking
-    */
-	size_t getSize() const;
-
-private:
-   /**
-    * Name of sequence
-    */
-	PROPERTY(std::string, Name);
-   /**
-    * Code of sequence
-    */
-   PROPERTY(std::string, Sequence);
-   /**
-    * True if sequence score setup
-    */
-	MODIFIABLE_FLAG( HasScore );
-   /**
-    * Sequence score
-    */
-	PROPERTY(double, Score);
-   /**
-    * Pointer to sequence marking
-    */
-	const Marking* pMarking;
-};
-
-/**
- * Marking database
- */
-class MarkingBase
-{
-public:
-	MarkingBase();
-	virtual ~MarkingBase();
-   /**
-    * @return marking number objno
-    */
-	const Marking& getMarking(int objno) const;
-   /**
-    * @return marking number objno
-    */
-   Marking& getMarking(int objno);
-   /**
-    * Set marking number objno equal to mrk
-    */
-	void setMarking(int objno, const Marking& mrk);
-   /**
-   * Deserialize class from stream
-   */
-   virtual std::istream& load(std::istream& in);
-   /**
-   * Serialize class from stream
-   */
-   virtual std::ostream& save(std::ostream& out) const;
-   /**
-    * Clears DB
-    */
-	void clear();
-   /**
-    * @return size of internal map
-    * @deprecated
-    */
-   //int getSize() { return static_cast<int>(data.size()); }
-private:
-   typedef std::map<int, Marking> Data;
-	Data data;
-};
-
-/**
- * Class representing set of sequences
- */
-class SequenceBase
-{
-public:
-	SequenceBase();
-	virtual ~SequenceBase();
-   /**
-    * Set corresponding marking DB
-    */
-	void setMarking(const MarkingBase& rBase);
-   /**
-   * Clears marking
-   */
-   void clearMarking(void);
-   /**
-    * @return Sequence number objno
-    */
-   Sequence& getSequence(int objno);
-   /**
-   * @return Sequence number objno
-   */
-	const Sequence& getSequence(int objno) const;
-   /**
-    * @return index of sequence with code
-    */
-   int findSequence(std::string code);
-
-	int getSize() const;
-   /**
-    * Deserialize class from stream
-    */
-   virtual std::istream& load(std::istream& in);
-   /**
-    * Serialize class from stream
-    */
-   virtual std::ostream& save(std::ostream& out) const;
-   /**
-    * Clears DB
-    */
-   void clear();
-   /**
-    * Adds sequence to DB
-    */
-	int addSequence(const Sequence& rSeq);
-   /**
-    * Clears sequence scores
-    */
-	void clearScores();
-   /**
-    * Get scores of all sequences in DB
-    */
-	std::vector<double> getScores();
-   int getObjNo(const char* strId) const;
-private:
-	typedef std::vector<Sequence> Data;
-	Data data;
-};
-
-};
-
-#endif // !defined(SEQUENCE_H__INCLUDED_)
diff --git a/src/plugins/expert_discovery/src/DDisc/Signal.cpp b/src/plugins/expert_discovery/src/DDisc/Signal.cpp
deleted file mode 100644
index 1dbd90d..0000000
--- a/src/plugins/expert_discovery/src/DDisc/Signal.cpp
+++ /dev/null
@@ -1,749 +0,0 @@
-// Signal.cpp: implementation of the Signal class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "Signal.h"
-#include "Context.h"
-#include "Sequence.h"
-#include "statmath.h"
-#include <stdexcept>
-#include <string.h>
-
-#if (defined(_MSC_VER) && _MSC_VER >= 1800)
-#include <algorithm>
-#endif
-
-using namespace std;
-
-namespace DDisc {
-
-
-static int Prime(int n)
-{
-	static const int CACHE = 5;
-	static vector<int> Prime;
-
-	if (n >= (int) Prime.size())
-	{
-		int old_size = (int) Prime.size();
-		int new_size = n + CACHE;
-		Prime.resize( n + CACHE );
-		if (old_size == 0)
-		{
-			Prime[0] = 2;
-			old_size++;
-		}
-		for (int i=old_size; i<new_size; i++)
-		{
-			int candidate = Prime[i-1];
-			bool isPrime = false;
-			while (!isPrime) 
-			{
-				candidate++;
-				for (int j=0; j<i; j++)
-					if (candidate % Prime[j] == 0) continue;
-				isPrime = true;
-			}
-			Prime[i] = candidate;
-		}
-	}
-	return Prime[n];
-}
-
-template <class _Init>
-inline size_t _Hash_value(_Init _Begin, _Init _End)
-{	// hash range of elements
-   size_t _Val = 2166136261U;
-   while(_Begin != _End)
-      _Val = 16777619U * _Val ^ (size_t)*_Begin++;
-   return (_Val);
-}
-
-template<class _Elem,
-class _Traits,
-class _Alloc> inline
-   int hash_value(const basic_string<_Elem, _Traits, _Alloc>& _Str)
-{	// hash string to size_t value
-   return (int)(_Hash_value(_Str.begin(), _Str.end()));
-}
-
-//////////////////////////////////////////////////////////////////////
-// Signal: complex signal
-//////////////////////////////////////////////////////////////////////
-
-Signal::Signal(const string name, const string description)
-{
-	setPriorParamsDefined(false);
-	setPriorProbability(0);
-	setPriorFisher(1);
-	setPriorPosCoverage(0);
-	setPriorNegCoverage(0);
-
-	setName(name);
-	setDescription(description);
-	pSignal = NULL;
-}
-
-
-Signal::Signal(Operation *pOperation, const string name, const string description)
-{
-	setPriorParamsDefined(false);
-	setPriorProbability(0);
-	setPriorFisher(1);
-	setPriorPosCoverage(0);
-	setPriorNegCoverage(0);
-
-	setName(name);
-	setDescription(description);
-	pSignal = pOperation;
-}
-
-Signal::~Signal()
-{
-	delete pSignal;
-}
-
-void Signal::attach(Operation *pOperation)
-{
-	setPriorParamsDefined(false);
-	setPriorProbability(0);
-	setPriorFisher(1);
-	setPriorPosCoverage(0);
-	setPriorNegCoverage(0);
-
-	pSignal = pOperation;
-}
-
-void Signal::detach() 
-{
-	pSignal = NULL;
-}
-
-bool Signal::find(const Sequence& rSeq, Context &rContext) const
-{
-	int from = 0, to = static_cast<int>(rSeq.getSequence().length()) -1;
-	if (rContext.getSearchRegion() == Interval())
-		rContext.setSearchRegion( Interval(from, to) );
-
-	if (getSignal()->find(rSeq,rContext)) 
-		return true;
-	return false;
-}
-
-Context& Signal::createCompartibleContext() const
-{
-	return pSignal->createCompartibleContext();
-}
-
-Signal* Signal::clone() const
-{
-	Operation *pOp = getSignal() ? getSignal()->Clone() : NULL;
-	Signal* pSignal = new Signal(pOp, getName(), getDescription());
-	pSignal->setPriorParamsDefined(isPriorParamsDefined());
-	pSignal->setPriorProbability(getPriorProbability());
-	pSignal->setPriorFisher(getPriorFisher());
-	pSignal->setPriorPosCoverage(getPriorPosCoverage());
-	pSignal->setPriorNegCoverage(getPriorNegCoverage());
-	return pSignal;
-}
-
-int Signal::getHash() const
-{
-	return getSignal()->getHash();
-}
-
-bool Signal::check() const
-{
-	return pSignal && pSignal->check();
-}
-
-//////////////////////////////////////////////////////////////////////
-// Operation: abstract complex signal node
-//////////////////////////////////////////////////////////////////////
-
-Operation::Operation()
-{
-
-}
-
-Operation::~Operation() 
-{
-
-}
-
-void Operation::detach() {
-	for (int i=0; i<getArgumentNumber(); i++) setArgument(NULL, i);
-}
-
-bool Operation::check() const
-{
-	int nArgNum = getArgumentNumber();
-	for (int i=0; i<nArgNum; i++) {
-		Operation *pArg = getArgument(i);
-		if (!pArg || !pArg->check())
-			return false;
-	}
-	return true;
-}
-
-//////////////////////////////////////////////////////////////////////
-// UnaryOperation: abstract unary operation
-//////////////////////////////////////////////////////////////////////
-
-UnaryOperation::UnaryOperation()
-: Operation()
-{
-	setArgument(NULL);
-}
-
-UnaryOperation::~UnaryOperation()
-{
-	delete getArgument();
-}
-
-Operation* UnaryOperation::getArgument(int i) const
-{
-	if (i!=0) throw logic_error("Invalid argument number");
-	return pArgument;
-}
-
-void UnaryOperation::setArgument(Operation* pArgument, int i)
-{
-	if (i!=0) throw logic_error("Invalid argument number");
-	this->pArgument = pArgument;	
-}
-
-int UnaryOperation::getArgumentNumber() const
-{
-	return 1;
-}
-
-//////////////////////////////////////////////////////////////////////
-// BinaryOperation: abstract binary operation
-//////////////////////////////////////////////////////////////////////
-
-BinaryOperation::BinaryOperation()
-: Operation()
-{
-	detach();
-}
-
-BinaryOperation::~BinaryOperation()
-{
-	delete getArgument(0);
-	delete getArgument(1);
-}
-
-Operation* BinaryOperation::getArgument(int i) const
-{
-	switch (i) {
-		case 0:	return pArgument1;
-		case 1:	return pArgument2;
-		default: throw logic_error("Invalid argument number");
-	};
-}
-
-void BinaryOperation::setArgument(Operation* pArgument, int i)
-{
-	switch (i) {
-		case 0: pArgument1 = pArgument; break;
-		case 1: pArgument2 = pArgument; break;
-		default: throw logic_error("Invalid argument number");
-	};
-}
-
-int BinaryOperation::getArgumentNumber() const
-{
-	return 2;
-}
-
-
-//////////////////////////////////////////////////////////////////////
-// OpInterval: Interval operation
-//////////////////////////////////////////////////////////////////////
-
-OpInterval::OpInterval()
-: UnaryOperation()
-{
-	setInt( Interval(0, PINF) );
-}
-
-OpInterval::~OpInterval()
-{
-
-}
-
-Context& OpInterval::createCompartibleContext() const
-{
-	ConInterval &context = *new ConInterval();
-	context.setSubContext(getArgument()->createCompartibleContext());
-	return context;
-}
-
-bool OpInterval::find(const Sequence& rSeq, Context &rContext) const
-{
-	ConInterval& context = dynamic_cast<ConInterval&>(rContext);
-	if (context.isEof()) return false;
-	if (context.getSearchRegion().isEmpty()) {
-		context.setEof(true);
-		return false;
-	}
-	if (context.getSubContext().getSearchRegion()==Interval()) 
-		context.getSubContext().setSearchRegion(context.getSearchRegion().intersect(getInt()));
-
-	bool bResult = getArgument()->find(rSeq, context.getSubContext());
-	if (!bResult) context.setEof(true);
-	else {
-		context.setPosition( context.getSubContext().getPosition() );
-		context.setLength( context.getSubContext().getLength() );
-	}
-	return bResult;
-}
-
-const string OpInterval::getDescription() const
-{
-	string result = string("Interval from ")
-				  + to_string(getInt().getFrom()) + string(" to ")
-				  + to_string(getInt().getTo());
-	return result;
-}
-
-EOpType OpInterval::getType() const {
-	return OP_INTERVAL;
-}
-
-Operation* OpInterval::Clone() const
-{
-	OpInterval* pResult = new OpInterval;
-	Operation* pArg = getArgument(0);
-	if (pArg)
-		pResult->setArgument( pArg->Clone() );
-	pResult->setInt( getInt() );
-	return pResult;
-}
-
-int OpInterval::getHash(int level) const
-{
-	return 3*Prime(level)*getArgument()->getHash(level + 1);
-}
-
-//////////////////////////////////////////////////////////////////////
-// OpReiteration: Repetition operation
-//////////////////////////////////////////////////////////////////////
-
-OpReiteration::OpReiteration()
-: UnaryOperation()
-{
-	setCount( Interval(1,1) );
-	setDistance( Interval(0, PINF) );
-	setDistanceType( DIST_FINISH_TO_START );
-}
-
-OpReiteration::~OpReiteration()
-{
-
-}
-
-Context& OpReiteration::createCompartibleContext() const
-{
-	ConReiteration &context = *new ConReiteration();
-	context.setSubContext(getArgument()->createCompartibleContext());
-	context.init(this);
-	return context;
-}
-
-bool OpReiteration::find(const Sequence& rSeq, Context &rContext) const
-{
-	ConReiteration& context = dynamic_cast<ConReiteration&>(rContext);
-	if (context.isEof()) return false;
-	if (context.getSearchRegion().isEmpty()) {
-		context.setEof(true);
-		return false;
-	}
-	do {
-		ConReiteration& NRContext = *context.getNextReiterationContext();
-		if (context.isFound() && context.getReiterationNo()<getCount().getTo()) {
-			int nStart = DistanceCalculator::getStartPos(
-											getDistanceType(),
-											context.getSubContext().getPosition(),
-											context.getSubContext().getLength());
-			int nrPosMax = getDistance().getTo();
-			if (nrPosMax != PINF)
-				nrPosMax += nStart;
-
-			if (find(rSeq, NRContext) && NRContext.getPosition() <= nrPosMax ) {
-				int nEnd = DistanceCalculator::getEndPos(
-											getDistanceType(),
-											NRContext.getPosition(),
-											NRContext.getLength());
-				if (nEnd - nStart <= getDistance().getLength()) {
-					int nPos = min( context.getSubContext().getPosition(), 
-									NRContext.getPosition());
-					int nLen = max( NRContext.getPosition() + NRContext.getLength(),
-									context.getSubContext().getPosition() + context.getSubContext().getLength()) - nPos;
-					context.setPosition(nPos);
-					context.setLength(nLen);
-					return true;
-				}
-			}
-		}
-
-		if (context.getSubContext().getSearchRegion() == Interval())
-			context.getSubContext().setSearchRegion( context.getSearchRegion() );
-		context.setFound(getArgument()->find(rSeq, context.getSubContext()));
-		if (context.isFound()) {
-			int from = getDistance().getFrom();
-			if (from == MINF) from = 0;
-			else from += DistanceCalculator::getStartPos(
-								getDistanceType(),
-								context.getSubContext().getPosition(),
-								context.getSubContext().getLength());
-			NRContext.reset();
-			NRContext.setSearchRegion(  
-				Interval( 
-					from,
-					context.getSearchRegion().getTo()
-				)
-			);
-			if (getCount().isInInterval(context.getReiterationNo())) {
-				context.setPosition(context.getSubContext().getPosition());
-				context.setLength(context.getSubContext().getLength());
-				return true;
-			}
-		}
-	} while (context.isFound()); 
-	context.setEof(true);
-	return false;
-}
-
-const string OpReiteration::getDescription() const
-{
-	string result = string("Repeated signals from ")
-				  + to_string(getCount().getFrom()) + string(" to ")
-				  + to_string(getCount().getTo()) + string(" times with distance from ")
-				  + to_string(getDistance().getFrom()) + string(" to ")
-				  + to_string(getDistance().getTo());
-	return result;
-}
-
-EOpType OpReiteration::getType() const {
-	return OP_REITERATION;
-}
-
-Operation* OpReiteration::Clone() const
-{
-	OpReiteration* pResult = new OpReiteration;
-	Operation* pArg = getArgument(0);
-	if (pArg)
-		pResult->setArgument( pArg->Clone() );
-	pResult->setDistance( getDistance() );
-	pResult->setCount( getCount() );
-	return pResult;
-}
-
-int OpReiteration::getHash(int level) const
-{
-	return 5*Prime(level)*getArgument()->getHash(level + 1);
-}
-
-//////////////////////////////////////////////////////////////////////
-// OpDistance: distance operation
-//////////////////////////////////////////////////////////////////////
-
-OpDistance::OpDistance()
-: BinaryOperation()
-{
-	setDistance( Interval(0, PINF) );
-	setDistanceType(DIST_FINISH_TO_START);
-	setOrderImportant(true);
-}
-
-OpDistance::~OpDistance()
-{
-}
-
-Context& OpDistance::createCompartibleContext() const
-{
-	ConDistance &context = *new ConDistance();
-	context.setSubContext1(getArgument(0)->createCompartibleContext());
-	context.setSubContext2(getArgument(1)->createCompartibleContext());
-	return context;
-}
-
-bool OpDistance::find(const Sequence& rSeq, Context &rContext) const
-{
-	ConDistance& context = dynamic_cast<ConDistance&>(rContext);
-	if (context.isEof()) return false;
-	if (context.getSearchRegion().isEmpty()) {
-		context.setEof(true);
-		return false;
-	}
-	const Operation *arg[] = {getArgument(0), getArgument(1)};
-	Context *con[] = {&context.getSubContext1(), &context.getSubContext2()};
-	for (int i=context.getI(); i<=static_cast<int>(!isOrderImportant()); i++) {
-		context.setI(i);
-		if (con[i]->getSearchRegion() == Interval()) 
-			con[i]->setSearchRegion( context.getSearchRegion() );
-		bool found;
-		do {
-			if (!context.isBOF()) {
-				int nFrom = getDistance().getFrom();
-				if (nFrom == MINF) nFrom = 0;
-
-				int nStart = nFrom + DistanceCalculator::getStartPos(
-															getDistanceType(), 
-															con[i]->getPosition(), 
-															con[i]->getLength());
-				int nTo = getDistance().getTo();
-				if (nTo != PINF) nTo += nStart;
-
-				if (con[1-i]->getSearchRegion() == Interval()) {
-					Interval iSearchRegion = context.getSearchRegion();
-					con[1-i]->setSearchRegion(iSearchRegion.intersect(Interval(nStart, PINF)));
-				}
-
-				// Bug
-				while (arg[1-i]->find(rSeq, *con[1-i]) && con[1-i]->getPosition() <= nTo) {
-					int nEnd = DistanceCalculator::getEndPos(
-													getDistanceType(), 
-													con[1-i]->getPosition(), 
-													con[1-i]->getLength());
-					if (nEnd - nStart <= getDistance().getLength()-1) {
-						int nPos = min(con[i]->getPosition(), con[1-i]->getPosition());
-						int nLen = max(
-										con[i]->getPosition()+con[i]->getLength(), 
-										con[1-i]->getPosition()+con[1-i]->getLength()
-								   ) - nPos;
-						context.setPosition( nPos );
-						context.setLength( nLen );
-						return true;
-					}
-				}
-				con[1-i]->reset();
-			}
-			context.setBOF(false);	
-			found = arg[i]->find(rSeq, *con[i]);
-		} while ( found );
-		context.setBOF(true);
-		con[i]->reset();
-	}
-	context.setEof(true);
-	return false;
-}
-
-const string OpDistance::getDescription() const
-{
-	string result = string("Distance from ")
-				  + to_string(getDistance().getFrom()) + string(" to ")
-				  + to_string(getDistance().getTo());
-	if (isOrderImportant())
-		result += " taking into account order";
-	return result;
-}
-
-EOpType OpDistance::getType() const {
-	return OP_DISTANCE;
-}
-
-Operation* OpDistance::Clone() const
-{
-	OpDistance* pResult = new OpDistance;
-	Operation* pArg0 = getArgument(0);
-	if (pArg0)
-		pResult->setArgument( pArg0->Clone(), 0 );
-	Operation* pArg1 = getArgument(1);
-	if (pArg1)
-		pResult->setArgument( pArg1->Clone(), 1 );
-	pResult->setDistance( getDistance() );
-	pResult->setOrderImportant( isOrderImportant() );
-	return pResult;
-}
-
-int OpDistance::getHash(int level) const
-{
-	if (isOrderImportant())
-		return Prime(level)*(7*getArgument(0)->getHash(level + 1) + 17*getArgument(1)->getHash(level + 1));
-	else
-		return Prime(level)*(getArgument(0)->getHash(level + 1) + getArgument(1)->getHash(level + 1));
-}
-
-//////////////////////////////////////////////////////////////////////
-// TS: terminal symbol
-//////////////////////////////////////////////////////////////////////
-
-TS::TS()
-{
-
-}
-
-TS::~TS()
-{
-
-}
-
-Context& TS::createCompartibleContext() const
-{
-	if (isFromMarking()) {
-		ConTS& context = *new ConTS(getFamily() + ":" + getName());
-		return context;
-	}
-	else {
-		ConTS& context = *new ConTS(getWord());
-		return context;
-	}
-}
-
-
-inline bool TS::compare(const char* seq, unsigned nSeqLen, const char *word, unsigned nWordLen) {
-	static const char comparator[26][26] = {
-		/*A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U.V,W,X,Y,Z*/
-		{ 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 }, // A
-		{ 0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 }, // B
-		{ 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 }, // C
-		{ 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 }, // D
-		{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // E
-		{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // F
-		{ 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 }, // G
-		{ 1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 }, // H
-		{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // I
-		{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // J
-		{ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 }, // K
-		{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // L
-		{ 1,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 }, // M
-		{ 1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 }, // N
-		{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // O
-		{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // P
-		{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // Q
-		{ 1,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 }, // R
-		{ 0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // S
-		{ 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 }, // T
-		{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // U
-		{ 1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // V
-		{ 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 }, // W
-		{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // X
-		{ 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 }, // Y
-		{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, // Z
-	};
-	if (nWordLen > nSeqLen) return false;
-	for (unsigned i=0; i<nWordLen; i++) 
-		if (!comparator[word[i]-'A'][seq[i]-'A']) return false;
-	return true;
-}
-
-bool TS::find(const Sequence& rSeq, Context &rContext) const 
-{
-	ConTS& context = dynamic_cast<ConTS&>(rContext);
-	if (context.isEof()) return false;
-	if (context.getSearchRegion().isEmpty()) {
-		context.setEof(true);
-		return false;
-	}
-	if (isFromMarking()) {
-		Interval inter = context.getSearchRegion();
-		string name = getName();
-		string family = getFamily();
-		Interval location;
-		try {
-			location = rSeq.getSequenceMarking().hasSignalAt(inter, name, family);
-		}
-		catch (exception) {
-			location = Interval();
-		}
-		if (location != Interval()) {
-			context.setPosition( location.getFrom() );
-			context.setLength( location.getLength() );
-			context.setSearchRegion( Interval(location.getFrom() + 1, context.getSearchRegion().getTo()));
-			return true;
-		}
-		context.setEof(true);
-		return false;
-	}
-	else {
-		string strWord = getWord();
-		int nWrdLen = (int) strWord.length();
-		if (nWrdLen != 0) {
-			string strSeq = rSeq.getSequence().substr( 
-									context.getSearchRegion().getFrom(),
-									context.getSearchRegion().getLength()
-							);
-			int nSeqLen = (int) strSeq.length();
-			const char* pWord = strWord.c_str();
-			const char *pSeq = strSeq.c_str();
-			const char *pStart = pSeq;
-			while (nWrdLen <= nSeqLen) {
-				if (compare(pSeq, nSeqLen, pWord, nWrdLen)) {
-					context.setPosition(context.getSearchRegion().getFrom()+int(pSeq-pStart));
-					context.setSearchRegion(Interval(context.getPosition()+1, context.getSearchRegion().getTo()));
-					context.setLength(nWrdLen);
-					return true;
-				}
-				pSeq++;
-				nSeqLen--;
-			}
-		}
-		context.setEof(true);
-		return false;
-	}
-}
-
-const string TS::getDescription() const
-{
-	string result;
-	if (isFromMarking())
-		result += "\"" + getName() + "\" from family \"" + getFamily() + "\"";
-	else 
-		result += getWord();
-	return result;
-}
-
-Operation* TS::getArgument(int i) const {
-	throw logic_error("TS do not have any arguments");
-}
-
-void TS::setArgument(Operation*, int i) {
-	throw logic_error("TS do not have any arguments");
-}
-
-int TS::getArgumentNumber() const {
-	return 0;
-}
-
-
-EOpType TS::getType() const {
-	return OP_TS;
-}
-
-Operation* TS::Clone() const
-{
-	TS* pResult = new TS;
-	pResult->setFromMarking( isFromMarking() );
-	pResult->setWord( getWord() );
-	pResult->setName( getName() );
-	pResult->setFamily( getFamily() );
-	return pResult;
-}
-
-bool TS::check() const 
-{
-	if (isFromMarking()) {
-		if (getName().empty() || getFamily().empty())
-			return false;
-	}
-	else {
-		if (getWord().empty())
-			return false;
-	}
-	return Operation::check();
-}
-
-int TS::getHash(int level) const
-{
-   if (isFromMarking())
-		return Prime(level)*(11*hash_value(getName()) + 13*hash_value(getFamily()));
-	else 
-		return Prime(level)*(hash_value(getWord()));
-}
-
-
-};
-
diff --git a/src/plugins/expert_discovery/src/DDisc/Signal.h b/src/plugins/expert_discovery/src/DDisc/Signal.h
deleted file mode 100644
index d2287d3..0000000
--- a/src/plugins/expert_discovery/src/DDisc/Signal.h
+++ /dev/null
@@ -1,348 +0,0 @@
-// Signal.h: Complex signal logic realiztion classes
-//
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(ISIGNAL_H__INCLUDED_)
-#define ISIGNAL_H__INCLUDED_
-
-#include <iostream>
-#include "definitions.h"
-
-namespace DDisc {
-
-/**
- *	Type of operation in complex signal
- */
-enum EOpType {
-	OP_UNDEFINED,
-	OP_INTERVAL,
-	OP_REITERATION,
-	OP_DISTANCE,
-	OP_TS
-};
-
-
-class Context;
-class Sequence;
-class Operation;
-
-/**
- *	Class representing complex signal
- */
-class Signal {
-public:
-   /**
-    * Constructs signal
-    * @param name name of the signal
-    * @param description description of the signal
-    */
-   Signal(const std::string name = "", const std::string description = "");
-   /**
-    * Constructs signal
-    * @param operation root operation of the signal
-    * @param name name of the signal
-    * @param description description of the signal
-    */
-   Signal(Operation *operation, const std::string name = "", const std::string description = "");
-	virtual ~Signal();
-   /**
-    *	Attaches operation to the signal
-    * @param operation root operation of the signal
-    */
-	void attach(Operation *operation);
-   /**
-    * Detaches all operations
-    */
-	void detach();
-   /**
-    *	Creates compatible search context
-    * @return Search context, that can be used to find signal
-    */
-   Context& createCompartibleContext() const;
-   /**
-    *	Searches for the next occurence of signal in the sequence.
-    * @param rSeq sequence to find in
-    * @param rContext search context
-    * @return true if signal was found, else false
-    */
-	virtual bool find(const Sequence& rSeq, Context &rContext) const;
-   /**
-    *	Returns root operation of the signal
-    */
-	inline Operation *getSignal() const { return pSignal; }
-   /**
-    *	Makes a signal copy and return it
-    */
-	Signal* clone() const;
-   /**
-    *	Calculates hash code of signal
-    */
-	int getHash() const;
-   /**
-    *	Checks if signal is well defined
-    */
-	bool check() const;
-
-private:
-	Operation *pSignal;
-   /**
-    *	Signal name
-    */
-   PROPERTY(std::string, Name);
-   /**
-   *	Signal description
-   */
-   PROPERTY(std::string, Description);
-
-
-   /**
-    *	If PriorParamsDefined set to true, then prior
-    * parameters of signal was define
-    */
-	MODIFIABLE_FLAG(PriorParamsDefined);
-   /**
-    *	Expected signal probability
-    */
-	PROPERTY(double, PriorProbability);
-   /**
-    *	Expected signal fisher criteria level
-    */
-	PROPERTY(double, PriorFisher);
-   /**
-    * Expected positive coverage
-    */
-	PROPERTY(double, PriorPosCoverage);
-   /**
-    * Expected negative coverage
-    */
-	PROPERTY(double, PriorNegCoverage);
-};
-
-
-/**
- *	Abstract complex signal operation.
- */
-class Operation
-{
-public:
-	Operation();
-	virtual ~Operation();
-   /**
-    * Creates compatible search context
-    * @return Search context, that can be used to find operation
-    */
-   virtual Context& createCompartibleContext() const = 0;
-   /**
-    * Searches for the next occurence of operation in the sequence.
-    * @param rSeq sequence to find in
-    * @param rContext search context
-    * @return true if signal was found, else false
-    */	
-   virtual bool find(const Sequence& rSeq, Context &rContext) const = 0;
-   /**
-    * @return string description of operation and parameters
-    */
-   virtual const std::string getDescription() const = 0;
-   /**
-    * Retrieves i-th operation argument
-    * @param i index of argument to be returned
-    * @return i-th argument of operation 
-    */
-	virtual Operation* getArgument(int i) const =0;
-   /**
-    * Sets i-th operation argument
-    * @param operation argument to be set
-    * @param i index of argument to be set
-    */	
-   virtual void setArgument(Operation* operation, int i) =0;
-   /**
-    * @return number of arguments
-    */
-   virtual int getArgumentNumber() const =0;
-   /**
-    * @return operation type
-    * @see EOpType
-    */
-	virtual EOpType getType() const =0;
-   /**
-    * Makes an operation copy and return it
-    */
-	virtual Operation* Clone() const =0;
-   /**
-    * Checks if operation is well defined
-    */
-	virtual bool check() const;
-   /**
-    * Clear operation arguments
-    */
-	void detach();
-   /**
-    * Calculates hash code of operation
-    */
-	virtual int getHash(int level = 0) const =0;
-};
-
-
-/**
- * Abstract unary operation
- */
-class UnaryOperation : public Operation  
-{
-public:
-	UnaryOperation();
-	virtual ~UnaryOperation();	
-
-	virtual Operation* getArgument(int i = 0) const;
-	virtual void setArgument(Operation*, int i = 0);
-	virtual int getArgumentNumber() const;
-private:
-	Operation *pArgument;
-};
-
-/**
-* Abstract binary operation
-*/
-class BinaryOperation : public Operation  
-{
-public:
-	BinaryOperation();
-	virtual ~BinaryOperation();	
-
-	virtual Operation* getArgument(int i) const;
-	virtual void setArgument(Operation*, int i);
-	virtual int getArgumentNumber() const;
-private:
-	Operation *pArgument1;
-	Operation *pArgument2;
-};
-
-/**
- * Interval operation realization. This operation is used
- * to restrict interval of sequence where argument should be searched.
- */
-class OpInterval : public UnaryOperation
-{
-public:
-	OpInterval();
-	virtual ~OpInterval();
-	virtual Context& createCompartibleContext() const;
-	virtual bool find(const Sequence& rSeq, Context &rContext) const;
-   virtual const std::string getDescription() const;
-	virtual EOpType getType() const;
-	virtual Operation* Clone() const;
-	virtual int getHash(int level = 0) const;
-   
-   /**
-    * Interval of sequence where argument should be searched
-    */
-	PROPERTY(Interval, Int);
-};
-
-/**
- * Reiteration operation realization. This operation is used
- * to find repetitions of argument.
- */
-class OpReiteration : public UnaryOperation
-{
-public:
-	OpReiteration();
-	virtual ~OpReiteration();
-	virtual Context& createCompartibleContext() const;
-	virtual bool find(const Sequence& rSeq, Context &rContext) const;
-   virtual const std::string getDescription() const;
-	virtual EOpType getType() const;
-	virtual Operation* Clone() const;
-	virtual int getHash(int level = 0) const;
-   
-   /**
-    * Range of repetitions to find
-    */
-	PROPERTY(Interval, Count);
-   /**
-    * Distance between repetitions
-    */
-	PROPERTY(Interval, Distance);
-   /**
-    * Type of measurement to use
-    * @see EDistType
-    */
-	PROPERTY(EDistType, DistanceType);
-};
-
-/**
- * Distance operation realization. This binary operation is used to
- * to find two arguments in specified distance.
- */
-class OpDistance : public BinaryOperation 
-{
-public:
-	OpDistance();
-	virtual ~OpDistance();
-	virtual Context& createCompartibleContext() const;
-	virtual bool find(const Sequence& rSeq, Context &rContext) const;
-   virtual const std::string getDescription() const;
-	virtual EOpType getType() const;
-	virtual Operation* Clone() const;
-	virtual int getHash(int level = 0) const;
-
-   /**
-    * Set to true if order of arguments is important
-    */
-	MODIFIABLE_FLAG(OrderImportant);
-   /**
-    * Distance range
-    */
-	PROPERTY(Interval, Distance);
-   /**
-    * Type of measurement to use
-    * @see EDistType
-    */
-	PROPERTY(EDistType, DistanceType);
-};
-
-
-/**
- * Terminal symbol(TS) - operation that don't have arguments. TS can be
- * from marking or can be defined by the word to find in the sequence.
- */
-class TS : public Operation
-{
-public:
-	TS();
-	virtual ~TS();
-	virtual Context& createCompartibleContext() const;
-	virtual bool find(const Sequence& rSeq, Context &rContext) const;
-   virtual const std::string getDescription() const;
-	
-	virtual Operation* getArgument(int i) const;
-	virtual void setArgument(Operation*, int i);
-	virtual int getArgumentNumber() const;
-	virtual EOpType getType() const;
-	virtual Operation* Clone() const;
-	virtual bool check() const;
-	virtual int getHash(int level = 0) const;
-protected:
-	static bool compare(const char* seq, unsigned nSeqLen, const char *word, unsigned nWordLen);
-   
-   /**
-    * Set to true if TS is from marking
-    */
-	MODIFIABLE_FLAG(FromMarking);
-   /**
-    * Word to find in the sequence, if FromMarking is false
-    */
-   PROPERTY(std::string, Word);
-
-   /**
-    * Name from marking. Set if from marking true.
-    */
-   PROPERTY(std::string, Name);
-   /**
-    * Family from marking. Set if from marking true.
-    */
-   PROPERTY(std::string, Family);
-};
-
-};
-#endif // !defined(ISIGNAL_H__INCLUDED_)
-
diff --git a/src/plugins/expert_discovery/src/DDisc/definitions.h b/src/plugins/expert_discovery/src/DDisc/definitions.h
deleted file mode 100644
index 298116b..0000000
--- a/src/plugins/expert_discovery/src/DDisc/definitions.h
+++ /dev/null
@@ -1,225 +0,0 @@
-#ifndef DEFINITIONS_H__INCLUDED_
-#define DEFINITIONS_H__INCLUDED_
-#include <assert.h>
-#include <string>
-#include <iostream>
-
-#ifndef _WIN32 
-#define __TARGET_UNIX
-#endif
-
-#ifdef __TARGET_UNIX
-#define strnicmp strncasecmp
-#define stricmp strcasecmp
-#endif
-
-
-/**
- * Defines class property of type 'type' and name 'name' and
- * get and set functions.
- */
-#define PROPERTY(type, name) \
-private:\
-	type property_##name; \
-public:\
-	inline const type get##name() const { return property_##name; } \
-	inline void set##name(type value) { property_##name = value; }
-
-/**
- * Defines property that can be changed through get accessor
- */
-#define VAR_PROPERTY(type, name) \
-private:\
-	type property_##name; \
-public:\
-	inline type get##name() const { return property_##name; } \
-	inline void set##name(type value) { property_##name = value; }
-
-
-/**
- * Defines property that managed through type references
- */
-#define REF_PROPERTY(type, name) \
-private:\
-	type* refproperty_##name; \
-public: \
-	inline const type& get##name() const { return *refproperty_##name;} \
-	inline void set##name(type &value) { refproperty_##name = &value; }
-
-/**
- * Defines property that managed through const type references
- */
-#define CREF_PROPERTY(type, name) \
-private:\
-	const type* refproperty_##name; \
-public: \
-	inline const type& get##name() const { return *refproperty_##name;} \
-	inline void set##name(const type &value) { refproperty_##name = &value; } 
-
-/**
- * Defines flag and set and is accessors, set accessor can be called only
- * inside class.
- */
-#define FLAG(name) \
-private: \
-	bool flag_##name; \
-protected: \
-	void set##name(bool value) { flag_##name = value; } \
-public: \
-	inline bool is##name() const { return flag_##name; }
-
-/**
-* Defines flag and set and is accessors.
-*/
-#define MODIFIABLE_FLAG(name) \
-private: \
-	bool flag_##name; \
-public: \
-	void set##name(bool value) { flag_##name = value; } \
-	inline bool is##name() const { return flag_##name; }
-
-
-#define BUF_SIZE 1024
-
-#include <limits.h>
-/**
- * Plus infinity constant
- */
-#define PINF INT_MAX
-/**
- * Minus infinity constant
- */
-#define MINF INT_MIN
-/**
- * Infinity constant
- */
-#define INF PINF
-
-#define MAX(a,b) (a>b)?a:b
-#define MIN(a,b) (a<b)?a:b
-
-
-
-namespace DDisc {
-
-/**
- * Class representing interval of int values
- */
-class Interval {
-public:
-	Interval() {
-		setFrom(MINF);
-		setTo(PINF);
-	}
-	Interval(int a, int b) {
-		setFrom((a==INF)?MINF:a);
-		setTo(b);
-	}
-	bool operator ==(const Interval& i) const {
-		if (getFrom() == i.getFrom() && getTo() == i.getTo()) return true;
-		else return false;
-	}
-	bool operator !=(const Interval& i) const {
-		return !(*this==i);
-	}
-   /**
-    * Intersects this interval with another one
-    * @param intrv interval to intersect with
-    * @return intersection of two intervals
-    */
-	inline Interval intersect(const Interval& intrv) const {
-		Interval result;
-		result.setFrom( MAX(getFrom(),intrv.getFrom()) );
-		result.setTo( MIN(getTo(),intrv.getTo()) );
-		return result;
-	}
-   /**
-    * Checks whether v is in interval
-    */
-	inline bool isInInterval(int v) const {
-		if (getFrom()<=v && v<=getTo()) return true;
-		else return false;
-	}
-   /**
-    * Checks if interval empty
-    */
-	inline bool isEmpty() const {
-		return getFrom()>getTo();
-	}
-   /**
-    * @return length of interval
-    */
-	inline int getLength() const {
-		if (getTo() == PINF)
-			return PINF;
-		int len = getTo() - getFrom() + 1;
-		return (len>0)?len:0;
-	}
-   /**
-    * Start value of interval
-    */
-	PROPERTY(int, From);
-   /**
-    * End value of interval
-    */
-	PROPERTY(int, To);
-};
-
-/**
- * 
- */
-enum EDistType {
-	DIST_FINISH_TO_START,
-	DIST_START_TO_START,
-	DIST_MIDDLE_TO_START
-};
-
-class DistanceCalculator {
-public:
-	inline static int getStartPos(EDistType eType, int nPos, int nLength) {
-		int nStartPos = 0;
-		switch (eType) {
-			case DIST_FINISH_TO_START	: 
-				nStartPos = nPos + nLength;
-				break;
-
-			case DIST_START_TO_START	: 
-				nStartPos = nPos;
-				break;
-
-			case DIST_MIDDLE_TO_START	: 
-				nStartPos = nPos + nLength/2;
-				break;
-			default: assert(0);
-		};
-		return nStartPos;
-	}
-
-	inline static int getEndPos(EDistType eType, int nPos, int nLength) {
-		return nPos;
-	}
-private:
-	DistanceCalculator();
-	DistanceCalculator(const DistanceCalculator&);
-	~DistanceCalculator();
-};
-
-#define MAX_STR_INT 100
-
-extern std::string to_string(int);
-extern std::string to_string(double);
-extern std::string readTAG(std::istream& in);
-extern std::string& to_upper(std::string &str);
-extern bool parse(const char* source, const char* format,...);
-extern std::ostream& writeInt(std::ostream& out, int v);
-
-extern bool isValidWord15(const char* strWord);
-
-#ifdef __TARGET_UNIX
-extern char *strupr(char *);
-#endif
-
-
-};
-
-#endif // !defined(DEFINITIONS_H__INCLUDED_)
diff --git a/src/plugins/expert_discovery/src/DDisc/statmath.cpp b/src/plugins/expert_discovery/src/DDisc/statmath.cpp
deleted file mode 100644
index f856bdf..0000000
--- a/src/plugins/expert_discovery/src/DDisc/statmath.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-//****************************************************************************
-//	File name:			StatMath.cpp
-//	Title:				���������� ����������� DiscoveryLib
-//	Version:			1.0
-//	Author:				������� ����� ��������
-//	Creation Date:		26.02.2005 �.
-//
-//	Description: ��������� ������� �� �������������� ����������
-//
-//****************************************************************************
-
-#include "statmath.h"
-
-
diff --git a/src/plugins/expert_discovery/src/DDisc/statmath.h b/src/plugins/expert_discovery/src/DDisc/statmath.h
deleted file mode 100644
index a746bfe..0000000
--- a/src/plugins/expert_discovery/src/DDisc/statmath.h
+++ /dev/null
@@ -1,89 +0,0 @@
-//****************************************************************************
-//	File name:			StatMath.h
-//	Title:				���������� ����������� DiscoveryLib
-//	Version:			1.0
-//	Author:				������� ����� ��������
-//	Creation Date:		26.02.2005 �.
-//
-//	Description: ��������� ������� �� �������������� ����������
-//
-//****************************************************************************
-
-
-#pragma once
-
-#include <math.h>
-
-#define CORELATION_UNDEFINED -2
-
-#ifndef min
-#define min(a,b) (a<b)?a:b
-#endif
-
-namespace DDisc {
-	inline double factln(int ifak) {
-		const double faktor[] = { 0.0, 0.0, 0.692, 1.791, 3.177, 4.787,
-			6.579, 8.525, 10.604, 12.802, 15.104 };
-		if (ifak <= 10) {
-			return faktor[ifak];
-		} else {
-			return ifak * log((double)ifak) + 0.5 * (1.8374 + log((double)ifak))
-				- ifak + 1. / (12. * ifak) - 1. / (360. * ifak * ifak);
-		}
-	}
-
-	inline double fisher(int a, int b, int c, int d) {
-		double result = 0;
-
-		int n = a + c + b + d;
-		if (n == 0) {
-			return 1; // NO DATA
-		}
-		double constant = factln(a + b) + factln(c + d) + factln(a + c)
-			+ factln(b + d) - factln(n);
-
-		int m00 = a;
-		int m01 = b;
-		int m10 = c;
-		int m11 = d;
-		if (c * b > a * d) {
-			m00 = c;
-			m01 = d;
-			m10 = a;
-			m11 = b;
-		}
-		int lowestNum = min(m01, m10);
-		for (int i1 = 0; i1 <= lowestNum; i1++) {
-			double variable = -factln(m11) - factln(m01) - factln(m10)
-				- factln(m00);
-			result += exp(constant + variable);
-
-			m11 = m11 + 1;
-			m01 = m01 - 1;
-			m10 = m10 - 1;
-			m00 = m00 + 1;
-		}
-		return result;
-	}
-
-	inline double corelation(int a, int b, int c, int d) {
-		double dSqrt = sqrt((double)(b + d) * (a + c) * (c + d) * (a + b));
-		if (dSqrt != 0)
-			return (a * d - c * b) / dSqrt;
-		else
-			return CORELATION_UNDEFINED;
-	}
-
-	inline double ul(int a, int b, int c, int d) {
-		if (b == 0 || c == 0) {
-			return 1;
-		} else if (a == 0 || d == 0) {
-			return -1;
-		}
-		double Q = (a * d - b * c) / (double) (a * d + b * c);
-		double D = 0.5 * (1 - Q * Q)
-			* sqrt((double)(1.0 / a) + (1.0 / b) + (1.0 / c) + (1.0 / d));
-		double Q005 = Q - 1.96 * D;
-		return Q005;
-	}
-}
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryAdvSetDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryAdvSetDialog.cpp
deleted file mode 100644
index 0680196..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryAdvSetDialog.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * 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 <QDoubleValidator>
-#include <QMessageBox>
-#include <QValidator>
-
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Gui/HelpButton.h>
-#include <U2Core/QObjectScopedPointer.h>
-
-#include "ExpertDiscoveryAdvSetDialog.h"
-
-namespace U2 {
-
-ExpertDiscoveryAdvSetDialog::ExpertDiscoveryAdvSetDialog(QWidget *parent,
-        double& dIntProbability1,
-        double& dIntFisher1,
-        int&    nMinComplexity1,
-        int&    nMaxComplexity1,
-        double& dMinPosCorrelation1,
-        double& dMaxPosCorrelation1,
-        double& dMinNegCorrelation1,
-        double& dMaxNegCorrelation1,
-        bool&   bCorrelationImportant1)
-: QDialog(parent),
-    dIntProbability(dIntProbability1),
-    dIntFisher(dIntFisher1),
-    nMinComplexity(nMinComplexity1),
-    nMaxComplexity(nMaxComplexity1),
-    dMinPosCorrelation(dMinPosCorrelation1),
-    dMaxPosCorrelation(dMaxPosCorrelation1),
-    dMinNegCorrelation(dMinNegCorrelation1),
-    dMaxNegCorrelation(dMaxNegCorrelation1),
-    bCorrelationImportant(bCorrelationImportant1){
-
-    setupUi(this);
-
-    groupBox_2->setDisabled(true);
-    condProbEdit->setText(QString("%1").arg(dIntProbability));
-    fishCritEdit->setText(QString("%1").arg(dIntFisher));
-    minComplexEdit->setText(QString("%1").arg(nMinComplexity));
-    maxComplEdit->setText(QString("%1").arg(nMaxComplexity));
-    minCorPosEdit->setText(QString("%1").arg(dMinPosCorrelation));
-    maxCorPosEdit->setText(QString("%1").arg(dMaxPosCorrelation));
-    minCorNegEdit->setText(QString("%1").arg(dMinNegCorrelation));
-    maxCorNegEdit->setText(QString("%1").arg(bCorrelationImportant));
-
-    QDoubleValidator* dIntProbabilityValid = new QDoubleValidator(0,100,5,this);
-    QDoubleValidator* dIntFisherValid = new QDoubleValidator(0,1,5,this);
-    QIntValidator* nComplexityValid = new QIntValidator(0,1000,this);
-    QDoubleValidator* dCorrelationValid = new QDoubleValidator(-1,1,5,this);
-
-
-    condProbEdit->setValidator(dIntProbabilityValid);
-    fishCritEdit->setValidator(dIntFisherValid);
-    minComplexEdit->setValidator(nComplexityValid);
-    maxComplEdit->setValidator(nComplexityValid);
-    minCorPosEdit->setValidator(dCorrelationValid);
-    maxCorPosEdit->setValidator(dCorrelationValid);
-    minCorNegEdit->setValidator(dCorrelationValid);
-    maxCorNegEdit->setValidator(dCorrelationValid);
-    connect( checkCorrel, SIGNAL(clicked()), SLOT(sl_checkCorrel()) );
-
-    hideParameters();
-    new HelpButton(this, buttonBox, "17467810");
-
-}
-
-void ExpertDiscoveryAdvSetDialog::accept(){
-    int minCom = 0;
-    int maxCom = 0;
-    minCom = minComplexEdit->text().toInt();
-    maxCom = maxComplEdit->text().toInt();
-
-    if(minCom>maxCom || minCom<0){
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Wrong parameters"), tr("Minimal complexity must not be grater then maximal complexity and positive"));
-        mb->exec();
-        CHECK(!mb.isNull(), );
-    }else{
-        if(check(condProbEdit) && check(fishCritEdit) &&
-            check(minCorPosEdit) && check(maxCorPosEdit)
-            && check(minCorNegEdit) && check(maxCorNegEdit) ){
-            dIntProbability = condProbEdit->text().toDouble();
-            dIntFisher = fishCritEdit->text().toDouble();
-            nMinComplexity = minCom;
-            nMaxComplexity = maxCom;
-            bCorrelationImportant = checkCorrel->isChecked();
-            if(bCorrelationImportant){
-                dMinPosCorrelation = minCorPosEdit->text().toDouble();
-                dMaxPosCorrelation = maxCorPosEdit->text().toDouble();
-                dMinNegCorrelation = minCorNegEdit->text().toDouble();
-                dMaxNegCorrelation = maxCorNegEdit->text().toDouble();
-            }
-            QDialog::accept();
-        }
-    }
-
-}
-void ExpertDiscoveryAdvSetDialog::sl_checkCorrel(){
-    groupBox_2->setEnabled(checkCorrel->isChecked());
-}
-
-bool ExpertDiscoveryAdvSetDialog::check(const QLineEdit* lineE){
-    if(!lineE->validator()){
-        return false;
-    }
-    const QDoubleValidator* validator = qobject_cast<const QDoubleValidator*>(lineE->validator());
-    int pos = 0;
-        QString textValue=lineE->text();
-        if(validator->validate(textValue,pos)!=QValidator::Acceptable){
-        QString msg = QString("Entered value must be from %1 to %2").arg(validator->bottom()).arg(validator->top());
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Wrong parameters"), tr(msg.toStdString().c_str()));
-        mb->exec();
-        return false;
-    }
-    return true;
-}
-
-void ExpertDiscoveryAdvSetDialog::hideParameters(){
-    groupBox_2->hide();
-    fishCritEdit->hide();
-    label->hide();
-    label_2->hide();
-    condProbEdit->hide();
-    checkCorrel->hide();
-}
-
-
-}//namespace
-
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryAdvSetDialog.h b/src/plugins/expert_discovery/src/ExpertDiscoveryAdvSetDialog.h
deleted file mode 100644
index ad7faba..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryAdvSetDialog.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * 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.
- */
-
-#pragma once
-
-#include <ui/ui_ExpertDiscoveryAdvSetDialog.h>
-
-#include <QDoubleValidator>
-#include <QLineEdit>
-
-namespace U2 {
-
-class ExpertDiscoveryAdvSetDialog : public QDialog, public Ui_ExpertDiscoveryAdvSetDialog{
-    Q_OBJECT
-public:
-    ExpertDiscoveryAdvSetDialog(QWidget *parent,
-        double& dIntProbability,
-        double& dIntFisher,
-        int&    nMinComplexity,
-        int&    nMaxComplexity,
-        double& dMinPosCorrelation,
-        double& dMaxPosCorrelation,
-        double& dMinNegCorrelation,
-        double& dMaxNegCorrelation,
-        bool&   bCorrelationImportant);
-
-    virtual void accept();
-
-private:
-    double& dIntProbability;
-    double& dIntFisher;
-    int&    nMinComplexity;
-    int&    nMaxComplexity;
-    double& dMinPosCorrelation;
-    double& dMaxPosCorrelation;
-    double& dMinNegCorrelation;
-    double& dMaxNegCorrelation;
-    bool&   bCorrelationImportant;
-
-    bool check(const QLineEdit* lineE);
-
-    void hideParameters();
-
-protected slots:
-    void sl_checkCorrel();
-};
-
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryCSUtil.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryCSUtil.cpp
deleted file mode 100644
index 3cc62ff..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryCSUtil.cpp
+++ /dev/null
@@ -1,609 +0,0 @@
-#include "ExpertDiscoveryCSUtil.h"
-
-#include "DDisc/statmath.h"
-#include "DDisc/Context.h"
-
-namespace U2 {
-    CSFolder::CSFolder(CSFolder* pParentFolder)
-        : QObject(pParentFolder)
-    {
-        setName("");
-
-    }
-
-    CSFolder::~CSFolder(void)
-    {
-        /*CSelectedSignalsContainer& rSel = GlobalGetDocument()->GetSelectedSignalsContainer();
-        for (int id=0; id<(int) m_Signals.GetSize(); id++)
-        {
-            if (rSel.IsSelected(m_Signals[id]))
-                rSel.RemoveSignal(m_Signals[id]);
-        }*/
-    }
-
-    void CSFolder::clear()
-    {
-        for(uint i = 0; i < signalsVect.size(); i++){
-            delete signalsVect[i];
-        }
-        signalsVect.clear();
-
-        for(int i = 0; i < folders.size(); i++){
-            delete folders[i];
-        }
-        folders.clear();
-    }
-
-    QString CSFolder::getName() const
-    {
-        return strName;
-    }
-
-    void CSFolder::setName(QString strName)
-    {
-        this->strName = strName;
-    }
-
-    CSFolder* CSFolder::getParentFolder() const
-    {
-        return qobject_cast<CSFolder *>(parent());
-    }
-
-    void CSFolder::setParentFolder(CSFolder* pParentFolder)
-    {
-        setParent(pParentFolder);
-    }
-
-    int CSFolder::getSignalNumber() const
-    {
-        return (int) signalsVect.size();
-    }
-
-    Signal* CSFolder::getSignal(int id)
-    {
-        return signalsVect[id];
-    }
-
-    const Signal* CSFolder::getSignal(int id) const
-    {
-        return signalsVect[id];
-    }
-
-    int CSFolder::addSignal(Signal *pSignal, bool bReplace)
-    {
-        int nIndex = getSignalIndexByName(pSignal->getName().c_str());
-        if (nIndex>=0) {
-            if (bReplace) {
-                delete signalsVect[nIndex];
-                signalsVect.erase(signalsVect.begin()+nIndex);
-            }
-            else {
-                return -1;
-            }
-        }
-        signalsVect.push_back(pSignal);
-        return 0;
-
-    }
-
-    int	CSFolder::getSignalIndexByName(QString strName) const
-    {
-        int nSigNum = (int) signalsVect.size();
-        for (int i=0; i<nSigNum; i++) {
-            if (QString::compare(QString::fromStdString(signalsVect[i]->getName()), strName)==0)
-                return i;
-        }
-        return -1;
-    }
-
-    void CSFolder::deleteSignal(int id)
-    {
-        delete signalsVect[id];
-        signalsVect.erase(signalsVect.begin()+id);
-    }
-
-    int CSFolder::getFolderNumber() const
-    {
-        return folders.size();
-    }
-
-    CSFolder* CSFolder::getSubfolder(int id)
-    {
-        return folders[id];
-    }
-
-    const CSFolder* CSFolder::getSubfolder(int id) const
-    {
-        return folders[id];
-    }
-
-    int CSFolder::addFolder(CSFolder *pFolder, bool bReplace)
-    {
-        int nIndex = getFolderIndexByName(pFolder->getName());
-        if (nIndex>=0) {
-            if (bReplace)
-            {
-                CSFolder *pDestFolder = getSubfolder(nIndex);
-                for (int i=0; i<pFolder->getFolderNumber(); i++)
-                    pDestFolder->addFolder(pFolder->getSubfolder(i), true);
-                for (int i=0; i<pFolder->getSignalNumber(); i++)
-                    pDestFolder->addSignal(pFolder->getSignal(i), true);
-                return nIndex;
-            }
-            else return -1;
-        }
-        else {
-            pFolder->setParentFolder(this);
-
-            folders.append(pFolder);
-            return 0;
-        }
-    }
-
-    int	CSFolder::getFolderIndexByName(QString strName) const
-    {
-        int nFolderNum = (int) folders.size();
-        for (int i=0; i<nFolderNum; i++) {
-            if (QString::compare(folders[i]->getName(), strName)==0)
-                return i;
-        }
-        return -1;
-    }
-
-    QString	CSFolder::makeUniqueSignalName() const
-    {
-        QString strPrefix = "NewSignal";
-
-        int n = 0;
-        QString strResult = "NewSignal";
-        do{
-            strResult = strPrefix + QString("%1").arg(n);
-            n++;
-        }while (getSignalIndexByName(strResult)>=0);
-
-        return strResult;
-    }
-
-    QString	CSFolder::makeUniqueFolderName() const
-    {
-        QString strPrefix= "NewFolder";
-
-        int n = 0;
-        QString strResult = "NewFolder";
-        do{
-            strResult = strPrefix + QString("%1").arg(n);
-            n++;
-        }while (getFolderIndexByName(strResult)>=0);
-        return strResult;
-    }
-
-    void CSFolder::deleteFolder(int id)
-    {
-        delete folders[id];
-        folders.erase(folders.begin()+id);
-
-    }
-
-    bool CSFolder::doConstructPath(QString& strPath, const Signal* pSignal) const
-    {
-        for (int i=0; i<getSignalNumber(); i++) {
-            if (getSignal(i) == pSignal) {
-                strPath += QString("\\") + QString::fromStdString(pSignal->getName());
-                return true;
-            }
-        }
-        for (int i=0; i<getFolderNumber(); i++) {
-            const CSFolder* pFolder = getSubfolder(i);
-            QString strLocalPath = strPath + "\\" + pFolder->getName();
-            if (pFolder->doConstructPath(strLocalPath, pSignal)) {
-                strPath = strLocalPath;
-                return true;
-            }
-        }
-        return false;
-    }
-
-    QString CSFolder::getPathToSignal(const Signal* pSignal) const
-    {
-        QString strPath;
-        doConstructPath(strPath, pSignal);
-        return strPath;
-    }
-
-    const Signal* CSFolder::getSignalByPath(QString strPath) const
-    {
-        int nPos = strPath.indexOf("\\");
-        if (nPos == 0) {
-            strPath = strPath.right(strPath.length()-1);
-            nPos = strPath.indexOf("\\");
-        }
-        if (nPos <= 0) {
-            int nIndex = getSignalIndexByName(strPath);
-            if (nIndex < 0)
-                return NULL;
-            else
-                return getSignal(nIndex);
-        }
-
-        QString strFolderName(strPath.left(nPos));
-        QString strNewPath(strPath.right(strPath.length() - nPos - 1));
-        int nIndex = getFolderIndexByName(strFolderName);
-        if (nIndex < 0)
-            return NULL;
-        return getSubfolder(nIndex)->getSignalByPath(strNewPath);
-    }
-
-    CSFolder* CSFolder::clone() const
-    {
-        CSFolder* pFolder = new CSFolder;
-        pFolder->setName(getName());
-        for (int i=0; i<getFolderNumber(); i++)
-        {
-            pFolder->addFolder(getSubfolder(i)->clone());
-        }
-        for (int i=0; i<getSignalNumber(); i++)
-        {
-            pFolder->addSignal(getSignal(i)->clone());
-        }
-        return pFolder;
-    }
-
-EDProcessedSignal::EDProcessedSignal()
-    : m_dProbability		(UNDEFINED_VALUE)
-    , m_dFisher				(UNDEFINED_VALUE)
-    , m_dUl					(UNDEFINED_VALUE)
-    , m_dPosCoverage		(UNDEFINED_VALUE)
-    , m_dNegCoverage		(UNDEFINED_VALUE)
-
-{
-}
-
-EDProcessedSignal* EDProcessedSignal::processSignal(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase) {
-    EDProcessedSignal* pPS = NULL;
-    if (pOp==NULL || !pOp->check())
-        return NULL;
-    switch (pOp->getType()) {
-    case OP_INTERVAL	: pPS = new EDProcessedInterval(); break;
-    case OP_REITERATION	: pPS = new EDProcessedReiteration(); break;
-    case OP_DISTANCE	: pPS = new EDProcessedDistance(); break;
-    case OP_TS			: pPS = new EDProcessedTS(); break;
-    };
-    if (pPS != NULL) {
-        pPS->setYesSequenceNumber(pYesBase->getSize());
-        pPS->setNoSequenceNumber(pNoBase->getSize());
-        pPS->setTextDescription(pOp->getDescription().c_str());
-        //	for (int i=0; i<pOp->getArgumentNumber(); i++)
-        //		pPS->AddChild(ProcessSignal(pOp->getArgument(i), pYesBase, pNoBase));
-        pPS->makeStandardProcessing(pOp, pYesBase, pNoBase);
-        pPS->process(pOp, pYesBase, pNoBase);
-    }
-    return pPS;
-}
-
-void EDProcessedSignal::makeStandardProcessing(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase)
-{
-    bool first;
-    int a[2][2] = {{0,0},{0,0}};
-    int aseq[2][2] = {{0,0},{0,0}};
-    int nSeqNum = pYesBase->getSize();
-    Signal sig(pOp);
-    Context& rContext = sig.createCompartibleContext();
-    for (int i=0; i<nSeqNum; i++) {
-        first = true;
-        const Sequence& rSeq = pYesBase->getSequence(i);
-        Set set;
-        set.init((unsigned)rSeq.getSize());
-        while (sig.find(rSeq, rContext)) {
-            if (first) {
-                first = false;
-                aseq[1][1]++;
-            }
-            a[1][1]++;
-            int nPos = rContext.getPosition();
-            int nLen = rContext.getLength();
-            for (int k=nPos; k<nPos+nLen; k++) {
-                if (rContext.isSignalPart(k)){
-                    set.set(k);
-                    set.associate(k, rContext.getTSName(k));
-                }
-            }
-        }
-        if (first) {
-            a[0][1]++;
-            aseq[0][1]++;
-        }
-        setYesRealizations(i, set);
-        rContext.reset();
-    }
-
-    nSeqNum = pNoBase->getSize();
-    for (int i=0; i<nSeqNum; i++) {
-        first = true;
-        const Sequence& rSeq = pNoBase->getSequence(i);
-        Set set;
-        set.init((unsigned)rSeq.getSize());
-        while (sig.find(rSeq, rContext)) {
-            if (first) {
-                first = false;
-                aseq[1][0]++;
-            }
-            a[1][0]++;
-            int nPos = rContext.getPosition();
-            int nLen = rContext.getLength();
-            for (int k=nPos; k<nPos+nLen; k++) {
-                if (rContext.isSignalPart(k)) {
-                    set.set(k);
-                    set.associate(k, rContext.getTSName(k));
-                }
-            }
-        }
-        if (first) {
-            a[0][0]++;
-            aseq[0][0]++;
-        }
-        setNoRealizations(i, set);
-        rContext.reset();
-    }
-
-    QString str;
-
-    str = "Undefined ( ";
-    if (a[1][1]+a[1][0] != 0) {
-        m_dProbability = 100*a[1][1]/double(a[1][1]+a[1][0]);
-        str = QString("%1").arg(m_dProbability) + "% ( ";
-    }
-    str += QString("%1").arg(a[1][1]) + " / " + QString("%1").arg(a[1][1]+a[1][0]) + " )";
-    addProperty("Probability", str);
-
-    str = "Undefined ( ";
-    if (aseq[1][1]+aseq[0][1]!= 0) {
-        m_dPosCoverage = 100*aseq[1][1]/double(aseq[1][1]+aseq[0][1]);
-        str = QString("%1").arg(m_dPosCoverage)+"% ( ";
-    }
-    str += QString("%1").arg(aseq[1][1]) + " / " + QString("%1").arg(aseq[1][1]+aseq[0][1]) + " )";
-    addProperty("Pos. coverage", str);
-
-    str = "Undefined ( ";
-    if (aseq[1][0]+aseq[0][0]!= 0) {
-        m_dNegCoverage = 100*aseq[1][0]/double(aseq[1][0]+aseq[0][0]);
-        str = QString("%1").arg(m_dNegCoverage)+"% ( ";
-    }
-    str += QString("%1").arg(aseq[1][0]) + " / " + QString("%1").arg(aseq[1][0]+aseq[0][0]) + " )";
-    addProperty("Neg. coverage", str);
-
-
-    m_dFisher = fisher(a[0][0], a[0][1], a[1][0], a[1][1]);
-
-    addProperty("Fisher", QString("%1").arg(m_dFisher));
-
-    m_dUl = ul(a[0][0], a[0][1], a[1][0], a[1][1]);
-    addProperty("Ul", QString("%1").arg(m_dUl));
-
-    rContext.destroy();
-    sig.detach();
-}
-
-QString EDProcessedSignal::getPropertyValue(QString name) const
-{
-    for (int i=0; i<(int)m_arNames.size(); i++)
-    {
-        if (!m_arNames[i].compare(name, Qt::CaseInsensitive))
-            return m_arValues[i];
-    }
-    return QString();
-}
-
-void EDProcessedInterval::process(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase)
-{
-
-}
-
-void EDProcessedDistance::process(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase)
-{
-    OpDistance *pDist = dynamic_cast<OpDistance*>(pOp);
-    assert(pDist != 0);
-    int ai[2][2][2] = {{{0,0},{0,0}},{{0,0},{0,0}}};
-    const SequenceBase *pBasei[2] = {pYesBase, pNoBase};
-
-    Signal sig1(pDist->getArgument(0));
-    Signal sig2(pDist->getArgument(1));
-    Context& rContext1 = sig1.createCompartibleContext();
-    Context& rContext2 = sig2.createCompartibleContext();
-    for (int b=0; b<2; b++) {
-        int (&a)[2][2] = ai[b];
-        const SequenceBase* pBase = pBasei[b];
-        int nSeqNum = pBase->getSize();
-        int r1 = 0, r2 = 0;
-        for (int i=0; i<nSeqNum; i++) {
-            const Sequence& rSeq = pBase->getSequence(i);
-            if (sig1.find(rSeq, rContext1)) r1 = 1;
-            else r1 = 0;
-            if (sig2.find(rSeq, rContext2)) r2 = 1;
-            else r2 = 0;
-            a[r1][r2]++;
-            rContext1.reset();
-            rContext2.reset();
-        }
-    }
-    rContext1.destroy();
-    rContext2.destroy();
-    sig1.detach();
-    sig2.detach();
-
-    QString str;
-    double dCC = corelation(ai[0][0][0], ai[0][0][1], ai[0][1][0], ai[0][1][1]);
-    if (dCC == CORELATION_UNDEFINED)
-        str = "Undefined";
-    else
-        str =QString("%1").arg(dCC);
-    addProperty("Param. corelation on pos.", str);
-
-    dCC = corelation(ai[1][0][0], ai[1][0][1], ai[1][1][0], ai[1][1][1]);
-    if (dCC == CORELATION_UNDEFINED)
-        str = "Undefined";
-    else
-        str = QString("%1").arg(dCC);
-    addProperty("Param. corelation on neg.", str);
-}
-
-void EDProcessedReiteration::process(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase)
-{
-
-}
-
-void EDProcessedTS::process(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase)
-{
-
-}
-
-//////////////////////////////////////////////////////////////////////////////////
-
-SelectedSignalsContainer::SelectedSignalsContainer(void)
-{
-}
-
-SelectedSignalsContainer::~SelectedSignalsContainer(void)
-{
-}
-
-void SelectedSignalsContainer::AddSignal(const Signal* pSignal)
-{
-    m_SelectedSignals.insert(pSignal);
-}
-
-void SelectedSignalsContainer::RemoveSignal(const Signal* pSignal)
-{
-    SignalList::iterator it = m_SelectedSignals.find(pSignal);
-    if (m_SelectedSignals.end() != it)
-        m_SelectedSignals.erase(it);
-}
-
-const SignalList& SelectedSignalsContainer::GetSelectedSignals() const
-{
-    return m_SelectedSignals;
-}
-
-bool SelectedSignalsContainer::IsSelected(const Signal *pSignal) const
-{
-    SignalList::const_iterator it = m_SelectedSignals.find(pSignal);
-    if (m_SelectedSignals.end() != it)
-        return true;
-    else
-        return false;
-}
-
-void  SelectedSignalsContainer::save(QDataStream& ar, CSFolder& rootF){
-    SignalList::iterator it = m_SelectedSignals.begin();
-    int nSize = (int) m_SelectedSignals.size();
-    ar << nSize;
-    while (m_SelectedSignals.end() != it) {
-        QString strPath = rootF.getPathToSignal((*it));
-        assert(!strPath.isEmpty());
-        ar << strPath;
-        it++;
-    }
-}
-void  SelectedSignalsContainer::load(QDataStream& ar, CSFolder& rootF){
-    int nSize;
-    ar >> nSize;
-    for (int i=0; i<nSize; i++) {
-        QString strPath;
-        ar >> strPath;
-        const Signal* pSignal = rootF.getSignalByPath(strPath);
-        assert(pSignal != NULL);
-        if (pSignal)
-            AddSignal(pSignal);
-    }
-}
-
-RecognizationDataStorage::~RecognizationDataStorage(){
-    clear();
-}
-void RecognizationDataStorage::clear(){
-    foreach(RecognizationData* d, recMap){
-        if (d){
-            delete d;
-        }
-    }
-
-    recMap.clear();
-
-}
-void RecognizationDataStorage::addSequence(QString& seqName){
-    if (recMap.contains(seqName)){
-        RecognizationData *d = recMap.value(seqName);
-        if(d){
-            delete d;
-        }
-    }
-    recMap.insert(seqName, NULL);
-}
-bool RecognizationDataStorage::getRecognizationData(RecognizationData& data, const Sequence* seq, const SelectedSignalsContainer& rSe, U2OpStatus& st){
-
-    if (seq->isHasScore() && !(getRecData(seq) == NULL)){
-        data = *getRecData(seq);
-        return !data.empty();
-
-    }
-
-    const SignalList& rSelList = rSe.GetSelectedSignals();
-    int listSize = rSelList.size();
-    if (listSize == 0)
-        return false;
-
-    data.resize(seq->getSize());
-    fill(data.begin(), data.end(), 0);
-
-    st.setProgress(0);
-
-    SignalList::const_iterator iter = rSelList.begin();
-    int it = 0;
-    while (iter != rSelList.end()) {
-        st.setProgress(100*(it)/listSize);
-        const Signal* pSignal = (*iter);
-        Context& context = pSignal->createCompartibleContext();
-        while (pSignal->find(*seq,context)) {
-            if(st.isCanceled()){
-                return false;
-            }
-            double t = pSignal->getPriorProbability()/100;
-            if (t>=1) t = 0.999999;
-            int nPos = context.getPosition();
-            int not_null_length = 0;
-            double value = -log(1-t);
-            for (int i=0; i<context.getLength(); i++)
-            {
-                if (context.isSignalPart(nPos+i))
-                    not_null_length++;
-            }
-            value /= not_null_length;
-            for (int i=0; i<context.getLength(); i++)
-            {
-                if (context.isSignalPart(nPos+i))
-                    data[nPos + i] += value;
-            }
-        }
-        context.destroy();
-        iter++;
-        it++;
-    }
-    st.setProgress(100);
-    RecognizationData* d = recMap.value(QString::fromStdString(seq->getName()));
-    if(d != NULL){
-        delete d;
-    }
-    d = new RecognizationData(data);
-
-    return true;
-
-}
-RecognizationData* RecognizationDataStorage::getRecData(const Sequence* seq){
-    if(!recMap.contains(QString::fromStdString(seq->getName())) ){
-        return NULL;
-    }else{
-        return recMap.value(QString::fromStdString(seq->getName()));
-    }
-}
-
-
-} //namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryCSUtil.h b/src/plugins/expert_discovery/src/ExpertDiscoveryCSUtil.h
deleted file mode 100644
index 23a1e0d..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryCSUtil.h
+++ /dev/null
@@ -1,209 +0,0 @@
-#ifndef _U2_EXPERT_DIS_CSUTIL_H_
-#define _U2_EXPERT_DIS_CSUTIL_H_
-
-#include "DDisc/Signal.h"
-#include "DDisc/Sequence.h"
-#include "ExpertDiscoverySet.h"
-
-#include <U2Core/U2OpStatus.h>
-
-#include <vector>
-#include <QVector>
-#include <QMap>
-#include <set>
-
-#include <QObject>
-#include <QDataStream>
-
-
-namespace U2 {
-
-using std::set;
-using namespace DDisc;
-
-class CSFolder: public QObject{
-    Q_OBJECT
-public:
-    CSFolder(CSFolder* parentFolder = NULL);
-    ~CSFolder();
-
-    QString				getName() const;
-    void				setName(QString strName);
-
-    CSFolder*           getParentFolder() const;
-    void				setParentFolder(CSFolder* pParentFolder);
-
-    void				clear();
-
-    int					getSignalNumber() const;
-    Signal*				getSignal(int id);
-    const Signal*		getSignal(int id) const;
-    int					addSignal(Signal *pSignal, bool bReplace = false);
-    int					getSignalIndexByName(QString strName) const;
-    void				deleteSignal(int id);
-    QString				makeUniqueSignalName() const;
-    CSFolder*			clone() const;
-
-    int					getFolderNumber() const;
-    CSFolder*			getSubfolder(int id);
-    const CSFolder*	    getSubfolder(int id) const;
-    int					addFolder(CSFolder *pFolder, bool bMerge = false);
-    int					getFolderIndexByName(QString strName) const;
-    void				deleteFolder(int id);
-    QString				makeUniqueFolderName() const;
-
-    QString				getPathToSignal(const Signal* pSignal) const;
-    const Signal*		getSignalByPath(QString strPath) const;
-
-protected:
-    bool				doConstructPath(QString& strPath, const Signal* pSignal) const;
-
-private:
-    std::vector<Signal*>	signalsVect;
-    QVector<CSFolder*>	    folders;
-    QString					strName;
-};
-
-#define UNDEFINED_VALUE (double) 0xFFFFFFFF
-
-class EDProcessedSignal
-{
-protected:
-    virtual void process(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase) {}
-
-public:
-    virtual ~EDProcessedSignal() {}
-    static EDProcessedSignal* processSignal(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase);
-    void makeStandardProcessing(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase);
-    const Set&	getYesRealizations(int iSequence) const { return m_arYesRealizations[iSequence];}
-    const Set&	getNoRealizations(int iSequence)  const { return m_arNoRealizations[iSequence];}
-    QString	getTextDescription() const { return m_strDescription; }
-
-    int			getPropertyNumber() const { return (int) m_arNames.size(); }
-    QString		getPropertyName (int iProperty) const { return m_arNames[iProperty];  }
-    QString		getPropertyValue(int iProperty) const { return m_arValues[iProperty]; }
-    QString     getPropertyValue(QString name) const;
-    int getYesSequenceNumber() const {
-        return (int)m_arYesRealizations.size();
-    }
-    int getNoSequenceNumber() const {
-        return (int)m_arNoRealizations.size();
-    }
-
-    double getProbability() const {
-        return m_dProbability;
-    }
-
-    double getFisher() const {
-        return m_dFisher;
-    }
-
-    double getUl() const {
-        return m_dUl;
-    }
-
-    double getPosCoverage() const {
-        return m_dPosCoverage;
-    }
-
-    double getNegCoverage() const {
-        return m_dNegCoverage;
-    }
-
-protected:
-    void addProperty(QString strName, QString strValue) {
-        m_arNames.push_back(strName);
-        m_arValues.push_back(strValue);
-    }
-    EDProcessedSignal();
-private:
-    const EDProcessedSignal& operator=(const EDProcessedSignal&);
-    EDProcessedSignal(const EDProcessedSignal&);
-    void setYesRealizations(int iSequence, const Set& set) {
-        m_arYesRealizations[iSequence] = set;
-    }
-    void setNoRealizations(int iSequence, const Set& set) {
-        m_arNoRealizations[iSequence] = set;
-    }
-    void setYesSequenceNumber(int nSeqNum) {
-        m_arYesRealizations.resize(nSeqNum);
-    }
-    void setNoSequenceNumber(int nSeqNum) {
-        m_arNoRealizations.resize(nSeqNum);
-    }
-    void setTextDescription(QString strDesc) {
-        m_strDescription = strDesc;
-    }
-
-private:
-    QVector<QString> m_arNames;
-    QVector<QString> m_arValues;
-    QString			m_strDescription;
-    std::vector<Set>		m_arYesRealizations;
-    std::vector<Set>		m_arNoRealizations;
-    double			m_dProbability;
-    double			m_dFisher;
-    double			m_dUl;
-    double			m_dPosCoverage;
-    double			m_dNegCoverage;
-};
-
-
-class EDProcessedInterval : public EDProcessedSignal {
-protected:
-    virtual void process(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase);
-};
-
-class EDProcessedDistance : public EDProcessedSignal {
-protected:
-    virtual void process(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase);
-};
-
-class EDProcessedReiteration : public EDProcessedSignal {
-protected:
-    virtual void process(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase);
-};
-
-
-class EDProcessedTS : public EDProcessedSignal {
-protected:
-    virtual void process(Operation *pOp, const SequenceBase *pYesBase, const SequenceBase *pNoBase);
-};
-
-using std::set;
-typedef set<const Signal*> SignalList;
-
-class SelectedSignalsContainer
-{
-public:
-    SelectedSignalsContainer(void);
-    ~SelectedSignalsContainer(void);
-    void AddSignal(const Signal* pSignal);
-    void RemoveSignal(const Signal* pSignal);
-    const SignalList& GetSelectedSignals() const;
-    bool IsSelected(const Signal *pSignal) const;
-    void save(QDataStream& ar, CSFolder& rootF);
-    void load(QDataStream& ar, CSFolder& rootF);
-    void Clear() { m_SelectedSignals.clear(); }
-private:
-    SignalList m_SelectedSignals;
-};
-
-typedef std::vector<double> RecognizationData;
-
-class RecognizationDataStorage
-{
-public:
-    ~RecognizationDataStorage();
-    void clear();
-    void addSequence(QString& seqName);
-    bool getRecognizationData(RecognizationData& d, const Sequence* seq, const SelectedSignalsContainer& rSe, U2OpStatus& st);
-
-private:
-    RecognizationData* getRecData(const Sequence* seq);
-    QMap<QString, RecognizationData*> recMap;
-};
-
-} //namespace
-
-#endif
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryControlDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryControlDialog.cpp
deleted file mode 100644
index ef344cc..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryControlDialog.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
-* 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 <QMessageBox>
-
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Gui/DialogUtils.h>
-#include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Core/QObjectScopedPointer.h>
-#include <U2Gui/U2FileDialog.h>
-
-#include "ExpertDiscoveryControlDialog.h"
-
-namespace U2 {
-
-ExpertDiscoveryControlDialog::ExpertDiscoveryControlDialog(QWidget *parent)
-: QDialog(parent){
-
-    setupUi(this);
-    new HelpButton(this, buttonBox, "17467810");
-
-    connect(openFirstButton, SIGNAL(clicked()), SLOT(sl_openFirstFile()));
-
-    filter = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::SEQUENCE, true)+
-        ";;" + DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, false);
-
-}
-
-void ExpertDiscoveryControlDialog::accept(){
-    Q_ASSERT(firstFileEdit);
-
-    firstFileName = firstFileEdit->text();
-
-
-    if (!firstFileName.isEmpty()) {
-        QDialog::accept();
-    }else {
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Select files"), tr("Select files for ExpertDiscovery"));
-        mb->exec();
-        CHECK(!mb.isNull(), );
-    }
-}
-
-void ExpertDiscoveryControlDialog::sl_openFirstFile(){
-    LastUsedDirHelper lod("ExpertDiscovery control sequences file");
-    lod.url = U2FileDialog::getOpenFileName(NULL, tr("Open control sequences file"), lod.dir, filter);
-
-    Q_ASSERT(firstFileEdit);
-    if (!lod.url.isEmpty()) {
-        firstFileEdit->setText(lod.url);
-    }
-}
-
-}//namespace
-
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryControlDialog.h b/src/plugins/expert_discovery/src/ExpertDiscoveryControlDialog.h
deleted file mode 100644
index 13d6dbe..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryControlDialog.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
-* 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 _EXPERT_DISCOVERY_CONTROL_DIALOG_H_
-#define _EXPERT_DISCOVERY_CONTROL_DIALOG_H_
-
-#include <ui/ui_ExpertDiscoveryControlDialog.h>
-
-namespace U2 {
-
-class ExpertDiscoveryControlDialog : public QDialog, public Ui_ExpertDiscoveryControlDialog{
-    Q_OBJECT
-public:
-    ExpertDiscoveryControlDialog(QWidget *parent);
-
-    virtual void accept();
-
-    QString getFirstFileName() const {return firstFileName;}
-
-protected slots:
-    void sl_openFirstFile();
-
-private:
-    QString firstFileName;
-    QString filter;
-};
-
-} // namespace
-
-#endif // _EXPERT_DISCOVERY_CONTROL_DIALOG_H_
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryControlMrkDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryControlMrkDialog.cpp
deleted file mode 100644
index f7063e8..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryControlMrkDialog.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * 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 <QMessageBox>
-
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Gui/DialogUtils.h>
-#include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Core/QObjectScopedPointer.h>
-#include <U2Gui/U2FileDialog.h>
-
-#include "ExpertDiscoveryControlMrkDialog.h"
-
-namespace U2 {
-
-ExpertDiscoveryControlMrkDialog::ExpertDiscoveryControlMrkDialog(QWidget *parent)
-: QDialog(parent){
-
-    setupUi(this);
-    new HelpButton(this, buttonBox, "17467810");
-
-    connect(openFirstButton, SIGNAL(clicked()), SLOT(sl_openFirstFile()));
-
-    filter = DialogUtils::prepareFileFilter("Markup files", QStringList() << "xml" << "gb");
-
-}
-
-void ExpertDiscoveryControlMrkDialog::accept(){
-    Q_ASSERT(firstFileEdit);
-
-    firstFileName = firstFileEdit->text();
-
-
-    if (!firstFileName.isEmpty()) {
-        QDialog::accept();
-    }else {
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Select files"), tr("Select files for ExpertDiscovery"));
-        mb->exec();
-        CHECK(!mb.isNull(), );
-    }
-}
-
-void ExpertDiscoveryControlMrkDialog::sl_openFirstFile(){
-    LastUsedDirHelper lod("ExpertDiscovery control sequences markup file");
-    lod.url = U2FileDialog::getOpenFileName(NULL, tr("Open control sequences markup file"), lod.dir, filter);
-
-    Q_ASSERT(firstFileEdit);
-    if (!lod.url.isEmpty()) {
-        firstFileEdit->setText(lod.url);
-    }
-}
-
-}//namespace
-
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryControlMrkDialog.h b/src/plugins/expert_discovery/src/ExpertDiscoveryControlMrkDialog.h
deleted file mode 100644
index b9a0b2b..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryControlMrkDialog.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 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 _EXPERT_DISCOVERY_CONTROL_MRK_DIALOG_H_
-#define  _EXPERT_DISCOVERY_CONTROL_MRK_DIALOG_H_
-
-#include <ui/ui_ExpertDiscoveryControlMrkDialog.h>
-
-namespace U2 {
-
-class ExpertDiscoveryControlMrkDialog : public QDialog, public Ui_ExpertDiscoveryControlMrkDialog{
-    Q_OBJECT
-public:
-    ExpertDiscoveryControlMrkDialog(QWidget *parent);
-
-    virtual void accept();
-
-    QString getFirstFileName() const {return firstFileName;}
-
-protected slots:
-    void sl_openFirstFile();
-
-private:
-    QString firstFileName;
-    QString filter;
-};
-
-} // namespace
-
-#endif // _EXPERT_DISCOVERY_CONTROL_MRK_DIALOG_H_
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryData.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryData.cpp
deleted file mode 100644
index 8f6d620..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryData.cpp
+++ /dev/null
@@ -1,1061 +0,0 @@
-/**
- * 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 <fstream>
-#include <iomanip>
-#include <set>
-
-#include <QDomDocument>
-#include <QFile>
-#include <QFileDialog>
-#include <QMessageBox>
-#include <QProgressDialog>
-#include <QTime>
-#include <qmath.h>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/DNATranslation.h>
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/TextUtils.h>
-#include <U2Core/U2OpStatusUtils.h>
-
-#include <U2Core/QObjectScopedPointer.h>
-
-#include <U2View/WebWindow.h>
-
-#include "ExpertDiscoveryData.h"
-#include "ExpertDiscoverySetupRecBoundDialog.h"
-#include "DDisc/Context.h"
-
-namespace U2 {
-
-const std::string ExpertDiscoveryData::FAMILY_LETTERS = "_LETTERS_";
-const std::string ExpertDiscoveryData::FAMILY_LETTERS_METHOD = "EXPERT_DISCOVERY_LETTERS_MARKUP_METHOD";
-const QString ExpertDiscoveryData::FAMILY_ED_SIGNAL = "ExpertDiscovery_Signals";
-const QString ExpertDiscoveryData::FAMILY_ED_METHOD = "EXPERT_DISCOVERY_METHOD";
-
-ExpertDiscoveryData::ExpertDiscoveryData (){
-    recognizationBound = 0;
-    modified = false;
-}
-
-void ExpertDiscoveryData::setPosBase(const QList<GObject*> & objects){
-    setBase(objects, posBase);
-}
-void ExpertDiscoveryData::setNegBase(const QList<GObject*> & objects){
-    setBase(objects, negBase);
-}
-
-void ExpertDiscoveryData::setConBase(const QList<GObject*> & objects){
-    setBase(objects, conBase);
-}
-
-inline Sequence ExpertDiscoveryData::prepareSequence( const GObject* obj ) const{
-    U2SequenceObject* seq = (U2SequenceObject*)obj;
-    U2OpStatusImpl os;
-    QByteArray seqArr =  seq->getWholeSequenceData(os);
-    CHECK_OP(os, Sequence());
-    std::string seqStr = std::string(seqArr.data(),seqArr.length());
-    Sequence seqReady = Sequence(obj->getGObjectName().toStdString(), seqStr);
-
-    return seqReady;
-}
-inline Sequence ExpertDiscoveryData::prepareSequence(MAlignmentRow& row) const{
-    const QByteArray& seqArr = row.getData();
-    std::string seqStr = std::string(seqArr.data(),seqArr.length());
-    Sequence seqReady = Sequence(row.getName().toStdString(), seqStr);
-
-    return seqReady;
-}
-
-void ExpertDiscoveryData::clearContrBase(){
-    conBase.clear();
-}
-void ExpertDiscoveryData::clearContrAnnot(){
-    conAnn.clear();
-}
-
-void ExpertDiscoveryData::markupLetters(void){
-    clearScores();
-    // If already exist return
-    if (isLettersMarkedUp())
-        return;
-
-    // Adding new signal family for letters
-    std::string strFamilyName = ExpertDiscoveryData::FAMILY_LETTERS;
-    std::string strMethodName = ExpertDiscoveryData::FAMILY_LETTERS_METHOD;
-
-    const char letter[] = {'A','C','T','G','\0'};
-    Family letters;
-    letters.setName(strFamilyName);
-
-    for (int i=0; letter[i] != 0; i++) {
-        MetaInfo mi;
-        mi.setName(char2string(letter[i]));
-        mi.setNo(i);
-        mi.setMethodName(strMethodName);
-        letters.AddInfo(mi);
-    }
-
-    desc.addFamily(letters);
-
-    markupLetters(posBase, posAnn);
-    markupLetters(negBase, negAnn);
-
-    if (conBase.getSize() != 0)
-        markupLetters(conBase, conAnn);
-
-    setModifed();
-
-}
-void ExpertDiscoveryData::markupLetters(SequenceBase& rBase, MarkingBase& rAnn){
-    std::string strFamilyName = ExpertDiscoveryData::FAMILY_LETTERS;
-    const char letter[] = {'A','C','T','G','\0'};
-    int size = rBase.getSize();
-    std::string seq;
-    for (int i=0; i<size; i++) {
-        seq = rBase.getSequence(i).getSequence();
-
-        Marking mrk;
-        try {
-            mrk = rAnn.getMarking(i);
-        }
-        catch (exception) {
-        }
-        int len = (int)seq.size();
-        for (int j=0; j<len; j++) {
-            if (strchr(letter, seq[j]) != NULL)
-                mrk.set(char2string(seq[j]), strFamilyName, Interval(j,j));
-        }
-
-        rAnn.setMarking(i, mrk);
-    }
-    rBase.setMarking(rAnn);
-}
-
-void ExpertDiscoveryData::markupLetters(Sequence& edSeq){
-    std::string strFamilyName = ExpertDiscoveryData::FAMILY_LETTERS;
-    const char letter[] = {'A','C','T','G','\0'};
-    std::string seq;
-    seq = edSeq.getSequence();
-
-    Marking mrk;
-    int len = (int)seq.size();
-    for (int j=0; j<len; j++) {
-        if (strchr(letter, seq[j]) != NULL)
-            mrk.set(char2string(seq[j]), strFamilyName, Interval(j,j));
-    }
-    edSeq.setSequenceMarking(mrk);
-}
-void ExpertDiscoveryData::clearScores(){
-    posBase.clearScores();
-    negBase.clearScores();
-    conBase.clearScores();
-}
-bool ExpertDiscoveryData::updateScore(Sequence& rSeq){
-    if (rSeq.isHasScore())
-        return true;
-    rSeq.setScore(0);
-    rSeq.setHasScore(false);
-
-    setModifed();
-
-    // Evaluation of sequence score
-    double dScore = 0;
-
-    U2OpStatus2Log st;
-    RecognizationData data;
-    if (!recDataStorage.getRecognizationData(data, &rSeq, selectedSignals, st))
-        return false;
-    for (int i=0; i<(int)data.size(); i++)
-        dScore += data[i];
-
-    rSeq.setScore(dScore);
-    rSeq.setHasScore(true);
-    return true;
-}
-
-void ExpertDiscoveryData::optimizeRecognizationBound(){
-    double dPosScore = 0;
-    for (int i=0; i<posBase.getSize(); i++)
-    {
-        Sequence& rSeq = posBase.getSequence(i);
-        if (rSeq.isHasScore() || updateScore(rSeq))
-        {
-            dPosScore += rSeq.getScore();
-        }
-    }
-    dPosScore /= posBase.getSize();
-
-    setModifed();
-
-    double dNegScore = 0;
-    for (int i=0; i<negBase.getSize(); i++)
-    {
-        Sequence& rSeq = negBase.getSequence(i);
-        if (rSeq.isHasScore() || updateScore(rSeq))
-        {
-            dNegScore += rSeq.getScore();
-        }
-    }
-    dNegScore /= negBase.getSize();
-    recognizationBound = (dPosScore + dNegScore)/2;
-}
-
-void ExpertDiscoveryData::setRecBound(){
-    if (!updateScores())
-        return;
-    vector<double> vPosScore = posBase.getScores();
-    vector<double> vNegScore = negBase.getScores();
-
-    QObjectScopedPointer<ExpertDiscoverySetupRecBoundDialog> dlg = new ExpertDiscoverySetupRecBoundDialog(recognizationBound, vPosScore, vNegScore);
-    dlg->exec();
-    CHECK(!dlg.isNull(), );
-
-    if (QDialog::Accepted == dlg->result()) {
-        recognizationBound = dlg->getRecognizationBound();
-        conBase.clearScores();
-    }
-
-    setModifed();
-}
-
-bool ExpertDiscoveryData::updateScores(){
-
-    QProgressDialog pd(tr("Setting up recognition bound. Please wait"), tr("Cancel"), 0, 100);
-    pd.setWindowModality(Qt::WindowModal);
-    pd.show();
-
-    pd.setLabelText(tr("Updating positive sequences"));
-    pd.setValue(0);
-
-    int sizeTotal = posBase.getSize() + negBase.getSize() + conBase.getSize();
-    for (int i=0; i<posBase.getSize(); i++){
-        if (pd.wasCanceled())
-            return false;
-        Sequence& rSeq = posBase.getSequence(i);
-        if (!rSeq.isHasScore()){
-            updateScore(rSeq);
-        }
-        pd.setValue((100*i)/sizeTotal);
-    }
-
-    pd.setLabelText(tr("Updating negative sequences"));
-    for (int i=0; i<negBase.getSize(); i++)
-    {
-        if (pd.wasCanceled())
-            return false;
-        Sequence& rSeq = negBase.getSequence(i);
-        if (!rSeq.isHasScore())
-        {
-            updateScore(rSeq);
-        }
-        pd.setValue((100*(i+posBase.getSize()))/sizeTotal);
-    }
-
-    pd.setLabelText(tr("Updating control sequences"));
-    for (int i=0; i<conBase.getSize(); i++)
-    {
-        if (pd.wasCanceled())
-            return false;
-        Sequence& rSeq = conBase.getSequence(i);
-        if (!rSeq.isHasScore())
-        {
-            updateScore(rSeq);
-        }
-        pd.setValue((100*(i+posBase.getSize() + negBase.getSize()))/sizeTotal);
-    }
-
-    return true;
-}
-
-bool ExpertDiscoveryData::isLettersMarkedUp(void) const
-{
-    std::string family = ExpertDiscoveryData::FAMILY_LETTERS;
-    try {
-        desc.getSignalFamily(family);
-    }
-    catch (exception&) {
-        return false;
-    }
-
-    return true;
-}
-
-std::string ExpertDiscoveryData::char2string(char ch) {
-    char ar[] = {ch, 0};
-    return std::string(ar);
-}
-
-void ExpertDiscoveryData::setBase(const QList<GObject*> &objects, SequenceBase& base){
-    foreach(GObject* obj, objects){
-        if(obj->getGObjectType() == GObjectTypes::SEQUENCE){
-            Sequence seq = prepareSequence(obj);
-            seq.setHasScore(false);
-            base.addSequence(seq);
-            QString name=QString::fromStdString(seq.getName());
-            recDataStorage.addSequence(name);
-        }else if(obj->getGObjectType() == GObjectTypes::MULTIPLE_ALIGNMENT){
-            MAlignmentObject* mobj =  qobject_cast<MAlignmentObject*>(obj);
-            if(mobj){
-                const MAlignment& ma = mobj->getMAlignment();
-                const QList<MAlignmentRow>& rows = ma.getRows();
-                foreach(MAlignmentRow row, rows){
-                    Sequence seq = prepareSequence(row);
-                    seq.setHasScore(false);
-                    base.addSequence(seq);
-                    QString name=QString::fromStdString(seq.getName());
-                    recDataStorage.addSequence(name);
-                }
-            }
-        }
-    }
-}
-
-void ExpertDiscoveryData::switchSelection(EDProjectItem* pItem, bool upd){
-    EDPICS* pPICS = dynamic_cast<EDPICS*>(pItem);
-    if (!pPICS)
-        return;
-    Signal* pSignal = const_cast<Signal*>(pPICS->getSignal());
-    if (!pSignal->check())
-        return;
-    if (selectedSignals.IsSelected(pSignal))
-        selectedSignals.RemoveSignal(pSignal);
-    else {
-        if (!pSignal->isPriorParamsDefined()) {
-            onSetCurrentSignalParamsAsPrior(pPICS, upd);
-        }
-
-        selectedSignals.AddSignal(pSignal);
-    }
-    clearScores();
-
-    setModifed();
-}
-
-bool ExpertDiscoveryData::isSignalSelected(const EDProjectItem* pItem){
-    const EDPICS* signal = dynamic_cast<const EDPICS*>(pItem);
-    if(!signal){
-        return false;
-    }
-    return selectedSignals.IsSelected(signal->getSignal());
-}
-
-void ExpertDiscoveryData::onSetCurrentSignalParamsAsPrior(EDPICS *pItem, bool bUpdate){
-    Signal* pSignal = const_cast<Signal*>(pItem->getSignal());
-    const EDProcessedSignal* pPS = pItem->getProcessedSignal(*this);
-    if (pPS && pSignal)
-    {
-        pSignal->setPriorParamsDefined(true);
-        pSignal->setPriorProbability(pPS->getProbability());
-        pSignal->setPriorFisher(pPS->getFisher());
-        pSignal->setPriorPosCoverage(pPS->getPosCoverage());
-        pSignal->setPriorNegCoverage(pPS->getNegCoverage());
-        pItem->update(false);
-        if (bUpdate) {
-            //UpdateAllViews(NULL, CURRENT_ITEM_CHANGED, pItem);
-            clearScores();
-        }
-        setModifed();
-    }
-}
-void ExpertDiscoveryData::onClearSignalPriorParams(EDPICS *pItem){
-    Signal* pSignal = const_cast<Signal*>(pItem->getSignal());
-    if (pSignal)
-    {
-        pSignal->setPriorParamsDefined(false);
-        pSignal->setPriorProbability(0);
-        pSignal->setPriorFisher(1);
-        pSignal->setPriorPosCoverage(0);
-        pSignal->setPriorNegCoverage(0);
-        pItem->update(false);
-        //UpdateAllViews(NULL, CURRENT_ITEM_CHANGED, pItem);
-        clearScores();
-        setModifed();
-    }
-}
-
-SequenceType ExpertDiscoveryData::getSequenceTypeByName(const QString& seqName){
-    if(posBase.getObjNo(seqName.toStdString().c_str()) != -1){
-        return POSITIVE_SEQUENCE;
-    }else if(negBase.getObjNo(seqName.toStdString().c_str()) != -1){
-        return NEGATIVE_SEQUENCE;
-    }else if(conBase.getObjNo(seqName.toStdString().c_str()) != -1){
-        return CONTROL_SEQUENCE;
-    }else{
-        return UNKNOWN_SEQUENCE;
-    }
-}
-int ExpertDiscoveryData::getSequenceIndex(const QString& seqName, SequenceType type){
-    switch(type){
-        case POSITIVE_SEQUENCE:
-            return posBase.getObjNo(seqName.toStdString().c_str());
-        case NEGATIVE_SEQUENCE:
-            return negBase.getObjNo(seqName.toStdString().c_str());
-        case CONTROL_SEQUENCE:
-            return conBase.getObjNo(seqName.toStdString().c_str());
-        default:
-            return -1;
-    }
-}
-RecognizationData ExpertDiscoveryData::getRecognitionData(int seqIndex, SequenceType type){
-    RecognizationData d;
-
-    SequenceBase base;
-    switch(type){
-        case POSITIVE_SEQUENCE:
-            base = posBase;
-            break;
-        case NEGATIVE_SEQUENCE:
-            base = negBase;
-            break;
-        case CONTROL_SEQUENCE:
-            base = conBase;
-            break;
-        default:
-            return d;
-    }
-    U2OpStatus2Log st;
-    const Sequence& seq = base.getSequence(seqIndex);
-
-    recDataStorage.getRecognizationData(d, &seq, selectedSignals, st);
-    return d;
-}
-
-bool ExpertDiscoveryData::loadMarkup(const QString& firstF, const QString& secondF, const QString& thirdF, bool generateDescr){
-    clearScores();
-    posAnn.clear();
-    negAnn.clear();
-    desc.clear();
-
-    QString strPosName = firstF;
-    try {
-        if (strPosName.right(4).compare(".xml", Qt::CaseInsensitive) == 0) {
-            if (!loadAnnotation(posAnn, posBase, strPosName))
-                throw std::exception();
-        }
-        else {
-            ifstream fPosAnn(strPosName.toStdString().c_str());
-            posAnn.load(fPosAnn);
-        }
-     }
-     catch (exception& ex) {
-        posAnn.clear();
-        QString str = "Positive annotation: ";
-        str += ex.what();
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), str);
-        mb->exec();
-        return false;
-     }
-
-    QString strNegName = secondF;
-    try {
-        if (strPosName.right(4).compare(".xml", Qt::CaseInsensitive) == 0) {
-            if (!loadAnnotation(negAnn, negBase, strNegName))
-                throw std::exception();
-        }
-        else {
-            ifstream fNegAnn(strNegName.toStdString().c_str());
-            negAnn.load(fNegAnn);
-        }
-    }
-    catch (exception& ex) {
-        posAnn.clear();
-        negAnn.clear();
-        QString str = "Negative annotation: ";
-        str += ex.what();
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), str);
-        mb->exec();
-        return false;
-    }
-
-    try {
-        if (generateDescr) {
-            if (!generateDescription())
-                throw std::exception();
-        }
-        else {
-            ifstream fDesc( thirdF.toStdString().c_str() );
-            desc.load(fDesc);
-        }
-    }
-    catch (exception& ex) {
-        posAnn.clear();
-        negAnn.clear();
-        desc.clear();
-        QString str = "Description: ";
-        str += ex.what();
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), str);
-        mb->exec();
-        return false;
-    }
-
-    posBase.setMarking(posAnn);
-    negBase.setMarking(negAnn);
-
-    return true;
-}
-
-bool ExpertDiscoveryData::loadAnnotation(MarkingBase& base, const SequenceBase& seqBase, QString strFileName){
-
-    QDomDocument pDoc;
-    QFile xmlFile (strFileName);
-    if(!xmlFile.open(QIODevice::ReadOnly)){
-        return false;
-    }
-    if (!pDoc.setContent(&xmlFile)) {
-        xmlFile.close();
-        return false;
-    }
-    xmlFile.close();
-
-    QDomElement pFamilies = pDoc.documentElement();
-    if(pFamilies.tagName() != "markup"){
-        return false;
-    }
-
-    QDomNode pFamilyNode = pFamilies.firstChild();
-    while(!pFamilyNode.isNull()){
-        QDomElement pFamily = pFamilyNode.toElement();
-        if(pFamily.tagName() == "family"){
-            QString familyName = pFamily.attribute("name");
-            //family
-
-            QDomNode pSignalNode = pFamily.firstChild();
-            if(pSignalNode.toElement().tagName() != "signal"){
-                return false;
-            }
-            while(!pSignalNode.isNull()){
-                QDomElement pSignal = pSignalNode.toElement();
-                if(pSignal.tagName() == "signal"){
-                    QString signalName = pSignal.attribute("name");
-                    //signal
-
-                    QDomNode pSequenceNode = pSignal.firstChild();
-                    if(pSequenceNode.toElement().tagName() != "sequence"){
-                        return false;
-                    }
-                    while(!pSequenceNode.isNull()){
-                        QDomElement pSequence = pSequenceNode.toElement();
-                        if(pSequence.tagName() == "sequence"){
-                            QString sequenceId = pSequence.attribute("id");
-                            int cutPos = sequenceId.indexOf(">");
-                            if(cutPos >= 0){
-                                sequenceId = sequenceId.right(sequenceId.length() - cutPos - 1);
-                            }
-                            sequenceId = sequenceId.trimmed();
-
-                            //sequence
-
-                            int objN = seqBase.getObjNo(sequenceId.toStdString().c_str());
-                            if(objN >= 0){
-                                QDomNode pInstanceNode = pSequence.firstChild();
-                                if(pInstanceNode.toElement().tagName() != "instance"){
-                                    return false;
-                                }
-                                Marking mrk;
-                                try {
-                                    mrk = base.getMarking(objN);
-                                }
-                                catch (...) {}
-                                while(!pInstanceNode.isNull()){
-                                    QDomElement pInstance = pInstanceNode.toElement();
-                                    if(pInstance.tagName() == "instance"){
-                                        int startPos = pInstance.attribute("start").toInt() - 1;
-                                        int endPos = pInstance.attribute("end").toInt() - 1;
-                                        if (endPos >= startPos && startPos >= 0) {
-                                            mrk.set(signalName.toStdString(), familyName.toStdString(), DDisc::Interval(startPos, endPos));
-                                        }
-                                        //instance
-                                    }
-                                    pInstanceNode = pInstanceNode.nextSibling();
-                                }
-                                base.setMarking(objN, mrk);
-                            }
-
-                        }
-                        pSequenceNode = pSequenceNode.nextSibling();
-                    }
-                }
-                pSignalNode = pSignalNode.nextSibling();
-            }
-        }
-        pFamilyNode = pFamilyNode.nextSibling();
-    }
-    return true;
-
-}
-
-bool ExpertDiscoveryData::generateDescription(bool clearDescr){
-    if(clearDescr){
-        desc.clear();
-    }
-    SequenceBase* seqBase = &posBase;
-    MarkingBase* base = &posAnn;
-    for (int k=0; k<2; k++) {
-        for (int i=0; i<seqBase->getSize(); i++) {
-            try {
-                Marking mrk = base->getMarking(i);
-                set<std::string> families = mrk.getFamilies();
-                set<std::string>::iterator i = families.begin();
-                while (i != families.end()) {
-                    set<std::string> edsignals = mrk.getSignals(*i);
-                    set<std::string>::iterator j = edsignals.begin();
-                    while (j != edsignals.end()) {
-                        MetaInfo mi;
-                        mi.setName(*j);
-                        mi.setMethodName("Generated");
-                        desc.insert((*i).c_str(), mi);
-                        j++;
-                    }
-                    i++;
-                }
-            }
-            catch (...) {}
-        }
-        seqBase = &negBase;
-        base = &negAnn;
-    }
-    return true;
-}
-
-void ExpertDiscoveryData::loadControlSequenceAnnotation(const QString& fileName){
-    ifstream in(fileName.toStdString().c_str());
-    if (!in.is_open()) {
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), "Can't open file");
-        mb->exec();
-        CHECK(!mb.isNull(), );
-    }
-    try {
-        conAnn.load(in);
-        conBase.setMarking(conAnn);
-    }
-    catch (exception& ) {
-        conBase.clearMarking();
-        conAnn.clear();
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), "Error loading control markup");
-        mb->exec();
-        CHECK(!mb.isNull(), );
-    }
-    if (isLettersMarkedUp() && conBase.getSize() != 0) {
-        markupLetters(conBase, conAnn);
-    }
-}
-
-void ExpertDiscoveryData::cleanup(){
-    recDataStorage.clear();
-    selectedSignals.Clear();
-
-    posBase.clear();
-    negBase.clear();
-    conBase.clear();
-
-    fileNamesMap.clear();
-
-    desc.clear();
-    posAnn.clear();
-    negAnn.clear();
-    conAnn.clear();
-
-    rootFolder.clear();
-
-    clearSelectedSequencesList();
-}
-
-void ExpertDiscoveryData::addSequenceToSelected(EDPISequence* seq){
-    selSequences.append(seq);
-}
-void ExpertDiscoveryData::clearSelectedSequencesList(){
-    selSequences.clear();
-}
-bool ExpertDiscoveryData::isSequenceSelected(EDPISequence* seq){
-    return selSequences.contains(seq);
-}
-
-QList<EDPISequence*> ExpertDiscoveryData::getSelectetSequencesList(){
-    return selSequences;
-}
-
-void ExpertDiscoveryData::generateRecognitionReportFull(){
-    QFileDialog saveRepDialog;
-    saveRepDialog.setFileMode(QFileDialog::AnyFile);
-    saveRepDialog.setNameFilter(tr("Hypertext files (*.htm *.html)"));
-    saveRepDialog.setViewMode(QFileDialog::Detail);
-    saveRepDialog.setAcceptMode(QFileDialog::AcceptSave);
-
-    if(saveRepDialog.exec()){
-        QStringList fileNames = saveRepDialog.selectedFiles();
-        if(fileNames.isEmpty()) return;
-
-        QString fileName = fileNames.first();
-        fileName = fileName+".htm";
-        ofstream out(fileName.toStdString().c_str());
-        if(!updateScores()){
-            return;
-        }
-        if(!out.is_open()){
-            QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("Report generation failed"));
-            mb->exec();
-            return;
-        }
-        QString resultText;
-
-        if(!generateRecognizationReportHeader(resultText) ||
-           !generateRecognizationReport(posBase, "Positive", false, resultText) ||
-           !generateRecognizationReport(negBase, "Negative", true, resultText) ||
-           (conBase.getSize() != 0 && !generateRecognizationReport(conBase, "Control", true, resultText)) ||
-           !generateRecognizationReportSignals(resultText) ||
-           !generateRecognizationReportFooter(resultText))
-        {
-            QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("Report generation failed"));
-            mb->exec();
-            return;
-        }else{
-            out<<resultText.toStdString();
-            QString title;
-            WebWindow* w = new WebWindow(title, resultText);
-            w->setWindowIcon(QIcon(":core/images/chart_bar.png"));
-            AppContext::getMainWindow()->getMDIManager()->addMDIWindow(w);
-        }
-
-    }
-}
-bool ExpertDiscoveryData::generateRecognizationReportHeader(QString& resultText ) const
-{
-    resultText.append("<HTML><HEAD><TITLE> UGENE (ExpertDiscovery plugin): Recognition report</TITLE></HEAD><BODY>\n");
-    resultText.append("<H1>UGENE (ExpertDiscovery plugin): Recognition report</H1><BR>\n");
-    resultText.append("<I>Report generated at ");
-    resultText.append(QDateTime::currentDateTime().toString("hh:mm on dd/MM/yyyy"));
-
-    resultText.append(QString("\n<BR><BR>Recognition bound was set to %1\n").arg(recognizationBound));
-    resultText.append("<BR><BR>The recognition result for each sequence provide the foloving details:\n");
-    resultText.append("<BR>Score - the more the score the more signals are found in the sequence\n");
-    resultText.append("<BR>Recognized - the sequence is recognized if its score higher than the recognition bound\n");
-    resultText.append("<BR>FP_Learning - S(negative)/count(negative)\n");
-    resultText.append("<BR>FP_Control - S(control)/count(countrol)\n");
-    resultText.append("<BR>     S - amount of sequences in a sequence base having a score higher than the current sequence score\n");
-    resultText.append("<BR>     count - amount of sequences in a sequence base\n");
-    resultText.append("</I><BR><BR><BR>\n");
-    return true;
-}
-bool ExpertDiscoveryData::generateRecognizationReportFooter(QString& resultText) const{
-    resultText.append("</BODY></HTML>\n");
-    return true;
-}
-bool ExpertDiscoveryData::generateRecognizationReportSignals(QString& resultText) const{
-    const SignalList& rSelList = selectedSignals.GetSelectedSignals();
-    if (rSelList.empty()) {
-        return true;
-    }
-
-    resultText.append("<BR><H2>Selected signals</H2><BR>");
-    resultText.append(QString("Total signals selected <I>%1</I><BR>").arg(selectedSignals.GetSelectedSignals().size()));
-
-    resultText.append("Details: <BR>");
-    resultText.append("<TABLE border=1>");
-    resultText.append("<TR align=center><TD>Signal No</TD><TD>Signal Name</TD><TD>Positive Coverage</TD><TD>Probability</TD><TD>Fisher</TD></TR>\n");
-    SignalList::const_iterator iter = rSelList.begin();
-    int i = 0;
-    while (iter != rSelList.end()) {
-        const Signal* pSignal = (*iter);
-        resultText.append(QString("<TR align=center><TD>%1</TD>").arg(i+1));
-        resultText.append(QString("<TD>%1</TD>").arg(QString::fromStdString(pSignal->getName())));
-        resultText.append(QString("<TD>%1</TD>").arg(pSignal->getPriorPosCoverage()/100));
-        resultText.append(QString("<TD>%1</TD>").arg(pSignal->getPriorProbability()));
-        resultText.append(QString("<TD>%1</TD></TR>").arg(pSignal->getPriorFisher()));
-        i++;
-        iter++;
-    }
-    resultText.append("</TABLE><BR>");
-    return true;
-}
-bool ExpertDiscoveryData::generateRecognizationReport(const SequenceBase& rBase, QString strName, bool bSuppressNulls, QString& resultText){
-
-    if (&rBase == &posBase){
-        return generateRecognizationReportPositive(strName, bSuppressNulls, resultText);
-    }
-
-    if(rBase.getSize() == 0){
-        return true;
-    }
-
-    int nRecognized = 0;
-    int nNulls = 0;
-    for (int i=0; i<rBase.getSize(); i++)
-    {
-        Sequence& rSeq = const_cast<Sequence&>(rBase.getSequence(i));
-        updateScore(rSeq);
-        double dScore = rSeq.getScore();
-        if (dScore >= recognizationBound) nRecognized++;
-        if (dScore == 0) nNulls++;
-    }
-    resultText.append("<BR><H2>");
-    resultText.append(strName);
-    resultText.append(" base</H2><BR>");
-    resultText.append(QString("Total sequences: <I>%1</I><BR>").arg(rBase.getSize()));
-    resultText.append(QString("Recognized sequences: <I>%1</I><BR>").arg(nRecognized));
-
-    if (bSuppressNulls){
-        resultText.append(QString("Sequences with zero score (NOT SHOWN): <I>%1</I><BR>").arg(nNulls));
-    }
-
-    if(fileNamesMap.find(&rBase) != fileNamesMap.end()){
-        std::map<const SequenceBase*, std::string>::iterator it;
-        it = fileNamesMap.find(&rBase);
-        QString filename = QString::fromStdString(it->second);
-        if(filename != ""){
-            resultText.append("<BR> The sequence base was loaded from the file: ");
-            resultText.append(filename);
-            resultText.append("<BR>\n");
-        }
-    }
-
-    resultText.append("Details: <BR>");
-    resultText.append("<TABLE border=1>");
-    resultText.append("<TR align=center><TD>Sequence No</TD><TD>Sequence Name</TD><TD>Score</TD><TD>Result</TD></TR>\n");
-
-    for (int i=0; i<rBase.getSize(); i++)
-    {
-        const Sequence& rSeq = rBase.getSequence(i);
-        if (bSuppressNulls && rSeq.getScore()==0) continue;
-        const char* result = (rSeq.getScore() >= recognizationBound)?"Recognized":"Not recognized";
-        resultText.append(QString("<TR align=center><TD>%1</TD>").arg(i+1));
-        resultText.append(QString("<TD>%1</TD>").arg(QString::fromStdString(rSeq.getName())));
-        resultText.append(QString("<TD>%1</TD>").arg(rSeq.getScore()));
-        resultText.append(QString("<TD>%1</TD></TR>\n").arg(result));
-    }
-
-    resultText.append("</TABLE><BR>");
-    return true;
-}
-
-bool ExpertDiscoveryData::generateRecognizationReportPositive(QString strName, bool bSuppressNulls, QString& resultText){
-    const SequenceBase& rBase = posBase;
-
-    int nRecognized = 0;
-    int nNulls = 0;
-    for (int i=0; i<rBase.getSize(); i++)
-    {
-        Sequence& rSeq = const_cast<Sequence&>(rBase.getSequence(i));
-        updateScore(rSeq);
-        double dScore = rSeq.getScore();
-        if (dScore >= recognizationBound) nRecognized++;
-        if (dScore == 0) nNulls++;
-    }
-    resultText.append("<BR><H2>");
-    resultText.append(strName);
-    resultText.append(" base</H2><BR>");
-    resultText.append(QString("Total sequences: <I>%1</I><BR>").arg(rBase.getSize()));
-    resultText.append(QString("Recognized sequences: <I>%1</I><BR>").arg(nRecognized));
-
-    if (bSuppressNulls){
-        resultText.append(QString("Sequences with zero score: <I>%1</I><BR>").arg(nNulls));
-    }
-
-    if(fileNamesMap.find(&rBase) != fileNamesMap.end()){
-        std::map<const SequenceBase*, std::string>::iterator it;
-        it = fileNamesMap.find(&rBase);
-        QString filename = QString::fromStdString(it->second);
-        if(filename != ""){
-            resultText.append("<BR> The sequence base was loaded from the file: ");
-            resultText.append(filename);
-            resultText.append("<BR>\n");
-        }
-    }
-
-    resultText.append("Details: <BR>");
-    resultText.append("<TABLE border=1>");
-    resultText.append("<TR align=center><TD>Sequence No</TD><TD>Sequence Name</TD><TD>Score</TD><TD>Result</TD><TD>FP_Learning</TD><TD>FP_Control</TD></TR>\n");
-
-    for (int i=0; i<rBase.getSize(); i++)
-    {
-        const Sequence& rSeq = rBase.getSequence(i);
-        if (bSuppressNulls && rSeq.getScore()==0) continue;
-        double fp_control = getSequencesCountWithScoreMoreThan(rSeq.getScore(), conBase) / (double) conBase.getSize();
-        double fp_learning = getSequencesCountWithScoreMoreThan(rSeq.getScore(), negBase) / (double) negBase.getSize();
-
-        const char* result = (rSeq.getScore() >= recognizationBound)?"Recognized":"Not recognized";
-        resultText.append(QString("<TR align=center><TD>%1</TD>").arg(i+1));
-        resultText.append(QString("<TD>%1</TD>").arg(QString::fromStdString(rSeq.getName())));
-        resultText.append(QString("<TD>%1</TD>").arg(rSeq.getScore()));
-        resultText.append(QString("<TD>%1</TD>").arg(result));
-        resultText.append(QString("<TD>%1</TD>").arg(fp_learning));
-        resultText.append(QString("<TD>%1</TD></TR>\n").arg(fp_control));
-    }
-
-    resultText.append("</TABLE><BR>");
-    return true;
-}
-
-int ExpertDiscoveryData::getSequencesCountWithScoreMoreThan(double dScore, const SequenceBase& rBase) const{
-    int result = 0;
-    for (int i=0; i<rBase.getSize(); i++) {
-        const Sequence& rSeq = rBase.getSequence(i);
-        if (rSeq.getScore() >= dScore)
-            result++;
-    }
-    return result;
-}
-
-void ExpertDiscoveryData::generateRecognizationReport(EDProjectItem* pItem){
-    EDPISequenceBase* pBase = dynamic_cast<EDPISequenceBase*>(pItem);
-    if (!pBase)
-    {
-        assert(0);
-        return;
-    }
-
-    QFileDialog saveRepDialog;
-    saveRepDialog.setFileMode(QFileDialog::AnyFile);
-    saveRepDialog.setNameFilter(tr("Hypertext files (*.htm *.html)"));
-    saveRepDialog.setViewMode(QFileDialog::Detail);
-    saveRepDialog.setAcceptMode(QFileDialog::AcceptSave);
-
-    if(saveRepDialog.exec()){
-        QStringList fileNames = saveRepDialog.selectedFiles();
-        if(fileNames.isEmpty()) return;
-
-        QString fileName = fileNames.first();
-        fileName = fileName+".htm";
-        ofstream out(fileName.toStdString().c_str());
-        if(!updateScores()){
-            return;
-        }
-        if(!out.is_open()){
-            QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("Report generation failed"));
-            mb->exec();
-            return;
-        }
-
-        QString resultText;
-        if(!generateRecognizationReportHeader(resultText) ||
-            !generateRecognizationReport(pBase->getSequenceBase(), pBase->getName(), true, resultText) ||
-            !generateRecognizationReportFooter(resultText))
-        {
-            QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("Report generation failed"));
-            mb->exec();
-            return;
-        }else{
-            out<<resultText.toStdString();
-            QString title;
-            WebWindow* w = new WebWindow(title, resultText);
-            w->setWindowIcon(QIcon(":core/images/chart_bar.png"));
-            AppContext::getMainWindow()->getMDIManager()->addMDIWindow(w);
-        }
-
-    }
-}
-
-void ExpertDiscoveryData::setBaseFilename(const SequenceBase& base, const QString& fileName){
-    fileNamesMap[&base] = fileName.toStdString();
-}
-
-int ExpertDiscoveryData::getMaxPosSequenceLen(){
-    int maxLen = 0;
-    int curLen = 0;
-
-    for (int i = 0; i < posBase.getSize(); i++){
-        curLen = posBase.getSequence(i).getSize();
-        if(curLen > maxLen){
-            maxLen = curLen;
-        }
-    }
-
-    return maxLen;
-}
-
-float ExpertDiscoveryData::calculateSequenceScore(const char* seq, int seqLen, ExpertDiscoveryData& edData, DNATranslation* complTT){
-
-    Sequence edSequence;
-    if(complTT != NULL){
-        QByteArray revComplDna(seqLen, 0);
-        complTT->translate(seq, seqLen, revComplDna.data(), seqLen);
-        TextUtils::reverse(revComplDna.data(), revComplDna.size());
-        edSequence.setSequence(revComplDna.data());
-    }else{
-        edSequence.setSequence(std::string(seq, seqLen));
-    }
-
-    Marking mrk;
-    if(edData.isLettersMarkedUp()){
-        std::string strFamilyName = ExpertDiscoveryData::FAMILY_LETTERS;
-        const char letter[] = {'A','C','T','G','\0'};
-        std::string seq;
-        seq = edSequence.getSequence();
-
-        int len = (int)seq.size();
-        for (int j=0; j<len; j++) {
-            if (strchr(letter, seq[j]) != NULL)
-                mrk.set(char2string(seq[j]), strFamilyName, Interval(j,j));
-        }
-        edSequence.setSequenceMarking(mrk);
-    }
-
-    const SignalList& rSelList = edData.getSelectedSignalsContainer().GetSelectedSignals();
-    int listSize = rSelList.size();
-    if (listSize == 0){
-        return 0;
-    }
-
-    RecognizationData data;
-    data.resize(seqLen);
-    fill(data.begin(), data.end(), 0);
-
-    SignalList::const_iterator iter = rSelList.begin();
-    int it = 0;
-    while (iter != rSelList.end()) {
-        const Signal* pSignal = (*iter);
-        DDisc::Context& context = pSignal->createCompartibleContext();
-        while (pSignal->find(edSequence,context)) {
-            double t = pSignal->getPriorProbability()/100;
-            if (t>=1) t = 0.999999;
-            int nPos = context.getPosition();
-            int not_null_length = 0;
-            double value = -qLn(1-t);
-            for (int i=0; i<context.getLength(); i++)
-            {
-                if (context.isSignalPart(nPos+i))
-                    not_null_length++;
-            }
-            value /= not_null_length;
-            for (int i=0; i<context.getLength(); i++)
-            {
-                if (context.isSignalPart(nPos+i))
-                    data[nPos + i] += value;
-            }
-        }
-        context.destroy();
-        iter++;
-        it++;
-    }
-
-    float score = 0;
-    for (int i = 0; i < seqLen; i++){
-        score+=data[i];
-    }
-
-    return score;
-}
-
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryData.h b/src/plugins/expert_discovery/src/ExpertDiscoveryData.h
deleted file mode 100644
index c48ebc0..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryData.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/**
- * 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 _EXPERTDISCOVERIDATAHEADER_
-#define _EXPERTDISCOVERIDATAHEADER_
-
-#include "DDisc/Sequence.h"
-#include "DDisc/MetaInfo.h"
-
-#include "ExpertDiscoveryCSUtil.h"
-#include "ExpertDiscoveryTreeWidgets.h"
-
-#include <U2Core/GObject.h>
-#include <QObject>
-
-namespace U2 {
-
-using namespace DDisc;
-
-class EDProjectItem;
-class EDPICS;
-class EDPISequence;
-class MAlignmentRow;
-class DNATranslation;
-
-const int ED_UPDATE_ALL             = 0;
-const int ED_CURRENT_ITEM_CHANGED   = 1;
-const int ED_ITEM_NAME_CHANGED      = 2;
-const int ED_ITEM_STATE_CHANGED     = 3;
-const int ED_ITEM_ADDED             = 4;
-const int ED_ITEM_DELETED           = 5;
-const int ED_UPDATE_CHILDREN        = 6;
-const int ED_PROPERTY_CHANGED       = 7;
-const int ED_MRK_UPDATE             = 8;
-
-enum SequenceType {POSITIVE_SEQUENCE, NEGATIVE_SEQUENCE, CONTROL_SEQUENCE, UNKNOWN_SEQUENCE};
-
-class ExpertDiscoveryData : public QObject{
-    Q_OBJECT
-public:
-    static const std::string FAMILY_LETTERS;
-    static const std::string FAMILY_LETTERS_METHOD;
-    static const QString FAMILY_ED_SIGNAL;
-    static const QString FAMILY_ED_METHOD;
-
-    ExpertDiscoveryData ();
-
-    void setPosBase(const QList<GObject*> &);
-    void setNegBase(const QList<GObject*> &);
-    void setConBase(const QList<GObject*> &);
-
-    void markupLetters(void);
-    void markupLetters(SequenceBase& rBase, MarkingBase& rAnn);
-    void markupLetters(Sequence& seq);
-    bool isLettersMarkedUp(void) const;
-    void clearScores();
-
-    const MetaInfoBase& getDescriptionBase() const { return desc;}
-    MetaInfoBase& getDescriptionBaseNoConst() { return desc;}
-    SequenceBase& getPosSeqBase() {return posBase;}
-    SequenceBase& getNegSeqBase() {return negBase;}
-    SequenceBase& getConSeqBase() {return conBase;}
-
-    MarkingBase& getPosMarkBase() {return posAnn;}
-    MarkingBase& getNegMarkBase() {return negAnn;}
-    MarkingBase& getConMarkBase() {return conAnn;}
-
-    void clearContrBase();
-    void clearContrAnnot();
-
-    CSFolder& getRootFolder(){return rootFolder;}
-
-    bool updateScore(Sequence& rSeq);
-    double getRecognizationBound() const { return recognizationBound; }
-    void setRecBound(double val){recognizationBound = val;}
-    void optimizeRecognizationBound();
-
-    void setRecBound();
-    bool updateScores();
-
-    bool isSignalSelected(const EDProjectItem* pItem);
-    void switchSelection(EDProjectItem* pItem, bool upd);
-    SelectedSignalsContainer& getSelectedSignalsContainer() { return selectedSignals; }
-
-    void onSetCurrentSignalParamsAsPrior(EDPICS *pItem, bool bUpdate);
-    void onClearSignalPriorParams(EDPICS *pItem);
-
-    SequenceType getSequenceTypeByName(const QString& seqName);
-    int getSequenceIndex(const QString& seqName, SequenceType type);
-    RecognizationData getRecognitionData(int seqIndex, SequenceType type);
-
-    bool loadMarkup(const QString& firstF, const QString& secondF, const QString& thirdF, bool generateDescr);
-    bool loadAnnotation(MarkingBase& base, const SequenceBase& seqBase, QString strFileName);
-    bool generateDescription(bool clearDescr = true);
-    void loadControlSequenceAnnotation(const QString& fileName);
-
-    void cleanup();
-
-    void addSequenceToSelected(EDPISequence* seq);
-    void clearSelectedSequencesList();
-    bool isSequenceSelected(EDPISequence* seq);
-    QList<EDPISequence*> getSelectetSequencesList();
-
-    void generateRecognitionReportFull();
-    bool generateRecognizationReportHeader(QString& resultText) const;
-    bool generateRecognizationReportFooter(QString& resultText) const;
-    bool generateRecognizationReportSignals(QString& resultText) const;
-    bool generateRecognizationReport(const SequenceBase& rBase, QString strName, bool bSuppressNulls, QString& resultText);
-    bool generateRecognizationReportPositive(QString strName, bool bSuppressNulls, QString& resultText);
-    int  getSequencesCountWithScoreMoreThan(double dScore, const SequenceBase& rBase) const;
-    void generateRecognizationReport(EDProjectItem* pItem);
-
-    void setBaseFilename(const SequenceBase& base, const QString& fileName);
-
-    bool isModified() {return modified;}
-    void setModifed(bool modFlag = true){modified = modFlag;}
-
-    int getMaxPosSequenceLen();
-
-    static float calculateSequenceScore(const char* seq, int seqLen, ExpertDiscoveryData& edData, DNATranslation* complTT);
-
-    double recognizationBound;
-    RecognizationDataStorage recDataStorage;
-    QList<EDPISequence*> selSequences;
-
-private:
-    SequenceBase                posBase;
-    SequenceBase                negBase;
-    SequenceBase                conBase;
-    MetaInfoBase                desc;
-    MarkingBase                 posAnn;
-    MarkingBase                 negAnn;
-    MarkingBase                 conAnn;
-    CSFolder                    rootFolder;
-    bool                        modified;
-    SelectedSignalsContainer    selectedSignals;
-
-    std::map<const SequenceBase*, std::string> fileNamesMap;
-
-    inline Sequence prepareSequence(const GObject* obj) const;
-    inline Sequence prepareSequence(MAlignmentRow& row) const;
-    static std::string char2string(char ch);
-    void setBase(const QList<GObject*> &objects, SequenceBase& base);
-};
-}//namespace
-
-#endif
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryExtSigWiz.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryExtSigWiz.cpp
deleted file mode 100644
index 9b22bdf..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryExtSigWiz.cpp
+++ /dev/null
@@ -1,739 +0,0 @@
-/**
- * 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 <QMessageBox>
-
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Gui/HelpButton.h>
-#include <U2Core/QObjectScopedPointer.h>
-
-#include "ExpertDiscoveryAdvSetDialog.h"
-#include "ExpertDiscoveryExtSigWiz.h"
-
-namespace U2 {
-
-ExpertDiscoveryExtSigWiz::ExpertDiscoveryExtSigWiz(QWidget *parent, CSFolder* f, int positiveSize, bool isLetters)
-: QWizard(parent)
-,posSize(positiveSize)
-,folder(NULL){
-
-    setupUi(this);
-    new U2::HelpButton(this, button(QWizard::HelpButton), "8093716");
-
-//1 page
-    connect(advancedButton, SIGNAL(clicked()), SLOT(sl_advButton()));
-    state.setDefaultState();
-
-    condProbLevEdit->setText(QString("%1").arg(state.dProbability));
-    coverBoundEdit->setText(QString("%1").arg(state.dCoverage));
-    fishCritEdit->setText(QString("%1").arg(state.dFisher));
-    minimFishCritCheck->setChecked(state.bCheckFisherMinimization);
-    storeCheck->setChecked(state.bStoreOnlyDifferent);
-    ulCritCheck->setChecked(state.bUmEnabled);
-    samplesBoundEdit->setText(QString("%1").arg(state.nUmSamplesBound));
-    levelBoundEdit->setText(QString("%1").arg(state.dUmBound));
-    minComplexityEdit->setText(QString("%1").arg(state.nMinComplexity));
-    maxComplexityEdit->setText(QString("%1").arg(state.nMaxComplexity));
-
-    QDoubleValidator* d0_100Valid = new QDoubleValidator(0,100,5,this);
-    QDoubleValidator* d0_1Valid = new QDoubleValidator(0,1,5,this);
-    QDoubleValidator* d0_maxValid = new QDoubleValidator(0,LONG_MAX,0,this);
-
-    condProbLevEdit->setValidator(d0_100Valid);
-    coverBoundEdit->setValidator(d0_100Valid);
-    fishCritEdit->setValidator(d0_1Valid);
-    samplesBoundEdit->setValidator(d0_maxValid);
-    levelBoundEdit->setValidator(d0_1Valid);
-
-//2 page
-    initSet();
-
-    predicatesTree->setSelectionMode(QAbstractItemView::SingleSelection);
-
-    connect(distanseButton,SIGNAL(clicked()), SLOT(sl_distButton()));
-    connect(repetitionButton,SIGNAL(clicked()), SLOT(sl_repetButton()));
-    connect(intervalButton,SIGNAL(clicked()), SLOT(sl_intervButton()));
-    connect(deleteButton,SIGNAL(clicked()), SLOT(sl_deleteButton()));
-
-    distItem = new QTreeWidgetItem(predicatesTree);
-    repetItem = new QTreeWidgetItem(predicatesTree);
-    intervItem = new QTreeWidgetItem(predicatesTree);
-
-    distItem->setText(0,"Distance");
-    repetItem->setText(0,"Repetition");
-    intervItem->setText(0,"Interval");
-
-    connect(predicatesTree, SIGNAL(currentItemChanged (QTreeWidgetItem*, QTreeWidgetItem*)), SLOT(sl_selectionChanged (QTreeWidgetItem*, QTreeWidgetItem*)));
-
-    predicatesByDefault(isLetters);
-
-//page 3
-    folder = f;
-    updateTree();
-    connect(createSubfolderButton, SIGNAL(clicked()), SLOT(sl_createSubfolder()));
-
-    connect(this, SIGNAL(currentIdChanged ( int )), this, SLOT( sl_idChanged(int )));
-
-    hideParameters();
-}
-
-ExpertDiscoveryExtSigWiz::~ExpertDiscoveryExtSigWiz(){
-    delete distItem;
-    delete repetItem;
-    delete intervItem;
-
-    delete sigSetLayout;
-}
-
-void ExpertDiscoveryExtSigWiz::sl_advButton(){
-    QObjectScopedPointer<ExpertDiscoveryAdvSetDialog> adv = new ExpertDiscoveryAdvSetDialog(this,
-        state.dIntProbability,
-        state.dIntFisher,
-        state.nMinComplexity,
-        state.nMaxComplexity,
-        state.dMinPosCorrelation,
-        state.dMaxPosCorrelation,
-        state.dMinNegCorrelation,
-        state.dMaxNegCorrelation,
-        state.bCorrelationImportant);
-    adv->exec();
-}
-
-void ExpertDiscoveryExtSigWiz::sl_distButton(){
-    OpDistance *pOp = new OpDistance;
-    QTreeWidgetItem *op = new QTreeWidgetItem(distItem);
-    op->setText(0, QString::fromStdString(pOp->getDescription()));
-    void* pointer = (void*)pOp;
-    QVariant variant = QVariant::fromValue(pointer);
-    op->setData(0, Qt::UserRole, variant);
-
-    predicatesTree->setCurrentItem(op);
-    distItem->setExpanded(true);
-    //op->setSelected(true);
-}
-void ExpertDiscoveryExtSigWiz::sl_repetButton(){
-    OpReiteration *pOp = new OpReiteration;
-    QTreeWidgetItem *op = new QTreeWidgetItem(repetItem);
-    op->setText(0, QString::fromStdString(pOp->getDescription()));
-    void* pointer = (void*)pOp;
-    QVariant variant = QVariant::fromValue(pointer);
-    op->setData(0, Qt::UserRole, variant);
-    //predicatesTree->clearSelection();
-    predicatesTree->setCurrentItem(op);
-    repetItem->setExpanded(true);
-    //op->setSelected(true);
-}
-void ExpertDiscoveryExtSigWiz::sl_intervButton(){
-    OpInterval *pOp = new OpInterval;
-    QTreeWidgetItem *op = new QTreeWidgetItem(intervItem);
-    op->setText(0, QString::fromStdString(pOp->getDescription()));
-    void* pointer = (void*)pOp;
-    QVariant variant = QVariant::fromValue(pointer);
-    op->setData(0, Qt::UserRole, variant);
-    //predicatesTree->clearSelection();
-    predicatesTree->setCurrentItem(op);
-    intervItem->setExpanded(true);
-    //op->setSelected(true);
-}
-void ExpertDiscoveryExtSigWiz::sl_deleteButton(){
-    if(predicatesTree->selectedItems().isEmpty()){
-        return ;
-    }
-    QTreeWidgetItem* item = predicatesTree->selectedItems().first();
-    QVariant variant = item->data(0, Qt::UserRole);
-    void* pointer = variant.value<void*>();
-    Operation* pOp = static_cast<Operation *>(pointer);
-    if (pOp == NULL)
-        return;
-    if (sigSetLayout->currentIndex() != T_UNDEFINED) {
-        sigSetLayout->setCurrentIndex(T_UNDEFINED);
-    }
-    delete pOp;
-    predicatesTree->removeItemWidget(item,0);
-    delete item;
-}
-
-
-void ExpertDiscoveryExtSigWiz::sl_idChanged(int id){
-    switch (id){
-        case 2:{
-            int minCom = 0;
-            int maxCom = 0;
-            minCom = minComplexityEdit->text().toInt();
-            maxCom = maxComplexityEdit->text().toInt();
-
-            if(minCom>maxCom || minCom<0){
-                back();
-                QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Wrong parameters"), tr("Minimal complexity must not be grater then maximal complexity and positive"));
-                mb->exec();
-                return;
-            }else{
-                if(!(checkD(condProbLevEdit) && checkD(coverBoundEdit)
-                    && checkD(fishCritEdit) && checkD(levelBoundEdit)
-                    && checkD(samplesBoundEdit))){
-                        back();
-                }
-            }
-            break;
-        }
-        case 3:
-            sl_selectionChanged(predicatesTree->currentItem(), predicatesTree->currentItem());
-            if((intervItem->childCount() == 0 ) && (repetItem->childCount() == 0 ) && (distItem->childCount() == 0 ) && !alignedCheck->isChecked()){
-                back();
-                QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("No predicates"), tr("Create a predicate to perform signal generation"));
-                mb->exec();
-                return;
-            }
-    }
-}
-
-void ExpertDiscoveryExtSigWiz::sl_createSubfolder(){
-    QString folderName = folderNameEdit->text();
-
-    if(folderName.isEmpty()){
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Specify folder name"), tr("Please specify a name for your folder"));
-        mb->exec();
-        CHECK(!mb.isNull(), );
-        folderNameEdit->setFocus();
-        return;
-    }
-
-    QTreeWidgetItem* csItem = treeFoldersWidget->topLevelItem(0);
-    assert(csItem!=NULL);
-
-    bool isUniqueName = true;
-    for (int i = 0 ; i < csItem->childCount(); i++){
-        QTreeWidgetItem* item  = csItem->child(i);
-        if(item->text(0) == folderName){
-            isUniqueName = false;
-            break;
-        }
-    }
-
-    if(!isUniqueName){
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Specify folder name"), tr("Item with the same name already exist. Please enter another name"));
-        mb->exec();
-        CHECK(!mb.isNull(), );
-        folderNameEdit->setFocus();
-        return;
-    }
-
-    emit si_newFolder(folderName);
-    updateTree();
-}
-void ExpertDiscoveryExtSigWiz::predicatesByDefault(bool isLetters){
-    if(isLetters){
-        for(int i = 0; i < 3; i++){ //generate D(0,0), D(1,1), D(2,2)
-            OpDistance *pOp = new OpDistance;
-            pOp->setDistance(Interval(i,i));
-            QTreeWidgetItem *op = new QTreeWidgetItem(distItem);
-            op->setText(0, QString::fromStdString(pOp->getDescription()));
-            void* pointer = (void*)pOp;
-            QVariant variant = QVariant::fromValue(pointer);
-            op->setData(0, Qt::UserRole, variant);
-            distItem->setExpanded(true);
-        }
-    }else{  //generate D(0,10), D(10,20)
-        for(int i = 0; i < 20; i+=10){
-            OpDistance *pOp = new OpDistance;
-            pOp->setDistance(Interval(i,i+10));
-            QTreeWidgetItem *op = new QTreeWidgetItem(distItem);
-            op->setText(0, QString::fromStdString(pOp->getDescription()));
-            void* pointer = (void*)pOp;
-            QVariant variant = QVariant::fromValue(pointer);
-            op->setData(0, Qt::UserRole, variant);
-            distItem->setExpanded(true);
-        }
-    }
-}
-
-void ExpertDiscoveryExtSigWiz::accept(){
-
-    //page2
-    QVariant variant;
-    void* pointer = NULL;
-    Operation* pOp = NULL;
-
-    QList<QTreeWidgetItem*> ch = distItem->takeChildren();
-    foreach(QTreeWidgetItem* item, ch){
-        variant = item->data(0, Qt::UserRole);
-        pointer = variant.value<void*>();
-        pOp = static_cast<Operation *>(pointer);
-        predicates.push_back(pOp);
-        delete item;
-    }
-
-    ch = repetItem->takeChildren();
-    foreach(QTreeWidgetItem* item, ch){
-        variant = item->data(0, Qt::UserRole);
-        pointer = variant.value<void*>();
-        pOp = static_cast<Operation *>(pointer);
-        predicates.push_back(pOp);
-        delete item;
-    }
-
-    ch = intervItem->takeChildren();
-    foreach(QTreeWidgetItem* item, ch){
-        variant = item->data(0, Qt::UserRole);
-        pointer = variant.value<void*>();
-        pOp = static_cast<Operation *>(pointer);
-        predicates.push_back(pOp);
-        delete item;
-    }
-
-    if(alignedCheck->isChecked()){
-        for(int i = 0; i < posSize; i++){
-            OpInterval *pOp = new OpInterval;
-            pOp->setInt(Interval(i, i));
-            predicates.push_back(pOp);
-        }
-    }
-
-    if(predicates.empty()){
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("No predicates"), tr("Create a predicate to perform signal generation"));
-        mb->exec();
-        CHECK(!mb.isNull(), );
-    }else{
-        //page 1
-        state.dProbability = condProbLevEdit->text().toDouble();
-        state.dCoverage = coverBoundEdit->text().toDouble();
-        state.dFisher =  fishCritEdit->text().toDouble();
-        state.bCheckFisherMinimization = minimFishCritCheck->isChecked();
-        state.bStoreOnlyDifferent = storeCheck->isChecked();
-        state.bUmEnabled = ulCritCheck->isChecked();
-        state.nUmSamplesBound = (int)(samplesBoundEdit->text().toDouble());
-        state.dUmBound = levelBoundEdit->text().toDouble();
-        state.nMinComplexity = minComplexityEdit->text().toInt();
-        state.nMaxComplexity = maxComplexityEdit->text().toInt();
-
-        //page 3
-        if(!treeFoldersWidget->selectedItems().isEmpty()){
-            QTreeWidgetItem* item = treeFoldersWidget->selectedItems().first();
-            QVariant variant = item->data(0, Qt::UserRole);
-            void* pointer = variant.value<void*>();
-            CSFolder* f = static_cast<CSFolder *>(pointer);
-            folder = f;
-        }
-
-        QWizard::accept();
-    }
-}
-
-void ExpertDiscoveryExtSigWiz::hideParameters(){
-  //  label_4->hide();
- //   fishCritEdit->hide();
- //   minimFishCritCheck->hide();
-//    storeCheck->hide();
-    ulCritCheck->hide();
-    label_5->hide();
-    samplesBoundEdit->hide();
-    label_6->hide();
-    levelBoundEdit->hide();
-    advancedButton->hide();
-}
-
-bool ExpertDiscoveryExtSigWiz::checkD(const QLineEdit* lineE) const{
-    if(!lineE->validator()){
-        return false;
-    }
-    const QDoubleValidator* validator = qobject_cast<const QDoubleValidator*>(lineE->validator());
-    int pos = 0;
-        QString textValue=lineE->text();
-        if(validator->validate(textValue,pos)!=QValidator::Acceptable){
-        QString msg = QString("Entered value must be from %1 to %2").arg(validator->bottom()).arg(validator->top());
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Wrong parameters"), tr(msg.toStdString().c_str()));
-        mb->exec();
-        return false;
-    }
-    return true;
-}
-
-void ExpertDiscoveryExtSigWiz::updateTree(const CSFolder* pFolder, QTreeWidgetItem* treeItem){
-    QString strName;
-    QTreeWidgetItem* nTreeItem = NULL;
-    if(pFolder == NULL){
-        treeFoldersWidget->clear();
-        pFolder = folder;
-        strName = tr("Complex signals");
-        nTreeItem = new QTreeWidgetItem(treeFoldersWidget);
-
-    }else{
-        strName = pFolder->getName();
-        nTreeItem = new QTreeWidgetItem(treeItem);
-    }
-    nTreeItem->setText(0,strName);
-    void* pointer = (void*)pFolder;
-    QVariant variant = QVariant::fromValue(pointer);
-    nTreeItem->setData(0, Qt::UserRole, variant);
-    int nFolderNum = pFolder->getFolderNumber();
-    for (int i=0; i<nFolderNum; i++){
-        updateTree(pFolder->getSubfolder(i), nTreeItem);
-    }
-
-    nTreeItem->setExpanded(true);
-}
-
-void ExpertDiscoveryExtSigWiz::sl_selectionChanged (QTreeWidgetItem * current, QTreeWidgetItem * previous){
-
-//saving data to the deselected item
-
-    int curIndex = sigSetLayout->currentIndex();
-
-    if(previous== NULL){
-        return ;
-    }
-
-    if(previous != distItem && previous != intervItem && previous != repetItem && sigSet[curIndex]->isReadyToClose() && curIndex != T_UNDEFINED){
-        QVariant variant = previous->data(0, Qt::UserRole);
-        void* pointer = variant.value<void*>();
-        Operation* pOp = static_cast<Operation *>(pointer);
-        sigSet[curIndex]->saveData(pOp);
-        previous->setText(0, QString::fromStdString(pOp->getDescription()));
-        variant = QVariant::fromValue(pointer);
-        previous->setData(0, Qt::UserRole, variant);
-        sigSetLayout->setCurrentIndex(T_UNDEFINED);
-    }
-
-//loading data to the form
-    if(current == NULL || current == distItem || current == intervItem || current == repetItem){
-        sigSetLayout->setCurrentIndex(T_UNDEFINED);
-        return ;
-    }else if(current->parent()==distItem){
-        sigSetLayout->setCurrentIndex(T_DISTANCE);
-        QVariant variant = current->data(0,Qt::UserRole);
-        void* dataP = variant.value<void*>();
-        static_cast<DistanceSet *>(sigSet[T_DISTANCE])->loadData(dataP);
-    }else if(current->parent()==intervItem){
-        sigSetLayout->setCurrentIndex(T_INTERVAL);
-        QVariant variant = current->data(0,Qt::UserRole);
-        void* dataP = variant.value<void*>();
-        static_cast<IntervalSet *>(sigSet[T_INTERVAL])->loadData(dataP);
-    }else if(current->parent()==repetItem){
-        sigSetLayout->setCurrentIndex(T_REITERATION);
-        QVariant variant = current->data(0,Qt::UserRole);
-        void* dataP = variant.value<void*>();
-        static_cast<RepetitionSet *>(sigSet[T_REITERATION])->loadData(dataP);
-    }
-}
-
-void ExpertDiscoveryExtSigWiz::initSet(){
-    sigSetLayout = new QStackedLayout(editorBox);
-
-//undef
-    sigSet[T_UNDEFINED] = new OperationSet(editorBox);
-    sigSet[T_UNDEFINED]->setEnabled(true);
-    QGridLayout* gridLayoutUndef = new QGridLayout(sigSet[T_UNDEFINED]);
-    QLabel* labelUndef = new QLabel(sigSet[T_UNDEFINED]);
-    labelUndef->setText(tr("Select predicate on the tree above or create a new one using buttons."));
-    gridLayoutUndef->addWidget(labelUndef, 0, 0, 1, 1);
-    QSpacerItem* verticalSpacerUndef = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
-    gridLayoutUndef->addItem(verticalSpacerUndef, 1, 0, 1, 1);
-    sigSetLayout->insertWidget(T_UNDEFINED,sigSet[T_UNDEFINED]);
-
-    sigSet[T_DISTANCE] = new DistanceSet(editorBox);
-    sigSetLayout->insertWidget(T_DISTANCE,sigSet[T_DISTANCE]);
-
-    sigSet[T_REITERATION] = new RepetitionSet(editorBox);
-    sigSetLayout->insertWidget(T_REITERATION,sigSet[T_REITERATION]);
-
-    sigSet[T_INTERVAL] = new IntervalSet(editorBox);
-    sigSetLayout->insertWidget(T_INTERVAL,sigSet[T_INTERVAL]);
-
-    sigSetLayout->setCurrentIndex(T_UNDEFINED);
-
-    verticalLayout_4->addLayout(sigSetLayout);
-}
-
-DistanceSet::DistanceSet (QWidget* parent)
-: OperationSet(parent)
-    , to(0)
-    , from(0)
-    , isOrderImportant(false)
-    , isMaxUNL(true){
-
-    setEnabled(true);
-    QGridLayout* gridLayoutD = new QGridLayout(this);
-    QLabel* label1D = new QLabel(this);
-    label1D->setText(tr("Distance from"));
-    gridLayoutD->addWidget(label1D, 0, 0, 1, 1);
-    QLabel* label2D = new QLabel(this);
-    label2D->setText(tr("Distance to"));
-    gridLayoutD->addWidget(label2D, 1, 0, 1, 1);
-    fromEditD = new QLineEdit(this);
-    gridLayoutD->addWidget(fromEditD, 0, 2, 1, 1);
-    toEditD = new QLineEdit(this);
-    gridLayoutD->addWidget(toEditD, 1, 2, 1, 1);
-    unlimCheckBoxD = new QCheckBox(this);
-    unlimCheckBoxD->setText(tr("Unlimited"));
-    gridLayoutD->addWidget(unlimCheckBoxD, 1, 3, 1, 1);
-    orderCheckBoxD = new QCheckBox(this);
-    orderCheckBoxD->setText(tr("Take order into account"));
-    gridLayoutD->addWidget(orderCheckBoxD, 2, 2, 1, 1);
-    QSpacerItem* horizontalSpacerD = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
-    gridLayoutD->addItem(horizontalSpacerD, 0, 3, 1, 1);
-
-    QIntValidator* validator = new QIntValidator(0, 65535, this);
-    fromEditD->setValidator(validator);
-    toEditD->setValidator(validator);
-
-
-    connect(unlimCheckBoxD, SIGNAL(clicked()), SLOT(sl_unlim()));
-    connect(orderCheckBoxD, SIGNAL(clicked()), SLOT(sl_order()));
-}
-
-void DistanceSet::loadData(void *pData){
-    OpDistance *pOp = static_cast<OpDistance*>(pData);
-    Interval i = pOp->getDistance();
-    from = i.getFrom();
-    to = i.getTo();
-    isOrderImportant = pOp->isOrderImportant();
-    isMaxUNL = (to == PINF);
-    if (isMaxUNL) to = from + 1;
-    toEditD->setEnabled(!isMaxUNL);
-    updateData(false);
-}
-void DistanceSet::saveData(void *pData){
-    OpDistance *pOp = static_cast<OpDistance*>(pData);
-    updateData();
-    if (isMaxUNL) to = PINF;
-    pOp->setDistance( Interval(from, to) );
-    pOp->setOrderImportant( isOrderImportant == true );
-}
-
-bool DistanceSet::isReadyToClose(){
-    updateData();
-    if (isMaxUNL) to = PINF;
-    if ( from > to ) {
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Wrong parameters"), tr("Higher bound must be grater then lower bound"));
-        mb->exec();
-        return false;
-    }
-    else return true;
-}
-
-void DistanceSet::updateData(bool side){
-    if(side){
-        to = toEditD->text().toInt();
-        from = fromEditD->text().toInt();
-        isOrderImportant = orderCheckBoxD->isChecked();
-        isMaxUNL = unlimCheckBoxD->isChecked();
-    }else{
-        toEditD->setText(QString("%1").arg(to));
-        fromEditD->setText(QString("%1").arg(from));
-        orderCheckBoxD->setChecked(isOrderImportant);
-        unlimCheckBoxD->setChecked(isMaxUNL);
-    }
-
-}
-void DistanceSet::sl_unlim(){
-    isMaxUNL = unlimCheckBoxD->isChecked();
-    toEditD->setEnabled( !isMaxUNL);
-}
-void DistanceSet::sl_order(){
-    isOrderImportant = orderCheckBoxD->isChecked();
-}
-
-IntervalSet::IntervalSet (QWidget* parent)
-: OperationSet(parent)
-    , from(0)
-    , to(0)
-    , isMaxUNL(true){
-
-    setEnabled(true);
-    QGridLayout* gridLayoutI = new QGridLayout(this);
-    QLabel* label1I = new QLabel(this);
-    label1I->setText(tr("Interval from"));
-    gridLayoutI->addWidget(label1I, 0, 0, 1, 1);
-    QLabel* label2I = new QLabel(this);
-    label2I->setText(tr("Interval to"));
-    gridLayoutI->addWidget(label2I, 2, 0, 1, 1);
-    fromIEdit = new QLineEdit(this);
-    gridLayoutI->addWidget(fromIEdit, 0, 2, 1, 1);
-    toIEdit = new QLineEdit(this);
-    gridLayoutI->addWidget(toIEdit, 2, 2, 1, 1);
-    QSpacerItem* horizontalSpacer_4 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
-    gridLayoutI->addItem(horizontalSpacer_4, 2, 4, 1, 1);
-    unlimCheckBoxI = new QCheckBox(this);
-    unlimCheckBoxI->setText(tr("Unlimited"));
-    gridLayoutI->addWidget(unlimCheckBoxI, 2, 3, 1, 1);
-
-    QIntValidator* validator = new QIntValidator(0, 65535, this);
-    fromIEdit->setValidator(validator);
-    toIEdit->setValidator(validator);
-
-    connect(unlimCheckBoxI, SIGNAL(clicked()), SLOT(sl_unlim()));
-
-}
-
-void IntervalSet::loadData(void *pData){
-    OpInterval *pOp = static_cast<OpInterval*>(pData);
-    Interval i = pOp->getInt();
-    from = i.getFrom();
-    to = i.getTo();
-    isMaxUNL = (to == PINF);
-    if (isMaxUNL) to = from+1;
-    toIEdit->setEnabled( !isMaxUNL);
-    updateData(false);
-}
-void IntervalSet::saveData(void *pData){
-    OpInterval *pOp = static_cast<OpInterval*>(pData);
-    updateData();
-    if (isMaxUNL) to = PINF;
-    pOp->setInt( Interval(from, to) );
-}
-
-bool IntervalSet::isReadyToClose(){
-    updateData();
-    if (isMaxUNL) to = PINF;
-    if ( from > to ) {
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Wrong parameters"), tr("Higher bound must be grater then lower bound"));
-        mb->exec();
-        return false;
-    }
-    else return true;
-}
-
-void IntervalSet::updateData(bool side){
-    if(side){
-        to = toIEdit->text().toInt();
-        from = fromIEdit->text().toInt();
-        isMaxUNL = unlimCheckBoxI->isChecked();
-    }else{
-        toIEdit->setText(QString("%1").arg(to));
-        fromIEdit->setText(QString("%1").arg(from));
-        unlimCheckBoxI->setChecked(isMaxUNL);
-    }
-}
-
-void IntervalSet::sl_unlim(){
-    isMaxUNL = unlimCheckBoxI->isChecked();
-    toIEdit->setEnabled( !isMaxUNL);
-}
-
-
-RepetitionSet::RepetitionSet (QWidget* parent)
-: OperationSet(parent)
-    , nmin(0)
-    , nmax(0)
-    , min(0)
-    , max(0)
-    , isMaxUNL(true){
-
-    setEnabled(true);
-    QGridLayout* gridLayoutR = new QGridLayout(this);
-    QLabel* label1R = new QLabel(this);
-    label1R->setText(tr("Distance from"));
-    gridLayoutR->addWidget(label1R, 0, 0, 1, 1);
-    QLabel* label2R = new QLabel(this);
-    label2R->setText(tr("Distance to"));
-    gridLayoutR->addWidget(label2R, 1, 0, 1, 1);
-    fromDEdit = new QLineEdit(this);
-    gridLayoutR->addWidget(fromDEdit, 0, 2, 1, 1);
-    toDEditR = new QLineEdit(this);
-    gridLayoutR->addWidget(toDEditR, 1, 2, 1, 1);
-    unlimCheckBoxR = new QCheckBox(this);
-    unlimCheckBoxR->setText(tr("Unlimited"));
-    gridLayoutR->addWidget(unlimCheckBoxR, 2, 2, 1, 1);
-    QLabel* label3R = new QLabel(this);
-    label3R->setText(tr("Count from"));
-    gridLayoutR->addWidget(label3R, 0, 3, 1, 1);
-    QLabel* label4R = new QLabel(this);
-    label4R->setText(tr("Count to"));
-    gridLayoutR->addWidget(label4R, 1, 3, 1, 1);
-    fromCEditR = new QLineEdit(this);
-    gridLayoutR->addWidget(fromCEditR, 0, 4, 1, 1);
-    toCEditR = new QLineEdit(this);
-    gridLayoutR->addWidget(toCEditR, 1, 4, 1, 1);
-
-    QIntValidator* validator = new QIntValidator(0, 65535, this);
-    fromDEdit->setValidator(validator);
-    toDEditR->setValidator(validator);
-
-    QIntValidator* validator1 = new QIntValidator(1, 65535, this);
-    fromCEditR->setValidator(validator1);
-    toCEditR->setValidator(validator1);
-
-    connect(unlimCheckBoxR, SIGNAL(clicked()), SLOT(sl_unlim()));
-}
-
-void RepetitionSet::loadData(void *pData){
-    OpReiteration *pOp = static_cast<OpReiteration*>(pData);
-    Interval i = pOp->getCount();
-    nmin = i.getFrom();
-    nmax = i.getTo();
-    i = pOp->getDistance();
-    min = i.getFrom();
-    max = i.getTo();
-    isMaxUNL = (max == PINF);
-    if (isMaxUNL) max = min + 1;
-    toDEditR->setEnabled( !isMaxUNL);
-    updateData(false);
-}
-void RepetitionSet::saveData(void *pData){
-    OpReiteration *pOp = static_cast<OpReiteration*>(pData);
-    updateData();
-    if (isMaxUNL) max = PINF;
-    pOp->setCount( Interval(nmin, nmax) );
-    pOp->setDistance( Interval(min, max) );
-}
-
-bool RepetitionSet::isReadyToClose(){
-    updateData();
-    if ( isMaxUNL ) max = PINF;
-    if ( min > max ) {
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Wrong parameters"), tr("Higher bound must be grater then lower bound"));
-        mb->exec();
-        return false;
-    }
-    else
-    if ( nmin > nmax ) {
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Wrong parameters"), tr("Higher bound must be grater then lower bound"));
-        mb->exec();
-        return false;
-    }
-    else return true;
-}
-
-void RepetitionSet::updateData(bool side){
-    if(side){
-        nmin = fromCEditR->text().toInt();
-        nmax = toCEditR->text().toInt();
-        min = fromDEdit->text().toInt();
-        max = toDEditR->text().toInt();
-        isMaxUNL = unlimCheckBoxR->isChecked();
-    }else{
-        fromDEdit->setText(QString("%1").arg(min));
-        toDEditR->setText(QString("%1").arg(max));
-        fromCEditR->setText(QString("%1").arg(nmin));
-        toCEditR->setText(QString("%1").arg(nmax));
-        unlimCheckBoxR->setChecked(isMaxUNL);
-    }
-
-}
-
-void RepetitionSet::sl_unlim(){
-    isMaxUNL = unlimCheckBoxR->isChecked();
-    toDEditR->setEnabled( !isMaxUNL);
-}
-}//namespace
-
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryExtSigWiz.h b/src/plugins/expert_discovery/src/ExpertDiscoveryExtSigWiz.h
deleted file mode 100644
index d025139..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryExtSigWiz.h
+++ /dev/null
@@ -1,237 +0,0 @@
-/**
- * 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.
- */
-
-#pragma once
-
-#include "DDisc/Signal.h"
-
-#include <ui/ui_ExpertDiscoverySigExtrWiz.h>
-
-#include "ExpertDiscoveryCSUtil.h"
-
-#include <QStackedLayout>
-#include <QSpacerItem>
-
-namespace U2 {
-
-struct State{
-    double  dProbability;
-    double  dCoverage;
-    double  dFisher;
-    double  dIntProbability;
-    double  dIntFisher;
-    int     nMinComplexity;
-    int     nMaxComplexity;
-    double  dMinPosCorrelation;
-    double  dMaxPosCorrelation;
-    double  dMinNegCorrelation;
-    double  dMaxNegCorrelation;
-    bool    bCorrelationImportant;
-    bool    bCheckFisherMinimization;
-    bool    bStoreOnlyDifferent;
-    bool    bUmEnabled;
-    int     nUmSamplesBound;
-    double  dUmBound;
-
-    void setDefaultState(){
-        dProbability    = 25;
-        dCoverage    = 25;
-        dFisher = 0.05;
-        dIntProbability = 0;
-        dIntFisher = 0.2;
-        nMinComplexity = 1;
-        nMaxComplexity = 5;
-        dMinPosCorrelation    = 0.5;
-        dMaxPosCorrelation    = 1;
-        dMinNegCorrelation    = -1;
-        dMaxNegCorrelation    = 1;
-        bCorrelationImportant = false;
-        bCheckFisherMinimization = true;
-        bStoreOnlyDifferent = true;
-        bUmEnabled = false;
-        dUmBound = 0.05;
-        nUmSamplesBound = 50;
-    }
-};
-
-using namespace DDisc;
-
-class OperationSet : public QWidget{
-    Q_OBJECT
-public:
-    OperationSet(QWidget* parent):QWidget(parent){};
-    virtual void loadData(void *pData){};
-    virtual void saveData(void *pData){};
-    virtual bool isReadyToClose(){return true;}
-
-};
-
-class ExpertDiscoveryExtSigWiz : public QWizard, public Ui_SignalsExtrWiz{
-    Q_OBJECT
-public:
-    ExpertDiscoveryExtSigWiz(QWidget *parent, CSFolder* f, int positiveSize, bool isLetters);
-    virtual ~ExpertDiscoveryExtSigWiz();
-
-    double  getProbability() {return state.dProbability/100;}
-    double  getCoverage() {return state.dCoverage/100;}
-    double  getFisher() {return state.dFisher;}
-    double  getIntProbability() {return state.dIntProbability/100;}
-    double  getIntFisher() {return state.dIntFisher;}
-    int     getMinComplexity() {return state.nMinComplexity;}
-    int     getMaxComplexity() {return state.nMaxComplexity;}
-    double  getMinPosCorrelation() {return state.dMinPosCorrelation;}
-    double  getMaxPosCorrelation() {return state.dMaxPosCorrelation;}
-    double  getMinNegCorrelation() {return state.dMinNegCorrelation;}
-    double  getMaxNegCorrelation() {return state.dMaxNegCorrelation;}
-    bool    getCorrelationImportant() {return state.bCorrelationImportant;}
-    bool    getCheckFisherMinimization() {return state.bCheckFisherMinimization;}
-    bool    getStoreOnlyDifferent() {return state.bStoreOnlyDifferent;}
-    bool    getUmEnabled() {return state.bUmEnabled;}
-    int     getUmSamplesBound() {return state.nUmSamplesBound;}
-    double  getUmBound() {return state.dUmBound;}
-    std::vector<Operation*>& getPredicates() {return predicates;}
-
-    void setFolder(CSFolder* f){folder = f;}
-    CSFolder* getFolder(){return folder;}
-
-    void predicatesByDefault(bool isLetters);
-
-    virtual void accept();
-
-protected slots:
-    void sl_advButton();
-
-    void sl_distButton();
-    void sl_repetButton();
-    void sl_intervButton();
-    void sl_deleteButton();
-
-    void sl_idChanged(int id);
-    void sl_createSubfolder();
-
-    void sl_selectionChanged (QTreeWidgetItem * current, QTreeWidgetItem * previous);
-signals:
-    void si_newFolder(const QString& folderName);
-
-private:
-    int posSize;
-    State state;
-    std::vector<Operation*> predicates;
-    CSFolder* folder;
-    QTreeWidgetItem *distItem, *intervItem, *repetItem;
-
-    OperationSet* sigSet[4];
-    QStackedLayout* sigSetLayout;
-
-    void initSet();
-
-    void updateTree(const CSFolder* pFolder = NULL, QTreeWidgetItem* treeItem = NULL);
-
-    bool checkD(const QLineEdit* lineE) const;
-
-    void hideParameters();
-
-};
-
-class DistanceSet : public OperationSet{
-    Q_OBJECT
-
-private:
-    int to;
-    int from;
-    bool isOrderImportant;
-    bool isMaxUNL;
-    QLineEdit* fromEditD;
-    QLineEdit* toEditD;
-    QCheckBox* unlimCheckBoxD;
-    QCheckBox* orderCheckBoxD;
-
-public:
-    DistanceSet (QWidget* parent);
-
-    virtual void loadData(void *pData);
-    virtual void saveData(void *pData);
-    virtual bool isReadyToClose();
-    void updateData(bool side=true);
-
-protected slots:
-    void sl_unlim();
-    void sl_order();
-};
-
-class IntervalSet : public OperationSet{
-    Q_OBJECT
-private:
-    int from;
-    int to;
-    bool isMaxUNL;
-    QLineEdit* fromIEdit;
-    QLineEdit* toIEdit;
-    QCheckBox* unlimCheckBoxI;
-
-public:
-    IntervalSet (QWidget* parent);
-
-    virtual void loadData(void *pData);
-    virtual void saveData(void *pData);
-    virtual bool isReadyToClose();
-    void updateData(bool side=true);
-
-protected slots:
-    void sl_unlim();
-};
-
-class RepetitionSet : public OperationSet{
-    Q_OBJECT
-private:
-    int nmin;
-    int nmax;
-    int min;
-    int max;
-    bool isMaxUNL;
-    QLineEdit* fromDEdit;
-    QLineEdit* toDEditR;
-    QCheckBox* unlimCheckBoxR;
-    QLineEdit* fromCEditR;
-    QLineEdit* toCEditR;
-
-public:
-    RepetitionSet (QWidget* parent);
-
-    virtual void loadData(void *pData);
-    virtual void saveData(void *pData);
-    virtual bool isReadyToClose();
-    void updateData(bool side=true);
-
-protected slots:
-    void sl_unlim();
-};
-
-enum {
-    T_UNDEFINED,
-    T_DISTANCE,
-    T_REITERATION,
-    T_INTERVAL
-};
-
-
-
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryGraphs.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryGraphs.cpp
deleted file mode 100644
index ab4f599..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryGraphs.cpp
+++ /dev/null
@@ -1,310 +0,0 @@
-/**
- * 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 "ExpertDiscoveryGraphs.h"
-
-#include <U2Core/AppContext.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/TextUtils.h>
-
-#include <U2Gui/GraphUtils.h>
-
-namespace U2{
-
-ExpertDiscoveryScoreGraphAlgorithm::ExpertDiscoveryScoreGraphAlgorithm(ExpertDiscoveryData& data, int _edSeqNumber, SequenceType sType)
-    : edData(data), edSeqNumber(_edSeqNumber), edSeqType(sType)
-{
-    recData = edData.getRecognitionData(edSeqNumber, edSeqType);
-}
-
-/**
- * Calculates data for a score graph
- *
- * @param result Points of the graph
- * @param sequenceObject The sequence used to draw the graph
- * @param region The region of the sequence to use
- * @param windowData Current parameters of the graph (window, step, etc.)
- */
-void ExpertDiscoveryScoreGraphAlgorithm::calculate(
-    QVector<float>& result,
-    U2SequenceObject* sequenceObject,
-    const U2Region& region,
-    const GSequenceGraphWindowData* windowData,
-    U2OpStatus &os)
-{
-    Q_UNUSED(sequenceObject);
-    Q_UNUSED(os);
-    assert(windowData !=NULL);
-
-    int windowSize = windowData->window;
-    int windowStep = windowData->step;
-
-    // Variables
-    int windowLeft = region.startPos;
-    float windowThreshold = 0;
-
-    // Getting the number of steps
-    int stepsNumber = GSequenceGraphUtils::getNumSteps(region, windowData->window, windowData->step);
-
-    // Allocating memory for the results
-    result.reserve(stepsNumber);
-
-    // Calculating the results
-    for (int i = 0; i < stepsNumber; ++i) {
-        // Calculating the threshold in the current window
-        windowThreshold = 0;
-        for (int j = windowLeft; j < windowLeft + windowSize - 1; ++j)
-        {
-            CHECK_OP(os, );
-            if(j < recData.size()){
-                windowThreshold+=recData[j];
-            }
-        }
-        windowThreshold /= (windowSize - 1);
-
-        // Returning the point on the graph
-        result.append(windowThreshold);
-
-        // Enlarging the left position to the step
-        windowLeft += windowStep;
-    }
-}
-
-
-/**
- * Name of the graph (shown to a user)
- */
-static QString nameByType() {
-    return ExpertDiscoveryScoreGraphFactory::tr("Score graph");
-
-}
-
-
-/**
- * Constructor of the ExpertDiscovery score graph
- */
-ExpertDiscoveryScoreGraphFactory::ExpertDiscoveryScoreGraphFactory(QObject* parent,
-    ExpertDiscoveryData& data, int _edSeqNumber, SequenceType sType)
-    : GSequenceGraphFactory(nameByType(), parent), edData(data), edSeqNumber(_edSeqNumber), edSeqType(sType)
-{
-
-}
-
-/**
- * Verification
- */
-bool ExpertDiscoveryScoreGraphFactory::isEnabled(const U2SequenceObject* sequenceObject) const {
-    const DNAAlphabet* alphabet = sequenceObject->getAlphabet();
-    return alphabet->getId() == BaseDNAAlphabetIds::NUCL_DNA_DEFAULT();
-}
-
-
-/**
- * Initializes graph data
- */
-QList<QSharedPointer<GSequenceGraphData> > ExpertDiscoveryScoreGraphFactory::createGraphs(GSequenceGraphView* view)
-{
-    Q_UNUSED(view);
-    QList<QSharedPointer<GSequenceGraphData> > res;
-    assert(isEnabled(view->getSequenceObject()));
-    assert(edSeqType!=UNKNOWN_SEQUENCE);
-    QSharedPointer<GSequenceGraphData> data = QSharedPointer<GSequenceGraphData>(new GSequenceGraphData(getGraphName()));
-    data->ga = new ExpertDiscoveryScoreGraphAlgorithm(edData, edSeqNumber, edSeqType);
-    res.append(data);
-    return res;
-}
-
-
-/**
- * Initializes the graph drawer
- */
-GSequenceGraphDrawer* ExpertDiscoveryScoreGraphFactory::getDrawer(GSequenceGraphView* view)
-{
-    GSequenceGraphWindowData wd(DEFAULT_WINDOW_STEP, DEFAULT_WINDOW_SIZE);
-    return new GSequenceGraphDrawer(view, wd);
-}
-
-
-
-QColor ExpertDiscoveryRecognitionErrorGraphWidget::ER1COLOR = QColor(255, 0, 0);
-QColor ExpertDiscoveryRecognitionErrorGraphWidget::ER2COLOR = QColor(0, 0, 255);
-QColor ExpertDiscoveryRecognitionErrorGraphWidget::BOUNDCOLOR = QColor(255,0,255);
-
-ExpertDiscoveryRecognitionErrorGraphWidget::ExpertDiscoveryRecognitionErrorGraphWidget(QWidget* parent,
-const std::vector<double>& _posScore, const std::vector<double>& _negScore, const CalculateErrorTaskInfo& _calcualteSettings)
-:QWidget(parent), redraw(false), posScore(_posScore), negScore(_negScore), recBound(0), calcualteSettings(_calcualteSettings){
-
-    textOffset = 15;
-    w = width() - 2*textOffset;
-    h = height() - 2*textOffset;
-    connect(&errorsTask, SIGNAL(si_finished()), SLOT(sl_redraw()));
-    sl_calculateErrors(calcualteSettings);
-}
-void ExpertDiscoveryRecognitionErrorGraphWidget::draw(double curRecBound){
-    recBound = curRecBound;
-    redraw = true;
-    update();
-}
-
-void ExpertDiscoveryRecognitionErrorGraphWidget::sl_redraw(){
-    draw(recBound);
-}
-
-void ExpertDiscoveryRecognitionErrorGraphWidget::sl_calculateErrors(const CalculateErrorTaskInfo& _calcualteSettings){
-    calcualteSettings = _calcualteSettings;
-    errorsTask.run(new ExpertDiscoveryCalculateErrors(calcualteSettings));
-}
-
-void ExpertDiscoveryRecognitionErrorGraphWidget::paintEvent(QPaintEvent * e){
-    drawAll();
-    QWidget::paintEvent(e);
-}
-
-void ExpertDiscoveryRecognitionErrorGraphWidget::drawAll(){
-    if(pixmap.size() != size()){
-        pixmap = QPixmap(size());
-        w = width() - 2*textOffset;
-        h = height() - 2*textOffset;
-        redraw = true;
-    }
-    if(redraw){
-        pixmap.fill(Qt::transparent);
-        QPainter p(&pixmap);
-
-        if(errorsTask.isIdle()){
-            QPixmap graphPixmap = QPixmap(w, h);
-            graphPixmap.fill(Qt::white);
-            QPainter grP(&graphPixmap);
-            drawGraph(grP);
-            p.drawPixmap(textOffset, textOffset, graphPixmap);
-            drawRuler(p);
-            redraw = false;
-        }
-    }
-    QPainter p(this);
-    p.drawPixmap(0, 0, pixmap);
-}
-
-void ExpertDiscoveryRecognitionErrorGraphWidget::drawGraph(QPainter& p){
-
-    double step = calcualteSettings.scoreStep;
-
-    assert(step!=0);
-
-    int regLen = calcualteSettings.scoreReg.length;
-    int stepsNum = regLen/step;
-
-    int scoreWidthPoint = 0;
-    const ErrorsInfo& errorsInfo = errorsTask.getResult();
-    QPainterPath erFirstTypePath;
-    QPainterPath erSecondTypePath;
-    if (stepsNum  < w){
-        emit si_showWarning(false);
-
-        double pixelStep = double(w)/stepsNum;
-        double ratioY = double(errorsInfo.maxErrorVal)/(h);
-
-        int hPixels = 0;
-        if(stepsNum!=0){
-            hPixels = qint64(double(errorsInfo.errorFirstType[0])/ratioY +0.5);
-            erFirstTypePath.moveTo(QPointF(0, h - hPixels));
-
-            hPixels = qint64(double(errorsInfo.errorSecondType[0])/ratioY +0.5);
-            erSecondTypePath.moveTo(QPointF(0, h - hPixels));
-        }
-        for(int i = 1; i < stepsNum; i++){
-            hPixels = qint64(double(errorsInfo.errorFirstType[i])/ratioY +0.5);
-            erFirstTypePath.lineTo(QPointF(i*pixelStep, h - hPixels));
-
-            hPixels = qint64(double(errorsInfo.errorSecondType[i])/ratioY +0.5);
-            erSecondTypePath.lineTo(QPointF(i*pixelStep, h - hPixels));
-        }
-        scoreWidthPoint = int(((recBound-calcualteSettings.scoreReg.startPos)/calcualteSettings.scoreReg.length)*w+0.5);
-    }else{                                                   //average value per pixel used
-        emit si_showWarning(true);
-        int windowSize = int((double(stepsNum)/w) +0.5);
-        double ratioY = double(errorsInfo.maxErrorVal)/(h);
-
-        int hPixels = 0;
-        if(stepsNum!=0){
-            hPixels = qint64(double(errorsInfo.errorFirstType[0])/ratioY +0.5);
-            erFirstTypePath.moveTo(QPointF(0, h - hPixels));
-
-            hPixels = qint64(double(errorsInfo.errorSecondType[0])/ratioY +0.5);
-            erSecondTypePath.moveTo(QPointF(0, h - hPixels));
-        }
-        for(int i = 0; i < stepsNum; i+=windowSize){
-            double val = 0;
-            for (int j = 0; (j < windowSize) && (i+j<stepsNum); j++){
-                val+= errorsInfo.errorFirstType[i+j];
-            }
-            hPixels = qint64(val/(ratioY*windowSize) + 0.5);
-            erFirstTypePath.lineTo(QPointF(i, h - hPixels));
-
-            val = 0;
-            for (int j = 0; (j < windowSize) && (i+j<stepsNum); j++){
-                val+= errorsInfo.errorSecondType[i+j];
-            }
-            hPixels = qint64(val/(ratioY*windowSize) + 0.5);
-            erSecondTypePath.lineTo(QPointF(i, h - hPixels));
-            if((calcualteSettings.scoreReg.length/double(stepsNum)*i + calcualteSettings.scoreReg.startPos <= recBound)){
-                scoreWidthPoint = i;
-            }
-        }
-    }
-    QPen linePen(ER1COLOR);
-    linePen.setWidth(3);
-
-    p.setPen(linePen);
-    p.drawPath(erFirstTypePath);
-
-    linePen.setColor(ER2COLOR);
-    p.setPen(linePen);
-    p.drawPath(erSecondTypePath);
-
-    if(recBound >= calcualteSettings.scoreReg.startPos && recBound <= calcualteSettings.scoreReg.endPos()){
-        linePen.setColor(BOUNDCOLOR);
-        p.setPen(linePen);
-        p.drawLine(QPoint(scoreWidthPoint, 0), QPoint(scoreWidthPoint, h ));
-    }
-}
-
-void ExpertDiscoveryRecognitionErrorGraphWidget::drawRuler(QPainter& p){
-    GraphUtils::RulerConfig rConf;
-
-    rConf.notchSize = 2;
-    rConf.textPosition = GraphUtils::RIGHT;
-    QFont rulerFont;
-
-    rulerFont.setFamily("Arial");
-    rulerFont.setPointSize(8);
-
-    int startX = calcualteSettings.scoreReg.startPos;
-    int endX = calcualteSettings.scoreReg.length;
-
-    GraphUtils::drawRuler(p, QPoint(textOffset, textOffset + h), w, startX, endX, rulerFont, rConf);
-    rConf.textPosition = GraphUtils::LEFT;
-    rConf.direction = GraphUtils::BTT;
-    GraphUtils::drawRuler(p, QPoint(textOffset, textOffset), h, 0, 1, rulerFont, rConf);
-}
-
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryGraphs.h b/src/plugins/expert_discovery/src/ExpertDiscoveryGraphs.h
deleted file mode 100644
index fe7fbf7..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryGraphs.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * 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 _EXPERTDISCOVERY_GRAPHS_HEADER_
-#define _EXPERTDISCOVERY_GRAPHS_HEADER_
-
-
-#include "ExpertDiscoveryData.h"
-#include "ExpertDiscoveryTask.h"
-#include <U2View/GraphMenu.h>
-#include <U2View/GSequenceGraphView.h>
-
-namespace U2{
-
-/**
- * Algorithm used to calculate data of a graph
- */
-class ExpertDiscoveryScoreGraphAlgorithm : public GSequenceGraphAlgorithm
-{
-public:
-    ExpertDiscoveryScoreGraphAlgorithm(ExpertDiscoveryData& data, int _edSeqNumber, SequenceType sType);
-
-    void calculate(QVector<float> &, U2SequenceObject *, const U2Region &, const GSequenceGraphWindowData *, U2OpStatus &);
-
-private:
-    int edSeqNumber;
-    ExpertDiscoveryData& edData;
-    SequenceType edSeqType;
-    RecognizationData recData;
-};
-
-/**
- * Factory used to draw a DNA ExpertDiscovery score graph
- */
-class ExpertDiscoveryScoreGraphFactory : public GSequenceGraphFactory
-{
-    Q_OBJECT
-public:
-    ExpertDiscoveryScoreGraphFactory(QObject*, ExpertDiscoveryData& data, int _edSeqNumber, SequenceType sType);
-    virtual QList<QSharedPointer<GSequenceGraphData> > createGraphs(GSequenceGraphView*);
-    virtual GSequenceGraphDrawer* getDrawer(GSequenceGraphView*);
-    virtual bool isEnabled(const U2SequenceObject*) const;
-
-private:
-    int edSeqNumber;
-    ExpertDiscoveryData& edData;
-    SequenceType edSeqType;
-
-    /** Default size of "window" on a graph */
-    static const int DEFAULT_WINDOW_SIZE = 2;
-
-    /** Default size of "step" on a graph */
-    static const int DEFAULT_WINDOW_STEP = 1;
-};
-
-
-class ExpertDiscoveryRecognitionErrorGraphWidget : public QWidget {
-    Q_OBJECT
-public:
-    ExpertDiscoveryRecognitionErrorGraphWidget(QWidget* parent,
-    const std::vector<double>& posScore,
-    const std::vector<double>& negScore,
-    const CalculateErrorTaskInfo& _calcualteSettings);
-    void draw(double curRecBound);
-
-    static QColor ER1COLOR;
-    static QColor ER2COLOR;
-    static QColor BOUNDCOLOR;
-
-signals:
-    void si_showWarning(bool isShown);
-
-protected:
-    void paintEvent(QPaintEvent * event);
-
-public slots:
-    void sl_calculateErrors(const CalculateErrorTaskInfo& _calcualteSettings);
-    void sl_redraw();
-
-private:
-    void drawAll();
-    void drawGraph(QPainter& p);
-    void drawRuler(QPainter& p);
-
-    QPixmap     pixmap;
-    bool        redraw;
-
-    BackgroundTaskRunner<ErrorsInfo> errorsTask;
-
-    const std::vector<double>& posScore;
-    const std::vector<double>& negScore;
-
-    double recBound;
-    CalculateErrorTaskInfo calcualteSettings;
-
-    int w;
-    int h;
-    int textOffset;
-
-};
-
-}//namespace
-
-#endif
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPersistent.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryPersistent.cpp
deleted file mode 100644
index 63c0ce9..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPersistent.cpp
+++ /dev/null
@@ -1,446 +0,0 @@
-#include "ExpertDiscoveryPersistent.h"
-
-
-namespace U2 {
-
-void EDPMSequence::save(QDataStream& ar, Sequence& rSequence)
-{
-    ar << QString::fromStdString(rSequence.getName());
-    ar << QString::fromStdString(rSequence.getSequence());
-    ar << rSequence.isHasScore();
-    ar << rSequence.getScore();
-}
-
-void EDPMSequence::load(QDataStream& ar, Sequence& rSequence){
-    QString strName;
-    QString strSequence;
-    bool bHasScore = false;
-    double dScore = 0;
-    ar >> strName;
-    ar >> strSequence;
-    ar >> bHasScore;
-    ar >> dScore;
-
-    rSequence.setName(strName.toStdString());
-    rSequence.setSequence(strSequence.toStdString());
-    rSequence.setHasScore(bHasScore);
-    rSequence.setScore(dScore);
-}
-
-void EDPMSeqBase::save(QDataStream& ar, SequenceBase& rSeqBase)
-{
-    int nSize = rSeqBase.getSize();
-    ar << nSize;
-    for (int i=0; i<nSize; i++)
-        EDPMSequence::save(ar, rSeqBase.getSequence(i));
-}
-
-void EDPMSeqBase::load(QDataStream& ar, SequenceBase& rSeqBase){
-    rSeqBase.clear();
-    int nSize = 0;
-    ar >> nSize;
-    assert( nSize >= 0 );
-    Sequence seq;
-    for (int i=0; i<nSize; i++) {
-        EDPMSequence::load(ar, seq);
-        rSeqBase.addSequence(seq);
-    }
-}
-
-
-void EDPMMrkSignal::save(QDataStream& ar, Marking::IntervalSet& rMrk)
-{
-    ar << (int)(rMrk.size());
-    Marking::IntervalSet::iterator i = rMrk.begin();
-    while (i!=rMrk.end()) {
-        ar << (*i).getFrom();
-        ar << (*i).getTo();
-        i++;
-    }
-}
-
-void EDPMMrkSignal::load(QDataStream& ar, Marking::IntervalSet& rMrk){
-    int nSize = 0;
-    ar >> nSize;
-    for (int i=0; i<nSize; i++) {
-        int nFrom = 0;
-        ar >> nFrom;
-        int nTo = 0;
-        ar >> nTo;
-        rMrk.insert(DDisc::Interval(nFrom, nTo));
-    }
-}
-
-
-
-void EDPMMrkFamily::save(QDataStream& ar, Marking::FamilyMarking& rMrk)
-{
-    ar << (int)(rMrk.size());
-    Marking::FamilyMarking::iterator i = rMrk.begin();
-    while (i!=rMrk.end()) {
-        ar << QString::fromStdString(i->first);
-        EDPMMrkSignal::save(ar, i->second);
-        i++;
-    }
-}
-
-void EDPMMrkFamily::load(QDataStream& ar, Marking::FamilyMarking& rMrk){
-    int nSize = 0;
-    ar >> nSize;
-    for (int i=0; i<nSize; i++) {
-        QString strSignalName;
-        Marking::IntervalSet SignalMrk;
-        ar >> strSignalName;
-        EDPMMrkSignal::load(ar, SignalMrk);
-        rMrk[strSignalName.toStdString()] = SignalMrk;
-    }
-}
-
-void EDPMMrk::save(QDataStream& ar, Marking& rMrk)
-{
-    Marking::MarkingData& rData = rMrk.marking;
-
-    ar << (int)(rData.size());
-    Marking::MarkingData::iterator i = rData.begin();
-    while (i!=rData.end()) {
-        ar << QString::fromStdString(i->first);
-        EDPMMrkFamily::save(ar, i->second);
-        i++;
-    }
-}
-
-void EDPMMrk::load(QDataStream& ar, Marking& rMrk){
-    Marking::MarkingData& rData = rMrk.marking;
-    int nSize = 0;
-    ar >> nSize;
-    for (int i=0; i<nSize; i++) {
-        QString strFamilyName;
-        Marking::FamilyMarking FamilyMrk;
-        ar >> strFamilyName;
-        EDPMMrkFamily::load(ar, FamilyMrk);
-        rData[strFamilyName.toStdString()] = FamilyMrk;
-    }
-}
-
-void EDPMMrkBase::save(QDataStream& ar, MarkingBase& rMrkBase, int nSeqCount)
-{
-    ar << nSeqCount;
-    for (int i=0; i<nSeqCount; i++) {
-        try {
-            EDPMMrk::save(ar, rMrkBase.getMarking(i));
-        }
-        catch (exception& ex) {//TODO: check range_error
-            Marking m;
-            EDPMMrk::save(ar, m);
-        }
-    }
-}
-
-void EDPMMrkBase::load(QDataStream& ar, MarkingBase& rMrkBase, int nSeqCount){
-    rMrkBase.clear();
-    int nSize = 0;
-    ar >> nSize;
-    for (int i=0; i<nSize; i++) {
-        Marking mrk;
-        EDPMMrk::load(ar, mrk);
-        rMrkBase.setMarking(i, mrk);
-    }
-}
-
-void EDPMDescInfo::save(QDataStream& ar, MetaInfo& rInfo)
-{
-    ar << rInfo.getNo();
-    ar << QString::fromStdString(rInfo.getName());
-    ar << QString::fromStdString(rInfo.getMethodName());
-
-}
-
-void EDPMDescInfo::load(QDataStream& ar, MetaInfo& rInfo){
-    int nNo = 0;
-    ar >> nNo;
-    QString strName;
-    QString strMethodName;
-    ar >> strName;
-    ar >> strMethodName;
-    rInfo.setNo(nNo);
-    rInfo.setName(strName.toStdString());
-    rInfo.setMethodName(strMethodName.toStdString());
-}
-
-void EDPMDescFamily::save(QDataStream& ar, Family& rFamily)
-{
-
-    ar << QString::fromStdString(rFamily.getName());
-    int nSize = rFamily.getSignalNumber();
-    ar << nSize;
-    for (int i=0; i<nSize; i++)
-        EDPMDescInfo::save(ar, rFamily.getMetaInfo(i));
-}
-
-void EDPMDescFamily::load(QDataStream& ar, Family& rFamily){
-    QString strName;
-    ar >> strName;
-    rFamily.setName(strName.toStdString());
-    int nSize = 0;
-    ar >> nSize;
-    for (int i=0; i<nSize; i++) {
-        MetaInfo info;
-        EDPMDescInfo::load(ar, info);
-        rFamily.AddInfo(info);
-    }
-}
-
-void EDPMDescription::save(QDataStream& ar, MetaInfoBase& rDesc)
-{
-    int nSize = rDesc.getFamilyNumber();
-    ar << nSize;
-    for (int i=0; i<nSize; i++)
-        EDPMDescFamily::save(ar, rDesc.getSignalFamily(i));
-}
-
-void EDPMDescription::load(QDataStream& ar, MetaInfoBase& rDesc){
-    rDesc.clear();
-    int nSize = 0;
-    ar >> nSize;
-    for (int i=0; i<nSize; i++) {
-        Family family;
-        EDPMDescFamily::load(ar, family);
-        rDesc.addFamily(family);
-    }
-}
-
-
-void EDPMCS::save(QDataStream& ar, Signal* pSignal)
-{
-    ar << QString::fromStdString(pSignal->getName());
-    ar << QString::fromStdString(pSignal->getDescription());
-    ar << bool(pSignal->isPriorParamsDefined());
-    if (pSignal->isPriorParamsDefined()) {
-        ar << pSignal->getPriorProbability();
-        ar << pSignal->getPriorFisher();
-        ar << pSignal->getPriorPosCoverage();
-        ar << pSignal->getPriorNegCoverage();
-    }
-    Operation *pOp = pSignal->getSignal();
-    EDPMOperation::save(ar, pOp);
-
-}
-
-void EDPMCS::load(QDataStream& ar, Signal* pSignal){
-    QString strName;
-    QString strDescription;
-    bool bPriorParamsDefined;
-    double dPriorProb = 0;
-    double dPriorFisher = 1;
-    double dPriorPosCoverage = 0;
-    double dPriorNegCoverage = 0;
-
-    ar >> strName;
-    ar >> strDescription;
-    ar >> bPriorParamsDefined;
-
-    if (bPriorParamsDefined) {
-        ar >> dPriorProb;
-        ar >> dPriorFisher;
-        ar >> dPriorPosCoverage;
-        ar >> dPriorNegCoverage;
-    }
-
-    pSignal->setName(strName.toStdString());
-    pSignal->setDescription(strDescription.toStdString());
-    Operation *pOp = 0;
-    EDPMOperation::load(ar, pOp);
-
-    pSignal->attach(pOp);
-    pSignal->setPriorParamsDefined(bPriorParamsDefined != 0);
-    if (pSignal->isPriorParamsDefined()) {
-        pSignal->setPriorProbability(dPriorProb);
-        pSignal->setPriorFisher(dPriorFisher);
-        pSignal->setPriorPosCoverage(dPriorPosCoverage);
-        pSignal->setPriorNegCoverage(dPriorNegCoverage);
-    }
-}
-
-void EDPMCSFolder::save(QDataStream& ar, CSFolder* pFolder)
-{
-    ar << pFolder->getName();
-
-    int nFolderNumber = pFolder->getFolderNumber();
-    ar << nFolderNumber;
-    for (int i=0; i<nFolderNumber; i++)
-        EDPMCSFolder::save(ar, pFolder->getSubfolder(i));
-    int nSignalNumber = pFolder->getSignalNumber();
-    ar << nSignalNumber;
-    for (int i=0; i<nSignalNumber; i++)
-        EDPMCS::save(ar, pFolder->getSignal(i));
-
-}
-
-void EDPMCSFolder::load(QDataStream& ar, CSFolder* pFolder){
-    QString strName;
-    ar >> strName;
-    pFolder->setName(strName);
-    int nFolderNumber = 0;
-    ar >> nFolderNumber;
-    for (int i=0; i<nFolderNumber; i++) {
-        CSFolder *pSubfolder = new CSFolder;
-        EDPMCSFolder::load(ar, pSubfolder);
-        pFolder->addFolder(pSubfolder);
-    }
-    int nSignalNumber = 0;
-    ar >> nSignalNumber;
-    for (int i=0; i<nSignalNumber; i++) {
-        Signal *pSignal = new Signal;
-        EDPMCS::load(ar, pSignal);
-        pFolder->addSignal(pSignal);
-    }
-}
-
-void EDPMOperation::save(QDataStream& ar, Operation*& pOp)
-{
-    EOpType eType;
-    if (pOp) eType = pOp->getType();
-    else eType = OP_UNDEFINED;
-    ar << (int)eType;
-
-    switch (eType) {
-        case OP_DISTANCE	:	saveDistance(ar, dynamic_cast<OpDistance*>(pOp)); break;
-        case OP_REITERATION	:	saveReiteration(ar, dynamic_cast<OpReiteration*>(pOp)); break;
-        case OP_INTERVAL	:	saveInterval(ar, dynamic_cast<OpInterval*>(pOp)); break;
-        case OP_TS			:	saveTS(ar, dynamic_cast<TS*>(pOp)); break;
-        case OP_UNDEFINED	:	return;
-        default: assert(0);
-    }
-
-    for (int i=0; i<pOp->getArgumentNumber(); i++) {
-        Operation *pArg = pOp->getArgument(i);
-        EDPMOperation::save(ar,pArg);
-        pOp->setArgument(pArg,i);
-    }
-}
-
-void EDPMOperation::saveDistance(QDataStream& ar, OpDistance* pOp)
-{
-    ar << pOp->getDistance().getFrom();
-    ar << pOp->getDistance().getTo();
-    ar << pOp->getDistanceType();
-    ar << pOp->isOrderImportant();
-
-}
-
-void EDPMOperation::saveReiteration(QDataStream& ar, OpReiteration* pOp)
-{
-    ar << pOp->getDistance().getFrom();
-    ar << pOp->getDistance().getTo();
-    ar << pOp->getCount().getFrom();
-    ar << pOp->getCount().getTo();
-    ar << pOp->getDistanceType();
-}
-
-void EDPMOperation::saveInterval(QDataStream& ar, OpInterval* pOp)
-{
-    ar << pOp->getInt().getFrom();
-    ar << pOp->getInt().getTo();
- }
-
-void EDPMOperation::saveTS(QDataStream& ar, TS* pOp)
-{
-    ar << pOp->isFromMarking();
-    ar << QString::fromStdString(pOp->getWord());
-    ar << QString::fromStdString(pOp->getName());
-    ar << QString::fromStdString(pOp->getFamily());
-}
-
-void EDPMOperation::load(QDataStream& ar, Operation*& pOp){
-    EOpType eType;
-    int tmp;
-
-    ar>>tmp;
-    eType = (EOpType)tmp;
-    switch (eType) {
-        case OP_DISTANCE	:	pOp = new OpDistance(); break;
-        case OP_REITERATION	:	pOp = new OpReiteration(); break;
-        case OP_INTERVAL	:	pOp = new OpInterval(); break;
-        case OP_TS			:	pOp = new TS(); break;
-        case OP_UNDEFINED	:	pOp = NULL; break;
-    }
-
-    switch (eType) {
-        case OP_DISTANCE	:	loadDistance(ar, dynamic_cast<OpDistance*>(pOp)); break;
-        case OP_REITERATION	:	loadReiteration(ar, dynamic_cast<OpReiteration*>(pOp)); break;
-        case OP_INTERVAL	:	loadInterval(ar, dynamic_cast<OpInterval*>(pOp)); break;
-        case OP_TS			:	loadTS(ar, dynamic_cast<TS*>(pOp)); break;
-        case OP_UNDEFINED	:	return;
-        default: assert(0);
-    }
-
-    for (int i=0; i<pOp->getArgumentNumber(); i++) {
-        Operation *pArg = pOp->getArgument(i);
-        EDPMOperation::load(ar,pArg);
-        pOp->setArgument(pArg,i);
-    }
-}
-
-void EDPMOperation::loadDistance(QDataStream& ar, OpDistance* pOp){
-    DDisc::Interval dist;
-    int tmp = 0;
-    ar >> tmp;
-    dist.setFrom(tmp);
-    ar >> tmp;
-    dist.setTo(tmp);
-    pOp->setDistance(dist);
-    EDistType type;
-    ar >> tmp;
-    type = (EDistType)tmp;
-    pOp->setDistanceType( type);
-    bool bOrder;
-    ar >> bOrder;
-    pOp->setOrderImportant(bOrder);
-}
-void EDPMOperation::loadReiteration(QDataStream& ar, OpReiteration* pOp){
-    DDisc::Interval dist;
-    DDisc::Interval count;
-    int tmp = 0;
-    ar >> tmp;
-    dist.setFrom(tmp);
-    ar >> tmp;
-    dist.setTo(tmp);
-    ar >> tmp;
-    count.setFrom(tmp);
-    ar >> tmp;
-    count.setTo(tmp);
-
-    pOp->setDistance(dist);
-    EDistType type;
-    ar >> tmp;
-    type = (EDistType)tmp;
-    pOp->setDistanceType( type );
-    pOp->setCount(count);
-}
-void EDPMOperation::loadInterval(QDataStream& ar, OpInterval* pOp){
-    DDisc::Interval interval;
-    int tmp = 0;
-    ar >> tmp;
-    interval.setFrom(tmp);
-     ar >> tmp;
-    interval.setTo(tmp);
-    pOp->setInt(interval);
-}
-void EDPMOperation::loadTS(QDataStream& ar, TS* pOp){
-    bool bFromMarking;
-    ar >> bFromMarking;
-    pOp->setFromMarking(bFromMarking);
-    QString strWord;
-    QString strName;
-    QString strFamily;
-
-    ar >> strWord;
-    ar >> strName;
-    ar >> strFamily;
-
-    pOp->setWord(strWord.toStdString());
-    pOp->setName(strName.toStdString());
-    pOp->setFamily(strFamily.toStdString());
-}
-
-} //namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPersistent.h b/src/plugins/expert_discovery/src/ExpertDiscoveryPersistent.h
deleted file mode 100644
index cd44355..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPersistent.h
+++ /dev/null
@@ -1,167 +0,0 @@
-#ifndef _U2_EXPERT_DIS_PERSISTENT_H_
-#define _U2_EXPERT_DIS_PERSISTENT_H_
-
-#include "DDisc/Sequence.h"
-#include "DDisc/MetaInfo.h"
-#include "DDisc/Signal.h"
-#include "ExpertDiscoveryCSUtil.h"
-
-#include <QDataStream>
-
-namespace U2 {
-
-using namespace DDisc;
-
-class EDPMSequence
-{
-public:
-    static void save(QDataStream& ds, Sequence& rSequence);
-    static void load(QDataStream& ds, Sequence& rSequence);
-private:
-    EDPMSequence(void);
-    ~EDPMSequence(void);
-    const EDPMSequence& operator =(const EDPMSequence&);
-};
-
-class EDPMSeqBase
-{
-public:
-    static void save(QDataStream& ar, SequenceBase& rSeqBase);
-    static void load(QDataStream& ar, SequenceBase& rSeqBase);
-private:
-    EDPMSeqBase(void);
-    ~EDPMSeqBase(void);
-    const EDPMSeqBase& operator =(const EDPMSeqBase&);
-};
-
-
-class EDPMMrkSignal
-{
-public:
-    static void save(QDataStream& ar, Marking::IntervalSet& rMrk);
-    static void load(QDataStream& ar, Marking::IntervalSet& rMrk);
-private:
-    EDPMMrkSignal(void);
-    ~EDPMMrkSignal(void);
-    const EDPMMrkSignal& operator =(const EDPMMrkSignal&);
-};
-
-class EDPMMrkFamily
-{
-public:
-    static void save(QDataStream& ar, Marking::FamilyMarking& rMrk);
-    static void load(QDataStream& ar, Marking::FamilyMarking& rMrk);
-private:
-    EDPMMrkFamily(void);
-    ~EDPMMrkFamily(void);
-    const EDPMMrkFamily& operator =(const EDPMMrkFamily&);
-};
-
-class EDPMMrk
-{
-public:
-    static void save(QDataStream& ar, Marking& rMrk);
-    static void load(QDataStream& ar, Marking& rMrk);
-private:
-    EDPMMrk(void);
-    ~EDPMMrk(void);
-    const EDPMMrk& operator =(const EDPMMrk&);
-};
-
-class EDPMMrkBase
-{
-public:
-    static void save(QDataStream& ar, MarkingBase& rMrkBase, int nSeqCount);
-    static void load(QDataStream& ar, MarkingBase& rMrkBase, int nSeqCount);
-private:
-    EDPMMrkBase(void);
-    ~EDPMMrkBase(void);
-    const EDPMMrkBase& operator =(const EDPMMrkBase&);
-};
-
-
-class EDPMDescInfo
-{
-public:
-    static void save(QDataStream& ar, MetaInfo& rInfo);
-    static void load(QDataStream& ar, MetaInfo& rInfo);
-private:
-    EDPMDescInfo(void);
-    ~EDPMDescInfo(void);
-    const EDPMDescInfo& operator =(const EDPMDescInfo&);
-};
-
-class EDPMDescFamily
-{
-public:
-    static void save(QDataStream& ar, Family& rFamily);
-    static void load(QDataStream& ar, Family& rFamily);
-private:
-    EDPMDescFamily(void);
-    ~EDPMDescFamily(void);
-    const EDPMDescFamily& operator =(const EDPMDescFamily&);
-};
-
-
-class EDPMDescription
-{
-public:
-    static void save(QDataStream& ar, MetaInfoBase& rDesc);
-    static void load(QDataStream& ar, MetaInfoBase& rDesc);
-private:
-    EDPMDescription(void);
-    ~EDPMDescription(void);
-    const EDPMDescription& operator =(const EDPMDescription&);
-};
-
-class EDPMCS
-{
-public:
-    static void save(QDataStream& ar, Signal* pSignal);
-    static void load(QDataStream& ar, Signal* pSignal);
-private:
-    EDPMCS(void);
-    ~EDPMCS(void);
-    const EDPMCS& operator =(const EDPMCS&);
-};
-
-class EDPMCSFolder
-{
-public:
-    static void save(QDataStream& ar, CSFolder* pFolder);
-    static void load(QDataStream& ar, CSFolder* pFolder);
-private:
-    EDPMCSFolder(void);
-    ~EDPMCSFolder(void);
-    const EDPMCSFolder& operator =(const EDPMCSFolder&);
-};
-
-class EDPMOperation
-{
-public:
-    static void save(QDataStream& ar, Operation*& pOp);
-
-    static void saveDistance(QDataStream& ar, OpDistance* pOp);
-    static void saveReiteration(QDataStream& ar, OpReiteration* pOp);
-    static void saveInterval(QDataStream& ar, OpInterval* pOp);
-    static void saveTS(QDataStream& ar, TS* pOp);
-
-    static void load(QDataStream& ar, Operation*& pOp);
-
-    static void loadDistance(QDataStream& ar, OpDistance* pOp);
-    static void loadReiteration(QDataStream& ar, OpReiteration* pOp);
-    static void loadInterval(QDataStream& ar, OpInterval* pOp);
-    static void loadTS(QDataStream& ar, TS* pOp);
-
-private:
-    EDPMOperation(void);
-    ~EDPMOperation(void);
-    const EDPMOperation& operator =(const EDPMOperation&);
-};
-
-
-
-
-} //namespace
-
-#endif
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPlugin.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryPlugin.cpp
deleted file mode 100644
index d90c96c..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPlugin.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-#include "ExpertDiscoveryPlugin.h"
-#include "ExpertDiscoveryView.h"
-#include "ExpertDiscoveryViewCtx.h"
-#include "ExpertDiscoveryTask.h"
-
-#include <U2Core/AppContext.h>
-#include <U2Core/AutoAnnotationsSupport.h>
-#include <U2Core/DNASequence.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/DocumentSelection.h>
-#include <U2Core/ProjectModel.h>
-#include <U2Core/SelectionUtils.h>
-
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/GObjectRelationRoles.h>
-#include <U2Core/GObjectUtils.h>
-#include <U2Core/GObjectSelection.h>
-
-#include <U2Gui/MainWindow.h>
-#include <U2Gui/ToolsMenu.h>
-
-#include <U2View/AnnotatedDNAViewFactory.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QMessageBox>
-#endif
-
-
-namespace U2 {
-
-extern "C" Q_DECL_EXPORT Plugin * U2_PLUGIN_INIT_FUNC() {
-    if (AppContext::getMainWindow()) {
-        ExpertDiscoveryPlugin * plug = new ExpertDiscoveryPlugin();
-        return plug;
-    }
-    return NULL;
-}
-
-ExpertDiscoveryPlugin::ExpertDiscoveryPlugin() : Plugin( tr("Expert Discovery"), tr("Expert Discovery plugin") ),viewCtx(NULL), delay(false) {
-
-    connect( AppContext::getPluginSupport(), SIGNAL( si_allStartUpPluginsLoaded() ), SLOT(sl_initExpertDiscoveryViewCtx()));
-
-    windowId = 0;
-
-    ExpertDiscoveryViewFactory* edFactory = new ExpertDiscoveryViewFactory("ED", "ED", this);
-    AppContext::getObjectViewFactoryRegistry()->registerGObjectViewFactory(edFactory);
-
-}
-
-void ExpertDiscoveryPlugin::sl_initExpertDiscoveryViewCtx() {
-     if (AppContext::getMainWindow()) {
-          viewCtx = new ExpertDiscoveryViewCtx(this);
-          Q_ASSERT(viewCtx);
-          viewCtx->init();
-
-          QAction* action = new QAction(  tr("Expert Discovery..."), this );
-          action->setObjectName(ToolsMenu::EXPERT_DISCOVERY);
-          connect( action, SIGNAL( triggered() ), SLOT( sl_expertDiscoveryView() ) );
-          ToolsMenu::addAction(ToolsMenu::TOOLS, action);
-     }
-}
-
-void ExpertDiscoveryPlugin::sl_expertDiscoveryView(){
-
-
-    //create project here
-    if (!AppContext::getProject()) {
-        Task *tasks = new Task("Creating empty project", TaskFlag_NoRun);
-        Task* t = AppContext::getProjectLoader()->createNewProjectTask();
-        connect( t, SIGNAL( si_stateChanged() ), SLOT( sl_expertDiscoveryViewDelay() ) );
-        tasks->addSubTask(t);
-        AppContext::getTaskScheduler()->registerTopLevelTask(tasks);
-        delay = true;
-    }else{
-        delay = false;
-        sl_expertDiscoveryViewDelay();
-    }
-
-}
-
-void ExpertDiscoveryPlugin::sl_expertDiscoveryViewDelay(){
-    if(delay){
-        if(!AppContext::getProject()){
-            return;
-        }
-        delay = false;
-    }
-
-    MWMDIManager* mdi = AppContext::getMainWindow()->getMDIManager();
-    MWMDIWindow* mdiWindow = mdi->getWindowById(windowId);
-    if (mdiWindow==NULL) {
-
-        ExpertDiscoveryView* v = new ExpertDiscoveryView("ED", "EDView", this);
-        v->addObjectHandler(viewCtx);
-        ExpertDiscoveryViewWindow* wind = new ExpertDiscoveryViewWindow(v, "Expert Discovery");
-        windowId = wind->getId();
-        AppContext::getMainWindow()->getMDIManager()->addMDIWindow(wind);
-        AppContext::getMainWindow()->getMDIManager()->activateWindow(wind);
-
-    }else{
-        AppContext::getMainWindow()->getMDIManager()->activateWindow(mdiWindow);
-    }
-
-}
-
-const GObjectViewFactoryId ExpertDiscoveryViewFactory::ID("ED");
-
-ExpertDiscoveryViewFactory::ExpertDiscoveryViewFactory(GObjectViewFactoryId id, const QString& name, QObject* p)
-:GObjectViewFactory(id,name,p){
-
-}
-
-bool ExpertDiscoveryViewFactory::canCreateView(const MultiGSelection& multiSelection) {
-    //return true if
-
-    //0. All the documents in the selection are from ExperDiscoveryData
-    //1. selection has loaded of unloaded DNA sequence object
-    //2. selection has any object with SEQUENCE relation to DNA sequence object that is in the project
-    //3. selection has document that have sequence object or object assosiated with sequence
-
-    //0.
-    if(!checkSelection(multiSelection)){
-        return false;
-    }
-    //1.
-    QList<GObject*> selectedObjects = SelectionUtils::findObjects("", &multiSelection, UOF_LoadedAndUnloaded);
-    QList<GObject*> selectedSequences = GObjectUtils::select(selectedObjects, GObjectTypes::SEQUENCE, UOF_LoadedAndUnloaded);
-    if (!selectedSequences.isEmpty()) {
-        return true;
-    }
-
-    //2.
-    QList<GObject*> objectsWithSeqRelation = GObjectUtils::selectObjectsWithRelation(selectedObjects, GObjectTypes::SEQUENCE,
-        ObjectRole_Sequence, UOF_LoadedAndUnloaded, true);
-    if (!objectsWithSeqRelation.isEmpty()) {
-        return true;
-    }
-
-    //3.
-    const DocumentSelection* ds = qobject_cast<const DocumentSelection*>(multiSelection.findSelectionByType(GSelectionTypes::DOCUMENTS));
-    if (ds == NULL) {
-        return false;
-    }
-    foreach(Document* doc, ds->getSelectedDocuments()) {
-        if (!doc->findGObjectByType(GObjectTypes::SEQUENCE, UOF_LoadedAndUnloaded).isEmpty()) {
-            return true;
-        }
-        objectsWithSeqRelation = GObjectUtils::selectObjectsWithRelation(doc->getObjects(),
-            GObjectTypes::SEQUENCE, ObjectRole_Sequence, UOF_LoadedAndUnloaded, true);
-
-        if (!objectsWithSeqRelation.isEmpty()) {
-            return true;
-        }
-    }
-
-    return false;
-}
-
-
-Task* ExpertDiscoveryViewFactory::createViewTask(const MultiGSelection& multiSelection, bool single /*=false*/) {
-    Q_UNUSED(single);
-    QList<GObject*> objectsToOpen = SelectionUtils::findObjects(GObjectTypes::SEQUENCE, &multiSelection, UOF_LoadedAndUnloaded);
-
-    QList<GObject*> selectedObjects = SelectionUtils::findObjects("", &multiSelection, UOF_LoadedAndUnloaded);
-    QList<GObject*> objectsWithSequenceRelation = GObjectUtils::selectObjectsWithRelation(selectedObjects,
-        GObjectTypes::SEQUENCE, ObjectRole_Sequence, UOF_LoadedAndUnloaded, true);
-
-    objectsToOpen.append(objectsWithSequenceRelation);
-
-    const DocumentSelection* ds = qobject_cast<const DocumentSelection*>(multiSelection.findSelectionByType(GSelectionTypes::DOCUMENTS));
-    if (ds != NULL) {
-        foreach(Document* doc, ds->getSelectedDocuments()) {
-            objectsToOpen.append(doc->findGObjectByType(GObjectTypes::SEQUENCE, UOF_LoadedAndUnloaded));
-            objectsToOpen.append(GObjectUtils::selectObjectsWithRelation(doc->getObjects(), GObjectTypes::SEQUENCE,
-                ObjectRole_Sequence, UOF_LoadedAndUnloaded, true));
-        }
-    }
-
-   ExpertDiscoveryCreateViewTask* task = new ExpertDiscoveryCreateViewTask(objectsToOpen);
-   emit si_newTaskCreation(task);
-    return task;
-}
-
-bool ExpertDiscoveryViewFactory::checkSelection(const MultiGSelection& multiSelection){
-    QList<GObjectViewWindow*> views;
-    QList<MWMDIWindow*> windows = AppContext::getMainWindow()->getMDIManager()->getWindows();
-    GObjectSelection* objectsSelection = (GObjectSelection*)multiSelection.findSelectionByType(GSelectionTypes::GOBJECTS);
-    if (objectsSelection!=NULL) {
-        QSet<GObject*> objectsInSelection = objectsSelection->getSelectedObjects().toSet();
-        foreach(MWMDIWindow* w, windows) {
-            GObjectViewWindow* ov = qobject_cast<GObjectViewWindow*>(w);
-            if (ov==NULL) {
-                continue;
-            }
-            if (ov->getViewFactoryId() != ID) {
-                continue;
-            }
-            ExpertDiscoveryViewWindow* edViewWindow = dynamic_cast<ExpertDiscoveryViewWindow*>(ov);
-            if(!edViewWindow){
-                continue;
-            }
-            ExpertDiscoveryView* edView = dynamic_cast<ExpertDiscoveryView*>(edViewWindow->getObjectView());
-            if(!edView){
-                continue;
-            }
-            const QList<GObject*>& viewObjects = edView->getEDObjects();
-            bool allIn = true;
-            foreach(GObject* o, objectsInSelection) {
-                if (!viewObjects.contains(o)) {
-                    allIn = false;
-                    break;
-                }
-            }
-            return allIn;
-        }
-    }
-    return false;
-}
-
-// bool ExpertDiscoveryViewFactory::isStateInSelection(const MultiGSelection& multiSelection, const QVariantMap& stateData) {
-//     AnnotatedDNAViewState state(stateData);
-//     if (!state.isValid()) {
-//         return false;
-//     }
-//     QList<GObjectReference> refs = state.getSequenceObjects();
-//     assert(!refs.isEmpty());
-//     foreach (const GObjectReference& ref, refs) {
-//         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);
-//         bool docIsSelected = selectedDocs.contains(doc);
-//
-//         //check that object is in selection
-//         QList<GObject*> selectedObjects = SelectionUtils::getSelectedObjects(multiSelection);
-//         GObject* obj = doc->findGObjectByName(ref.objName);
-//         bool objIsSelected = obj!=NULL && selectedObjects.contains(obj);
-//
-//         //check that object associated with sequence object is in selection
-//         bool refIsSelected = false;
-//         foreach (const GObject* selObject, selectedObjects) {
-//             GObjectReference selRef(selObject);
-//             if (ref == selRef) {
-//                 refIsSelected = true;
-//                 break;
-//             }
-//         }
-//         if (!docIsSelected && !objIsSelected && !refIsSelected) {
-//             return false;
-//         }
-//     }
-//
-//     return true;
-// }
-
-// Task* ExpertDiscoveryViewFactory::createViewTask(const QString& viewName, const QVariantMap& stateData) {
-//     return new OpenSavedAnnotatedDNAViewTask(viewName, stateData);
-// }
-
-
-
-} //namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPlugin.h b/src/plugins/expert_discovery/src/ExpertDiscoveryPlugin.h
deleted file mode 100644
index b5cc352..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPlugin.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef _U2_EXPERT_DIS_PLUGIN_H_
-#define _U2_EXPERT_DIS_PLUGIN_H_
-
-#include <U2Core/PluginModel.h>
-
-#include <U2Gui/ObjectViewModel.h>
-
-namespace U2 {
-
-class ExpertDiscoveryPlugin : public Plugin  {
-    Q_OBJECT
-public:
-    ExpertDiscoveryPlugin();
-
-private slots:
-    void sl_initExpertDiscoveryViewCtx();
-    void sl_expertDiscoveryView();
-    void sl_expertDiscoveryViewDelay();
-
-private:
-    GObjectViewWindowContext* viewCtx;
-
-    bool delay;
-    int windowId;
-};
-
-
-class ExpertDiscoveryViewFactory : public GObjectViewFactory{
-    Q_OBJECT
-public:
-    ExpertDiscoveryViewFactory(GObjectViewFactoryId id, const QString& name, QObject* p = NULL);
-
-
-    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;
-private:
-    bool checkSelection(const MultiGSelection& multiSelection);
-
-signals:
-    void si_newTaskCreation(Task* t);
-
-};
-} //namespace
-
-#endif
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegDialog.cpp
deleted file mode 100644
index 249be76..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegDialog.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * 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 <QMessageBox>
-#include <QPushButton>
-
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Gui/DialogUtils.h>
-#include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Core/QObjectScopedPointer.h>
-#include <U2Gui/U2FileDialog.h>
-
-#include "ExpertDiscoveryPosNegDialog.h"
-
-namespace U2 {
-
-ExpertDiscoveryPosNegDialog::ExpertDiscoveryPosNegDialog(QWidget *parent)
-: QDialog(parent), generateNeg(false), negativePerPositive(100){
-
-    setupUi(this);
-    new HelpButton(this, buttonBox, "17467810");
-    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Next"));
-    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
-
-    connect(openFirstButton, SIGNAL(clicked()), SLOT(sl_openFirstFile()));
-    connect(openSecondButton, SIGNAL(clicked()), SLOT(sl_openSecondFile()));
-    connect(oneSequenceCheckBox, SIGNAL(clicked()), SLOT(sl_oneSequence()));
-
-    filter = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::SEQUENCE, true)+
-        ";;" + DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, false);
-
-    negPerPositivespinBox->setDisabled(!oneSequenceCheckBox->isChecked());
-
-}
-
-void ExpertDiscoveryPosNegDialog::accept(){
-    Q_ASSERT(firstFileEdit);
-    Q_ASSERT(secondFileEdit);
-
-    firstFileName = firstFileEdit->text();
-    secondFileName = secondFileEdit->text();
-    negativePerPositive =  negPerPositivespinBox->value();
-
-    if (oneSequenceCheckBox->isChecked()) {
-        secondFileName = firstFileName;
-    }
-
-    if (!firstFileName.isEmpty() && !secondFileName.isEmpty()) {
-        if(secondFileName == firstFileName && !generateNeg){
-            QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Select files"), tr("Positive and negative sequences can't be in the one file. Select another file for one of them"));
-            mb->exec();
-            CHECK(!mb.isNull(), );
-        }else{
-            QDialog::accept();
-        }
-    }else {
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Select files"), tr("Select files for ExpertDiscovery"));
-        mb->exec();
-        CHECK(!mb.isNull(), );
-    }
-}
-
-void ExpertDiscoveryPosNegDialog::sl_oneSequence() {
-
-    secondFileEdit->setDisabled(oneSequenceCheckBox->isChecked());
-    openSecondButton->setDisabled(oneSequenceCheckBox->isChecked());
-    negPerPositivespinBox->setDisabled(!oneSequenceCheckBox->isChecked());
-    generateNeg = oneSequenceCheckBox->isChecked();
-
-}
-
-void ExpertDiscoveryPosNegDialog::sl_openFirstFile(){
-    LastUsedDirHelper lod("ExpertDiscovery positive sequences file");
-    lod.url = U2FileDialog::getOpenFileName(NULL, tr("Open positive sequences file"), lod.dir, filter);
-
-    Q_ASSERT(firstFileEdit);
-    if (!lod.url.isEmpty()) {
-        firstFileEdit->setText(lod.url);
-    }
-}
-void ExpertDiscoveryPosNegDialog::sl_openSecondFile() {
-
-    LastUsedDirHelper lod("ExpertDiscovery negative sequences file");
-    if (lod.dir.isEmpty()) {
-        LastUsedDirHelper lodFirst("Open negative sequences file");
-
-        lod.dir = lodFirst.dir;
-    }
-    lod.url = U2FileDialog::getOpenFileName(NULL, tr("Open second file"), lod.dir, filter);
-
-    Q_ASSERT(secondFileEdit);
-    if (!lod.url.isEmpty()) {
-        secondFileEdit->setText(lod.url);
-    }
-}
-
-}//namespace
-
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegDialog.h b/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegDialog.h
deleted file mode 100644
index 01cf6df..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegDialog.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 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 _EXPERT_DISCOVERY_POS_NEG_DIALOG_H_
-#define _EXPERT_DISCOVERY_POS_NEG_DIALOG_H_
-
-#include <ui/ui_ExpertDiscoveryPosNegDialog.h>
-
-namespace U2 {
-
-class ExpertDiscoveryPosNegDialog : public QDialog, public Ui_ExpertDiscoveryPosNegDialog{
-    Q_OBJECT
-public:
-    ExpertDiscoveryPosNegDialog(QWidget *parent);
-
-    virtual void accept();
-
-    QString getFirstFileName() const {return firstFileName;}
-    QString getSecondFileName() const {return secondFileName;}
-    bool isGenerateNegative() const {return generateNeg;}
-    int getNegativePerPositive() const {return negativePerPositive;}
-protected slots:
-    void sl_openFirstFile();
-    void sl_openSecondFile();
-    void sl_oneSequence();
-
-private:
-    QString firstFileName;
-    QString secondFileName;
-
-    bool generateNeg;
-    int negativePerPositive;
-
-    QString filter;
-
-};
-
-} // namespace
-
-#endif // _EXPERT_DISCOVERY_POS_NEG_DIALOG_H_
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegMrkDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegMrkDialog.cpp
deleted file mode 100644
index d6e7919..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegMrkDialog.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/**
- * 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 <QMessageBox>
-
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Gui/DialogUtils.h>
-#include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Core/QObjectScopedPointer.h>
-#include <U2Gui/U2FileDialog.h>
-
-#include "ExpertDiscoveryPosNegMrkDialog.h"
-
-namespace U2 {
-
-ExpertDiscoveryPosNegMrkDialog::ExpertDiscoveryPosNegMrkDialog(QWidget *parent)
-: QDialog(parent), generateDescr(true){
-
-    setupUi(this);
-    new HelpButton(this, buttonBox, "17467811");
-
-    connect(openFirstButton, SIGNAL(clicked()), SLOT(sl_openFirstFile()));
-    connect(openSecondButton, SIGNAL(clicked()), SLOT(sl_openSecondFile()));
-    connect(openThirdButton, SIGNAL(clicked()), SLOT(sl_openThirdFile()));
-    connect(oneSequenceCheckBox, SIGNAL(clicked()), SLOT(sl_oneSequence()));
-    connect(lettersCheck, SIGNAL(clicked()), SLOT(sl_lettersMarkup()));
-
-    oneSequenceCheckBox->click();
-
-    //hiding description file for now (in order to useless)
-    oneSequenceCheckBox->hide();
-    label_4->hide();
-    thirdFileEdit->hide();
-    openThirdButton->hide();
-
-    filter = DialogUtils::prepareFileFilter("Markup files", QStringList() << "xml" << "gb");
-
-}
-
-void ExpertDiscoveryPosNegMrkDialog::accept(){
-    Q_ASSERT(firstFileEdit);
-    Q_ASSERT(secondFileEdit);
-    Q_ASSERT(thirdFileEdit);
-
-    firstFileName = firstFileEdit->text();
-    secondFileName = secondFileEdit->text();
-    thirdFileName = thirdFileEdit->text();
-
-
-    if (!firstFileName.isEmpty() && !secondFileName.isEmpty()) {
-        if(!generateDescr && thirdFileName.isEmpty()){
-            QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Select files"), tr("Select description file"));
-            mb->exec();
-            CHECK(!mb.isNull(), );
-        }else{
-            QDialog::accept();
-        }
-    }else if(lettersCheck->isChecked() || !firstFileName.isEmpty()){
-        QDialog::accept();
-    }else{
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Select files"), tr("Select positive markup file at least or chose 'Nucleotides markup'"));
-        mb->exec();
-        CHECK(!mb.isNull(), );
-    }
-}
-
-void ExpertDiscoveryPosNegMrkDialog::sl_oneSequence() {
-
-    thirdFileEdit->setDisabled(oneSequenceCheckBox->isChecked());
-    openThirdButton->setDisabled(oneSequenceCheckBox->isChecked());
-    generateDescr = oneSequenceCheckBox->isChecked();
-
-}
-
-void ExpertDiscoveryPosNegMrkDialog::sl_lettersMarkup(){
-    openFirstButton->setDisabled(lettersCheck->isChecked());
-    firstFileEdit->setDisabled(lettersCheck->isChecked());
-    openSecondButton->setDisabled(lettersCheck->isChecked());
-    secondFileEdit->setDisabled(lettersCheck->isChecked());
-    addToCurrentCheck->setDisabled(lettersCheck->isChecked());
-}
-
-void ExpertDiscoveryPosNegMrkDialog::sl_openFirstFile(){
-    LastUsedDirHelper lod("ExpertDiscovery positive sequences markup file");
-    lod.url = U2FileDialog::getOpenFileName(NULL, tr("Open positive sequences markup file"), lod.dir, filter);
-
-    Q_ASSERT(firstFileEdit);
-    if (!lod.url.isEmpty()) {
-        firstFileEdit->setText(lod.url);
-    }
-}
-void ExpertDiscoveryPosNegMrkDialog::sl_openSecondFile() {
-
-    LastUsedDirHelper lod("ExpertDiscovery negative sequences markup file");
-    if (lod.dir.isEmpty()) {
-        LastUsedDirHelper lodFirst("Open negative sequences file");
-
-        lod.dir = lodFirst.dir;
-    }
-    lod.url = U2FileDialog::getOpenFileName(NULL, tr("Open second file"), lod.dir, filter);
-
-    Q_ASSERT(secondFileEdit);
-    if (!lod.url.isEmpty()) {
-        secondFileEdit->setText(lod.url);
-    }
-}
-
-void ExpertDiscoveryPosNegMrkDialog::sl_openThirdFile() {
-
-    LastUsedDirHelper lod("ExpertDiscovery description file");
-    if (lod.dir.isEmpty()) {
-        LastUsedDirHelper lodFirst("ExpertDiscovery description file");
-
-        lod.dir = lodFirst.dir;
-    }
-    lod.url = U2FileDialog::getOpenFileName(NULL, tr("Open description file"), lod.dir, filter);
-
-    Q_ASSERT(thirdFileEdit);
-    if (!lod.url.isEmpty()) {
-        thirdFileEdit->setText(lod.url);
-    }
-}
-
-}//namespace
-
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegMrkDialog.h b/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegMrkDialog.h
deleted file mode 100644
index c1a500a..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPosNegMrkDialog.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * 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 _EXPERT_DISCOVERY_POS_NEG_MRK_DIALOG_H_
-#define _EXPERT_DISCOVERY_POS_NEG_MRK_DIALOG_H_
-
-#include <ui/ui_ExpertDiscoveryPosNegMrkDialog.h>
-
-namespace U2 {
-
-class ExpertDiscoveryPosNegMrkDialog : public QDialog, public Ui_ExpertDiscoveryPosNegMrkDialog{
-    Q_OBJECT
-public:
-    ExpertDiscoveryPosNegMrkDialog(QWidget *parent);
-
-    virtual void accept();
-
-    QString getFirstFileName() const {return firstFileName;}
-    QString getSecondFileName() const {return secondFileName;}
-    QString getThirdFileName() const {return thirdFileName;}
-    bool isGenerateDescr() const {return generateDescr;}
-    bool isAppendToCurrentMarkup() const {return addToCurrentCheck->isChecked();}
-    bool isNucleotidesMarkup() const {return lettersCheck->isChecked();}
-protected slots:
-    void sl_openFirstFile();
-    void sl_openSecondFile();
-    void sl_openThirdFile();
-    void sl_oneSequence();
-    void sl_lettersMarkup();
-
-private:
-    QString firstFileName;
-    QString secondFileName;
-    QString thirdFileName;
-
-    bool generateDescr;
-
-    QString filter;
-
-};
-
-} // namespace
-
-#endif // _EXPERT_DISCOVERY_POS_NEG_MRK_DIALOG_H_
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPropTable.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryPropTable.cpp
deleted file mode 100644
index 13a870d..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPropTable.cpp
+++ /dev/null
@@ -1,275 +0,0 @@
-#include "ExpertDiscoveryPropTable.h"
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#include <QHeaderView>
-#else
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QHeaderView>
-#endif
-
-namespace U2 {
-
-EDPropertiesTable::EDPropertiesTable(QWidget* parent)
-:QTableWidget(parent)
-,curPItem(NULL)
-,isSeq(false)
-,seqOffset(0)
-{
-    setColumnCount(2);
-
-    verticalHeader()->hide();
-    horizontalHeader()->hide();
-    //connect(this, SIGNAL(cellChanged ( int , int  )), SLOT(sl_cellDataChanged(int , int )));
-    connect(this, SIGNAL(itemChanged ( QTableWidgetItem*  )), SLOT( sl_cellChanged(QTableWidgetItem*) ));
-    setWordWrap(true);
-}
-
-void EDPropertiesTable::representPIProperties(EDProjectItem* pItem){
-    curPItem = pItem;
-
-    cleanup();
-
-    if(pItem == NULL){
-        return;
-    }
-
-    int nGroupNum = pItem->getGroupNumber();
-    for (int nGroup=0; nGroup<nGroupNum; nGroup++) {
-        const EDPIPropertyGroup& rGroup = pItem->getGroup(nGroup);
-        addNewGroup(rGroup.getName());
-
-        int nPropNum = rGroup.getPropertiesNumber();
-        for(int nProp=0; nProp<nPropNum; nProp++) {
-            const EDPIProperty& rProp = rGroup.getProperty(nProp);
-            const EDPIPropertyType* pType = rProp.getType();
-            assert( pType != NULL );
-            EDPropertyItem *pPropertyItem = NULL;
-            EDPropertyItemList *pPropertyItemList = NULL;
-            addNewField(rProp.getName());
-            if(!pType->hasPredefinedValues()){
-                pPropertyItem = new EDPropertyItem(rProp.getValue(), nGroup, nProp, pType->hasEdit());
-            }
-            else{
-                 const EDPIPropertyTypeList* pType = dynamic_cast<const EDPIPropertyTypeList*>(rProp.getType());
-                 pPropertyItemList = new EDPropertyItemList(rProp.getValue(), nGroup, nProp, pType, pType->hasEdit());
-                 connect (pPropertyItemList, SIGNAL(currentIndexChanged ( const QString& )), this, SLOT(sl_comboEditTextChangerd(const QString& )));
-            }
-
-            int itemToSetPos = isSeq? rowCount() - 1 : seqOffset - 1;
-
-            if(!pType->hasPredefinedValues()){
-                setItem(itemToSetPos, 1, pPropertyItem);
-            }else{
-                setCellWidget(itemToSetPos, 1, pPropertyItemList);
-            }
-        }
-    }
-    resizeColumnsToContents();
-}
-
-void EDPropertiesTable::updateCurrentProperties(){
-    representPIProperties(curPItem);
-}
-
-void EDPropertiesTable::addNewGroup(const QString& name){
-    int rowPos = isSeq ? rowCount() : seqOffset;
-    insertRow(rowPos);
-    setSpan(rowPos, 0, 1, 2);
-
-    QTableWidgetItem* item = new QTableWidgetItem();
-    item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable);
-    item->setText(name);
-    item->setBackgroundColor(Qt::lightGray);
-    item->setTextColor(Qt::black);
-    QFont font = item->font();
-    font.setBold(true);
-    item->setFont(font);
-
-    setItem(rowPos, 0, item);
-
-    if(!isSeq){
-        seqOffset++;
-    }
-}
-
-void EDPropertiesTable::addNewField(const QString& name){
-    int rowPos = isSeq ? rowCount() : seqOffset;
-    insertRow(rowPos);
-
-    QTableWidgetItem* item = new QTableWidgetItem();
-    item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable);
-    item->setText(name);
-    item->setTextColor(Qt::black);
-
-    setItem(rowPos, 0, item);
-
-    if(!isSeq){
-        seqOffset++;
-    }
-}
-
-
-EDPropertyItem::EDPropertyItem(const QString& val, int nGroup, int nProp, bool editable)
-:QTableWidgetItem()
-{
-    this->nGroup = nGroup;
-    this->nProp = nProp;
-    if(!editable){
-        setFlags(Qt::ItemIsEditable);
-    }
-    setData(val);
-    setText(val);
-}
-
-// EDPropertyItem::EDPropertyItem(const QString& val, int nGroup, int nProp, const EDPIPropertyTypeList* pType,  bool editable)
-// :QTableWidgetItem()
-// {
-//     this->nGroup = nGroup;
-//     this->nProp = nProp;
-//     if(!editable){
-//         setFlags(Qt::ItemIsSelectable |Qt::ItemIsEditable);
-//     }
-//     setData(val);
-//     setText(val);
-// }
-
-// EDPropertyItem::EDPropertyItem(const QString& val, int nGroup, int nProp, bool editable)
-// :QTableWidgetItem()
-// {
-//     this->nGroup = nGroup;
-//     this->nProp = nProp;
-//     if(!editable){
-//         setFlags(Qt::ItemIsEditable);
-//     }
-//     setData(val);
-//     setText(val);
-// }
-
-EDPropertyItemList::EDPropertyItemList(const QString& val, int nGroup, int nProp, const EDPIPropertyTypeList* pType,  bool editable)
-:QComboBox()
-{
-    this->nGroup = nGroup;
-    this->nProp = nProp;
-    if(!editable){
-        //setFlags(Qt::ItemIsSelectable |Qt::ItemIsEditable);
-    }
-    for (int i = 0; i < pType->getValueNumber(); i ++){
-        insertItem(i, pType->getValue(i));
-    }
-    setData(val);
-    int curInd = pType->getValueId(val);
-    if(curInd == -1){
-        insertItem(0, val);
-        setCurrentIndex(0);
-    }else{
-        setCurrentIndex(curInd);
-    }
-    setEditable(editable);
-    //setFrame(false);
-    //setInsertPolicy(NoInsert);
-}
-
-void EDPropertiesTable::sl_treeSelChanged(QTreeWidgetItem * tItem){
-    EDProjectItem* pItem = dynamic_cast<EDProjectItem*>(tItem);
-
-//     if(pItem && (pItem->getType() == PIT_SEQUENCE || pItem->getType() ==PIT_CONTROLSEQUENCE)){
-//         isSeq = true;
-//     }else{
-//         isSeq = false;
-//     }
-    representPIProperties(pItem);
-}
-
-void EDPropertiesTable::cleanup(){
-    if(isSeq){
-        int rowC = rowCount();
-        for(int i = seqOffset; i < rowC; i++){
-            removeRow(seqOffset);
-        }
-        seqOffset = rowCount();
-    }else{
-        for(int i = 0; i < seqOffset; i++){
-            removeRow(0);
-        }
-        seqOffset = 0;
-    }
-
-}
-
-void EDPropertiesTable::clearAll(){
-    isSeq = false;
-    seqOffset = 0;
-    curPItem = NULL;
-    clear();
-    setRowCount(0);
-}
-
-void  EDPropertiesTable::sl_cellChanged(QTableWidgetItem* tItem){
-    /*QTableWidgetItem* tItem = item(row, column);
-    if(!tItem){
-        return;
-    }*/
-    EDPropertyItem* edPropItem = dynamic_cast<EDPropertyItem*>(tItem);
-    if(!edPropItem){
-        return;
-    }
-
-    int nGroup = edPropItem->getGroup();
-    int nProp  = edPropItem->getProp();
-    const EDPIPropertyGroup& rGroup = curPItem->getGroup(nGroup);
-    const EDPIProperty& rProp = rGroup.getProperty(nProp);
-
-    QString strNewValue = edPropItem->text();
-    if(strNewValue!=edPropItem->getData()){
-        edPropItem->setData(strNewValue);
-        emit si_propChanged(curPItem, &rProp, strNewValue);
-    }
-
-}
-
-void EDPropertiesTable::sl_cellDataChanged(int row, int column){
-
-    QWidget* w =  cellWidget(row, column);
-    if(w == NULL){
-        return;
-    }
-
-    EDPropertyItemList* edPropItem = dynamic_cast<EDPropertyItemList*>(w);
-    if(!edPropItem){
-        return;
-    }
-
-    int nGroup = edPropItem->getGroup();
-    int nProp  = edPropItem->getProp();
-    const EDPIPropertyGroup& rGroup = curPItem->getGroup(nGroup);
-    const EDPIProperty& rProp = rGroup.getProperty(nProp);
-
-    QString strNewValue = edPropItem->currentText();
-    if(strNewValue!=edPropItem->getData()){
-        edPropItem->setData(strNewValue);
-        emit si_propChanged(curPItem, &rProp, strNewValue);
-    }
-}
-
-void EDPropertiesTable::sl_comboEditTextChangerd(const QString& t){
-    EDPropertyItemList* edPropItem = dynamic_cast<EDPropertyItemList*>(sender());
-    if(!edPropItem){
-        return;
-    }
-
-    int nGroup = edPropItem->getGroup();
-    int nProp  = edPropItem->getProp();
-    const EDPIPropertyGroup& rGroup = curPItem->getGroup(nGroup);
-    const EDPIProperty& rProp = rGroup.getProperty(nProp);
-
-    QString strNewValue = edPropItem->currentText();
-    if(strNewValue!=edPropItem->getData()){
-        edPropItem->setData(strNewValue);
-        emit si_propChanged(curPItem, &rProp, strNewValue);
-    }
-}
-
-
-}//namespace
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryPropTable.h b/src/plugins/expert_discovery/src/ExpertDiscoveryPropTable.h
deleted file mode 100644
index 0584919..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryPropTable.h
+++ /dev/null
@@ -1,71 +0,0 @@
-#pragma once
-
-#include "ExpertDiscoveryTreeWidgets.h"
-
-#include <QTableWidget>
-#include <QComboBox>
-
-namespace U2 {
-
-class EDPropertiesTable : public QTableWidget{
-    Q_OBJECT
-public:
-    EDPropertiesTable(QWidget* parent);
-
-    void representPIProperties(EDProjectItem* pItem);
-    void updateCurrentProperties();
-
-    void clearAll();
-
-private:
-    void addNewGroup(const QString& name);
-    void addNewField(const QString& name);
-
-    void cleanup();
-
-    EDProjectItem* curPItem;
-    bool isSeq;
-    int seqOffset;
-
-protected slots:
-    void sl_cellChanged(QTableWidgetItem * tItem);
-    void sl_cellDataChanged(int row, int column);
-    void sl_comboEditTextChangerd(const QString& t);
-
-public slots:
-    void sl_treeSelChanged(QTreeWidgetItem * tItem);
-
-signals:
-    void si_propChanged(EDProjectItem* item, const EDPIProperty* prop, QString newVal);
-
-};
-
-class EDPropertyItem : public QTableWidgetItem{
-public:
-    EDPropertyItem(const QString& val, int nGroup, int nProp, bool editable);
-    //EDPropertyItem(const QString& val, int nGroup, int nProp, const EDPIPropertyTypeList* pType,  bool editable);
-    int getGroup(){return nGroup;}
-    int getProp(){return nProp;}
-    QString getData() {return data;}
-    void setData(const QString& d){data = d;}
-private:
-    int nGroup;
-    int nProp;
-    QString data;
-};
-
-class EDPropertyItemList : public QComboBox{
-public:
-    //EDPropertyItem(const QString& val, int nGroup, int nProp, bool editable);
-    EDPropertyItemList(const QString& val, int nGroup, int nProp, const EDPIPropertyTypeList* pType,  bool editable);
-    int getGroup(){return nGroup;}
-    int getProp(){return nProp;}
-    QString getData() {return data;}
-    void setData(const QString& d){data = d;}
-private:
-    int nGroup;
-    int nProp;
-    QString data;
-};
-
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoverySearchDialogController.cpp b/src/plugins/expert_discovery/src/ExpertDiscoverySearchDialogController.cpp
deleted file mode 100644
index 653faa3..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoverySearchDialogController.cpp
+++ /dev/null
@@ -1,294 +0,0 @@
-/**
- * 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 <QFileInfo>
-#include <QListWidgetItem>
-#include <QMessageBox>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/CreateAnnotationTask.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/DNASequenceSelection.h>
-#include <U2Core/DNATranslation.h>
-#include <U2Core/GObjectUtils.h>
-#include <U2Core/IOAdapter.h>
-#include <U2Core/IOAdapterUtils.h>
-#include <U2Core/L10n.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>
-
-#include "ExpertDiscoverySearchDialogController.h"
-
-namespace U2 {
-
-class ExpertDiscoveryResultItem : public QTreeWidgetItem {
-public:
-    ExpertDiscoveryResultItem(const ExpertDiscoverySearchResult& r);
-    ExpertDiscoverySearchResult res;
-    virtual bool operator< ( const QTreeWidgetItem & other ) const {
-        const ExpertDiscoveryResultItem* o = (const ExpertDiscoveryResultItem*)&other;
-        int n = treeWidget()->sortColumn();
-        switch (n) {
-            case 0 :
-                return res.region.startPos < o->res.region.startPos;
-            case 1:
-                return res.strand != o->res.strand ? res.strand.isCompementary():  (res.region.startPos < o->res.region.startPos);
-            case 2:
-                return res.score < o->res.score;
-        }
-        return false;
-    }
-};
-
-ExpertDiscoverySearchDialogController::ExpertDiscoverySearchDialogController(ADVSequenceObjectContext* _ctx, ExpertDiscoveryData& data, QWidget *p):QDialog(p), edData(data) {
-    setupUi(this);
-    new HelpButton(this, buttonBox, "17467810");
-
-    ctx = _ctx;
-    task = NULL;
-
-    initialSelection = ctx->getSequenceSelection()->isEmpty() ? U2Region() : ctx->getSequenceSelection()->getSelectedRegions().first();
-    int seqLen = ctx->getSequenceLength();
-    rs=new RegionSelector(this, seqLen, true, ctx->getSequenceSelection());
-    rangeSelectorLayout->addWidget(rs);
-
-    scoreSpinBox->setValue(edData.getRecognizationBound());
-
-    connectGUI();
-    updateState();
-
-    timer = new QTimer(this);
-    connect(timer, SIGNAL(timeout()), SLOT(sl_onTimer()));
-
-}
-
-ExpertDiscoverySearchDialogController::~ExpertDiscoverySearchDialogController() {
-
-}
-
-void ExpertDiscoverySearchDialogController::connectGUI() {
-    //buttons
-    pbSearch = buttonBox->button(QDialogButtonBox::Ok);
-    pbClose = buttonBox->button(QDialogButtonBox::Cancel);
-
-    connect(pbSaveAnnotations, SIGNAL(clicked()), SLOT(sl_onSaveAnnotations()));
-    connect(pbClear, SIGNAL(clicked()), SLOT(sl_onClearList()));
-    connect(pbSearch, SIGNAL(clicked()), SLOT(sl_onSearch()));
-    connect(pbClose, SIGNAL(clicked()), SLOT(sl_onClose()));
-
-    //results list
-    connect(resultsTree, SIGNAL(itemActivated(QTreeWidgetItem*, int)), SLOT(sl_onResultActivated(QTreeWidgetItem*, int)));
-
-    resultsTree->installEventFilter(this);
-}
-
-
-void ExpertDiscoverySearchDialogController::updateState() {
-
-    bool hasActiveTask = task!=NULL;
-    bool hasCompl = ctx->getComplementTT()!=NULL;
-
-    bool hasResults = resultsTree->topLevelItemCount() > 0;
-
-    pbSearch->setEnabled(!hasActiveTask);
-
-    pbSaveAnnotations->setEnabled(!hasActiveTask && hasResults);
-    pbClear->setEnabled(!hasActiveTask && hasResults);
-    pbClose->setText(hasActiveTask ? tr("Cancel") : tr("Close"));
-
-    rbBoth->setEnabled(!hasActiveTask && hasCompl);
-    rbDirect->setEnabled(!hasActiveTask);
-    rbComplement->setEnabled(!hasActiveTask && hasCompl);
-
-    updateStatus();
-}
-
-void ExpertDiscoverySearchDialogController::updateStatus() {
-    QString message;
-    if (task != NULL) {
-        message = tr("Progress %1%").arg(qMax(0, task->getProgress()));
-    }
-    message += tr("%1 results found.").arg(resultsTree->topLevelItemCount());
-    statusLabel->setText(message);
-}
-
-bool ExpertDiscoverySearchDialogController::eventFilter(QObject *obj, QEvent *ev) {
-    if (obj == resultsTree && ev->type() == QEvent::KeyPress) {
-        QKeyEvent* ke = (QKeyEvent*)ev;
-        if (ke->key() == Qt::Key_Space) {
-            ExpertDiscoveryResultItem* item = static_cast<ExpertDiscoveryResultItem*>(resultsTree->currentItem());
-            if (item != NULL) {
-                sl_onResultActivated(item, 0);
-            }
-        }
-    }
-    return false;
-}
-
-void ExpertDiscoverySearchDialogController::sl_onSaveAnnotations() {
-    if (resultsTree->topLevelItemCount() == 0) {
-        return;
-    }
-
-    CreateAnnotationModel m;
-    m.sequenceObjectRef = ctx->getSequenceObject();
-    m.hideLocation = true;
-    m.useAminoAnnotationTypes = ctx->getAlphabet()->isAmino();
-    m.sequenceLen = ctx->getSequenceObject()->getSequenceLength();
-    QObjectScopedPointer<CreateAnnotationDialog> d = new CreateAnnotationDialog(this, m);
-    const int rc = d->exec();
-    CHECK(!d.isNull(), );
-
-    if (rc != QDialog::Accepted) {
-        return;
-    }
-    const QString &name = m.data->name;
-    QList<SharedAnnotationData> list;
-    for (int i = 0, n = resultsTree->topLevelItemCount(); i < n; ++i) {
-        ExpertDiscoveryResultItem *item = static_cast<ExpertDiscoveryResultItem *>(resultsTree->topLevelItem(i));
-        SharedAnnotationData annotationData = item->res.toAnnotation(name);
-        U1AnnotationUtils::addDescriptionQualifier(annotationData, m.description);
-        list.append(annotationData);
-    }
-
-    CreateAnnotationsTask* t = new CreateAnnotationsTask(m.getAnnotationObject(), list, m.groupName);
-    AppContext::getTaskScheduler()->registerTopLevelTask(t);
-}
-
-void ExpertDiscoverySearchDialogController::sl_onClearList() {
-    resultsTree->clear();
-    updateState();
-}
-
-void ExpertDiscoverySearchDialogController::sl_onSearch() {
-    runTask();
-}
-
-void ExpertDiscoverySearchDialogController::reject() {
-    if (task!=NULL) {
-        task->cancel();
-        return;
-    }
-    QDialog::reject();
-}
-
-
-void ExpertDiscoverySearchDialogController::sl_onClose() {
-    reject();
-}
-
-void ExpertDiscoverySearchDialogController::runTask() {
-    assert(task == NULL);
-
-    bool isRegionOk=false;
-    U2Region reg=rs->getRegion(&isRegionOk);
-    if(!isRegionOk){
-        rs->showErrorMessage();
-        return;
-    }
-
-    U2OpStatusImpl os;
-    QByteArray seq = ctx->getSequenceData(reg, os);
-    CHECK_OP_EXT(os, QMessageBox::critical(QApplication::activeWindow(), L10N::errorTitle(), os.getError()), );
-
-    ExpertDiscoverySearchCfg cfg;
-    cfg.complTT = rbBoth->isChecked() || rbComplement->isChecked() ? ctx->getComplementTT() : NULL;
-    cfg.complOnly = rbComplement->isChecked();
-    cfg.minSCORE = scoreSpinBox->value();
-
-    //TODO: ask if to clear
-    sl_onClearList();
-
-    task = new ExpertDiscoverySearchTask(edData, seq, cfg, reg.startPos);
-    connect(task, SIGNAL(si_stateChanged()), SLOT(sl_onTaskFinished()));
-    AppContext::getTaskScheduler()->registerTopLevelTask(task);
-    updateState();
-    timer->start(400);
-}
-
-void ExpertDiscoverySearchDialogController::sl_onTaskFinished() {
-    task = qobject_cast<ExpertDiscoverySearchTask*>(sender());
-    if (!task->isFinished()) {
-        return;
-    }
-    timer->stop();
-    importResults();
-    task = NULL;
-    updateState();
-}
-
-void ExpertDiscoverySearchDialogController::sl_onTimer() {
-    importResults();
-}
-
-void ExpertDiscoverySearchDialogController::importResults() {
-    resultsTree->setSortingEnabled(false);
-
-    QList<ExpertDiscoverySearchResult> newResults = task->takeResults();
-    foreach(const ExpertDiscoverySearchResult& r, newResults) {
-        ExpertDiscoveryResultItem* item  = new ExpertDiscoveryResultItem(r);
-        resultsTree->addTopLevelItem(item);
-    }
-    updateStatus();
-
-    resultsTree->setSortingEnabled(true);
-}
-
-void ExpertDiscoverySearchDialogController::sl_onResultActivated(QTreeWidgetItem* i, int col) {
-    Q_UNUSED(col);
-    assert(i);
-    ExpertDiscoveryResultItem* item = static_cast<ExpertDiscoveryResultItem*>(i);
-
-    ctx->getSequenceSelection()->setRegion(item->res.region);
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-/// tree
-
-ExpertDiscoveryResultItem::ExpertDiscoveryResultItem(const ExpertDiscoverySearchResult& r) : res(r)
-{
-    QString range = QString("%1..%2").arg(r.region.startPos + 1).arg(r.region.endPos());
-    setTextAlignment(0, Qt::AlignRight);
-    setTextAlignment(1, Qt::AlignRight);
-    setTextAlignment(2, Qt::AlignRight);
-
-    setText(0, range);
-    QString strand = res.strand.isCompementary()? ExpertDiscoverySearchDialogController::tr("complement strand") : ExpertDiscoverySearchDialogController::tr("direct strand") ;
-    setText(1, strand);
-    setText(2, QString::number(res.score, 'g', 4));
-}
-
-
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoverySearchDialogController.h b/src/plugins/expert_discovery/src/ExpertDiscoverySearchDialogController.h
deleted file mode 100644
index 45531f5..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoverySearchDialogController.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * 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_ED_SEARCH_DIALOG_H_
-#define _U2_ED_SEARCH_DIALOG_H_
-
-#include "ExpertDiscoveryData.h"
-#include "ExpertDiscoveryTask.h"
-
-#include <U2Core/global.h>
-#include <U2Core/U2Region.h>
-#include <U2Gui/RegionSelector.h>
-
-#include <ui/ui_ExpertDiscoverySearchDialog.h>
-
-#include <QtCore/QList>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QTreeWidgetItem>
-#endif
-#include <QtGui/QCloseEvent>
-#include <QtCore/QTimer>
-
-namespace U2 {
-
-class ADVSequenceObjectContext;
-class U2SequenceObject;
-class Task;
-
-class ExpertDiscoverySearchDialogController : public QDialog, public Ui_ExpertDiscoverySearchDialog {
-    Q_OBJECT
-public:
-    ExpertDiscoverySearchDialogController(ADVSequenceObjectContext* ctx, ExpertDiscoveryData& data, QWidget *p);
-    ~ExpertDiscoverySearchDialogController();
-
-public slots:
-    virtual void reject();
-
-protected:
-    bool eventFilter(QObject *obj, QEvent *ev);
-
-private slots:
-
-    //buttons:
-//    void sl_selectModelFile();
-    void sl_onSaveAnnotations();
-    void sl_onClearList();
-    void sl_onSearch();
-    void sl_onClose();
-
-    // groups
-    void sl_onTaskFinished();
-    void sl_onTimer();
-
-    void sl_onResultActivated(QTreeWidgetItem* i, int col);
-
-private:
-    void connectGUI();
-    void updateState();
-    void updateStatus();
-    //void updateModel(const SiteconModel& m);
-
-    bool checkPrevSettings();
-    void savePrevSettings();
-
-    void runTask();
-
-    void importResults();
-
-private:
-    ADVSequenceObjectContext*   ctx;
-    U2Region                     initialSelection;
-
-    ExpertDiscoveryData&       edData;
-
-    ExpertDiscoverySearchTask* task;
-    QTimer* timer;
-    RegionSelector* rs;
-    QPushButton* pbSearch;
-    QPushButton* pbClose;
-};
-
-}//namespace
-
-#endif
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoverySet.cpp b/src/plugins/expert_discovery/src/ExpertDiscoverySet.cpp
deleted file mode 100644
index 3ba5c02..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoverySet.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-//****************************************************************************
-//	File name:			Set.cpp
-//	Title:				���������� ����������� DiscoveryLib
-//	Version:			1.0
-//	Author:				������� ����� ��������
-//	Creation Date:		26.02.2005 �.
-//
-//	Description: ���������� ��������� � �������� ����������
-//
-//****************************************************************************
-
-#include "ExpertDiscoverySet.h"
-namespace U2{
-char Set::number_of_1[65536];
-}
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoverySet.h b/src/plugins/expert_discovery/src/ExpertDiscoverySet.h
deleted file mode 100644
index 082af93..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoverySet.h
+++ /dev/null
@@ -1,233 +0,0 @@
-//****************************************************************************
-//	File name:			Set.h
-//	Title:				���������� ����������� DiscoveryLib
-//	Version:			1.0
-//	Author:				������� ����� ��������
-//	Creation Date:		26.02.2005 �.
-//
-//	Description: ���������� ��������� � �������� ����������
-//
-//****************************************************************************
-
-#pragma once
-
-#include <iostream>
-#include <assert.h>
-#include <map>
-#include <string.h>
-#include <cstring>
-using std::istream;
-using std::ostream;
-
-//typedef __int64 SET_TYPE;
-namespace U2{
-typedef int SET_TYPE;
-
-// Representing bitset with fast size determination
-class Set {
-public:
-// Construction and destruction methods
-    Set();
-    ~Set();
-    Set(const Set&);
-
-// Every set must be initialized through this functions
-    void init(unsigned obj_num);
-    bool is_init() const;
-
-    size_t max_elem() const;    // Maximum index of the element in the set
-    size_t size() const;        // Current number of 1 elements
-
-    void set(unsigned obj);             // Set the element with index obj to 1
-    void unset(unsigned obj);           // Set the element with index obj to 0
-    void clear();                       // Clear all elements to 0
-    bool is_set(unsigned obj) const;    // Test whether element obj is set to 1
-
-    const Set& operator =(const Set&);  // copies the set
-    const Set& operator *=(const Set&); // bitwise "and" operator
-    const Set& operator +=(const Set&); // bitwise "or" operator
-    const Set& operator -=(const Set&); // exclude elements from set that is set to 1 in param set
-    Set operator *(const Set&) const;   // bitwise "and" operator
-    Set operator +(const Set&) const;   // bitwise "or" operator
-    Set operator -(const Set&) const;   // exclude elements from set that is set to 1 in param set
-
-    void associate(int pos, std::string str);
-    std::string association(int pos) const;
-
-private:
-    static char number_of_1[65536];     // contain number of bits set to 1 in index value
-    bool bIsInit;                       // this flag is set to true when set initialized
-    unsigned obj_num;                   // number of objects in set
-    size_t data_size;                   // size of data array
-    size_t short_size;                  // size of data array in short elements
-    SET_TYPE *data;                     // array that contains set data
-    std::map<int, std::string> m_associations;
-
-// Friend IO functions
-    friend istream& operator >>(istream& in, Set& set);
-    friend ostream& operator <<(ostream& out, const Set& set);
-};
-
-///////////////////////////////////////////////////////////////////////
-// Inline realization of IO operations
-///////////////////////////////////////////////////////////////////////
-
-inline istream& operator >>(istream& in, Set& set) {
-    int obj_num;
-    in.read((char *)&obj_num, sizeof(int));
-    set.init(obj_num);
-    in.read((char *)set.data, sizeof(SET_TYPE)*int(set.data_size));
-    return in;
-}
-
-inline ostream& operator <<(ostream& out, const Set& set) {
-    out.write((char*)&set.obj_num, sizeof(int));
-    out.write((char*)set.data, sizeof(SET_TYPE)*int(set.data_size));
-    return out;
-}
-
-
-///////////////////////////////////////////////////////////////////////
-// Inline realization of Set class
-///////////////////////////////////////////////////////////////////////
-
-inline Set::Set() {
-    bIsInit = false;
-    data_size = 0;
-    short_size = 0;
-    data = NULL;
-}
-
-inline Set::Set(const Set& set)
-{
-    bIsInit = false;
-    data_size = 0;
-    short_size = 0;
-    data = NULL;
-    *this = set;
-}
-
-inline Set::~Set() {
-    delete [] data;
-}
-
-inline void Set::init(unsigned obj_num) {
-    this->obj_num = obj_num;
-    data_size = obj_num/(8*sizeof(SET_TYPE)) + (obj_num%(8*sizeof(SET_TYPE))!=0);
-    short_size = data_size*sizeof(SET_TYPE)/sizeof(short);
-    data = new SET_TYPE[data_size];
-    clear();
-    if (number_of_1[1] == 0) {
-        for (int i=0; i<65536; i++) {
-            number_of_1[i] = 0;
-            for (int j=1; j<65536; j<<=1) {
-                if (i & j) number_of_1[i]++;
-            }
-        }
-    }
-    bIsInit = true;
-}
-
-inline bool Set::is_init() const {
-    return bIsInit;
-}
-
-inline size_t Set::max_elem() const {
-    return data_size*8*sizeof(SET_TYPE);
-}
-
-inline size_t Set::size() const {
-    size_t result = 0;
-    unsigned short * const short_data = reinterpret_cast<unsigned short * const> (data);
-    for (size_t i=0; i<short_size; i++) result += number_of_1[short_data[i]];
-    return result;
-}
-inline void Set::set(unsigned obj) {
-    assert(is_init());
-    data[obj/(8*sizeof(SET_TYPE))] |= SET_TYPE(1) << obj%(8*sizeof(SET_TYPE));
-}
-
-inline void Set::unset(unsigned obj) {
-    assert(is_init());
-    data[obj/(8*sizeof(SET_TYPE))] &= ~(SET_TYPE(1) << obj%(8*sizeof(SET_TYPE)));
-}
-
-inline void Set::clear() {
-    memset(data,0,data_size*sizeof(SET_TYPE));
-}
-
-inline bool Set::is_set(unsigned obj) const {
-    assert(is_init());
-    return (data[obj/(8*sizeof(SET_TYPE))] & (SET_TYPE(1) << obj%(8*sizeof(SET_TYPE)))) !=0;
-}
-
-inline const Set& Set::operator =(const Set& set) {
-    if (!set.is_init())
-        return *this;
-    if (!is_init()) {
-        assert(set.is_init());
-        init(set.obj_num);
-    }
-    for (size_t i=0; i<data_size; i++) data[i]=set.data[i];
-    m_associations = set.m_associations;
-    return *this;
-}
-
-inline const Set& Set::operator *=(const Set& set) {
-    if (!is_init()) {
-        assert(set.is_init());
-        init(set.obj_num);
-    }
-    for (size_t i=0; i<data_size; i++) data[i] &= set.data[i];
-    return *this;
-}
-
-inline const Set& Set::operator +=(const Set& set) {
-    if (!is_init()) {
-        assert(set.is_init());
-        init(set.obj_num);
-    }
-    for (size_t i=0; i<data_size; i++) data[i] |= set.data[i];
-    return *this;
-}
-
-inline const Set& Set::operator -=(const Set& set) {
-    if (!is_init()) {
-        assert(set.is_init());
-        init(set.obj_num);
-    }
-    for (size_t i=0; i<data_size; i++) data[i] &= ~set.data[i];
-    return *this;
-}
-
-inline Set Set::operator *(const Set& set) const {
-    Set result;
-    result = *this;
-    result*=set;
-    return result;
-}
-
-inline Set Set::operator +(const Set& set) const {
-    Set result = *this;
-    result+=set;
-    return result;
-}
-
-inline Set Set::operator -(const Set& set) const {
-    Set result = *this;
-    result-=set;
-    return result;
-}
-
-inline void Set::associate(int pos, std::string str) {
-    m_associations[pos] = str;
-}
-
-inline std::string Set::association(int pos) const {
-    std::map<int, std::string>::const_iterator it = m_associations.find(pos);
-    if (it != m_associations.end())
-        return it->second;
-    else
-        return std::string();
-}
-}
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoverySetupRecBoundDialog.cpp b/src/plugins/expert_discovery/src/ExpertDiscoverySetupRecBoundDialog.cpp
deleted file mode 100644
index 99ffccb..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoverySetupRecBoundDialog.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/**
- * 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 <QMessageBox>
-
-#include <U2Gui/HelpButton.h>
-#include <U2Core/QObjectScopedPointer.h>
-
-#include "ExpertDiscoverySetupRecBoundDialog.h"
-
-namespace U2 {
-
-ExpertDiscoverySetupRecBoundDialog::ExpertDiscoverySetupRecBoundDialog(double dRecognizationBound,
-        const std::vector<double>& vPosScore,
-        const std::vector<double>& vNegScore)
-: QDialog()
-, recognizationBound(dRecognizationBound)
-, probNegRec(0)
-, probPosRej(0)
-, posScore( vPosScore )
-, negScore( vNegScore )
-,graphWidget(NULL){
-
-    setupUi(this);
-    new HelpButton(this, buttonBox, "17467816");
-
-    boundLabel->setStyleSheet(QString("color : %1;").arg(ExpertDiscoveryRecognitionErrorGraphWidget::BOUNDCOLOR.name()));
-    er1Lable->setStyleSheet(QString("color : %1;").arg(ExpertDiscoveryRecognitionErrorGraphWidget::ER1COLOR.name()));
-    er2Label->setStyleSheet(QString("color : %1;").arg(ExpertDiscoveryRecognitionErrorGraphWidget::ER2COLOR.name()));
-
-    recBoundSpinBox->setValue(recognizationBound);
-    posRecLineEdit->setText(QString("%1").arg(probPosRej));
-    negRecLineEdit->setText(QString("%1").arg(probNegRec));
-
-    warningLabel->setVisible(false);
-
-    CalculateErrorTaskInfo settings;
-    settings.scoreReg = U2Region(0, 50);
-    settings.scoreStep = 0.1;
-
-    settings.posScore.resize(posScore.size());
-    for(int i = 0; i < posScore.size(); i++){
-        settings.posScore[i] = posScore[i];
-    }
-
-    settings.negScore.resize(negScore.size());
-    for(int i = 0; i < negScore.size(); i++){
-        settings.negScore[i] = negScore[i];
-    }
-    graphWidget = new ExpertDiscoveryRecognitionErrorGraphWidget(this, posScore, negScore, settings);
-    graphLayout->addWidget(graphWidget);
-    graphWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-    graphWidget->draw(recognizationBound);
-
-    connect(graphWidget, SIGNAL(si_showWarning(bool)), SLOT(sl_showWarning(bool)));
-    connect(optimizeRecognitionBoundButton, SIGNAL(clicked()), SLOT(sl_optRecBound()));
-    connect(recBoundSpinBox, SIGNAL(valueChanged ( double )), SLOT(sl_recBoundChaged(double)));
-    connect(calculateButton, SIGNAL(clicked()), SLOT(sl_recalculateValues()));
-    connect(minBoundSpin, SIGNAL(valueChanged (int)), SLOT(sl_intervalChanged(int)));
-    connect(maxBoundSpin, SIGNAL(valueChanged (int)), SLOT(sl_intervalChanged(int)));
-
-    maxBoundSpin->setValue(50);
-
-    sl_recBoundChaged(recognizationBound);
-
-}
-
-void ExpertDiscoverySetupRecBoundDialog::accept(){
-
-    recognizationBound = recBoundSpinBox->value();
-    QDialog::accept();
-
-
-}
-void ExpertDiscoverySetupRecBoundDialog::sl_recBoundChaged(double val){
-    recognizationBound = val;
-    updateProbs();
-    graphWidget->draw(recognizationBound);
-    posRecLineEdit->setText(QString("%1").arg(probPosRej));
-    negRecLineEdit->setText(QString("%1").arg(probNegRec));
-}
-
-void ExpertDiscoverySetupRecBoundDialog::sl_showWarning(bool isShown){
-    warningLabel->setVisible(isShown);
-}
-void ExpertDiscoverySetupRecBoundDialog::sl_optRecBound(){
-    double dPosScore = 0;
-    for (uint i=0; i<posScore.size(); i++){
-        dPosScore += posScore[i];
-    }
-    dPosScore /= posScore.size();
-
-    double dNegScore = 0;
-    for (uint i=0; i<negScore.size(); i++)
-    {
-        dNegScore += negScore[i];
-    }
-    dNegScore /= negScore.size();
-    sl_recBoundChaged((dPosScore + dNegScore)/2);
-    recBoundSpinBox->setValue(recognizationBound);
-}
-
-void ExpertDiscoverySetupRecBoundDialog::updateProbs(){
-    probPosRej = 0;
-    for (int i=0; i<(int)posScore.size(); i++)
-        if (posScore[i] < recognizationBound) probPosRej++;
-    probPosRej /= posScore.size();
-
-    probNegRec = 0;
-    for (int i=0; i<(int)negScore.size(); i++)
-        if (negScore[i] >= recognizationBound) probNegRec++;
-    probNegRec /= negScore.size();
-}
-
-void ExpertDiscoverySetupRecBoundDialog::sl_intervalChanged(int val){
-    int leftValue = minBoundSpin->value();
-    int rightValue = maxBoundSpin->value();
-
-    QPalette p = minBoundSpin->palette();
-    if(leftValue >= rightValue){
-        p.setColor(QPalette::Base, QColor(255,200,200));//pink color
-    }else{
-        p.setColor(QPalette::Base, QColor(255,255,255));//pink color
-    }
-
-    minBoundSpin->setPalette(p);
-    maxBoundSpin->setPalette(p);
-}
-void ExpertDiscoverySetupRecBoundDialog::sl_recalculateValues(){
-    int leftValue = minBoundSpin->value();
-    int rightValue = maxBoundSpin->value();
-    if(leftValue >= rightValue){
-         QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Wrong bound interval"),
-             tr("Minimal bound must not be grater then maximal bound"));
-         mb->exec();
-         return;
-    }
-    double stepVale = stepSpin->value();
-
-    if(stepVale == 0){
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Wrong step value"),
-            tr("Bound step must be non zero"));
-        mb->exec();
-        return;
-    }
-
-    CalculateErrorTaskInfo settings;
-    settings.scoreReg = U2Region(leftValue, rightValue);
-    settings.scoreStep = stepVale;
-
-    settings.posScore.resize(posScore.size());
-    for(int i = 0; i < posScore.size(); i++){
-        settings.posScore[i] = posScore[i];
-    }
-
-    settings.negScore.resize(negScore.size());
-    for(int i = 0; i < negScore.size(); i++){
-        settings.negScore[i] = negScore[i];
-    }
-
-    graphWidget->sl_calculateErrors(settings);
-}
-
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoverySetupRecBoundDialog.h b/src/plugins/expert_discovery/src/ExpertDiscoverySetupRecBoundDialog.h
deleted file mode 100644
index 020e20e..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoverySetupRecBoundDialog.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * 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.
- */
-
-#pragma once
-
-#include <ui/ui_ExpertDiscoverySetupRecBoundDialog.h>
-
-#include <vector>
-
-#include "ExpertDiscoveryGraphs.h"
-
-namespace U2 {
-
-
-
-class ExpertDiscoverySetupRecBoundDialog : public QDialog, public Ui_EDSetupRecBoundDlg{
-    Q_OBJECT
-public:
-    ExpertDiscoverySetupRecBoundDialog(double dRecognizationBound,
-        const std::vector<double>& vPosScore,
-        const std::vector<double>& vNegScore);
-
-    virtual void accept();
-
-    double getRecognizationBound() const { return recognizationBound; }
-
-private:
-    double recognizationBound;
-    double probNegRec;
-    double probPosRej;
-    const std::vector<double>& posScore;
-    const std::vector<double>& negScore;
-
-    void updateProbs();
-
-    ExpertDiscoveryRecognitionErrorGraphWidget*     graphWidget;
-
-
-protected slots:
-    void sl_recBoundChaged(double val);
-    void sl_optRecBound();
-
-    void sl_intervalChanged(int val);
-    void sl_recalculateValues();
-
-    void sl_showWarning(bool isShown);
-};
-
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryTask.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryTask.cpp
deleted file mode 100644
index 980d4b9..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryTask.cpp
+++ /dev/null
@@ -1,1396 +0,0 @@
-/**
- * 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 <fstream>
-#include <limits>
-
-#include <QList>
-#include <QMainWindow>
-#include <QMessageBox>
-#include <QSet>
-
-#include <U2Core/AddDocumentTask.h>
-#include <U2Core/AnnotationTableObject.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/Counter.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/DocumentUtils.h>
-#include <U2Core/GHints.h>
-#include <U2Core/GObjectRelationRoles.h>
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/GObjectUtils.h>
-#include <U2Core/IOAdapter.h>
-#include <U2Core/IOAdapterUtils.h>
-#include <U2Core/L10n.h>
-#include <U2Core/LoadDocumentTask.h>
-#include <U2Core/Log.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MSAUtils.h>
-#include <U2Core/ProjectModel.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/U2SequenceUtils.h>
-
-#include <U2Gui/DialogUtils.h>
-#include <U2Core/QObjectScopedPointer.h>
-#include <U2Gui/U2FileDialog.h>
-
-#include <U2View/AutoAnnotationUtils.h>
-
-#include "ExpertDiscoveryExtSigWiz.h"
-#include "ExpertDiscoveryPersistent.h"
-#include "ExpertDiscoveryTask.h"
-
-namespace U2 {
-
-ExpertDiscoveryLoadPosNegTask::ExpertDiscoveryLoadPosNegTask(QString firstF, QString secondF, bool generateNeg, int _negPerPositive)
-: Task(tr("ExpertDiscovery loading"), TaskFlags(TaskFlag_NoRun | TaskFlag_FailOnSubtaskCancel)){
-    firstFile = firstF;
-    secondFile = secondF;
-    this->generateNeg = generateNeg;
-    negPerPositive = _negPerPositive;
-}
-
-void ExpertDiscoveryLoadPosNegTask::prepare(){
-    // load sequences
-    Document *doc = loadFile(firstFile);
-    if (doc) {
-        doc->setName("Positive");
-        docs << doc;
-    }
-
-    if (hasError()) {
-        return;
-    }
-    if(!generateNeg){
-        doc = loadFile(secondFile);
-        if (doc) {
-            doc->setName("Negative");
-            docs << doc;
-        }
-    }
-}
-
-Document * ExpertDiscoveryLoadPosNegTask::loadFile(QString inFile){
-    GUrl url(inFile);
-
-    QList<FormatDetectionResult> formats = DocumentUtils::detectFormat(inFile);
-    if (formats.isEmpty()) {
-        stateInfo.setError(tr("Detecting format error for file %1").arg(inFile));
-        return NULL;
-    }
-
-    DocumentFormat* format = formats.first().format;
-    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(url));
-
-    Document* doc = format->createNewUnloadedDocument(iof, url, stateInfo);
-    CHECK_OP(stateInfo, NULL);
-
-    LoadUnloadedDocumentTask* ld = new LoadUnloadedDocumentTask(doc);
-    if(generateNeg){
-        connect(AppContext::getTaskScheduler(),SIGNAL(si_stateChanged(Task*)), SLOT(sl_generateNegativeSample(Task*)));
-    }
-    addSubTask(ld); // load document
-
-    return doc;
-}
-
-void ExpertDiscoveryLoadPosNegTask::sl_generateNegativeSample(Task* task){
-    LoadUnloadedDocumentTask *loadTask = qobject_cast<LoadUnloadedDocumentTask*>(task);
-    if (!loadTask || !loadTask->isFinished()) {
-        return;
-    }
-    if (loadTask->getStateInfo().hasError()) {
-        ExpertDiscoveryErrors::fileOpenError();
-        return;
-    }
-    if(docs.isEmpty()){
-        return;
-    }
-    Document* positiveDoc = docs.first();
-    Document* negativeDoc;
-    QString baseName = positiveDoc->getURL().baseFileName();
-    baseName = baseName.append("_negative_generated");
-    QString suffix = positiveDoc->getURL().completeFileSuffix();
-    if(suffix!=""){
-        suffix = QString(".").append(suffix);
-    }
-    baseName.append(suffix);
-
-    QString negFileName = positiveDoc->getURL().dirPath().append("/"+baseName);
-    GUrl url(negFileName);
-    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(url));
-
-    negativeDoc = positiveDoc->getDocumentFormat()->createNewLoadedDocument(iof, url, stateInfo);
-    CHECK_OP(stateInfo, );
-    const QList<GObject*>& posObjects = positiveDoc->getObjects();
-    bool isMsa = false;
-    if(!posObjects.isEmpty()){
-        if (posObjects.first()->getGObjectType() == GObjectTypes::MULTIPLE_ALIGNMENT){
-            isMsa = true;
-        }
-    }
-    QList<DNASequence> negObjects = sequencesGenerator(posObjects);
-    if(!isMsa){
-        foreach(const DNASequence& dnaSeq, negObjects) {
-            U2EntityRef seqRef = U2SequenceUtils::import(negativeDoc->getDbiRef(), dnaSeq, stateInfo);
-            CHECK_OP(stateInfo, );
-            negativeDoc->addObject(new U2SequenceObject(dnaSeq.getName(), seqRef));
-        }
-    }else{
-        MAlignment msa = MSAUtils::seq2ma(negObjects, stateInfo);
-        CHECK_OP(stateInfo, );
-
-        MAlignmentObject* obj = MAlignmentImporter::createAlignment(negativeDoc->getDbiRef(), msa, stateInfo);
-        CHECK_OP(stateInfo, );
-
-        negativeDoc->addObject(obj);
-    }
-
-    if (negativeDoc) {
-        negativeDoc->setName("Negative");
-        docs << negativeDoc;
-    }
-}
-
-//#define NUMBER_OF_NEGATIVE_PER_POSITIVE 10
-QList<DNASequence> ExpertDiscoveryLoadPosNegTask::sequencesGenerator(const QList<GObject*> &objects){
-    QList<DNASequence> neg;
-    int acgtContent[4];
-
-    foreach(GObject* obj, objects){
-        if(obj->getGObjectType() == GObjectTypes::SEQUENCE){
-            U2SequenceObject* seq = (U2SequenceObject*)obj;
-            U2OpStatusImpl os;
-            DNASequence dnaSequence = seq->getWholeSequence(os);
-            CHECK_OP(os, neg);
-            calculateACGTContent( dnaSequence, acgtContent);
-            for (int i = 0; i < negPerPositive; i++){
-                QByteArray curArr = generateRandomSequence(acgtContent, seq->getSequenceLength());
-                QString name = seq->getGObjectName();
-                name = name.append(QString("_neg%1").arg(i));
-                DNASequence curSeq = DNASequence(seq->getSequenceName().append(QString("_neg%1").arg(i)), curArr,seq->getAlphabet());
-                neg << curSeq;
-            }
-        }else if(obj->getGObjectType() == GObjectTypes::MULTIPLE_ALIGNMENT){
-            MAlignmentObject* mobj =  qobject_cast<MAlignmentObject*>(obj);
-            if(mobj){
-                const MAlignment& ma = mobj->getMAlignment();
-                QList<DNASequence> sequences = MSAUtils::ma2seq(ma, false);
-                foreach(DNASequence seq, sequences){
-                    calculateACGTContent(seq,acgtContent);
-                    for (int i = 0; i < negPerPositive; i++){
-                        QByteArray curArr = generateRandomSequence(acgtContent, seq.length());
-                        QString name = seq.getName();
-                        name = name.append(QString("_neg%1").arg(i));
-                        DNASequence curSeq = DNASequence(seq.getName().append(QString("_neg%1").arg(i)), curArr,seq.alphabet);
-                        neg << curSeq;
-                    }
-                }
-            }
-        }
-    }
-
-    return neg;
-}
-
-void ExpertDiscoveryLoadPosNegTask::calculateACGTContent(const DNASequence& seq, int* acgtContent) {
-    acgtContent[0] = acgtContent[1] = acgtContent[2] = acgtContent[3] = 0;
-    int seqLen = seq.length();
-    int total = seq.length();
-    QByteArray seqArr = seq.constSequence();
-    for (int i=0; i < seqLen; i++) {
-        char c = seqArr.at(i);
-        if (c == 'A') {
-            acgtContent[0]++;
-        } else if (c == 'C') {
-            acgtContent[1]++;
-        } else if (c == 'G') {
-            acgtContent[2]++;
-        } else if (c == 'T') {
-            acgtContent[3]++;
-        } else {
-            total--;
-        }
-    }
-
-    for (int i=0;i<4;i++) {
-        acgtContent[i] = qRound(acgtContent[i] * 100. / total);
-    }
-}
-
-
-QByteArray ExpertDiscoveryLoadPosNegTask::generateRandomSequence(const int* acgtContent, int seqLen)  {
-    QByteArray randomSequence;
-    randomSequence.reserve(seqLen);
-
-    int aPercentRange = acgtContent[0];
-    int cPercentRange = aPercentRange + acgtContent[1];
-    int gPercentRange = cPercentRange + acgtContent[2];
-
-    assert(gPercentRange + acgtContent[3] > 0);
-
-    for (int i=0; i < seqLen; i++) {
-        int r = qrand();
-        float perc = 100 * (float(r) / RAND_MAX);
-        char c = 'T';
-        if (perc <= aPercentRange) {
-            c = 'A';
-        } else if (perc <= cPercentRange) {
-            c = 'C';
-        } else if (perc <= gPercentRange) {
-            c = 'G';
-        }
-        randomSequence.append(c);
-    }
-    return randomSequence;
-}
-
-ExpertDiscoveryLoadPosNegMrkTask::ExpertDiscoveryLoadPosNegMrkTask(QString firstF, QString secondF, QString thirdF, bool generateDescr, bool appendToCurrentMrk,  bool isLettersMarkup, ExpertDiscoveryData& edD)
-: Task(tr("ExpertDiscovery loading"), TaskFlags(TaskFlag_FailOnSubtaskCancel |TaskFlag_FailOnSubtaskError))
-,edData(edD)
-,posDoc(NULL)
-,negDoc(NULL)
-{
-    firstFile = firstF;
-    secondFile = secondF;
-    thirdFile = thirdF;
-    this->generateDescr = generateDescr;
-    appendToCurrent = appendToCurrentMrk;
-    nucleotidesMarkup = isLettersMarkup;
-}
-
-void ExpertDiscoveryLoadPosNegMrkTask::prepare(){
-    if(nucleotidesMarkup){
-        return;
-    }
-    edData.clearScores();
-
-    if(!appendToCurrent){
-        edData.getPosMarkBase().clear();
-        edData.getNegMarkBase().clear();
-    }
-
-    edData.getDescriptionBaseNoConst().clear();
-
-    QString strPosName = firstFile;
-    try {
-        if (strPosName.right(4).compare(".xml", Qt::CaseInsensitive) == 0) {
-            if (!edData.loadAnnotation(edData.getPosMarkBase(), edData.getPosSeqBase(), strPosName)) {
-                throw std::exception();
-            }
-        } else  {
-            QList<FormatDetectionResult> curFormats = DocumentUtils::detectFormat(firstFile);
-            if (!curFormats.isEmpty()){
-                if(curFormats.first().format->getFormatId() == BaseDocumentFormats::PLAIN_GENBANK){
-                    GUrl url(strPosName);
-                    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(url));
-                    DocumentFormat* f = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::PLAIN_GENBANK);
-
-                    posDoc = f->createNewUnloadedDocument(iof, url, stateInfo);
-                    CHECK_OP(stateInfo, );
-                    addSubTask(new LoadUnloadedDocumentTask(posDoc));
-
-                } else {
-                    ifstream fPosAnn(strPosName.toStdString().c_str());
-                    edData.getPosMarkBase().load(fPosAnn);
-                }
-            }
-        }
-    }
-    catch (exception& ex) {
-        edData.getPosMarkBase().clear();
-        QString str = "Positive annotation: ";
-        str += ex.what();
-        setError(str);
-        return;
-    }
-
-    QString strNegName = secondFile;
-    if(strNegName.isEmpty()){
-        return;
-    }
-    try {
-        if (strNegName.right(4).compare(".xml", Qt::CaseInsensitive) == 0) {
-            if (!edData.loadAnnotation(edData.getNegMarkBase(), edData.getNegSeqBase(), strNegName))
-                throw std::exception();
-        } else {
-            QList<FormatDetectionResult> curFormats = DocumentUtils::detectFormat(strNegName);
-            if (!curFormats.isEmpty()) {
-                if(curFormats.first().format->getFormatId() == BaseDocumentFormats::PLAIN_GENBANK){
-                    GUrl URL(strNegName);
-                    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(URL));
-                    DocumentFormat* f = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::PLAIN_GENBANK);
-
-                    negDoc = f->createNewUnloadedDocument(iof, URL, stateInfo);
-                    CHECK_OP(stateInfo,);
-                    addSubTask(new LoadUnloadedDocumentTask(negDoc));
-                } else {
-                    ifstream fNegAnn(strNegName.toStdString().c_str());
-                    edData.getNegMarkBase().load(fNegAnn);
-                }
-            }
-
-        }
-    }
-    catch (exception& ex) {
-        edData.getPosMarkBase().clear();
-        edData.getNegMarkBase().clear();
-        QString str = "Negative annotation: ";
-        str += ex.what();
-        setError(str);
-        return;
-    }
-}
-
-void ExpertDiscoveryLoadPosNegMrkTask::run(){
-    if(nucleotidesMarkup){
-        edData.markupLetters();
-    }
-}
-
-
-Task::ReportResult ExpertDiscoveryLoadPosNegMrkTask::report(){
-    if (isCanceled() || hasError()) {
-        return ReportResult_Finished;
-    }
-
-    if(posDoc){
-        try {
-        if (!loadAnnotationFromUgeneDocument(edData.getPosMarkBase(), edData.getPosSeqBase(), posDoc))
-            throw std::exception();
-        }catch (exception& ex) {
-            edData.getPosMarkBase().clear();
-            QString str = "Positive annotation: ";
-            str += ex.what();
-            setError(str);
-            return ReportResult_Finished;
-        }
-    }
-
-    if(negDoc){
-        try {
-             if (!loadAnnotationFromUgeneDocument(edData.getNegMarkBase(), edData.getNegSeqBase(), negDoc))
-                throw std::exception();
-            }
-            catch (exception& ex) {
-                edData.getPosMarkBase().clear();
-                edData.getNegMarkBase().clear();
-                QString str = "Negative annotation: ";
-                str += ex.what();
-                setError(str);
-                return ReportResult_Finished;
-            }
-    }
-
-    try {
-        if (generateDescr) {
-            if (!edData.generateDescription(!appendToCurrent))
-                throw std::exception();
-        }
-        else {
-            ifstream fDesc( thirdFile.toStdString().c_str() );
-            edData.getDescriptionBaseNoConst().load(fDesc);
-        }
-    }
-    catch (exception& ex) {
-        edData.getPosMarkBase().clear();
-        edData.getNegMarkBase().clear();
-        edData.getDescriptionBaseNoConst().clear();
-        QString str = "Description: ";
-        str += ex.what();
-        setError(str);
-        return ReportResult_Finished;
-    }
-
-    edData.getPosSeqBase().setMarking(edData.getPosMarkBase());
-    edData.getNegSeqBase().setMarking(edData.getNegMarkBase());
-
-    return ReportResult_Finished;
-}
-
-bool ExpertDiscoveryLoadPosNegMrkTask::loadAnnotationFromUgeneDocument(MarkingBase& base, const SequenceBase& seqBase, Document* doc){
-    QList<GObject*> seqList = doc->findGObjectByType(GObjectTypes::SEQUENCE);
-    QList<GObject*> allSeqAnnotations = doc->findGObjectByType(GObjectTypes::ANNOTATION_TABLE);
-
-    foreach(GObject* seqObj, seqList){
-
-        int objN = seqBase.getObjNo(seqObj->getGObjectName().toStdString().c_str());
-        if(objN < 0){
-            QString sequenceId = seqObj->getGObjectName();
-            int cutPos = sequenceId.indexOf("sequence");
-            if(cutPos >= 0){
-                sequenceId = sequenceId.left(cutPos);
-            }
-            sequenceId = sequenceId.trimmed();
-            objN = seqBase.getObjNo(sequenceId.toStdString().c_str());
-        }
-        if(objN >= 0){
-           Marking mrk;
-           try {
-               mrk = base.getMarking(objN);
-           } catch (...) { }
-
-            QList<GObject *> annotations = GObjectUtils::findObjectsRelatedToObjectByRole(seqObj, GObjectTypes::ANNOTATION_TABLE, ObjectRole_Sequence,
-                allSeqAnnotations, UOF_LoadedOnly);
-
-            foreach (GObject* ao, annotations) {
-                AnnotationTableObject *atobj = qobject_cast<AnnotationTableObject *>(ao);
-                if (atobj) {
-                    const QList<Annotation *> annotations =  atobj->getAnnotations();
-                    foreach (Annotation *a, annotations) {
-                        const QVector<U2Region>& regions = a->getRegions();
-                        foreach (const U2Region &reg, regions ) {
-                            if (reg.endPos() >= reg.startPos && reg.startPos >= 0) {
-                                mrk.set(a->getName().toStdString(), "UGENE Annotation", DDisc::Interval(reg.startPos, reg.endPos()));
-                            }
-                        }
-                    }
-                }
-             }
-             base.setMarking(objN, mrk);
-        }
-    }
-    return true;
-}
-
-ExpertDiscoveryLoadControlMrkTask::ExpertDiscoveryLoadControlMrkTask(QString firstF, ExpertDiscoveryData& edD)
-: Task(tr("ExpertDiscovery loading"), TaskFlags(TaskFlag_NoRun | TaskFlag_FailOnSubtaskCancel))
-,edData(edD)
-,conDoc(NULL){
-    firstFile = firstF;
-}
-
-void ExpertDiscoveryLoadControlMrkTask::prepare(){
-
-    QString strPosName = firstFile;
-    try {
-        if (strPosName.right(4).compare(".xml", Qt::CaseInsensitive) == 0) {
-            edData.loadControlSequenceAnnotation(strPosName);
-        } else  {
-            QList<FormatDetectionResult> curFormats = DocumentUtils::detectFormat(firstFile);
-            if (!curFormats.isEmpty()){
-                if(curFormats.first().format->getFormatId() == BaseDocumentFormats::PLAIN_GENBANK){
-                    GUrl url(strPosName);
-                    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(url));
-                    DocumentFormat* f = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::PLAIN_GENBANK);
-
-                    conDoc = f->createNewUnloadedDocument(iof, url, stateInfo);
-                    CHECK_OP(stateInfo, );
-                    addSubTask(new LoadUnloadedDocumentTask(conDoc));
-
-                } else {
-                    ifstream fConAnn(strPosName.toStdString().c_str());
-                    edData.getConMarkBase().load(fConAnn);
-                }
-            }
-        }
-    }
-    catch (exception& ex) {
-        edData.getConMarkBase().clear();
-        QString str = "Control annotation: ";
-        str += ex.what();
-        setError(str);
-        return;
-    }
-}
-
-Task::ReportResult ExpertDiscoveryLoadControlMrkTask::report(){
-    if (isCanceled() || hasError()) {
-        return ReportResult_Finished;
-    }
-
-    if(conDoc){
-        try {
-            if (!ExpertDiscoveryLoadPosNegMrkTask::loadAnnotationFromUgeneDocument(edData.getConMarkBase(), edData.getConSeqBase(), conDoc))
-                throw std::exception();
-        }catch (exception& ex) {
-            edData.getConMarkBase().clear();
-            QString str = "Control annotation: ";
-            str += ex.what();
-            setError(str);
-            return ReportResult_Finished;
-        }
-    }
-
-    edData.getConSeqBase().setMarking(edData.getConMarkBase());
-
-    return ReportResult_Finished;
-}
-
-
-ExpertDiscoveryLoadControlTask::ExpertDiscoveryLoadControlTask(QString firstF)
-: Task(tr("ExpertDiscovery loading"), TaskFlags(TaskFlag_NoRun | TaskFlag_FailOnSubtaskCancel)){
-    firstFile = firstF;
-}
-
-void ExpertDiscoveryLoadControlTask::prepare( ) {
-    // load sequences
-    Document *doc = loadFile(firstFile);
-    if (doc) {
-        doc->setName("Control");
-        docs << doc;
-    }
-}
-
-Document* ExpertDiscoveryLoadControlTask::loadFile(QString inFile){
-    GUrl url(inFile);
-
-    QList<FormatDetectionResult> formats = DocumentUtils::detectFormat(inFile);
-    if (formats.isEmpty()) {
-        stateInfo.setError(tr("Detecting format error for file %1").arg(inFile));
-        return NULL;
-    }
-
-    DocumentFormat* format = formats.first().format;
-    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(url));
-
-    Document* doc = format->createNewUnloadedDocument(iof, url, stateInfo);
-    addSubTask(new LoadUnloadedDocumentTask(doc)); // load document
-
-    return doc;
-}
-
-void ExpertDiscoveryErrors::fileOpenError(const QString &filename) {
-    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("File opening error"), tr("Error opening file %1").arg(filename));
-    mb->exec();
-}
-
-void ExpertDiscoveryErrors::markupLoadError() {
-    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("Error loading markups"));
-    mb->exec();
-}
-
-ExpertDiscoverySignalExtractorTask::ExpertDiscoverySignalExtractorTask(ExpertDiscoveryData* d) :
-    Task(tr("ExpertDiscovery signals extracting"), TaskFlags(TaskFlag_FailOnSubtaskCancel)),
-    extractor(NULL),
-    folder(NULL),
-    data(d)
-{
-
-}
-
-ExpertDiscoverySignalExtractorTask::~ExpertDiscoverySignalExtractorTask(){
-    delete extractor;
-}
-
-void ExpertDiscoverySignalExtractorTask::run(){
-    GCOUNTER(cvar,tvar, "ExpertDiscoverySignalExtractor" );
-    if(!extractor){
-        return;
-    }
-    stateInfo.progress = 0;
-    while(performNextStep()){
-        if (stateInfo.cancelFlag) break;
-        stateInfo.progress = short(extractor->progress() + 0.5);
-    }
-
-    stateInfo.progress = 100;
-}
-
-void ExpertDiscoverySignalExtractorTask::prepare(){
-    QObjectScopedPointer<ExpertDiscoveryExtSigWiz> w = new ExpertDiscoveryExtSigWiz(QApplication::activeWindow(), &data->getRootFolder(), data->getMaxPosSequenceLen(), data->isLettersMarkedUp());
-    connect(w.data(), SIGNAL(si_newFolder(const QString&)), SLOT(sl_newFolder(const QString&)));
-    w->exec();
-    CHECK_EXT(!w.isNull(), setError("dialog is NULL"), );
-
-    if(QDialog::Accepted == w->result()){
-        PredicatBase* predicatBase = new PredicatBase(data->getDescriptionBase());
-        predicatBase->create(w->getPredicates());
-
-        extractor = new Extractor(&data->getPosSeqBase(), &data->getNegSeqBase(), predicatBase);
-        extractor->setFisherBound ( w->getFisher());
-        extractor->setProbabilityBound ( w->getProbability());
-        extractor->setInterestFisher ( w->getIntFisher());
-        extractor->setInterestProbability ( w->getIntProbability());
-        extractor->setCoverageBound ( w->getCoverage());
-        extractor->setMaxComplexity ( w->getMaxComplexity());
-        extractor->setMinComplexity ( w->getMinComplexity());
-        extractor->setMinCorrelationOnPos ( w->getMinPosCorrelation());
-        extractor->setMaxCorrelationOnPos ( w->getMaxPosCorrelation());
-        extractor->setMinCorrelationOnNeg ( w->getMinNegCorrelation());
-        extractor->setMaxCorrelationOnNeg ( w->getMaxNegCorrelation());
-        extractor->setCorrelationImportant ( w->getCorrelationImportant());
-        extractor->setCheckFisherMinimization ( w->getCheckFisherMinimization());
-        extractor->setStoreOnlyDifferent ( w->getStoreOnlyDifferent());
-        extractor->setUmEnabled( w->getUmEnabled());
-        extractor->setUmSamplesBound( w->getUmSamplesBound());
-        extractor->setUmBound( w->getUmBound());
-        folder = w->getFolder();
-    }
-}
-
-bool ExpertDiscoverySignalExtractorTask::performNextStep(){
-    Signal* pSignal = NULL;
-    bool needOneMore = extractor->step(&pSignal);
-    if (pSignal){
-        emit si_newSignalReady(pSignal->clone(), folder);
-    }
-    return needOneMore;
-}
-
-void ExpertDiscoverySignalExtractorTask::sl_newFolder(const QString& folderName){
-    emit si_newFolder(folderName);
-}
-
-ExpertDiscoveryCreateViewTask::ExpertDiscoveryCreateViewTask(const QList<GObject*>& objects)
-: ObjectViewTask("ED")
-,adv(NULL)
-{
-    //  remember only sequence objects -> other added automatically
-    //  load all objects
-
-    QSet<Document*> docsToLoadSet;
-    QSet<GObject*>  refsAdded;
-    QList<GObject*> allSequenceObjects = GObjectUtils::findAllObjects(UOF_LoadedAndUnloaded, GObjectTypes::SEQUENCE);
-    foreach(GObject* obj, objects) {
-        uiLog.trace("Object to open sequence view: '" + obj->getGObjectName()+"'");
-        Document* doc = obj->getDocument();
-        if (!doc->isLoaded()) {
-            docsToLoadSet.insert(doc);
-        }
-        if (GObjectUtils::hasType(obj, GObjectTypes::SEQUENCE)) {
-            sequenceObjectRefs.append(GObjectReference(doc->getURLString(), obj->getGObjectName(), GObjectTypes::SEQUENCE));
-            refsAdded.insert(obj);
-            continue;
-        }
-
-
-        //look for sequence object using relations
-        QList<GObject*> objWithSeqRelation = GObjectUtils::selectRelations(obj, GObjectTypes::SEQUENCE,
-            ObjectRole_Sequence, allSequenceObjects, UOF_LoadedAndUnloaded);
-
-        foreach(GObject* robj, objWithSeqRelation) {
-            if (!GObjectUtils::hasType(robj, GObjectTypes::SEQUENCE)) {
-                continue;
-            }
-            if (refsAdded.contains(robj)) {
-                continue;
-            }
-            Document* rdoc = robj->getDocument();
-            if (!rdoc->isLoaded()) {
-                docsToLoadSet.insert(rdoc);
-            }
-            refsAdded.insert(robj);
-            sequenceObjectRefs.append(GObjectReference(rdoc->getURLString(), robj->getGObjectName(), GObjectTypes::SEQUENCE));
-
-        }
-    }
-    foreach(Document* doc, docsToLoadSet) {
-        uiLog.trace("Document to load: '" + doc->getURLString()+"'");
-        documentsToLoad.append(doc);
-    }
-}
-
-#define MAX_SEQ_OBJS_PER_VIEW 50
-static QString deriveViewName(const QList<U2SequenceObject*>& seqObjects) {
-    QString viewName;
-    if (seqObjects.size() > 1) {
-        bool singleDocument = true;
-        Document* doc = seqObjects.first()->getDocument();
-        foreach(GObject* obj, seqObjects) {
-            if (doc != obj->getDocument()) {
-                singleDocument = false;
-                break;
-            }
-        }
-        if (singleDocument) {
-            viewName = GObjectViewUtils::genUniqueViewName(doc->getName());
-        } else {
-            viewName = GObjectViewUtils::genUniqueViewName(ExpertDiscoveryCreateViewTask::tr("ED"));
-        }
-    } else {
-        GObject* obj = seqObjects.first();
-        viewName = GObjectViewUtils::genUniqueViewName(obj->getDocument(), obj);
-    }
-    return viewName;
-}
-
-static bool objLessThan(const U2SequenceObject* o1 , const U2SequenceObject* o2) {
-    if (o1->getDocument() == o2->getDocument()) {
-        return o1->getGObjectName() < o2->getGObjectName();
-    }
-    return o1->getDocument()->getURLString() < o2->getDocument()->getURLString();
-}
-
-
-void ExpertDiscoveryCreateViewTask::open() {
-    if (stateInfo.hasError() || sequenceObjectRefs.isEmpty()) {
-        return;
-    }
-    QList<U2SequenceObject*> seqObjects;
-    QList<GObject*> allSequenceObjects = GObjectUtils::findAllObjects(UOF_LoadedOnly, GObjectTypes::SEQUENCE);
-    foreach(const GObjectReference& r, sequenceObjectRefs) {
-        GObject* obj = GObjectUtils::selectObjectByReference(r, allSequenceObjects, UOF_LoadedOnly);
-        U2SequenceObject* seqObj = qobject_cast<U2SequenceObject*>(obj);
-        if (seqObj!=NULL) {
-            seqObjects.append(seqObj);
-            if (seqObjects.size() > MAX_SEQ_OBJS_PER_VIEW) {
-                uiLog.details(tr("Maximum number of objects per view reached: %1").arg(MAX_SEQ_OBJS_PER_VIEW));
-                break;
-            }
-        } else {
-            uiLog.details(tr("Sequence object not available! URL %1, name %2").arg(r.docUrl).arg(r.objName));
-        }
-    }
-    if (seqObjects.isEmpty()) { //object was removed asynchronously with the task
-        stateInfo.setError(tr("No sequence objects found"));
-        return;
-    }
-    qSort(seqObjects.begin(), seqObjects.end(), objLessThan);
-    QString viewName = deriveViewName(seqObjects);
-    AnnotatedDNAView* v = new AnnotatedDNAView(viewName, seqObjects);
-    adv = v;
-}
-
-ExpertDiscoverySignalsAutoAnnotationUpdater::ExpertDiscoverySignalsAutoAnnotationUpdater()
-:AutoAnnotationsUpdater(tr("Signals"), "ExpertDiscover Signals")
-,curPS(NULL)
-,edData(NULL)
-,mutex(NULL)
-{
-
-}
-
-Task* ExpertDiscoverySignalsAutoAnnotationUpdater::createAutoAnnotationsUpdateTask(const AutoAnnotationObject* aa){
-    if(!edData){
-        return NULL;
-    }
-
-    AnnotationTableObject *aObj = aa->getAnnotationObject();
-    U2OpStatusImpl os;
-    const DNASequence& dna = aa->getSeqObject()->getWholeSequence(os);
-    CHECK_OP(os, NULL);
-    Task* task = new ExpertDiscoveryToAnnotationTask(aObj, dna, edData, curPS, *mutex);
-    return task;
-}
-
-bool ExpertDiscoverySignalsAutoAnnotationUpdater::checkConstraints(const AutoAnnotationConstraints& constraints){
-    if (constraints.alphabet == NULL) {
-        return false;
-    }
-
-    bool edEnabled = false;
-    if(constraints.hints != NULL){
-        QVariant hint = constraints.hints->get("EDHint");
-        if(hint.isNull()){
-            return false;
-        }
-        edEnabled = hint.toBool();
-    }
-
-    return constraints.alphabet->isNucleic() && edEnabled;
-}
-
-ExpertDiscoveryToAnnotationTask::ExpertDiscoveryToAnnotationTask(AnnotationTableObject *aobj,
-    const DNASequence &seq, ExpertDiscoveryData* d, const EDProcessedSignal* ps, QMutex& mut)
-    :Task(tr("Find and store expert discovery signals on a sequence"), TaskFlags_FOSCOE),
-      recDataTask(NULL),
-      dna(seq),
-      edData(d),
-      aObj(aobj),
-      curPS(ps),
-      hasRecData(false),
-      isControl(false),
-      isPos(false),
-      mutex(mut)
-{
-    seqRange = U2Region(0, seq.length());
-    curDnaName = seq.getName();
-}
-
-void ExpertDiscoveryToAnnotationTask::prepare(){
-    if (isCanceled() || hasError()) {
-        return;
-    }
-
-    if (aObj.isNull()) {
-        stateInfo.setError(  tr("Annotation table does not exist") );
-        return;
-    }
-
-    if (aObj->isStateLocked()) {
-        stateInfo.setError(  tr("Annotation table is read-only") );
-        return;
-    }
-
-    assert(edData);
-    int seqNumber = -1;
-    DDisc::Sequence edSeq;
-    seqNumber = edData->getPosSeqBase().getObjNo(curDnaName.toStdString().c_str());
-    if(seqNumber == -1){
-        seqNumber = edData->getNegSeqBase().getObjNo(curDnaName.toStdString().c_str());
-        if(seqNumber == -1){
-            seqNumber = edData->getConSeqBase().getObjNo(curDnaName.toStdString().c_str());
-            if(seqNumber == -1){
-                stateInfo.setError(tr("No expert discovery sequence"));
-                return;
-            }else{
-                edSeq = edData->getConSeqBase().getSequence(seqNumber);
-                isControl = true;
-            }
-        }else{
-            edSeq = edData->getNegSeqBase().getSequence(seqNumber);
-            isControl = false;
-            isPos = false;
-        }
-    }
-    else{
-        edSeq = edData->getPosSeqBase().getSequence(seqNumber);
-        isControl = false;
-        isPos = true;
-    }
-    csToAnnotation(seqNumber, edSeq.getSize());
-
-    recDataTask = new ExpertDiscoveryGetRecognitionDataTask(*edData, recData, edSeq);
-    addSubTask(recDataTask);
-}
-
-void ExpertDiscoveryToAnnotationTask::run( ) {
-
-}
-
-Task::ReportResult ExpertDiscoveryToAnnotationTask::report(){
-    if (isCanceled() || hasError()) {
-        return ReportResult_Finished;
-    }
-
-    if (aObj->isStateLocked()) {
-        setError(tr("Annotation obj %1 is locked for modifications").arg(aObj->getGObjectName()));
-        return ReportResult_Finished;
-    }
-
-    aObj->addAnnotations(resultList, "ExpertDiscover Signals");
-
-    return ReportResult_Finished;
-}
-
-void ExpertDiscoveryToAnnotationTask::csToAnnotation(int seqNumber, unsigned int seqLen){
-    assert(seqNumber!=-1);
-
-    if(isControl || !curPS){
-        return;
-    }
-
-    if(isPos){
-        if(curPS->getYesSequenceNumber() <= seqNumber){
-            return;
-        }
-    }else{
-        if(curPS->getNoSequenceNumber() <= seqNumber){
-            return;
-        }
-    }
-
-    const Set& set = isPos? curPS->getYesRealizations(seqNumber) : curPS->getNoRealizations(seqNumber);
-
-    unsigned int i = 0;
-    unsigned int j = 0;
-    QString first_data = "";
-    QString second_data = "";
-    while (i < seqLen) {
-        first_data = "";
-        if (set.is_set(i)) {
-            first_data = QString::fromStdString(set.association(i));
-        }
-
-        j = i+1;
-        while (j < seqLen) {
-            second_data = "";
-            if (set.is_set(j)) {
-                second_data = QString::fromStdString(set.association(i));
-            }
-            if (first_data != second_data || second_data.isEmpty()) {
-                break;
-            }
-            j++;
-        }
-        if (!first_data.isEmpty()) {
-            SharedAnnotationData data(new AnnotationData);
-            data->name = "signal";
-            data->location->regions << U2Region(i,j-i);
-            data->qualifiers.append(U2Qualifier("name", first_data));
-            resultList.append(data);
-        }
-
-        i = j;
-    }
-}
-
-QList<Task*> ExpertDiscoveryToAnnotationTask::onSubTaskFinished(Task* subTask){
-    QList<Task*> res;
-    if(subTask == recDataTask){
-        if(recDataTask->hasRecData()){
-            recDataToAnnotation();
-        }
-    }
-    return res;
-}
-
-void ExpertDiscoveryToAnnotationTask::recDataToAnnotation( ) {
-    unsigned int recSize= recData.size();
-    unsigned int i = 0;
-    unsigned int j = 0;
-    double first_rec_data = 0;
-    double second_rec_data = 0;
-    while(i < recSize){
-        first_rec_data = recData[i];
-
-        j = i+1;
-        while(j < recSize){
-            second_rec_data = recData[j];
-            if(first_rec_data != second_rec_data){
-                break;
-            }
-            j++;
-        }
-        if(first_rec_data!=0){
-            SharedAnnotationData data(new AnnotationData);
-            data->name = "rec.data";
-            data->location->regions << U2Region(i,j-i);
-            data->qualifiers.append(U2Qualifier("criteria", QString::number(first_rec_data)));
-            resultList.append(data);
-        }
-        i = j;
-    }
-}
-
-ExpertDiscoveryUpdateSelectionTask::ExpertDiscoveryUpdateSelectionTask(ExpertDiscoveryView* currentView, QTreeWidgetItem* tItem)
-    : Task("Update selection task", TaskFlag_None), view(currentView), curretItem(tItem)
-{
-    currentAdv = view->getCurrentAdv();
-    curPS = view->getCurrentProcessedSignals();
-    updatePS = true;
-    pItem = NULL;
-}
-
-void ExpertDiscoveryUpdateSelectionTask::run(){
-    assert(curretItem);
-    pItem = dynamic_cast<EDProjectItem*>(curretItem);
-    assert(pItem);
-
-    switch(pItem->getType()){
-       case PIT_CS:
-       case PIT_CSN_WORD:
-       case PIT_CSN_INTERVAL:
-       case PIT_CSN_REPETITION:
-       case PIT_CSN_DISTANCE:
-       case PIT_CSN_MRK_ITEM:
-       case PIT_MRK_ITEM:{
-           EDPICSNode* pPICSN = dynamic_cast<EDPICSNode*>(pItem);
-
-           if (curPS == pPICSN->getProcessedSignal(view->getExpertDiscoveryData())) {
-               updatePS = false;
-           }
-           else {
-               curPS = pPICSN->getProcessedSignal(view->getExpertDiscoveryData());
-               updatePS = true;
-           }
-       }
-       break;
-       default:
-           assert(0);
-    }
-
-
-}
-Task::ReportResult ExpertDiscoveryUpdateSelectionTask::report(){
-    if (curPS == NULL) {
-        updateAnnotations();
-        updatePS = false;
-        view->getPropertiesWidget()->sl_treeSelChanged(pItem);
-        view->setProcessedSignals(curPS);
-        return ReportResult_Finished;
-    }
-
-    if(updatePS){
-        updateAnnotations();
-    }
-    view->getPropertiesWidget()->sl_treeSelChanged(curretItem);
-    view->setProcessedSignals(curPS);
-    return ReportResult_Finished;
-}
-
-void ExpertDiscoveryUpdateSelectionTask::updateAnnotations(){
-    if(!currentAdv || !view->getProjectTree()->isEnabled() || view->getProjectTree()->isUpdatingItem()){
-        return;
-    }
-
-    view->getAutoAnnotationUpdater()->setEDProcSignals(curPS);
-
-    foreach(ADVSequenceObjectContext* sctx, currentAdv->getSequenceContexts()){
-        AutoAnnotationUtils::triggerAutoAnnotationsUpdate(sctx, "ExpertDiscover Signals");
-    }
-}
-
-ExpertDiscoveryGetRecognitionDataTask::ExpertDiscoveryGetRecognitionDataTask(ExpertDiscoveryData& data, RecognizationData& _recData, Sequence& seq)
-:Task("ExpertDiscvery recognition task", TaskFlag_None)
-,edData(data)
-,recData(_recData)
-,curSequence(seq)
-,isRecData(false)
-{
-
-}
-void ExpertDiscoveryGetRecognitionDataTask::run(){
-    isRecData = edData.recDataStorage.getRecognizationData(recData, &curSequence, edData.getSelectedSignalsContainer(), stateInfo);
-}
-
-ExpertDiscoverySaveDocumentTask::ExpertDiscoverySaveDocumentTask(ExpertDiscoveryData& data, const QString& fileName)
-:Task("Save ExpertDiscovery document task", TaskFlag_None)
-,edData(data)
-,filename(fileName)
-{
-
-}
-
-void ExpertDiscoverySaveDocumentTask::run(){
-    if(hasError()) {
-        return;
-    }
-
-    QFile file(filename);
-    if(!file.open(QIODevice::WriteOnly)) {
-        setError(L10N::errorOpeningFileWrite(filename));
-        return;
-    }
-
-    QDataStream out(&file);
-
-    EDPMCSFolder::save(out, &edData.getRootFolder());
-
-    out << edData.getRecognizationBound();
-    out << false;
-
-    EDPMSeqBase::save(out, edData.getPosSeqBase());
-    EDPMSeqBase::save(out,edData.getNegSeqBase());
-    EDPMSeqBase::save(out,edData.getConSeqBase());
-    EDPMMrkBase::save(out, edData.getPosMarkBase(), edData.getPosSeqBase().getSize());
-    EDPMMrkBase::save(out, edData.getNegMarkBase(), edData.getNegSeqBase().getSize());
-    EDPMMrkBase::save(out,edData.getConMarkBase(), edData.getConSeqBase().getSize());
-    EDPMDescription::save(out, edData.getDescriptionBaseNoConst());
-
-    edData.getPosSeqBase().setMarking(edData.getPosMarkBase());
-    edData.getNegSeqBase().setMarking(edData.getNegMarkBase());
-    edData.getConSeqBase().setMarking(edData.getConMarkBase());
-
-    edData.getSelectedSignalsContainer().save(out, edData.getRootFolder());
-
-    edData.setModifed(false);
-
-}
-
-ExpertDiscoveryLoadDocumentTask::ExpertDiscoveryLoadDocumentTask(ExpertDiscoveryData& data, const QString& fileName)
-:Task("Load ExpertDiscovery document task", TaskFlag_None)
-,edData(data)
-,filename(fileName)
-{
-    tpm = Progress_Manual;
-}
-
-void ExpertDiscoveryLoadDocumentTask::run(){
-    if(hasError()) {
-        return;
-    }
-
-    QFile file(filename);
-    if(!file.open(QIODevice::ReadOnly)) {
-        setError(L10N::errorOpeningFileRead(filename));
-        return;
-    }
-
-    stateInfo.progress = 0;
-    if(stateInfo.isCanceled()){
-        return;
-    }
-
-    QDataStream inStream(&file);
-
-    EDPMCSFolder::load(inStream, &edData.getRootFolder());
-
-    bool m_bOptimizeRecogniztionBound;
-    double m_dRecognizationBound;
-
-    inStream >> m_dRecognizationBound;
-    inStream >> m_bOptimizeRecogniztionBound;
-
-    edData.setRecBound(m_dRecognizationBound);
-
-    stateInfo.progress = 10;
-    if(stateInfo.isCanceled()){
-        return;
-    }
-
-    EDPMSeqBase::load(inStream, edData.getPosSeqBase());
-    EDPMSeqBase::load(inStream, edData.getNegSeqBase());
-    EDPMSeqBase::load(inStream, edData.getConSeqBase());
-    stateInfo.progress = 50;
-    if(stateInfo.isCanceled()){
-        return;
-    }
-    EDPMMrkBase::load(inStream, edData.getPosMarkBase(), edData.getPosSeqBase().getSize());
-    EDPMMrkBase::load(inStream, edData.getNegMarkBase(), edData.getNegSeqBase().getSize());
-    EDPMMrkBase::load(inStream, edData.getConMarkBase(), edData.getConSeqBase().getSize());
-    EDPMDescription::load(inStream, edData.getDescriptionBaseNoConst());
-
-    stateInfo.progress = 80;
-    if(stateInfo.isCanceled()){
-        return;
-    }
-
-    edData.getPosSeqBase().setMarking(edData.getPosMarkBase());
-    edData.getNegSeqBase().setMarking(edData.getNegMarkBase());
-    edData.getConSeqBase().setMarking(edData.getConMarkBase());
-
-    edData.getSelectedSignalsContainer().load(inStream, edData.getRootFolder());
-
-    stateInfo.progress = 100;
-}
-
-ExpertDiscoveryMarkupTask::ExpertDiscoveryMarkupTask(ExpertDiscoveryData& data)
-:Task("ExpertDiscovery markup letters", TaskFlag_None), edData(data){
-    isLettersMarkup = true;
-    signal = NULL;
-}
-ExpertDiscoveryMarkupTask::ExpertDiscoveryMarkupTask(ExpertDiscoveryData& data, const EDProcessedSignal* _signal)
-:Task("ExpertDiscovery signal markup", TaskFlag_None), edData(data){
-    isLettersMarkup = false;
-    signal = _signal;
-}
-void ExpertDiscoveryMarkupTask::run(){
-    if(isLettersMarkup){
-        stateInfo.progress = 0;
-        edData.markupLetters();
-        stateInfo.progress = 100;
-    }else{
-        if(!signal){
-            return;
-        }
-        edData.clearScores();
-
-        // Adding new signal family for letters
-        std::string strFamilyName = ExpertDiscoveryData::FAMILY_ED_SIGNAL.toStdString();
-        std::string strMethodName = ExpertDiscoveryData::FAMILY_ED_METHOD.toStdString();
-
-        Family ed_signals;
-        bool initialiseFamily = false;
-        try{
-            ed_signals = edData.getDescriptionBase().getSignalFamily(strFamilyName);
-        }catch(...){
-            initialiseFamily = true;
-            ed_signals.setName(strFamilyName);
-        }
-
-        MetaInfo mi;
-        int number = ed_signals.getSignalNumber();
-        curSignalName = QString("ED_SIGNAL_%1").arg(number);
-        mi.setName(curSignalName.toStdString());
-        mi.setNo(number);
-        mi.setMethodName(strMethodName);
-        ed_signals.AddInfo(mi);
-
-        if(initialiseFamily){
-            edData.getDescriptionBaseNoConst().addFamily(ed_signals);
-        }
-
-        addSignalMarkup(edData.getPosSeqBase(), edData.getPosMarkBase(), true);
-        addSignalMarkup(edData.getNegSeqBase(), edData.getNegMarkBase(), false);
-
-        edData.setModifed();
-    }
-}
-
-void ExpertDiscoveryMarkupTask::addSignalMarkup(SequenceBase& rBase, MarkingBase& rAnn, bool isPos){
-    std::string strFamilyName = ExpertDiscoveryData::FAMILY_ED_SIGNAL.toStdString();
-
-    int size = rBase.getSize();
-    std::string seq;
-    for (int i=0; i<size; i++) {
-        const Set& signalSet = isPos ? signal->getYesRealizations(i) : signal->getNoRealizations(i);
-        seq = rBase.getSequence(i).getSequence();
-        Marking mrk;
-        try {
-            mrk = rAnn.getMarking(i);
-            }
-            catch (exception) {
-            }
-            int len = (int)seq.size();
-            for (int j=0; j<len; j++) {
-                if(signalSet.is_set(j)){
-                    mrk.set(curSignalName.toStdString(), strFamilyName, Interval(j,j));
-                }
-            }
-            rAnn.setMarking(i, mrk);
-        }
-     rBase.setMarking(rAnn);
-}
-
-
-ExpertDiscoveryCalculateErrors::ExpertDiscoveryCalculateErrors(const CalculateErrorTaskInfo& _settings)
-:BackgroundTask<ErrorsInfo>(tr("Error calculation"), TaskFlag_None), settings(_settings){
-    tpm = Progress_Manual;
-}
-void ExpertDiscoveryCalculateErrors::run(){
-
-    double step = settings.scoreStep;
-    int stepsNum = settings.scoreReg.length / step;
-    stateInfo.progress = 0;
-    result.errorFirstType.resize(stepsNum);
-    result.errorSecondType.resize(stepsNum);
-    result.maxErrorVal = 0;
-    result.minErrorVal = std::numeric_limits<double>::max();
-    double probPosRej = 0;
-    double probNegRec = 0;
-    double curScore = settings.scoreReg.startPos;
-    for(int i = 0; i < stepsNum; i++, curScore+=step){
-        stateInfo.progress = (i/stepsNum)*100;
-        probPosRej = 0;
-        int size = (int)settings.posScore.size();
-        for (int j=0; j<size; j++)
-            if (settings.posScore[j] < curScore) probPosRej++;
-        probPosRej /= settings.posScore.size();
-        result.errorFirstType[i] = probPosRej;
-
-        probNegRec = 0;
-        size = (int)settings.negScore.size();
-        for (int j=0; j<size; j++)
-            if (settings.negScore[j] >= curScore) probNegRec++;
-        probNegRec /= settings.negScore.size();
-        result.errorSecondType[i] = probNegRec;
-
-        result.maxErrorVal = qMax(result.maxErrorVal, probPosRej);
-        result.maxErrorVal = qMax(result.maxErrorVal, probNegRec);
-
-        result.minErrorVal = qMin(result.minErrorVal, probPosRej);
-        result.minErrorVal = qMin(result.minErrorVal, probNegRec);
-    }
-
-    stateInfo.progress = 100;
-}
-
-//search
-
-ExpertDiscoverySearchTask::ExpertDiscoverySearchTask(ExpertDiscoveryData& data, const QByteArray& seq, const ExpertDiscoverySearchCfg& cfg, int ro)
-    : Task(tr("ExpertDiscovery Search"), TaskFlags_NR_FOSCOE), edData(data), cfg(cfg), resultsOffset(ro), wholeSeq(seq), lenLeft(0), curLeft(-1)
-{
-    SequenceWalkerConfig c;
-    c.walkCircular = false;
-    c.seq = wholeSeq.constData();
-    c.seqSize = wholeSeq.length();
-    c.complTrans  = cfg.complTT;
-    c.strandToWalk = cfg.complTT == NULL ? StrandOption_DirectOnly : StrandOption_Both;
-    c.aminoTrans = NULL;
-
-    c.chunkSize = edData.getMaxPosSequenceLen();
-    c.nThreads = 1;         //for now ExpertDiscovery signal can be processed only in one thread
-    c.overlapSize = c.chunkSize - 1; //move window to 1bp
-
-    //for progress
-    lenLeft = wholeSeq.size();
-    if (c.strandToWalk == StrandOption_Both){
-        lenLeft*=2;
-    }
-    stateInfo.progress = 0;
-
-    SequenceWalkerTask* t = new SequenceWalkerTask(c, this, tr("ExpertDiscovery Search Parallel"));
-    addSubTask(t);
-}
-
-void ExpertDiscoverySearchTask::onRegion(SequenceWalkerSubtask* t, TaskStateInfo& ti) {
-    if ((cfg.complOnly && !t->isDNAComplemented()) || ti.isCanceled()) {
-        return;
-    }
-    U2Region globalRegion = t->getGlobalRegion();
-    qint64 seqLen = globalRegion.length;
-    const char* seq = t->getGlobalConfig().seq + globalRegion.startPos;
-    DNATranslation* complTT = t->isDNAComplemented() ? t->getGlobalConfig().complTrans : NULL;
-    float score = ExpertDiscoveryData::calculateSequenceScore(seq, seqLen, edData, complTT);
-    if (score < 0) {
-        ti.setError(  tr("Internal error, score:%1").arg(score) );
-        return;
-    }
-    ExpertDiscoverySearchResult r;
-    r.score = score;
-    if (r.score >= cfg.minSCORE) {//report result
-        r.strand = t->isDNAComplemented() ? U2Strand::Complementary : U2Strand::Direct;
-        r.region.startPos = globalRegion.startPos + resultsOffset;
-        r.region.length = seqLen;
-        addResult(r);
-    }
-
-    if(ti.progress <= 100){
-        ti.progress+= (int)(100/(float)lenLeft  + 0.5);
-    }
-}
-
-
-void ExpertDiscoverySearchTask::addResult(const ExpertDiscoverySearchResult& r) {
-    lock.lock();
-    results.append(r);
-    lock.unlock();
-}
-
-QList<ExpertDiscoverySearchResult> ExpertDiscoverySearchTask::takeResults() {
-    lock.lock();
-    QList<ExpertDiscoverySearchResult> res = results;
-    results.clear();
-    lock.unlock();
-    return res;
-}
-
-
-
-ExpertDiscoveryExportSequences::ExpertDiscoveryExportSequences( const SequenceBase& _base )
-:Task(tr("Export Sequences Task"), TaskFlag_None)
-,base(_base)
-{
-
-}
-
-
-void ExpertDiscoveryExportSequences::prepare() {
-    const QString filter = DialogUtils::prepareDocumentsFileFilter(BaseDocumentFormats::FASTA, false, QStringList());
-    fileName = U2FileDialog::getSaveFileName(qobject_cast<QWidget *>(AppContext::getMainWindow()->getQMainWindow()), tr("Save File"), "", filter);
-    if (fileName.isEmpty()) {
-        cancel();
-    }
-}
-
-void ExpertDiscoveryExportSequences::run() {
-    if (hasError() || isCanceled()){
-        return;
-    }
-
-    ofstream out(fileName.toStdString().c_str());
-
-    if (!out.is_open()) {
-        setError(tr("Report generation failed: ") + L10N::errorOpeningFileWrite(GUrl(fileName)));
-        return;
-    }
-
-    base.save(out);
-}
-
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryTask.h b/src/plugins/expert_discovery/src/ExpertDiscoveryTask.h
deleted file mode 100644
index f40df83..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryTask.h
+++ /dev/null
@@ -1,395 +0,0 @@
-/**
- * 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.
- */
-
-#pragma once
-
-#include "DDisc/Extractor.h"
-#include "DDisc/Sequence.h"
-#include "DDisc/MetaInfo.h"
-#include "ExpertDiscoveryData.h"
-#include "ExpertDiscoveryCSUtil.h"
-#include "ExpertDiscoveryView.h"
-
-#include <U2Core/AnnotationData.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/AutoAnnotationsSupport.h>
-#include <U2Core/BackgroundTaskRunner.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/GObject.h>
-#include <U2Core/GObjectSelection.h>
-#include <U2Core/GObjectReference.h>
-#include <U2Core/U2Region.h>
-#include <U2Core/SequenceWalkerTask.h>
-#include <U2Core/Task.h>
-
-#include <U2Gui/ObjectViewTasks.h>
-
-#include <U2View/AnnotatedDNAView.h>
-
-#include <QtCore/QMutex>
-
-namespace U2 {
-
-class Document;
-
-class ExpertDiscoveryLoadPosNegTask: public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoveryLoadPosNegTask(QString firstF, QString secondF, bool generateNeg, int negPerPositive);
-
-    void run(){};
-    void prepare();
-
-    QList<Document*> getDocuments() const {return docs;}
-
-    bool isGenerateNeg() {return generateNeg;}
-
-private:
-    QString firstFile, secondFile;
-    bool generateNeg;
-    int negPerPositive;
-    QList<Document*> docs;
-
-    Document* loadFile(QString inFile);
-
-    QList<DNASequence> sequencesGenerator(const QList<GObject*> &);
-    QByteArray generateRandomSequence(const int* acgtContent, int seqLen);
-    void calculateACGTContent(const DNASequence& seq, int* acgtContent);
-
-protected slots:
-    void sl_generateNegativeSample(Task* task);
-
-signals:
-    void si_stateChanged(Task* task);
-};
-
-class ExpertDiscoveryLoadControlTask: public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoveryLoadControlTask(QString firstF);
-
-    void run(){};
-    void prepare();
-
-    QList<Document*> getDocuments() const {return docs;}
-
-private:
-    QString firstFile;
-    QList<Document*> docs;
-
-    Document* loadFile(QString inFile);
-
-signals:
-    void si_stateChanged(Task* task);
-};
-
-class ExpertDiscoveryLoadPosNegMrkTask: public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoveryLoadPosNegMrkTask(QString firstF, QString secondF, QString thirdF, bool generateDescr, bool appendToCurrentMrk, bool isLettersMarkup, ExpertDiscoveryData& edData);
-
-    void run();
-    void prepare();
-    ReportResult report();
-
-    static bool loadAnnotationFromUgeneDocument(MarkingBase& base, const SequenceBase& seqBase, Document* doc);
-
-private:
-    QString firstFile, secondFile, thirdFile;
-    bool generateDescr;
-    bool appendToCurrent;
-    bool nucleotidesMarkup;
-
-    ExpertDiscoveryData& edData;
-    Document* posDoc;
-    Document* negDoc;
-
-signals:
-    void si_stateChanged(Task* task);
-};
-
-class ExpertDiscoveryLoadControlMrkTask: public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoveryLoadControlMrkTask(QString firstF, ExpertDiscoveryData& edD );
-
-    void run(){};
-    void prepare();
-    ReportResult report();
-
-private:
-    QString firstFile;
-    ExpertDiscoveryData& edData;
-    Document* conDoc;
-
-signals:
-    void si_stateChanged(Task* task);
-};
-
-class ExpertDiscoverySignalExtractorTask: public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoverySignalExtractorTask(ExpertDiscoveryData* d);
-    ~ExpertDiscoverySignalExtractorTask();
-
-    void run();
-    void prepare();
-
-private:
-    DDisc::Extractor *extractor;
-    CSFolder* folder;
-    ExpertDiscoveryData* data;
-
-    bool performNextStep();
-
-protected slots:
-    void sl_newFolder(const QString& folderName);
-
-signals:
-    void si_newSignalReady(DDisc::Signal* signal, CSFolder* folder);
-    void si_newFolder(const QString& folderName);
-};
-
-// error messages and dialogs
-class ExpertDiscoveryErrors: QObject {
-    Q_OBJECT
-public:
-    enum Errors {ErrorOpen, NoErrors};
-
-    static void fileOpenError(const QString &filename = "");
-    static void markupLoadError();
-};
-
-class ExpertDiscoveryCreateViewTask: public ObjectViewTask{
-    Q_OBJECT
-public:
-    //opens a single view for all sequence object in the list of sequence objects related to the objects in the list
-    ExpertDiscoveryCreateViewTask(const QList<GObject*>& objects);
-
-    virtual void open();
-    AnnotatedDNAView* getADV(){return adv;}
-
-private:
-    QList<GObjectReference> sequenceObjectRefs;
-    AnnotatedDNAView* adv;
-};
-
-class ExpertDiscoverySignalsAutoAnnotationUpdater : public AutoAnnotationsUpdater{
-    Q_OBJECT
-public:
-    ExpertDiscoverySignalsAutoAnnotationUpdater();
-    Task* createAutoAnnotationsUpdateTask(const AutoAnnotationObject* aa);
-    bool checkConstraints(const AutoAnnotationConstraints& constraints);
-
-    void setEDData(ExpertDiscoveryData* d){edData = d;}
-    void setEDProcSignals(const EDProcessedSignal* ps){curPS = ps;}
-    void setEDMutex(QMutex* mut){mutex = mut;}
-private:
-    ExpertDiscoveryData* edData;
-    const EDProcessedSignal* curPS;
-    QMutex* mutex;
-
-};
-class ExpertDiscoveryGetRecognitionDataTask :public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoveryGetRecognitionDataTask(ExpertDiscoveryData& data, RecognizationData& _recData, Sequence& seq);
-    void run();
-    bool hasRecData(){return isRecData;}
-private:
-    bool isRecData;
-    Sequence curSequence;
-    ExpertDiscoveryData& edData;
-    RecognizationData& recData;
-
-};
-
-class ExpertDiscoveryToAnnotationTask : public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoveryToAnnotationTask(AnnotationTableObject* aobj, const DNASequence& seq, ExpertDiscoveryData* d, const EDProcessedSignal* ps, QMutex& mut);
-    void prepare();
-    void run();
-    ReportResult report();
-private:
-    QList<Task*> onSubTaskFinished(Task* subTask);
-    void recDataToAnnotation();
-    void csToAnnotation(int seqNumberm, unsigned int seqLen);
-
-    QString                                 curDnaName;
-    ExpertDiscoveryGetRecognitionDataTask*  recDataTask;
-    const DNASequence&                      dna;
-    ExpertDiscoveryData*                    edData;
-    const EDProcessedSignal*                curPS;
-    QList<SharedAnnotationData>             resultList;
-    U2Region                                seqRange;
-    QPointer<AnnotationTableObject>         aObj;
-    RecognizationData                       recData;
-    bool                                    hasRecData;
-    bool                                    isControl;
-    bool                                    isPos;
-    QMutex&                                 mutex;
-};
-
-class ExpertDiscoveryUpdateSelectionTask : public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoveryUpdateSelectionTask(ExpertDiscoveryView* currentView, QTreeWidgetItem* tItem);
-    void run();
-    ReportResult report();
-private:
-    AnnotatedDNAView*                   currentAdv;
-    const EDProcessedSignal*            curPS;
-    ExpertDiscoveryView*                view;
-    QTreeWidgetItem*                    curretItem;
-    bool                                updatePS;
-    EDProjectItem*                      pItem;
-
-    void updateAnnotations();
-
-};
-
-class ExpertDiscoverySaveDocumentTask : public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoverySaveDocumentTask(ExpertDiscoveryData& data, const QString& fileName);
-
-    void run();
-private:
-    ExpertDiscoveryData& edData;
-    QString filename;
-};
-
-class ExpertDiscoveryLoadDocumentTask : public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoveryLoadDocumentTask(ExpertDiscoveryData& data, const QString& fileName);
-
-    void run();
-private:
-    ExpertDiscoveryData& edData;
-    QString filename;
-};
-
-class ExpertDiscoveryMarkupTask : public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoveryMarkupTask(ExpertDiscoveryData& data);
-    ExpertDiscoveryMarkupTask(ExpertDiscoveryData& data, const EDProcessedSignal* signal);
-
-    void run();
-private:
-    ExpertDiscoveryData& edData;
-    bool isLettersMarkup;
-    const EDProcessedSignal* signal;
-    QString curSignalName;
-
-    void addSignalMarkup(SequenceBase& rBase, MarkingBase& rAnn, bool isPos);
-};
-
-struct ErrorsInfo{
-    ErrorsInfo(): maxErrorVal(0), minErrorVal(0){;}
-
-    QVector<double> errorFirstType;
-    QVector<double> errorSecondType;
-    QVector<double> score;
-    double maxErrorVal;
-    double minErrorVal;
-};
-
-struct CalculateErrorTaskInfo{
-    CalculateErrorTaskInfo():scoreStep(0.1){}
-    double scoreStep;
-    U2Region scoreReg;
-    QVector<double> posScore;
-    QVector<double> negScore;
-};
-
-class ExpertDiscoveryCalculateErrors : public BackgroundTask<ErrorsInfo>{
-    Q_OBJECT
-public:
-    ExpertDiscoveryCalculateErrors(const CalculateErrorTaskInfo& settings);
-    void run();
-private:
-    CalculateErrorTaskInfo settings;
-};
-
-//search
-class ExpertDiscoverySearchResult {
-public:
-    ExpertDiscoverySearchResult() : strand(U2Strand::Direct), score(0){}
-
-    SharedAnnotationData toAnnotation(const QString &name) const {
-        SharedAnnotationData data(new AnnotationData);
-        data->name = name;
-        data->location->regions << region;
-        data->setStrand(strand);
-        data->qualifiers.append(U2Qualifier("score", QString::number(score)));
-        return data;
-    }
-
-    U2Region region;
-    U2Strand strand;
-    float   score;
-};
-
-class ExpertDiscoverySearchCfg {
-public:
-    ExpertDiscoverySearchCfg() : minSCORE(0), complTT(NULL), complOnly(false) {}
-    float minSCORE;
-    DNATranslation* complTT;
-    bool complOnly;
-    U2Region searchRegion;
-};
-
-class ExpertDiscoverySearchTask : public Task, public SequenceWalkerCallback {
-    Q_OBJECT
-public:
-    ExpertDiscoverySearchTask(ExpertDiscoveryData& data, const QByteArray& seq, const ExpertDiscoverySearchCfg& cfg, int resultsOffset);
-
-    virtual void onRegion(SequenceWalkerSubtask* t, TaskStateInfo& ti);
-    QList<ExpertDiscoverySearchResult> takeResults();
-
-private:
-    void addResult(const ExpertDiscoverySearchResult& r);
-
-    QMutex                              lock;
-    ExpertDiscoveryData&                edData;
-    ExpertDiscoverySearchCfg            cfg;
-    QList<ExpertDiscoverySearchResult>  results;
-    int                                 resultsOffset;
-    QByteArray                          wholeSeq;
-    int                                 lenLeft;
-    int                                 curLeft;
-};
-
-class ExpertDiscoveryExportSequences : public Task{
-    Q_OBJECT
-public:
-    ExpertDiscoveryExportSequences(const SequenceBase& base);
-    void prepare();
-    void run();
-private:
-    const SequenceBase& base;
-    QString fileName;
-};
-
-} // namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgets.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgets.cpp
deleted file mode 100644
index 8495fd7..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgets.cpp
+++ /dev/null
@@ -1,1657 +0,0 @@
-#include "ExpertDiscoveryTreeWidgets.h"
-
-
-
-#include<QMessageBox>
-#include <QtGui/QMouseEvent>
-
-#include <strstream>
-using std::strstream;
-using std::ws;
-
-namespace U2 {
-
-
-////////////////////////////////////////////////////////////
-EDPIPropertyType::EDPIPropertyType(){
-
-}
-EDPIPropertyType::~EDPIPropertyType(){
-
-}
-//////////////////////////////////////////////////////////////////
-EDPIProperty::EDPIProperty(const EDPIProperty& rProperty)
-    : m_pType(NULL)
-    , m_pCallback(NULL)
-{
-    *this = rProperty;
-}
-
-EDPIProperty::EDPIProperty(QString strName /* ="" */)
-    : m_pType(NULL)
-    , m_pCallback(NULL)
-{
-    setType(EDPIPropertyTypeStaticString::getInstance());
-    setName( strName );
-}
-
-EDPIProperty::~EDPIProperty() {
-    delete m_pCallback;
-}
-
-EDPIProperty& EDPIProperty::operator =(const EDPIProperty& rProperty) {
-    setType( rProperty.m_pType);
-    setName( rProperty.getName() );
-    if (rProperty.m_pCallback)
-        m_pCallback = rProperty.m_pCallback->clone();
-    else
-        m_pCallback = NULL;
-    return *this;
-}
-
-QString EDPIProperty::getName() const {
-    return m_strName;
-}
-
-void EDPIProperty::setName(QString strName) {
-    m_strName = strName;
-}
-
-QString	EDPIProperty::getValue() const {
-    if (m_pCallback)
-        return m_pCallback->call();
-    else
-    {
-        QString strUndefined = "Undefined";
-        return strUndefined;
-    }
-}
-
-void EDPIProperty::setCallback(ICallback* pCallback)
-{
-    m_pCallback = pCallback;
-}
-const EDPIPropertyType* EDPIProperty::getType() const
-{
-    return m_pType;
-}
-
-void EDPIProperty::setType(EDPIPropertyType* pType)
-{
-    m_pType = pType;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
-EDPIPropertyGroup::EDPIPropertyGroup(QString strName /*=""*/)
-{
-    setName(strName);
-}
-
-EDPIPropertyGroup::EDPIPropertyGroup(const EDPIPropertyGroup& rGroup)
-{
-    *this = rGroup;
-}
-
-EDPIPropertyGroup::~EDPIPropertyGroup()
-{
-}
-
-EDPIPropertyGroup& EDPIPropertyGroup::operator=(const EDPIPropertyGroup& rGroup)
-{
-    m_strName = rGroup.getName();
-    m_arProperties = rGroup.m_arProperties;
-    return *this;
-}
-
-QString EDPIPropertyGroup::getName() const
-{
-    return m_strName;
-}
-
-void EDPIPropertyGroup::setName(QString strName)
-{
-    m_strName = strName;
-}
-
-int	EDPIPropertyGroup::getPropertiesNumber() const {
-    return  m_arProperties.size();
-}
-
-EDPIProperty& EDPIPropertyGroup::getProperty(int nProp) {
-    assert( nProp>=0 && nProp<m_arProperties.size());
-    return m_arProperties[nProp];
-}
-
-const EDPIProperty& EDPIPropertyGroup::getProperty(int nProp) const {
-    assert( nProp>=0 && nProp<m_arProperties.size());
-    return m_arProperties[nProp];
-}
-
-void EDPIPropertyGroup::addProperty(EDPIProperty &rProperty) {
-    m_arProperties.append(rProperty);
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-IMPLEMENT_GETINSTANCE(EDPIPropertyTypeStaticString)
-
-EDPIPropertyTypeStaticString::EDPIPropertyTypeStaticString()
-{
-}
-
-EDPIPropertyTypeStaticString::~EDPIPropertyTypeStaticString()
-{
-}
-
-bool EDPIPropertyTypeStaticString::isNumber() const
-{
-    return false;
-}
-
-bool EDPIPropertyTypeStaticString::hasEdit() const
-{
-    return false;
-}
-
-bool EDPIPropertyTypeStaticString::hasPredefinedValues() const
-{
-    return false;
-}
-
-int	EDPIPropertyTypeStaticString::getValueNumber() const
-{
-    return 0;
-}
-
-QString EDPIPropertyTypeStaticString::getValue(int i) const
-{
-    assert(0);
-    return "";
-}
-
-bool EDPIPropertyTypeStaticString::isValidValue(QString strValue) const
-{
-    return true;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-IMPLEMENT_GETINSTANCE(EDPIPropertyTypeString)
-
-EDPIPropertyTypeString::EDPIPropertyTypeString()
-{
-}
-
-EDPIPropertyTypeString::~EDPIPropertyTypeString()
-{
-}
-
-bool EDPIPropertyTypeString::hasEdit() const
-{
-    return true;
-}
-
-//////////////////////////////////////////////////////////////////////////
-
-IMPLEMENT_GETINSTANCE(EDPIPropertyTypeUnsignedInt)
-
-EDPIPropertyTypeUnsignedInt::EDPIPropertyTypeUnsignedInt()
-{
-}
-
-EDPIPropertyTypeUnsignedInt::~EDPIPropertyTypeUnsignedInt()
-{
-}
-
-bool EDPIPropertyTypeUnsignedInt::isNumber() const
-{
-    return true;
-}
-
-bool EDPIPropertyTypeUnsignedInt::hasEdit() const
-{
-    return true;
-}
-
-bool EDPIPropertyTypeUnsignedInt::hasPredefinedValues() const
-{
-    return false;
-}
-
-int EDPIPropertyTypeUnsignedInt::getValueNumber() const
-{
-    return 0;
-}
-
-QString EDPIPropertyTypeUnsignedInt::getValue(int i) const
-{
-    assert(0);
-    return "";
-}
-
-bool EDPIPropertyTypeUnsignedInt::isValidValue(QString strValue) const
-{
-    strstream str;
-    str << strValue.toStdString();
-    int value = 0;
-    str >> value;
-    str >> ws;
-    if (value>=0 && str.eof())
-        return true;
-    return false;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-IMPLEMENT_GETINSTANCE(EDPIPropertyTypeUnsignedIntWithUnl)
-
-EDPIPropertyTypeUnsignedIntWithUnl::EDPIPropertyTypeUnsignedIntWithUnl()
-: EDPIPropertyTypeListEdit()
-{
-   addValue("Unlimited");
-}
-
-EDPIPropertyTypeUnsignedIntWithUnl::~EDPIPropertyTypeUnsignedIntWithUnl()
-{
-}
-
-bool EDPIPropertyTypeUnsignedIntWithUnl::isNumber() const
-{
-    return true;
-}
-
-bool EDPIPropertyTypeUnsignedIntWithUnl::isValidValue(QString strValue) const
-{
-    int nId = getValueId(strValue);
-    if (nId >= 0)
-        return true;
-
-    int nValue = 0;
-    strstream str;
-    str << strValue.toStdString();
-    str >> nValue;
-    str >> ws;
-    if (str.eof() && nValue>=0)
-        return true;
-    return false;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-EDPIPropertyTypeList::EDPIPropertyTypeList()
-{
-}
-
-EDPIPropertyTypeList::~EDPIPropertyTypeList()
-{
-}
-
-bool EDPIPropertyTypeList::isNumber() const
-{
-    return false;
-}
-
-bool EDPIPropertyTypeList::hasEdit() const
-{
-    return false;
-}
-
-bool EDPIPropertyTypeList::hasPredefinedValues() const
-{
-    return true;
-}
-
-int EDPIPropertyTypeList::getValueNumber() const
-{
-    return m_arValues.size();
-}
-
-QString EDPIPropertyTypeList::getValue(int i) const
-{
-    return m_arValues[i];
-}
-
-bool EDPIPropertyTypeList::isValidValue(QString strValue) const
-{
-    return getValueId(strValue) >= 0;
-}
-
-
-void EDPIPropertyTypeList::addValue(QString strValue)
-{
-    m_arValues.append(strValue);
-}
-
-int	EDPIPropertyTypeList::getValueId(QString strValue) const
-{
-    int nValNum = getValueNumber();
-    for (int i=0; i<nValNum; i++) {
-        if (m_arValues[i].compare(strValue,Qt::CaseInsensitive) == 0)
-            return i;
-    }
-    return -1;
-}
-
-
-//////////////////////////////////////////////////////////////////////////////
-
-IMPLEMENT_GETINSTANCE(EDPIPropertyTypeListCSNodeTypes);
-
-EDPIPropertyTypeListCSNodeTypes::EDPIPropertyTypeListCSNodeTypes()
-{
-   addValue("Distance");
-   addValue("Repetition");
-   addValue("Interval");
-   addValue("Word");
-   addValue("Markup item");
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-IMPLEMENT_GETINSTANCE(EDPIPropertyTypeBool);
-
-EDPIPropertyTypeBool::EDPIPropertyTypeBool()
-{
-   addValue("False");
-   addValue("True");
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-IMPLEMENT_GETINSTANCE(EDPIPropertyTypeDistType);
-
-EDPIPropertyTypeDistType::EDPIPropertyTypeDistType()
-{
-   addValue("finish to start");
-   addValue("start to start");
-   addValue("middle to start");
-}
-
-////////////////////////////////////////////////////////////
-EDProjectItem::EDProjectItem():QTreeWidgetItem(), mInf(NULL){
-    setName("");
-    sortField = ED_FIELD_UNDEFINED;
-    sortOrd = ED_ORDER_DECREASING;
-}
-EDProjectItem::~EDProjectItem(){
-    clearGroups();
-}
-int	EDProjectItem::getGroupNumber() const{
-    return m_arGroups.size();
-}
-EDPIPropertyGroup& EDProjectItem::getGroup(int nGroup){
-    assert(nGroup >=0 && nGroup<getGroupNumber());
-    return m_arGroups[nGroup];
-}
-const EDPIPropertyGroup& EDProjectItem::getGroup(int nGroup) const{
-    assert(nGroup >=0 && nGroup<getGroupNumber());
-    return m_arGroups[nGroup];
-}
-int	EDProjectItem::addGroup(const EDPIPropertyGroup& rGroup){
-    m_arGroups.append(rGroup);
-    return m_arGroups.size();
-}
-void EDProjectItem::clearGroups(){
-    m_arGroups.clear();
-}
-EItemType EDProjectItem::getType() const{
-    return PIT_NONE;
-}
-
-const EDProjectItem* EDProjectItem::findItemConnectedTo(void *pData) const{
-    if (isConnectedTo(pData))
-        return this;
-
-    for (int i = 0; i < childCount(); i++){
-        EDProjectItem* item = dynamic_cast<EDProjectItem*>(child(i));
-        if(item){
-            const EDProjectItem* cItem = item->findItemConnectedTo(pData);
-            if(cItem){
-                return cItem;
-            }
-
-        }
-    }
-    return NULL;
-
-}
-
-bool EDProjectItem::operator<(const QTreeWidgetItem &other) const{
-    const EDProjectItem* pItem1 = dynamic_cast<const EDProjectItem*>(this);
-    const EDProjectItem* pItem2 = dynamic_cast<const EDProjectItem*>(&other);
-
-    if(!pItem2 || !pItem1){
-         return QTreeWidgetItem::operator<(other);
-    }
-    EItemType type1 = pItem1->getType();
-    EItemType type2 = pItem2->getType();
-
-    if(sortOrd == ED_ORDER_DECREASING){
-
-        if (type1 == PIT_CS && type2 == PIT_CS){
-            const EDProjectItem* pItem3;
-            pItem3 = pItem1;
-            pItem1 = pItem2;
-            pItem2 = pItem3;
-
-        }
-    }
-    if (type1 == PIT_CS && type2 == PIT_CS){
-        const Signal* pSnl1 = qobject_cast<const EDPICS *>(pItem1)->getSignal();
-        const Signal* pSnl2 = qobject_cast<const EDPICS *>(pItem2)->getSignal();
-        switch (sortField) {
-         case ED_FIELD_UNDEFINED: return QTreeWidgetItem::operator<(other);
-         case ED_FIELD_PROBABILITY: return (pSnl1->getPriorProbability()<pSnl2->getPriorProbability());
-         case ED_FIELD_COVERAGE: return (pSnl1->getPriorPosCoverage()<pSnl2->getPriorPosCoverage());
-         case ED_FIELD_FISHER: return (pSnl1->getPriorFisher()<pSnl2->getPriorFisher());
-         case ED_FIELD_NAME:
-         default: return pItem1->getName() < pItem2->getName();
-
-        }
-    }else if ( (type1 == PIT_CS_FOLDER || type1 == PIT_CS || type1 == PIT_MRK_ITEM) &&
-        (type2 == PIT_CS_FOLDER || type2 == PIT_CS || type2 == PIT_MRK_ITEM))
-    {
-        if ((int)type1 < (int)type2)
-            return false;
-        else
-            if ((int)type1 > (int)type2)
-                return true;
-            else
-                return pItem1->getName() < pItem2->getName();
-    }else{
-        const EDProjectItem *pParent = dynamic_cast<const EDProjectItem*>(dynamic_cast<const QTreeWidgetItem*>(pItem1)->parent());
-        if (pParent != NULL && pParent->getType() == PIT_CSN_DISTANCE) {
-            return (pParent->child(0) == pItem1) ? true : false;
-        }
-        else{
-            return QTreeWidgetItem::operator<(other);
-        }
-    }
-}
-/////////////////////////////////////////////////////////////////////////////////////
-
-EDPISequenceRoot::EDPISequenceRoot(ExpertDiscoveryData& edD)
-:edData(edD)
-{
-    update(true);
-}
-
-EDPISequenceRoot::~EDPISequenceRoot()
-{
-}
-
-EItemType EDPISequenceRoot::getType() const {
-    return PIT_SEQUENCEROOT;
-}
-
-void EDPISequenceRoot::update(bool bUpdateChildren)
-{
-    QString strName = "Sequences";
-    setName(strName);
-    clearGroups();
-
-    if (bUpdateChildren) {
-        takeChildren();
-
-        addChild(new EDPIPosSequenceBase(edData.getPosSeqBase(), edData));
-        addChild(new EDPINegSequenceBase(edData.getNegSeqBase(), edData));
-        //if (pDoc->GetControlSeqBase().getSize() != 0)
-            addChild(new EDPIControlSequenceBase(edData.getConSeqBase(), edData));
-    }
-}
-
-
-
-bool EDPISequenceRoot::isConnectedTo(void *pData) const
-{
-    return false;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////
-
-
-EDPISequenceBase::EDPISequenceBase(QString strName, const SequenceBase& rSeqBase, ExpertDiscoveryData& edD)
-: m_rSeqBase (rSeqBase)
-,edData(edD)
-{
-    //assert(strName != NULL);
-    setName(strName);
-    update(true);
-}
-
-void EDPISequenceBase::update(bool bUpdateChildren)
-{
-    clearGroups();
-    takeChildren();
-
-    int nSize = m_rSeqBase.getSize();
-
-    QString strSize = "Size";
-    QString strGenInfo = "General information";
-
-
-    EDPIProperty PropSize(strSize);
-    PropSize.setCallback(new Callback<const DDisc::SequenceBase, int>(&m_rSeqBase, &DDisc::SequenceBase::getSize));
-
-    EDPIPropertyGroup GenInfo(strGenInfo);
-    GenInfo.addProperty(PropSize);
-    addGroup(GenInfo);
-
-    if (bUpdateChildren) {
-        for (int id=0; id<nSize; id++)
-            addChild(new EDPISequence(m_rSeqBase, id, edData));
-    }
-}
-
-EDPISequenceBase::~EDPISequenceBase()
-{
-}
-
-const SequenceBase& EDPISequenceBase::getSequenceBase() const
-{
-    return m_rSeqBase;
-}
-
-bool EDPISequenceBase::isConnectedTo(void *pData) const
-{
-    return ((void*) &m_rSeqBase) == pData;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////
-
-EDPIPosSequenceBase::EDPIPosSequenceBase(const SequenceBase& rBase, ExpertDiscoveryData& edD)
-: EDPISequenceBase("", rBase, edD)
-{
-    QString strPosName = "Positive";
-    setName(strPosName);
-}
-
-EDPIPosSequenceBase::~EDPIPosSequenceBase()
-{
-}
-
-void EDPIPosSequenceBase::update(bool bUpdateChildren)
-{
-    EDPISequenceBase::update(bUpdateChildren);
-}
-
-EItemType EDPIPosSequenceBase::getType() const
-{
-    return PIT_POSSEQUENCEBASE;
-}
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-
-EDPINegSequenceBase::EDPINegSequenceBase(const SequenceBase& rBase, ExpertDiscoveryData& edD)
-: EDPISequenceBase("", rBase, edD)
-{
-    QString strNegName = "Negative";
-    setName(strNegName);
-}
-
-EDPINegSequenceBase::~EDPINegSequenceBase()
-{
-}
-
-void EDPINegSequenceBase::update(bool bUpdateChildren)
-{
-    EDPISequenceBase::update(bUpdateChildren);
-}
-
-EItemType EDPINegSequenceBase::getType() const
-{
-    return PIT_NEGSEQUENCEBASE;
-}
-
-/////////////////////////////////////////////////////////////////////////////////////
-
-EDPIControlSequenceBase::EDPIControlSequenceBase(const SequenceBase& rBase, ExpertDiscoveryData& edD)
-: EDPISequenceBase("", rBase, edD)
-{
-    QString strControlName = "Control";
-    setName(strControlName);
-    update(true);
-}
-
-EDPIControlSequenceBase::~EDPIControlSequenceBase()
-{
-}
-
-void EDPIControlSequenceBase::update(bool bUpdateChildren)
-{
-    clearGroups();
-
-    int nSize = m_rSeqBase.getSize();
-
-    QString strSize = "Size";
-    QString strGenInfo = "General information";
-
-    EDPIProperty PropSize(strSize);
-    PropSize.setCallback(new Callback<const DDisc::SequenceBase, int>(&m_rSeqBase, &DDisc::SequenceBase::getSize));
-    EDPIPropertyGroup GenInfo(strGenInfo);
-    GenInfo.addProperty(PropSize);
-    addGroup(GenInfo);
-
-    if (bUpdateChildren) {
-        takeChildren();
-        for (int id=0; id<nSize; id++)
-            addChild(new EDPIControlSequence(m_rSeqBase, id, edData));
-    }
-}
-
-EItemType EDPIControlSequenceBase::getType() const
-{
-    return PIT_CONTROLSEQUENCEBASE;
-}
-
-////////////////////////////////////////////////////////
-
-EDPISequence::EDPISequence(const SequenceBase& rSeqBase, int id, ExpertDiscoveryData& edD)
-: m_id (id)
-, m_rSeq (rSeqBase.getSequence(id))
-, m_firstCall(true)
-,edData(edD)
-{
-    assert(id>=0 && id<rSeqBase.getSize());
-    update(true);
-}
-
-void EDPISequence::update(bool bUpdateChildren)
-{
-    setName( m_rSeq.getName().c_str() );
-    clearGroups();
-    takeChildren();
-
-    QString strName = "Name";
-    QString strLength = "Length";
-    QString strGenInfo = "Sequence info";
-    QString strRecognizationInfo = "Sequence recogn. data";
-    QString strScore = "Score";
-    QString strBound = "Bound";
-    QString strRecResult = "Result";
-
-
-    EDPIProperty PropName(strName);
-    EDPIProperty PropSize(strLength);
-    PropName.setCallback(new Callback<const DDisc::Sequence, const std::string>(&m_rSeq, &DDisc::Sequence::getName));
-    PropSize.setCallback(new Callback<const DDisc::Sequence, size_t>(&m_rSeq, &DDisc::Sequence::getSize));
-    EDPIPropertyGroup GenInfo(strGenInfo);
-    GenInfo.addProperty(PropName);
-    GenInfo.addProperty(PropSize);
-    addGroup(GenInfo);
-
-    EDPIProperty PropScore(strScore);
-    PropScore.setCallback(new Callback<EDPISequence, QString>(this, &EDPISequence::getScore));
-    EDPIProperty PropBound(strBound);
-    PropBound.setCallback(new Callback<ExpertDiscoveryData, double>(&edData, &ExpertDiscoveryData::getRecognizationBound));
-    EDPIProperty PropResult(strRecResult);
-    PropResult.setCallback(new Callback<EDPISequence, QString>(this, &EDPISequence::getResult));
-    EDPIPropertyGroup RecInfo(strRecognizationInfo);
-    RecInfo.addProperty(PropScore);
-    RecInfo.addProperty(PropBound);
-    RecInfo.addProperty(PropResult);
-    addGroup(RecInfo);
-    //}
-}
-
-QString EDPISequence::getScore() const
-{
-    if (getType() == PIT_CONTROLSEQUENCE)
-        return "0";
-    if (m_rSeq.isHasScore() || edData.updateScore(const_cast<Sequence&>(m_rSeq)))
-        return toString(m_rSeq.getScore());
-    return "0";
-}
-
-QString EDPISequence::getResult() const
-{
-    if (getType() == PIT_CONTROLSEQUENCE)
-        return "False";
-
-    if ((m_rSeq.isHasScore() || edData.updateScore(const_cast<Sequence&>(m_rSeq))) &&
-        m_rSeq.getScore() >= edData.getRecognizationBound())
-        return "True";
-    else
-        return "False";
-}
-
-
-EDPISequence::~EDPISequence()
-{
-
-}
-
-EItemType EDPISequence::getType() const
-{
-    return PIT_SEQUENCE;
-}
-
-QString EDPISequence::getSequenceCode()
-{
-    return QString::fromStdString(m_rSeq.getSequence());
-}
-
-QString EDPISequence::getSequenceName()
-{
-    return QString::fromStdString(m_rSeq.getName());
-}
-
-bool EDPISequence::isConnectedTo(void *pData) const
-{
-    return ((void*) &m_rSeq) == pData;
-}
-////////////////////////////////////////////////////////////
-
-const CSFolder* EDPICSDirectory::getFolder() const{
-    return folder;
-}
-void EDPICSDirectory::setFolder(const CSFolder* pFolder){
-    folder = pFolder;
-}
-void EDPICSDirectory::update(bool bupdateChildren){
-    if (bupdateChildren) {
-        takeChildren();
-
-        const CSFolder* pFolder = getFolder();
-        int nSubfolderNum = pFolder->getFolderNumber();
-        for (int nSubfolder=0; nSubfolder<nSubfolderNum; nSubfolder++){
-            EDPICSFolder* nFol = new EDPICSFolder(pFolder->getSubfolder(nSubfolder));
-            addChild(dynamic_cast<EDProjectItem*>(nFol));
-        }
-
-
-        int nSignalNum = pFolder->getSignalNumber();
-        for (int nSignal=0; nSignal<nSignalNum; nSignal++){
-            EDPICS* nSig = new EDPICS( pFolder->getSignal(nSignal) );
-            addChild(dynamic_cast<EDProjectItem*>(nSig));
-        }
-
-    }
-}
-
-bool EDPICSDirectory::isConnectedTo(void *pData) const{
-    return ((void*) folder) == pData;
-}
-
-////////////////////////////////////////////////
-EDPICSFolder::EDPICSFolder(const CSFolder *pFolder)
-: EDPICSDirectory(pFolder){
-    update(true);
-}
-EDPICSFolder::~EDPICSFolder(){
-
-}
-EItemType EDPICSFolder::getType() const{
-    return PIT_CS_FOLDER;
-}
-void EDPICSFolder::update(bool bupdateChildren){
-    clearGroups();
-
-    QString strName = "Name";
-    QString strEditor = "Editor";
-
-    EDPIProperty propName(strName);
-    propName.setCallback(new Callback<const CSFolder, QString>(getFolder(), &CSFolder::getName));
-    propName.setType(EDPIPropertyTypeString::getInstance());
-
-    EDPIPropertyGroup editor(strEditor);
-    editor.addProperty(propName);
-    addGroup(editor);
-
-    EDPICSDirectory::update(bupdateChildren);
-}
-//virtual CExtPopupMenuWnd*	CreatePopupMenu(HWND hWndCmdRecieve) const;
-QString EDPICSFolder::getName() const{
-    return getFolder()->getName();
-}
-////////////////////////////////////////////////
-
-EDPICSRoot::EDPICSRoot(CSFolder& rootF)
-: EDPICSDirectory(NULL)
-{
-    setFolder(&rootF);
-    update(true);
-}
-
-void EDPICSRoot::update(bool bUpdateChildren)
-{
-    QString strCSRoot = "Complex signals";
-
-    setName(strCSRoot);
-    EDPICSDirectory::update(bUpdateChildren);
-}
-
-EDPICSRoot::~EDPICSRoot()
-{
-}
-
-EItemType EDPICSRoot::getType() const
-{
-    return PIT_CS_ROOT;
-}
-
-
-///////////////////////////////////////////////////
-
-EDPICSNode::EDPICSNode(Operation *pOp1)
-:pOp(pOp1)
-,m_pPS(NULL)
-{
-
-}
-EDPICSNode::~EDPICSNode(){
-    delete m_pPS;
-}
-Operation* EDPICSNode::getOperation(){
-   return pOp;
-}
-
-void EDPICSNode::setOperation(Operation *pOp){
-    this->pOp = pOp;
-}
-const Operation* EDPICSNode::getOperation() const{
-   return pOp;
-}
-void EDPICSNode::update(bool bupdateChildren){
-    delete m_pPS;
-    m_pPS = NULL;
-
-    if (pOp == NULL) {
-        setName("Undefined");
-    }
-    else  {
-        setName(QString::fromStdString(pOp->getDescription()));
-        if (bupdateChildren) {
-            takeChildren();
-            int nArgNum = pOp->getArgumentNumber();
-            for (int nArg=0; nArg<nArgNum; nArg++){
-                EDProjectItem* ch = dynamic_cast<EDProjectItem*>(EDPICSNode::createCSN(pOp->getArgument(nArg)));
-                emit si_getMetaInfoBase();
-                ch->setMetainfoBase(getMinfo());
-                addChild( ch );
-                if(ch->getType() != PIT_CSN_UNDEFINED){
-                    ch->update(true);
-                }
-                //addChild(dynamic_cast<EDProjectItem*>( EDPICSNode::createCSN( pOp->getArgument(nArg) )));
-            }
-        }
-    }
-}
-
-EDPICSNode* EDPICSNode::createCSN( Operation *pOp )
-{
-    if (pOp == NULL) return new EDPICSNUndefined();
-    switch (pOp->getType()) {
-    case OP_DISTANCE	:	return new EDPICSNDistance(dynamic_cast<OpDistance*>(pOp));
-    case OP_REITERATION	:	return new EDPICSNRepetition(dynamic_cast<OpReiteration*>(pOp));
-    case OP_INTERVAL	:	return new EDPICSNInterval(dynamic_cast<OpInterval*>(pOp));
-    case OP_TS			:
-        {
-            TS* pTS = dynamic_cast<TS*>(pOp);
-            if (!pTS->isFromMarking())
-                return new EDPICSNTSWord(pTS);
-            else{
-                return new EDPICSNTSMrkItem(pTS);
-            }
-        }
-    }
-    assert(0);
-    return NULL;
-}
-bool EDPICSNode::isConnectedTo(void *pData) const{
-    return ((void*) pOp) == pData;
-}
-const EDProcessedSignal* EDPICSNode::getProcessedSignal(ExpertDiscoveryData& edData){
-    if (m_pPS == NULL) {
-        m_pPS = EDProcessedSignal::processSignal(pOp, &edData.getPosSeqBase(), &edData.getNegSeqBase());
-        if (m_pPS != NULL) {
-            QString strGenInfo = "General information";
-
-            EDPIPropertyGroup GenInfo(strGenInfo);
-            EDPIProperty prob("Probability");
-            EDPIProperty posCoverage("Pos. coverage");
-            EDPIProperty negCoverage("Neg. coverage");
-            EDPIProperty fisher("Fisher");
-            //EDPIProperty ul("ul");
-
-            prob.setCallback(new Callback<EDPICSNode, QString>(this, &EDPICSNode::getProbability));
-            posCoverage.setCallback(new Callback<EDPICSNode, QString>(this, &EDPICSNode::getPosCoverage));
-            negCoverage.setCallback(new Callback<EDPICSNode, QString>(this, &EDPICSNode::getNegCoverage));
-            fisher.setCallback(new Callback<EDPICSNode, QString>(this, &EDPICSNode::getFisher));
-            //ul.setCallback(new Callback<EDPICSNode, QString>(this, &EDPICSNode::getUl));
-
-            GenInfo.addProperty(prob);
-            GenInfo.addProperty(posCoverage);
-            GenInfo.addProperty(negCoverage);
-            GenInfo.addProperty(fisher);
-//            GenInfo.addProperty(ul);
-            addGroup(GenInfo);
-        }
-    }
-    return m_pPS;
-}
-
-QString EDPICSNode::getProbability() const{
-    if (m_pPS)
-        return m_pPS->getPropertyValue("Probability");
-    return QString();
-}
-QString EDPICSNode::getFisher() const{
-    if (m_pPS)
-        return m_pPS->getPropertyValue("Fisher");
-    return QString();
-}
-QString EDPICSNode::getUl() const{
-    if (m_pPS)
-        return m_pPS->getPropertyValue("Ul");
-    return QString();
-}
-QString EDPICSNode::getPosCoverage() const{
-    if (m_pPS)
-        return m_pPS->getPropertyValue("Pos. coverage");
-    return QString();
-}
-QString EDPICSNode::getNegCoverage() const{
-    if (m_pPS)
-        return m_pPS->getPropertyValue("Neg. coverage");
-    return QString();
-}
-QString EDPICSNode::getTypeAsString() const{
-    QString str;
-    EDPIPropertyTypeList *pTList = EDPIPropertyTypeListCSNodeTypes::getInstance();
-    switch (getType()) {
-        case PIT_CSN_UNDEFINED: str = "Undefined"; break;
-        case PIT_CSN_DISTANCE:  str = pTList->getValue(EDPIPropertyTypeListCSNodeTypes::DISTANCE); break;
-        case PIT_CSN_REPETITION:str = pTList->getValue(EDPIPropertyTypeListCSNodeTypes::REPETITION); break;
-        case PIT_CSN_INTERVAL:  str = pTList->getValue(EDPIPropertyTypeListCSNodeTypes::INTERVAL); break;
-        case PIT_CSN_WORD:      str = pTList->getValue(EDPIPropertyTypeListCSNodeTypes::WORD); break;
-        case PIT_CSN_MRK_ITEM:  str = pTList->getValue(EDPIPropertyTypeListCSNodeTypes::MRK_ITEM); break;
-    }
-    return str;
-}
-
-EDPICS::EDPICS(const Signal *pSignal)
-: EDPICSNode(pSignal->getSignal())
-, m_pSignal(pSignal)
-{
-    update(true);
-}
-EDPICS::~EDPICS(){
-  pOp = NULL;
-}
-EItemType EDPICS::getType() const{
-    return PIT_CS;
-}
-const Signal* EDPICS::getSignal() const{
-    return m_pSignal;
-}
-
-void EDPICS::update(bool bupdateChildren){
-    clearGroups();
-
-    QString strName = "Name";
-    QString strEditor = "Editor";
-    QString strDescription = "Description";
-    QString strPriorParams = "Prior parameter";
-    QString strPriorProb = "Probability";
-    QString strPriorFisher = "Fisher criteria";
-    QString strPriorPosCoverage = "Pos. Coverage";
-    QString strPriorNegCoverage = "Neg. Coverage";
-
-
-    EDPIProperty PropName(strName);
-    PropName.setCallback(new Callback<const DDisc::Signal, const std::string>(m_pSignal, &DDisc::Signal::getName));
-    PropName.setType(EDPIPropertyTypeString::getInstance());
-
-    EDPIProperty PropDesc(strDescription);
-    PropDesc.setCallback(new Callback<const DDisc::Signal, const std::string>(m_pSignal, &DDisc::Signal::getDescription));
-    PropDesc.setType(EDPIPropertyTypeString::getInstance());
-
-    EDPIPropertyGroup Editor(strEditor);
-    Editor.addProperty(PropName);
-    Editor.addProperty(PropDesc);
-    addGroup(Editor);
-
-    EDPICSNode::update(false);
-    setName(m_pSignal->getName().c_str());
-
-//     if (m_pSignal->isPriorParamsDefined()) {
-//         EDPIProperty PropPriorProb(strPriorProb);
-//         PropPriorProb.setCallback(new Callback<EDPICS, QString>(this, &EDPICS::getPriorProbability));
-//         PropPriorProb.setType(EDPIPropertyTypeStaticString::getInstance());
-//
-//         EDPIProperty PropPriorPosCoverage(strPriorPosCoverage);
-//         PropPriorPosCoverage.setCallback(new Callback<EDPICS, QString>(this, &EDPICS::getPriorPosCoverage));
-//         PropPriorPosCoverage.setType(EDPIPropertyTypeStaticString::getInstance());
-//
-//         EDPIProperty PropPriorNegCoverage(strPriorNegCoverage);
-//         PropPriorNegCoverage.setCallback(new Callback<EDPICS, QString>(this, &EDPICS::getPriorNegCoverage));
-//         PropPriorNegCoverage.setType(EDPIPropertyTypeStaticString::getInstance());
-//
-//         EDPIProperty PropPriorFisher(strPriorFisher);
-//         PropPriorFisher.setCallback(new Callback<EDPICS, QString>(this, &EDPICS::getPriorFisher));
-//         PropPriorFisher.setType(EDPIPropertyTypeStaticString::getInstance());
-//
-//         EDPIPropertyGroup PriorParams(strPriorParams);
-//         PriorParams.addProperty(PropPriorProb);
-//         PriorParams.addProperty(PropPriorFisher);
-//         PriorParams.addProperty(PropPriorPosCoverage);
-//         PriorParams.addProperty(PropPriorNegCoverage);
-//        addGroup(PriorParams);
-//     }
-
-    if (bupdateChildren) {
-        takeChildren();
-        if (m_pSignal->getSignal() == NULL) {
-            addChild(dynamic_cast<EDProjectItem*>( new EDPICSNUndefined() ));
-        }
-        else {
-            EDProjectItem* ch = dynamic_cast<EDProjectItem*>(EDPICSNode::createCSN(m_pSignal->getSignal()));
-            emit si_getMetaInfoBase();
-            ch->setMetainfoBase(getMinfo());
-            addChild( ch );
-            ch->update(true);
-        }
-    }
-}
-bool EDPICS::isConnectedTo(void *pData) const{
-    return ((void*) m_pSignal) == pData;
-}
-//virtual CExtPopupMenuWnd*	CreatePopupMenu(HWND hWndCmdRecieve) const;
-//virtual bool isSelected() const;
-
-QString EDPICS::getPriorProbability() const{
-    QString str = "%1";
-    if (m_pSignal->getPriorProbability() != UNDEFINED_VALUE)
-        str = str.arg(m_pSignal->getPriorProbability());
-    else
-        str = "Undefined";
-    return str;
-}
-QString EDPICS::getPriorFisher() const{
-    QString str = "%1";
-    if (m_pSignal->getPriorFisher() != UNDEFINED_VALUE)
-        str = str.arg(m_pSignal->getPriorFisher());
-    else
-        str = "Undefined";
-    return str;
-}
-QString EDPICS::getPriorPosCoverage() const{
-    QString str = "%1";
-    if (m_pSignal->getPriorPosCoverage() != UNDEFINED_VALUE)
-        str = str.arg(m_pSignal->getPriorPosCoverage());
-    else
-        str = "Undefined";
-    return str;
-}
-QString EDPICS::getPriorNegCoverage() const{
-    QString str = "%1";
-    if (m_pSignal->getPriorNegCoverage() != UNDEFINED_VALUE)
-        str = str.arg(m_pSignal->getPriorNegCoverage());
-    else
-        str = "Undefined";
-    return str;
-}
-////////////////////////////////////////////////////////////
-
-EDPICSNUndefined::EDPICSNUndefined()
-: EDPICSNode(NULL)
-{
-    update(true);
-}
-
-
-void EDPICSNUndefined::update(bool bupdateChildren)
-{
-    QString strType = "Type";
-    QString strEditor = "Editor";
-
-
-    EDPIProperty PropType(strType);
-    PropType.setCallback(new Callback<EDPICSNode, QString>(this, &EDPICSNode::getTypeAsString));
-    PropType.setType(EDPIPropertyTypeListCSNodeTypes::getInstance());
-    EDPIPropertyGroup Editor(strEditor);
-    Editor.addProperty(PropType);
-   addGroup(Editor);
-
-    EDPICSNode::update(bupdateChildren);
-}
-
-EDPICSNUndefined::~EDPICSNUndefined()
-{
-}
-
-EItemType EDPICSNUndefined::getType() const
-{
-    return PIT_CSN_UNDEFINED;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-EDPICSNDistance::EDPICSNDistance(OpDistance *pOp)
-: EDPICSNode(pOp)
-{
-    update(true);
-}
-
-void EDPICSNDistance::update(bool bupdateChildren) {
-    clearGroups();
-
-    QString strType = "Type";
-    QString strFrom = "Distance from";
-    QString strTo = "Distance to";
-    QString strEditor = "Editor";
-    QString strOrder = "Order";
-    QString strDistanceType = "Distance type";
-
-
-    OpDistance* pOp = dynamic_cast<OpDistance*>(getOperation());
-    assert(pOp != NULL);
-
-    EDPIPropertyTypeList *pTList = EDPIPropertyTypeListCSNodeTypes::getInstance();
-    EDPIProperty PropType(strType);
-    PropType.setCallback(new Callback<EDPICSNode, QString>(this, &EDPICSNode::getTypeAsString));
-    PropType.setType(pTList);
-
-    EDPIProperty PropFrom(strFrom);
-    PropFrom.setCallback(new Callback<EDPICSNDistance, QString>(this, &EDPICSNDistance::getPropFrom));
-    PropFrom.setType(EDPIPropertyTypeUnsignedInt::getInstance());
-
-    EDPIProperty PropTo(strTo);
-    PropTo.setCallback(new Callback<EDPICSNDistance, QString>(this, &EDPICSNDistance::getPropTo));
-    PropTo.setType(EDPIPropertyTypeUnsignedIntWithUnl::getInstance());
-
-    EDPIProperty PropOrder(strOrder);
-    PropOrder.setType(EDPIPropertyTypeBool::getInstance());
-    PropOrder.setCallback(new Callback<EDPICSNDistance, QString>(this, &EDPICSNDistance::getPropOrder));
-
-    EDPIProperty PropDistType(strDistanceType);
-    PropDistType.setType(EDPIPropertyTypeDistType::getInstance());
-    PropDistType.setCallback(new Callback<EDPICSNDistance, QString>(this, &EDPICSNDistance::getPropDistType));
-
-    EDPIPropertyGroup Editor(strEditor);
-    Editor.addProperty(PropType);
-    Editor.addProperty(PropDistType);
-    Editor.addProperty(PropFrom);
-    Editor.addProperty(PropTo);
-    Editor.addProperty(PropOrder);
-   addGroup(Editor);
-
-    emit si_getMetaInfoBase();
-
-    EDPICSNode::update(bupdateChildren);
-}
-
-EDPICSNDistance::~EDPICSNDistance()
-{
-}
-
-EItemType EDPICSNDistance::getType() const
-{
-    return PIT_CSN_DISTANCE;
-}
-
-QString EDPICSNDistance::getPropDistType() const
-{
-    const OpDistance* pOp = dynamic_cast<const OpDistance*>(getOperation());
-    assert(pOp != NULL);
-    int nType = (int) pOp->getDistanceType();
-    return EDPIPropertyTypeDistType::getInstance()->getValue(nType);
-}
-
-QString EDPICSNDistance::getPropFrom() const
-{
-    const OpDistance* pOp = dynamic_cast<const OpDistance*>(getOperation());
-    assert(pOp != NULL);
-    return QString("%1").arg(pOp->getDistance().getFrom());
-}
-
-QString EDPICSNDistance::getPropTo() const
-{
-    const OpDistance* pOp = dynamic_cast<const OpDistance*>(getOperation());
-    assert(pOp != NULL);
-    int nTo = pOp->getDistance().getTo();
-    if (nTo == PINF)
-        return EDPIPropertyTypeUnsignedIntWithUnl::getInstance()->getValue(0);
-    else
-        return QString("%1").arg(nTo);
-}
-
-QString EDPICSNDistance::getPropOrder() const
-{
-    const OpDistance* pOp = dynamic_cast<const OpDistance*>(getOperation());
-    assert(pOp != NULL);
-    bool bOrder = pOp->isOrderImportant();
-    return EDPIPropertyTypeBool::getInstance()->getValue((!bOrder)?EDPIPropertyTypeBool::False : EDPIPropertyTypeBool::True);
-}
-
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-EDPICSNRepetition::EDPICSNRepetition(OpReiteration *pOp)
-: EDPICSNode(pOp)
-{
-    update(true);
-}
-
-void EDPICSNRepetition::update(bool bupdateChildren)
-{
-    clearGroups();
-
-    QString strType = "Type";
-    QString strCountFrom = "Count from";
-    QString strCountTo = "Count to";
-    QString strFrom = "Distance from";
-    QString strTo = "Distance to";
-    QString strEditor = "Editor";
-    QString strDistanceType = "Distance type";
-
-    OpReiteration* pOp = dynamic_cast<OpReiteration*>(getOperation());
-    assert(pOp != NULL);
-
-    EDPIPropertyTypeList *pTList = EDPIPropertyTypeListCSNodeTypes::getInstance();
-    EDPIProperty PropType(strType);
-    PropType.setCallback(new Callback<EDPICSNode, QString>(this, &EDPICSNode::getTypeAsString));
-    PropType.setType(pTList);
-
-    EDPIProperty PropFrom(strFrom);
-    PropFrom.setCallback(new Callback<EDPICSNRepetition, QString>(this, &EDPICSNRepetition::getPropFrom));
-    PropFrom.setType(EDPIPropertyTypeUnsignedInt::getInstance());
-
-    EDPIProperty PropTo(strTo);
-    PropTo.setCallback(new Callback<EDPICSNRepetition, QString>(this, &EDPICSNRepetition::getPropTo));
-    PropTo.setType(EDPIPropertyTypeUnsignedIntWithUnl::getInstance());
-
-    EDPIProperty PropDistType(strDistanceType);
-    PropDistType.setType(EDPIPropertyTypeDistType::getInstance());
-    PropDistType.setCallback(new Callback<EDPICSNRepetition, QString>(this, &EDPICSNRepetition::getPropDistType));
-    EDPIProperty PropCountFrom(strCountFrom);
-    PropCountFrom.setType(EDPIPropertyTypeUnsignedInt::getInstance());
-    PropCountFrom.setCallback(new Callback<EDPICSNRepetition, QString>(this, &EDPICSNRepetition::getCountFrom));
-
-    EDPIProperty PropCountTo(strCountTo);
-    PropCountTo.setType(EDPIPropertyTypeUnsignedInt::getInstance());
-    PropCountTo.setCallback(new Callback<EDPICSNRepetition, QString>(this, &EDPICSNRepetition::getCountTo));
-
-    EDPIPropertyGroup Editor(strEditor);
-    Editor.addProperty(PropType);
-    Editor.addProperty(PropCountFrom);
-    Editor.addProperty(PropCountTo);
-    Editor.addProperty(PropDistType);
-    Editor.addProperty(PropFrom);
-    Editor.addProperty(PropTo);
-   addGroup(Editor);
-
-   emit si_getMetaInfoBase();
-
-    EDPICSNode::update(bupdateChildren);
-}
-
-EDPICSNRepetition::~EDPICSNRepetition()
-{
-}
-
-EItemType EDPICSNRepetition::getType() const
-{
-    return PIT_CSN_REPETITION;
-}
-
-QString EDPICSNRepetition::getPropDistType() const
-{
-    const OpReiteration* pOp = dynamic_cast<const OpReiteration*>(getOperation());
-    assert(pOp != NULL);
-    int nType = (int) pOp->getDistanceType();
-    return EDPIPropertyTypeDistType::getInstance()->getValue(nType);
-}
-
-QString EDPICSNRepetition::getPropFrom() const
-{
-    const OpReiteration* pOp = dynamic_cast<const OpReiteration*>(getOperation());
-    assert(pOp != NULL);
-    return QString("%1").arg(pOp->getDistance().getFrom());
-}
-
-QString EDPICSNRepetition::getPropTo() const
-{
-    const OpReiteration* pOp = dynamic_cast<const OpReiteration*>(getOperation());
-    assert(pOp != NULL);
-    int nTo = pOp->getDistance().getTo();
-    if (nTo == PINF)
-        return EDPIPropertyTypeUnsignedIntWithUnl::getInstance()->getValue(0);
-    else
-        return QString("%1").arg(nTo);
-}
-
-QString EDPICSNRepetition::getCountFrom() const
-{
-    const OpReiteration* pOp = dynamic_cast<const OpReiteration*>(getOperation());
-    assert(pOp != NULL);
-    return QString("%1").arg(pOp->getCount().getFrom());
-}
-
-QString EDPICSNRepetition::getCountTo() const
-{
-    const OpReiteration* pOp = dynamic_cast<const OpReiteration*>(getOperation());
-    assert(pOp != NULL);
-    return QString("%1").arg(pOp->getCount().getTo());
-}
-
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-EDPICSNInterval::EDPICSNInterval(OpInterval *pOp)
-: EDPICSNode(pOp)
-{
-    update(true);
-}
-
-void EDPICSNInterval::update(bool bupdateChildren)
-{
-    clearGroups();
-
-    QString strType = "Type";
-    QString strFrom = "Distance from";
-    QString strTo = "Distance to";
-    QString strEditor = "Editor";
-
-    EDPIPropertyTypeList *pTList = EDPIPropertyTypeListCSNodeTypes::getInstance();
-    EDPIProperty PropType(strType);
-    PropType.setCallback(new Callback<EDPICSNode, QString>(this, &EDPICSNode::getTypeAsString));
-    PropType.setType(pTList);
-
-    EDPIProperty PropFrom(strFrom);
-    PropFrom.setCallback(new Callback<EDPICSNInterval, QString>(this, &EDPICSNInterval::getPropFrom));
-    PropFrom.setType(EDPIPropertyTypeUnsignedInt::getInstance());
-
-    EDPIProperty PropTo(strTo);
-    PropTo.setCallback(new Callback<EDPICSNInterval, QString>(this, &EDPICSNInterval::getPropTo));
-    PropTo.setType(EDPIPropertyTypeUnsignedIntWithUnl::getInstance());
-
-    EDPIPropertyGroup Editor(strEditor);
-    Editor.addProperty(PropType);
-    Editor.addProperty(PropFrom);
-    Editor.addProperty(PropTo);
-   addGroup(Editor);
-
-   emit si_getMetaInfoBase();
-
-    EDPICSNode::update(bupdateChildren);
-
-}
-
-EDPICSNInterval::~EDPICSNInterval()
-{
-}
-
-EItemType EDPICSNInterval::getType() const
-{
-    return PIT_CSN_INTERVAL;
-}
-
-QString EDPICSNInterval::getPropFrom() const
-{
-    const OpInterval* pOp = dynamic_cast<const OpInterval*>(getOperation());
-    assert(pOp != NULL);
-    return QString("%1").arg(pOp->getInt().getFrom());
-}
-
-QString EDPICSNInterval::getPropTo() const
-{
-    const OpInterval* pOp = dynamic_cast<const OpInterval*>(getOperation());
-    assert(pOp != NULL);
-    int nTo = pOp->getInt().getTo();
-    if (nTo == PINF)
-        return EDPIPropertyTypeUnsignedIntWithUnl::getInstance()->getValue(0);
-    else
-        return QString("%1").arg(nTo);
-}
-
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-EDPICSNTSWord::EDPICSNTSWord(TS *pTS)
-: EDPICSNode(pTS)
-{
-    update(true);
-}
-
-void EDPICSNTSWord::update(bool bupdateChildren)
-{
-    clearGroups();
-
-    QString strType = "Type";
-    QString strEditor = "Editor";
-    QString strWord = "Word";
-
-    EDPIPropertyTypeList *pTList = EDPIPropertyTypeListCSNodeTypes::getInstance();
-    EDPIProperty PropType(strType);
-    PropType.setCallback(new Callback<EDPICSNode, QString>(this, &EDPICSNode::getTypeAsString));
-    PropType.setType(pTList);
-
-    EDPIProperty PropWord(strWord);
-    PropWord.setType(EDPIPropertyTypeString::getInstance());
-    PropWord.setCallback(new Callback<EDPICSNTSWord, QString>(this, &EDPICSNTSWord::getPropWord));
-
-    EDPIPropertyGroup Editor(strEditor);
-    Editor.addProperty(PropType);
-    Editor.addProperty(PropWord);
-   addGroup(Editor);
-
-    EDPICSNode::update(bupdateChildren);
-}
-
-EDPICSNTSWord::~EDPICSNTSWord()
-{
-}
-
-EItemType EDPICSNTSWord::getType() const
-{
-    return PIT_CSN_WORD;
-}
-
-QString EDPICSNTSWord::getPropWord() const
-{
-    const TS *pTS = dynamic_cast<const TS*>(getOperation());
-    assert(pTS != NULL);
-    return pTS->getWord().c_str();
-}
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-EDPICSNTSMrkItem::EDPICSNTSMrkItem(TS *pTS)
-: EDPICSNode(pTS)
-{
-    update(true);
-}
-
-void EDPICSNTSMrkItem::update(bool bupdateChildren)
-{
-    clearGroups();
-
-    QString strType = "Type";
-    QString strEditor = "Editor";
-    QString strFamily = "Family";
-    QString strSignal = "Signal";
-
-    TS *pTS = dynamic_cast<TS*>(getOperation());
-
-    EDPIPropertyTypeList *pTList = EDPIPropertyTypeListCSNodeTypes::getInstance();
-    EDPIProperty PropType(strType);
-    PropType.setCallback(new Callback<EDPICSNode, QString>(this, &EDPICSNode::getTypeAsString));
-    PropType.setType(pTList);
-
-    emit si_getMetaInfoBase();
-
-    if(getMinfo()){
-
-        const MetaInfoBase& rDesc = *getMinfo();
-        EDPIPropertyTypeDynamicList *pTFamily = EDPIPropertyTypeDynamicList::getInstance();
-        int nFamilyNum = rDesc.getFamilyNumber();
-        for (int i=0; i<nFamilyNum; i++)
-            pTFamily->addValue(rDesc.getSignalFamily(i).getName().c_str());
-        EDPIProperty PropFamily(strFamily);
-        PropFamily.setType(pTFamily);
-        PropFamily.setCallback(new Callback<EDPICSNTSMrkItem, QString>(this, &EDPICSNTSMrkItem::getPropFamily));
-
-        EDPIPropertyTypeDynamicList *pTSignal = EDPIPropertyTypeDynamicList::getInstance();
-        try {
-            const Family& rFamily = rDesc.getSignalFamily(pTS->getFamily());
-            int nSigNum = rFamily.getSignalNumber();
-            for (int i=0;i<nSigNum; i++)
-                pTSignal->addValue(rFamily.getMetaInfo(i).getName().c_str());
-        }
-        catch (exception) {
-
-        }
-        EDPIProperty PropSignal(strSignal);
-        PropSignal.setType(pTSignal);
-        PropSignal.setCallback(new Callback<EDPICSNTSMrkItem, QString>(this, &EDPICSNTSMrkItem::getPropSignal));
-
-        EDPIPropertyGroup Editor(strEditor);
-        Editor.addProperty(PropType);
-        Editor.addProperty(PropFamily);
-        Editor.addProperty(PropSignal);
-        addGroup(Editor);
-    }
-
-    EDPICSNode::update(bupdateChildren);
-}
-
-EDPICSNTSMrkItem::~EDPICSNTSMrkItem()
-{
-}
-
-EItemType EDPICSNTSMrkItem::getType() const
-{
-    return PIT_CSN_MRK_ITEM;
-}
-
-QString EDPICSNTSMrkItem::getPropFamily() const
-{
-    const TS *pTS = dynamic_cast<const TS*>(getOperation());
-    return pTS->getFamily().c_str();
-}
-
-QString EDPICSNTSMrkItem::getPropSignal() const
-{
-    const TS *pTS = dynamic_cast<const TS*>(getOperation());
-    return pTS->getName().c_str();
-}
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-EDPIMrkRoot::EDPIMrkRoot()
-: EDProjectItem()
-{
-    update(true);
-}
-
-EDPIMrkRoot::~EDPIMrkRoot()
-{
-}
-
-EItemType EDPIMrkRoot::getType() const
-{
-    return PIT_MRK_ROOT;
-}
-
-void EDPIMrkRoot::update( bool bUpdateChildren)
-{
-    setName("Markup");
-}
-
-void EDPIMrkRoot::updMarkup(const ExpertDiscoveryData& d){
-     takeChildren();
-     const MetaInfoBase& rDesc = d.getDescriptionBase();
-     int nFamilyNum = rDesc.getFamilyNumber();
-     for (int i=0; i<nFamilyNum; i++){
-        addChild( new EDPIMrkFamily(rDesc.getSignalFamily(i)) );
-     }
-
-}
-
-bool EDPIMrkRoot::isConnectedTo(void *pData) const
-{
-    //return (pData == (void *)&GlobalgetDocument()->getDescriptionBase());
-    return NULL;
-}
-
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-EDPIMrkFamily::EDPIMrkFamily(const Family& rFamily)
-: EDProjectItem()
-, m_rFamily (rFamily)
-{
-    update(true);
-}
-
-EDPIMrkFamily::~EDPIMrkFamily()
-{
-}
-
-EItemType EDPIMrkFamily::getType() const
-{
-    return PIT_MRK_FAMILY;
-}
-
-void EDPIMrkFamily::update(bool bupdateChildren)
-{
-    QString strName =  m_rFamily.getName().c_str();
-    setName( strName );
-
-    if (bupdateChildren) {
-        takeChildren();
-        int nSigNum = m_rFamily.getSignalNumber();
-        for (int i=0; i<nSigNum; i++)
-            addChild(dynamic_cast<EDProjectItem*>( new EDPIMrkItem(strName, m_rFamily.getMetaInfo(i)) ));
-    }
-}
-
-bool EDPIMrkFamily::isConnectedTo(void *pData) const
-{
-    return (pData == (void *) &m_rFamily);
-}
-
-///////////////////////////////////////////////////////////////////////////////////////
-
-EDPIMrkItem::EDPIMrkItem(QString strFamilyName, const MetaInfo& rMetaInfo)
-: EDPICSNode(NULL)
-, m_rMetaInfo(rMetaInfo)
-{
-    TS* pTS = new TS;
-    pTS->setFromMarking(true);
-    pTS->setName(m_rMetaInfo.getName());
-    pTS->setFamily(strFamilyName.toStdString());
-    pOp = pTS;
-    update(true);
-    setName(m_rMetaInfo.getName().c_str());
-}
-
-EDPIMrkItem::~EDPIMrkItem()
-{
-    delete pOp;
-}
-
-EItemType EDPIMrkItem::getType() const
-{
-    return PIT_MRK_ITEM;
-}
-
-void EDPIMrkItem::update(bool bupdateChildren)
-{
-    setName( m_rMetaInfo.getName().c_str() );
-    EDPICSNode::update(true);
-}
-
-bool EDPIMrkItem::isConnectedTo(void *pData) const
-{
-    return (pData == (void *) &m_rMetaInfo);
-}
-
-} //namespace
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgets.h b/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgets.h
deleted file mode 100644
index d13d54e..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgets.h
+++ /dev/null
@@ -1,643 +0,0 @@
-#ifndef _U2_EXPERT_DIS_TREEWIDGETS_H_
-#define _U2_EXPERT_DIS_TREEWIDGETS_H_
-
-#include "DDisc/Signal.h"
-#include "DDisc/MetaInfo.h"
-//#include "ExpertDiscoveryCSUtil.h"
-#include "ExpertDiscoveryData.h"
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
-#include <QMenu>
-#include <QTreeWidget>
-
-namespace U2 {
-
-using namespace DDisc;
-
-
-
-inline QString toString(double v)
-{
-    QString str = "%1";
-    return str.arg(v);
-}
-
-inline QString toString(int v)
-{
-    QString str = "%1";
-    return str.arg(v);
-}
-inline QString toString(QString v)
-{
-    return v;
-}
-
-inline QString toString(std::string v)
-{
-    return QString::fromStdString(v);
-}
-
-inline QString toString(size_t v)
-{
-    return toString((int) v);
-}
-
-class ICallback {
-public:
-    virtual ~ICallback() {}
-    virtual QString call() = 0;
-    virtual ICallback* clone() = 0;
-};
-
-template<class T, class Result>
-class Callback : public ICallback{
-public:
-    typedef Result (T::*PFUNK)() const;
-    typedef PFUNK PCALLBACK;
-    Callback(T* object, PCALLBACK callback)
-    {
-        m_callback = callback;
-        m_object = object;
-    }
-    virtual ~Callback() {}
-    virtual QString call()
-    {
-        return toString((m_object->*m_callback)());
-    }
-    virtual ICallback* clone()
-    {
-        return new Callback<T, Result>(m_object, m_callback);
-    }
-
-private:
-    PCALLBACK m_callback;
-    T* m_object;
-};
-
-enum EItemType {
-    PIT_NONE,
-    PIT_SEQUENCEROOT,
-    PIT_POSSEQUENCEBASE,
-    PIT_NEGSEQUENCEBASE,
-    PIT_CONTROLSEQUENCEBASE,
-    PIT_SEQUENCE,
-    PIT_CONTROLSEQUENCE,
-    PIT_CS_ROOT,
-    PIT_CS_FOLDER,
-    PIT_CS,
-    PIT_CSN_UNDEFINED,
-    PIT_CSN_DISTANCE,
-    PIT_CSN_REPETITION,
-    PIT_CSN_INTERVAL,
-    PIT_CSN_WORD,
-    PIT_CSN_MRK_ITEM,
-    PIT_MRK_ROOT,
-    PIT_MRK_FAMILY,
-    PIT_MRK_ITEM,
-    PIT_WORK_ROOT,
-    PIT_WORK_RUNNING,
-    PIT_WORK_PAUSED
-};
-
-class EDPIPropertyType : public QObject
-{
-    Q_OBJECT
-public:
-    EDPIPropertyType();
-    virtual ~EDPIPropertyType();
-
-    virtual bool	isNumber() const = 0;
-    virtual bool	hasEdit() const = 0;
-    virtual bool	hasPredefinedValues() const = 0;
-    virtual int		getValueNumber() const = 0;
-    virtual QString	getValue(int i) const = 0;
-    virtual bool	isValidValue(QString strValue) const = 0;
-};
-
-class EDPIProperty : public QObject
-{
-    Q_OBJECT
-public:
-    EDPIProperty(const EDPIProperty& rProperty);
-    EDPIProperty(QString strName = "");
-    ~EDPIProperty();
-
-    EDPIProperty& operator =(const EDPIProperty&);
-    const EDPIPropertyType* getType() const;
-    void setType(EDPIPropertyType*);
-
-    QString getName() const;
-    void	setName(QString strName);
-    QString	getValue() const;
-    void setCallback(ICallback* pCallback);
-
-private:
-    QString m_strName;
-    EDPIPropertyType* m_pType;
-    ICallback* m_pCallback;
-};
-
-
-class EDPIPropertyGroup : public QObject
-{
-    Q_OBJECT
-public:
-    EDPIPropertyGroup(QString strName ="");
-    EDPIPropertyGroup(const EDPIPropertyGroup&);
-    ~EDPIPropertyGroup();
-    EDPIPropertyGroup& operator=(const EDPIPropertyGroup&);
-
-    QString getName() const;
-    void	setName(QString strName);
-
-    int					getPropertiesNumber() const;
-    EDPIProperty&		getProperty(int nProp);
-    const EDPIProperty&	getProperty(int nProp) const;
-    void				addProperty(EDPIProperty &rProperty);
-
-private:
-    QString m_strName;
-    QVector<EDPIProperty> m_arProperties;
-};
-///////////////////////////////////////////////////////////////////////
-#define DEFINE_GETINSTANCE(class_name) \
-public: inline static class_name* getInstance() { return &s_##class_name##Instance; } \
-    virtual void	Release() {}; \
-    virtual EDPIPropertyType* Clone() { return this;}; \
-private: static class_name s_##class_name##Instance;
-
-#define IMPLEMENT_GETINSTANCE(class_name) \
-    class_name class_name::s_##class_name##Instance;
-
-class EDPIPropertyTypeStaticString : public EDPIPropertyType
-{
-    DEFINE_GETINSTANCE(EDPIPropertyTypeStaticString)
-public:
-    EDPIPropertyTypeStaticString();
-    virtual ~EDPIPropertyTypeStaticString();
-
-    virtual bool	isNumber() const;
-    virtual bool	hasEdit() const;
-    virtual bool	hasPredefinedValues() const;
-    virtual int		getValueNumber() const;
-    virtual QString	getValue(int i) const;
-    virtual bool	isValidValue(QString strValue) const;
-};
-
-class EDPIPropertyTypeString : public EDPIPropertyTypeStaticString
-{
-    DEFINE_GETINSTANCE(EDPIPropertyTypeString)
-public:
-    EDPIPropertyTypeString();
-    virtual ~EDPIPropertyTypeString();
-    virtual bool	hasEdit() const;
-};
-
-
-class EDPIPropertyTypeUnsignedInt : public EDPIPropertyType
-{
-    DEFINE_GETINSTANCE(EDPIPropertyTypeUnsignedInt)
-public:
-    EDPIPropertyTypeUnsignedInt();
-    virtual ~EDPIPropertyTypeUnsignedInt();
-    virtual bool	isNumber() const;
-    virtual bool	hasEdit() const;
-    virtual bool	hasPredefinedValues() const;
-    virtual int		getValueNumber() const;
-    virtual QString	getValue(int i) const;
-    virtual bool	isValidValue(QString strValue) const;
-};
-
-class EDPIPropertyTypeList : public EDPIPropertyType
-{
-public:
-    EDPIPropertyTypeList();
-    EDPIPropertyTypeList(const EDPIPropertyTypeList& rList) { m_arValues.clear(); m_arValues = rList.m_arValues; }
-    virtual ~EDPIPropertyTypeList();
-    virtual bool	isNumber() const;
-    virtual bool	hasEdit() const;
-    virtual bool	hasPredefinedValues() const;
-    virtual int		getValueNumber() const;
-    virtual QString	getValue(int i) const;
-    virtual bool	isValidValue(QString strValue) const;
-    int		getValueId(QString strValue) const;
-protected:
-    void	addValue(QString strValue);
-
-private:
-    QStringList m_arValues;
-};
-
-class EDPIPropertyTypeDynamicList : public EDPIPropertyTypeList
-{
-public:
-    EDPIPropertyTypeDynamicList() {};
-    EDPIPropertyTypeDynamicList(const EDPIPropertyTypeDynamicList& rList) : EDPIPropertyTypeList(rList) {};
-    virtual ~EDPIPropertyTypeDynamicList() {};
-    void	addValue(QString strValue) {EDPIPropertyTypeList::addValue(strValue);};
-
-    inline static EDPIPropertyTypeDynamicList* getInstance() { return new EDPIPropertyTypeDynamicList(); }
-    virtual void Release() { delete this;}
-    virtual EDPIPropertyType* Clone() { return new EDPIPropertyTypeDynamicList(*this);}
-};
-
-class EDPIPropertyTypeListEdit : public EDPIPropertyTypeList
-{
-public:
-    EDPIPropertyTypeListEdit() : EDPIPropertyTypeList() {}
-    virtual ~EDPIPropertyTypeListEdit() {}
-    virtual bool	isNumber() const {return false;}
-    virtual bool	hasEdit() const {return true;}
-    virtual bool	isValidValue(QString strValue) const {return true;}
-};
-
-
-class EDPIPropertyTypeUnsignedIntWithUnl : public EDPIPropertyTypeListEdit
-{
-    DEFINE_GETINSTANCE(EDPIPropertyTypeUnsignedIntWithUnl)
-public:
-    EDPIPropertyTypeUnsignedIntWithUnl();
-    virtual ~EDPIPropertyTypeUnsignedIntWithUnl();
-    virtual bool	isNumber() const;
-    virtual bool	isValidValue(QString strValue) const;
-};
-
-
-class EDPIPropertyTypeListCSNodeTypes : public EDPIPropertyTypeList
-{
-    DEFINE_GETINSTANCE(EDPIPropertyTypeListCSNodeTypes);
-public:
-    enum {
-        DISTANCE,
-        REPETITION,
-        INTERVAL,
-        WORD,
-        MRK_ITEM
-    };
-    EDPIPropertyTypeListCSNodeTypes();
-};
-
-class EDPIPropertyTypeBool : public EDPIPropertyTypeList
-{
-    DEFINE_GETINSTANCE(EDPIPropertyTypeBool);
-public:
-    enum {
-        False,
-        True
-    };
-    EDPIPropertyTypeBool();
-};
-
-class EDPIPropertyTypeDistType : public EDPIPropertyTypeList
-{
-    DEFINE_GETINSTANCE(EDPIPropertyTypeDistType);
-public:
-    enum {
-        FINISH_TO_START,
-        START_TO_START,
-        MIDDLE_TO_START
-    };
-    EDPIPropertyTypeDistType();
-};
-////////////////////////////////////////////////////
-
-enum EDSortParameters{
-    ED_ORDER_INCREASING,
-    ED_ORDER_DECREASING,
-    ED_FIELD_NAME,
-    ED_FIELD_PROBABILITY,
-    ED_FIELD_FISHER,
-    ED_FIELD_COVERAGE,
-    ED_FIELD_UNDEFINED
-};
-
-class EDProjectItem : public QObject, public QTreeWidgetItem
-{
-Q_OBJECT
-public:
-    //CProjectItem(QTreeWidget * parent);
-
-
-    EDProjectItem();
-    virtual ~EDProjectItem();
-
-    virtual QString getName() const {return name;}
-    virtual void	setName(const QString& strName){ name = strName;}
-
-    int						getGroupNumber() const;
-    EDPIPropertyGroup&		getGroup(int nGroup);
-    const EDPIPropertyGroup&	getGroup(int nGroup) const;
-    int						addGroup(const EDPIPropertyGroup& rGroup);
-
-
-    virtual EItemType	getType() const;
-    virtual	void		update(bool bUpdateChildren) = 0;
-    virtual bool		isConnectedTo(void *pData) const = 0;
-    const EDProjectItem*	findItemConnectedTo(void *pData) const;
-
-    void setMetainfoBase(const MetaInfoBase* base){mInf = base;}
-    const MetaInfoBase* getMinfo(){return mInf;}
-
-    virtual bool operator<(const QTreeWidgetItem &other) const;
-    void setSortField(EDSortParameters par) {sortField = par;}
-    void setSortOrd(EDSortParameters par) {sortOrd = par;}
-
-
-private:
-    QString name;
-    EDSortParameters sortField;
-    EDSortParameters sortOrd;
-
-protected:
-    void clearGroups();
-
-private:
-    //mutable int					m_nArgNo;
-    //mutable HTREEITEM			m_hTreeItem;
-    QVector<EDPIPropertyGroup>	m_arGroups;
-    //CArray<CProjectItem*>		m_arSubitems;
-    const MetaInfoBase* mInf;
-
-signals:
-    void si_getMetaInfoBase();
-};
-class ExpertDiscoveryData;
-
-class EDPISequenceRoot : public EDProjectItem
-{
-public:
-    EDPISequenceRoot(ExpertDiscoveryData& edD);
-    virtual ~EDPISequenceRoot();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-    virtual bool isConnectedTo(void *pData) const;
-private:
-    ExpertDiscoveryData& edData;
-};
-
-class EDPISequenceBase : public EDProjectItem
-{
-public:
-    EDPISequenceBase(QString strName, const SequenceBase& , ExpertDiscoveryData& edD);
-    virtual ~EDPISequenceBase();
-    const SequenceBase& getSequenceBase() const;
-    virtual	void update(bool bUpdateChildren);
-    virtual bool isConnectedTo(void *pData) const;
-protected:
-    const SequenceBase& m_rSeqBase;
-    ExpertDiscoveryData& edData;
-};
-
-class EDPIPosSequenceBase : public EDPISequenceBase
-{
-public:
-    EDPIPosSequenceBase(const SequenceBase& rBase, ExpertDiscoveryData& edD);
-    virtual ~EDPIPosSequenceBase();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-};
-
-class EDPINegSequenceBase : public EDPISequenceBase
-{
-public:
-    EDPINegSequenceBase(const SequenceBase& rBase, ExpertDiscoveryData& edD);
-    virtual ~EDPINegSequenceBase();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-};
-
-class EDPIControlSequenceBase : public EDPISequenceBase
-{
-public:
-    EDPIControlSequenceBase(const SequenceBase& rBase, ExpertDiscoveryData& edD);
-    virtual ~EDPIControlSequenceBase();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-};
-
-class EDPISequence : public EDProjectItem
-{
-public:
-    EDPISequence(const SequenceBase&, int id, ExpertDiscoveryData& edD);
-    virtual ~EDPISequence();
-    virtual EItemType getType() const;
-    QString getSequenceCode();
-    QString getSequenceName();
-    virtual	void update(bool bUpdateChildren);
-    virtual bool isConnectedTo(void *pData) const;
-    QString getScore() const;
-    QString getResult() const;
-private:
-    ExpertDiscoveryData& edData;
-    int m_id;
-    bool m_firstCall;
-    const Sequence& m_rSeq;
-};
-
-class EDPIControlSequence : public EDPISequence
-{
-public:
-    EDPIControlSequence(const SequenceBase& base, int id, ExpertDiscoveryData& edD)
-        : EDPISequence(base, id, edD) {}
-    virtual ~EDPIControlSequence() {}
-    virtual EItemType getType() const { return PIT_CONTROLSEQUENCE; }
-};
-
-class EDPICSDirectory : public EDProjectItem
-{
-    Q_OBJECT
-public:
-    EDPICSDirectory(const CSFolder* pFolder) : folder (pFolder)  {}
-    virtual ~EDPICSDirectory() {}
-    const CSFolder* getFolder() const;
-    void setFolder(const CSFolder* pFolder);
-    virtual	void update(bool bUpdateChildren);
-    virtual bool isConnectedTo(void *pData) const;
-private:
-    const CSFolder* folder;
-
-};
-
-class EDPICSFolder : public EDPICSDirectory
-{
-public:
-    EDPICSFolder(const CSFolder *pFolder);
-    virtual ~EDPICSFolder();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-    //virtual CExtPopupMenuWnd*	CreatePopupMenu(HWND hWndCmdRecieve) const;
-    virtual QString getName() const;
-};
-class EDPICSNode : public EDProjectItem
-{
-public:
-    EDPICSNode(Operation *pOp);
-    virtual ~EDPICSNode();
-    Operation* getOperation();
-    void setOperation(Operation *pOp);
-    const Operation* getOperation() const;
-    virtual	void update(bool bUpdateChildren);
-
-    static EDPICSNode* createCSN(Operation *pOp);
-    virtual bool isConnectedTo(void *pData) const;
-    const EDProcessedSignal* getProcessedSignal(ExpertDiscoveryData& edData);
-
-    QString getProbability() const;
-    QString getFisher() const;
-    QString getUl() const;
-    QString getPosCoverage() const;
-    QString getNegCoverage() const;
-    QString getTypeAsString() const;
-protected:
-    Operation* pOp;
-    EDProcessedSignal* m_pPS;
-};
-
-class EDPICSRoot : public EDPICSDirectory
-{
-public:
-    EDPICSRoot(CSFolder &root);
-    virtual ~EDPICSRoot();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-};
-
-class EDPICS : public EDPICSNode
-{
-    Q_OBJECT
-public:
-    EDPICS(const Signal *pSignal);
-    virtual ~EDPICS();
-    EItemType getType() const;
-    const Signal* getSignal() const;
-    virtual	void update(bool bUpdateChildren);
-    virtual bool isConnectedTo(void *pData) const;
-    //virtual CExtPopupMenuWnd*	CreatePopupMenu(HWND hWndCmdRecieve) const;
-    //virtual bool IsSelected() const;
-
-    QString getPriorProbability() const;
-    QString getPriorFisher() const;
-    QString getPriorPosCoverage() const;
-    QString getPriorNegCoverage() const;
-private:
-    const Signal *m_pSignal;
-};
-
-class EDPICSNUndefined : public EDPICSNode
-{
-public:
-    EDPICSNUndefined();
-    virtual ~EDPICSNUndefined();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-};
-
-class EDPICSNDistance : public EDPICSNode
-{
-public:
-    EDPICSNDistance(OpDistance *pOp);
-    virtual ~EDPICSNDistance();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-
-    QString getPropDistType() const;
-    QString getPropFrom() const;
-    QString getPropTo() const;
-    QString getPropOrder() const;
-};
-
-
-class EDPICSNRepetition : public EDPICSNode
-{
-public:
-    EDPICSNRepetition(OpReiteration *pOp);
-    virtual ~EDPICSNRepetition();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-    QString getPropDistType() const;
-    QString getPropFrom() const;
-    QString getPropTo() const;
-    QString getCountFrom() const;
-    QString getCountTo() const;
-};
-
-class EDPICSNInterval : public EDPICSNode
-{
-public:
-    EDPICSNInterval(OpInterval *pOp);
-    virtual ~EDPICSNInterval();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-    QString getPropFrom() const;
-    QString getPropTo() const;
-};
-
-class EDPICSNTSWord : public EDPICSNode
-{
-public:
-    EDPICSNTSWord(TS *pTS);
-    virtual ~EDPICSNTSWord();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-    QString getPropWord() const;
-};
-
-class EDPICSNTSMrkItem : public EDPICSNode
-{
-public:
-    EDPICSNTSMrkItem(TS *pTS);
-    virtual ~EDPICSNTSMrkItem();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-    QString getPropFamily() const;
-    QString getPropSignal() const;
-};
-
-
-class EDPIMrkRoot : public EDProjectItem
-{
-public:
-    EDPIMrkRoot();
-    virtual ~EDPIMrkRoot();
-    EItemType getType() const;
-    virtual void update(bool bUpdateChildren);
-    void updMarkup(const ExpertDiscoveryData& d);
-    virtual bool isConnectedTo(void *pData) const;
-    //virtual CExtPopupMenuWnd*	CreatePopupMenu(HWND hWndCmdRecieve) const;
-};
-
-class EDPIMrkFamily : public EDProjectItem
-{
-public:
-    EDPIMrkFamily(const DDisc::Family& rFamily);
-    virtual ~EDPIMrkFamily();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-    virtual bool isConnectedTo(void *pData) const;
-
-private:
-    const DDisc::Family& m_rFamily;
-};
-
-class EDPIMrkItem : public EDPICSNode
-{
-public:
-    EDPIMrkItem(QString strFamilyName, const MetaInfo& rMetaInfo);
-    virtual ~EDPIMrkItem();
-    EItemType getType() const;
-    virtual	void update(bool bUpdateChildren);
-    virtual bool isConnectedTo(void *pData) const;
-
-private:
-    const MetaInfo& m_rMetaInfo;
-};
-
-
-
-} //namespace
-
-#endif
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgetsCtrl.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgetsCtrl.cpp
deleted file mode 100644
index 41e6836..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgetsCtrl.cpp
+++ /dev/null
@@ -1,1223 +0,0 @@
-/**
- * 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 <QMouseEvent>
-#include <QStandardItemModel>
-#include <QMessageBox>
-
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Core/QObjectScopedPointer.h>
-
-#include "ExpertDiscoveryTreeWidgetsCtrl.h"
-#include "ExpertDiscoveryTask.h"
-
-namespace U2 {
-
-EDProjectTree::EDProjectTree(QWidget *parent, ExpertDiscoveryData &d)
-:QTreeWidget(parent)
-,edData(d)
-,root(edData.getRootFolder())
-,seqRoot(d)
-,sortField(ED_FIELD_PROBABILITY)
-,sortOrd(ED_ORDER_DECREASING)
-,updatingItem(false)
-{
-    createPopupsAndActions();
-    updateTree(ED_UPDATE_ALL);
-}
-
-EDProjectItem* EDProjectTree::findEDItem(void* pData){
-    return const_cast<EDProjectItem*>(root.findItemConnectedTo(pData));
-}
-
-CSFolder* EDProjectTree::findFolder(EDPICSDirectory *pFolder) const
-{
-    return const_cast<CSFolder*>(pFolder->getFolder());
-}
-
-Signal*EDProjectTree::findSignal(const Signal* pSignal) const
-{
-    return const_cast<Signal*>(pSignal);
-}
-
-void EDProjectTree::addSubitem(EDProjectItem* subItem, EDProjectItem* parent){
-
-    parent->addChild(subItem);
-    updateTree(ED_ITEM_ADDED, subItem);
-}
-
-void EDProjectTree::updateTree(int flag, EDProjectItem* item){
-    switch (flag) {
-    case ED_UPDATE_ALL                :    remake();            break;
-    case ED_ITEM_NAME_CHANGED        :    updateItem(item);    break;
-    case ED_ITEM_STATE_CHANGED        :    updateItemState(item);    break;
-    case ED_ITEM_ADDED                :    internalRemake(item, dynamic_cast<EDProjectItem*>(dynamic_cast<QTreeWidgetItem*>(item)->parent()));    break;
-    case ED_ITEM_DELETED            :    /*deleteItem(pItem);*/  break;
-    case ED_CURRENT_ITEM_CHANGED    :    setCurrentItem(item); emit si_changeProp(item); break;
-    case ED_UPDATE_CHILDREN            :    updateChildren(item); break;
-    case ED_MRK_UPDATE              :   updateMarkup(); break;
-    };
-}
-
-void EDProjectTree::remake(){
-
-    addTopLevelItem(&seqRoot);
-    seqRoot.setText(0,"Sequences");
-    seqRoot.setIcon(0,QIcon(":expert_discovery/images/sequences.png"));
-    seqRoot.setExpanded(true);
-    seqRoot.update(true);
-    for (int i = 0; i < seqRoot.childCount(); i++){
-        EDProjectItem* item = dynamic_cast<EDProjectItem*>(seqRoot.child(i));
-        if(item){
-            internalRemake(item, &seqRoot);
-        }
-    }
-
-    addTopLevelItem(&mrkRoot);
-    mrkRoot.setText(0,"Markup");
-    mrkRoot.setIcon(0,QIcon(":expert_discovery/images/mrkroot.png"));
-    mrkRoot.updMarkup(edData);
-    for (int i = 0; i < mrkRoot.childCount(); i++){
-        EDProjectItem* item = dynamic_cast<EDProjectItem*>(mrkRoot.child(i));
-        if(item){
-            internalRemake(item, &mrkRoot);
-        }
-    }
-
-    addTopLevelItem(&root);
-    root.setText(0,"Complex signals");
-    root.setIcon(0,QIcon(":expert_discovery/images/csroot.png"));
-    root.update(true);
-    for (int i = 0; i < root.childCount(); i++){
-        EDProjectItem* item = dynamic_cast<EDProjectItem*>(root.child(i));
-        if(item){
-            internalRemake(item, &root);
-        }
-    }
-}
-
-void EDProjectTree::clearTree(){
-   root.takeChildren();
-   mrkRoot.takeChildren();
-}
-
-void EDProjectTree::internalRemake(EDProjectItem* subItem, EDProjectItem* parent){
-
-    subItem->setText(0, subItem->getName());
-    subItem->setIcon(0, getItemIcon(subItem));
-    subItem->setSortOrd(sortOrd);
-    subItem->setSortField(sortField);
-
-    for(int i = 0; i < subItem->childCount(); i++){
-        EDProjectItem* item = dynamic_cast<EDProjectItem*>(subItem->child(i));
-        if (item){
-            connect(item, SIGNAL(si_getMetaInfoBase()), SLOT(sl_setMetainfoBase()));
-            internalRemake(item, subItem);
-        }
-
-    }
-    subItem->sortChildren(0, Qt::AscendingOrder);
-    updateItemState(subItem);
-
-}
-
-void EDProjectTree::updateItem(EDProjectItem* pItem){
-    pItem->setText(0, pItem->getName());
-    pItem->setIcon(0, getItemIcon(pItem));
-
-    QFont curFont = pItem->font(0);
-    if (edData.isSignalSelected(pItem))
-        curFont.setBold(true);
-    else
-        curFont.setBold(false);
-
-    EDPISequence* seq = dynamic_cast<EDPISequence*>(pItem);
-    if(seq){
-        if(edData.isSequenceSelected(seq)){
-            curFont.setBold(true);
-        }
-        else{
-            curFont.setBold(false);
-        }
-    }
-
-    pItem->setFont(0, curFont);
-
-
-}
-void EDProjectTree::updateItemState(EDProjectItem *pItem){
-    QFont curFont = pItem->font(0);
-    if (edData.isSignalSelected(pItem))
-        curFont.setBold(true);
-    else
-        curFont.setBold(false);
-
-    pItem->setFont(0, curFont);
-}
-
-
-void EDProjectTree::updateChildren(EDProjectItem* pItem){
-
-    for (int i=0; i<pItem->childCount(); i++){
-        EDProjectItem* ch = dynamic_cast<EDProjectItem*>(pItem->child(i));
-        internalRemake(ch, pItem);
-
-    }
-    pItem->sortChildren(0, Qt::AscendingOrder);
-}
-
-void EDProjectTree::updateMarkup(){
-    mrkRoot.updMarkup(edData);
-    for (int i = 0; i < mrkRoot.childCount(); i++){
-        EDProjectItem* item = dynamic_cast<EDProjectItem*>(mrkRoot.child(i));
-        if(item){
-            internalRemake(item, &mrkRoot);
-        }
-    }
-}
-
-void EDProjectTree::updateSequenceBase(EItemType type){
-    if(type == PIT_SEQUENCEROOT){
-        seqRoot.update(true);
-        for (int i = 0; i < seqRoot.childCount(); i++){
-            EDProjectItem* item = dynamic_cast<EDProjectItem*>(seqRoot.child(i));
-            if(item){
-                    item->update(true);
-                    internalRemake(item, &seqRoot);
-            }
-        }
-    }else{
-        for (int i = 0; i < seqRoot.childCount(); i++){
-            EDProjectItem* item = dynamic_cast<EDProjectItem*>(seqRoot.child(i));
-            if(item){
-                if(item->getType() == type){
-                    item->update(true);
-                    internalRemake(item, &seqRoot);
-                }
-            }
-        }
-    }
-}
-
-void EDProjectTree::sl_propChanged(EDProjectItem* item, const EDPIProperty* prop, QString newVal){
-    switch (item->getType()) {
-        case PIT_CS_FOLDER:
-            if (prop->getName().compare("Name", Qt::CaseInsensitive) == 0) {
-                EDPICSDirectory* pPI = dynamic_cast<EDPICSDirectory*>(item);
-                CSFolder* pFolder = findFolder(pPI);
-                const CSFolder* pParentFolder = pFolder->getParentFolder();
-                int nIndex = pParentFolder->getFolderIndexByName(newVal);
-                if (nIndex>=0) {
-                    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Rename error"), tr("Folder already exist"));
-                    mb->exec();
-                    return;
-                }
-                pFolder->setName(newVal);
-                updateTree(ED_ITEM_NAME_CHANGED, qobject_cast<EDProjectItem *>(pPI));
-                updateTree(ED_CURRENT_ITEM_CHANGED, qobject_cast<EDProjectItem *>(pPI));
-            }
-            return;
-        case PIT_CS:{
-           //updatingItem = true;
-           EDPICS *pPI = dynamic_cast<EDPICS*>(item);
-           EDPICSDirectory *pParent = dynamic_cast<EDPICSDirectory*>(dynamic_cast<QTreeWidgetItem*>(pPI)->parent());
-           assert(pPI != NULL);
-            assert(pParent != NULL);
-
-            Signal *pSignal = findSignal(pPI->getSignal());
-
-            QString strName = "Name";
-            QString strDescription = "Description";
-
-            QString strPropName = prop->getName();
-            if (strPropName.compare(strName, Qt::CaseInsensitive)==0)
-            {
-                CSFolder* pFolder = findFolder(pParent);
-                int nIndex = pFolder->getSignalIndexByName(newVal);
-                if (nIndex >= 0) {
-                    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Question, tr("Signal rename"), tr("Signal with the same name already exist. Replace?"), QMessageBox::Ok|QMessageBox::Cancel);
-                    mb->exec();
-                    CHECK(!mb.isNull(), );
-
-                    if (mb->result() == QMessageBox::Ok)
-                        pFolder->deleteSignal(nIndex);
-                    else
-                        return;
-                }
-                pSignal->setName(newVal.toStdString());
-            }
-            else
-                if (strPropName.compare(strDescription, Qt::CaseInsensitive) == 0)
-                {
-                    pSignal->setDescription(newVal.toStdString());
-                }
-                else assert(0);
-            pParent->update(true);
-           // updatingItem = false;
-            EDProjectItem* pCurItem = const_cast<EDProjectItem*>(pParent->findItemConnectedTo(pSignal));
-            updateTree(ED_UPDATE_CHILDREN, qobject_cast<EDProjectItem *>(pParent));
-            updateTree(ED_CURRENT_ITEM_CHANGED, pCurItem);
-            return;
-                    }
-        case PIT_CSN_UNDEFINED:
-        case PIT_CSN_DISTANCE:
-        case PIT_CSN_REPETITION:
-        case PIT_CSN_INTERVAL:
-        case PIT_CSN_WORD:
-        case PIT_CSN_MRK_ITEM:
-            onCSNPropertyChanged(item, prop, newVal);
-        return;
-    }
-}
-
-void EDProjectTree::mousePressEvent(QMouseEvent *e){
-    if(e->button() == Qt::RightButton){
-        QTreeWidgetItem* curItem = itemAt(e->pos());
-        setCurrentItem(curItem, 0);
-        EDProjectItem* projItem = dynamic_cast<EDProjectItem*>(curItem);
-        if(projItem){
-            QMenu* curMenu = chosePopupMen(projItem);
-            if(curMenu){
-                curMenu->popup(e->globalPos());
-            }
-        }
-    }
-    QTreeWidget::mousePressEvent(e);
-}
-
-void EDProjectTree::mouseDoubleClickEvent(QMouseEvent *e){
-
-    QTreeWidgetItem* curItem = itemAt(e->pos());
-    setCurrentItem(curItem, 0);
-
-    sl_addToShown();
-
-    QTreeWidget::mouseDoubleClickEvent(e);
-}
-
-QMenu* EDProjectTree::chosePopupMen(EDProjectItem* pItem){
-    if(pItem->getType() == PIT_CS){
-        EDPICS* pItem = dynamic_cast<EDPICS*>(currentItem());
-        if(pItem){
-            if(!edData.isSignalSelected(pItem)){
-                selDeselSigAction->setText(tr("Select signal"));
-            }else{
-                selDeselSigAction->setText(tr("Deselect signal"));
-            }
-            setCurPriorAction->setEnabled(pItem->getProcessedSignal(edData) != NULL);
-            clearCurPriorAction->setEnabled(pItem->getSignal()->isPriorParamsDefined() && !edData.isSignalSelected(pItem));
-        }else{
-            selDeselSigAction->setText(tr("Select/deselect signal"));
-            setCurPriorAction->setEnabled(true);
-            clearCurPriorAction->setEnabled(true);
-        }
-        return popupMenuCS;
-    }else if(pItem->getType() == PIT_CS_FOLDER){
-        EDPICSDirectory* piDir = dynamic_cast<EDPICSDirectory*>(pItem);
-        if(!piDir){
-            return NULL;
-        }
-        return popupMenuDir;
-
-    }else if (pItem->getType() == PIT_CS_ROOT){
-        return popupMenuDirRoot;
-    }else if(pItem->getType() == PIT_MRK_ROOT){
-        markupLettersAction->setEnabled(!edData.isLettersMarkedUp() && (edData.getNegSeqBase().getSize() > 0) && (edData.getPosSeqBase().getSize() > 0) );
-        loadMarkupAction->setEnabled(edData.getPosSeqBase().getSize() > 0 && edData.getNegSeqBase().getSize() > 0);
-        return popupMenuMrkRoot;
-    }else if(pItem->getType() == PIT_SEQUENCE || pItem->getType() == PIT_CONTROLSEQUENCE){
-        return popupMenuSequence;
-    }else if(pItem->getType() == PIT_POSSEQUENCEBASE || pItem->getType() == PIT_NEGSEQUENCEBASE || pItem->getType() == PIT_CONTROLSEQUENCEBASE){
-        EDPISequenceBase* pBaseItem = dynamic_cast<EDPISequenceBase*>(pItem);
-        if (!pBaseItem)
-        {
-            return NULL;
-        }
-        generateReportAction->setEnabled(pBaseItem->getSequenceBase().getSize() != 0);
-        exportToSequencesAction->setEnabled(pBaseItem->getSequenceBase().getSize() != 0);
-        showFirstSequencesAction->setEnabled(pBaseItem->getSequenceBase().getSize() != 0);
-        return popupMenuSequenceBase;
-    }
-    return NULL;
-
-}
-
-QIcon EDProjectTree::getItemIcon(EDProjectItem* pItem){
-    EItemType iType = pItem->getType();
-
-    switch (iType)
-    {
-        case PIT_SEQUENCEROOT: return QIcon(":expert_discovery/images/sequences.png");
-        case PIT_POSSEQUENCEBASE: return QIcon(":expert_discovery/images/posseq.png");
-        case PIT_NEGSEQUENCEBASE: return QIcon(":expert_discovery/images/negseq.png");
-        case PIT_CONTROLSEQUENCEBASE: return QIcon(":expert_discovery/images/control.png");
-        case PIT_SEQUENCE: return QIcon(":expert_discovery/images/sequence.png");
-        case PIT_CONTROLSEQUENCE: return QIcon(":expert_discovery/images/sequence.png");
-        case PIT_CS_ROOT: return QIcon(":expert_discovery/images/csroot.png");
-        case PIT_CS_FOLDER: return QIcon(":expert_discovery/images/folder.png");
-        case PIT_CS: return QIcon(":expert_discovery/images/cs.png");
-        case PIT_CSN_UNDEFINED: return QIcon(":expert_discovery/images/undefined.png");
-        case PIT_CSN_DISTANCE: return QIcon(":expert_discovery/images/distance.png");
-        case PIT_CSN_REPETITION: return QIcon(":expert_discovery/images/repetition.png");
-        case PIT_CSN_INTERVAL: return QIcon(":expert_discovery/images/interval.png");
-        case PIT_CSN_MRK_ITEM: return QIcon(":expert_discovery/images/ts.png");
-        case PIT_MRK_ITEM: return QIcon(":expert_discovery/images/ts.png");
-        case PIT_CSN_WORD: return QIcon(":expert_discovery/images/ts.png");
-        case PIT_MRK_ROOT: return QIcon(":expert_discovery/images/mrkroot.png");
-        case PIT_MRK_FAMILY: return QIcon(":expert_discovery/images/folder.png");
-        default: return QIcon();
-    }
-
-    return QIcon();
-}
-
-void EDProjectTree::createPopupsAndActions(){
-    newFolderAction = new QAction(tr("New folder"), this);
-    connect(newFolderAction, SIGNAL(triggered(bool)), SLOT(sl_newFolder()));
-
-    newSignalAction= new QAction(tr("New signal"), this);
-    connect(newSignalAction, SIGNAL(triggered(bool)), SLOT(sl_newSignal()));
-
-    deletePIAction = new QAction(tr("Delete"), this);
-    connect(deletePIAction, SIGNAL(triggered(bool)), SLOT(sl_deletePI()));
-
-    selAllSigAction = new QAction(tr("Select all signals"), this);
-    connect(selAllSigAction, SIGNAL(triggered(bool)), SLOT(sl_selAllSig()));
-
-    deselAllSigAction = new QAction(tr("Deselect all signals"), this);
-    connect(deselAllSigAction, SIGNAL(triggered(bool)), SLOT(sl_deselAllSig()));
-
-    setPriorAllSigAction = new QAction(tr("Set prior parameters of all signals"), this);
-    connect(setPriorAllSigAction, SIGNAL(triggered(bool)), SLOT(sl_setPriorAllSig()));
-
-    clearPriorAllSigAction = new QAction(tr("Clear prior parameters of all signals"), this);
-    connect(clearPriorAllSigAction, SIGNAL(triggered(bool)), SLOT(sl_clearPriorAllSig()));
-
-    addSignalToMarkupAction = new QAction(tr("Add signal to markup"), this);
-    connect(addSignalToMarkupAction, SIGNAL(triggered(bool)), SLOT(sl_addSignalToMarkup()));
-
-    selDeselSigAction = new QAction(tr("Select/deselect signal"), this);
-    connect(selDeselSigAction, SIGNAL(triggered(bool)), SLOT(sl_selDeselSig()));
-
-    setCurPriorAction = new QAction(tr("Set current params as prior"), this);
-    connect(setCurPriorAction, SIGNAL(triggered(bool)), SLOT(sl_setCurPrior()));
-
-    clearCurPriorAction = new QAction(tr("Clear prior params"), this);
-    connect(clearCurPriorAction, SIGNAL(triggered(bool)), SLOT(sl_clearCurPrior()));
-
-    markupLettersAction = new QAction(tr("Markup letters"), this);
-    connect(markupLettersAction, SIGNAL(triggered(bool)), SLOT(sl_markupLetters()));
-
-    loadMarkupAction = new QAction(tr("Load markup"), this);
-    connect(loadMarkupAction, SIGNAL(triggered(bool)), SLOT(sl_loadMarkup()));
-
-    showSequenceAction = new QAction(tr("Show one sequence"), this);
-    connect(showSequenceAction, SIGNAL(triggered(bool)), SLOT(sl_showSequence()));
-
-    addToShownAction = new QAction(tr("Add to displayed"), this);
-    connect(addToShownAction, SIGNAL(triggered(bool)), SLOT(sl_addToShown()));
-
-    generateReportAction = new QAction(tr("Generate report"), this);
-    connect(generateReportAction, SIGNAL(triggered(bool)), SLOT(sl_generateReport()));
-
-    exportToSequencesAction = new QAction(tr("Export Sequences"), this);
-    connect(exportToSequencesAction, SIGNAL(triggered(bool)), SLOT(sl_exportSequences()));
-
-    clearDisplayedAction = new QAction(tr("Clear displayed sequences area"), this);
-    connect(clearDisplayedAction, SIGNAL(triggered(bool)), SLOT(sl_clearDisplayed()));
-
-    showFirstSequencesAction = new QAction(tr("Show sequences"), this);
-    connect(showFirstSequencesAction, SIGNAL(triggered(bool)), SLOT(sl_showFirstSequences()));
-
-    sortGroup = new QActionGroup(this);
-    sortOrdGroup = new QActionGroup(this);
-    sortFieldGroup = new QActionGroup(this);
-
-    connect(sortOrdGroup, SIGNAL(triggered(QAction* )), SLOT(sl_sortOrd(QAction* )));
-    connect(sortFieldGroup, SIGNAL(triggered(QAction* )), SLOT(sl_sortField(QAction* )));
-
-
-    sortOrdIncrAction = new QAction(tr("Increasing"), this);
-    sortOrdDecrAction = new QAction(tr("Decreasing"), this);
-
-    sortFieldCoverAction = new QAction(tr("Coverage"), this);
-    sortFieldFisherAction = new QAction(tr("Fisher"), this);
-    sortFieldNameAction = new QAction(tr("Name"), this);
-    sortFieldProbAction = new QAction(tr("Probability"), this);
-
-    sortOrdIncrAction->setCheckable(true);
-    sortOrdDecrAction->setCheckable(true);
-    sortOrdDecrAction->setChecked(true);
-
-    sortFieldCoverAction->setCheckable(true);
-    sortFieldFisherAction->setCheckable(true);
-    sortFieldNameAction->setCheckable(true);
-    sortFieldProbAction->setCheckable(true);
-    sortFieldProbAction->setChecked(true);
-
-    sortOrdGroup->addAction(sortOrdIncrAction);
-    sortOrdGroup->addAction(sortOrdDecrAction);
-
-    sortFieldGroup->addAction(sortFieldCoverAction);
-    sortFieldGroup->addAction(sortFieldFisherAction);
-    sortFieldGroup->addAction(sortFieldNameAction);
-    sortFieldGroup->addAction(sortFieldProbAction);
-
-
-
-    popupMenuCS = new QMenu(this);
-    popupMenuCS->addAction(selDeselSigAction);
-    popupMenuCS->addAction(deletePIAction);
-    popupMenuCS->addSeparator();
-    popupMenuCS->addAction(addSignalToMarkupAction);
-    //popupMenuCS->addAction(setCurPriorAction);
-    //popupMenuCS->addAction(clearCurPriorAction);
-
-
-    popupMenuDir = new QMenu(this);
-    popupMenuDir->addAction(newFolderAction);
-    popupMenuDir->addAction(newSignalAction);
-    popupMenuDir->addSeparator();
-    popupMenuDir->addAction(deletePIAction);
-    popupMenuDir->addSeparator();
-    popupMenuDir->addAction(selAllSigAction);
-    popupMenuDir->addAction(deselAllSigAction);
-    //popupMenuDir->addAction(setPriorAllSigAction);
-    //popupMenuDir->addAction(clearPriorAllSigAction);
-
-    popupMenuDirRoot = new QMenu(this);
-    popupMenuDirRoot->addAction(newFolderAction);
-    popupMenuDirRoot->addAction(newSignalAction);
-    popupMenuDirRoot->addSeparator();
-    popupMenuDirRoot->addAction(selAllSigAction);
-    popupMenuDirRoot->addAction(deselAllSigAction);
-    //popupMenuDirRoot->addAction(setPriorAllSigAction);
-    //popupMenuDirRoot->addAction(clearPriorAllSigAction);
-
-    QMenu* sortMenu = new QMenu(tr("Sort"), this);
-    QMenu* fieldMenu = new QMenu(tr("Field"), this);
-    QMenu* ordMenu = new QMenu(tr("Order"), this);
-    fieldMenu->addActions(sortFieldGroup->actions());
-    ordMenu->addActions(sortOrdGroup->actions());
-    sortMenu->addMenu(ordMenu);
-    sortMenu->addMenu(fieldMenu);
-
-    popupMenuDirRoot->addMenu(sortMenu);
-
-    popupMenuMrkRoot = new QMenu(this);
-    popupMenuMrkRoot->addAction(markupLettersAction);
-    popupMenuMrkRoot->addAction(loadMarkupAction);
-
-    popupMenuSequence = new QMenu(this);
-    popupMenuSequence->addAction(showSequenceAction);
-    popupMenuSequence->addAction(addToShownAction);
-    popupMenuSequence->addAction(clearDisplayedAction);
-
-    popupMenuSequenceBase = new QMenu(this);
-    popupMenuSequenceBase->addAction(generateReportAction);
-    popupMenuSequenceBase->addAction(exportToSequencesAction);
-    popupMenuSequenceBase->addAction(showFirstSequencesAction);
-}
-
-void EDProjectTree::onCSNPropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue){
-    EDPICSNode* pCSN = dynamic_cast<EDPICSNode*>(pItem);
-    Operation* pOp = pCSN->getOperation();
-
-
-    EDProjectItem *pParent = dynamic_cast<EDProjectItem*>(dynamic_cast<QTreeWidgetItem*>(pItem)->parent());
-    QString strType = "Type";
-
-
-    if (pProperty->getName().compare(strType, Qt::CaseInsensitive) == 0) {
-
-        Operation* pNewOp = createCSN(EDPIPropertyTypeListCSNodeTypes::getInstance()->getValueId(strNewValue));
-        assert(pNewOp != NULL);
-
-        if (pParent->getType() == PIT_CS) {
-            updatingItem = true;
-            EDPICS *pPICS = dynamic_cast<EDPICS*>(pParent);
-            connect(pPICS, SIGNAL(si_getMetaInfoBase()), SLOT(sl_setMetainfoBase()));
-            Signal *pSignal = findSignal(pPICS->getSignal());
-            pSignal->attach(pNewOp);
-            Operation* op = pPICS->getOperation();
-            //if(op==NULL){
-                pPICS->setOperation(pSignal->getSignal());
-            //}
-            pPICS->update(true);
-            updatingItem = false;
-
-        }
-        else {
-            updatingItem = true;
-            EDPICSNode *pPICS = dynamic_cast<EDPICSNode*>(pParent);
-            Operation* pParentOp = pPICS->getOperation();
-            int id;
-            for (id=0; id<pParentOp->getArgumentNumber(); id++) {
-                if (pParentOp->getArgument(id) == pOp)
-                    break;
-            }
-            assert( id >=0 && id < pParentOp->getArgumentNumber() );
-            pParentOp->setArgument(pNewOp, id);
-            connect(pParent, SIGNAL(si_getMetaInfoBase()), SLOT(sl_setMetainfoBase()));
-            pParent->update(true);
-            updatingItem = false;
-        }
-        delete pOp;
-        const EDProjectItem *pNewItemc = pParent->findItemConnectedTo(pNewOp);
-        EDProjectItem *pNewItem = const_cast<EDProjectItem*>(pNewItemc);
-        connect(pNewItem, SIGNAL(si_getMetaInfoBase()), SLOT(sl_setMetainfoBase()));
-        updateTree(ED_UPDATE_CHILDREN, qobject_cast<EDProjectItem *>(pParent));
-        updateTree(ED_CURRENT_ITEM_CHANGED, pNewItem);
-    }
-    else {
-        switch (pCSN->getType()) {
-        case PIT_CSN_DISTANCE    : onDistancePropertyChanged(pCSN, pProperty, strNewValue); break;
-        case PIT_CSN_REPETITION    : onRepetitionPropertyChanged(pCSN, pProperty, strNewValue); break;
-        case PIT_CSN_INTERVAL    : onIntervalPropertyChanged(pCSN, pProperty, strNewValue); break;
-        case PIT_CSN_WORD        : onWordPropertyChanged(pCSN, pProperty, strNewValue); break;
-        case PIT_CSN_MRK_ITEM    : onMrkItemPropertyChanged(pCSN, pProperty, strNewValue); break;
-        default: assert(0);
-        }
-    }
-
-    while (pParent->getType() != PIT_CS) {
-        pParent->update(false);
-
-        //pParent = findEDItem(dynamic_cast<EDProjectItem*>(dynamic_cast<QTreeWidgetItem*>(pParent)->parent()));
-        pParent = dynamic_cast<EDProjectItem*>(dynamic_cast<QTreeWidgetItem*>(pParent)->parent());
-        connect(pParent, SIGNAL(si_getMetaInfoBase()), SLOT(sl_setMetainfoBase()));
-    }
-    pParent->update(false);
-    if(edData.isSignalSelected(pItem))
-        edData.clearScores();
-}
-void EDProjectTree::onDistancePropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue){
-    EDPICSNDistance* pDist = dynamic_cast<EDPICSNDistance*>(pItem);
-    OpDistance* pOp = dynamic_cast<OpDistance*>(pDist->getOperation());
-    QString strFrom = "Distance from";
-    QString strTo = "Distance to";
-    QString strOrder = "Order";
-    QString strDistanceType = "Distance type";
-
-    if (pProperty->getName().compare(strFrom, Qt::CaseInsensitive) == 0) {
-        DDisc::Interval iDist = pOp->getDistance();
-        int nValue =0;
-        if (parse(strNewValue.toStdString().c_str(),"%d", &nValue) && nValue>=0 && nValue<=iDist.getTo()) {
-            iDist.setFrom(nValue);
-            pOp->setDistance(iDist);
-        }
-        else{
-            QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be positive integer which is less than the higher bound"));
-            mb->exec();
-            CHECK(!mb.isNull(), );
-        }
-    }
-    else
-        if (pProperty->getName().compare(strTo, Qt::CaseInsensitive) == 0) {
-            DDisc::Interval iDist = pOp->getDistance();
-            int nId = EDPIPropertyTypeUnsignedIntWithUnl::getInstance()->getValueId(strNewValue);
-            int nValue =0;
-            bool bError = false;
-            if (nId < 0) {
-                if (bError = !parse(strNewValue.toStdString().c_str(),"%d", &nValue) || nValue<0) {
-                    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be positive integer which is less than the higher bound"));
-                    mb->exec();
-                    CHECK(!mb.isNull(), );
-                }
-            }
-            else
-                nValue = PINF;
-            if (!bError) {
-                if (nValue >= iDist.getFrom()) {
-                    iDist.setTo(nValue);
-                    pOp->setDistance(iDist);
-                }
-                else{
-                    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be grater than the lower bound"));
-                    mb->exec();
-                    CHECK(!mb.isNull(), );
-                }
-            }
-        } else
-            if (pProperty->getName().compare(strOrder, Qt::CaseInsensitive) == 0) {
-                int nId = EDPIPropertyTypeBool::getInstance()->getValueId(strNewValue);
-                if (nId == EDPIPropertyTypeBool::False)
-                    pOp->setOrderImportant(false);
-                else
-                    pOp->setOrderImportant(true);
-            } else
-                if (pProperty->getName().compare(strDistanceType, Qt::CaseInsensitive) == 0) {
-                    int nId = EDPIPropertyTypeDistType::getInstance()->getValueId(strNewValue);
-                    pOp->setDistanceType((EDistType)nId);
-                }
-                else assert(0);
-                pDist->update(true);
-                EDProjectItem* pIt = dynamic_cast<EDProjectItem*>(dynamic_cast<QTreeWidgetItem*>(pDist)->parent());
-                updateTree(ED_UPDATE_CHILDREN, qobject_cast<EDProjectItem *>(pIt));
-                updateTree(ED_CURRENT_ITEM_CHANGED, pDist);
-}
-
-void EDProjectTree::onRepetitionPropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue){
-    EDPICSNRepetition* pDist = dynamic_cast<EDPICSNRepetition*>(pItem);
-    OpReiteration* pOp = dynamic_cast<OpReiteration*>(pDist->getOperation());
-    QString strFrom = "Distance from";
-    QString strTo = "Distance to";
-    QString strDistanceType = "Distance type";
-    QString strCountFrom = "Count from";
-    QString strCountTo = "Count to";
-
-
-    if (pProperty->getName().compare(strFrom, Qt::CaseInsensitive) == 0) {
-        DDisc::Interval iDist = pOp->getDistance();
-        int nValue =0;
-        if (parse(strNewValue.toStdString().c_str(),"%d", &nValue) && nValue>=0 && nValue<=iDist.getTo()) {
-            iDist.setFrom(nValue);
-            pOp->setDistance(iDist);
-        }
-        else{
-            QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be positive integer which is less than the higher bound"));
-            mb->exec();
-            CHECK(!mb.isNull(), );
-        }
-    }
-    else
-        if (pProperty->getName().compare(strTo, Qt::CaseInsensitive) == 0) {
-            DDisc::Interval iDist = pOp->getDistance();
-            int nId = EDPIPropertyTypeUnsignedIntWithUnl::getInstance()->getValueId(strNewValue);
-            int nValue =0;
-            bool bError = false;
-            if (nId < 0) {
-                if (bError = !parse(strNewValue.toStdString().c_str(),"%d", &nValue)) {
-                    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be positive integer which is less than the higher bound"));
-                    mb->exec();
-                    CHECK(!mb.isNull(), );
-                }
-            }
-            else
-                nValue = PINF;
-            if (!bError) {
-                if (nValue >= iDist.getFrom()) {
-                    iDist.setTo(nValue);
-                    pOp->setDistance(iDist);
-                }
-                else{
-                    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be grater than the lower bound"));
-                    mb->exec();
-                    CHECK(!mb.isNull(), );
-                }
-            }
-        } else
-            if (pProperty->getName().compare(strCountFrom, Qt::CaseInsensitive) == 0) {
-                DDisc::Interval iCount = pOp->getCount();
-                int nValue =0;
-                if (parse(strNewValue.toStdString().c_str(),"%d", &nValue) && nValue>=0 && nValue<=iCount.getTo() && nValue<=10) {
-                    iCount.setFrom(nValue);
-                    pOp->setCount(iCount);
-                }
-                else {
-                    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be positive integer which is less than the higher bound"));
-                    mb->exec();
-                    CHECK(!mb.isNull(), );
-                }
-            }
-            else
-                if (pProperty->getName().compare(strCountTo, Qt::CaseInsensitive) == 0) {
-                    DDisc::Interval iCount = pOp->getCount();
-                    int nValue =0;
-                    if (!parse(strNewValue.toStdString().c_str(),"%d", &nValue)) {
-                        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be positive integer which is less than the higher bound"));
-                        mb->exec();
-                        CHECK(!mb.isNull(), );
-                    }
-                    else {
-                        if (nValue >= iCount.getFrom()) {
-                            iCount.setTo(nValue);
-                            pOp->setCount(iCount);
-                        }
-                        else{
-                            QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be grater than the lower bound"));
-                            mb->exec();
-                            CHECK(!mb.isNull(), );
-                        }
-                    }
-                } else
-                    if (pProperty->getName().compare(strDistanceType, Qt::CaseInsensitive) == 0) {
-                        int nId = EDPIPropertyTypeDistType::getInstance()->getValueId(strNewValue);
-                        pOp->setDistanceType((EDistType)nId);
-                    }
-                    else assert(0);
-                    pDist->update(true);
-                    EDProjectItem* pIt = dynamic_cast<EDProjectItem*>(dynamic_cast<QTreeWidgetItem*>(pDist)->parent());
-                    updateTree(ED_UPDATE_CHILDREN, qobject_cast<EDProjectItem *>(pIt));
-                    updateTree(ED_CURRENT_ITEM_CHANGED, pDist);
-}
-
-void EDProjectTree::onIntervalPropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue){
-    EDPICSNInterval* pInt = dynamic_cast<EDPICSNInterval*>(pItem);
-    OpInterval* pOp = dynamic_cast<OpInterval*>(pInt->getOperation());
-    QString strFrom = "Distance from";
-    QString strTo = "Distance to";
-
-    if (pProperty->getName().compare(strFrom, Qt::CaseInsensitive) == 0) {
-        DDisc::Interval iInt = pOp->getInt();
-        int nValue =0;
-        if (parse(strNewValue.toStdString().c_str(),"%d", &nValue) && nValue>=0 && nValue<=iInt.getTo()) {
-            iInt.setFrom(nValue);
-            pOp->setInt(iInt);
-        }
-        else{
-            QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be positive integer which is less than the higher bound"));
-            mb->exec();
-            CHECK(!mb.isNull(), );
-        }
-    }
-    else
-        if (pProperty->getName().compare(strTo, Qt::CaseInsensitive) == 0) {
-            DDisc::Interval iInt = pOp->getInt();
-            int nId = EDPIPropertyTypeUnsignedIntWithUnl::getInstance()->getValueId(strNewValue);
-            int nValue =0;
-            bool bError = false;
-            if (nId < 0) {
-                if (bError = !parse(strNewValue.toStdString().c_str(),"%d", &nValue)) {
-                    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be positive integer which is less than the higher bound"));
-                    mb->exec();
-                    CHECK(!mb.isNull(), );
-                }
-            }
-            else
-                nValue = PINF;
-            if (!bError) {
-                if (nValue >= iInt.getFrom()) {
-                    iInt.setTo(nValue);
-                    pOp->setInt(iInt);
-                }
-                else{
-                    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The value must be grater than the lower bound"));
-                    mb->exec();
-                    CHECK(!mb.isNull(), );
-                }
-            }
-        }
-        else assert(0);
-        pInt->update(true);
-        EDProjectItem* pIt = dynamic_cast<EDProjectItem*>(dynamic_cast<QTreeWidgetItem*>(pInt)->parent());
-        updateTree(ED_UPDATE_CHILDREN, qobject_cast<EDProjectItem *>(pIt));
-        updateTree(ED_CURRENT_ITEM_CHANGED, pInt);
-}
-
-void EDProjectTree::onWordPropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue){
-    EDPICSNTSWord* pPITS = dynamic_cast<EDPICSNTSWord*>(pItem);
-    TS* pOp = dynamic_cast<TS*>(pPITS->getOperation());
-    QString strWord = "Word";
-
-    if (pProperty->getName().compare(strWord, Qt::CaseInsensitive) == 0) {
-        if (isValidWord15(strNewValue.toStdString().c_str()))
-            pOp->setWord(strNewValue.toUpper().toStdString());
-        else {
-            QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("The word must be in 15-character code"));
-            mb->exec();
-            return;
-        }
-
-    }
-    else assert(0);
-
-    pPITS->update(true);
-    EDProjectItem* pIt = dynamic_cast<EDProjectItem*>(dynamic_cast<QTreeWidgetItem*>(pPITS)->parent());
-    updateTree(ED_UPDATE_CHILDREN, qobject_cast<EDProjectItem *>(pIt));
-    updateTree(ED_CURRENT_ITEM_CHANGED, pPITS);
-}
-void EDProjectTree::onMrkItemPropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue){
-    QString strFamily = "Family";
-    QString strSignal = "Signal";
-
-    EDPICSNTSMrkItem* pPITS = dynamic_cast<EDPICSNTSMrkItem*>(pItem);
-    assert(pPITS!=NULL);
-    TS *pTS = dynamic_cast<TS*>(pPITS->getOperation());
-    assert(pTS!=NULL);
-
-    if (pProperty->getName().compare(strFamily, Qt::CaseInsensitive) == 0) {
-        pTS->setFamily(strNewValue.toStdString().c_str());
-    }
-    else
-        if (pProperty->getName().compare(strSignal, Qt::CaseInsensitive) == 0) {
-            pTS->setName(strNewValue.toStdString().c_str());
-        }
-        else
-            assert(0);
-
-    pPITS->update(true);
-    EDProjectItem* pIt = dynamic_cast<EDProjectItem*>(dynamic_cast<QTreeWidgetItem*>(pPITS)->parent());
-    updateTree(ED_UPDATE_CHILDREN, qobject_cast<EDProjectItem *>(pIt));
-    updateTree(ED_CURRENT_ITEM_CHANGED, pPITS);
-    emit si_changeProp(pPITS);
-}
-
-Operation* EDProjectTree::createCSN(int ValueId) const{
-    switch (ValueId) {
-    case EDPIPropertyTypeListCSNodeTypes::DISTANCE    : return new OpDistance;
-    case EDPIPropertyTypeListCSNodeTypes::REPETITION    : return new OpReiteration;
-    case EDPIPropertyTypeListCSNodeTypes::INTERVAL    : return new OpInterval;
-    case EDPIPropertyTypeListCSNodeTypes::WORD        :
-        {
-            TS* pTS = new TS;
-            pTS->setFromMarking(false);
-            return pTS;
-        }
-    case EDPIPropertyTypeListCSNodeTypes::MRK_ITEM    :
-        {
-            TS* pTS = new TS;
-            pTS->setFromMarking(true);
-            return pTS;
-        }
-    }
-    return NULL;
-}
-
-void EDProjectTree::sl_newFolder(){
-    QTreeWidgetItem* curItem = currentItem();
-    EDPICSDirectory* pItem = dynamic_cast<EDPICSDirectory*>(curItem);
-    assert(pItem);
-    CSFolder* pFolder = findFolder(pItem);
-    CSFolder* pNewFolder = new CSFolder();
-    pNewFolder->setName(pFolder->makeUniqueFolderName());
-    if (pFolder->addFolder( pNewFolder ) < 0) {
-        delete pNewFolder;
-        return;
-    }
-    EDPICSFolder* newFol = new EDPICSFolder(pNewFolder);
-    pItem->addChild(dynamic_cast<EDProjectItem*>(newFol));
-    updateTree(ED_UPDATE_CHILDREN, pItem);
-    updateTree(ED_CURRENT_ITEM_CHANGED, newFol);
-}
-void EDProjectTree::sl_newSignal(){
-
-    QTreeWidgetItem* curItem = currentItem();
-    EDPICSDirectory* pItem = dynamic_cast<EDPICSDirectory*>(curItem);
-    assert(pItem);
-    CSFolder* pFolder = findFolder(pItem);
-    Signal *pNewSignal = new Signal(NULL);
-    pNewSignal->setName(pFolder->makeUniqueSignalName().toStdString());
-    if (pFolder->addSignal( pNewSignal ) < 0) {
-                delete pNewSignal;
-                return;
-    }
-    EDPICS* pNewItem =  new EDPICS(pNewSignal);
-    pItem->addChild(dynamic_cast<EDProjectItem*>(pNewItem));
-    updateTree(ED_UPDATE_CHILDREN, pItem);
-    updateTree(ED_CURRENT_ITEM_CHANGED, pNewItem);
-}
-void EDProjectTree::sl_deletePI(){
-
-    QTreeWidgetItem* curItem = currentItem();
-    EDProjectItem* pItem= dynamic_cast<EDProjectItem*>(curItem);
-    assert(pItem);
-    switch (pItem->getType()){
-        case PIT_CS_FOLDER: deleteFolder(dynamic_cast<EDPICSFolder*>(pItem)); break;
-        case PIT_CS: deleteSignal(dynamic_cast<EDPICS*>(pItem)); break;
-        default: assert(0);
-    }
-}
-
-void EDProjectTree::deleteFolder(EDPICSFolder* pPI){
-    EDProjectItem *pItem = dynamic_cast<EDProjectItem*>(dynamic_cast<QTreeWidgetItem*>(pPI)->parent());
-    CSFolder* pFolder = findFolder(dynamic_cast<EDPICSDirectory*>(pItem));
-    assert(pFolder != NULL);
-    int id = pFolder->getFolderIndexByName(pPI->getName());
-    assert(id>=0);
-    pFolder->deleteFolder(id);
-
-    updateTree(ED_CURRENT_ITEM_CHANGED, NULL);
-    pItem->update(true);
-    updateTree(ED_UPDATE_CHILDREN, pItem);
-    edData.clearScores();
-}
-void EDProjectTree::deleteSignal(EDPICS* pPI){
-
-    if(edData.isSignalSelected(pPI)){
-        edData.clearScores();
-    }
-    EDProjectItem *pItem = dynamic_cast<EDProjectItem*>(dynamic_cast<QTreeWidgetItem*>(pPI)->parent());
-    CSFolder* pFolder = findFolder(dynamic_cast<EDPICSDirectory*>(pItem));
-    assert(pFolder != NULL);
-    int id = pFolder->getSignalIndexByName(pPI->getName());
-    assert(id>=0);
-    pFolder->deleteSignal(id);
-
-    updateTree(ED_CURRENT_ITEM_CHANGED, NULL);
-    pItem->update(true);
-    updateTree(ED_UPDATE_CHILDREN, pItem);
-
-}
-
-void EDProjectTree::updateSorting(){
-
-
-//     for (int i = 0; i < seqRoot.childCount(); i++){
-//         EDProjectItem* item = dynamic_cast<EDProjectItem*>(seqRoot.child(i));
-//         if(item){
-//            item->setSortField(sortField);
-//            item->setSortOrd(sortOrd);
-//            updateSortingRecurs(item);
-//         }
-//     }
-//
-//     for (int i = 0; i < mrkRoot.childCount(); i++){
-//         EDProjectItem* item = dynamic_cast<EDProjectItem*>(mrkRoot.child(i));
-//         if(item){
-//             item->setSortField(sortField);
-//             item->setSortOrd(sortOrd);
-//             updateSortingRecurs(item);
-//         }
-//     }
-
-    for (int i = 0; i < root.childCount(); i++){
-        EDProjectItem* item = dynamic_cast<EDProjectItem*>(root.child(i));
-        if(item){
-            item->setSortField(sortField);
-            item->setSortOrd(sortOrd);
-            updateSortingRecurs(item);
-        }
-    }
-//     seqRoot.sortChildren(0, Qt::AscendingOrder);
-//     mrkRoot.sortChildren(0, Qt::AscendingOrder);
-    root.sortChildren(0, Qt::AscendingOrder);
-
-}
-
-void EDProjectTree::updateSortingRecurs(EDProjectItem* pItem){
-
-    for (int i = 0; i < pItem->childCount(); i++){
-        EDProjectItem* item = dynamic_cast<EDProjectItem*>(pItem->child(i));
-        if(item){
-            item->setSortField(sortField);
-            item->setSortOrd(sortOrd);
-            updateSortingRecurs(item);
-        }
-    }
-    pItem->sortChildren(0, Qt::AscendingOrder);
-
-}
-void EDProjectTree::sl_selAllSig(){
-    EDProjectItem* pItem = dynamic_cast<EDProjectItem*>(currentItem());
-    if (!pItem)
-        return;
-    for (int i=0; i<pItem->childCount(); i++)
-    {
-        EDProjectItem* pSI = dynamic_cast<EDProjectItem*>(pItem->child(i));
-        if(!pSI){
-            continue;
-        }
-        if (!edData.isSignalSelected(pSI))
-            edData.switchSelection(const_cast<EDProjectItem*>(pSI), true);
-
-        updateTree(ED_ITEM_STATE_CHANGED, pSI);
-    }
-}
-void EDProjectTree::sl_deselAllSig(){
-    EDProjectItem* pItem = dynamic_cast<EDProjectItem*>(currentItem());
-    if (!pItem)
-        return;
-    for (int i=0; i<pItem->childCount(); i++)
-    {
-        EDProjectItem* pSI = dynamic_cast<EDProjectItem*>(pItem->child(i));
-        if(!pSI){
-            continue;
-        }
-        if (edData.isSignalSelected(pSI))
-               edData.switchSelection(const_cast<EDProjectItem*>(pSI), true);
-        updateTree(ED_ITEM_STATE_CHANGED, pSI);
-    }
-}
-void EDProjectTree::sl_setPriorAllSig(){
-    EDProjectItem* pItem = dynamic_cast<EDProjectItem*>(currentItem());
-    if (!pItem)
-        return;
-    for (int i=0; i<pItem->childCount(); i++)
-    {
-        EDProjectItem* pSI = dynamic_cast<EDProjectItem*>(pItem->child(i));
-        if(!pSI){
-            continue;
-        }
-        EDPICS* pCS = dynamic_cast<EDPICS*>(pSI);
-        if (pCS){
-            edData.onSetCurrentSignalParamsAsPrior(pCS, false);
-            updateTree(ED_CURRENT_ITEM_CHANGED, pCS);
-        }
-    }
-}
-void EDProjectTree::sl_clearPriorAllSig(){
-    EDProjectItem* pItem = dynamic_cast<EDProjectItem*>(currentItem());
-    if (!pItem)
-        return;
-    for (int i=0; i<pItem->childCount(); i++)
-    {
-        EDProjectItem* pSI = dynamic_cast<EDProjectItem*>(pItem->child(i));
-        if(!pSI){
-            continue;
-        }
-        EDPICS* pCS = dynamic_cast<EDPICS*>(pSI);
-        if (pCS){
-            edData.onClearSignalPriorParams(pCS);
-            updateTree(ED_CURRENT_ITEM_CHANGED, pCS);
-        }
-    }
-}
-void EDProjectTree::sl_addSignalToMarkup(){
-    emit si_addToMarkup();
-}
-void EDProjectTree::sl_selDeselSig(){
-    EDProjectItem* pItem = dynamic_cast<EDProjectItem*>(currentItem());
-    if (pItem){
-         edData.switchSelection(pItem, true);
-         updateTree(ED_ITEM_STATE_CHANGED, pItem);
-    }
-}
-void EDProjectTree::sl_setCurPrior(){
-    EDPICS* pItem = dynamic_cast<EDPICS*>(currentItem());
-    if (!pItem)
-    {
-        assert(0);
-        return;
-    }
-    edData.onSetCurrentSignalParamsAsPrior(pItem, true);
-    updateTree(ED_CURRENT_ITEM_CHANGED, pItem);
-}
-void EDProjectTree::sl_clearCurPrior(){
-     EDPICS* pItem = dynamic_cast<EDPICS*>(currentItem());
-    if (!pItem)
-    {
-        assert(0);
-        return;
-    }
-    edData.onClearSignalPriorParams(pItem);
-    updateTree(ED_CURRENT_ITEM_CHANGED, pItem);
-}
-
-void EDProjectTree::sl_markupLetters(){
-    edData.markupLetters();
-    updateMarkup();
-    emit si_loadMarkup(true);
-}
-
-void EDProjectTree::sl_loadMarkup(){
-    emit si_loadMarkup(false);
-}
-void EDProjectTree::sl_showSequence(){
-    emit si_showSequence();
-}
-void EDProjectTree::sl_addToShown(){
-    emit si_addToShown();
-}
-
-void EDProjectTree::sl_clearDisplayed(){
-    emit si_clearDisplayed();
-}
-void EDProjectTree::sl_showFirstSequences(){
-    emit si_showFirstSequences();
-}
-
-void EDProjectTree::sl_setMetainfoBase(){
-    EDProjectItem* item = dynamic_cast<EDProjectItem*>(sender());
-
-    if(!item){
-        return;
-    }
-
-    item->setMetainfoBase(&edData.getDescriptionBase());
-
-}
-
-void EDProjectTree::sl_generateReport(){
-    EDPISequenceBase* pItem = dynamic_cast<EDPISequenceBase*>(currentItem());
-    if (!pItem)
-    {
-        return;
-    }
-    edData.generateRecognizationReport(pItem);
-}
-
-void EDProjectTree::sl_exportSequences(){
-    EDPISequenceBase* pItem = dynamic_cast<EDPISequenceBase*>(currentItem());
-    if (!pItem)
-    {
-        return;
-    }
-    //edData.generateRecognizationReport(pItem);
-
-    ExpertDiscoveryExportSequences *t = new ExpertDiscoveryExportSequences(pItem->getSequenceBase());
-
-    AppContext::getTaskScheduler()->registerTopLevelTask(t);
-//     QFileDialog saveRepDialog;
-//     saveRepDialog.setFileMode(QFileDialog::AnyFile);
-//     saveRepDialog.setNameFilter(tr("Fasta Files (*.fa *.fasta)"));
-//     saveRepDialog.setViewMode(QFileDialog::Detail);
-//     saveRepDialog.setAcceptMode(QFileDialog::AcceptSave);
-//
-//     if(saveRepDialog.exec()){
-//         QStringList fileNames = saveRepDialog.selectedFiles();
-//         if(fileNames.isEmpty()) return;
-//
-//         QString fileName = fileNames.first();
-//
-//         GUrl URL(strNegName);
-//         IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(URL));
-//         DocumentFormat* f = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::PLAIN_GENBANK);
-//
-//         negDoc = f->createNewUnloadedDocument(iof, URL, stateInfo);
-//         CHECK_OP(stateInfo,);
-//         addSubTask(new LoadUnloadedDocumentTask(negDoc));
-}
-
-void EDProjectTree::sl_sortField(QAction* action){
-    EDSortParameters cursortField = ED_FIELD_UNDEFINED;
-    QString actName = action->text();
-    if(actName == tr("Coverage")){
-        cursortField = ED_FIELD_COVERAGE;
-    }else if(actName == tr("Fisher")){
-        cursortField = ED_FIELD_FISHER;
-    }else if(actName == tr("Name")){
-        cursortField = ED_FIELD_NAME;
-    }else if(actName == tr("Probability")){
-        cursortField = ED_FIELD_PROBABILITY;
-    }
-
-    if(cursortField != ED_FIELD_UNDEFINED){
-       sortField = cursortField;
-       updateSorting();
-    }
-}
-void EDProjectTree::sl_sortOrd(QAction* action){
-    EDSortParameters cursortField = ED_FIELD_UNDEFINED;
-    QString actName = action->text();
-    if(actName == tr("Increasing")){
-        cursortField = ED_ORDER_INCREASING;
-    }else if(actName == tr("Decreasing")){
-        cursortField = ED_ORDER_DECREASING;
-    }
-
-    if(cursortField != ED_FIELD_UNDEFINED){
-        sortOrd = cursortField;
-        updateSorting();
-    }
-}
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgetsCtrl.h b/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgetsCtrl.h
deleted file mode 100644
index adf4291..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryTreeWidgetsCtrl.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * 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_EXPERT_DIS_TREEWIDGETSCTR_H_
-#define _U2_EXPERT_DIS_TREEWIDGETSCTR_H_
-
-#include "DDisc/Signal.h"
-#include "DDisc/MetaInfo.h"
-#include "ExpertDiscoveryTreeWidgets.h"
-#include "ExpertDiscoveryData.h"
-
-#include <QObject>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
- #include <QActionGroup>
-#include <QMenu>
-#include <QTreeWidget>
-
-namespace U2 {
-
-class EDProjectTree : public QTreeWidget{
-    Q_OBJECT
-
-public:
-    EDProjectTree(QWidget *parent, ExpertDiscoveryData &data);
-
-    CSFolder &getRootItem(){return edData.getRootFolder();}
-
-    EDProjectItem* findEDItem(void* pData);
-    CSFolder* findFolder(EDPICSDirectory *pFolder) const;
-    Signal* findSignal(const Signal* pSignal) const;
-
-    void addSubitem(EDProjectItem* subItem, EDProjectItem* parent);
-    void updateTree(int flag, EDProjectItem* item = NULL);
-
-    void remake();
-    void clearTree();
-    void internalRemake(EDProjectItem* subItem, EDProjectItem* parent);
-    void updateItem(EDProjectItem* pItem);
-    void updateItemState(EDProjectItem* pItem);
-    void updateChildren(EDProjectItem* pItem);
-    void updateMarkup();
-    void updateSequenceBase(EItemType type);
-    void deleteFolder(EDPICSFolder* folder);
-    void deleteSignal(EDPICS* signal);
-    void updateSorting();
-    void updateSortingRecurs(EDProjectItem* pItem);
-
-    bool isUpdatingItem() {return updatingItem;}
-
-public slots:
-    void sl_newFolder();
-protected slots:
-    void sl_newSignal();
-    void sl_deletePI();
-    void sl_selAllSig();
-    void sl_deselAllSig();
-    void sl_setPriorAllSig();
-    void sl_clearPriorAllSig();
-    void sl_addSignalToMarkup();
-    void sl_selDeselSig();
-    void sl_setCurPrior();
-    void sl_clearCurPrior();
-    void sl_markupLetters();
-    void sl_loadMarkup();
-    void sl_showSequence();
-    void sl_addToShown();
-    void sl_clearDisplayed();
-    void sl_showFirstSequences();
-    void sl_setMetainfoBase();
-    void sl_generateReport();
-    void sl_exportSequences();
-    void sl_sortField(QAction* action);
-    void sl_sortOrd(QAction* action);
-
-private:
-
-    QMenu* chosePopupMen(EDProjectItem* pItem);
-    void createPopupsAndActions();
-    QIcon getItemIcon(EDProjectItem* pItem);
-
-    void onCSNPropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue);
-    void onDistancePropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue);
-    void onRepetitionPropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue);
-    void onIntervalPropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue);
-    void onWordPropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue);
-    void onMrkItemPropertyChanged(EDProjectItem* pItem, const EDPIProperty* pProperty, QString strNewValue);
-    Operation* createCSN(int ValueId) const;
-
-
-    ExpertDiscoveryData &edData;
-    EDPICSRoot root;
-    EDPIMrkRoot mrkRoot;
-    EDPISequenceRoot seqRoot;
-
-    QMenu*      popupMenuCS;
-    QMenu*      popupMenuDir;
-    QMenu*      popupMenuDirRoot;
-    QMenu*      popupMenuMrkRoot;
-    QMenu*      popupMenuSequence;
-    QMenu*      popupMenuSequenceBase;
-
-    QAction*    newFolderAction;
-    QAction*    newSignalAction;
-    QAction*    deletePIAction;
-    QAction*    selAllSigAction;
-    QAction*    deselAllSigAction;
-    QAction*    setPriorAllSigAction;
-    QAction*    clearPriorAllSigAction;
-    QAction*    addSignalToMarkupAction;
-    QAction*    selDeselSigAction;
-    QAction*    setCurPriorAction;
-    QAction*    clearCurPriorAction;
-    QAction*    markupLettersAction;
-    QAction*    loadMarkupAction;
-    QAction*    showSequenceAction;
-    QAction*    addToShownAction;
-    QAction*    generateReportAction;
-    QAction*    exportToSequencesAction;
-    QAction*    clearDisplayedAction;
-    QAction*    showFirstSequencesAction;
-
-    QActionGroup* sortGroup;
-    QActionGroup* sortOrdGroup;
-    QActionGroup* sortFieldGroup;
-    QAction*      sortOrdIncrAction;
-    QAction*      sortOrdDecrAction;
-    QAction*      sortFieldCoverAction;
-    QAction*      sortFieldFisherAction;
-    QAction*      sortFieldNameAction;
-    QAction*      sortFieldProbAction;
-
-    EDSortParameters sortField;
-    EDSortParameters sortOrd;
-
-    bool updatingItem;
-protected:
-    virtual void mousePressEvent(QMouseEvent *e);
-    virtual void mouseDoubleClickEvent(QMouseEvent *event);
-
-public slots:
-    void sl_propChanged(EDProjectItem* item, const EDPIProperty* prop, QString newVal);
-
-signals:
-    void si_loadMarkup(bool isLetters);
-    void si_showSequence();
-    void si_addToMarkup();
-    void si_addToShown();
-    void si_showFirstSequences();
-    void si_clearDisplayed();
-    void si_changeProp(QTreeWidgetItem* item);
-};
-
-} //namespace
-
-#endif
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryView.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryView.cpp
deleted file mode 100644
index 5948969..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryView.cpp
+++ /dev/null
@@ -1,1122 +0,0 @@
-/**
- * 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 <QMessageBox>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/Counter.h>
-#include <U2Core/GHints.h>
-#include <U2Core/GObjectSelection.h>
-#include <U2Core/IOAdapter.h>
-#include <U2Core/IOAdapterUtils.h>
-#include <U2Core/ProjectModel.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SequenceUtils.h>
-#include <U2Core/UserApplicationsSettings.h>
-
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Core/QObjectScopedPointer.h>
-#include <U2Gui/U2FileDialog.h>
-
-#include <U2View/ADVSequenceObjectContext.h>
-#include <U2View/ADVUtils.h>
-#include <U2View/AnnotatedDNAView.h>
-#include <U2View/AnnotatedDNAViewFactory.h>
-#include <U2View/AutoAnnotationUtils.h>
-#include <U2View/DetView.h>
-
-#include "ExpertDiscoveryControlDialog.h"
-#include "ExpertDiscoveryControlMrkDialog.h"
-#include "ExpertDiscoveryExtSigWiz.h"
-#include "ExpertDiscoveryGraphs.h"
-#include "ExpertDiscoveryPlugin.h"
-#include "ExpertDiscoveryPosNegDialog.h"
-#include "ExpertDiscoveryPosNegMrkDialog.h"
-#include "ExpertDiscoverySearchDialogController.h"
-#include "ExpertDiscoveryTask.h"
-#include "ExpertDiscoveryView.h"
-
-namespace U2{
-using namespace DDisc;
-ExpertDiscoveryView::ExpertDiscoveryView(GObjectViewFactoryId factoryId, const QString& viewName, QObject* p)
-:GObjectView(factoryId, viewName, p)
-,wizzard(false)
-,splitter(NULL)
-,currentAdv(NULL)
-,edAutoAnnotationsUpdater(NULL)
-,curPS(NULL)
-,updatePS(false)
-,curEDsequence(NULL)
-,posUDoc(NULL)
-,negUDoc(NULL)
-,conUDoc(NULL)
-,extrTask(NULL)
-,updatesCount(0)
-,curTask(NULL){
-
-    createActions();
-
-    edAutoAnnotationsUpdater = new ExpertDiscoverySignalsAutoAnnotationUpdater;
-    AppContext::getAutoAnnotationsSupport()->registerAutoAnnotationsUpdater(edAutoAnnotationsUpdater);
-    edAutoAnnotationsUpdater->setEDData(&d);
-    edAutoAnnotationsUpdater->setEDProcSignals(curPS);
-    edAutoAnnotationsUpdater->setEDMutex(&mutex);
-}
-
-ExpertDiscoveryView::~ExpertDiscoveryView(){
-
-    clearSequencesView();
-    delete posUDoc;
-    delete negUDoc;
-    delete conUDoc;
-    delete curEDsequence;
-
-    AppContext::getAutoAnnotationsSupport()->unregisterAutoAnnotationsUpdater(edAutoAnnotationsUpdater);
-}
-
-QWidget* ExpertDiscoveryView::createWidget(){
-
-    GCOUNTER(cvar,tvar, "ExpertDiscoveryWindowOpened" );
-
-    splitter = new QSplitter(Qt::Horizontal);
-
-    signalsWidget = new EDProjectTree(splitter, d);
-    signalsWidget->setHeaderLabel("Items");
-
-    propWidget = new EDPropertiesTable(splitter);
-
-    QSplitter* verticalSplitter = new QSplitter(Qt::Vertical);
-
-    verticalSplitter->addWidget(signalsWidget);
-    verticalSplitter->addWidget(propWidget);
-
-    splitter->addWidget(verticalSplitter);
-
-    connect(signalsWidget, SIGNAL(itemClicked ( QTreeWidgetItem * , int )), SLOT(sl_treeItemSelChanged(QTreeWidgetItem *)));
-    connect(signalsWidget, SIGNAL(itemActivated ( QTreeWidgetItem * , int )), SLOT(sl_treeItemSelChanged(QTreeWidgetItem *)));
-    //connect(signalsWidget, SIGNAL(currentItemChanged ( QTreeWidgetItem * , QTreeWidgetItem * ) ), SLOT(sl_treeItemSelChanged(QTreeWidgetItem *)));
-    connect(signalsWidget, SIGNAL(si_loadMarkup(bool ) ), SLOT(sl_treeWidgetMarkup(bool )));
-    connect(signalsWidget, SIGNAL(si_addToMarkup()), SLOT(sl_treeWidgetAddMarkup()));
-    connect(signalsWidget, SIGNAL(si_showSequence() ), SLOT(sl_showSequence()));
-    connect(signalsWidget, SIGNAL(si_addToShown() ), SLOT(sl_addToShown()));
-    connect(signalsWidget, SIGNAL(si_clearDisplayed() ), SLOT(sl_clearDisplayed()));
-    connect(signalsWidget, SIGNAL(si_showFirstSequences() ), SLOT(sl_showFirstSequences()));
-    connect(signalsWidget, SIGNAL(si_changeProp(QTreeWidgetItem*)), propWidget, SLOT(sl_treeSelChanged(QTreeWidgetItem*)));
-
-    connect(propWidget, SIGNAL(si_propChanged(EDProjectItem*, const EDPIProperty*, QString )), signalsWidget, SLOT(sl_propChanged(EDProjectItem* , const EDPIProperty* , QString )));
-
-    GObjectViewFactory* factory = AppContext::getObjectViewFactoryRegistry()->getFactoryById("ED");
-    ExpertDiscoveryViewFactory* edFactory = dynamic_cast<ExpertDiscoveryViewFactory*>(factory);
-    assert(edFactory);
-    connect(edFactory, SIGNAL(si_newTaskCreation(Task* )), SLOT(sl_newViewTask(Task*)));
-
-    return splitter;
-}
-
-
-void ExpertDiscoveryView::insertSeqView( QWidget* view ){
-
-    splitter->addWidget(view);
-
-}
-
-void ExpertDiscoveryView::createActions(){
-    newDoc = new QAction(tr("New Expert Discovery Document"), this);
-    newDoc->setIcon(QIcon(":expert_discovery/images/filenew.png"));
-    connect(newDoc, SIGNAL(triggered()), SLOT(sl_newDoc()));
-
-    openDoc = new QAction(tr("Open Expert Discovery Document"), this);
-    openDoc->setIcon(QIcon(":expert_discovery/images/fileopen.png"));
-    connect(openDoc, SIGNAL(triggered()), SLOT(sl_openDoc()));
-
-    saveDoc = new QAction(tr("Save Expert Discovery Document"), this);
-    saveDoc->setIcon(QIcon(":expert_discovery/images/filesave.png"));
-    connect(saveDoc, SIGNAL(triggered()), SLOT(sl_saveDoc()));
-
-
-    setUpRecBound = new QAction(tr("Set Recognition Bound"), this);
-    setUpRecBound->setIcon(QIcon(":expert_discovery/images/setRecBound.png"));
-    connect(setUpRecBound, SIGNAL(triggered()), SLOT(sl_setRecBound()));
-
-    //     optimizeRecBound = new QAction(tr("Optimize Recognition Bound"), this);
-    //     optimizeRecBound->setIcon(QIcon(":expert_discovery/images/optRecBound.png"));
-    //     connect(optimizeRecBound, SIGNAL(triggered()), SLOT(sl_optimizeRecBound()));
-
-    loadControlSeqAction = new QAction(tr("Load control sequences"), this);
-    loadControlSeqAction->setIcon(QIcon(":expert_discovery/images/loadControlsSeq.png"));
-    connect(loadControlSeqAction, SIGNAL(triggered()), SLOT(sl_showExpertDiscoveryControlDialog()));
-
-    extractSignalsAction = new QAction(tr("Extract signals"), this);
-    extractSignalsAction->setIcon(QIcon(":expert_discovery/images/extractSignals2.png"));
-    connect(extractSignalsAction, SIGNAL(triggered()), SLOT(sl_extractSignals()));
-
-    loadMarkupAction = new QAction(tr("Load markup"), this);
-    loadMarkupAction->setIcon(QIcon(":expert_discovery/images/loadMarkup.png"));
-    connect(loadMarkupAction, SIGNAL(triggered()), SLOT(sl_showExpertDiscoveryPosNegMrkDialog()));
-
-    loadControlMarkupAction = new QAction(tr("Load control sequences markup"), this);
-    loadControlMarkupAction->setIcon(QIcon(":expert_discovery/images/loadControlsSeqAnnot.png"));
-    connect(loadControlMarkupAction, SIGNAL(triggered()), SLOT(sl_showExpertDiscoveryControlMrkDialog()));
-
-    generateFullReportAction = new QAction(tr("Generate recognition report"), this);
-    generateFullReportAction->setIcon(QIcon(":expert_discovery/images/genRep.png"));
-    connect(generateFullReportAction, SIGNAL(triggered()), SLOT(sl_generateFullReport()));
-
-    setUpRecBound->setEnabled(false);
-    //optimizeRecBound->setEnabled(false);
-    loadControlSeqAction->setEnabled(false);
-    extractSignalsAction->setEnabled(false);
-    loadMarkupAction->setEnabled(false);
-    loadControlMarkupAction->setEnabled(false);
-    generateFullReportAction->setEnabled(false);
-
-}
-
-void ExpertDiscoveryView::sl_newDoc(){
-    wizzard = true;
-
-    if (askForSave()){
-        sl_saveDoc();
-    }
-
-    setUpRecBound->setEnabled(false);
-    //optimizeRecBound->setEnabled(false);
-    loadControlSeqAction->setEnabled(false);
-    extractSignalsAction->setEnabled(false);
-    loadMarkupAction->setEnabled(false);
-    loadControlMarkupAction->setEnabled(false);
-    generateFullReportAction->setEnabled(false);
-
-    d.setRecBound(0);
-    d.cleanup();
-    propWidget->clearAll();
-    clearSequencesView();
-    edObjects.clear();
-    curPS = NULL;
-    signalsWidget->clearTree();
-    signalsWidget->updateTree(ED_UPDATE_ALL);
-    d.setModifed(false);
-
-    sl_showExpertDiscoveryPosNegDialog();
-}
-
-void ExpertDiscoveryView::sl_openDoc(){
-
-    LastUsedDirHelper lod("ExpertDiscovery");
-    lod.url = U2FileDialog::getOpenFileName(NULL, tr("Load ExpertDiscovery document"), lod.dir, tr("ExpertDiscovery files (*.exd)"));
-
-    if (lod.url.length() <= 0) {
-        return;
-    }
-
-    d.cleanup();
-    propWidget->clearAll();
-    clearSequencesView();
-    edObjects.clear();
-    curPS = NULL;
-    signalsWidget->clearTree();
-    signalsWidget->updateTree(ED_UPDATE_ALL);
-
-    openDoc->setEnabled(false);
-    newDoc->setEnabled(false);
-    saveDoc->setEnabled(false);
-
-    Task* t = new ExpertDiscoveryLoadDocumentTask(d, lod.url);
-    connect( t, SIGNAL( si_stateChanged() ), SLOT( sl_updateAll() ) );
-    AppContext::getTaskScheduler()->registerTopLevelTask(t);
-}
-void ExpertDiscoveryView::sl_saveDoc(){
-
-    LastUsedDirHelper lod("ExpertDiscovery");
-    lod.url = U2FileDialog::getSaveFileName(NULL, tr("Save ExpertDiscovery document"), lod.dir, tr("ExpertDiscovery files (*.exd)"));
-
-    if (lod.url.length() <= 0) {
-        return;
-    }
-
-    Task* t = new ExpertDiscoverySaveDocumentTask(d, lod.url);
-    AppContext::getTaskScheduler()->registerTopLevelTask(t);
-}
-
-bool ExpertDiscoveryView::askForSave(){
-    if(!d.isModified()){
-        return false;
-    }
-
-    QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Question, tr("Save ExpertDiscovery document"), tr("Do you want to save current ExpertDiscovery document?"), QMessageBox::Yes|QMessageBox::No);
-    mb->exec();
-    CHECK(!mb.isNull(), false);
-
-    if (mb->result()==QMessageBox::Yes)
-        return true;
-    else
-        return false;
-}
-
-void ExpertDiscoveryView::sl_showExpertDiscoveryPosNegDialog(){
-    Task *tasks = new Task("Loading positive and negative sequences", TaskFlag_NoRun);
-
-    QObjectScopedPointer<ExpertDiscoveryPosNegDialog> d = new ExpertDiscoveryPosNegDialog(QApplication::activeWindow());
-    d->exec();
-    CHECK(!d.isNull(), );
-
-    if (QDialog::Accepted == d->result()) {
-        if (!AppContext::getProject()) {
-            tasks->addSubTask(AppContext::getProjectLoader()->createNewProjectTask());
-        }
-
-        ExpertDiscoveryLoadPosNegTask *t = new ExpertDiscoveryLoadPosNegTask(d->getFirstFileName(), d->getSecondFileName(), d->isGenerateNegative(), d->getNegativePerPositive());
-        connect(t, SIGNAL(si_stateChanged()), SLOT(sl_loadPosNegTaskStateChanged()));
-        tasks->addSubTask(t);
-    }
-
-    AppContext::getTaskScheduler()->registerTopLevelTask(tasks);
-}
-
-void ExpertDiscoveryView::sl_loadPosNegTaskStateChanged(){
-    ExpertDiscoveryLoadPosNegTask *loadTask = qobject_cast<ExpertDiscoveryLoadPosNegTask*>(sender());
-    if (!loadTask || !loadTask->isFinished()) {
-        return;
-    }
-
-    if (loadTask->getStateInfo().hasError()) {
-        ExpertDiscoveryErrors::fileOpenError();
-        return;
-    }
-
-    QList <Document *> docs = loadTask->getDocuments();
-
-    Q_ASSERT(!docs.isEmpty());
-    Q_ASSERT(docs.count() > 1);
-
-    posUDoc = docs.first();
-    d.setPosBase(posUDoc->getObjects());
-    d.setBaseFilename(d.getPosSeqBase(), posUDoc->getURLString());
-
-    bool isSequencesDoc = true;
-    foreach(GObject* gobj, posUDoc->getObjects()){
-        //addObject(gobj);
-        if(gobj->getGObjectType()==GObjectTypes::SEQUENCE){
-            edObjects.push_back(gobj);
-        }else{
-            isSequencesDoc = false;
-        }
-    }
-    if(posUDoc->isStateLocked() || !isSequencesDoc){
-        posUDoc = NULL;
-    }
-
-    negUDoc = docs.at(1);
-    d.setNegBase(negUDoc->getObjects());
-    d.setBaseFilename(d.getNegSeqBase(), negUDoc->getURLString());
-
-    isSequencesDoc = true;
-    foreach(GObject* gobj, negUDoc->getObjects()){
-        //addObject(gobj);
-        if(gobj->getGObjectType()==GObjectTypes::SEQUENCE){
-            edObjects.push_back(gobj);
-        }else{
-            isSequencesDoc = false;
-        }
-    }
-
-    if(negUDoc->isStateLocked() || !isSequencesDoc){
-        negUDoc = NULL;
-    }
-
-    signalsWidget->updateSequenceBase(PIT_POSSEQUENCEBASE);
-    signalsWidget->updateSequenceBase(PIT_NEGSEQUENCEBASE);
-
-
-    setUpRecBound->setEnabled(true);
-    //optimizeRecBound->setEnabled(true);
-    loadControlSeqAction->setEnabled(true);
-    loadMarkupAction->setEnabled(true);
-    generateFullReportAction->setEnabled(true);
-
-    //markup
-    sl_showExpertDiscoveryPosNegMrkDialog();
-
-    wizzard = false;
-}
-
-void ExpertDiscoveryView::sl_showExpertDiscoveryPosNegMrkDialog(){
-    Task *tasks = new Task("Loading positive and negative sequences markups", TaskFlag_NoRun);
-
-    QObjectScopedPointer<ExpertDiscoveryPosNegMrkDialog> dialog = new ExpertDiscoveryPosNegMrkDialog(QApplication::activeWindow());
-    dialog->exec();
-    CHECK(!dialog.isNull(), );
-
-    if (QDialog::Accepted == dialog->result()) {
-        ExpertDiscoveryLoadPosNegMrkTask *t = new ExpertDiscoveryLoadPosNegMrkTask(dialog->getFirstFileName(), dialog->getSecondFileName(), dialog->getThirdFileName(), dialog->isGenerateDescr(), dialog->isAppendToCurrentMarkup(), dialog->isNucleotidesMarkup(), d);
-        connect(t, SIGNAL(si_stateChanged()), SLOT(sl_loadPosNegMrkTaskStateChanged()));
-        tasks->addSubTask(t);
-    }
-
-    AppContext::getTaskScheduler()->registerTopLevelTask(tasks);
-}
-
-void ExpertDiscoveryView::sl_loadPosNegMrkTaskStateChanged(){
-    ExpertDiscoveryLoadPosNegMrkTask *loadTask = qobject_cast<ExpertDiscoveryLoadPosNegMrkTask*>(sender());
-    if (!loadTask || !loadTask->isFinished()) {
-        return;
-    }
-
-    if (loadTask->getStateInfo().hasError()) {
-        ExpertDiscoveryErrors::markupLoadError();
-        return;
-    }
-
-    signalsWidget->updateMarkup();
-    extractSignalsAction->setEnabled(true);
-}
-
-void ExpertDiscoveryView::sl_showExpertDiscoveryControlMrkDialog(){
-    Task *tasks = new Task("Loading control sequences markups", TaskFlag_NoRun);
-
-    QObjectScopedPointer<ExpertDiscoveryControlMrkDialog> dialog = new ExpertDiscoveryControlMrkDialog(QApplication::activeWindow());
-    dialog->exec();
-    CHECK(!dialog.isNull(), );
-
-    if (QDialog::Accepted == dialog->result()) {
-        ExpertDiscoveryLoadControlMrkTask *t = new ExpertDiscoveryLoadControlMrkTask(dialog->getFirstFileName(), d );
-        connect(t, SIGNAL(si_stateChanged()), SLOT(sl_loadControlMrkTaskStateChanged()));
-        tasks->addSubTask(t);
-    }
-
-    AppContext::getTaskScheduler()->registerTopLevelTask(tasks);
-}
-
-void ExpertDiscoveryView::sl_loadControlMrkTaskStateChanged(){
-    ExpertDiscoveryLoadControlMrkTask *loadTask = qobject_cast<ExpertDiscoveryLoadControlMrkTask*>(sender());
-    if (!loadTask || !loadTask->isFinished()) {
-        return;
-    }
-
-    if (loadTask->getStateInfo().hasError()) {
-        ExpertDiscoveryErrors::markupLoadError();
-        return;
-    }
-}
-
-void ExpertDiscoveryView::initADVView(AnnotatedDNAView* adv){
-    if(!adv){
-        return;
-    }
-
-    clearSequencesView();
-
-    foreach(GObject* gobj, adv->getObjects()){
-        GHints* edHints = new GHintsDefaultImpl();
-        edHints->set("EDHint", QVariant(true));
-        gobj->setGHints(edHints);
-        addObject(gobj);
-    }
-    adv->setClosingInterface(closeInterface);
-    currentAdv = adv;
-    splitter->addWidget(adv->getWidget());
-    //    adv->addAutoAnnotationsUpdated(edAutoAnnotationsUpdater);
-
-    //hide complement strand and translations, adding the graph action
-    QList<ADVSequenceWidget*> curSequenceWidgets = currentAdv->getSequenceWidgets();
-    foreach(ADVSequenceWidget* seqWidget, curSequenceWidgets){
-        ADVSequenceObjectContext* cont = seqWidget->getActiveSequenceContext();
-        U2SequenceObject* seqObj = cont->getSequenceObject();
-        QString seqName = seqObj->getSequenceName();
-        SequenceType sType = d.getSequenceTypeByName(seqName);
-        int seqNumber = d.getSequenceIndex(seqName, sType);
-
-        if(seqNumber!=-1){
-            GSequenceGraphFactory* graphFactory = new ExpertDiscoveryScoreGraphFactory(seqWidget, d, seqNumber, sType);
-            GraphAction* graphAction = new GraphAction(graphFactory);
-            GraphMenuAction::addGraphAction(seqWidget->getActiveSequenceContext(), graphAction);
-        }
-
-        ADVSingleSequenceWidget* singleSeqWidget = dynamic_cast<ADVSingleSequenceWidget*>(seqWidget);
-        if(singleSeqWidget){
-            DetView* dv = singleSeqWidget->getDetView();
-            if(dv){
-                dv->setShowComplement(false);
-                dv->setShowTranslation(false);
-            }
-        }
-    }
-
-    foreach(ADVSequenceObjectContext* sctx, currentAdv->getSequenceContexts()){
-        AutoAnnotationsADVAction* aaAction = AutoAnnotationUtils::findAutoAnnotationADVAction( sctx );
-        assert(aaAction);
-        AutoAnnotationObject* aaobj = aaAction->getAAObj();
-        assert(aaobj);
-        connect(aaobj, SIGNAL(si_updateStarted()), SLOT(sl_autoAnnotationUpdateStarted()));
-        connect(aaobj, SIGNAL(si_updateFinshed()), SLOT(sl_autoAnnotationUpdateFinished()));
-    }
-
-    ADVGlobalAction* a = new ADVGlobalAction(adv, QIcon(), tr("Search for regions with Expert Discovery"), 80);
-    a->addAlphabetFilter(DNAAlphabet_NUCL);
-    connect(a, SIGNAL(triggered()), SLOT(sl_search()));
-
-    connect(adv, SIGNAL( si_focusChanged(ADVSequenceWidget*, ADVSequenceWidget*) ), SLOT( sl_sequenceItemSelChanged(ADVSequenceWidget*) ));
-
-    createEDSequence();
-}
-
-void ExpertDiscoveryView::sl_testView(){
-    Task *loadTask = qobject_cast<Task*>(sender());
-    if (!loadTask || !loadTask->isFinished()) {
-        return;
-    }
-
-    if (loadTask->getStateInfo().hasError()) {
-        return;
-    }
-
-    ExpertDiscoveryCreateViewTask* viewTask = dynamic_cast<ExpertDiscoveryCreateViewTask*>(loadTask);
-    if(!viewTask){
-        return;
-    }
-
-    AnnotatedDNAView* adv = viewTask->getADV();
-    initADVView(adv);
-
-}
-
-void ExpertDiscoveryView::sl_newViewTask(Task* t){
-    ExpertDiscoveryCreateViewTask* edTask = dynamic_cast<ExpertDiscoveryCreateViewTask*>(t);
-    if(!edTask){
-        return;
-    }
-
-    connect(edTask,SIGNAL( si_stateChanged() ), SLOT( sl_testView() ) );
-}
-
-void ExpertDiscoveryView::sl_updateAll(){
-    ExpertDiscoveryLoadDocumentTask *loadTask = qobject_cast<ExpertDiscoveryLoadDocumentTask*>(sender());
-    if (!loadTask || !loadTask->isFinished()) {
-        return;
-    }
-
-    openDoc->setEnabled(true);
-    newDoc->setEnabled(true);
-    saveDoc->setEnabled(true);
-
-    if (loadTask->getStateInfo().hasError() || loadTask->getStateInfo().isCanceled()) {
-        d.cleanup();
-        return;
-    }
-    signalsWidget->updateTree(ED_CURRENT_ITEM_CHANGED,NULL);
-    signalsWidget->updateSequenceBase(PIT_POSSEQUENCEBASE);
-    signalsWidget->updateSequenceBase(PIT_NEGSEQUENCEBASE);
-    signalsWidget->updateSequenceBase(PIT_CONTROLSEQUENCEBASE);
-    signalsWidget->updateTree(ED_UPDATE_ALL);
-
-    bool enableActions = d.getPosSeqBase().getSize() != 0  || d.getNegSeqBase().getSize() != 0;
-    setUpRecBound->setEnabled(enableActions);
-    //optimizeRecBound->setEnabled(enableActions);
-    loadControlSeqAction->setEnabled(enableActions);
-    extractSignalsAction->setEnabled(enableActions);
-    loadMarkupAction->setEnabled(enableActions);
-    loadControlMarkupAction->setEnabled(d.getConSeqBase().getSize() != 0);
-    generateFullReportAction->setEnabled(enableActions);
-
-}
-
-void ExpertDiscoveryView::sl_autoAnnotationUpdateStarted(){
-    updatesCount++;
-    if(updatesCount > 0){
-        signalsWidget->setEnabled(false);
-    }
-}
-
-void ExpertDiscoveryView::sl_search(){
-    GObjectViewAction* action = qobject_cast<GObjectViewAction*>(sender());
-    AnnotatedDNAView* av = qobject_cast<AnnotatedDNAView*>(action->getObjectView());
-
-    ADVSequenceObjectContext* seqCtx = av->getSequenceInFocus();
-    assert(seqCtx->getAlphabet()->isNucleic());
-    QObjectScopedPointer<ExpertDiscoverySearchDialogController> sdialog = new ExpertDiscoverySearchDialogController(seqCtx, d, av->getWidget());
-    sdialog->exec();
-}
-
-void ExpertDiscoveryView::sl_autoAnnotationUpdateFinished(){
-    updatesCount--;
-
-    if(updatesCount <= 0){
-        signalsWidget->setEnabled(true);
-        signalsWidget->setFocus();
-        updatesCount = 0;
-    }
-}
-
-void ExpertDiscoveryView::sl_showExpertDiscoveryControlDialog(){
-    Task *tasks = new Task("Loading control sequences", TaskFlag_NoRun);
-
-    QObjectScopedPointer<ExpertDiscoveryControlDialog> d = new ExpertDiscoveryControlDialog(QApplication::activeWindow());
-    d->exec();
-    CHECK(!d.isNull(), );
-
-    if (QDialog::Accepted == d->result()) {
-        Q_ASSERT(AppContext::getProject());
-        ExpertDiscoveryLoadControlTask *t = new ExpertDiscoveryLoadControlTask(d->getFirstFileName());
-        connect( t, SIGNAL( si_stateChanged() ), SLOT( sl_loadControlTaskStateChanged() ) );
-        tasks->addSubTask(t);
-    }
-
-    AppContext::getTaskScheduler()->registerTopLevelTask(tasks);
-
-}
-void ExpertDiscoveryView::sl_loadControlTaskStateChanged(){
-    ExpertDiscoveryLoadControlTask *loadTask = qobject_cast<ExpertDiscoveryLoadControlTask*>(sender());
-    if (!loadTask || !loadTask->isFinished()) {
-        return;
-    }
-
-    if (loadTask->getStateInfo().hasError()) {
-        ExpertDiscoveryErrors::fileOpenError();
-        return;
-    }
-
-    QList <Document *> docs = loadTask->getDocuments();
-
-    Q_ASSERT(!docs.isEmpty());
-
-    conUDoc = docs.first();
-
-    propWidget->clearAll();
-
-    if(d.getConSeqBase().getSize() != 0){
-        clearSequencesView();
-
-        QList<EDPISequence*> selSeqList = d.getSelectetSequencesList();
-        d.clearSelectedSequencesList();
-        foreach(EDPISequence* curS, selSeqList){
-            signalsWidget->updateItem(curS);
-        }
-
-        foreach(GObject* gobj, edObjects){
-            SequenceType seqType = d.getSequenceTypeByName(gobj->getGObjectName());
-            if(seqType == CONTROL_SEQUENCE){
-                edObjects.removeOne(gobj);
-            }
-        }
-    }
-
-    curPS = NULL;
-
-    d.clearContrBase();
-    d.clearContrAnnot();
-
-    d.setConBase(conUDoc->getObjects());
-    d.setBaseFilename(d.getConSeqBase(), conUDoc->getURLString());
-
-    bool isSequencesDoc = true;
-    foreach(GObject* gobj, conUDoc->getObjects()){
-        if(gobj->getGObjectType() == GObjectTypes::SEQUENCE){
-            edObjects.push_back(gobj);
-        }else{
-            isSequencesDoc = false;
-        }
-    }
-
-    if(conUDoc->isStateLocked() || !isSequencesDoc){
-        conUDoc = NULL;
-    }
-
-    if (d.isLettersMarkedUp() && d.getConSeqBase().getSize() != 0)
-        d.markupLetters(d.getConSeqBase(), d.getConMarkBase());
-
-    signalsWidget->updateSequenceBase(PIT_CONTROLSEQUENCEBASE);
-
-    loadControlMarkupAction->setEnabled(true);
-
-}
-
-void ExpertDiscoveryView::sl_newSignalReady(DDisc::Signal* signal, CSFolder* folder){
-    Signal* ps = signal;
-    CSFolder *pFolder = folder;
-    ps->setName(pFolder->makeUniqueSignalName().toStdString());
-    pFolder->addSignal(ps);
-    EDProjectItem* pParent = signalsWidget->findEDItem(pFolder);
-    EDPICS* pItem = new EDPICS(ps);
-    signalsWidget->addSubitem(pItem, pParent);
-    signalsWidget->updateSorting();
-}
-void ExpertDiscoveryView::sl_newFolder(const QString& folderName){
-    CSFolder* pFolder = &(signalsWidget->getRootItem());
-    CSFolder* pNewFolder = new CSFolder();
-    if(folderName.isEmpty()){
-        pNewFolder->setName(pFolder->makeUniqueFolderName());
-    }else{
-        pNewFolder->setName(folderName);
-    }
-    if (pFolder->addFolder( pNewFolder ) < 0) {
-        delete pNewFolder;
-        return;
-    }
-    EDPICSFolder* newFol = new EDPICSFolder(pNewFolder);
-    EDProjectItem* pParent = signalsWidget->findEDItem(pFolder);
-    signalsWidget->addSubitem(newFol, pParent);
-    signalsWidget->updateSorting();
-}
-
-void ExpertDiscoveryView::sl_optimizeRecBound(){
-    d.optimizeRecognizationBound();
-    propWidget->updateCurrentProperties();
-}
-
-void ExpertDiscoveryView::sl_setRecBound(){
-    d.setRecBound();
-    propWidget->updateCurrentProperties();
-}
-
-void ExpertDiscoveryView::sl_extractSignals(){
-    Task *tasks = new Task("Extracting signals", TaskFlag_NoRun);
-    ExpertDiscoverySignalExtractorTask *t = new ExpertDiscoverySignalExtractorTask(&d);
-    extrTask = t;
-    connect(t, SIGNAL(si_newSignalReady(DDisc::Signal* , CSFolder* )), SLOT(sl_newSignalReady(DDisc::Signal* , CSFolder* )));
-    connect(t, SIGNAL(si_newFolder(const QString&)), SLOT(sl_newFolder(const QString&)));
-    tasks->addSubTask(t);
-    AppContext::getTaskScheduler()->registerTopLevelTask(tasks);
-}
-
-void ExpertDiscoveryView::sl_treeItemSelChanged(QTreeWidgetItem* tItem){
-
-    if(!tItem){
-        propWidget->sl_treeSelChanged(NULL);
-        return;
-    }
-
-    EDProjectItem* pItem = dynamic_cast<EDProjectItem*>(tItem);
-    if(!pItem){
-        propWidget->sl_treeSelChanged(NULL);
-        curPS = NULL;
-        return;
-    }
-
-    switch(pItem->getType()){
-       case PIT_CS:
-       case PIT_CSN_WORD:
-       case PIT_CSN_INTERVAL:
-       case PIT_CSN_REPETITION:
-       case PIT_CSN_DISTANCE:
-       case PIT_CSN_MRK_ITEM:
-       case PIT_MRK_ITEM:{
-           //check if running!!!!
-           if(curTask){
-               if(curTask->isFinished()){
-                   curTask = new ExpertDiscoveryUpdateSelectionTask(this, tItem);
-                   connect( curTask, SIGNAL( si_stateChanged() ), SLOT( sl_updateTaskFinished() ) );
-                   //signalsWidget->setEnabled(false);
-                   AppContext::getTaskScheduler()->registerTopLevelTask(curTask);
-               }else{
-                    return;
-               }
-           }else{
-               curTask = new ExpertDiscoveryUpdateSelectionTask(this, tItem);
-               connect( curTask, SIGNAL( si_stateChanged() ), SLOT( sl_updateTaskFinished() ) );
-               //signalsWidget->setEnabled(false);
-               AppContext::getTaskScheduler()->registerTopLevelTask(curTask);
-           }
-
-//            ExpertDiscoveryUpdateSelectionTask* t = new ExpertDiscoveryUpdateSelectionTask(this, tItem);
-//            AppContext::getTaskScheduler()->registerTopLevelTask(t);
-
-
-           //            EDPICSNode* pPICSN = dynamic_cast<EDPICSNode*>(pItem);
-           //
-           //            if (curPS == pPICSN->getProcessedSignal(d)) { //to separate process
-           //                updatePS = false;
-           //            }
-           //            else {
-           //                mutex.lock();
-           //                curPS = pPICSN->getProcessedSignal(d);
-           //                updatePS = true;
-           //                mutex.unlock();
-           //            }
-           //
-           //            if (curPS == NULL) {
-           //                updateAnnotations();
-           //                updatePS = false;
-           //                propWidget->sl_treeSelChanged(pItem);
-           //                return;
-           //            }
-           //
-           //            if(updatePS){
-           //                 updateAnnotations();
-           //                 updatePS = false;
-           //            }
-           break;
-                         }
-       default:
-           //mutex.lock();
-           curPS = NULL;
-           propWidget->sl_treeSelChanged(tItem);
-           //mutex.unlock();
-    }
-
-    //
-}
-
-void ExpertDiscoveryView::sl_updateTaskFinished(){
-    ExpertDiscoveryUpdateSelectionTask* task = dynamic_cast<ExpertDiscoveryUpdateSelectionTask*>(sender());
-    if(task && (curTask == task) && task->isFinished()){
-        curTask = NULL;
-    }
-}
-
-void ExpertDiscoveryView::updateAnnotations(){
-
-    if(!currentAdv || !signalsWidget->isEnabled() || signalsWidget->isUpdatingItem()){
-        return;
-    }
-
-    edAutoAnnotationsUpdater->setEDProcSignals(curPS);
-    //AppContext::getAutoAnnotationsSupport()->registerAutoAnnotationsUpdater(edAutoAnnotationsUpdater);
-
-    foreach(ADVSequenceObjectContext* sctx, currentAdv->getSequenceContexts()){
-        AutoAnnotationUtils::triggerAutoAnnotationsUpdate(sctx, "ExpertDiscover Signals");
-    }
-
-    //AppContext::getAutoAnnotationsSupport()->unregisterAutoAnnotationsUpdater(edAutoAnnotationsUpdater);
-}
-
-void ExpertDiscoveryView::createEDSequence(){
-    if(!currentAdv){
-        return;
-    }
-
-    ADVSequenceObjectContext* seqInfocus =  currentAdv->getSequenceInFocus();
-    if(!seqInfocus){
-        return;
-    }
-    U2SequenceObject* dnaSeqObject = seqInfocus->getSequenceObject();
-    const QString& seqName = dnaSeqObject->getSequenceName();
-
-    SequenceType seqType = d.getSequenceTypeByName(seqName);
-
-    if(seqType != UNKNOWN_SEQUENCE && curEDsequence !=NULL){
-        delete curEDsequence;
-        curEDsequence = NULL;
-    }
-
-    switch(seqType){
-        case POSITIVE_SEQUENCE:
-            curEDsequence = new EDPISequence(d.getPosSeqBase(), d.getPosSeqBase().getObjNo(seqName.toStdString().c_str()), d);
-            break;
-
-        case NEGATIVE_SEQUENCE:
-            curEDsequence = new EDPISequence(d.getNegSeqBase(), d.getNegSeqBase().getObjNo(seqName.toStdString().c_str()), d);
-            break;
-
-        case CONTROL_SEQUENCE:
-            curEDsequence = new EDPIControlSequence(d.getConSeqBase(), d.getConSeqBase().getObjNo(seqName.toStdString().c_str()), d);
-            break;
-    }
-
-    updateEDSequenceProperties();
-
-}
-void ExpertDiscoveryView::updateEDSequenceProperties(){
-    if(!curEDsequence){
-        return;
-    }
-    propWidget->sl_treeSelChanged(curEDsequence);
-}
-
-U2SequenceObject* ExpertDiscoveryView::getSeqObjectFromEDSequence(EDPISequence* sItem){
-    U2SequenceObject* dnaSeqObj = NULL;
-    bool seqFound = false;
-    foreach(GObject* obj, edObjects){
-        dnaSeqObj = dynamic_cast<U2SequenceObject*>(obj);
-        if(dnaSeqObj){
-            if(dnaSeqObj->getSequenceName().compare(sItem->getSequenceName(), Qt::CaseInsensitive) == 0){
-                seqFound = true;
-                return dnaSeqObj;
-            }
-        }
-    }
-    if(!seqFound){
-        SequenceType sType = d.getSequenceTypeByName(sItem->getSequenceName());
-        Document* curDoc = NULL;
-        switch(sType){
-            case POSITIVE_SEQUENCE:
-                if(!posUDoc){
-                    posUDoc = createUDocument(sType);
-                    posUDoc->setName("Positive");
-                }
-                curDoc = posUDoc;
-                break;
-            case NEGATIVE_SEQUENCE:
-                if(!negUDoc){
-                    negUDoc = createUDocument(sType);
-                    negUDoc->setName("Negative");
-                }
-                curDoc = negUDoc;
-                break;
-            case CONTROL_SEQUENCE:
-                if(!conUDoc){
-                    conUDoc = createUDocument(sType);
-                    conUDoc->setName("Control");
-                }
-                curDoc = conUDoc;
-                break;
-            default:
-                return NULL;
-        }
-        CHECK(NULL != curDoc, NULL);
-
-        QByteArray seqarray  = QByteArray(sItem->getSequenceCode().toLatin1());
-        DNASequence dnaseq (sItem->getSequenceName(), seqarray);
-        dnaseq.alphabet = AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_EXTENDED());
-        TaskStateInfo stateInfo;
-        U2EntityRef seqRef = U2SequenceUtils::import(curDoc->getDbiRef(), dnaseq, stateInfo);
-        if (stateInfo.isCoR()) {
-            return NULL;
-        }
-        U2SequenceObject* danseqob = new U2SequenceObject(sItem->getSequenceName(), seqRef);
-        curDoc->addObject(danseqob);
-        edObjects.append(danseqob);
-        return danseqob;
-    }
-    return NULL;
-}
-
-Document* ExpertDiscoveryView::createUDocument(SequenceType sType){
-
-    QString baseName = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath("expert_discovery");
-    switch(sType){
-        case POSITIVE_SEQUENCE:
-            baseName.append("_Positive");
-            break;
-        case NEGATIVE_SEQUENCE:
-            baseName.append("_Negative");
-            break;
-        case CONTROL_SEQUENCE:
-            baseName.append("_Control");
-            break;
-    }
-    QString suffix = QString(".fa");
-    baseName.append(suffix);
-    GUrl url(baseName);
-    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(url));
-    DocumentFormat* dformat = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::FASTA);
-    U2OpStatus2Log os;
-    Document* doc = dformat->createNewLoadedDocument(iof, url, os);
-    return doc;
-}
-
-void ExpertDiscoveryView::sl_sequenceItemSelChanged(ADVSequenceWidget* seqWidget){
-    createEDSequence();
-}
-
-void ExpertDiscoveryView::sl_treeWidgetMarkup(bool isLetters){
-    if(isLetters){
-        extractSignalsAction->setEnabled(true);
-    }else{
-        sl_showExpertDiscoveryPosNegMrkDialog();
-    }
-}
-
-void ExpertDiscoveryView::sl_treeWidgetAddMarkup(){
-    ExpertDiscoveryMarkupTask *addToMarkupTask = new ExpertDiscoveryMarkupTask(d, curPS);
-    connect(addToMarkupTask, SIGNAL( si_stateChanged() ), SLOT( sl_updateMarking() ) );
-    AppContext::getTaskScheduler()->registerTopLevelTask(addToMarkupTask);
-}
-
-void ExpertDiscoveryView::sl_generateFullReport(){
-    if(d.getSelectedSignalsContainer().GetSelectedSignals().size() == 0){
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Error"), tr("No signals are selected to generate report"));
-        mb->exec();
-        CHECK(!mb.isNull(), );
-    }else{
-        d.generateRecognitionReportFull();
-    }
-}
-void ExpertDiscoveryView::sl_updateMarking(){
-    ExpertDiscoveryMarkupTask *markuptask = qobject_cast<ExpertDiscoveryMarkupTask*>(sender());
-    if (!markuptask || !markuptask->isFinished()) {
-        return;
-    }
-    signalsWidget->updateMarkup();
-}
-
-void ExpertDiscoveryView::sl_showSequence(){
-    EDPISequence* sItem = dynamic_cast<EDPISequence*>(signalsWidget->currentItem());
-    if(!sItem){
-        return;
-    }
-
-    U2SequenceObject* dnaSeqObj = getSeqObjectFromEDSequence(sItem);
-
-    QList<EDPISequence*> selSeqList = d.getSelectetSequencesList();
-    d.clearSelectedSequencesList();
-    foreach(EDPISequence* curS, selSeqList){
-        signalsWidget->updateItem(curS);
-    }
-    d.addSequenceToSelected(sItem);
-    QList<U2SequenceObject*> listdna;
-    listdna.append(dynamic_cast<U2SequenceObject*>(dnaSeqObj));
-    AnnotatedDNAView* danadv = new AnnotatedDNAView(dnaSeqObj->getSequenceName(),listdna);
-    initADVView(danadv);
-    signalsWidget->updateItem(sItem);
-}
-
-#define MAX_SEQUENCES_COUNT_ON_WIDGET 50
-void ExpertDiscoveryView::sl_addToShown(){
-    EDPISequence* sItem = dynamic_cast<EDPISequence*>(signalsWidget->currentItem());
-    if(!sItem){
-        return;
-    }
-
-    U2SequenceObject* dnaSeqObj = getSeqObjectFromEDSequence(sItem);
-    if(currentAdv){
-        if(currentAdv->getSequenceContexts().size() >= MAX_SEQUENCES_COUNT_ON_WIDGET){
-            return;
-        }
-    }
-    //currentAdv->addObject(dnaSeqObj);
-
-    //auto annotations bug
-
-    d.addSequenceToSelected(sItem);
-    QList<U2SequenceObject*> listdna;
-    listdna.append(dynamic_cast<U2SequenceObject*>(dnaSeqObj));
-    if(currentAdv){
-        foreach(ADVSequenceObjectContext* curSoc, currentAdv->getSequenceContexts()){
-            listdna.append(curSoc->getSequenceObject());
-        }
-    }
-    AnnotatedDNAView* danadv = new AnnotatedDNAView(dnaSeqObj->getSequenceName(),listdna);
-    initADVView(danadv);
-    signalsWidget->updateItem(sItem);
-
-}
-#define MAX_SEQUENCES_COUNT_TO_ONCE_DISPLAY 25
-void ExpertDiscoveryView::sl_showFirstSequences(){
-    EDPISequenceBase* sItem = dynamic_cast<EDPISequenceBase*>(signalsWidget->currentItem());
-    if(!sItem){
-        return;
-    }
-
-    clearSequencesView();
-    QList<EDPISequence*> selSeqList = d.getSelectetSequencesList();
-    d.clearSelectedSequencesList();
-    foreach(EDPISequence* curS, selSeqList){
-        signalsWidget->updateItem(curS);
-    }
-
-    const SequenceBase& seqBase = sItem->getSequenceBase();
-    int baseSize = seqBase.getSize();
-    int widgetItemsCount = baseSize < MAX_SEQUENCES_COUNT_TO_ONCE_DISPLAY ? baseSize : MAX_SEQUENCES_COUNT_TO_ONCE_DISPLAY;
-
-    QList<U2SequenceObject*> listdna;
-
-    for(int i = 0; i < widgetItemsCount; i++){
-        QTreeWidgetItem* tItem = sItem->child(i);
-        EDPISequence* pItemSequence = dynamic_cast<EDPISequence*>(tItem);
-        if(!pItemSequence){
-            continue;
-        }
-        U2SequenceObject* dnaSeqObj = getSeqObjectFromEDSequence(pItemSequence);
-        d.addSequenceToSelected(pItemSequence);
-        signalsWidget->updateItem(pItemSequence);
-        listdna.append(dynamic_cast<U2SequenceObject*>(dnaSeqObj));
-    }
-
-
-    AnnotatedDNAView* danadv = new AnnotatedDNAView("Base",listdna);
-    initADVView(danadv);
-
-}
-void ExpertDiscoveryView::sl_clearDisplayed(){
-    clearSequencesView();
-    QList<EDPISequence*> selSeqList = d.getSelectetSequencesList();
-    d.clearSelectedSequencesList();
-    foreach(EDPISequence* curS, selSeqList){
-        signalsWidget->updateItem(curS);
-    }
-}
-
-void ExpertDiscoveryView::clearSequencesView()
-{
-    if(currentAdv){
-        foreach(ADVSequenceObjectContext* sctx, currentAdv->getSequenceContexts()){
-            AutoAnnotationsADVAction* aaAction = AutoAnnotationUtils::findAutoAnnotationADVAction( sctx );
-            assert(aaAction);
-            AutoAnnotationObject* aaobj = aaAction->getAAObj();
-            assert(aaobj);
-            disconnect(aaobj, SIGNAL(si_updateStarted()),this,  SLOT(sl_autoAnnotationUpdateStarted()));
-            disconnect(aaobj, SIGNAL(si_updateFinshed()), this, SLOT(sl_autoAnnotationUpdateFinished()));
-        }
-        disconnect(currentAdv, SIGNAL( si_focusChanged(ADVSequenceWidget*, ADVSequenceWidget*) ), this,  SLOT( sl_sequenceItemSelChanged(ADVSequenceWidget*) ));
-        foreach(GObject* obj, objects){
-            removeObject(obj);
-        }
-
-        delete currentAdv->getWidget();
-        delete currentAdv;
-        currentAdv = NULL;
-    }
-}
-
-ExpertDiscoveryViewWindow::ExpertDiscoveryViewWindow(GObjectView* view, const QString& viewName, bool persistent)
-:GObjectViewWindow(view, viewName, persistent){
-
-}
-void ExpertDiscoveryViewWindow::setupMDIToolbar(QToolBar* tb){
-    ExpertDiscoveryView* curEdView = dynamic_cast<ExpertDiscoveryView*>(view);
-    assert(curEdView);
-    tb->addAction(curEdView->getNewDocAction());
-    tb->addAction(curEdView->getOpenDocAction());
-    tb->addAction(curEdView->getSaveDocAction());
-    tb->addSeparator();
-    tb->addAction(curEdView->getLoadMarkupAction());
-    tb->addSeparator();
-    tb->addAction(curEdView->getLoadControlSeqAction());
-    tb->addAction(curEdView->getLoadControlMarkupAction());
-    tb->addSeparator();
-    tb->addAction(curEdView->getExtractSignalsAction());
-    tb->addSeparator();
-    tb->addAction(curEdView->getSetUpRecBoundAction());
-    //tb->addAction(curEdView->getOptimizeRecBoundAction());
-    tb->addSeparator();
-    tb->addAction(curEdView->getGenerateFullReportAction());
-
-}
-
-bool ExpertDiscoveryViewWindow::onCloseEvent(){
-    ExpertDiscoveryView* curEdView = dynamic_cast<ExpertDiscoveryView*>(view);
-    assert(curEdView);
-    Task* t = curEdView->getExtractTask();
-    if(t && (t->isRunning())){
-        QObjectScopedPointer<QMessageBox> mb = new QMessageBox(QMessageBox::Critical, tr("Closing error"), tr("There are unfinished extracting tasks. Cancel them before closing"));
-        mb->exec();
-        return false;
-    }
-    if(curEdView->askForSave()){
-        curEdView->getSaveDocAction()->trigger();
-        return false;
-    }
-
-    return true;
-}
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryView.h b/src/plugins/expert_discovery/src/ExpertDiscoveryView.h
deleted file mode 100644
index 3f637d5..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryView.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/**
- * 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 _EXPERT_DISCOVERY_VIEW_H_
-#define _EXPERT_DISCOVERY_VIEW_H_
-
-#include "ExpertDiscoveryData.h"
-#include "ExpertDiscoveryTreeWidgetsCtrl.h"
-#include "ExpertDiscoveryPropTable.h"
-
-#include <U2View/AnnotatedDNAView.h>
-#include <U2View/ADVSplitWidget.h>
-#include <U2Core/AutoAnnotationsSupport.h>
-
-#include <U2Gui/MainWindow.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QToolBar>
-#include <QTreeWidget>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QToolBar>
-#include <QtWidgets/QTreeWidget>
-#endif
-
-namespace U2{
-class ExpertDiscoverySignalsAutoAnnotationUpdater;
-class ExpertDiscoveryUpdateSelectionTask;
-
-class ExpertDiscoveryView : public GObjectView{
-    Q_OBJECT
-
-public:
-    ExpertDiscoveryView(GObjectViewFactoryId factoryId, const QString& viewName, QObject* p=NULL);
-    virtual ~ExpertDiscoveryView();
-    void insertSeqView(QWidget* view);
-
-    //view content
-    QAction* getNewDocAction(){return newDoc;}
-    QAction* getOpenDocAction(){return openDoc;}
-    QAction* getSaveDocAction(){return saveDoc;}
-    QAction* getSetUpRecBoundAction(){return setUpRecBound;}
-    QAction* getOptimizeRecBoundAction(){return optimizeRecBound;}
-    QAction* getLoadControlSeqAction(){return loadControlSeqAction;}
-    QAction* getExtractSignalsAction(){return extractSignalsAction;}
-    QAction* getLoadControlMarkupAction(){return loadControlMarkupAction;}
-    QAction* getGenerateFullReportAction(){return generateFullReportAction;}
-    Task*    getExtractTask(){return extrTask;}
-
-    QAction* getLoadMarkupAction(){return loadMarkupAction;}
-    QList<GObject*> getEDObjects() {return edObjects;}
-
-    EDProjectTree* getProjectTree() {return signalsWidget;}
-    EDPropertiesTable* getPropertiesWidget() {return  propWidget;}
-    AnnotatedDNAView* getCurrentAdv() {return currentAdv;}
-    ExpertDiscoveryData& getExpertDiscoveryData(){return d;}
-    ExpertDiscoverySignalsAutoAnnotationUpdater* getAutoAnnotationUpdater() {return edAutoAnnotationsUpdater;}
-    const EDProcessedSignal* getCurrentProcessedSignals(){return curPS;}
-    void setProcessedSignals(const EDProcessedSignal* PS){curPS = PS;}
-
-    bool askForSave();
-
-
-private slots:
-    void sl_showExpertDiscoveryControlMrkDialog();
-    void sl_loadControlMrkTaskStateChanged();
-
-    void sl_newDoc();
-
-    void sl_openDoc();
-    void sl_saveDoc();
-    void sl_showExpertDiscoveryPosNegDialog();
-    void sl_loadPosNegTaskStateChanged();
-
-    void sl_showExpertDiscoveryPosNegMrkDialog();
-    void sl_loadPosNegMrkTaskStateChanged();
-
-    void sl_showExpertDiscoveryControlDialog();
-    void sl_loadControlTaskStateChanged();
-
-    void sl_setRecBound();
-    void sl_extractSignals();
-    void sl_optimizeRecBound();
-    void sl_generateFullReport();
-    void sl_newSignalReady(DDisc::Signal* signal, CSFolder* folder);
-    void sl_newFolder(const QString& folderName);
-    void sl_treeItemSelChanged(QTreeWidgetItem* tItem);
-    void sl_updateTaskFinished();
-    void sl_treeWidgetMarkup(bool isLetters);
-    void sl_treeWidgetAddMarkup();
-    void sl_updateMarking();
-
-    void sl_showSequence();
-    void sl_addToShown();
-    void sl_showFirstSequences();
-    void sl_clearDisplayed();
-
-    void clearSequencesView();
-    void sl_updateAll();
-
-    void sl_search();
-
-    void sl_autoAnnotationUpdateStarted();
-    void sl_autoAnnotationUpdateFinished();
-
-    void sl_sequenceItemSelChanged(ADVSequenceWidget*);
-    void sl_newViewTask(Task* t);
-    void sl_testView();
-
-    //void sl_propChanged(QTreeWidgetItem* item);
-
-protected:
-    virtual void onObjectAdded(GObject* o){
-        //add implementation
-    }
-
-private:
-
-    virtual QWidget* createWidget();
-    void createActions();
-    void initADVView(AnnotatedDNAView* adv);
-    void updateAnnotations();
-
-    void createEDSequence();
-    void updateEDSequenceProperties();
-    U2SequenceObject* getSeqObjectFromEDSequence(EDPISequence* sItem);
-    Document* createUDocument(SequenceType sType);
-
-    bool wizzard;
-    int updatesCount;
-
-    QSplitter*          splitter;
-
-    EDProjectTree*      signalsWidget;
-    EDPropertiesTable*  propWidget;
-    AnnotatedDNAView*   currentAdv;
-
-    ExpertDiscoveryData d;
-
-    QAction*            newDoc;
-    QAction*            openDoc;
-    QAction*            saveDoc;
-    QAction*            setUpRecBound;
-    QAction*            optimizeRecBound;
-    QAction*            loadControlSeqAction;
-    QAction*            extractSignalsAction;
-    QAction*            loadMarkupAction;
-    QAction*            loadControlMarkupAction;
-    QAction*            generateFullReportAction;
-
-    QList<GObject*>     edObjects;
-    EDPISequence*       curEDsequence;
-
-    Document*           posUDoc;
-    Document*           negUDoc;
-    Document*           conUDoc;
-
-    Task*               extrTask;
-
-    ExpertDiscoverySignalsAutoAnnotationUpdater* edAutoAnnotationsUpdater;
-
-    const EDProcessedSignal*    curPS;
-    bool                        updatePS;
-
-    QMutex                      mutex;
-    ExpertDiscoveryUpdateSelectionTask* curTask;
-
-signals:
-    void si_insertSeqGObjects(const QList<GObject*>& objects);
-};
-
-class ExpertDiscoveryViewWindow : public GObjectViewWindow{
-    Q_OBJECT
-public:
-    ExpertDiscoveryViewWindow(GObjectView* view, const QString& viewName, bool persistent = false);
-    virtual void setupMDIToolbar(QToolBar* tb);
-protected:
-    bool onCloseEvent();
-
-};
-
-} // namespace
-
-#endif // _EXPERT_DISCOVERY_VIEW_H_
-
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryViewCtx.cpp b/src/plugins/expert_discovery/src/ExpertDiscoveryViewCtx.cpp
deleted file mode 100644
index 645df46..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryViewCtx.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#include "ExpertDiscoveryViewCtx.h"
-
-#include <U2View/ADVUtils.h>
-#include <U2View/AnnotatedDNAView.h>
-#include <U2View/AnnotatedDNAViewFactory.h>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/ProjectModel.h>
-
-
-namespace U2{
-
-ExpertDiscoveryViewCtx::ExpertDiscoveryViewCtx(QObject* p):GObjectViewWindowContext(p, AnnotatedDNAViewFactory::ID){
-
-}
-void ExpertDiscoveryViewCtx::initViewContext(GObjectView* view){
-
-    AnnotatedDNAView* av = qobject_cast<AnnotatedDNAView*>(view);
-    if(av){
-        foreach(ExpertDiscoveryView* v, viewList){
-//            v->insertSeqView(av);
-        }
-    }
-//     ADVGlobalAction* a = new ADVGlobalAction(av,
-//         QIcon(":query_designer/images/query_designer.png"),
-//         tr("Analyze with query schema..."), 50, ADVGlobalActionFlag_AddToAnalyseMenu);
-    //connect(a, SIGNAL(triggered()), SLOT(sl_showDialog()));
-
-}
-
-bool ExpertDiscoveryViewCtx::canHandle(GObjectView* v, GObject* obj){
-    if(v->getFactoryId() == "ED"){
-        return true;
-    }
-    else{
-        return false;
-    }
-}
-
-void ExpertDiscoveryViewCtx::addView(ExpertDiscoveryView* v){
-    viewList.append(v);
-}
-
-// void ExpertDiscoveryViewCtx::sl_windowAdded(MWMDIWindow* wind){
-//
-//     int a = 1;
-//     if(wind->getWindowName()!="Expert Discovery"){
-//         foreach(ExpertDiscoveryView* v, viewList){
-//             //v->insertSeqView(wind);
-//         }
-//     }
-// }
-
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ExpertDiscoveryViewCtx.h b/src/plugins/expert_discovery/src/ExpertDiscoveryViewCtx.h
deleted file mode 100644
index 6426f2d..0000000
--- a/src/plugins/expert_discovery/src/ExpertDiscoveryViewCtx.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#pragma once
-
-#include "ExpertDiscoveryView.h"
-
-#include <U2Gui/ObjectViewModel.h>
-
-namespace U2{
-
-class ExpertDiscoveryViewCtx: public GObjectViewWindowContext{
-    Q_OBJECT
-
-public:
-    ExpertDiscoveryViewCtx(QObject* p);
-    virtual bool canHandle(GObjectView* v, GObject* obj);
-
-    void addView(ExpertDiscoveryView* v);
-
-protected:
-    virtual void initViewContext(GObjectView* view);
-
-// protected slots:
-//     virtual void sl_windowAdded(MWMDIWindow*);
-
-private:
-
-
-
-    QList<ExpertDiscoveryView*> viewList;
-};
-
-}//namespace
diff --git a/src/plugins/expert_discovery/src/ui/ExpertDiscoveryAdvSetDialog.ui b/src/plugins/expert_discovery/src/ui/ExpertDiscoveryAdvSetDialog.ui
deleted file mode 100644
index 311efc9..0000000
--- a/src/plugins/expert_discovery/src/ui/ExpertDiscoveryAdvSetDialog.ui
+++ /dev/null
@@ -1,208 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ExpertDiscoveryAdvSetDialog</class>
- <widget class="QDialog" name="ExpertDiscoveryAdvSetDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>343</width>
-    <height>341</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Advanced Extract Parameters</string>
-  </property>
-  <property name="modal">
-   <bool>true</bool>
-  </property>
-  <widget class="QDialogButtonBox" name="buttonBox">
-   <property name="geometry">
-    <rect>
-     <x>-10</x>
-     <y>310</y>
-     <width>341</width>
-     <height>32</height>
-    </rect>
-   </property>
-   <property name="orientation">
-    <enum>Qt::Horizontal</enum>
-   </property>
-   <property name="standardButtons">
-    <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-   </property>
-  </widget>
-  <widget class="QWidget" name="verticalLayoutWidget">
-   <property name="geometry">
-    <rect>
-     <x>9</x>
-     <y>9</y>
-     <width>321</width>
-     <height>291</height>
-    </rect>
-   </property>
-   <layout class="QVBoxLayout" name="verticalLayout">
-    <item>
-     <widget class="QGroupBox" name="groupBox">
-      <property name="title">
-       <string>Branch bounds</string>
-      </property>
-      <widget class="QWidget" name="">
-       <property name="geometry">
-        <rect>
-         <x>10</x>
-         <y>14</y>
-         <width>301</width>
-         <height>100</height>
-        </rect>
-       </property>
-       <layout class="QGridLayout" name="gridLayout">
-        <item row="1" column="0">
-         <widget class="QLabel" name="label_2">
-          <property name="text">
-           <string>Fisher criteria level</string>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="1">
-         <widget class="QLineEdit" name="fishCritEdit"/>
-        </item>
-        <item row="0" column="0">
-         <widget class="QLabel" name="label">
-          <property name="text">
-           <string>Condition probability level</string>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="0">
-         <widget class="QLabel" name="label_3">
-          <property name="text">
-           <string>Minimal complexity</string>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="0">
-         <widget class="QLabel" name="label_4">
-          <property name="text">
-           <string>Maximal complexity</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1">
-         <widget class="QLineEdit" name="condProbEdit"/>
-        </item>
-        <item row="2" column="1">
-         <widget class="QLineEdit" name="minComplexEdit"/>
-        </item>
-        <item row="3" column="1">
-         <widget class="QLineEdit" name="maxComplEdit"/>
-        </item>
-       </layout>
-      </widget>
-     </widget>
-    </item>
-    <item>
-     <widget class="QCheckBox" name="checkCorrel">
-      <property name="text">
-       <string>Check for distance argument correlation</string>
-      </property>
-     </widget>
-    </item>
-    <item>
-     <widget class="QGroupBox" name="groupBox_2">
-      <property name="title">
-       <string>Disrance argument correlation bounds</string>
-      </property>
-      <widget class="QWidget" name="gridLayoutWidget_2">
-       <property name="geometry">
-        <rect>
-         <x>10</x>
-         <y>10</y>
-         <width>301</width>
-         <height>121</height>
-        </rect>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_2">
-        <item row="2" column="1">
-         <widget class="QLineEdit" name="minCorNegEdit"/>
-        </item>
-        <item row="3" column="1">
-         <widget class="QLineEdit" name="maxCorNegEdit"/>
-        </item>
-        <item row="2" column="0">
-         <widget class="QLabel" name="label_7">
-          <property name="text">
-           <string>Min. correlation on negative</string>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="0">
-         <widget class="QLabel" name="label_8">
-          <property name="text">
-           <string>Max. correlation on negative</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="0">
-         <widget class="QLabel" name="label_5">
-          <property name="text">
-           <string>Min. correlation on positive</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1">
-         <widget class="QLineEdit" name="minCorPosEdit"/>
-        </item>
-        <item row="1" column="1">
-         <widget class="QLineEdit" name="maxCorPosEdit"/>
-        </item>
-        <item row="1" column="0">
-         <widget class="QLabel" name="label_6">
-          <property name="text">
-           <string>Max. correlation on positive</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </widget>
-     </widget>
-    </item>
-   </layout>
-  </widget>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>ExpertDiscoveryAdvSetDialog</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>ExpertDiscoveryAdvSetDialog</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/expert_discovery/src/ui/ExpertDiscoveryControlDialog.ui b/src/plugins/expert_discovery/src/ui/ExpertDiscoveryControlDialog.ui
deleted file mode 100644
index 965e01d..0000000
--- a/src/plugins/expert_discovery/src/ui/ExpertDiscoveryControlDialog.ui
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ExpertDiscoveryControlDialog</class>
- <widget class="QDialog" name="ExpertDiscoveryControlDialog">
-  <property name="windowModality">
-   <enum>Qt::ApplicationModal</enum>
-  </property>
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>426</width>
-    <height>156</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Maximum" vsizetype="Minimum">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Load Control Sequences</string>
-  </property>
-  <property name="windowIcon">
-   <iconset>
-    <normaloff>:/repeat_finder/repeats_image</normaloff>:/repeat_finder/repeats_image</iconset>
-  </property>
-  <property name="modal">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="3" column="0">
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>File with control sequences</string>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="1" colspan="2">
-      <widget class="QLineEdit" name="firstFileEdit"/>
-     </item>
-     <item row="3" column="3">
-      <widget class="QToolButton" name="openFirstButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="0" colspan="4">
-      <widget class="QLabel" name="label">
-       <property name="text">
-        <string>You may load any sequence file to recognize your complex signals on the sequences.</string>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="0">
-      <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 row="1" column="0" colspan="4">
-      <widget class="Line" name="line">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>5</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>
- <tabstops>
-  <tabstop>firstFileEdit</tabstop>
-  <tabstop>openFirstButton</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>ExpertDiscoveryControlDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>212</x>
-     <y>135</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>212</x>
-     <y>77</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>ExpertDiscoveryControlDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>212</x>
-     <y>135</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>212</x>
-     <y>77</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/expert_discovery/src/ui/ExpertDiscoveryControlMrkDialog.ui b/src/plugins/expert_discovery/src/ui/ExpertDiscoveryControlMrkDialog.ui
deleted file mode 100644
index 90d7bb4..0000000
--- a/src/plugins/expert_discovery/src/ui/ExpertDiscoveryControlMrkDialog.ui
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ExpertDiscoveryControlMrkDialog</class>
- <widget class="QDialog" name="ExpertDiscoveryControlMrkDialog">
-  <property name="windowModality">
-   <enum>Qt::ApplicationModal</enum>
-  </property>
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>473</width>
-    <height>84</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Maximum" vsizetype="Minimum">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Load Control sequences markup</string>
-  </property>
-  <property name="windowIcon">
-   <iconset>
-    <normaloff>:/repeat_finder/repeats_image</normaloff>:/repeat_finder/repeats_image</iconset>
-  </property>
-  <property name="modal">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0">
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>File with control sequences markup</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="2">
-      <widget class="QLineEdit" name="firstFileEdit"/>
-     </item>
-     <item row="0" column="3">
-      <widget class="QToolButton" name="openFirstButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>5</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>
- <tabstops>
-  <tabstop>firstFileEdit</tabstop>
-  <tabstop>openFirstButton</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>ExpertDiscoveryControlMrkDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>236</x>
-     <y>66</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>236</x>
-     <y>41</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>ExpertDiscoveryControlMrkDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>236</x>
-     <y>66</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>236</x>
-     <y>41</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/expert_discovery/src/ui/ExpertDiscoveryPosNegDialog.ui b/src/plugins/expert_discovery/src/ui/ExpertDiscoveryPosNegDialog.ui
deleted file mode 100644
index b2c25b7..0000000
--- a/src/plugins/expert_discovery/src/ui/ExpertDiscoveryPosNegDialog.ui
+++ /dev/null
@@ -1,233 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ExpertDiscoveryPosNegDialog</class>
- <widget class="QDialog" name="ExpertDiscoveryPosNegDialog">
-  <property name="windowModality">
-   <enum>Qt::ApplicationModal</enum>
-  </property>
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>509</width>
-    <height>383</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Maximum" vsizetype="Minimum">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Load Positive and Negative Sequence Bases</string>
-  </property>
-  <property name="windowIcon">
-   <iconset>
-    <normaloff>:/repeat_finder/repeats_image</normaloff>:/repeat_finder/repeats_image</iconset>
-  </property>
-  <property name="modal">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="3" column="0">
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>Positive sequences file</string>
-       </property>
-       <property name="buddy">
-        <cstring>firstFileEdit</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="1" colspan="2">
-      <widget class="QLineEdit" name="firstFileEdit"/>
-     </item>
-     <item row="3" column="3">
-      <widget class="QToolButton" name="openFirstButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-     <item row="4" column="0">
-      <spacer name="verticalSpacer_3">
-       <property name="orientation">
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>20</width>
-         <height>18</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item row="5" column="0" colspan="2">
-      <widget class="QCheckBox" name="oneSequenceCheckBox">
-       <property name="text">
-        <string>Generate negative sequences</string>
-       </property>
-      </widget>
-     </item>
-     <item row="7" column="0">
-      <spacer name="verticalSpacer_2">
-       <property name="orientation">
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>20</width>
-         <height>18</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item row="8" column="0">
-      <widget class="QLabel" name="label_3">
-       <property name="text">
-        <string>Negative sequences file</string>
-       </property>
-       <property name="buddy">
-        <cstring>secondFileEdit</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="8" column="1" colspan="2">
-      <widget class="QLineEdit" name="secondFileEdit">
-       <property name="enabled">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="8" column="3">
-      <widget class="QToolButton" name="openSecondButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="0" colspan="4">
-      <widget class="QLabel" name="instructionLabel">
-       <property name="text">
-        <string>This is the first step of creating a new ExpertDiscovery project.
-Load the sequences you want to analyze by choosing any file with a sequence or multiple sequences.
-
-Positive sequence base contains a regulation object you are interested in.
-Negative sequence base doesn't have it. 
-You also may generate negative sequences automatically.
-
-ExpertDiscovery will extract complex signals which reflect a structure of your regulation object. 
-The more sequences you provide the better will be the result</string>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="0">
-      <spacer name="verticalSpacer_4">
-       <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 row="1" column="0" colspan="4">
-      <widget class="Line" name="line">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="6" column="0">
-      <widget class="QLabel" name="label">
-       <property name="text">
-        <string>Negatives per positive amount:</string>
-       </property>
-      </widget>
-     </item>
-     <item row="6" column="1">
-      <widget class="QSpinBox" name="negPerPositivespinBox">
-       <property name="minimum">
-        <number>1</number>
-       </property>
-       <property name="maximum">
-        <number>100000</number>
-       </property>
-       <property name="value">
-        <number>100</number>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>5</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>
- <tabstops>
-  <tabstop>openFirstButton</tabstop>
-  <tabstop>firstFileEdit</tabstop>
-  <tabstop>oneSequenceCheckBox</tabstop>
-  <tabstop>openSecondButton</tabstop>
-  <tabstop>secondFileEdit</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>ExpertDiscoveryPosNegDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>254</x>
-     <y>362</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>254</x>
-     <y>191</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>ExpertDiscoveryPosNegDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>254</x>
-     <y>362</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>254</x>
-     <y>191</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/expert_discovery/src/ui/ExpertDiscoveryPosNegMrkDialog.ui b/src/plugins/expert_discovery/src/ui/ExpertDiscoveryPosNegMrkDialog.ui
deleted file mode 100644
index f5bf555..0000000
--- a/src/plugins/expert_discovery/src/ui/ExpertDiscoveryPosNegMrkDialog.ui
+++ /dev/null
@@ -1,204 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ExpertDiscoveryPosNegMrkDialog</class>
- <widget class="QDialog" name="ExpertDiscoveryPosNegMrkDialog">
-  <property name="windowModality">
-   <enum>Qt::ApplicationModal</enum>
-  </property>
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>445</width>
-    <height>303</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Maximum" vsizetype="Minimum">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Positive and Negative Sequences Markup</string>
-  </property>
-  <property name="windowIcon">
-   <iconset>
-    <normaloff>:/repeat_finder/repeats_image</normaloff>:/repeat_finder/repeats_image</iconset>
-  </property>
-  <property name="modal">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="3" column="0">
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>Positive sequences markup file</string>
-       </property>
-       <property name="buddy">
-        <cstring>firstFileEdit</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="1" colspan="2">
-      <widget class="QLineEdit" name="firstFileEdit"/>
-     </item>
-     <item row="3" column="3">
-      <widget class="QToolButton" name="openFirstButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-     <item row="8" column="0">
-      <widget class="QCheckBox" name="oneSequenceCheckBox">
-       <property name="text">
-        <string>Generate description file</string>
-       </property>
-      </widget>
-     </item>
-     <item row="6" column="3">
-      <widget class="QToolButton" name="openSecondButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-     <item row="6" column="1" colspan="2">
-      <widget class="QLineEdit" name="secondFileEdit">
-       <property name="enabled">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="6" column="0">
-      <widget class="QLabel" name="label_3">
-       <property name="text">
-        <string>Negative sequences markup file</string>
-       </property>
-       <property name="buddy">
-        <cstring>secondFileEdit</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="9" column="0">
-      <widget class="QLabel" name="label_4">
-       <property name="text">
-        <string>Description file</string>
-       </property>
-       <property name="buddy">
-        <cstring>thirdFileEdit</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="9" column="1">
-      <widget class="QLineEdit" name="thirdFileEdit">
-       <property name="enabled">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="9" column="3">
-      <widget class="QToolButton" name="openThirdButton">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-     <item row="7" column="0">
-      <widget class="QCheckBox" name="addToCurrentCheck">
-       <property name="text">
-        <string>Append to Current Markup</string>
-       </property>
-       <property name="checked">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="0" colspan="4">
-      <widget class="QLabel" name="instructionLabel">
-       <property name="text">
-        <string>On this step you need to load markups for the sequences. 
-Markaup is an annotation of a sequence with elementary signals.
-Markup gives information where elementary signals are located in the sequences.
-
-Complex signals will be build from the elementary signals and operations applied to them. 
-
-Load markup for your sequences in specified XML format or genbank format.</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0" colspan="4">
-      <widget class="Line" name="line">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="0" colspan="4">
-      <widget class="QCheckBox" name="lettersCheck">
-       <property name="text">
-        <string>Nucleotides Markup</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <tabstops>
-  <tabstop>lettersCheck</tabstop>
-  <tabstop>openFirstButton</tabstop>
-  <tabstop>firstFileEdit</tabstop>
-  <tabstop>openSecondButton</tabstop>
-  <tabstop>secondFileEdit</tabstop>
-  <tabstop>addToCurrentCheck</tabstop>
-  <tabstop>openThirdButton</tabstop>
-  <tabstop>thirdFileEdit</tabstop>
-  <tabstop>oneSequenceCheckBox</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>ExpertDiscoveryPosNegMrkDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>222</x>
-     <y>282</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>222</x>
-     <y>151</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>ExpertDiscoveryPosNegMrkDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>222</x>
-     <y>282</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>222</x>
-     <y>151</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/expert_discovery/src/ui/ExpertDiscoverySearchDialog.ui b/src/plugins/expert_discovery/src/ui/ExpertDiscoverySearchDialog.ui
deleted file mode 100644
index b4dbe67..0000000
--- a/src/plugins/expert_discovery/src/ui/ExpertDiscoverySearchDialog.ui
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ExpertDiscoverySearchDialog</class>
- <widget class="QDialog" name="ExpertDiscoverySearchDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>264</width>
-    <height>414</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>ExpertDiscovery Search Window</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_3">
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0">
-      <widget class="QLabel" name="label_2">
-       <property name="toolTip">
-        <string/>
-       </property>
-       <property name="text">
-        <string>Recognition Bound</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QDoubleSpinBox" name="scoreSpinBox">
-       <property name="maximum">
-        <double>999.990000000000009</double>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_8" stretch="1,1">
-     <item>
-      <widget class="QGroupBox" name="bgStrand">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="title">
-        <string>Strand</string>
-       </property>
-       <layout class="QVBoxLayout" name="verticalLayout_2">
-        <item>
-         <widget class="QRadioButton" name="rbBoth">
-          <property name="text">
-           <string>Both</string>
-          </property>
-          <property name="checked">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QRadioButton" name="rbDirect">
-          <property name="toolTip">
-           <string/>
-          </property>
-          <property name="whatsThis">
-           <string>strand_direct_wit</string>
-          </property>
-          <property name="text">
-           <string>Direct</string>
-          </property>
-          <property name="shortcut">
-           <string/>
-          </property>
-          <property name="checked">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QRadioButton" name="rbComplement">
-          <property name="toolTip">
-           <string/>
-          </property>
-          <property name="whatsThis">
-           <string>strand_complement_wit</string>
-          </property>
-          <property name="text">
-           <string>Complement</string>
-          </property>
-          <property name="shortcut">
-           <string/>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item>
-      <layout class="QHBoxLayout" name="rangeSelectorLayout"/>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QTreeWidget" name="resultsTree">
-     <property name="rootIsDecorated">
-      <bool>false</bool>
-     </property>
-     <property name="sortingEnabled">
-      <bool>true</bool>
-     </property>
-     <column>
-      <property name="text">
-       <string>range</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>strand</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>score</string>
-      </property>
-     </column>
-    </widget>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_3">
-     <item>
-      <widget class="QPushButton" name="pbClear">
-       <property name="text">
-        <string>Clear Results</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="pbSaveAnnotations">
-       <property name="text">
-        <string>Save As Annotation</string>
-       </property>
-      </widget>
-     </item>
-     <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>
-    </layout>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_7">
-     <item>
-      <widget class="QLabel" name="statusLabel">
-       <property name="text">
-        <string>Status</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins/expert_discovery/src/ui/ExpertDiscoverySetupRecBoundDialog.ui b/src/plugins/expert_discovery/src/ui/ExpertDiscoverySetupRecBoundDialog.ui
deleted file mode 100644
index 5dec324..0000000
--- a/src/plugins/expert_discovery/src/ui/ExpertDiscoverySetupRecBoundDialog.ui
+++ /dev/null
@@ -1,390 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EDSetupRecBoundDlg</class>
- <widget class="QDialog" name="EDSetupRecBoundDlg">
-  <property name="windowModality">
-   <enum>Qt::ApplicationModal</enum>
-  </property>
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>637</width>
-    <height>503</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Setup Recognition Bound</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <item row="6" column="0" colspan="2">
-    <widget class="QGroupBox" name="groupBox_2">
-     <property name="title">
-      <string>Recognition Graph</string>
-     </property>
-     <layout class="QGridLayout" name="gridLayout_3">
-      <item row="0" column="1">
-       <layout class="QHBoxLayout" name="graphLayout">
-        <property name="sizeConstraint">
-         <enum>QLayout::SetDefaultConstraint</enum>
-        </property>
-       </layout>
-      </item>
-      <item row="1" column="1">
-       <widget class="QLabel" name="label">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="font">
-         <font>
-          <weight>75</weight>
-          <bold>true</bold>
-         </font>
-        </property>
-        <property name="text">
-         <string>Score</string>
-        </property>
-        <property name="alignment">
-         <set>Qt::AlignCenter</set>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="0">
-       <widget class="QLabel" name="label_2">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="font">
-         <font>
-          <weight>75</weight>
-          <bold>true</bold>
-         </font>
-        </property>
-        <property name="text">
-         <string>P
-r
-o
-b
-a
-b
-i
-l
-i
-t
-y
-</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="4" column="0" colspan="2">
-    <widget class="QGroupBox" name="groupBox">
-     <property name="title">
-      <string>Information</string>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2">
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_3">
-        <item>
-         <widget class="QLabel" name="er2Label">
-          <property name="text">
-           <string>Probability of negative sequence recognition:</string>
-          </property>
-          <property name="buddy">
-           <cstring>negRecLineEdit</cstring>
-          </property>
-         </widget>
-        </item>
-        <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="QLineEdit" name="negRecLineEdit">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="readOnly">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_2">
-        <item>
-         <widget class="QLabel" name="er1Lable">
-          <property name="text">
-           <string>Probability of positive sequence rejection:        </string>
-          </property>
-          <property name="buddy">
-           <cstring>posRecLineEdit</cstring>
-          </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>
-        <item>
-         <widget class="QLineEdit" name="posRecLineEdit">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="readOnly">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="3" column="0">
-    <widget class="QPushButton" name="optimizeRecognitionBoundButton">
-     <property name="text">
-      <string>Optimize Recognition Bound</string>
-     </property>
-    </widget>
-   </item>
-   <item row="3" column="1">
-    <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="1" column="0" colspan="2">
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <item>
-      <widget class="QLabel" name="boundLabel">
-       <property name="text">
-        <string>Recognition Bound:</string>
-       </property>
-       <property name="buddy">
-        <cstring>recBoundSpinBox</cstring>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QDoubleSpinBox" name="recBoundSpinBox">
-       <property name="enabled">
-        <bool>true</bool>
-       </property>
-       <property name="prefix">
-        <string/>
-       </property>
-       <property name="decimals">
-        <number>3</number>
-       </property>
-       <property name="maximum">
-        <double>9999.000000000000000</double>
-       </property>
-       <property name="singleStep">
-        <double>0.100000000000000</double>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item row="8" column="0" colspan="2">
-    <layout class="QGridLayout" name="gridLayout_2">
-     <item row="0" column="0">
-      <widget class="QLabel" name="label_4">
-       <property name="text">
-        <string>Minimum Bound:</string>
-       </property>
-       <property name="buddy">
-        <cstring>minBoundSpin</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QSpinBox" name="minBoundSpin">
-       <property name="maximum">
-        <number>999</number>
-       </property>
-      </widget>
-     </item>
-     <item row="0" 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>
-     <item row="0" column="5">
-      <widget class="QLabel" name="label_5">
-       <property name="text">
-        <string>Maximum Bound:</string>
-       </property>
-       <property name="buddy">
-        <cstring>maxBoundSpin</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="6">
-      <widget class="QSpinBox" name="maxBoundSpin">
-       <property name="maximum">
-        <number>999</number>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="2">
-      <widget class="QLabel" name="label_6">
-       <property name="layoutDirection">
-        <enum>Qt::LeftToRight</enum>
-       </property>
-       <property name="text">
-        <string>Bound Step:</string>
-       </property>
-       <property name="alignment">
-        <set>Qt::AlignCenter</set>
-       </property>
-       <property name="buddy">
-        <cstring>stepSpin</cstring>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="3">
-      <spacer name="horizontalSpacer_5">
-       <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="1" column="3">
-      <widget class="QDoubleSpinBox" name="stepSpin">
-       <property name="decimals">
-        <number>1</number>
-       </property>
-       <property name="minimum">
-        <double>0.100000000000000</double>
-       </property>
-       <property name="maximum">
-        <double>50.000000000000000</double>
-       </property>
-       <property name="singleStep">
-        <double>0.100000000000000</double>
-       </property>
-       <property name="value">
-        <double>0.100000000000000</double>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0" colspan="2">
-      <widget class="QPushButton" name="calculateButton">
-       <property name="text">
-        <string>Recalculate Graph Values</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item row="13" column="0" colspan="2">
-    <widget class="QLabel" name="warningLabel">
-     <property name="text">
-      <string><B>Tip:</B> Window may be resized to see more detailed graph</string>
-     </property>
-    </widget>
-   </item>
-   <item row="14" column="0" colspan="2">
-    <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>
- <tabstops>
-  <tabstop>recBoundSpinBox</tabstop>
-  <tabstop>optimizeRecognitionBoundButton</tabstop>
-  <tabstop>negRecLineEdit</tabstop>
-  <tabstop>posRecLineEdit</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>EDSetupRecBoundDlg</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>294</x>
-     <y>229</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>238</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>EDSetupRecBoundDlg</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>294</x>
-     <y>229</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>238</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/expert_discovery/src/ui/ExpertDiscoverySigExtrWiz.ui b/src/plugins/expert_discovery/src/ui/ExpertDiscoverySigExtrWiz.ui
deleted file mode 100644
index 53d3c7c..0000000
--- a/src/plugins/expert_discovery/src/ui/ExpertDiscoverySigExtrWiz.ui
+++ /dev/null
@@ -1,399 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>SignalsExtrWiz</class>
- <widget class="QWizard" name="SignalsExtrWiz">
-  <property name="windowModality">
-   <enum>Qt::ApplicationModal</enum>
-  </property>
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>464</width>
-    <height>472</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>464</width>
-    <height>472</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Extractor Parameters Setup</string>
-  </property>
-  <property name="accessibleName">
-   <string/>
-  </property>
-  <property name="autoFillBackground">
-   <bool>false</bool>
-  </property>
-  <property name="sizeGripEnabled">
-   <bool>false</bool>
-  </property>
-  <property name="modal">
-   <bool>true</bool>
-  </property>
-  <property name="wizardStyle">
-   <enum>QWizard::ClassicStyle</enum>
-  </property>
-  <property name="options">
-   <set>QWizard::HaveHelpButton|QWizard::HelpButtonOnRight</set>
-  </property>
-  <property name="titleFormat">
-   <enum>Qt::AutoText</enum>
-  </property>
-  <widget class="QWizardPage" name="SignalsExtrWizP1">
-   <property name="title">
-    <string>Setup algorithm parameters</string>
-   </property>
-   <property name="subTitle">
-    <string>This wizard will help you automaticaly extract complex signals from sequences.</string>
-   </property>
-   <attribute name="pageId">
-    <string notr="true">1</string>
-   </attribute>
-   <layout class="QVBoxLayout" name="verticalLayout_2">
-    <item>
-     <widget class="QGroupBox" name="groupBox">
-      <property name="title">
-       <string>Please fill in selection parameters</string>
-      </property>
-      <layout class="QVBoxLayout" name="verticalLayout">
-       <item>
-        <layout class="QGridLayout" name="gridLayout">
-         <item row="0" column="0">
-          <widget class="QLabel" name="label_2">
-           <property name="text">
-            <string>Condition probability level</string>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="2">
-          <widget class="QLineEdit" name="condProbLevEdit"/>
-         </item>
-         <item row="1" column="0">
-          <widget class="QLabel" name="label_3">
-           <property name="text">
-            <string>Coverage bound</string>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="2">
-          <widget class="QLineEdit" name="coverBoundEdit"/>
-         </item>
-         <item row="2" column="0">
-          <widget class="QLabel" name="label_4">
-           <property name="text">
-            <string>Fisher criteria level</string>
-           </property>
-          </widget>
-         </item>
-         <item row="2" column="2">
-          <widget class="QLineEdit" name="fishCritEdit"/>
-         </item>
-         <item row="0" column="1">
-          <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>
-        <widget class="QCheckBox" name="minimFishCritCheck">
-         <property name="text">
-          <string>Check minimization of Fisher criteria</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QCheckBox" name="storeCheck">
-         <property name="text">
-          <string>Store only signals with different behaviour</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QGridLayout" name="gridLayout_2">
-         <item row="0" column="2">
-          <widget class="QLineEdit" name="minComplexityEdit"/>
-         </item>
-         <item row="0" column="0">
-          <widget class="QLabel" name="label">
-           <property name="text">
-            <string>Minimal Complexity</string>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="0">
-          <widget class="QLabel" name="label_7">
-           <property name="text">
-            <string>Maximal Complexity</string>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="1">
-          <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>
-         <item row="1" column="2">
-          <widget class="QLineEdit" name="maxComplexityEdit"/>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <widget class="QCheckBox" name="ulCritCheck">
-         <property name="text">
-          <string>Check Ul criteria</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout">
-         <item>
-          <widget class="QLabel" name="label_5">
-           <property name="text">
-            <string>Samples bound</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QLineEdit" name="samplesBoundEdit"/>
-         </item>
-         <item>
-          <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>
-          <widget class="QLabel" name="label_6">
-           <property name="text">
-            <string>Level bound</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QLineEdit" name="levelBoundEdit"/>
-         </item>
-        </layout>
-       </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="advancedButton">
-           <property name="text">
-            <string>Advanced...</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-      </layout>
-     </widget>
-    </item>
-   </layout>
-  </widget>
-  <widget class="QWizardPage" name="SignalsExtrWizP2">
-   <property name="title">
-    <string>Setup predicates</string>
-   </property>
-   <property name="subTitle">
-    <string>Please create some predicates that will be used in complex signal construction process. Note, some predicates are generated by default.</string>
-   </property>
-   <attribute name="pageId">
-    <string notr="true">2</string>
-   </attribute>
-   <widget class="QWidget" name="layoutWidget">
-    <property name="geometry">
-     <rect>
-      <x>10</x>
-      <y>0</y>
-      <width>418</width>
-      <height>351</height>
-     </rect>
-    </property>
-    <layout class="QVBoxLayout" name="verticalLayout_5">
-     <item>
-      <layout class="QHBoxLayout" name="horizontalLayout_3">
-       <item>
-        <widget class="QTreeWidget" name="predicatesTree">
-         <property name="frameShape">
-          <enum>QFrame::StyledPanel</enum>
-         </property>
-         <property name="frameShadow">
-          <enum>QFrame::Sunken</enum>
-         </property>
-         <attribute name="headerVisible">
-          <bool>false</bool>
-         </attribute>
-         <column>
-          <property name="text">
-           <string notr="true">1</string>
-          </property>
-         </column>
-        </widget>
-       </item>
-       <item>
-        <layout class="QVBoxLayout" name="verticalLayout_3">
-         <property name="sizeConstraint">
-          <enum>QLayout::SetDefaultConstraint</enum>
-         </property>
-         <item>
-          <widget class="QPushButton" name="distanseButton">
-           <property name="text">
-            <string>Distance</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="repetitionButton">
-           <property name="text">
-            <string>Repetition</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QPushButton" name="intervalButton">
-           <property name="text">
-            <string>Interval</string>
-           </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>
-         <item>
-          <widget class="QPushButton" name="deleteButton">
-           <property name="text">
-            <string>Delete</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-      </layout>
-     </item>
-     <item>
-      <widget class="QCheckBox" name="alignedCheck">
-       <property name="text">
-        <string>Aligned (If you sequence set is aligned, Interval predicated will be generated)</string>
-       </property>
-       <property name="checked">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QGroupBox" name="editorBox">
-       <property name="title">
-        <string>Editor</string>
-       </property>
-       <property name="flat">
-        <bool>false</bool>
-       </property>
-       <layout class="QVBoxLayout" name="verticalLayout_4"/>
-      </widget>
-     </item>
-    </layout>
-   </widget>
-  </widget>
-  <widget class="QWizardPage" name="SignalsExtrWizP3">
-   <property name="title">
-    <string>Select a folder</string>
-   </property>
-   <property name="subTitle">
-    <string>Select a folder to store extracted complex signals</string>
-   </property>
-   <attribute name="pageId">
-    <string notr="true">3</string>
-   </attribute>
-   <layout class="QGridLayout" name="gridLayout_3">
-    <item row="0" column="0" colspan="3">
-     <widget class="QTreeWidget" name="treeFoldersWidget">
-      <attribute name="headerVisible">
-       <bool>false</bool>
-      </attribute>
-      <column>
-       <property name="text">
-        <string notr="true">1</string>
-       </property>
-      </column>
-     </widget>
-    </item>
-    <item row="1" column="0">
-     <widget class="QPushButton" name="createSubfolderButton">
-      <property name="text">
-       <string>Create Root Subfolder</string>
-      </property>
-     </widget>
-    </item>
-    <item row="1" column="1">
-     <widget class="QLabel" name="label_8">
-      <property name="sizePolicy">
-       <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
-        <horstretch>0</horstretch>
-        <verstretch>0</verstretch>
-       </sizepolicy>
-      </property>
-      <property name="text">
-       <string>Folder Name:</string>
-      </property>
-     </widget>
-    </item>
-    <item row="1" column="2">
-     <widget class="QLineEdit" name="folderNameEdit"/>
-    </item>
-   </layout>
-  </widget>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins/expert_discovery/transl/english.ts b/src/plugins/expert_discovery/transl/english.ts
deleted file mode 100644
index 5bd22f6..0000000
--- a/src/plugins/expert_discovery/transl/english.ts
+++ /dev/null
@@ -1,1156 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="en">
-<context>
-    <name>EDSetupRecBoundDlg</name>
-    <message>
-        <source>Information</source>
-        <translation>Information</translation>
-    </message>
-    <message>
-        <source>Probability of positive sequence rejection:        </source>
-        <translation>Probability of positive sequence rejection:        </translation>
-    </message>
-    <message>
-        <source>Setup Recognition Bound</source>
-        <translation>м</translation>
-    </message>
-    <message>
-        <source>Probability of negative sequence recognition:</source>
-        <translation>Probability of negative sequence recognition:</translation>
-    </message>
-    <message>
-        <source>Optimize Recognition Bound</source>
-        <translation>Optimize Recognition Bound</translation>
-    </message>
-    <message>
-        <source>Recognition Bound:</source>
-        <translation>Recognition Bound:</translation>
-    </message>
-    <message>
-        <source>Minimum Bound:</source>
-        <translation>Minimum Bound:</translation>
-    </message>
-    <message>
-        <source>Maximum Bound:</source>
-        <translation>Maximum Bound:</translation>
-    </message>
-    <message>
-        <source>Bound Step:</source>
-        <translation>Bound Step:</translation>
-    </message>
-    <message>
-        <source>Recalculate Graph Values</source>
-        <translation>Recalculate Graph Values</translation>
-    </message>
-    <message>
-        <source>Recognition Graph</source>
-        <translation>Recognition Graph</translation>
-    </message>
-    <message>
-        <source>Score</source>
-        <translation>Score</translation>
-    </message>
-    <message>
-        <source>P
-r
-o
-b
-a
-b
-i
-l
-i
-t
-y
-</source>
-        <translation>P
-r
-o
-b
-a
-b
-i
-l
-i
-t
-y</translation>
-    </message>
-    <message>
-        <source><B>Tip:</B> Window may be resized to see more detailed graph</source>
-        <translation><B>Tip:</B> Window may be resized to see more detailed graph</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoveryAdvSetDialog</name>
-    <message>
-        <source>Branch bounds</source>
-        <translation>Branch bounds</translation>
-    </message>
-    <message>
-        <source>Condition probability level</source>
-        <translation>Condition probability level</translation>
-    </message>
-    <message>
-        <source>Fisher criteria level</source>
-        <translation>Fisher criteria level</translation>
-    </message>
-    <message>
-        <source>Minimal complexity</source>
-        <translation>Minimal complexity</translation>
-    </message>
-    <message>
-        <source>Maximal complexity</source>
-        <translation>Maximal complexity</translation>
-    </message>
-    <message>
-        <source>Check for distance argument correlation</source>
-        <translation>Check for distance argument correlation</translation>
-    </message>
-    <message>
-        <source>Disrance argument correlation bounds</source>
-        <translation>Disrance argument correlation bounds</translation>
-    </message>
-    <message>
-        <source>Min. correlation on positive</source>
-        <translation>Min. correlation on positive</translation>
-    </message>
-    <message>
-        <source>Max. correlation on positive</source>
-        <translation>Max. correlation on positive</translation>
-    </message>
-    <message>
-        <source>Min. correlation on negative</source>
-        <translation>Min. correlation on negative</translation>
-    </message>
-    <message>
-        <source>Max. correlation on negative</source>
-        <translation>Max. correlation on negative</translation>
-    </message>
-    <message>
-        <source>Advanced Extract Parameters</source>
-        <translation>Advanced Extract Parameters</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoveryControlDialog</name>
-    <message>
-        <source>File with control sequences</source>
-        <translation>File with control sequences</translation>
-    </message>
-    <message>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-    <message>
-        <source>You may load any sequence file to recognize your complex signals on the sequences.</source>
-        <translation>You may load any sequence file to recognize your complex signals on the sequences.</translation>
-    </message>
-    <message>
-        <source>Load Control Sequences</source>
-        <translation>Load Control Sequences</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoveryControlMrkDialog</name>
-    <message>
-        <source>Load Control sequences markup</source>
-        <translation>Load Control sequences markup</translation>
-    </message>
-    <message>
-        <source>File with control sequences markup</source>
-        <translation>File with control sequences markup</translation>
-    </message>
-    <message>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoveryPosNegDialog</name>
-    <message>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-    <message>
-        <source>Generate negative sequences</source>
-        <translation>Generate negative sequences</translation>
-    </message>
-    <message>
-        <source>Positive sequences file</source>
-        <translation>Positive sequences file</translation>
-    </message>
-    <message>
-        <source>Negative sequences file</source>
-        <translation>Negative sequences file</translation>
-    </message>
-    <message>
-        <source>This is the first step of creating a new ExpertDiscovery project.
-Load the sequences you want to analyze by choosing any file with a sequence or multiple sequences.
-
-Positive sequence base contains a regulation object you are interested in.
-Negative sequence base doesn't have it. 
-You also may generate negative sequences automatically.
-
-ExpertDiscovery will extract complex signals which reflect a structure of your regulation object. 
-The more sequences you provide the better will be the result</source>
-        <translation>This is the first step of creating a new ExpertDiscovery project.
-Load the sequences you want to analyze by choosing any file with a sequence or multiple sequences.
-
-Positive sequence base contains a regulation object you are interested in.
-Negative sequence base doesn't have it. 
-You also may generate negative sequences automatically.
-
-ExpertDiscovery will extract complex signals which reflect a structure of your regulation object. 
-The more sequences you provide the better will be the result</translation>
-    </message>
-    <message>
-        <source>Negatives per positive amount:</source>
-        <translation>Negatives per positive amount:</translation>
-    </message>
-    <message>
-        <source>Load Positive and Negative Sequence Bases</source>
-        <translation>Load Positive and Negative Sequence Bases</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoveryPosNegMrkDialog</name>
-    <message>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-    <message>
-        <source>Generate description file</source>
-        <translation>Generate description file</translation>
-    </message>
-    <message>
-        <source>Description file</source>
-        <translation>Description file</translation>
-    </message>
-    <message>
-        <source>Positive and Negative Sequences Markup</source>
-        <translation>Positive and Negative Sequences Markup</translation>
-    </message>
-    <message>
-        <source>Append to Current Markup</source>
-        <translation>Append to Current Markup</translation>
-    </message>
-    <message>
-        <source>Positive sequences markup file</source>
-        <translation>Positive sequences markup file</translation>
-    </message>
-    <message>
-        <source>Negative sequences markup file</source>
-        <translation>Negative sequences markup file</translation>
-    </message>
-    <message>
-        <source>On this step you need to load markups for the sequences. 
-Markaup is an annotation of a sequence with elementary signals.
-Markup gives information where elementary signals are located in the sequences.
-
-Complex signals will be build from the elementary signals and operations applied to them. 
-
-Load markup for your sequences in specified XML format or genbank format.</source>
-        <translation>On this step you need to load markups for the sequences. 
-Markaup is an annotation of a sequence with elementary signals.
-Markup gives information where elementary signals are located in the sequences.
-
-Complex signals will be build from the elementary signals and operations applied to them. 
-
-Load markup for your sequences in specified XML format or genbank format.</translation>
-    </message>
-    <message>
-        <source>Nucleotides Markup</source>
-        <translation>Nucleotides Markup</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoverySearchDialog</name>
-    <message>
-        <source>ExpertDiscovery Search Window</source>
-        <translation>ExpertDiscovery Search Window</translation>
-    </message>
-    <message>
-        <source>Recognition Bound</source>
-        <translation>Recognition Bound</translation>
-    </message>
-    <message>
-        <source>Strand</source>
-        <translation>Strand</translation>
-    </message>
-    <message>
-        <source>Both</source>
-        <translation>Both</translation>
-    </message>
-    <message>
-        <source>strand_direct_wit</source>
-        <translation>Direct</translation>
-    </message>
-    <message>
-        <source>Direct</source>
-        <translation>Direct</translation>
-    </message>
-    <message>
-        <source>strand_complement_wit</source>
-        <translation>Complement</translation>
-    </message>
-    <message>
-        <source>Complement</source>
-        <translation>Complement</translation>
-    </message>
-    <message>
-        <source>range</source>
-        <translation>range</translation>
-    </message>
-    <message>
-        <source>strand</source>
-        <translation>strand</translation>
-    </message>
-    <message>
-        <source>Clear Results</source>
-        <translation>Clear Results</translation>
-    </message>
-    <message>
-        <source>Save As Annotation</source>
-        <translation>Save As Annotation</translation>
-    </message>
-    <message>
-        <source>Status</source>
-        <translation>Status</translation>
-    </message>
-    <message>
-        <source>score</source>
-        <translation>score</translation>
-    </message>
-</context>
-<context>
-    <name>SignalsExtrWiz</name>
-    <message>
-        <source>Setup algorithm parameters</source>
-        <translation>Setup algorithm parameters</translation>
-    </message>
-    <message>
-        <source>This wizard will help you automaticaly extract complex signals from sequences.</source>
-        <translation>This wizard will help you automaticaly extract complex signals from sequences.</translation>
-    </message>
-    <message>
-        <source>Please fill in selection parameters</source>
-        <translation>Please fill in selection parameters</translation>
-    </message>
-    <message>
-        <source>Condition probability level</source>
-        <translation>Condition probability level</translation>
-    </message>
-    <message>
-        <source>Fisher criteria level</source>
-        <translation>Fisher criteria level</translation>
-    </message>
-    <message>
-        <source>Check minimization of Fisher criteria</source>
-        <translation>Check minimization of Fisher criteria</translation>
-    </message>
-    <message>
-        <source>Store only signals with different behaviour</source>
-        <translation>Store only signals with different behaviour</translation>
-    </message>
-    <message>
-        <source>Check Ul criteria</source>
-        <translation>Check Ul criteria</translation>
-    </message>
-    <message>
-        <source>Samples bound</source>
-        <translation>Samples bound</translation>
-    </message>
-    <message>
-        <source>Level bound</source>
-        <translation>Level bound</translation>
-    </message>
-    <message>
-        <source>Advanced...</source>
-        <translation>Advanced...</translation>
-    </message>
-    <message>
-        <source>Setup predicates</source>
-        <translation>Setup predicates</translation>
-    </message>
-    <message>
-        <source>Distance</source>
-        <translation>Distance</translation>
-    </message>
-    <message>
-        <source>Repetition</source>
-        <translation>Repetition</translation>
-    </message>
-    <message>
-        <source>Interval</source>
-        <translation>Interval</translation>
-    </message>
-    <message>
-        <source>Delete</source>
-        <translation>Delete</translation>
-    </message>
-    <message>
-        <source>Editor</source>
-        <translation>Editor</translation>
-    </message>
-    <message>
-        <source>Extractor Parameters Setup</source>
-        <translation>Extractor Parameters Setup</translation>
-    </message>
-    <message>
-        <source>Minimal Complexity</source>
-        <translation>Minimal Complexity</translation>
-    </message>
-    <message>
-        <source>Maximal Complexity</source>
-        <translation>Maximal Complexity</translation>
-    </message>
-    <message>
-        <source>Coverage bound</source>
-        <translation>Coverage bound</translation>
-    </message>
-    <message>
-        <source>Please create some predicates that will be used in complex signal construction process. Note, some predicates are generated by default.</source>
-        <translation>Please create some predicates that will be used in complex signal construction process. Note, some predicates are generated by default.</translation>
-    </message>
-    <message>
-        <source>Aligned (If you sequence set is aligned, Interval predicated will be generated)</source>
-        <translation>Aligned (If you sequence set is aligned, Interval predicated will be generated)</translation>
-    </message>
-    <message>
-        <source>Select a folder</source>
-        <translation>Select a folder</translation>
-    </message>
-    <message>
-        <source>Select a folder to store extracted complex signals</source>
-        <translation>Select a folder to store extracted complex signals</translation>
-    </message>
-    <message>
-        <source>Create Root Subfolder</source>
-        <translation>Create Root Subfolder</translation>
-    </message>
-    <message>
-        <source>Folder Name:</source>
-        <translation>Folder Name:</translation>
-    </message>
-</context>
-<context>
-    <name>U2::DistanceSet</name>
-    <message>
-        <source>Distance from</source>
-        <translation>Distance from</translation>
-    </message>
-    <message>
-        <source>Distance to</source>
-        <translation>Distance to</translation>
-    </message>
-    <message>
-        <source>Unlimited</source>
-        <translation>Unlimited</translation>
-    </message>
-    <message>
-        <source>Take order into account</source>
-        <translation>Take order into account</translation>
-    </message>
-    <message>
-        <source>Wrong parameters</source>
-        <translation>Wrong parameters</translation>
-    </message>
-    <message>
-        <source>Higher bound must be grater then lower bound</source>
-        <translation>Higher bound must be grater then lower bound</translation>
-    </message>
-</context>
-<context>
-    <name>U2::EDProjectTree</name>
-    <message>
-        <source>Rename error</source>
-        <translation>Rename error</translation>
-    </message>
-    <message>
-        <source>Folder already exist</source>
-        <translation>Folder already exist</translation>
-    </message>
-    <message>
-        <source>Signal rename</source>
-        <translation>Signal rename</translation>
-    </message>
-    <message>
-        <source>Signal with the same name already exist. Replace?</source>
-        <translation>Signal with the same name already exist. Replace?</translation>
-    </message>
-    <message>
-        <source>Select/deselect signal</source>
-        <translation>Select/deselect signal</translation>
-    </message>
-    <message>
-        <source>New folder</source>
-        <translation>New folder</translation>
-    </message>
-    <message>
-        <source>New signal</source>
-        <translation>New signal</translation>
-    </message>
-    <message>
-        <source>Delete</source>
-        <translation>Delete</translation>
-    </message>
-    <message>
-        <source>Select all signals</source>
-        <translation>Select all signals</translation>
-    </message>
-    <message>
-        <source>Deselect all signals</source>
-        <translation>Deselect all signals</translation>
-    </message>
-    <message>
-        <source>Set prior parameters of all signals</source>
-        <translation>Set prior parameters of all signals</translation>
-    </message>
-    <message>
-        <source>Clear prior parameters of all signals</source>
-        <translation>Clear prior parameters of all signals</translation>
-    </message>
-    <message>
-        <source>Set current params as prior</source>
-        <translation>Set current params as prior</translation>
-    </message>
-    <message>
-        <source>Clear prior params</source>
-        <translation>Clear prior params</translation>
-    </message>
-    <message>
-        <source>Markup letters</source>
-        <translation>Markup letters</translation>
-    </message>
-    <message>
-        <source>Load markup</source>
-        <translation>Load markup</translation>
-    </message>
-    <message>
-        <source>Generate report</source>
-        <translation>Generate report</translation>
-    </message>
-    <message>
-        <source>Increasing</source>
-        <translation>Increasing</translation>
-    </message>
-    <message>
-        <source>Decreasing</source>
-        <translation>Decreasing</translation>
-    </message>
-    <message>
-        <source>Coverage</source>
-        <translation>Coverage</translation>
-    </message>
-    <message>
-        <source>Fisher</source>
-        <translation>Fisher</translation>
-    </message>
-    <message>
-        <source>Name</source>
-        <translation>Name</translation>
-    </message>
-    <message>
-        <source>Probability</source>
-        <translation>Probability</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation>Error</translation>
-    </message>
-    <message>
-        <source>The value must be positive integer which is less than the higher bound</source>
-        <translation>The value must be positive integer which is less than the higher bound</translation>
-    </message>
-    <message>
-        <source>The value must be grater than the lower bound</source>
-        <translation>The value must be grater than the lower bound</translation>
-    </message>
-    <message>
-        <source>The word must be in 15-character code</source>
-        <translation>The word must be in 15-character code</translation>
-    </message>
-    <message>
-        <source>Select signal</source>
-        <translation>Select signal</translation>
-    </message>
-    <message>
-        <source>Deselect signal</source>
-        <translation>Deselect signal</translation>
-    </message>
-    <message>
-        <source>Show one sequence</source>
-        <translation>Show one sequence</translation>
-    </message>
-    <message>
-        <source>Add to displayed</source>
-        <translation>Add to displayed</translation>
-    </message>
-    <message>
-        <source>Clear displayed sequences area</source>
-        <translation>Clear displayed sequences area</translation>
-    </message>
-    <message>
-        <source>Show sequences</source>
-        <translation>Show sequences</translation>
-    </message>
-    <message>
-        <source>Sort</source>
-        <translation>Sort</translation>
-    </message>
-    <message>
-        <source>Field</source>
-        <translation>Field</translation>
-    </message>
-    <message>
-        <source>Order</source>
-        <translation>Order</translation>
-    </message>
-    <message>
-        <source>Add signal to markup</source>
-        <translation>Add signal to markup</translation>
-    </message>
-    <message>
-        <source>Export Sequences</source>
-        <translation>Export Sequences</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryAdvSetDialog</name>
-    <message>
-        <source>Wrong parameters</source>
-        <translation>Wrong parameters</translation>
-    </message>
-    <message>
-        <source>Minimal complexity must not be grater then maximal complexity and positive</source>
-        <translation>Minimal complexity must not be grater then maximal complexity and positive</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryCalculateErrors</name>
-    <message>
-        <source>Error calculation</source>
-        <translation>Error calculation</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryControlDialog</name>
-    <message>
-        <source>Select files</source>
-        <translation>Select files</translation>
-    </message>
-    <message>
-        <source>Select files for ExpertDiscovery</source>
-        <translation>Select files for ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Open control sequences file</source>
-        <translation>Open control sequences file</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryControlMrkDialog</name>
-    <message>
-        <source>Select files</source>
-        <translation>Select files</translation>
-    </message>
-    <message>
-        <source>Select files for ExpertDiscovery</source>
-        <translation>Select files for ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Open control sequences markup file</source>
-        <translation>Open control sequences markup file</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryCreateViewTask</name>
-    <message>
-        <source>ED</source>
-        <translation>ED</translation>
-    </message>
-    <message>
-        <source>Maximum number of objects per view reached: %1</source>
-        <translation>Maximum number of objects per view reached: %1</translation>
-    </message>
-    <message>
-        <source>Sequence object not available! URL %1, name %2</source>
-        <translation>Sequence object not available! URL %1, name %2</translation>
-    </message>
-    <message>
-        <source>No sequence objects found</source>
-        <translation>No sequence objects found</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryData</name>
-    <message>
-        <source>Cancel</source>
-        <translation>Cancel</translation>
-    </message>
-    <message>
-        <source>Updating positive sequences</source>
-        <translation>Updating positive sequences</translation>
-    </message>
-    <message>
-        <source>Updating negative sequences</source>
-        <translation>Updating negative sequences</translation>
-    </message>
-    <message>
-        <source>Updating control sequences</source>
-        <translation>Updating control sequences</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation>Error</translation>
-    </message>
-    <message>
-        <source>Hypertext files (*.htm *.html)</source>
-        <translation>Hypertext files (*.htm *.html)</translation>
-    </message>
-    <message>
-        <source>Report generation failed</source>
-        <translation>Report generation failed</translation>
-    </message>
-    <message>
-        <source>Setting up recognition bound. Please wait</source>
-        <translation>Setting up recognition bound. Please wait</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryErrors</name>
-    <message>
-        <source>File opening error</source>
-        <translation>File opening error</translation>
-    </message>
-    <message>
-        <source>Error opening file %1</source>
-        <translation>Error opening file %1</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation>Error</translation>
-    </message>
-    <message>
-        <source>Error loading markups</source>
-        <translation>Error loading markups</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryExportSequences</name>
-    <message>
-        <source>Export Sequences Task</source>
-        <translation>Export Sequences Task</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation type="obsolete">Error</translation>
-    </message>
-    <message>
-        <source>Save File</source>
-        <translation>Save File</translation>
-    </message>
-    <message>
-        <source>Report generation failed: </source>
-        <translation>Report generation failed: </translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryExtSigWiz</name>
-    <message>
-        <source>No predicates</source>
-        <translation>No predicates</translation>
-    </message>
-    <message>
-        <source>Create a predicate to perform signal generation</source>
-        <translation>Create a predicate to perform signal generation</translation>
-    </message>
-    <message>
-        <source>Wrong parameters</source>
-        <translation>Wrong parameters</translation>
-    </message>
-    <message>
-        <source>Complex signals</source>
-        <translation>Complex signals</translation>
-    </message>
-    <message>
-        <source>Select predicate on the tree above or create a new one using buttons.</source>
-        <translation>Select predicate on the tree above or create a new one using buttons.</translation>
-    </message>
-    <message>
-        <source>Minimal complexity must not be grater then maximal complexity and positive</source>
-        <translation>Minimal complexity must not be grater then maximal complexity and positive</translation>
-    </message>
-    <message>
-        <source>Specify folder name</source>
-        <translation>Specify folder name</translation>
-    </message>
-    <message>
-        <source>Please specify a name for your folder</source>
-        <translation>Please specify a name for your folder</translation>
-    </message>
-    <message>
-        <source>Item with the same name already exist. Please enter another name</source>
-        <translation>Item with the same name already exist. Please enter another name</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryLoadControlMrkTask</name>
-    <message>
-        <source>ExpertDiscovery loading</source>
-        <translation>ExpertDiscovery loading</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation type="obsolete">Error</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryLoadControlTask</name>
-    <message>
-        <source>ExpertDiscovery loading</source>
-        <translation>ExpertDiscovery loading</translation>
-    </message>
-    <message>
-        <source>Detecting format error for file %1</source>
-        <translation>Detecting format error for file %1</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryLoadPosNegMrkTask</name>
-    <message>
-        <source>ExpertDiscovery loading</source>
-        <translation>ExpertDiscovery loading</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation type="obsolete">Error</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryLoadPosNegTask</name>
-    <message>
-        <source>ExpertDiscovery loading</source>
-        <translation>ExpertDiscovery loading</translation>
-    </message>
-    <message>
-        <source>Detecting format error for file %1</source>
-        <translation>Detecting format error for file %1</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryPlugin</name>
-    <message>
-        <source>Expert Discovery</source>
-        <translation>Expert Discovery</translation>
-    </message>
-    <message>
-        <source>Expert Discovery plugin</source>
-        <translation>ExpertDiscovery is a system for analysis and recognition of gene regulatory regions using hierarchical approach. It implements a powerful machine learning method "Discovery" (http://math.nsc.ru/AP/ScientificDiscovery/)</translation>
-    </message>
-    <message>
-        <source>Expert Discovery...</source>
-        <translation>Expert Discovery...</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryPosNegDialog</name>
-    <message>
-        <source>Select files</source>
-        <translation>Select files</translation>
-    </message>
-    <message>
-        <source>Positive and negative sequences can't be in the one file. Select another file for one of them</source>
-        <translation>Positive and negative sequences can't be in the one file. Select another file for one of them</translation>
-    </message>
-    <message>
-        <source>Select files for ExpertDiscovery</source>
-        <translation>Select files for ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Open positive sequences file</source>
-        <translation>Open positive sequences file</translation>
-    </message>
-    <message>
-        <source>Open second file</source>
-        <translation>Open second file</translation>
-    </message>
-    <message>
-        <source>Next</source>
-        <translation>Next</translation>
-    </message>
-    <message>
-        <source>Cancel</source>
-        <translation>Cancel</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryPosNegMrkDialog</name>
-    <message>
-        <source>Select files</source>
-        <translation>Select files</translation>
-    </message>
-    <message>
-        <source>Select description file</source>
-        <translation>Select description file</translation>
-    </message>
-    <message>
-        <source>Open positive sequences markup file</source>
-        <translation>Open positive sequences markup file</translation>
-    </message>
-    <message>
-        <source>Open second file</source>
-        <translation>Open second file</translation>
-    </message>
-    <message>
-        <source>Open description file</source>
-        <translation>Open description file</translation>
-    </message>
-    <message>
-        <source>Select positive markup file at least or chose 'Nucleotides markup'</source>
-        <translation>Select positive markup file at least or chose 'Nucleotides markup'</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryScoreGraphFactory</name>
-    <message>
-        <source>Score graph</source>
-        <translation>Score graph</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoverySearchDialogController</name>
-    <message>
-        <source>Cancel</source>
-        <translation>Cancel</translation>
-    </message>
-    <message>
-        <source>Close</source>
-        <translation>Close</translation>
-    </message>
-    <message>
-        <source>Progress %1%</source>
-        <translation>Progress %1%</translation>
-    </message>
-    <message>
-        <source>%1 results found.</source>
-        <translation>%1 results found.</translation>
-    </message>
-    <message>
-        <source>complement strand</source>
-        <translation>complement strand</translation>
-    </message>
-    <message>
-        <source>direct strand</source>
-        <translation>direct strand</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoverySearchTask</name>
-    <message>
-        <source>ExpertDiscovery Search</source>
-        <translation>ExpertDiscovery Search</translation>
-    </message>
-    <message>
-        <source>ExpertDiscovery Search Parallel</source>
-        <translation>ExpertDiscovery Search Parallel</translation>
-    </message>
-    <message>
-        <source>Internal error, score:%1</source>
-        <translation>Internal error, score:%1</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoverySetupRecBoundDialog</name>
-    <message>
-        <source>Wrong bound interval</source>
-        <translation>Wrong bound interval</translation>
-    </message>
-    <message>
-        <source>Minimal bound must not be grater then maximal bound</source>
-        <translation>Minimal bound must not be less then maximal bound</translation>
-    </message>
-    <message>
-        <source>Wrong step value</source>
-        <translation>Wrong step value</translation>
-    </message>
-    <message>
-        <source>Bound step must be non zero</source>
-        <translation>Bound step must be non zero</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoverySignalExtractorTask</name>
-    <message>
-        <source>ExpertDiscovery signals extracting</source>
-        <translation>ExpertDiscovery signals extracting</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoverySignalsAutoAnnotationUpdater</name>
-    <message>
-        <source>Signals</source>
-        <translation>Signals</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryToAnnotationTask</name>
-    <message>
-        <source>Find and store expert discovery signals on a sequence</source>
-        <translation>Find and store expert discovery signals on a sequence</translation>
-    </message>
-    <message>
-        <source>Annotation table does not exist</source>
-        <translation>Annotation table does not exist</translation>
-    </message>
-    <message>
-        <source>Annotation table is read-only</source>
-        <translation>Annotation table is read-only</translation>
-    </message>
-    <message>
-        <source>No expert discovery sequence</source>
-        <translation>No expert discovery sequence</translation>
-    </message>
-    <message>
-        <source>Annotation obj %1 is locked for modifications</source>
-        <translation>Annotation obj %1 is locked for modifications</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryView</name>
-    <message>
-        <source>Load control sequences</source>
-        <translation>Load control sequences</translation>
-    </message>
-    <message>
-        <source>Extract signals</source>
-        <translation>Extract signals</translation>
-    </message>
-    <message>
-        <source>Load markup</source>
-        <translation>Load markup</translation>
-    </message>
-    <message>
-        <source>Generate recognition report</source>
-        <translation>Generate recognition report</translation>
-    </message>
-    <message>
-        <source>Load ExpertDiscovery document</source>
-        <translation>Load ExpertDiscovery document</translation>
-    </message>
-    <message>
-        <source>ExpertDiscovery files (*.exd)</source>
-        <translation>ExpertDiscovery files (*.exd)</translation>
-    </message>
-    <message>
-        <source>Save ExpertDiscovery document</source>
-        <translation>Save ExpertDiscovery document</translation>
-    </message>
-    <message>
-        <source>Do you want to save current ExpertDiscovery document?</source>
-        <translation>Do you want to save current ExpertDiscovery document?</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation>Error</translation>
-    </message>
-    <message>
-        <source>No signals are selected to generate report</source>
-        <translation>No signals are selected to generate report</translation>
-    </message>
-    <message>
-        <source>Set Recognition Bound</source>
-        <translation>Set Recognition Bound</translation>
-    </message>
-    <message>
-        <source>New Expert Discovery Document</source>
-        <translation>New Expert Discovery Document</translation>
-    </message>
-    <message>
-        <source>Open Expert Discovery Document</source>
-        <translation>Open Expert Discovery Document</translation>
-    </message>
-    <message>
-        <source>Save Expert Discovery Document</source>
-        <translation>Save Expert Discovery Document</translation>
-    </message>
-    <message>
-        <source>Search for regions with ExpertDiscovery</source>
-        <translation type="vanished">Search for regions with ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Load control sequences markup</source>
-        <translation>Load control sequences markup</translation>
-    </message>
-    <message>
-        <source>Search for regions with Expert Discovery</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryViewWindow</name>
-    <message>
-        <source>Closing error</source>
-        <translation>Closing error</translation>
-    </message>
-    <message>
-        <source>There are unfinished extracting tasks. Cancel them before closing</source>
-        <translation>There are unfinished extracting tasks. Cancel them before closing</translation>
-    </message>
-</context>
-<context>
-    <name>U2::IntervalSet</name>
-    <message>
-        <source>Interval from</source>
-        <translation>Interval from</translation>
-    </message>
-    <message>
-        <source>Interval to</source>
-        <translation>Interval to</translation>
-    </message>
-    <message>
-        <source>Unlimited</source>
-        <translation>Unlimited</translation>
-    </message>
-    <message>
-        <source>Wrong parameters</source>
-        <translation>Wrong parameters</translation>
-    </message>
-    <message>
-        <source>Higher bound must be grater then lower bound</source>
-        <translation>Higher bound must be grater then lower bound</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RepetitionSet</name>
-    <message>
-        <source>Distance from</source>
-        <translation>Distance from</translation>
-    </message>
-    <message>
-        <source>Distance to</source>
-        <translation>Distance to</translation>
-    </message>
-    <message>
-        <source>Unlimited</source>
-        <translation>Unlimited</translation>
-    </message>
-    <message>
-        <source>Count from</source>
-        <translation>Count from</translation>
-    </message>
-    <message>
-        <source>Count to</source>
-        <translation>Count to</translation>
-    </message>
-    <message>
-        <source>Wrong parameters</source>
-        <translation>Wrong parameters</translation>
-    </message>
-    <message>
-        <source>Higher bound must be grater then lower bound</source>
-        <translation>Higher bound must be grater then lower bound</translation>
-    </message>
-</context>
-</TS>
diff --git a/src/plugins/expert_discovery/transl/russian.ts b/src/plugins/expert_discovery/transl/russian.ts
deleted file mode 100644
index b347b3d..0000000
--- a/src/plugins/expert_discovery/transl/russian.ts
+++ /dev/null
@@ -1,1157 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="ru_RU">
-<context>
-    <name>EDSetupRecBoundDlg</name>
-    <message>
-        <source>Information</source>
-        <translation>Информация</translation>
-    </message>
-    <message>
-        <source>Probability of positive sequence rejection:        </source>
-        <translation>Вероятность неузнавания позитивной последовательности:</translation>
-    </message>
-    <message>
-        <source>Setup Recognition Bound</source>
-        <translation>Установка порога распознавания</translation>
-    </message>
-    <message>
-        <source>Probability of negative sequence recognition:</source>
-        <translation>Вероятность узнавания негативной последовательности:</translation>
-    </message>
-    <message>
-        <source>Optimize Recognition Bound</source>
-        <translation>Оптимизация порога распознования</translation>
-    </message>
-    <message>
-        <source>Recognition Bound:</source>
-        <translation>Порог распознавания:</translation>
-    </message>
-    <message>
-        <source>Minimum Bound:</source>
-        <translation>Минимальный порог:</translation>
-    </message>
-    <message>
-        <source>Maximum Bound:</source>
-        <translation>Максимальный порог:</translation>
-    </message>
-    <message>
-        <source>Bound Step:</source>
-        <translation>Шаг порога:</translation>
-    </message>
-    <message>
-        <source>Recalculate Graph Values</source>
-        <translation>Пересчитать значения графика</translation>
-    </message>
-    <message>
-        <source>Recognition Graph</source>
-        <translation>График распознавания</translation>
-    </message>
-    <message>
-        <source>Score</source>
-        <translation>Количество</translation>
-    </message>
-    <message>
-        <source>P
-r
-o
-b
-a
-b
-i
-l
-i
-t
-y
-</source>
-        <translation>В
-е
-р
-о
-я
-т
-н
-о
-с
-т
-ь
-</translation>
-    </message>
-    <message>
-        <source><B>Tip:</B> Window may be resized to see more detailed graph</source>
-        <translation><B>Подсказка:</B> Можно расширить окно, чтобы увидеть более детальный график</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoveryAdvSetDialog</name>
-    <message>
-        <source>Branch bounds</source>
-        <translation>Параметры ветвления</translation>
-    </message>
-    <message>
-        <source>Condition probability level</source>
-        <translation>Уровень условной вероятности</translation>
-    </message>
-    <message>
-        <source>Fisher criteria level</source>
-        <translation>Уровень значимости (Фишер)</translation>
-    </message>
-    <message>
-        <source>Minimal complexity</source>
-        <translation>Минимальная сложность сигнала</translation>
-    </message>
-    <message>
-        <source>Maximal complexity</source>
-        <translation>Максимальная сложность сигнала</translation>
-    </message>
-    <message>
-        <source>Check for distance argument correlation</source>
-        <translation>Проверять коррелцию аргументов операции дистанция</translation>
-    </message>
-    <message>
-        <source>Disrance argument correlation bounds</source>
-        <translation>Параметры корреляции аргументов операции дистанция</translation>
-    </message>
-    <message>
-        <source>Min. correlation on positive</source>
-        <translation>Мин. корреляция на позитивный</translation>
-    </message>
-    <message>
-        <source>Max. correlation on positive</source>
-        <translation>Макс. корреляция на позитивный</translation>
-    </message>
-    <message>
-        <source>Min. correlation on negative</source>
-        <translation>Мин. корреляция на негативных</translation>
-    </message>
-    <message>
-        <source>Max. correlation on negative</source>
-        <translation>Макс. корреляция на негативных</translation>
-    </message>
-    <message>
-        <source>Advanced Extract Parameters</source>
-        <translation>Расширенные параметры выделения сигналов</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoveryControlDialog</name>
-    <message>
-        <source>File with control sequences</source>
-        <translation>Файл с контрольными последовательностями</translation>
-    </message>
-    <message>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-    <message>
-        <source>You may load any sequence file to recognize your complex signals on the sequences.</source>
-        <translation>Вы можете загрузить любой файл с последовательностями, чтобы распознать комплексные сигналы на них.</translation>
-    </message>
-    <message>
-        <source>Load Control Sequences</source>
-        <translation>Загрузка контрольных последовательностей</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoveryControlMrkDialog</name>
-    <message>
-        <source>Load Control sequences markup</source>
-        <translation>Загрузка разметки контрольных последовательностей</translation>
-    </message>
-    <message>
-        <source>File with control sequences markup</source>
-        <translation>Файл с разметками контрольных последовательностей</translation>
-    </message>
-    <message>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoveryPosNegDialog</name>
-    <message>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-    <message>
-        <source>Generate negative sequences</source>
-        <translation>Генерация негативных последовательностей</translation>
-    </message>
-    <message>
-        <source>Positive sequences file</source>
-        <translation>Файл с позитивной выборкой</translation>
-    </message>
-    <message>
-        <source>Negative sequences file</source>
-        <translation>Файл с негативной выборкой</translation>
-    </message>
-    <message>
-        <source>This is the first step of creating a new ExpertDiscovery project.
-Load the sequences you want to analyze by choosing any file with a sequence or multiple sequences.
-
-Positive sequence base contains a regulation object you are interested in.
-Negative sequence base doesn't have it. 
-You also may generate negative sequences automatically.
-
-ExpertDiscovery will extract complex signals which reflect a structure of your regulation object. 
-The more sequences you provide the better will be the result</source>
-        <translation>Это первый шаг создания нового проекта ExpertDiscovery.
-Загрузите последовательности, которые вы хотел бы проанализировать, выбрав файл с последовательностью или с несколькими последовательностями.
-
-Позитивная выборка последовательностей содержит интересующий регуляторный объект.
-Негативная выборка не содержит его.
-Негативная выборка может быть сгенерирована автоматически.
-
-ExpertDiscovery построит комплексные сигналы, которые отражают структуру регуляторного объекта.
-Чем больше последовательностей вы загрузите, тем лучше будет результат</translation>
-    </message>
-    <message>
-        <source>Negatives per positive amount:</source>
-        <translation>Негативное и позитивное количество:</translation>
-    </message>
-    <message>
-        <source>Load Positive and Negative Sequence Bases</source>
-        <translation>Загрузка позитивных и негативных выборок последовательностей</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoveryPosNegMrkDialog</name>
-    <message>
-        <source>...</source>
-        <translation>...</translation>
-    </message>
-    <message>
-        <source>Generate description file</source>
-        <translation>Генерировать описание</translation>
-    </message>
-    <message>
-        <source>Description file</source>
-        <translation>Файл описания</translation>
-    </message>
-    <message>
-        <source>Positive and Negative Sequences Markup</source>
-        <translation>Разметка позитивных и негативных последовательностей</translation>
-    </message>
-    <message>
-        <source>Append to Current Markup</source>
-        <translation>Добавить к текущей разметке</translation>
-    </message>
-    <message>
-        <source>Positive sequences markup file</source>
-        <translation>Файл разметки позитивной выборки</translation>
-    </message>
-    <message>
-        <source>Negative sequences markup file</source>
-        <translation>Файл разметки негативной выборки</translation>
-    </message>
-    <message>
-        <source>On this step you need to load markups for the sequences. 
-Markaup is an annotation of a sequence with elementary signals.
-Markup gives information where elementary signals are located in the sequences.
-
-Complex signals will be build from the elementary signals and operations applied to them. 
-
-Load markup for your sequences in specified XML format or genbank format.</source>
-        <translation>На этом шаге требуется загрузить разметки последовательностей.
-Разметкой является аннотация последовательности элементарными сигналами.
-Разметка говорит о том, где находятся элементарные сигналы на последовательностях.
-
-Комплексные сигналы будут построены на основании элементарных сигналов и операций над ними.
-
-Загрузите разметки в специализированном формате XML или в формате genbank.</translation>
-    </message>
-    <message>
-        <source>Nucleotides Markup</source>
-        <translation>Разметка нуклеотидами</translation>
-    </message>
-</context>
-<context>
-    <name>ExpertDiscoverySearchDialog</name>
-    <message>
-        <source>ExpertDiscovery Search Window</source>
-        <translation>Распознавание сигналов на с помощью комплексных сигналов ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Recognition Bound</source>
-        <translation>Порог распознавания</translation>
-    </message>
-    <message>
-        <source>Strand</source>
-        <translation>Направление</translation>
-    </message>
-    <message>
-        <source>Both</source>
-        <translation>Все</translation>
-    </message>
-    <message>
-        <source>strand_direct_wit</source>
-        <translation>Прямое</translation>
-    </message>
-    <message>
-        <source>Direct</source>
-        <translation>Прямое</translation>
-    </message>
-    <message>
-        <source>strand_complement_wit</source>
-        <translation>Комплементарное</translation>
-    </message>
-    <message>
-        <source>Complement</source>
-        <translation>Комплементарное</translation>
-    </message>
-    <message>
-        <source>range</source>
-        <translation>Диапазон</translation>
-    </message>
-    <message>
-        <source>strand</source>
-        <translation>Направление</translation>
-    </message>
-    <message>
-        <source>Clear Results</source>
-        <translation>Очистить</translation>
-    </message>
-    <message>
-        <source>Save As Annotation</source>
-        <translation>Сохранить как аннотации</translation>
-    </message>
-    <message>
-        <source>Status</source>
-        <translation>Состояние</translation>
-    </message>
-    <message>
-        <source>score</source>
-        <translation>количество</translation>
-    </message>
-</context>
-<context>
-    <name>SignalsExtrWiz</name>
-    <message>
-        <source>Setup algorithm parameters</source>
-        <translation>Установка параметров алгоритма</translation>
-    </message>
-    <message>
-        <source>This wizard will help you automaticaly extract complex signals from sequences.</source>
-        <translation>Автоматическое выделение комплексных сигналов из последовательностей.</translation>
-    </message>
-    <message>
-        <source>Please fill in selection parameters</source>
-        <translation>Параметры отбора сигналов</translation>
-    </message>
-    <message>
-        <source>Condition probability level</source>
-        <translation>Уровень условной вероятности</translation>
-    </message>
-    <message>
-        <source>Fisher criteria level</source>
-        <translation>Уровень значимости по критерию Фишера</translation>
-    </message>
-    <message>
-        <source>Check minimization of Fisher criteria</source>
-        <translation>Минимизация критерия Фишера</translation>
-    </message>
-    <message>
-        <source>Store only signals with different behaviour</source>
-        <translation>Сохранять только сигналы с различным поведением</translation>
-    </message>
-    <message>
-        <source>Check Ul criteria</source>
-        <translation>Учитывать U-критерий</translation>
-    </message>
-    <message>
-        <source>Samples bound</source>
-        <translation>Порог по выборкам</translation>
-    </message>
-    <message>
-        <source>Level bound</source>
-        <translation>Порог по уровню</translation>
-    </message>
-    <message>
-        <source>Advanced...</source>
-        <translation>Дополнительно...</translation>
-    </message>
-    <message>
-        <source>Setup predicates</source>
-        <translation>Установка предикатов</translation>
-    </message>
-    <message>
-        <source>Distance</source>
-        <translation>Дистанция</translation>
-    </message>
-    <message>
-        <source>Repetition</source>
-        <translation>Повторение</translation>
-    </message>
-    <message>
-        <source>Interval</source>
-        <translation>Интервал</translation>
-    </message>
-    <message>
-        <source>Delete</source>
-        <translation>Удалить</translation>
-    </message>
-    <message>
-        <source>Editor</source>
-        <translation>Редактор</translation>
-    </message>
-    <message>
-        <source>Extractor Parameters Setup</source>
-        <translation>Установка параметров выделения сигналов</translation>
-    </message>
-    <message>
-        <source>Minimal Complexity</source>
-        <translation>Минимальная сложность</translation>
-    </message>
-    <message>
-        <source>Maximal Complexity</source>
-        <translation>Максимальная сложность</translation>
-    </message>
-    <message>
-        <source>Coverage bound</source>
-        <translation>Порог покрытия</translation>
-    </message>
-    <message>
-        <source>Please create some predicates that will be used in complex signal construction process. Note, some predicates are generated by default.</source>
-        <translation>Пожалуйста, создайте некоторые предикаты, на основании которых будут построены комплексные сигналы. Некоторые предикаты создаются по умолчанию.</translation>
-    </message>
-    <message>
-        <source>Aligned (If you sequence set is aligned, Interval predicated will be generated)</source>
-        <translation>Выровненные (Если выборка выровненна, предикаты "Интервал" будут созданы автоматически)</translation>
-    </message>
-    <message>
-        <source>Select a folder</source>
-        <translation>Выберите папку</translation>
-    </message>
-    <message>
-        <source>Select a folder to store extracted complex signals</source>
-        <translation>Выберите папку для сохранения выделенных сигналов</translation>
-    </message>
-    <message>
-        <source>Create Root Subfolder</source>
-        <translation>Создать подпапку корня</translation>
-    </message>
-    <message>
-        <source>Folder Name:</source>
-        <translation>Имя папки:</translation>
-    </message>
-</context>
-<context>
-    <name>U2::DistanceSet</name>
-    <message>
-        <source>Distance from</source>
-        <translation>Дистанция от</translation>
-    </message>
-    <message>
-        <source>Distance to</source>
-        <translation>Дистанция до</translation>
-    </message>
-    <message>
-        <source>Unlimited</source>
-        <translation>Неограниченный</translation>
-    </message>
-    <message>
-        <source>Take order into account</source>
-        <translation>учитывать порядок</translation>
-    </message>
-    <message>
-        <source>Wrong parameters</source>
-        <translation>Неправильные парметры</translation>
-    </message>
-    <message>
-        <source>Higher bound must be grater then lower bound</source>
-        <translation>Верхняя грнаица должна быть больше нижней границы</translation>
-    </message>
-</context>
-<context>
-    <name>U2::EDProjectTree</name>
-    <message>
-        <source>Rename error</source>
-        <translation>Ошибка переименовывания</translation>
-    </message>
-    <message>
-        <source>Folder already exist</source>
-        <translation>Папка уже существует</translation>
-    </message>
-    <message>
-        <source>Signal rename</source>
-        <translation>Переименовать сигнал</translation>
-    </message>
-    <message>
-        <source>Signal with the same name already exist. Replace?</source>
-        <translation>Сигнал с таким именем уже существует. Заменить?</translation>
-    </message>
-    <message>
-        <source>Select/deselect signal</source>
-        <translation>Селектировать/деселктировать сигнал</translation>
-    </message>
-    <message>
-        <source>New folder</source>
-        <translation>Новая папка</translation>
-    </message>
-    <message>
-        <source>New signal</source>
-        <translation>Новый сигнал</translation>
-    </message>
-    <message>
-        <source>Delete</source>
-        <translation>Удалить</translation>
-    </message>
-    <message>
-        <source>Select all signals</source>
-        <translation>Селектировать все сигналы</translation>
-    </message>
-    <message>
-        <source>Deselect all signals</source>
-        <translation>Деселектировать все сигналы</translation>
-    </message>
-    <message>
-        <source>Set prior parameters of all signals</source>
-        <translation>Установить ожидаемые параметры всех сигналов</translation>
-    </message>
-    <message>
-        <source>Clear prior parameters of all signals</source>
-        <translation>Очистить ожидаемые параметры всех сигналов</translation>
-    </message>
-    <message>
-        <source>Set current params as prior</source>
-        <translation>Установить текущие параметры, как ожидаемые</translation>
-    </message>
-    <message>
-        <source>Clear prior params</source>
-        <translation>Очистить ожидаемые параметры</translation>
-    </message>
-    <message>
-        <source>Markup letters</source>
-        <translation>Разметка буквами</translation>
-    </message>
-    <message>
-        <source>Load markup</source>
-        <translation>Загрузка разметок</translation>
-    </message>
-    <message>
-        <source>Generate report</source>
-        <translation>Генерировать отчет</translation>
-    </message>
-    <message>
-        <source>Increasing</source>
-        <translation>Возрастание</translation>
-    </message>
-    <message>
-        <source>Decreasing</source>
-        <translation>Убывание</translation>
-    </message>
-    <message>
-        <source>Coverage</source>
-        <translation>Покрытие</translation>
-    </message>
-    <message>
-        <source>Fisher</source>
-        <translation>Фишер</translation>
-    </message>
-    <message>
-        <source>Name</source>
-        <translation>Имя</translation>
-    </message>
-    <message>
-        <source>Probability</source>
-        <translation>Вероятность</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation>Ошибка</translation>
-    </message>
-    <message>
-        <source>The value must be positive integer which is less than the higher bound</source>
-        <translation>Значение должно быть положительным целым и ниже верхней границы</translation>
-    </message>
-    <message>
-        <source>The value must be grater than the lower bound</source>
-        <translation>Значение должно быть выше нижней границы</translation>
-    </message>
-    <message>
-        <source>The word must be in 15-character code</source>
-        <translation>Слово должно быть в 15-буквенном алфавите</translation>
-    </message>
-    <message>
-        <source>Select signal</source>
-        <translation>Селектировать сигнал</translation>
-    </message>
-    <message>
-        <source>Deselect signal</source>
-        <translation>Деселектировать сигнал</translation>
-    </message>
-    <message>
-        <source>Show one sequence</source>
-        <translation>Показать одну последовательность</translation>
-    </message>
-    <message>
-        <source>Add to displayed</source>
-        <translation>Добавить к отображаемым</translation>
-    </message>
-    <message>
-        <source>Clear displayed sequences area</source>
-        <translation>Очистить область отображения</translation>
-    </message>
-    <message>
-        <source>Show sequences</source>
-        <translation>Отобразить последовательности</translation>
-    </message>
-    <message>
-        <source>Sort</source>
-        <translation>Сортировка</translation>
-    </message>
-    <message>
-        <source>Field</source>
-        <translation>Поле</translation>
-    </message>
-    <message>
-        <source>Order</source>
-        <translation>Порядок</translation>
-    </message>
-    <message>
-        <source>Add signal to markup</source>
-        <translation>Добавить сигнал в разметку</translation>
-    </message>
-    <message>
-        <source>Export Sequences</source>
-        <translation>Экспорт последовательностей</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryAdvSetDialog</name>
-    <message>
-        <source>Wrong parameters</source>
-        <translation>Неверные параметры</translation>
-    </message>
-    <message>
-        <source>Minimal complexity must not be grater then maximal complexity and positive</source>
-        <translation>Минимальная сложность должна быть меньше, чем максимальная и положительной</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryCalculateErrors</name>
-    <message>
-        <source>Error calculation</source>
-        <translation>Ошибка вычисления</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryControlDialog</name>
-    <message>
-        <source>Select files</source>
-        <translation>Выберети файлы</translation>
-    </message>
-    <message>
-        <source>Select files for ExpertDiscovery</source>
-        <translation>Выберете файлы для ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Open control sequences file</source>
-        <translation>Открыть файл с контрольными последовательностями</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryControlMrkDialog</name>
-    <message>
-        <source>Select files</source>
-        <translation>выберете файлы</translation>
-    </message>
-    <message>
-        <source>Select files for ExpertDiscovery</source>
-        <translation>Выбрете файлы для ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Open control sequences markup file</source>
-        <translation>Открыть файс с разметками конторольных последовательностей</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryCreateViewTask</name>
-    <message>
-        <source>ED</source>
-        <translation>ED</translation>
-    </message>
-    <message>
-        <source>Maximum number of objects per view reached: %1</source>
-        <translation>Максимальное число последовательностей для отображения достигнуто: %1</translation>
-    </message>
-    <message>
-        <source>Sequence object not available! URL %1, name %2</source>
-        <translation>Последовательность не доступан! URL %1, name %2</translation>
-    </message>
-    <message>
-        <source>No sequence objects found</source>
-        <translation>Не найдены последовательности</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryData</name>
-    <message>
-        <source>Cancel</source>
-        <translation>Отмена</translation>
-    </message>
-    <message>
-        <source>Updating positive sequences</source>
-        <translation>Обновление позитивной выборки</translation>
-    </message>
-    <message>
-        <source>Updating negative sequences</source>
-        <translation>Обновление негативной выборки</translation>
-    </message>
-    <message>
-        <source>Updating control sequences</source>
-        <translation>Обновление контрольной выборки</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation>Ошибка</translation>
-    </message>
-    <message>
-        <source>Hypertext files (*.htm *.html)</source>
-        <translation>Hypertext files (*htm *html)</translation>
-    </message>
-    <message>
-        <source>Report generation failed</source>
-        <translation>Ошибка генерации отчета</translation>
-    </message>
-    <message>
-        <source>Setting up recognition bound. Please wait</source>
-        <translation>Установка порога распознавания. Пожалуйста подождите</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryErrors</name>
-    <message>
-        <source>File opening error</source>
-        <translation>Ошибка открытия файла</translation>
-    </message>
-    <message>
-        <source>Error opening file %1</source>
-        <translation>Ошибка открытия файла %1</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation>Ошибка</translation>
-    </message>
-    <message>
-        <source>Error loading markups</source>
-        <translation>Ошибка загрузки разметок</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryExportSequences</name>
-    <message>
-        <source>Export Sequences Task</source>
-        <translation>Экспорт последовательностей</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation type="obsolete">Ошибка</translation>
-    </message>
-    <message>
-        <source>Save File</source>
-        <translation>Сохранить файл</translation>
-    </message>
-    <message>
-        <source>Report generation failed: </source>
-        <translation>Ошибка генерации отчета:</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryExtSigWiz</name>
-    <message>
-        <source>No predicates</source>
-        <translation>нет предикатов</translation>
-    </message>
-    <message>
-        <source>Create a predicate to perform signal generation</source>
-        <translation>Создайте предикат, чтобы запустить выделение сигналов</translation>
-    </message>
-    <message>
-        <source>Wrong parameters</source>
-        <translation>Неверные параметры</translation>
-    </message>
-    <message>
-        <source>Complex signals</source>
-        <translation>Комплексные сигналы</translation>
-    </message>
-    <message>
-        <source>Select predicate on the tree above or create a new one using buttons.</source>
-        <translation>Создайте предикаты и задайте их параметры.</translation>
-    </message>
-    <message>
-        <source>Minimal complexity must not be grater then maximal complexity and positive</source>
-        <translation>Минимальная сложность должна быть меньше, чем максимальная и положительной</translation>
-    </message>
-    <message>
-        <source>Specify folder name</source>
-        <translation>Укажите имя папки</translation>
-    </message>
-    <message>
-        <source>Please specify a name for your folder</source>
-        <translation>Пожалуйста, укажите имя для вашей папки</translation>
-    </message>
-    <message>
-        <source>Item with the same name already exist. Please enter another name</source>
-        <translation>Элемент с таким же именем уже существует. Пожалуйста, введите другое имя</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryLoadControlMrkTask</name>
-    <message>
-        <source>ExpertDiscovery loading</source>
-        <translation>Загрузка ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation type="obsolete">Ошибка</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryLoadControlTask</name>
-    <message>
-        <source>ExpertDiscovery loading</source>
-        <translation>ExpertDiscovery загрузка</translation>
-    </message>
-    <message>
-        <source>Detecting format error for file %1</source>
-        <translation>Ошибка определения формата для файла %1</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryLoadPosNegMrkTask</name>
-    <message>
-        <source>ExpertDiscovery loading</source>
-        <translation>Загрузка ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation type="obsolete">Ошибка</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryLoadPosNegTask</name>
-    <message>
-        <source>ExpertDiscovery loading</source>
-        <translation>Загрузка ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Detecting format error for file %1</source>
-        <translation>Ошибка определения формата для файла %1</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryPlugin</name>
-    <message>
-        <source>Expert Discovery</source>
-        <translation>Expert Discovery</translation>
-    </message>
-    <message>
-        <source>Expert Discovery plugin</source>
-        <translation>ExpertDiscovery это система для анализа и распознавания регуляторных областей, использующая иерархический подход.Она реализует мощный метода машинного обучения "Discovery" (http://math.nsc.ru/AP/ScientificDiscovery/)</translation>
-    </message>
-    <message>
-        <source>Expert Discovery...</source>
-        <translation>Expert Discovery...</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryPosNegDialog</name>
-    <message>
-        <source>Select files</source>
-        <translation>Выберете файлы</translation>
-    </message>
-    <message>
-        <source>Positive and negative sequences can't be in the one file. Select another file for one of them</source>
-        <translation>Позитивная и негативня выборка не может быть в одном и том же файле. Выберете другой файл для одной из них</translation>
-    </message>
-    <message>
-        <source>Select files for ExpertDiscovery</source>
-        <translation>Выберете файлы для ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Open positive sequences file</source>
-        <translation>Открыть файл с позитивными последовательностями</translation>
-    </message>
-    <message>
-        <source>Open second file</source>
-        <translation>Открыть второй файл</translation>
-    </message>
-    <message>
-        <source>Next</source>
-        <translation>Далее</translation>
-    </message>
-    <message>
-        <source>Cancel</source>
-        <translation>Отмена</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryPosNegMrkDialog</name>
-    <message>
-        <source>Select files</source>
-        <translation>Выберете файлы</translation>
-    </message>
-    <message>
-        <source>Select description file</source>
-        <translation>Выберете файл описания</translation>
-    </message>
-    <message>
-        <source>Open positive sequences markup file</source>
-        <translation>Открыть файл с разместкой позитивных последовательностей</translation>
-    </message>
-    <message>
-        <source>Open second file</source>
-        <translation>Открыть второй файл</translation>
-    </message>
-    <message>
-        <source>Open description file</source>
-        <translation>Открыть файл описания</translation>
-    </message>
-    <message>
-        <source>Select positive markup file at least or chose 'Nucleotides markup'</source>
-        <translation>Выберите, по крайней мере, файл с разметкой позитивной выборки или выберите 'Разметка нуклеотидами'</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryScoreGraphFactory</name>
-    <message>
-        <source>Score graph</source>
-        <translation>График распознавания</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoverySearchDialogController</name>
-    <message>
-        <source>Cancel</source>
-        <translation>Отмена</translation>
-    </message>
-    <message>
-        <source>Close</source>
-        <translation>Закрыть</translation>
-    </message>
-    <message>
-        <source>Progress %1%</source>
-        <translation>Прогресс %1%</translation>
-    </message>
-    <message>
-        <source>%1 results found.</source>
-        <translation>%1 найденных результатов.</translation>
-    </message>
-    <message>
-        <source>complement strand</source>
-        <translation>комплементарная цепь</translation>
-    </message>
-    <message>
-        <source>direct strand</source>
-        <translation>прямая цепь</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoverySearchTask</name>
-    <message>
-        <source>ExpertDiscovery Search</source>
-        <translation>ExpertDiscovery поиск</translation>
-    </message>
-    <message>
-        <source>ExpertDiscovery Search Parallel</source>
-        <translation>ExpertDiscovery параллельный поиск</translation>
-    </message>
-    <message>
-        <source>Internal error, score:%1</source>
-        <translation>Внутренняя ошибка, вес: %1</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoverySetupRecBoundDialog</name>
-    <message>
-        <source>Wrong bound interval</source>
-        <translation>Неверный интервал порога</translation>
-    </message>
-    <message>
-        <source>Minimal bound must not be grater then maximal bound</source>
-        <translation>Минимальный порог должен быть меньше, чем максимальный порог</translation>
-    </message>
-    <message>
-        <source>Wrong step value</source>
-        <translation>Неверное значение шага</translation>
-    </message>
-    <message>
-        <source>Bound step must be non zero</source>
-        <translation>Шаг порога должен быть ненулевым</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoverySignalExtractorTask</name>
-    <message>
-        <source>ExpertDiscovery signals extracting</source>
-        <translation>ExpertDiscovery выделение сигналов</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoverySignalsAutoAnnotationUpdater</name>
-    <message>
-        <source>Signals</source>
-        <translation>Комплексные сигналы</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryToAnnotationTask</name>
-    <message>
-        <source>Find and store expert discovery signals on a sequence</source>
-        <translation>Найти и сохранить комплксные сигналы на последовательности</translation>
-    </message>
-    <message>
-        <source>Annotation table does not exist</source>
-        <translation>Таблица аннотаций не существует</translation>
-    </message>
-    <message>
-        <source>Annotation table is read-only</source>
-        <translation>Таблица аннотаций только для чтения</translation>
-    </message>
-    <message>
-        <source>No expert discovery sequence</source>
-        <translation>Нет последовательности ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Annotation obj %1 is locked for modifications</source>
-        <translation>Аннотация %1 заблокирована</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryView</name>
-    <message>
-        <source>Load control sequences</source>
-        <translation>Загрузка контрольных последовательностей</translation>
-    </message>
-    <message>
-        <source>Extract signals</source>
-        <translation>Выделение сигналов</translation>
-    </message>
-    <message>
-        <source>Load markup</source>
-        <translation>Загрузка разметок</translation>
-    </message>
-    <message>
-        <source>Load control sequences markup</source>
-        <translation>Загрузка разметок контрольных последовательностей</translation>
-    </message>
-    <message>
-        <source>Generate recognition report</source>
-        <translation>Генерация отчета о распозновании</translation>
-    </message>
-    <message>
-        <source>Load ExpertDiscovery document</source>
-        <translation>Загрузка документа ExpeertDiscovery</translation>
-    </message>
-    <message>
-        <source>ExpertDiscovery files (*.exd)</source>
-        <translation>Файлы ExpertDiscovery (*.exd)</translation>
-    </message>
-    <message>
-        <source>Save ExpertDiscovery document</source>
-        <translation>Сохранить документ ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Do you want to save current ExpertDiscovery document?</source>
-        <translation>Вы хотите сохранить текущий документ ExpertDiscovery?</translation>
-    </message>
-    <message>
-        <source>Error</source>
-        <translation>Ошибка</translation>
-    </message>
-    <message>
-        <source>No signals are selected to generate report</source>
-        <translation>Не выбраны сигналы для генерации отчета</translation>
-    </message>
-    <message>
-        <source>Set Recognition Bound</source>
-        <translation>Установка порога распознования</translation>
-    </message>
-    <message>
-        <source>New Expert Discovery Document</source>
-        <translation>Создать новый документ Expert Discovery</translation>
-    </message>
-    <message>
-        <source>Open Expert Discovery Document</source>
-        <translation>Открыть документ Expert Discovery</translation>
-    </message>
-    <message>
-        <source>Save Expert Discovery Document</source>
-        <translation>Сохранить документ Expert Discovery</translation>
-    </message>
-    <message>
-        <source>Search for regions with ExpertDiscovery</source>
-        <translation type="vanished">Поиск областей с ExpertDiscovery</translation>
-    </message>
-    <message>
-        <source>Search for regions with Expert Discovery</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExpertDiscoveryViewWindow</name>
-    <message>
-        <source>Closing error</source>
-        <translation>Ошибка при закрытии</translation>
-    </message>
-    <message>
-        <source>There are unfinished extracting tasks. Cancel them before closing</source>
-        <translation>Задание по загрузке сигналов не завершено. Отмените его перед закрытием</translation>
-    </message>
-</context>
-<context>
-    <name>U2::IntervalSet</name>
-    <message>
-        <source>Interval from</source>
-        <translation>Интервал от</translation>
-    </message>
-    <message>
-        <source>Interval to</source>
-        <translation>Интервал до</translation>
-    </message>
-    <message>
-        <source>Unlimited</source>
-        <translation>Неограниченный</translation>
-    </message>
-    <message>
-        <source>Wrong parameters</source>
-        <translation>Неправильные парметры</translation>
-    </message>
-    <message>
-        <source>Higher bound must be grater then lower bound</source>
-        <translation>Верхняя грнаица должна быть больше нижней границы</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RepetitionSet</name>
-    <message>
-        <source>Distance from</source>
-        <translation>Дистанция от</translation>
-    </message>
-    <message>
-        <source>Distance to</source>
-        <translation>Дистанция до</translation>
-    </message>
-    <message>
-        <source>Unlimited</source>
-        <translation>Неограниченный</translation>
-    </message>
-    <message>
-        <source>Count from</source>
-        <translation>Считая от</translation>
-    </message>
-    <message>
-        <source>Count to</source>
-        <translation>Считая до</translation>
-    </message>
-    <message>
-        <source>Wrong parameters</source>
-        <translation>Неправильные парметры</translation>
-    </message>
-    <message>
-        <source>Higher bound must be grater then lower bound</source>
-        <translation>Верхняя грнаица должна быть больше нижней границы</translation>
-    </message>
-</context>
-</TS>
diff --git a/src/plugins/external_tool_support/CMakeLists.txt b/src/plugins/external_tool_support/CMakeLists.txt
new file mode 100644
index 0000000..81acbe0
--- /dev/null
+++ b/src/plugins/external_tool_support/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME external_tool_support)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/external_tool_support/external_tool_support.pro b/src/plugins/external_tool_support/external_tool_support.pro
index 52f08df..12ddf68 100644
--- a/src/plugins/external_tool_support/external_tool_support.pro
+++ b/src/plugins/external_tool_support/external_tool_support.pro
@@ -158,26 +158,26 @@ HEADERS += src/ETSProjectViewItemsContoller.h \
            src/vcftools/VcfConsensusSupportTask.h \
            src/vcftools/VcfConsensusWorker.h \
            src/vcfutils/VcfutilsSupport.h
-FORMS += src/ui/BlastAllSupportDialog.ui \
-         src/ui/BlastDBCmdDialog.ui \
-         src/ui/BlastDBSelectorWidget.ui \
-         src/ui/BowtieBuildSettings.ui \
-         src/ui/BowtieSettings.ui \
-         src/ui/Bowtie2Settings.ui \
-         src/ui/BwaBuildSettings.ui \
-         src/ui/BwaSettings.ui \
-         src/ui/BwaMemSettings.ui \
-         src/ui/BwaSwSettings.ui \
-         src/ui/CAP3SupportDialog.ui \
-         src/ui/ClustalOSupportRunDialog.ui \
-         src/ui/ClustalWSupportRunDialog.ui \
-         src/ui/ETSSettingsWidget.ui \
-         src/ui/FormatDBSupportRunDialog.ui \
-         src/ui/MAFFTSupportRunDialog.ui \
-         src/ui/MrBayesDialog.ui \
-         src/ui/PhyMLDialog.ui \
-         src/ui/TCoffeeSupportRunDialog.ui \
-         src/ui/SpadesSettings.ui
+FORMS += src/blast/FormatDBSupportRunDialog.ui \
+         src/blast_plus/BlastDBCmdDialog.ui \
+         src/bowtie/BowtieBuildSettings.ui \
+         src/bowtie/BowtieSettings.ui \
+         src/bowtie2/Bowtie2Settings.ui \
+         src/bwa/BwaBuildSettings.ui \
+         src/bwa/BwaSettings.ui \
+         src/bwa/BwaMemSettings.ui \
+         src/bwa/BwaSwSettings.ui \
+         src/cap3/CAP3SupportDialog.ui \
+         src/clustalo/ClustalOSupportRunDialog.ui \
+         src/clustalw/ClustalWSupportRunDialog.ui \
+         src/ETSSettingsWidget.ui \
+         src/mafft/MAFFTSupportRunDialog.ui \
+         src/mrbayes/MrBayesDialog.ui \
+         src/phyml/PhyMLDialog.ui \
+         src/tcoffee/TCoffeeSupportRunDialog.ui \
+         src/spades/SpadesSettings.ui \
+         src/utils/BlastAllSupportDialog.ui \
+         src/utils/BlastDBSelectorWidget.ui
 SOURCES += src/ETSProjectViewItemsContoller.cpp \
            src/ExternalToolManager.cpp \
            src/ExternalToolSupportPlugin.cpp \
diff --git a/src/plugins/external_tool_support/src/ui/ETSSettingsWidget.ui b/src/plugins/external_tool_support/src/ETSSettingsWidget.ui
similarity index 100%
rename from src/plugins/external_tool_support/src/ui/ETSSettingsWidget.ui
rename to src/plugins/external_tool_support/src/ETSSettingsWidget.ui
diff --git a/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.cpp b/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.cpp
index c7b95f2..a0df444 100644
--- a/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.cpp
+++ b/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.cpp
@@ -69,7 +69,7 @@ AppSettingsGUIPageWidget* ExternalToolSupportSettingsPageController::createWidge
     return r;
 }
 
-const QString ExternalToolSupportSettingsPageController::helpPageId = QString("17467526");
+const QString ExternalToolSupportSettingsPageController::helpPageId = QString("17470453");
 
 /////////////////////////////////////////////
 ////ExternalToolSupportSettingsPageWidget
diff --git a/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.h b/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.h
index 058b222..c3e9813 100644
--- a/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.h
+++ b/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.h
@@ -24,7 +24,7 @@
 
 #include <U2Gui/AppSettingsGUI.h>
 #include <U2Core/ExternalToolRegistry.h>
-#include <ui/ui_ETSSettingsWidget.h>
+#include <ui_ETSSettingsWidget.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QLineEdit>
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.h b/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.h
index 441071f..f0342ed 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.h
@@ -25,7 +25,6 @@
 #include <QDialog>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Gui/DialogUtils.h>
-#include <ui/ui_BlastAllSupportDialog.h>
 #include <U2Gui/CreateAnnotationWidgetController.h>
 #include "BlastAllSupportTask.h"
 #include "utils/BlastRunCommonDialog.h"
diff --git a/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.cpp b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.cpp
index 2391ca0..883c2fd 100644
--- a/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.cpp
@@ -44,7 +44,7 @@ FormatDBSupportRunDialog::FormatDBSupportRunDialog(const QString &_name, FormatD
         QDialog(_parent), name(_name), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467793");
+    new HelpButton(this, buttonBox, "17470726");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Format"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     formatButton = buttonBox->button(QDialogButtonBox::Ok);
diff --git a/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.h b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.h
index 0fdd7df..037e988 100644
--- a/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.h
@@ -24,7 +24,7 @@
 
 #include <QDialog>
 #include <U2Gui/DialogUtils.h>
-#include <ui/ui_FormatDBSupportRunDialog.h>
+#include <ui_FormatDBSupportRunDialog.h>
 #include "FormatDBSupportTask.h"
 
 namespace U2 {
diff --git a/src/plugins/external_tool_support/src/ui/FormatDBSupportRunDialog.ui b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.ui
similarity index 100%
rename from src/plugins/external_tool_support/src/ui/FormatDBSupportRunDialog.ui
rename to src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.ui
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 beebece..4c7cf53 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.cpp
@@ -19,92 +19,76 @@
  * 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/BaseDocumentFormats.h>
 
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "BlastDBCmdDialog.h"
 
 namespace U2 {
 
 BlastDBCmdDialog::BlastDBCmdDialog(BlastDBCmdSupportTaskSettings &_settings, QWidget *_parent) :
-        QDialog(_parent), settings(_settings)
+    QDialog(_parent),
+    saveController(NULL),
+    settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467795");
+    new HelpButton(this, buttonBox, "17470728");
+
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Fetch"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
     fetchButton = buttonBox->button(QDialogButtonBox::Ok);
     dbSelector = new BlastDBSelectorWidgetController(this);
     dbSelectorWidget->layout()->addWidget(dbSelector);
-    connect(browseOutputButton, SIGNAL(clicked()), SLOT(sl_onSelectOutputFileButtonClick()));
-    connect(dbSelector, SIGNAL(si_dbChanged()), SLOT(sl_dbSelectorDataChanged()));
-    connect(queryIdEdit, SIGNAL(textChanged( const QString& )), SLOT(sl_onQueryLineEditTextChanged()));
-    connect(cancelButton, SIGNAL(clicked()), SLOT(reject()));
-    connect(fetchButton, SIGNAL(clicked()), SLOT(sl_BlastDBCmd()));
 
-    update();
+    initSaveController();
 
-}
+    connect(dbSelector, SIGNAL(si_dbChanged()), SLOT(sl_update()));
+    connect(queryIdEdit, SIGNAL(textChanged( const QString& )), SLOT(sl_update()));
+    connect(browseOutputButton, SIGNAL(clicked(bool)), SLOT(sl_update()));
 
+    sl_update();
+}
 
-void BlastDBCmdDialog::sl_BlastDBCmd(){
+void BlastDBCmdDialog::accept(){
     if (!dbSelector->validateDatabaseDir()) {
         return;
     }
     settings.query = queryIdEdit->text();
     settings.databasePath = dbSelector->getDatabasePath();
-    settings.outputPath = outputPathLineEdit->text();
+    settings.outputPath = saveController->getSaveFileName();
     settings.isNuclDatabase = dbSelector->isNuclDatabase();
     settings.addToProject = addToProjectBox->isChecked();
 
-    accept();
+    QDialog::accept();
 }
 
-void BlastDBCmdDialog::sl_dbSelectorDataChanged() {
-    update();
-}
-
-void BlastDBCmdDialog::sl_onSelectOutputFileButtonClick()
-{
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Set a result FASTA file name"), lod.dir);
-    if (!lod.url.isEmpty()) {
-        GUrl result = lod.url;
-        if (result.lastFileSuffix().isEmpty()) {
-            result = QString( "%1.fa" ).arg( result.getURLString() );
-        }
-        outputPathLineEdit->setText(result.getURLString());
-    }
-    update();
-}
-
-void BlastDBCmdDialog::update()
-{
-    bool outputPathIsSet = !outputPathLineEdit->text().isEmpty();
+void BlastDBCmdDialog::sl_update() {
+    bool outputPathIsSet = !saveController->getSaveFileName().isEmpty();
     bool queryIsSet = !queryIdEdit->text().isEmpty();
 
     fetchButton->setEnabled(dbSelector->isInputDataValid() && outputPathIsSet && queryIsSet);
+}
 
+void BlastDBCmdDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::FASTA;
+    config.fileDialogButton = browseOutputButton;
+    config.fileNameEdit = outputPathLineEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Set a result FASTA file name");
 
-}
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::FASTA;
 
-void BlastDBCmdDialog::sl_onQueryLineEditTextChanged()
-{
-    update();
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
-void BlastDBCmdDialog::setQueryId( const QString& queryId )
-{
+void BlastDBCmdDialog::setQueryId( const QString& queryId ) {
     queryIdEdit->setText(queryId);
 }
 
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 afe03ec..e86c255 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.h
@@ -23,29 +23,32 @@
 #define _U2_BLAST_DB_CMD_DIALOG_H
 
 #include <QDialog>
+
 #include <U2Gui/DialogUtils.h>
-#include <ui/ui_BlastDBCmdDialog.h>
+#include <ui_BlastDBCmdDialog.h>
 #include "BlastDBCmdSupportTask.h"
 #include "utils/BlastDBSelectorWidgetController.h"
 
 namespace U2 {
 
+class SaveDocumentController;
+
 class BlastDBCmdDialog : public QDialog, public Ui_BlastDBCmdDialog {
     Q_OBJECT
 public:
     BlastDBCmdDialog( BlastDBCmdSupportTaskSettings& settings, QWidget* parent);
     void setQueryId(const QString& queryId);
+
 private slots:
-    void sl_onSelectOutputFileButtonClick();
-    void sl_onQueryLineEditTextChanged();
-    void sl_BlastDBCmd();
-    void sl_dbSelectorDataChanged();
+    void accept();
+    void sl_update();
+
 private:
-    void update();
+    void initSaveController();
 
     BlastDBSelectorWidgetController *dbSelector;
+    SaveDocumentController *saveController;
     BlastDBCmdSupportTaskSettings&    settings;
-    QPushButton* cancelButton;
     QPushButton* fetchButton;
 };
 
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.ui b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.ui
new file mode 100644
index 0000000..94b9996
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.ui
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>BlastDBCmdDialog</class>
+ <widget class="QDialog" name="BlastDBCmdDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>537</width>
+    <height>279</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>537</width>
+    <height>279</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>16777215</width>
+    <height>523</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Fetch Sequence from BLAST Database</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="sizeConstraint">
+    <enum>QLayout::SetMinAndMaxSize</enum>
+   </property>
+   <item>
+    <widget class="QGroupBox" name="inputData">
+     <property name="title">
+      <string/>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <property name="sizeConstraint">
+       <enum>QLayout::SetMinAndMaxSize</enum>
+      </property>
+      <item>
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Entery query ID:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="queryIdEdit"/>
+      </item>
+      <item>
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Select database :</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QWidget" name="dbSelectorWidget" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <layout class="QVBoxLayout" name="verticalLayout_10">
+         <property name="spacing">
+          <number>0</number>
+         </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>
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Output path:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <widget class="QLineEdit" name="outputPathLineEdit">
+          <property name="readOnly">
+           <bool>true</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>
+        <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="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>BlastDBCmdDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>268</x>
+     <y>258</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>268</x>
+     <y>139</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>BlastDBCmdDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>268</x>
+     <y>258</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>268</x>
+     <y>139</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
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 d61ca40..b4d6b79 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.h
@@ -25,7 +25,6 @@
 #include <QDialog>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Gui/DialogUtils.h>
-#include <ui/ui_BlastAllSupportDialog.h>
 #include <U2Gui/CreateAnnotationWidgetController.h>
 #include "BlastPlusSupportCommonTask.h"
 #include "utils/BlastRunCommonDialog.h"
diff --git a/src/plugins/external_tool_support/src/ui/BowtieBuildSettings.ui b/src/plugins/external_tool_support/src/bowtie/BowtieBuildSettings.ui
similarity index 100%
rename from src/plugins/external_tool_support/src/ui/BowtieBuildSettings.ui
rename to src/plugins/external_tool_support/src/bowtie/BowtieBuildSettings.ui
diff --git a/src/plugins/external_tool_support/src/ui/BowtieSettings.ui b/src/plugins/external_tool_support/src/bowtie/BowtieSettings.ui
similarity index 100%
rename from src/plugins/external_tool_support/src/ui/BowtieSettings.ui
rename to src/plugins/external_tool_support/src/bowtie/BowtieSettings.ui
diff --git a/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.h b/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.h
index b7774ab..f87e3dd 100644
--- a/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.h
+++ b/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.h
@@ -22,8 +22,8 @@
 #ifndef _U2_BOWTIE_SETTINGS_WIDGET_H_
 #define _U2_BOWTIE_SETTINGS_WIDGET_H_
 
-#include "ui/ui_BowtieSettings.h"
-#include "ui/ui_BowtieBuildSettings.h"
+#include "ui_BowtieSettings.h"
+#include "ui_BowtieBuildSettings.h"
 #include "U2View/DnaAssemblyGUIExtension.h"
 
 namespace U2 {
diff --git a/src/plugins/external_tool_support/src/ui/Bowtie2Settings.ui b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Settings.ui
similarity index 100%
rename from src/plugins/external_tool_support/src/ui/Bowtie2Settings.ui
rename to src/plugins/external_tool_support/src/bowtie2/Bowtie2Settings.ui
diff --git a/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.h b/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.h
index c195bfe..c2f5a6e 100644
--- a/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.h
+++ b/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.h
@@ -22,7 +22,7 @@
 #ifndef _U2_BOWTIE2_SETTINGS_WIDGET_H
 #define _U2_BOWTIE2_SETTINGS_WIDGET_H
 
-#include "ui/ui_Bowtie2Settings.h"
+#include "ui_Bowtie2Settings.h"
 #include <U2View/DnaAssemblyGUIExtension.h>
 
 namespace U2 {
diff --git a/src/plugins/external_tool_support/src/bwa/BwaBuildSettings.ui b/src/plugins/external_tool_support/src/bwa/BwaBuildSettings.ui
new file mode 100644
index 0000000..21875b4
--- /dev/null
+++ b/src/plugins/external_tool_support/src/bwa/BwaBuildSettings.ui
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>BwaBuildSettings</class>
+ <widget class="QWidget" name="BwaBuildSettings">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>239</width>
+    <height>98</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <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>
+   <property name="horizontalSpacing">
+    <number>0</number>
+   </property>
+   <property name="verticalSpacing">
+    <number>6</number>
+   </property>
+   <item row="1" column="0" colspan="2">
+    <widget class="QLabel" name="infoLabel">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="scaledContents">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Index algorithm (-a)</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+     </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>
+ <tabstops>
+  <tabstop>indexAlgorithmComboBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins/external_tool_support/src/ui/BwaMemSettings.ui b/src/plugins/external_tool_support/src/bwa/BwaMemSettings.ui
similarity index 100%
rename from src/plugins/external_tool_support/src/ui/BwaMemSettings.ui
rename to src/plugins/external_tool_support/src/bwa/BwaMemSettings.ui
diff --git a/src/plugins/external_tool_support/src/ui/BwaSettings.ui b/src/plugins/external_tool_support/src/bwa/BwaSettings.ui
similarity index 100%
rename from src/plugins/external_tool_support/src/ui/BwaSettings.ui
rename to src/plugins/external_tool_support/src/bwa/BwaSettings.ui
diff --git a/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.cpp b/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.cpp
index 0dc5591..2c25496 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.cpp
+++ b/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.cpp
@@ -42,7 +42,7 @@ const QString IS_BUILD_INDEX_ALGO_WARNING =          QObject::tr( "NOTE: \"is\"
     "to achieve stable BWA performance it is strongly recommend to set the index algorithm to "
     "\"bwtsw\"" );
 const QString BWTSW_BUILD_INDEX_ALGO_WARNING =       QObject::tr( "NOTE: \"bwtsw\" index algorithm"
-    " is not supposed to work with reference sequences having size smaller than 10 MB. In order "
+    " is not supposed to work with reference sequences having size smaller than 10 MB.\nIn order "
     "to achieve stable BWA performance it is strongly recommend to set the index algorithm to "
     "\"is\"" );
 
@@ -132,27 +132,7 @@ BwaSettingsWidget::BwaSettingsWidget(QWidget *parent)
 QMap<QString,QVariant> BwaSettingsWidget::getDnaAssemblyCustomSettings() const {
     QMap<QString, QVariant> settings;
 
-    {
-        QString algorithm;
-        switch(indexAlgorithmComboBox->currentIndex()) {
-        case 0:
-            algorithm = "autodetect";
-            break;
-        case 1:
-            algorithm = "bwtsw";
-            break;
-        case 2:
-            algorithm = "div";
-            break;
-        case 3:
-            algorithm = "is";
-            break;
-        default:
-            assert(false);
-            break;
-        }
-        settings.insert(BwaTask::OPTION_INDEX_ALGORITHM, algorithm);
-    }
+    settings.insert(BwaTask::OPTION_INDEX_ALGORITHM, indexAlgorithmComboBox->currentText());
     if(maxDiffRadioButton->isChecked()) {
         settings.insert(BwaTask::OPTION_N, maxDiffSpinBox->value());
     } else {
@@ -199,27 +179,7 @@ BwaBuildSettingsWidget::BwaBuildSettingsWidget(QWidget *parent)
 
 QMap<QString,QVariant> BwaBuildSettingsWidget::getBuildIndexCustomSettings() {
     QMap<QString, QVariant> settings;
-    {
-        QString algorithm;
-        switch(indexAlgorithmComboBox->currentIndex()) {
-        case 0:
-            algorithm = "autodetect";
-            break;
-        case 1:
-            algorithm = "bwtsw";
-            break;
-        case 2:
-            algorithm = "div";
-            break;
-        case 3:
-            algorithm = "is";
-            break;
-        default:
-            assert(false);
-            break;
-        }
-        settings.insert(BwaTask::OPTION_INDEX_ALGORITHM, algorithm);
-    }
+    settings.insert(BwaTask::OPTION_INDEX_ALGORITHM, indexAlgorithmComboBox->currentText());
     return settings;
 }
 
diff --git a/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.h b/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.h
index c823b26..a384d64 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.h
+++ b/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.h
@@ -22,10 +22,10 @@
 #ifndef _U2_BWA_SETTINGS_WIDGET_H_
 #define _U2_BWA_SETTINGS_WIDGET_H_
 
-#include "ui/ui_BwaSettings.h"
-#include "ui/ui_BwaMemSettings.h"
-#include "ui/ui_BwaSwSettings.h"
-#include "ui/ui_BwaBuildSettings.h"
+#include "ui_BwaSettings.h"
+#include "ui_BwaMemSettings.h"
+#include "ui_BwaSwSettings.h"
+#include "ui_BwaBuildSettings.h"
 #include "U2View/DnaAssemblyGUIExtension.h"
 
 class BwaIndexAlgorithmWarningReporter : public QObject {
diff --git a/src/plugins/external_tool_support/src/ui/BwaSwSettings.ui b/src/plugins/external_tool_support/src/bwa/BwaSwSettings.ui
similarity index 100%
rename from src/plugins/external_tool_support/src/ui/BwaSwSettings.ui
rename to src/plugins/external_tool_support/src/bwa/BwaSwSettings.ui
diff --git a/src/plugins/external_tool_support/src/bwa/BwaTask.cpp b/src/plugins/external_tool_support/src/bwa/BwaTask.cpp
index 0f5c527..20b1f7d 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaTask.cpp
+++ b/src/plugins/external_tool_support/src/bwa/BwaTask.cpp
@@ -21,10 +21,17 @@
 
 #include <QtCore/QDir>
 
+#include <U2Core/AppContext.h>
+#include <U2Core/AppResources.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/Counter.h>
 #include <U2Core/DocumentUtils.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/AppResources.h>
+#include <U2Core/MultiTask.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include <U2Formats/BAMUtils.h>
+#include <U2Formats/MergeBamTask.h>
 
 #include "BwaSupport.h"
 #include "BwaTask.h"
@@ -70,13 +77,21 @@ void BwaBuildIndexTask::LogParser::parseErrOutput(const QString &partOfLog) {
 
 // BwaAlignTask
 
+void cleanupTempDir(const QStringList &tempDirFiles) {
+    foreach(const QString& url, tempDirFiles) {
+        QFile toDelete(url);
+        if (toDelete.exists(url)) {
+            toDelete.remove(url);
+        }
+    }
+}
+
 BwaAlignTask::BwaAlignTask(const QString &indexPath, const QList<ShortReadSet>& shortReadSets, const QString &resultPath, const DnaAssemblyToRefTaskSettings &settings):
     Task("Bwa reads assembly", TaskFlags_NR_FOSCOE),
     indexPath(indexPath),
     readSets(shortReadSets),
     resultPath(resultPath),
-    settings(settings),
-    alignmentPerformed(false)
+    settings(settings)
 {
 }
 
@@ -86,8 +101,6 @@ QString BwaAlignTask::getSAIPath(const QString& shortReadsUrl) {
 
 
 void BwaAlignTask::prepare() {
-
-
     if (readSets.size() == 0) {
         setError(tr("Short reads are not provided"));
         return;
@@ -95,13 +108,27 @@ void BwaAlignTask::prepare() {
 
     settings.pairedReads = readSets.at(0).type == ShortReadSet::PairedEndReads;
 
-    if (settings.pairedReads && readSets.size() != 2) {
-        setError(tr("In paired-end mode it possible to analyze only 2 read sets using BWA"));
-        return;
+    const ShortReadSet& readSet = settings.shortReadSets.at(0);
+    settings.pairedReads = readSet.type == ShortReadSet::PairedEndReads;
+
+    if (settings.pairedReads) {
+        foreach(const ShortReadSet& srSet, settings.shortReadSets) {
+            if (srSet.order == ShortReadSet::DownstreamMate) {
+                downStreamList.append(srSet);
+            } else {
+                upStreamList.append(srSet);
+            }
+        }
+        if (upStreamList.size() != downStreamList.size()) {
+            setError(tr("Please, provide same number of files with downstream and upstream reads."));
+        }
     }
 
-    foreach (const ShortReadSet& readSet, readSets) {
+    QList<Task*> alignTasks;
+    for (int resultPartsCounter = 0; resultPartsCounter < settings.shortReadSets.size(); resultPartsCounter++) {
         QStringList arguments;
+        const ShortReadSet& currentReadSet = settings.shortReadSets[resultPartsCounter];
+
         arguments.append("aln");
 
         arguments.append("-n");
@@ -158,40 +185,82 @@ void BwaAlignTask::prepare() {
         }
 
         arguments.append("-f");
-        arguments.append( getSAIPath( readSet.url.getURLString()) );
+        arguments.append( getSAIPath(currentReadSet.url.getURLString()));
         arguments.append(indexPath);
-        arguments.append(readSet.url.getURLString());
+        arguments.append(currentReadSet.url.getURLString());
         Task* alignTask = new ExternalToolRunTask(ET_BWA, arguments, new LogParser(), NULL);
-        addSubTask(alignTask);
         alignTasks.append(alignTask);
     }
+    alignMultiTask = new MultiTask(tr("Align reads with BWA Multitask"), alignTasks);
+    addSubTask(alignMultiTask);
 }
 
 QList<Task *> BwaAlignTask::onSubTaskFinished(Task *subTask) {
-    QList<Task *> result;
-
-    alignTasks.removeOne(subTask);
-
-    if(alignTasks.size() == 0 && !alignmentPerformed) {
-        QStringList arguments;
-
-        settings.pairedReads ? arguments.append("sampe") : arguments.append("samse");
-
-        arguments.append("-f");
-        arguments.append(resultPath);
-        arguments.append(indexPath);
-
-        foreach (const ShortReadSet& set, readSets) {
-            arguments.append( getSAIPath( set.url.getURLString() ) );
+    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;
+        for (int resultPartsCounter = 0; resultPartsCounter < containerToIterate.size(); resultPartsCounter++) {
+            QStringList arguments;
+
+            arguments.append(settings.pairedReads ? "sampe" : "samse");
+
+            arguments.append("-f");
+
+            if (containerToIterate.size() == 1) {
+                arguments.append(resultPath);
+            } else {
+                QString pathToSort = tmpDirPath + "/" + resultPathFileInfo.baseName() + QString::number(resultPartsCounter);
+                urlsToMerge.append(pathToSort);
+                arguments.append(pathToSort);
+            }
+            arguments.append(indexPath);
+            if (settings.pairedReads) {
+                const ShortReadSet &upSet = upStreamList[resultPartsCounter];
+                const ShortReadSet &downSet = downStreamList[resultPartsCounter];
+                arguments.append(getSAIPath(upSet.url.getURLString()));
+                arguments.append(getSAIPath(downSet.url.getURLString()));
+                arguments.append(upSet.url.getURLString());
+                arguments.append(downSet.url.getURLString());
+            } else {
+                const ShortReadSet &currentReadsSet = containerToIterate[resultPartsCounter];
+                arguments.append(getSAIPath(currentReadsSet.url.getURLString()));
+                arguments.append(currentReadsSet.url.getURLString());
+            }
+            ExternalToolRunTask *task = new ExternalToolRunTask(ET_BWA, arguments, new LogParser(), NULL);
+            samTasks.append(task);
         }
-
-        foreach(const ShortReadSet& set, readSets) {
-            arguments.append(set.url.getURLString());
+        samMultiTask = new MultiTask(tr("Saming reads with BWA Multitask"), samTasks);
+        result.append(samMultiTask);
+    } 
+    if (subTask == samMultiTask) {
+        if (settings.shortReadSets.size() == 1 || (settings.shortReadSets.size() == 2 && settings.pairedReads)) {
+            return result;
         }
-
-        alignmentPerformed = true;
-        ExternalToolRunTask *task = new ExternalToolRunTask(ET_BWA, arguments, new LogParser(), NULL);
-        result.append(task);
+        //converting SAM -> BAM
+        QStringList bamUrlstoMerge;
+        foreach(const QString &url, urlsToMerge) {
+            QFileInfo urlToConvertFileInfo(url);
+            QString convertedBamUrl = urlToConvertFileInfo.dir().canonicalPath() + "/" + urlToConvertFileInfo.baseName() + ".bam";
+            BAMUtils::ConvertOption options(true);
+            BAMUtils::convertToSamOrBam(url, convertedBamUrl, options, stateInfo);
+            bamUrlstoMerge.append(convertedBamUrl);
+            if (stateInfo.isCoR()) {
+                cleanupTempDir(urlsToMerge);
+                return result;
+            }
+        }
+        mergeTask = new MergeBamTask(bamUrlstoMerge, resultPathFileInfo.dir().canonicalPath(), resultPathFileInfo.baseName() + ".bam", true);
+        result.append(mergeTask);
+    } 
+    if (subTask == mergeTask) {
+        //converting BAM -> SAM
+        QString bamResultPath = resultPathFileInfo.dir().canonicalPath() + "/" + resultPathFileInfo.baseName() + ".bam";
+        BAMUtils::ConvertOption options(false);
+        BAMUtils::convertToSamOrBam(resultPath, bamResultPath, options, stateInfo);
+        cleanupTempDir(urlsToMerge);
     }
 
     return result;
@@ -233,6 +302,7 @@ void BwaAlignTask::LogParser::parseErrOutput(const QString &partOfLog) {
 BwaMemAlignTask::BwaMemAlignTask(const QString &indexPath, const DnaAssemblyToRefTaskSettings &settings):
     Task("BWA MEM reads assembly", TaskFlags_NR_FOSCOE),
     indexPath(indexPath),
+    resultPath(settings.resultFileName.getURLString()),
     settings(settings)
 {
 }
@@ -243,86 +313,148 @@ void BwaMemAlignTask::prepare() {
         return;
     }
 
-    const ShortReadSet& readSet = settings.shortReadSets.at(0);
+    QList<ShortReadSet> downStreamList;
+    QList<ShortReadSet> upStreamList;
 
+    const ShortReadSet& readSet = settings.shortReadSets.at(0);
     settings.pairedReads = readSet.type == ShortReadSet::PairedEndReads;
 
-    if (settings.pairedReads && settings.shortReadSets.size() != 2) {
-        setError(tr("Wrong settings of paired reads. For paired-read alignment by BWA MEM only a single pair of reads is acceptable."));
-        return;
+    if (settings.pairedReads) {
+        foreach(const ShortReadSet& srSet, settings.shortReadSets) {
+            if (srSet.order == ShortReadSet::DownstreamMate) {
+                downStreamList.append(srSet);
+            } else {
+                upStreamList.append(srSet);
+            }
+        }
+        if (upStreamList.size() != downStreamList.size()) {
+            setError(tr("Please, provide same number of files with downstream and upstream reads."));
+        }
     }
-    QStringList arguments;
 
-    arguments.append("mem");
+    QFileInfo resultFileInfo(settings.resultFileName.getURLString());
+    QList<Task*> alignTasks;
+    for (int resultPartsCounter = 0, pairedReadsCounter = 0; resultPartsCounter < settings.shortReadSets.size(); resultPartsCounter++) {
+        QStringList arguments;
+        const ShortReadSet &currentReadSet = settings.shortReadSets[resultPartsCounter];
+        arguments.append("mem");
 
-    arguments.append("-t");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_THREADS, 1).toString());
+        arguments.append("-t");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_THREADS, 1).toString());
 
-    arguments.append("-k");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_MIN_SEED, 19).toString());
+        arguments.append("-k");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_MIN_SEED, 19).toString());
 
-    arguments.append("-w");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_BAND_WIDTH, 100).toString());
+        arguments.append("-w");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_BAND_WIDTH, 100).toString());
 
-    arguments.append("-d");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_DROPOFF, 100).toString());
+        arguments.append("-d");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_DROPOFF, 100).toString());
 
-    arguments.append("-r");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_INTERNAL_SEED_LOOKUP, float(1.5)).toString());
+        arguments.append("-r");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_INTERNAL_SEED_LOOKUP, float(1.5)).toString());
 
-    arguments.append("-c");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_SKIP_SEED_THRESHOLD, 10000).toString());
+        arguments.append("-c");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_SKIP_SEED_THRESHOLD, 10000).toString());
 
-    //TODO
-    //doesn't work for bwa mem 0.7.4
-    /*
-    arguments.append("-D");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_DROP_CHAINS_THRESHOLD, float(0.5)).toString());
+        if (settings.getCustomValue(BwaTask::OPTION_SKIP_MATE_RESCUES, false).toBool()) {
+            arguments.append("-S");
+        }
 
-    arguments.append("-m");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_MAX_MATE_RESCUES, 100).toString());
-    */
-    if(settings.getCustomValue(BwaTask::OPTION_SKIP_MATE_RESCUES, false).toBool()){
-        arguments.append("-S");
-    }
+        if (settings.getCustomValue(BwaTask::OPTION_SKIP_PAIRING, false).toBool()) {
+            arguments.append("-P");
+        }
 
-    if(settings.getCustomValue(BwaTask::OPTION_SKIP_PAIRING, false).toBool()){
-        arguments.append("-P");
-    }
+        arguments.append("-A");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_MATCH_SCORE, 1).toString());
 
-    arguments.append("-A");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_MATCH_SCORE, 1).toString());
+        arguments.append("-B");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_MISMATCH_PENALTY, 4).toString());
 
-    arguments.append("-B");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_MISMATCH_PENALTY, 4).toString());
+        arguments.append("-O");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_GAP_OPEN_PENALTY, 6).toString());
 
-    arguments.append("-O");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_GAP_OPEN_PENALTY, 6).toString());
+        arguments.append("-E");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_GAP_EXTENSION_PENALTY, 1).toString());
 
-    arguments.append("-E");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_GAP_EXTENSION_PENALTY, 1).toString());
+        arguments.append("-L");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_CLIPPING_PENALTY, 5).toString());
 
-    arguments.append("-L");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_CLIPPING_PENALTY, 5).toString());
+        arguments.append("-U");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_UNPAIRED_PENALTY, 17).toString());
 
-    arguments.append("-U");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_UNPAIRED_PENALTY, 17).toString());
+        arguments.append("-T");
+        arguments.append(settings.getCustomValue(BwaTask::OPTION_SCORE_THRESHOLD, 30).toString());
 
-    arguments.append("-T");
-    arguments.append(settings.getCustomValue(BwaTask::OPTION_SCORE_THRESHOLD, 30).toString());
+        arguments.append(indexPath);
 
-    arguments.append( indexPath );
-    arguments.append( readSet.url.getURLString() );
-    if(settings.pairedReads && settings.shortReadSets.size() == 2){
-        const ShortReadSet& readSetPaired = settings.shortReadSets.at(1);
-        arguments.append( readSetPaired.url.getURLString() );
+        if (settings.pairedReads) {
+            if (resultPartsCounter % 2 != 0) {
+                continue;
+            }
+            arguments.append(upStreamList[pairedReadsCounter].url.getURLString());
+            arguments.append(downStreamList[pairedReadsCounter].url.getURLString());
+            ExternalToolRunTask* alignTask = new ExternalToolRunTask(ET_BWA, arguments, new BwaAlignTask::LogParser(), NULL);
+            if (upStreamList.size() == 1) {
+                alignTask->setStandartOutputFile(settings.resultFileName.getURLString());
+            } else {
+                QString resultFilePathWithpartNumber = resultFileInfo.dir().canonicalPath() + "/" + resultFileInfo.baseName() + "_" +
+                    QString::number(pairedReadsCounter++) + "." + resultFileInfo.completeSuffix();
+                alignTask->setStandartOutputFile(resultFilePathWithpartNumber);
+            }
+            alignTasks.append(alignTask);
+        } 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::number(resultPartsCounter) + "." + resultFileInfo.completeSuffix();
+            alignTask->setStandartOutputFile(resultFilePathWithpartNumber);
+            alignTasks.append(alignTask);
+        } else {
+            arguments.append(currentReadSet.url.getURLString());
+            ExternalToolRunTask* alignTask = new ExternalToolRunTask(ET_BWA, arguments, new BwaAlignTask::LogParser(), NULL);
+            alignTask->setStandartOutputFile(settings.resultFileName.getURLString());
+            alignTasks.append(alignTask);
+        }
     }
-
-    ExternalToolRunTask* alignTask = new ExternalToolRunTask(ET_BWA, arguments, new BwaAlignTask::LogParser(), NULL);
-    alignTask->setStandartOutputFile(settings.resultFileName.getURLString() );
-    addSubTask(alignTask);
+    alignMultiTask = new MultiTask(tr("Align reads with BWA-MEM Multitask"), alignTasks);
+    addSubTask(alignMultiTask);
 }
 
+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)) {
+            return result;
+        }
+        //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::number(i) + "." + resultFileInfo.completeSuffix();
+            QString bamFilePath = tmpDirPath + "/" + resultFileInfo.baseName() + ".bam";
+            BAMUtils::ConvertOption options(true);
+            BAMUtils::convertToSamOrBam(resultFilePathWithpartNumber, bamFilePath, options, stateInfo);
+            bamUrlstoMerge.append(bamFilePath);
+            if (stateInfo.isCoR()) {
+                cleanupTempDir(bamUrlstoMerge);
+                return result;
+            }
+        }
+        mergeTask = new MergeBamTask(bamUrlstoMerge, resultFileInfo.dir().canonicalPath(), resultFileInfo.baseName() + ".bam", true);
+        result.append(mergeTask);
+    } 
+    if (mergeTask == subTask) {
+        //converting BAM -> SAM
+        cleanupTempDir(bamUrlstoMerge);
+        QString bamResultPath = resultFileInfo.dir().canonicalPath() + "/" + resultFileInfo.baseName() + ".bam";
+        BAMUtils::ConvertOption options(false);
+        BAMUtils::convertToSamOrBam(resultPath, bamResultPath, options, stateInfo);
+    }
+    return result;
+}
 
 // BwaSwAlignTask
 
@@ -473,6 +605,15 @@ void BwaTask::prepare() {
     if(!settings.prebuiltIndex) {
         buildIndexTask = new BwaBuildIndexTask(settings.refSeqUrl.getURLString(), indexFileName, settings);
     }
+    int upStreamCount = 0;
+    int downStreamCount = 0;
+    foreach(const ShortReadSet& srSet, settings.shortReadSets) {
+        if (srSet.order == ShortReadSet::DownstreamMate) {
+            downStreamCount++;
+        } else {
+            upStreamCount++;
+        }
+    }
     if(!justBuildIndex) {
         if (settings.getCustomValue(OPTION_SW_ALIGNMENT, false) == true) {
             if(settings.shortReadSets.size() > 1) {
@@ -481,13 +622,11 @@ void BwaTask::prepare() {
             }
             alignTask = new BwaSwAlignTask(indexFileName, settings);
         } else  if (settings.getCustomValue(OPTION_MEM_ALIGNMENT, false) == true) {
-            if(!settings.pairedReads && settings.shortReadSets.size() > 1) {
-                setError(tr("Multiple read files are not supported by bwa-mem. Please combine your reads into single FASTA file."));
-                return;
-            }else if(settings.pairedReads && settings.shortReadSets.size() != 2) {
-                setError(tr("Please, provide two files with paired reads."));
+            if (downStreamCount != upStreamCount && settings.pairedReads) {
+                setError(tr("Please, provide same number of files with downstream and upstream reads."));
                 return;
             }
+            
             alignTask = new BwaMemAlignTask(indexFileName, settings);
         }else{
             alignTask = new BwaAlignTask(indexFileName, settings.shortReadSets, settings.resultFileName.getURLString(), settings);
diff --git a/src/plugins/external_tool_support/src/bwa/BwaTask.h b/src/plugins/external_tool_support/src/bwa/BwaTask.h
index e1560a1..46d3ec2 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaTask.h
+++ b/src/plugins/external_tool_support/src/bwa/BwaTask.h
@@ -29,6 +29,8 @@
 
 namespace U2 {
 
+class MultiTask;
+
 class BwaBuildIndexTask : public Task {
     Q_OBJECT
 public:
@@ -65,13 +67,16 @@ public:
 protected slots:
     QList<Task *> onSubTaskFinished(Task *subTask);
 private:
-
-    QList<Task*> alignTasks;
+    QList<ShortReadSet> downStreamList;
+    QList<ShortReadSet> upStreamList;
+    MultiTask *samMultiTask;
+    QStringList urlsToMerge;
+    MultiTask *alignMultiTask;
+    Task *mergeTask;
     QString indexPath;
     QList<ShortReadSet> readSets;
     QString resultPath;
     DnaAssemblyToRefTaskSettings settings;
-    bool alignmentPerformed;
     inline QString getSAIPath(const QString& pathToReads);
 };
 
@@ -92,8 +97,14 @@ public:
     BwaMemAlignTask(const QString &indexPath, const DnaAssemblyToRefTaskSettings &settings);
     void prepare();
 
+protected slots:
+    QList<Task *> onSubTaskFinished(Task *subTask);
 private:
+    MultiTask *alignMultiTask;
+    Task *mergeTask;
     const QString indexPath;
+    QString resultPath;
+    QStringList bamUrlstoMerge;
     DnaAssemblyToRefTaskSettings settings;
 };
 
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp
index 16c6e19..fea7695 100644
--- a/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp
+++ b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp
@@ -19,17 +19,12 @@
  * 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 <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "CAP3SupportDialog.h"
@@ -40,24 +35,24 @@ namespace U2 {
 //CAP3SupportDialog
 
 CAP3SupportDialog::CAP3SupportDialog(CAP3SupportTaskSettings& s, QWidget* parent)
-: QDialog(parent), settings(s)
+    : QDialog(parent),
+      settings(s),
+      saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467783");
+    new HelpButton(this, buttonBox, "17470716");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     tabWidget->setCurrentIndex(0);
-    QString outputUrl;
-    outputPathLineEdit->setText(outputUrl);
+
+    initSaveController();
 
     connect(addButton, SIGNAL(clicked()), SLOT(sl_onAddButtonClicked()));
     connect(removeButton, SIGNAL(clicked()), SLOT(sl_onRemoveButtonClicked()));
     connect(removeAllButton, SIGNAL(clicked()), SLOT(sl_onRemoveAllButtonClicked()));
-    connect(specifyOutputPathButton, SIGNAL(clicked()), SLOT(sl_onSpecifyOutputPathButtonClicked()));
 
     initSettings();
-
 }
 
 void CAP3SupportDialog::initSettings() {
@@ -82,6 +77,19 @@ void CAP3SupportDialog::initSettings() {
     clippingRangeBox->setValue(settings.clippingRange);
 }
 
+void CAP3SupportDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::ACE;
+    config.fileDialogButton = specifyOutputPathButton;
+    config.fileNameEdit = outputPathLineEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Set Result Contig File Name");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::ACE;
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
 void CAP3SupportDialog::accept()
 {
     if (seqList->count() == 0) {
@@ -95,7 +103,7 @@ void CAP3SupportDialog::accept()
         settings.inputFiles.append( seqList->item(i)->text() );
     }
 
-    QString outputPath = outputPathLineEdit->text();
+    QString outputPath = saveController->getSaveFileName();
     if (outputPath.isEmpty() ) {
         QMessageBox::information(this, windowTitle(),
             tr("Result contig file name is not set!") );
@@ -145,17 +153,14 @@ void CAP3SupportDialog::sl_onAddButtonClicked()
         seqList->addItem(f);
     }
 
-
-    GUrl url( seqList->item(0)->text());
-    outputPathLineEdit->setText(url.dirPath() + "/" + url.baseFileName() + ".cap.ace" );
-
+    GUrl url(seqList->item(0)->text());
+    saveController->setPath(url.dirPath() + "/" + url.baseFileName() + ".cap.ace");
 }
 
 void CAP3SupportDialog::sl_onRemoveButtonClicked()
 {
     int currentRow = seqList->currentRow();
     seqList->takeItem(currentRow);
-
 }
 
 void CAP3SupportDialog::sl_onRemoveAllButtonClicked()
@@ -163,20 +168,4 @@ void CAP3SupportDialog::sl_onRemoveAllButtonClicked()
     seqList->clear();
 }
 
-void CAP3SupportDialog::sl_onSpecifyOutputPathButtonClicked()
-{
-
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Set Result Contig File Name"), lod.dir, tr("ACE format (*.ace)"));
-    if (!lod.url.isEmpty()) {
-        GUrl result = lod.url;
-        if (result.lastFileSuffix().isEmpty()) {
-            result = QString( "%1.ace" ).arg( result.getURLString() );
-        }
-        outputPathLineEdit->setText(result.getURLString());
-    }
-
-}
-
-
 }//namespace
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.h b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.h
index b68a458..3d36539 100644
--- a/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.h
+++ b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.h
@@ -22,32 +22,33 @@
 #ifndef _U2_CAP3_SUPPORT_DIALOG_H_
 #define _U2_CAP3_SUPPORT_DIALOG_H_
 
+#include <QDialog>
+
 #include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-#include <ui/ui_CAP3SupportDialog.h>
+#include <ui_CAP3SupportDialog.h>
 
 namespace U2 {
 
 class CAP3SupportTaskSettings;
+class SaveDocumentController;
 
 class CAP3SupportDialog : public QDialog, public Ui_CAP3SupportDialog {
     Q_OBJECT
 public:
     CAP3SupportDialog(CAP3SupportTaskSettings& settings, QWidget* parent);
     void accept();
+
 private slots:
     void sl_onAddButtonClicked();
     void sl_onRemoveButtonClicked();
     void sl_onRemoveAllButtonClicked();
-    void sl_onSpecifyOutputPathButtonClicked();
-private:
-    CAP3SupportTaskSettings& settings;
 
+private:
     void initSettings();
+    void initSaveController();
+
+    CAP3SupportTaskSettings& settings;
+    SaveDocumentController *saveController;
 };
 
 
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.ui b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.ui
new file mode 100644
index 0000000..0d1e089
--- /dev/null
+++ b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.ui
@@ -0,0 +1,509 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>CAP3SupportDialog</class>
+ <widget class="QDialog" name="CAP3SupportDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>748</width>
+    <height>496</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Contig Assembly with CAP3</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout_6">
+   <property name="sizeConstraint">
+    <enum>QLayout::SetMinAndMaxSize</enum>
+   </property>
+   <item row="0" column="0" colspan="2">
+    <widget class="QTabWidget" name="tabWidget">
+     <property name="currentIndex">
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="tab">
+      <attribute name="title">
+       <string>Base</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="text">
+          <string>Input files (long DNA reads to assembly)</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <layout class="QGridLayout" name="gridLayout">
+         <item row="0" column="0" rowspan="4">
+          <widget class="QListWidget" name="seqList">
+           <property name="toolTip">
+            <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:'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;">Sequences in FASTA or FASTQ formats are supported. </p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The quality scores for FASTA sequences can be provided in an additional file. The file must be located in the same folder as the original sequences and have the same name as FASTA file, but another extention: <span style=" font-weight:600; font-style:italic;">.qual</span></p></body></html></string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <widget class="QPushButton" name="addButton">
+           <property name="text">
+            <string>Add</string>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="1">
+          <widget class="QPushButton" name="removeButton">
+           <property name="text">
+            <string>Remove</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="1">
+          <widget class="QPushButton" name="removeAllButton">
+           <property name="text">
+            <string>Remove All</string>
+           </property>
+          </widget>
+         </item>
+         <item row="3" column="1">
+          <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>
+        </layout>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>Result contig</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout">
+         <item>
+          <widget class="QLineEdit" name="outputPathLineEdit">
+           <property name="toolTip">
+            <string>Path to result contig alignment in ACE format.</string>
+           </property>
+           <property name="readOnly">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QToolButton" name="specifyOutputPathButton">
+           <property name="text">
+            <string>...</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab_2">
+      <attribute name="title">
+       <string>Advanced</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_2">
+       <item row="0" column="0">
+        <widget class="QGroupBox" name="groupBox_3">
+         <property name="title">
+          <string>Clipping for poor regions</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_4">
+          <item row="0" column="0">
+           <widget class="QLabel" name="label_5">
+            <property name="text">
+             <string>Base quality cutoff for clipping (-c)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QSpinBox" name="baseQualityClipCutoffBox">
+            <property name="minimum">
+             <number>5</number>
+            </property>
+            <property name="value">
+             <number>12</number>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLabel" name="label_8">
+            <property name="text">
+             <string>Clipping range (-y)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QSpinBox" name="clippingRangeBox">
+            <property name="minimum">
+             <number>6</number>
+            </property>
+            <property name="maximum">
+             <number>1000</number>
+            </property>
+            <property name="value">
+             <number>250</number>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="0" column="1" colspan="2">
+        <widget class="QGroupBox" name="groupBox_6">
+         <property name="title">
+          <string>Length and percent identity of an overlap</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_7">
+          <item row="0" column="0">
+           <widget class="QLabel" name="label_12">
+            <property name="text">
+             <string>Overlap length cutoff (-o)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="2">
+           <widget class="QSpinBox" name="overlapLengthCutoffBox">
+            <property name="minimum">
+             <number>20</number>
+            </property>
+            <property name="maximum">
+             <number>100</number>
+            </property>
+            <property name="value">
+             <number>40</number>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0" colspan="2">
+           <widget class="QLabel" name="label_15">
+            <property name="text">
+             <string>Overlap percent identity cutoff (-p)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="2">
+           <widget class="QSpinBox" name="overlapPercentIdentityBox">
+            <property name="minimum">
+             <number>65</number>
+            </property>
+            <property name="maximum">
+             <number>100</number>
+            </property>
+            <property name="value">
+             <number>80</number>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QGroupBox" name="groupBox_2">
+         <property name="title">
+          <string>Quality difference score of an overlap</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_3">
+          <item row="0" column="0">
+           <widget class="QLabel" name="label_4">
+            <property name="text">
+             <string>Base quality cutoff for differences (-b)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QSpinBox" name="baseQualityDiffCutoffBox">
+            <property name="minimum">
+             <number>15</number>
+            </property>
+            <property name="value">
+             <number>20</number>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QSpinBox" name="maxQScoreDiffBox">
+            <property name="minimum">
+             <number>20</number>
+            </property>
+            <property name="maximum">
+             <number>1000</number>
+            </property>
+            <property name="value">
+             <number>200</number>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLabel" name="label_6">
+            <property name="text">
+             <string>Max qscore sum at differences (-d)</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item row="1" column="1" rowspan="2" colspan="2">
+        <widget class="QGroupBox" name="groupBox">
+         <property name="title">
+          <string>Other parameters</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_8">
+          <item row="0" column="0">
+           <widget class="QLabel" name="label_7">
+            <property name="text">
+             <string>Max number of word matches (-t)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QSpinBox" name="maxNumWordMatchesBox">
+            <property name="minimum">
+             <number>30</number>
+            </property>
+            <property name="maximum">
+             <number>1000</number>
+            </property>
+            <property name="value">
+             <number>300</number>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLabel" name="label_3">
+            <property name="text">
+             <string>Band expansion size (-a)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QSpinBox" name="bandExpansionBox">
+            <property name="toolTip">
+             <string/>
+            </property>
+            <property name="whatsThis">
+             <string/>
+            </property>
+            <property name="minimum">
+             <number>10</number>
+            </property>
+            <property name="value">
+             <number>20</number>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="0">
+           <widget class="QLabel" name="maxGapLengthInOverlapLabel">
+            <property name="text">
+             <string>Max gap length in any overlap (-f)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="1">
+           <widget class="QSpinBox" name="maxGapLengthBox">
+            <property name="minimum">
+             <number>1</number>
+            </property>
+            <property name="maximum">
+             <number>100</number>
+            </property>
+            <property name="value">
+             <number>20</number>
+            </property>
+           </widget>
+          </item>
+          <item row="3" column="0">
+           <widget class="QCheckBox" name="reverseReadsBox">
+            <property name="text">
+             <string>Assembly reverse reads (-r)</string>
+            </property>
+            <property name="checked">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item row="4" column="0">
+           <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>
+       <item row="2" column="0">
+        <widget class="QGroupBox" name="groupBox_4">
+         <property name="title">
+          <string>Similarity score of an overlap</string>
+         </property>
+         <layout class="QGridLayout" name="gridLayout_5">
+          <item row="1" column="0">
+           <widget class="QLabel" name="label_11">
+            <property name="text">
+             <string>Mismatch score factor (-n)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QSpinBox" name="mismatchScoreFactorBox">
+            <property name="minimum">
+             <number>-100</number>
+            </property>
+            <property name="maximum">
+             <number>-1</number>
+            </property>
+            <property name="value">
+             <number>-5</number>
+            </property>
+           </widget>
+          </item>
+          <item row="4" column="0">
+           <widget class="QLabel" name="OverlapSimilarityScoreCutoffLabel">
+            <property name="text">
+             <string>Overlap similarity score cutoff (-s)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="4" column="1">
+           <widget class="QSpinBox" name="overlapSimilarityScoreCutoffBox">
+            <property name="minimum">
+             <number>400</number>
+            </property>
+            <property name="maximum">
+             <number>1000</number>
+            </property>
+            <property name="value">
+             <number>900</number>
+            </property>
+           </widget>
+          </item>
+          <item row="3" column="0">
+           <widget class="QLabel" name="label_13">
+            <property name="text">
+             <string>Gap penalty factor (-g)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="0">
+           <widget class="QLabel" name="MaxNumbeOfWordMismatchesBox">
+            <property name="text">
+             <string>Match score factor (-m)</string>
+            </property>
+           </widget>
+          </item>
+          <item row="3" column="1">
+           <widget class="QSpinBox" name="gapPenaltyFactorBox">
+            <property name="value">
+             <number>6</number>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QSpinBox" name="matchScoreFactorBox">
+            <property name="minimum">
+             <number>1</number>
+            </property>
+            <property name="value">
+             <number>2</number>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="2">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>tabWidget</tabstop>
+  <tabstop>baseQualityClipCutoffBox</tabstop>
+  <tabstop>clippingRangeBox</tabstop>
+  <tabstop>overlapLengthCutoffBox</tabstop>
+  <tabstop>overlapPercentIdentityBox</tabstop>
+  <tabstop>baseQualityDiffCutoffBox</tabstop>
+  <tabstop>maxQScoreDiffBox</tabstop>
+  <tabstop>maxNumWordMatchesBox</tabstop>
+  <tabstop>bandExpansionBox</tabstop>
+  <tabstop>maxGapLengthBox</tabstop>
+  <tabstop>matchScoreFactorBox</tabstop>
+  <tabstop>mismatchScoreFactorBox</tabstop>
+  <tabstop>gapPenaltyFactorBox</tabstop>
+  <tabstop>overlapSimilarityScoreCutoffBox</tabstop>
+  <tabstop>reverseReadsBox</tabstop>
+  <tabstop>seqList</tabstop>
+  <tabstop>addButton</tabstop>
+  <tabstop>removeButton</tabstop>
+  <tabstop>removeAllButton</tabstop>
+  <tabstop>outputPathLineEdit</tabstop>
+  <tabstop>specifyOutputPathButton</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>CAP3SupportDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>370</x>
+     <y>475</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>370</x>
+     <y>247</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>CAP3SupportDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>370</x>
+     <y>475</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>370</x>
+     <y>247</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.cpp b/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.cpp
index d3a3c0c..e2698e6 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.cpp
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.cpp
@@ -146,7 +146,7 @@ void ClustalOSupportContext::buildMenu(GObjectView* view, QMenu* m) {
         QMenu* alignMenu = GUIUtils::findSubMenu(m, MSAE_MENU_ALIGN);
         SAFE_POINT(alignMenu != NULL, "alignMenu", );
         foreach(GObjectViewAction* a, actions) {
-                a->addToMenuWithOrder(alignMenu);
+            a->addToMenuWithOrder(alignMenu);
         }
 }
 
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp
index 4cf8c14..9f54518 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp
@@ -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>
@@ -40,6 +33,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "ClustalOSupportRunDialog.h"
@@ -51,22 +45,18 @@ ClustalOSupportRunDialog::ClustalOSupportRunDialog(const MAlignment& _ma, Clusta
         QDialog(_parent), ma(_ma), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467807");
+    new HelpButton(this, buttonBox, "17470740");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     inputGroupBox->setVisible(false);
     this->adjustSize();
-    QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
-    QPushButton* alignButton = buttonBox->button(QDialogButtonBox::Ok);
-    connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
-    connect(alignButton,SIGNAL(clicked()),this,SLOT(sl_align()));
+
     numberOfCPUSpinBox->setMaximum(AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount());
     numberOfCPUSpinBox->setValue(AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount());
-
 }
 
-void ClustalOSupportRunDialog::sl_align(){
+void ClustalOSupportRunDialog::accept(){
     if(iterationNumberCheckBox->isChecked()){
         settings.numIterations = iterationNumberSpinBox->value();
     }
@@ -78,27 +68,25 @@ void ClustalOSupportRunDialog::sl_align(){
     }
     settings.setAutoOptions = setAutoCheckBox->isChecked();
     settings.numberOfProcessors = numberOfCPUSpinBox->value();
-    accept();
+    QDialog::accept();
 }
 
 ////////////////////////////////////////
 //ClustalOWithExtFileSpecifySupportRunDialog
 ClustalOWithExtFileSpecifySupportRunDialog::ClustalOWithExtFileSpecifySupportRunDialog(ClustalOSupportTaskSettings& _settings, QWidget* _parent) :
-        QDialog(_parent), settings(_settings)
+    QDialog(_parent),
+    settings(_settings),
+    saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467789");
+    new HelpButton(this, buttonBox, "17470722");
+
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    //this->adjustSize();
-    connect(inputFilePathButton, SIGNAL(clicked()), SLOT(sl_inputPathButtonClicked()));
-    connect(outputFilePathButton, SIGNAL(clicked()), SLOT(sl_outputPathButtonClicked()));
+    initSaveController();
 
-    QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
-    QPushButton* alignButton = buttonBox->button(QDialogButtonBox::Ok);
-    connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
-    connect(alignButton,SIGNAL(clicked()),this,SLOT(sl_align()));
+    connect(inputFilePathButton, SIGNAL(clicked()), SLOT(sl_inputPathButtonClicked()));
 
     numberOfCPUSpinBox->setMaximum(AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount());
     numberOfCPUSpinBox->setValue(AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount());
@@ -113,45 +101,47 @@ void ClustalOWithExtFileSpecifySupportRunDialog::sl_inputPathButtonClicked() {
     inputFileLineEdit->setText(lod.url);
 }
 
-void ClustalOWithExtFileSpecifySupportRunDialog::sl_outputPathButtonClicked() {
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Save an multiple alignment file"), lod.dir);
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    outputFileLineEdit->setText(lod.url);
-    buildMultipleAlignmentUrl(lod.url);
-}
+void ClustalOWithExtFileSpecifySupportRunDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
+    config.fileDialogButton = outputFilePathButton;
+    config.fileNameEdit = outputFileLineEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save an multiple alignment file");
+    config.rollOutProjectUrls = true;
 
-void ClustalOWithExtFileSpecifySupportRunDialog::buildMultipleAlignmentUrl(const GUrl &alnUrl) {
-    GUrl url = GUrlUtils::rollFileName(alnUrl.dirPath() + "/" + alnUrl.baseFileName()+ ".aln", DocumentUtils::getNewDocFileNameExcludesHint());
-    outputFileLineEdit->setText(url.getURLString());
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::CLUSTAL_ALN;
+
+    saveController = new SaveDocumentController(config, formats, this);
 }
-void ClustalOWithExtFileSpecifySupportRunDialog::sl_align(){
+
+void ClustalOWithExtFileSpecifySupportRunDialog::accept() {
     if(iterationNumberCheckBox->isChecked()){
         settings.numIterations = iterationNumberSpinBox->value();
     }
+
     if(maxGTIterationsCheckBox->isChecked()){
         settings.maxGuidetreeIterations = maxGTIterationsSpinBox->value();
     }
+
     if(maxHMMIterationsCheckBox->isChecked()){
         settings.maxHMMIterations = maxHMMIterationsSpinBox->value();
     }
+
     settings.setAutoOptions = setAutoCheckBox->isChecked();
     settings.numberOfProcessors = numberOfCPUSpinBox->value();
-    if(inputFileLineEdit->text().isEmpty()){
-        QMessageBox::information(this, tr("Kalign with Align"),
-            tr("Input file is not set!") );
-        }else if(outputFileLineEdit->text().isEmpty()){
-            QMessageBox::information(this, tr("Kalign with Align"),
-                tr("Output file is not set!") );
-        }
-        else{
-            settings.outputFilePath=outputFileLineEdit->text();
-            settings.inputFilePath=inputFileLineEdit->text();
-            QDialog::accept();
-            }
 
+    if (inputFileLineEdit->text().isEmpty()) {
+        QMessageBox::information(this, tr("Kalign with Align"),
+                                 tr("Input file is not set!") );
+    } else if (saveController->getSaveFileName().isEmpty()) {
+        QMessageBox::information(this, tr("Kalign with Align"),
+                                 tr("Output file is not set!") );
+    } else {
+        settings.outputFilePath = saveController->getSaveFileName();
+        settings.inputFilePath = inputFileLineEdit->text();
+        QDialog::accept();
+    }
 }
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.h b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.h
index 19501b0..c3a8187 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.h
@@ -23,18 +23,23 @@
 #define _U2_CLUSTALO_SUPPORT_RUN_DIALOG_H
 
 #include <QDialog>
+
 #include <U2Gui/DialogUtils.h>
-#include <ui/ui_ClustalOSupportRunDialog.h>
+#include <ui_ClustalOSupportRunDialog.h>
 #include "ClustalOSupportTask.h"
 
 namespace U2 {
 
+class SaveDocumentController;
+
 class ClustalOSupportRunDialog : public QDialog, public Ui_ClustalOSupportRunDialog {
     Q_OBJECT
 public:
     ClustalOSupportRunDialog(const MAlignment& ma, ClustalOSupportTaskSettings& settings, QWidget* parent);
+
 private slots:
-    void sl_align();
+    void accept();
+
 private:
     MAlignment                      ma;
     ClustalOSupportTaskSettings&    settings;
@@ -45,13 +50,16 @@ class ClustalOWithExtFileSpecifySupportRunDialog : public QDialog, public Ui_Clu
     Q_OBJECT
 public:
     ClustalOWithExtFileSpecifySupportRunDialog(ClustalOSupportTaskSettings& settings, QWidget* parent);
+
 private slots:
-    void sl_align();
+    void accept();
     void sl_inputPathButtonClicked();
-    void sl_outputPathButtonClicked();
+
 private:
+    void initSaveController();
+
     ClustalOSupportTaskSettings&    settings;
-    void buildMultipleAlignmentUrl(const GUrl &alnUrl);
+    SaveDocumentController *        saveController;
 };
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.ui b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.ui
new file mode 100644
index 0000000..03675fa
--- /dev/null
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.ui
@@ -0,0 +1,400 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ClustalOSupportRunDialog</class>
+ <widget class="QDialog" name="ClustalOSupportRunDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>425</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>16777215</width>
+    <height>16777215</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Align with Clustal Omega</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <widget class="QGroupBox" name="inputGroupBox">
+       <property name="title">
+        <string/>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_2">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout">
+          <item row="0" column="0">
+           <widget class="QLabel" name="label_2">
+            <property name="text">
+             <string>Input file</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QLineEdit" name="inputFileLineEdit"/>
+          </item>
+          <item row="0" column="2">
+           <widget class="QToolButton" name="inputFilePathButton">
+            <property name="text">
+             <string>...</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLabel" name="label_3">
+            <property name="text">
+             <string>Output file</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QLineEdit" name="outputFileLineEdit"/>
+          </item>
+          <item row="1" column="2">
+           <widget class="QToolButton" name="outputFilePathButton">
+            <property name="text">
+             <string>...</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <widget class="QGroupBox" name="groupBox">
+       <property name="title">
+        <string>Iteration</string>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_7">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout_6">
+          <item row="0" column="0">
+           <layout class="QGridLayout" name="gridLayout_3">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="iterationNumberCheckBox">
+              <property name="text">
+               <string>Number of iterations</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <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>
+            <item row="0" column="2">
+             <widget class="QSpinBox" name="iterationNumberSpinBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="minimum">
+               <number>1</number>
+              </property>
+              <property name="maximum">
+               <number>999</number>
+              </property>
+              <property name="value">
+               <number>1</number>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="1" column="0">
+           <layout class="QGridLayout" name="gridLayout_4">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="maxGTIterationsCheckBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="cursor">
+               <cursorShape>ArrowCursor</cursorShape>
+              </property>
+              <property name="text">
+               <string>Max number guidetree iterations</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <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="0" column="2">
+             <widget class="QSpinBox" name="maxGTIterationsSpinBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="minimum">
+               <number>0</number>
+              </property>
+              <property name="maximum">
+               <number>999</number>
+              </property>
+              <property name="value">
+               <number>0</number>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="2" column="0">
+           <layout class="QGridLayout" name="gridLayout_5">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="maxHMMIterationsCheckBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="text">
+               <string>Max number of HMM iterations</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <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>
+            <item row="0" column="2">
+             <widget class="QSpinBox" name="maxHMMIterationsSpinBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="maximum">
+               <number>999</number>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <widget class="QGroupBox" name="groupBox_2">
+       <property name="title">
+        <string>Miscellaneous</string>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_10">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout_9">
+          <item row="0" column="0">
+           <layout class="QGridLayout" name="gridLayout_8">
+            <item row="0" column="0">
+             <widget class="QLabel" name="label">
+              <property name="text">
+               <string>Number of CPUs being used</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <spacer name="horizontalSpacer_5">
+              <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="0" column="2">
+             <widget class="QSpinBox" name="numberOfCPUSpinBox">
+              <property name="minimumSize">
+               <size>
+                <width>42</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="minimum">
+               <number>1</number>
+              </property>
+              <property name="maximum">
+               <number>6000</number>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="1" column="0">
+           <widget class="QCheckBox" name="setAutoCheckBox">
+            <property name="text">
+             <string>Set options automatically</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </item>
+    </layout>
+   </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>maxGTIterationsCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>maxGTIterationsSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>108</x>
+     <y>147</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>290</x>
+     <y>147</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>iterationNumberCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>maxGTIterationsCheckBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>108</x>
+     <y>147</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>108</x>
+     <y>178</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>iterationNumberCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>maxHMMIterationsCheckBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>135</x>
+     <y>46</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>135</x>
+     <y>106</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>maxHMMIterationsCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>maxHMMIterationsSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>135</x>
+     <y>106</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>306</x>
+     <y>106</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>iterationNumberCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>iterationNumberSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>135</x>
+     <y>46</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>283</x>
+     <y>46</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>ClustalOSupportRunDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>199</x>
+     <y>404</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>199</x>
+     <y>212</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>ClustalOSupportRunDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>199</x>
+     <y>404</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>199</x>
+     <y>212</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.cpp b/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.cpp
index 60a95f1..13e744f 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.cpp
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.cpp
@@ -106,7 +106,7 @@ void ClustalWSupport::sl_runWithExtFileSpecify(){
     clustalWRunDialog->exec();
     CHECK(!clustalWRunDialog.isNull(), );
 
-    if(clustalWRunDialog->exec() != QDialog::Accepted){
+    if(clustalWRunDialog->result() != QDialog::Accepted){
         return;
     }
     assert(!settings.inputFilePath.isEmpty());
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp
index 560c466..74b4b60 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp
@@ -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/DNAAlphabet.h>
 #include <U2Core/DocumentUtils.h>
@@ -37,6 +30,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "ClustalWSupportRunDialog.h"
@@ -48,19 +42,14 @@ ClustalWSupportRunDialog::ClustalWSupportRunDialog(const MAlignment& _ma, Clusta
         QDialog(_parent), ma(_ma), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467796");
+    new HelpButton(this, buttonBox, "17470729");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     inputGroupBox->setVisible(false);
     this->adjustSize();
-    QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
-    QPushButton* alignButton = buttonBox->button(QDialogButtonBox::Ok);
 
     connect(this->iterationTypeCheckBox,SIGNAL(toggled(bool)),this,SLOT(sl_iterationTypeEnabled(bool)));
-    connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
-    connect(alignButton,SIGNAL(clicked()),this,SLOT(sl_align()));
-
 
     if(ma.getAlphabet()->isAmino()){
         gapOpenSpinBox->setValue(10.0);
@@ -72,8 +61,8 @@ ClustalWSupportRunDialog::ClustalWSupportRunDialog(const MAlignment& _ma, Clusta
         weightMatrixComboBox->addItem("GONNET");
         weightMatrixComboBox->addItem("ID");
     }
-
 }
+
 void ClustalWSupportRunDialog::sl_iterationTypeEnabled(bool checked){
     if(checked){
         iterationTypeComboBox->removeItem(0);
@@ -82,7 +71,8 @@ void ClustalWSupportRunDialog::sl_iterationTypeEnabled(bool checked){
         iterationTypeComboBox->setCurrentIndex(0);
     }
 }
-void ClustalWSupportRunDialog::sl_align(){
+
+void ClustalWSupportRunDialog::accept(){
     if(gapOpenCheckBox->isChecked()) {
         settings.gapOpenPenalty = gapOpenSpinBox->value();
     }
@@ -118,28 +108,25 @@ void ClustalWSupportRunDialog::sl_align(){
             settings.numIterations=maxIterationsSpinBox->value();
         }
     }
-    accept();
+    QDialog::accept();
 }
 
 ////////////////////////////////////////
 //ClustalWWithExtFileSpecifySupportRunDialog
 ClustalWWithExtFileSpecifySupportRunDialog::ClustalWWithExtFileSpecifySupportRunDialog(ClustalWSupportTaskSettings& _settings, QWidget* _parent) :
-        QDialog(_parent), settings(_settings)
+    QDialog(_parent),
+    settings(_settings),
+    saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467796");
+    new HelpButton(this, buttonBox, "17470729");
+
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    //this->adjustSize();
-    connect(inputFilePathButton, SIGNAL(clicked()), SLOT(sl_inputPathButtonClicked()));
-    connect(outputFilePathButton, SIGNAL(clicked()), SLOT(sl_outputPathButtonClicked()));
-
-    QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
-    QPushButton* alignButton = buttonBox->button(QDialogButtonBox::Ok);
+    initSaveController();
 
-    connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
-    connect(alignButton,SIGNAL(clicked()),this,SLOT(sl_align()));
+    connect(inputFilePathButton, SIGNAL(clicked()), SLOT(sl_inputPathButtonClicked()));
 
     proteinGapParamGroupBox->setEnabled(true);
     weightMatrixComboBox->insertSeparator(2);
@@ -159,19 +146,18 @@ void ClustalWWithExtFileSpecifySupportRunDialog::sl_inputPathButtonClicked() {
     inputFileLineEdit->setText(lod.url);
 }
 
-void ClustalWWithExtFileSpecifySupportRunDialog::sl_outputPathButtonClicked() {
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Save an multiple alignment file"), lod.dir);
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    outputFileLineEdit->setText(lod.url);
-    buildMultipleAlignmentUrl(lod.url);
-}
+void ClustalWWithExtFileSpecifySupportRunDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
+    config.fileDialogButton = outputFilePathButton;
+    config.fileNameEdit = outputFileLineEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save an multiple alignment file");
+    config.rollOutProjectUrls = true;
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::CLUSTAL_ALN;
 
-void ClustalWWithExtFileSpecifySupportRunDialog::buildMultipleAlignmentUrl(const GUrl &alnUrl) {
-    GUrl url = GUrlUtils::rollFileName(alnUrl.dirPath() + "/" + alnUrl.baseFileName()+ ".aln", DocumentUtils::getNewDocFileNameExcludesHint());
-    outputFileLineEdit->setText(url.getURLString());
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
 void ClustalWWithExtFileSpecifySupportRunDialog::sl_iterationTypeEnabled(bool checked){
@@ -182,7 +168,7 @@ void ClustalWWithExtFileSpecifySupportRunDialog::sl_iterationTypeEnabled(bool ch
         iterationTypeComboBox->setCurrentIndex(0);
     }
 }
-void ClustalWWithExtFileSpecifySupportRunDialog::sl_align(){
+void ClustalWWithExtFileSpecifySupportRunDialog::accept(){
     if(gapOpenCheckBox->isChecked()) {
         settings.gapOpenPenalty = gapOpenSpinBox->value();
     }
@@ -207,23 +193,22 @@ void ClustalWWithExtFileSpecifySupportRunDialog::sl_align(){
     }
     if(iterationTypeCheckBox->isChecked()){
         settings.iterationType=iterationTypeComboBox->currentText();
-    if(maxIterationsCheckBox->isChecked()){
-        settings.numIterations=maxIterationsSpinBox->value();
-        }
+        if(maxIterationsCheckBox->isChecked()){
+            settings.numIterations=maxIterationsSpinBox->value();
         }
+    }
     if(inputFileLineEdit->text().isEmpty()){
         QMessageBox::information(this, tr("Kalign with Align"),
-            tr("Input file is not set!") );
-        }else if(outputFileLineEdit->text().isEmpty()){
-            QMessageBox::information(this, tr("Kalign with Align"),
-                tr("Output file is not set!") );
-        }
-        else{
-            settings.outputFilePath=outputFileLineEdit->text();
-            settings.inputFilePath=inputFileLineEdit->text();
-            QDialog::accept();
-            }
-
+                                 tr("Input file is not set!") );
+    }else if(saveController->getSaveFileName().isEmpty()){
+        QMessageBox::information(this, tr("Kalign with Align"),
+                                 tr("Output file is not set!") );
+    }
+    else{
+        settings.outputFilePath = saveController->getSaveFileName();
+        settings.inputFilePath = inputFileLineEdit->text();
+        QDialog::accept();
+    }
 }
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.h b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.h
index be4156e..7fd3c92 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.h
@@ -23,38 +23,44 @@
 #define _U2_CLUSTALW_SUPPORT_RUN_DIALOG_H
 
 #include <QDialog>
+
 #include <U2Gui/DialogUtils.h>
-#include <ui/ui_ClustalWSupportRunDialog.h>
+#include <ui_ClustalWSupportRunDialog.h>
 #include "ClustalWSupportTask.h"
 
 namespace U2 {
 
+class SaveDocumentController;
+
 class ClustalWSupportRunDialog : public QDialog, public Ui_ClustalWSupportRunDialog {
     Q_OBJECT
 public:
     ClustalWSupportRunDialog(const MAlignment& ma, ClustalWSupportTaskSettings& settings, QWidget* parent);
+
 private slots:
-    void sl_align();
+    void accept();
     void sl_iterationTypeEnabled(bool checked);
+
 private:
     MAlignment                      ma;
     ClustalWSupportTaskSettings&    settings;
-
 };
 
 class ClustalWWithExtFileSpecifySupportRunDialog : public QDialog, public Ui_ClustalWSupportRunDialog {
     Q_OBJECT
 public:
     ClustalWWithExtFileSpecifySupportRunDialog(ClustalWSupportTaskSettings& settings, QWidget* parent);
+
 private slots:
-    void sl_align();
+    void accept();
     void sl_iterationTypeEnabled(bool checked);
     void sl_inputPathButtonClicked();
-    void sl_outputPathButtonClicked();
+
 private:
-    ClustalWSupportTaskSettings&    settings;
-    void buildMultipleAlignmentUrl(const GUrl &alnUrl);
+    void initSaveController();
 
+    ClustalWSupportTaskSettings&    settings;
+    SaveDocumentController *        saveController;
 };
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.ui b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.ui
new file mode 100644
index 0000000..6d57669
--- /dev/null
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.ui
@@ -0,0 +1,639 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ClustalWSupportRunDialog</class>
+ <widget class="QDialog" name="ClustalWSupportRunDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>485</width>
+    <height>577</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>400</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>40067</width>
+    <height>448567</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Align with ClustalW</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <widget class="QGroupBox" name="inputGroupBox">
+       <property name="title">
+        <string/>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_10">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout_9">
+          <item row="0" column="0">
+           <widget class="QLabel" name="inputFileLabel">
+            <property name="text">
+             <string>Input file</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QLineEdit" name="inputFileLineEdit"/>
+          </item>
+          <item row="0" column="2">
+           <widget class="QToolButton" name="inputFilePathButton">
+            <property name="text">
+             <string>...</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLabel" name="outputFileLabel">
+            <property name="text">
+             <string>Output file</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QLineEdit" name="outputFileLineEdit">
+            <property name="maximumSize">
+             <size>
+              <width>16777214</width>
+              <height>16777215</height>
+             </size>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="2">
+           <widget class="QToolButton" name="outputFilePathButton">
+            <property name="text">
+             <string>...</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <widget class="QGroupBox" name="groupBox">
+       <property name="title">
+        <string>Advanced options</string>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_8">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout_7">
+          <item row="0" column="0">
+           <layout class="QGridLayout" name="gridLayout">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="gapOpenCheckBox">
+              <property name="text">
+               <string>Gap opening penalty</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <spacer name="horizontalSpacer_2">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>98</width>
+                <height>16</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item row="0" column="2">
+             <widget class="QDoubleSpinBox" name="gapOpenSpinBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>105</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="maximum">
+               <double>100.000000000000000</double>
+              </property>
+              <property name="value">
+               <double>15.000000000000000</double>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="1" column="0">
+           <layout class="QGridLayout" name="gridLayout_2">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="gapExtCheckBox">
+              <property name="text">
+               <string>Gap extension penalty</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <spacer name="horizontalSpacer_3">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>88</width>
+                <height>16</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item row="0" column="2">
+             <widget class="QDoubleSpinBox" name="gapExtSpinBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>105</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="maximum">
+               <double>10.000000000000000</double>
+              </property>
+              <property name="value">
+               <double>6.660000000000000</double>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="2" column="0">
+           <layout class="QGridLayout" name="gridLayout_3">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="weightMatrixCheckBox">
+              <property name="text">
+               <string>Weight matrix</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <spacer name="horizontalSpacer_4">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>128</width>
+                <height>16</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item row="0" column="2">
+             <widget class="QComboBox" name="weightMatrixComboBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>105</width>
+                <height>0</height>
+               </size>
+              </property>
+              <item>
+               <property name="text">
+                <string>IUB</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>CLUSTALW</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="3" column="0">
+           <layout class="QGridLayout" name="gridLayout_4">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="iterationTypeCheckBox">
+              <property name="text">
+               <string>Iteration type</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <spacer name="horizontalSpacer_5">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>128</width>
+                <height>16</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item row="0" column="2">
+             <widget class="QComboBox" name="iterationTypeComboBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>105</width>
+                <height>0</height>
+               </size>
+              </property>
+              <item>
+               <property name="text">
+                <string>NONE</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>TREE</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>ALIGNMENT</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="4" column="0">
+           <layout class="QGridLayout" name="gridLayout_5">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="maxIterationsCheckBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="cursor">
+               <cursorShape>ArrowCursor</cursorShape>
+              </property>
+              <property name="text">
+               <string>Max iterations</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <spacer name="horizontalSpacer_6">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>128</width>
+                <height>16</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item row="0" column="2">
+             <widget class="QSpinBox" name="maxIterationsSpinBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>105</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="minimum">
+               <number>1</number>
+              </property>
+              <property name="maximum">
+               <number>999</number>
+              </property>
+              <property name="value">
+               <number>3</number>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="5" column="0">
+           <layout class="QGridLayout" name="gridLayout_6">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="outOrderCheckBox">
+              <property name="text">
+               <string>Out sequences order</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <spacer name="horizontalSpacer_7">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>98</width>
+                <height>17</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item row="0" column="2">
+             <widget class="QComboBox" name="outOrderComboBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>105</width>
+                <height>0</height>
+               </size>
+              </property>
+              <item>
+               <property name="text">
+                <string>Input</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>Aligned</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <widget class="QGroupBox" name="proteinGapParamGroupBox">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="title">
+        <string>Protein gap parameters</string>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_13">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout_12">
+          <item row="0" column="0">
+           <layout class="QGridLayout" name="gridLayout_11">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="gapDistancesCheckBox">
+              <property name="text">
+               <string>Gap separation distance</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <spacer name="horizontalSpacer_8">
+              <property name="orientation">
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>118</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+            <item row="0" column="2">
+             <widget class="QSpinBox" name="gapDistancesSpinBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>105</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="minimum">
+               <number>1</number>
+              </property>
+              <property name="maximum">
+               <number>10</number>
+              </property>
+              <property name="value">
+               <number>4</number>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="1" column="0">
+           <widget class="QCheckBox" name="hydrophilicGapsOffCheckBox">
+            <property name="text">
+             <string>Hydrophilic gaps off</string>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="0">
+           <widget class="QCheckBox" name="endGapsCheckBox">
+            <property name="text">
+             <string>No end gap separation penalty</string>
+            </property>
+           </widget>
+          </item>
+          <item row="3" column="0">
+           <widget class="QCheckBox" name="residueSpecificGapsOffCheckBox">
+            <property name="text">
+             <string>Residue-specific gaps off</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </item>
+    </layout>
+   </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>gapOpenCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>gapOpenSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>108</x>
+     <y>48</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>290</x>
+     <y>48</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>gapExtCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>gapExtSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>108</x>
+     <y>81</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>290</x>
+     <y>81</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>gapDistancesCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>gapDistancesSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>108</x>
+     <y>156</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>290</x>
+     <y>156</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>maxIterationsCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>maxIterationsSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>108</x>
+     <y>147</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>290</x>
+     <y>147</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>weightMatrixCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>weightMatrixComboBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>108</x>
+     <y>114</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>290</x>
+     <y>114</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>iterationTypeCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>iterationTypeComboBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>108</x>
+     <y>147</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>290</x>
+     <y>147</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>iterationTypeCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>maxIterationsCheckBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>108</x>
+     <y>147</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>108</x>
+     <y>178</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>outOrderCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>outOrderComboBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>108</x>
+     <y>209</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>290</x>
+     <y>209</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>ClustalWSupportRunDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>242</x>
+     <y>556</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>242</x>
+     <y>288</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>ClustalWSupportRunDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>242</x>
+     <y>556</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>242</x>
+     <y>288</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.cpp b/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.cpp
index a82cda6..567991d 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.cpp
@@ -135,6 +135,9 @@ Task * CuffdiffSupportTask::createTranscriptTask() {
 Task * CuffdiffSupportTask::createCuffdiffTask() {
     // prepare arguments
     QStringList arguments;
+
+    arguments << "--no-update-check";
+
     arguments << "-p" << QString::number(TopHatSettings::getThreadsCount());
     arguments << "--output-dir" << settings.outDir;
     if (settings.timeSeriesAnalysis) {
diff --git a/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.cpp b/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.cpp
index 25e7b37..5aae163 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.cpp
@@ -134,6 +134,8 @@ ExternalToolRunTask * CufflinksSupportTask::runCufflinks() {
     // Init the arguments list
     QStringList arguments;
 
+    arguments << "--no-update-check";
+
     arguments << "-p" << QString::number(TopHatSettings::getThreadsCount());
     arguments << "--output-dir" << settings.outDir;
 
diff --git a/src/plugins/external_tool_support/src/macs/MACSWorker.cpp b/src/plugins/external_tool_support/src/macs/MACSWorker.cpp
index 7ff6efd..0f32fa3 100644
--- a/src/plugins/external_tool_support/src/macs/MACSWorker.cpp
+++ b/src/plugins/external_tool_support/src/macs/MACSWorker.cpp
@@ -189,11 +189,12 @@ U2::MACSSettings MACSWorker::createMACSSettings( U2OpStatus & /*os*/ ){
 
     QString locStr = getValue<QString>(MODEL_FOLD_ATTR_ID);
     U2Location l;
-    QString err = Genbank::LocationParser::parseLocation(qPrintable(locStr), locStr.size(), l);
-    if (!err.isEmpty()){
-        algoLog.error(tr("Bad model fold region: %1. Default region is used").arg(err));
-    }else{
-        if(!l->regions.isEmpty()){
+    QStringList messages;
+    Genbank::LocationParser::ParsingResult parsingResult = Genbank::LocationParser::parseLocation(qPrintable(locStr), locStr.size(), l, messages);
+    if (Genbank::LocationParser::Failure == parsingResult || !messages.isEmpty()){
+        algoLog.error(tr("Bad model fold region: %1. Default region is used").arg(messages.isEmpty() ? tr("unrecognized parsing error") : messages.last()));
+    } else {
+        if (!l->regions.isEmpty()) {
             settings.modelFold = l->regions.first();
         }
     }
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp
index 670d9c7..14ea05b 100644
--- a/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp
@@ -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/DocumentUtils.h>
 #include <U2Core/GUrlUtils.h>
@@ -36,6 +29,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "MAFFTSupportRunDialog.h"
@@ -45,24 +39,18 @@ namespace U2 {
 ////////////////////////////////////////
 //MAFFTSupportRunDialog
 MAFFTSupportRunDialog::MAFFTSupportRunDialog(MAFFTSupportTaskSettings& _settings, QWidget* _parent) :
-        QDialog(_parent), settings(_settings)
+    QDialog(_parent), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467797");
+    new HelpButton(this, buttonBox, "17470730");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     inputGroupBox->setVisible(false);
     this->adjustSize();
-    QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
-    QPushButton* alignButton = buttonBox->button(QDialogButtonBox::Ok);
-
-    connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
-    connect(alignButton,SIGNAL(clicked()),this,SLOT(sl_align()));
-
 }
 
-void MAFFTSupportRunDialog::sl_align(){
+void MAFFTSupportRunDialog::accept(){
     if(gapOpenCheckBox->isChecked()) {
         settings.gapOpenPenalty = gapOpenSpinBox->value();
     }
@@ -72,27 +60,25 @@ void MAFFTSupportRunDialog::sl_align(){
     if(maxNumberIterRefinementCheckBox->isChecked()){
         settings.maxNumberIterRefinement = maxNumberIterRefinementSpinBox->value();
     }
-    accept();
+    QDialog::accept();
 }
+
 ////////////////////////////////////////
 //MAFFTWithExtFileSpecifySupportRunDialog
 MAFFTWithExtFileSpecifySupportRunDialog::MAFFTWithExtFileSpecifySupportRunDialog(MAFFTSupportTaskSettings& _settings, QWidget* _parent) :
-        QDialog(_parent), settings(_settings)
+    QDialog(_parent),
+    settings(_settings),
+    saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467797");
+    new HelpButton(this, buttonBox, "17470730");
+
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    //this->adjustSize();
-    connect(inputFilePathButton, SIGNAL(clicked()), SLOT(sl_inputPathButtonClicked()));
-    connect(outputFilePathButton, SIGNAL(clicked()), SLOT(sl_outputPathButtonClicked()));
+    initSaveController();
 
-    QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
-    QPushButton* alignButton = buttonBox->button(QDialogButtonBox::Ok);
-
-    connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
-    connect(alignButton, SIGNAL(clicked()), this, SLOT(sl_align()));
+    connect(inputFilePathButton, SIGNAL(clicked()), SLOT(sl_inputPathButtonClicked()));
 }
 
 void MAFFTWithExtFileSpecifySupportRunDialog::sl_inputPathButtonClicked() {
@@ -105,22 +91,21 @@ void MAFFTWithExtFileSpecifySupportRunDialog::sl_inputPathButtonClicked() {
     inputFileLineEdit->setText(lod.url);
 }
 
-void MAFFTWithExtFileSpecifySupportRunDialog::sl_outputPathButtonClicked() {
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Save an multiple alignment file"), lod.dir);
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    outputFileLineEdit->setText(lod.url);
-    buildMultipleAlignmentUrl(lod.url);
-}
+void MAFFTWithExtFileSpecifySupportRunDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
+    config.fileDialogButton = outputFilePathButton;
+    config.fileNameEdit = outputFileLineEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save an multiple alignment file");
+    config.rollOutProjectUrls = true;
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::CLUSTAL_ALN;
 
-void MAFFTWithExtFileSpecifySupportRunDialog::buildMultipleAlignmentUrl(const GUrl &alnUrl) {
-    GUrl url = GUrlUtils::rollFileName(alnUrl.dirPath() + "/" + alnUrl.baseFileName()+ ".aln", DocumentUtils::getNewDocFileNameExcludesHint());
-    outputFileLineEdit->setText(url.getURLString());
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
-void MAFFTWithExtFileSpecifySupportRunDialog::sl_align(){
+void MAFFTWithExtFileSpecifySupportRunDialog::accept(){
     if(gapOpenCheckBox->isChecked()) {
         settings.gapOpenPenalty = gapOpenSpinBox->value();
     }
@@ -132,17 +117,16 @@ void MAFFTWithExtFileSpecifySupportRunDialog::sl_align(){
     }
     if(inputFileLineEdit->text().isEmpty()){
         QMessageBox::information(this, tr("Kalign with Align"),
-            tr("Input file is not set!") );
-        }else if(outputFileLineEdit->text().isEmpty()){
-            QMessageBox::information(this, tr("Kalign with Align"),
-                tr("Output file is not set!") );
-        }
-        else{
-            settings.outputFilePath=outputFileLineEdit->text();
-            settings.inputFilePath=inputFileLineEdit->text();
-            QDialog::accept();
-            }
-
+                                 tr("Input file is not set!") );
+    }else if(saveController->getSaveFileName().isEmpty()){
+        QMessageBox::information(this, tr("Kalign with Align"),
+                                 tr("Output file is not set!") );
+    }
+    else{
+        settings.outputFilePath = saveController->getSaveFileName();
+        settings.inputFilePath = inputFileLineEdit->text();
+        QDialog::accept();
+    }
 }
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.h b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.h
index a9410ec..80be9d2 100644
--- a/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.h
@@ -22,24 +22,25 @@
 #ifndef _U2_MAFFT_SUPPORT_RUN_DIALOG_H
 #define _U2_MAFFT_SUPPORT_RUN_DIALOG_H
 
+#include <QDialog>
+
 #include <U2Gui/DialogUtils.h>
-#include <ui/ui_MAFFTSupportRunDialog.h>
-#include "MAFFTSupportTask.h"
+#include <ui_MAFFTSupportRunDialog.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include "MAFFTSupportTask.h"
 
 namespace U2 {
 
+class SaveDocumentController;
+
 class MAFFTSupportRunDialog : public QDialog, public Ui_MAFFTSupportRunDialog {
     Q_OBJECT
 public:
     MAFFTSupportRunDialog(MAFFTSupportTaskSettings& settings, QWidget* parent);
+
 private slots:
-    void sl_align();
+    void accept();
+
 private:
     MAFFTSupportTaskSettings&        settings;
 };
@@ -48,13 +49,17 @@ class MAFFTWithExtFileSpecifySupportRunDialog : public QDialog, public Ui_MAFFTS
     Q_OBJECT
 public:
     MAFFTWithExtFileSpecifySupportRunDialog(MAFFTSupportTaskSettings& settings, QWidget* parent);
+
 private slots:
-    void sl_align();
+    void accept();
     void sl_inputPathButtonClicked();
-    void sl_outputPathButtonClicked();
+
 private:
+    void initSaveController();
+
     MAFFTSupportTaskSettings&     settings;
-    void buildMultipleAlignmentUrl(const GUrl &alnUrl);};
+    SaveDocumentController *      saveController;
+};
 
 }//namespace
 #endif // _U2_MAFFT_SUPPORT_RUN_DIALOG_H
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.ui b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.ui
new file mode 100644
index 0000000..e8a36a1
--- /dev/null
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.ui
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MAFFTSupportRunDialog</class>
+ <widget class="QDialog" name="MAFFTSupportRunDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>438</width>
+    <height>316</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>438</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Align with MAFFT</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <widget class="QGroupBox" name="inputGroupBox">
+       <property name="title">
+        <string/>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_2">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout">
+          <item row="0" column="0">
+           <widget class="QLabel" name="label">
+            <property name="text">
+             <string>Input file</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QLineEdit" name="inputFileLineEdit"/>
+          </item>
+          <item row="0" column="2">
+           <widget class="QToolButton" name="inputFilePathButton">
+            <property name="text">
+             <string>...</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLabel" name="label_2">
+            <property name="text">
+             <string>Output file</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QLineEdit" name="outputFileLineEdit"/>
+          </item>
+          <item row="1" column="2">
+           <widget class="QToolButton" name="outputFilePathButton">
+            <property name="text">
+             <string>...</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <widget class="QGroupBox" name="groupBox">
+       <property name="title">
+        <string>Advanced options</string>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_7">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout_6">
+          <item row="0" column="0">
+           <layout class="QGridLayout" name="gridLayout_3">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="gapOpenCheckBox">
+              <property name="text">
+               <string>Gap opening penalty</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <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>
+            <item row="0" column="2">
+             <widget class="QDoubleSpinBox" name="gapOpenSpinBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>55</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="maximum">
+               <double>10.000000000000000</double>
+              </property>
+              <property name="singleStep">
+               <double>0.100000000000000</double>
+              </property>
+              <property name="value">
+               <double>1.530000000000000</double>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="1" column="0">
+           <layout class="QGridLayout" name="gridLayout_4">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="gapExtCheckBox">
+              <property name="text">
+               <string>Offset (works like gap extension penalty)</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <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="0" column="2">
+             <widget class="QDoubleSpinBox" name="gapExtSpinBox">
+              <property name="enabled">
+               <bool>false</bool>
+              </property>
+              <property name="minimumSize">
+               <size>
+                <width>55</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="maximum">
+               <double>10.000000000000000</double>
+              </property>
+              <property name="value">
+               <double>0.000000000000000</double>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+          <item row="2" column="0">
+           <layout class="QGridLayout" name="gridLayout_5">
+            <item row="0" column="0">
+             <widget class="QCheckBox" name="maxNumberIterRefinementCheckBox">
+              <property name="text">
+               <string>Maximum number of iterative refinement</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <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>
+            <item row="0" column="2">
+             <widget class="QSpinBox" name="maxNumberIterRefinementSpinBox">
+              <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>55</width>
+                <height>0</height>
+               </size>
+              </property>
+              <property name="maximum">
+               <number>1000</number>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </item>
+    </layout>
+   </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>gapOpenCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>gapOpenSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>160</x>
+     <y>48</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>356</x>
+     <y>48</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>gapExtCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>gapExtSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>160</x>
+     <y>79</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>356</x>
+     <y>79</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>maxNumberIterRefinementCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>maxNumberIterRefinementSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>160</x>
+     <y>110</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>356</x>
+     <y>110</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>MAFFTSupportRunDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>218</x>
+     <y>295</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>218</x>
+     <y>157</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>MAFFTSupportRunDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>218</x>
+     <y>295</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>218</x>
+     <y>157</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/external_tool_support/src/ui/MrBayesDialog.ui b/src/plugins/external_tool_support/src/mrbayes/MrBayesDialog.ui
similarity index 100%
rename from src/plugins/external_tool_support/src/ui/MrBayesDialog.ui
rename to src/plugins/external_tool_support/src/mrbayes/MrBayesDialog.ui
diff --git a/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.h b/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.h
index bae92c8..020ed73 100644
--- a/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.h
+++ b/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.h
@@ -27,7 +27,7 @@
 
 #include <U2View/CreatePhyTreeWidget.h>
 
-#include "ui/ui_MrBayesDialog.h"
+#include "ui_MrBayesDialog.h"
 
 namespace U2 {
 
diff --git a/src/plugins/external_tool_support/src/phyml/PhyMLDialog.ui b/src/plugins/external_tool_support/src/phyml/PhyMLDialog.ui
new file mode 100644
index 0000000..0aee672
--- /dev/null
+++ b/src/plugins/external_tool_support/src/phyml/PhyMLDialog.ui
@@ -0,0 +1,587 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PhyMLDialog</class>
+ <widget class="QWidget" name="PhyMLDialog">
+  <property name="windowModality">
+   <enum>Qt::NonModal</enum>
+  </property>
+  <property name="enabled">
+   <bool>true</bool>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>509</width>
+    <height>251</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>0</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="contextMenuPolicy">
+   <enum>Qt::DefaultContextMenu</enum>
+  </property>
+  <property name="windowTitle">
+   <string notr="true"/>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="spacing">
+    <number>-1</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>
+    <widget class="QTabWidget" name="twSettings">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="currentIndex">
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="substitutionModel">
+      <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>
+       <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>
+       </item>
+       <item row="1" column="1">
+        <widget class="QComboBox" name="subModelCombo">
+         <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_11">
+         <item>
+          <widget class="QLabel" name="equilFreqLabel">
+           <property name="text">
+            <string>Equilibrium frequencies</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item row="2" column="1">
+        <layout class="QHBoxLayout" name="horizontalLayout_16">
+         <property name="leftMargin">
+          <number>0</number>
+         </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>
+       </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>
+       </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>
+       <item row="3" column="1">
+        <widget class="QSpinBox" name="tranSpinBox">
+         <property name="minimumSize">
+          <size>
+           <width>100</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="specialValueText">
+          <string>estimated </string>
+         </property>
+         <property name="minimum">
+          <number>-1</number>
+         </property>
+         <property name="maximum">
+          <number>990000</number>
+         </property>
+         <property name="value">
+          <number>0</number>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="1">
+        <widget class="QDoubleSpinBox" name="sitesSpinBox">
+         <property name="minimumSize">
+          <size>
+           <width>100</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="specialValueText">
+          <string>estimated </string>
+         </property>
+         <property name="minimum">
+          <double>-0.010000000000000</double>
+         </property>
+         <property name="maximum">
+          <double>1.000000000000000</double>
+         </property>
+         <property name="singleStep">
+          <double>0.010000000000000</double>
+         </property>
+         <property name="value">
+          <double>0.000000000000000</double>
+         </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>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>100</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="specialValueText">
+          <string>estimated </string>
+         </property>
+         <property name="minimum">
+          <number>1</number>
+         </property>
+         <property name="maximum">
+          <number>990000</number>
+         </property>
+         <property name="value">
+          <number>4</number>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="1">
+        <widget class="QSpinBox" name="gammaSpinBox">
+         <property name="minimumSize">
+          <size>
+           <width>100</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="specialValueText">
+          <string>estimated </string>
+         </property>
+         <property name="minimum">
+          <number>-1</number>
+         </property>
+         <property name="maximum">
+          <number>990000</number>
+         </property>
+         <property name="value">
+          <number>0</number>
+         </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>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="branchSupport">
+      <attribute name="title">
+       <string>Branch Support</string>
+      </attribute>
+      <layout class="QFormLayout" name="formLayout_2">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMinAndMaxSize</enum>
+       </property>
+       <property name="fieldGrowthPolicy">
+        <enum>QFormLayout::ExpandingFieldsGrow</enum>
+       </property>
+       <item row="0" column="0">
+        <widget class="QCheckBox" name="fastMethodCheckbox">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Use fast likelihood-based method</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+         <property name="autoRepeat">
+          <bool>false</bool>
+         </property>
+         <property name="autoExclusive">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QComboBox" name="fastMethodCombo">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QCheckBox" name="bootstrapCheckBox">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>Perform bootstrap</string>
+         </property>
+         <property name="checked">
+          <bool>false</bool>
+         </property>
+         <property name="autoExclusive">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QSpinBox" name="bootstrapSpinBox">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="toolTip">
+          <string>It is the number of bootstrap replicates.</string>
+         </property>
+         <property name="maximum">
+          <number>990000</number>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="treeSearching">
+      <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>
+       <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>
+         </property>
+         <property name="minimumSize">
+          <size>
+           <width>180</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>
+        </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>
+       </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>
+       </item>
+       <item row="2" column="1">
+        <widget class="QSpinBox" name="treeNumbersSpinBox">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0">
+        <widget class="QCheckBox" name="optTopologyCheckbox">
+         <property name="text">
+          <string>Optimise topology</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="0">
+        <widget class="QCheckBox" name="optBranchCheckbox">
+         <property name="text">
+          <string>Optimise branch lengths</string>
+         </property>
+         <property name="checked">
+          <bool>true</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>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="displayOptionsTab">
+      <attribute name="title">
+       <string>Display Options</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMinAndMaxSize</enum>
+       </property>
+       <item>
+        <widget class="U2::PhyTreeDisplayOptionsWidget" name="displayOptions" native="true"/>
+       </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeType">
+          <enum>QSizePolicy::MinimumExpanding</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>0</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>U2::PhyTreeDisplayOptionsWidget</class>
+   <extends>QWidget</extends>
+   <header location="global">U2View/PhyTreeDisplayOptionsWidget.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.h b/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.h
index e853fa6..fb32590 100644
--- a/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.h
+++ b/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.h
@@ -22,7 +22,7 @@
 #ifndef _U2_PHYML_DIALOGWIDGET_H
 #define _U2_PHYML_DIALOGWIDGET_H
 
-#include "ui/ui_PhyMLDialog.h"
+#include "ui_PhyMLDialog.h"
 
 #include "PhyMLSupport.h"
 
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp b/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp
index 1a64ec8..533af97 100644
--- a/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp
@@ -1,23 +1,23 @@
 /**
-* 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.
-*/
+ * 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 "SnpEffSupport.h"
 #include "java/JavaSupport.h"
@@ -35,14 +35,15 @@
 namespace U2 {
 
 
-SnpEffSupport::SnpEffSupport(const QString& name, const QString& path) : ExternalTool(name, path) {
+SnpEffSupport::SnpEffSupport(const QString& name, const QString& path) : ExternalTool(name, path)
+{
     if (AppContext::getMainWindow()) {
         icon = QIcon(":external_tool_support/images/cmdline.png");
         grayIcon = QIcon(":external_tool_support/images/cmdline_gray.png");
         warnIcon = QIcon(":external_tool_support/images/cmdline_warn.png");
     }
 
-    executableFileName = "snpEff.jar";
+    executableFileName="snpEff.jar";
 
     validMessage = "Usage: snpEff \\[command\\] \\[options\\] \\[files\\]";
     description = tr("<i>SnpEff</i>: Genetic variant annotation and effect prediction toolbox.");
@@ -61,7 +62,7 @@ const QStringList SnpEffSupport::getToolRunnerAdditionalOptions() {
     CHECK(s != NULL, result);
     //java VM can't allocate whole free memory, Xmx size should be lesser than free memory
     int memSize = s->getMaxMemorySizeInMB();
-    result << "-Xmx" + QString::number(memSize > 150 ? memSize - 150 : memSize) + "M";
+    result << "-Xmx" + QString::number( memSize > 150 ? memSize - 150 : memSize) + "M";
     return result;
 }
 
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffTask.cpp b/src/plugins/external_tool_support/src/snpeff/SnpEffTask.cpp
index 0daeb18..3d22f2f 100644
--- a/src/plugins/external_tool_support/src/snpeff/SnpEffTask.cpp
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffTask.cpp
@@ -1,23 +1,23 @@
 /**
-* 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.
-*/
+ * 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 <QtCore/QDir>
 
@@ -48,7 +48,7 @@ SnpEffParser::SnpEffParser()
 
 }
 
-void SnpEffParser::parseOutput(const QString& partOfLog) {
+void SnpEffParser::parseOutput( const QString& partOfLog ) {
     lastPartOfLog = partOfLog.split(QRegExp("(\n|\r)"));
 
     foreach(const QString &buf, lastPartOfLog) {
@@ -61,12 +61,12 @@ void SnpEffParser::parseOutput(const QString& partOfLog) {
     }
 }
 
-void SnpEffParser::parseErrOutput(const QString& partOfLog) {
+void SnpEffParser::parseErrOutput( const QString& partOfLog ) {
     lastPartOfLog = partOfLog.split(QRegExp("(\n|\r)"));
-    lastPartOfLog.first() = lastErrLine + lastPartOfLog.first();
+    lastPartOfLog.first() = lastErrLine+lastPartOfLog.first();
     lastErrLine = lastPartOfLog.takeLast();
 
-    foreach(const QString &buf, lastPartOfLog) {
+    foreach (const QString &buf, lastPartOfLog) {
         if (stringsToIgnore.contains(buf)) {
             continue;
         }
@@ -116,27 +116,28 @@ QStringList SnpEffParser::initStringsToIgnore() {
 //////////////////////////////////////////////////////////////////////////
 //SnpEffTask
 SnpEffTask::SnpEffTask(const SnpEffSetting &settings)
-    :ExternalToolSupportTask(QString("snpEff for %1").arg(settings.inputUrl), TaskFlags_FOSE_COSC)
-    , settings(settings) {
+:ExternalToolSupportTask(QString("snpEff for %1").arg(settings.inputUrl), TaskFlags_FOSE_COSC)
+,settings(settings)
+{
 
 }
 
-void SnpEffTask::prepare() {
+void SnpEffTask::prepare(){
 
-    if (settings.inputUrl.isEmpty()) {
+    if (settings.inputUrl.isEmpty()){
         setError("No input URL");
-        return;
+        return ;
     }
 
     const QDir outDir = QFileInfo(settings.outDir).absoluteDir();
     if (!outDir.exists()) {
         setError("Directory does not exist: " + outDir.absolutePath());
-        return;
+        return ;
     }
 
-    if (settings.genome.isEmpty()) {
+    if(settings.genome.isEmpty()){
         setError("No path to genome lengths");
-        return;
+        return ;
     }
 
     const QStringList args = getParameters(stateInfo);
@@ -144,22 +145,22 @@ void SnpEffTask::prepare() {
 
     ExternalToolRunTask* etTask = new ExternalToolRunTask(ET_SNPEFF, args, new SnpEffParser(), settings.outDir, QStringList(), QString(), true);
     setListenerForTask(etTask);
-    etTask->setStandartOutputFile(getResFileUrl());
+    etTask->setStandartOutputFile( getResFileUrl() );
     addSubTask(etTask);
 }
 
-void SnpEffTask::run() {
+void SnpEffTask::run(){
     CHECK_OP(stateInfo, );
 
     const QFileInfo resFile(getResFileUrl());
     if (!resFile.exists()) {
         setError("Result file does not exist: " + resFile.absoluteFilePath());
-        return;
+        return ;
     }
     resultUrl = getResFileUrl();
 }
 
-QString SnpEffTask::getSummaryUrl() {
+QString SnpEffTask::getSummaryUrl(){
     QString res = "";
     const QFileInfo resFile = QFileInfo(settings.outDir + "/" + SUMMARY_FILE);
     if (!resFile.exists()) {
@@ -169,13 +170,13 @@ QString SnpEffTask::getSummaryUrl() {
     return res;
 }
 
-QString SnpEffTask::getResFileUrl() {
+QString SnpEffTask::getResFileUrl(){
     QString res = "";
     res = settings.outDir + "/" + RES_FILE_BASE + "." + settings.outFormat;
     return res;
 }
 
-QString SnpEffTask::getDataPath() const {
+QString SnpEffTask::getDataPath() const{
     CHECK(NULL != AppContext::getAppSettings(), QString());
     CHECK(NULL != AppContext::getAppSettings()->getUserAppsSettings(), QString());
     CHECK(NULL != AppContext::getExternalToolRegistry(), QString());
@@ -183,7 +184,7 @@ QString SnpEffTask::getDataPath() const {
     return AppContext::getAppSettings()->getUserAppsSettings()->getDownloadDirPath() + "/" + "snpeff_data_" + AppContext::getExternalToolRegistry()->getByName(ET_SNPEFF)->getVersion();
 }
 
-QStringList SnpEffTask::getParameters(U2OpStatus & os) const {
+QStringList SnpEffTask::getParameters(U2OpStatus & os) const{
     QStringList res;
 
     res << QString("-dataDir");
@@ -192,10 +193,10 @@ QStringList SnpEffTask::getParameters(U2OpStatus & os) const {
 #ifdef Q_OS_WIN
     additionalSlash = "/";
 #endif
-    QString dataPath = getDataPath();
-    if (dataPath.isEmpty()) {
+    QString dataPath=getDataPath();
+    if (dataPath.isEmpty()){
         os.setError(tr("SNPEff dataDir is not initialized."));
-    } else {
+    }else{
         res << additionalSlash + dataPath;
     }
 
@@ -208,19 +209,19 @@ QStringList SnpEffTask::getParameters(U2OpStatus & os) const {
     res << QString("-upDownStreamLen");
     res << settings.updownLength;
 
-    if (settings.canon) {
+    if(settings.canon){
         res << QString("-canon");
     }
 
-    if (settings.hgvs) {
+    if(settings.hgvs){
         res << QString("-hgvs");
     }
 
-    if (settings.lof) {
+    if(settings.lof){
         res << QString("-lof");
     }
 
-    if (settings.motif) {
+    if(settings.motif){
         res << QString("-motif");
     }
 
diff --git a/src/plugins/external_tool_support/src/ui/SpadesSettings.ui b/src/plugins/external_tool_support/src/spades/SpadesSettings.ui
similarity index 100%
rename from src/plugins/external_tool_support/src/ui/SpadesSettings.ui
rename to src/plugins/external_tool_support/src/spades/SpadesSettings.ui
diff --git a/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.h b/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.h
index f599ebc..5469acc 100644
--- a/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.h
+++ b/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.h
@@ -26,7 +26,7 @@
 
 #include <U2View/DnaAssemblyGUIExtension.h>
 
-#include "ui/ui_SpadesSettings.h"
+#include "ui_SpadesSettings.h"
 
 namespace U2 {
 
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp
index 077bbec..817ae66 100644
--- a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp
@@ -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/DocumentUtils.h>
 #include <U2Core/GUrlUtils.h>
@@ -36,6 +29,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "TCoffeeSupportRunDialog.h"
@@ -45,23 +39,19 @@ namespace U2 {
 ////////////////////////////////////////
 //TCoffeeSupportRunDialog
 TCoffeeSupportRunDialog::TCoffeeSupportRunDialog(TCoffeeSupportTaskSettings& _settings, QWidget* _parent) :
-        QDialog(_parent), settings(_settings)
+    QDialog(_parent), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467798");
+    new HelpButton(this, buttonBox, "17470731");
+
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     inputGroupBox->setVisible(false);
     this->adjustSize();
-    QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
-    QPushButton* alignButton = buttonBox->button(QDialogButtonBox::Ok);
-    connect(cancelButton,SIGNAL(clicked()),this,SLOT(reject()));
-    connect(alignButton,SIGNAL(clicked()),this,SLOT(sl_align()));
-
 }
 
-void TCoffeeSupportRunDialog::sl_align(){
+void TCoffeeSupportRunDialog::accept(){
     if(gapOpenCheckBox->isChecked()) {
         settings.gapOpenPenalty = gapOpenSpinBox->value();
     }
@@ -71,26 +61,24 @@ void TCoffeeSupportRunDialog::sl_align(){
     if(maxNumberIterRefinementCheckBox->isChecked()){
         settings.numIterations = maxNumberIterRefinementSpinBox->value();
     }
-    accept();
+    QDialog::accept();
 }
 ////////////////////////////////////////
 //TCoffeeWithExtFileSpecifySupportRunDialog
 TCoffeeWithExtFileSpecifySupportRunDialog::TCoffeeWithExtFileSpecifySupportRunDialog(TCoffeeSupportTaskSettings& _settings, QWidget* _parent) :
-        QDialog(_parent), settings(_settings)
+    QDialog(_parent),
+    settings(_settings),
+    saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467798");
+    new HelpButton(this, buttonBox, "17470731");
+
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    //this->adjustSize();
-    connect(inputFilePathButton, SIGNAL(clicked()), SLOT(sl_inputPathButtonClicked()));
-    connect(outputFilePathButton, SIGNAL(clicked()), SLOT(sl_outputPathButtonClicked()));
-    QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
-    QPushButton* alignButton = buttonBox->button(QDialogButtonBox::Ok);
+    initSaveController();
 
-    connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
-    connect(alignButton, SIGNAL(clicked()), this, SLOT(sl_align()));
+    connect(inputFilePathButton, SIGNAL(clicked()), SLOT(sl_inputPathButtonClicked()));
 }
 
 void TCoffeeWithExtFileSpecifySupportRunDialog::sl_inputPathButtonClicked() {
@@ -103,22 +91,21 @@ void TCoffeeWithExtFileSpecifySupportRunDialog::sl_inputPathButtonClicked() {
     inputFileLineEdit->setText(lod.url);
 }
 
-void TCoffeeWithExtFileSpecifySupportRunDialog::sl_outputPathButtonClicked() {
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Save an multiple alignment file"), lod.dir);
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    outputFileLineEdit->setText(lod.url);
-    buildMultipleAlignmentUrl(lod.url);
-}
+void TCoffeeWithExtFileSpecifySupportRunDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
+    config.fileDialogButton = outputFilePathButton;
+    config.fileNameEdit = outputFileLineEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save an multiple alignment file");
+    config.rollOutProjectUrls = true;
 
-void TCoffeeWithExtFileSpecifySupportRunDialog::buildMultipleAlignmentUrl(const GUrl &alnUrl) {
-    GUrl url = GUrlUtils::rollFileName(alnUrl.dirPath() + "/" + alnUrl.baseFileName()+ ".aln", DocumentUtils::getNewDocFileNameExcludesHint());
-    outputFileLineEdit->setText(url.getURLString());
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::CLUSTAL_ALN;
+
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
-void TCoffeeWithExtFileSpecifySupportRunDialog::sl_align(){
+void TCoffeeWithExtFileSpecifySupportRunDialog::accept(){
     if(gapOpenCheckBox->isChecked()) {
         settings.gapOpenPenalty = gapOpenSpinBox->value();
     }
@@ -130,17 +117,16 @@ void TCoffeeWithExtFileSpecifySupportRunDialog::sl_align(){
     }
     if(inputFileLineEdit->text().isEmpty()){
         QMessageBox::information(this, tr("Kalign with Align"),
-            tr("Input file is not set!") );
-        }else if(outputFileLineEdit->text().isEmpty()){
-            QMessageBox::information(this, tr("Kalign with Align"),
-                tr("Output file is not set!") );
-        }
-        else{
-            settings.outputFilePath=outputFileLineEdit->text();
-            settings.inputFilePath=inputFileLineEdit->text();
-            QDialog::accept();
-            }
-
+                                 tr("Input file is not set!") );
+    }else if(saveController->getSaveFileName().isEmpty()){
+        QMessageBox::information(this, tr("Kalign with Align"),
+                                 tr("Output file is not set!") );
+    }
+    else{
+        settings.outputFilePath = saveController->getSaveFileName();
+        settings.inputFilePath = inputFileLineEdit->text();
+        QDialog::accept();
+    }
 }
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.h b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.h
index 8b951b4..ba853da 100644
--- a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.h
@@ -22,23 +22,24 @@
 #ifndef _U2_TCOFFEE_SUPPORT_RUN_DIALOG_H
 #define _U2_TCOFFEE_SUPPORT_RUN_DIALOG_H
 
+#include <QDialog>
+
 #include <U2Gui/DialogUtils.h>
-#include <ui/ui_TCoffeeSupportRunDialog.h>
+#include <ui_TCoffeeSupportRunDialog.h>
 #include "TCoffeeSupportTask.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
 
 namespace U2 {
 
+class SaveDocumentController;
+
 class TCoffeeSupportRunDialog : public QDialog, public Ui_TCoffeeSupportRunDialog {
     Q_OBJECT
 public:
     TCoffeeSupportRunDialog(TCoffeeSupportTaskSettings& settings, QWidget* parent);
+
 private slots:
-    void sl_align();
+    void accept();
+
 private:
     TCoffeeSupportTaskSettings&        settings;
 };
@@ -47,13 +48,16 @@ class TCoffeeWithExtFileSpecifySupportRunDialog : public QDialog, public Ui_TCof
     Q_OBJECT
 public:
     TCoffeeWithExtFileSpecifySupportRunDialog(TCoffeeSupportTaskSettings& settings, QWidget* parent);
+
 private slots:
-    void sl_align();
+    void accept();
     void sl_inputPathButtonClicked();
-    void sl_outputPathButtonClicked();
+
 private:
+    void initSaveController();
+
     TCoffeeSupportTaskSettings&     settings;
-    void buildMultipleAlignmentUrl(const GUrl &alnUrl);
+    SaveDocumentController *        saveController;
 };
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.ui b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.ui
new file mode 100644
index 0000000..036ab67
--- /dev/null
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.ui
@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TCoffeeSupportRunDialog</class>
+ <widget class="QDialog" name="TCoffeeSupportRunDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>450</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>450</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>Align with T-Coffee</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <widget class="QGroupBox" name="inputGroupBox">
+       <property name="title">
+        <string/>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_3">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout_2">
+          <item row="0" column="0">
+           <widget class="QLabel" name="label">
+            <property name="text">
+             <string>Input file</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <widget class="QLineEdit" name="inputFileLineEdit"/>
+          </item>
+          <item row="0" column="2">
+           <widget class="QToolButton" name="inputFilePathButton">
+            <property name="text">
+             <string>...</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QLabel" name="label_2">
+            <property name="text">
+             <string>Output file</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <widget class="QLineEdit" name="outputFileLineEdit"/>
+          </item>
+          <item row="1" column="2">
+           <widget class="QToolButton" name="outputFilePathButton">
+            <property name="text">
+             <string>...</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </item>
+     <item>
+      <widget class="QGroupBox" name="groupBox">
+       <property name="title">
+        <string>Advanced options</string>
+       </property>
+       <layout class="QGridLayout" name="gridLayout_4">
+        <item row="0" column="0">
+         <layout class="QGridLayout" name="gridLayout">
+          <item row="0" column="0">
+           <widget class="QCheckBox" name="gapOpenCheckBox">
+            <property name="text">
+             <string>Gap opening penalty</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1">
+           <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>
+          <item row="0" column="2">
+           <widget class="QSpinBox" name="gapOpenSpinBox">
+            <property name="enabled">
+             <bool>false</bool>
+            </property>
+            <property name="minimum">
+             <number>-10000</number>
+            </property>
+            <property name="maximum">
+             <number>0</number>
+            </property>
+            <property name="singleStep">
+             <number>50</number>
+            </property>
+            <property name="value">
+             <number>-50</number>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0">
+           <widget class="QCheckBox" name="gapExtCheckBox">
+            <property name="text">
+             <string>Gap extension penalty</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1">
+           <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="1" column="2">
+           <widget class="QSpinBox" name="gapExtSpinBox">
+            <property name="enabled">
+             <bool>false</bool>
+            </property>
+            <property name="minimum">
+             <number>-5000</number>
+            </property>
+            <property name="maximum">
+             <number>5000</number>
+            </property>
+            <property name="singleStep">
+             <number>10</number>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="0">
+           <widget class="QCheckBox" name="maxNumberIterRefinementCheckBox">
+            <property name="text">
+             <string>Number of iterations</string>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="1">
+           <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>
+          <item row="2" column="2">
+           <widget class="QSpinBox" name="maxNumberIterRefinementSpinBox">
+            <property name="enabled">
+             <bool>false</bool>
+            </property>
+            <property name="maximum">
+             <number>1000</number>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </item>
+       </layout>
+      </widget>
+     </item>
+    </layout>
+   </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>maxNumberIterRefinementCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>maxNumberIterRefinementSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>160</x>
+     <y>110</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>356</x>
+     <y>110</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>gapOpenCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>gapOpenSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>160</x>
+     <y>48</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>356</x>
+     <y>48</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>gapExtCheckBox</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>gapExtSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>160</x>
+     <y>79</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>356</x>
+     <y>79</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>TCoffeeSupportRunDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>224</x>
+     <y>279</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>224</x>
+     <y>149</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>TCoffeeSupportRunDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>224</x>
+     <y>279</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>224</x>
+     <y>149</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/external_tool_support/src/tophat/TopHatSettings.cpp b/src/plugins/external_tool_support/src/tophat/TopHatSettings.cpp
index 5833818..280f586 100644
--- a/src/plugins/external_tool_support/src/tophat/TopHatSettings.cpp
+++ b/src/plugins/external_tool_support/src/tophat/TopHatSettings.cpp
@@ -41,15 +41,22 @@ void TopHatInputData::cleanupReads() {
 }
 
 TopHatSettings::TopHatSettings()
-    : noNovelJunctions(false),
-      fusionSearch(false),
-      transcriptomeOnly(false),
-      prefilterMultihits(false),
-      solexa13quals(false),
-      bowtieMode(vMode),
-      useBowtie1(false)
-{
-}
+    : mateInnerDistance(0),
+    mateStandardDeviation(0),
+    noNovelJunctions(false),
+    maxMultihits(0),
+    segmentLength(0),
+    fusionSearch(false),
+    transcriptomeOnly(false),
+    transcriptomeMaxHits(0),
+    prefilterMultihits(false),
+    minAnchorLength(0),
+    spliceMismatches(0),
+    readMismatches(0),
+    segmentMismatches(0),
+    solexa13quals(false),
+    bowtieMode(vMode),
+    useBowtie1(false){}
 
 void TopHatSettings::cleanupReads() {
     data.cleanupReads();
diff --git a/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.cpp b/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.cpp
index 711cc6d..6f4c555 100644
--- a/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.cpp
@@ -258,6 +258,10 @@ QList<Task*> TopHatSupportTask::onSubTaskFinished(Task *subTask) {
         ExternalToolSupportUtils::appendExistingFile(settings.outDir + "/junctions.bed", outputFiles);
         ExternalToolSupportUtils::appendExistingFile(settings.outDir + "/insertions.bed", outputFiles);
         ExternalToolSupportUtils::appendExistingFile(settings.outDir + "/deletions.bed", outputFiles);
+        if (!QFile::exists(getOutBamUrl())) {
+            setError(tr("TopHat was not able to map reads to the reference."));
+            return result;
+        }
 
         // Get assembly output
         Workflow::WorkflowTasksRegistry* registry = Workflow::WorkflowEnv::getWorkflowTasksRegistry();
diff --git a/src/plugins/external_tool_support/src/ui/BlastDBCmdDialog.ui b/src/plugins/external_tool_support/src/ui/BlastDBCmdDialog.ui
deleted file mode 100644
index 3d206f2..0000000
--- a/src/plugins/external_tool_support/src/ui/BlastDBCmdDialog.ui
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>BlastDBCmdDialog</class>
- <widget class="QDialog" name="BlastDBCmdDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>537</width>
-    <height>279</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>537</width>
-    <height>279</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>16777215</width>
-    <height>523</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Fetch Sequence from BLAST Database</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <property name="sizeConstraint">
-    <enum>QLayout::SetMinAndMaxSize</enum>
-   </property>
-   <item>
-    <widget class="QGroupBox" name="inputData">
-     <property name="title">
-      <string/>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2">
-      <property name="sizeConstraint">
-       <enum>QLayout::SetMinAndMaxSize</enum>
-      </property>
-      <item>
-       <widget class="QLabel" name="label">
-        <property name="text">
-         <string>Entery query ID:</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QLineEdit" name="queryIdEdit"/>
-      </item>
-      <item>
-       <widget class="QLabel" name="label_2">
-        <property name="text">
-         <string>Select database :</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QWidget" name="dbSelectorWidget" native="true">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <layout class="QVBoxLayout" name="verticalLayout_10">
-         <property name="spacing">
-          <number>0</number>
-         </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>
-       <widget class="QLabel" name="label_3">
-        <property name="text">
-         <string>Output path:</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_2">
-        <item>
-         <widget class="QLineEdit" name="outputPathLineEdit">
-          <property name="readOnly">
-           <bool>true</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>
-        <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="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins/external_tool_support/src/ui/BlastDBSelectorWidget.ui b/src/plugins/external_tool_support/src/ui/BlastDBSelectorWidget.ui
deleted file mode 100644
index 259c6c1..0000000
--- a/src/plugins/external_tool_support/src/ui/BlastDBSelectorWidget.ui
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>BlastDBSelectorWidget</class>
- <widget class="QWidget" name="BlastDBSelectorWidget">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>293</width>
-    <height>68</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <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">
-    <layout class="QHBoxLayout" name="horizontalLayout_2">
-     <item>
-      <widget class="QLabel" name="label_14">
-       <property name="text">
-        <string>Database path:</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLineEdit" name="databasePathLineEdit"/>
-     </item>
-    </layout>
-   </item>
-   <item row="0" column="1" rowspan="2">
-    <widget class="QPushButton" name="selectDatabasePushButton">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>90</width>
-       <height>0</height>
-      </size>
-     </property>
-     <property name="text">
-      <string>Select
-a database file</string>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="0">
-    <layout class="QHBoxLayout" name="horizontalLayout_5">
-     <item>
-      <widget class="QLabel" name="label_5">
-       <property name="text">
-        <string>Base name for BLAST DB files:</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLineEdit" name="baseNameLineEdit"/>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins/external_tool_support/src/ui/BwaBuildSettings.ui b/src/plugins/external_tool_support/src/ui/BwaBuildSettings.ui
deleted file mode 100644
index 38fea94..0000000
--- a/src/plugins/external_tool_support/src/ui/BwaBuildSettings.ui
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>BwaBuildSettings</class>
- <widget class="QWidget" name="BwaBuildSettings">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>239</width>
-    <height>98</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <property name="sizeConstraint">
-    <enum>QLayout::SetMinAndMaxSize</enum>
-   </property>
-   <property name="horizontalSpacing">
-    <number>0</number>
-   </property>
-   <property name="verticalSpacing">
-    <number>6</number>
-   </property>
-   <property name="margin">
-    <number>0</number>
-   </property>
-   <item row="1" column="0" colspan="2">
-    <widget class="QLabel" name="infoLabel">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="text">
-      <string/>
-     </property>
-     <property name="scaledContents">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="0">
-    <widget class="QLabel" name="label">
-     <property name="text">
-      <string>Index algorithm (-a)</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="1">
-    <widget class="QComboBox" name="indexAlgorithmComboBox">
-     <property name="currentIndex">
-      <number>2</number>
-     </property>
-     <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>
- <tabstops>
-  <tabstop>indexAlgorithmComboBox</tabstop>
- </tabstops>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins/external_tool_support/src/ui/CAP3SupportDialog.ui b/src/plugins/external_tool_support/src/ui/CAP3SupportDialog.ui
deleted file mode 100644
index f8d77e7..0000000
--- a/src/plugins/external_tool_support/src/ui/CAP3SupportDialog.ui
+++ /dev/null
@@ -1,512 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>CAP3SupportDialog</class>
- <widget class="QDialog" name="CAP3SupportDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>741</width>
-    <height>496</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>741</width>
-    <height>496</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Contig Assembly with CAP3</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout_6">
-   <item row="0" column="0" colspan="2">
-    <widget class="QTabWidget" name="tabWidget">
-     <property name="currentIndex">
-      <number>0</number>
-     </property>
-     <widget class="QWidget" name="tab">
-      <attribute name="title">
-       <string>Base</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout">
-       <item>
-        <widget class="QLabel" name="label">
-         <property name="text">
-          <string>Input files (long DNA reads to assembly)</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QGridLayout" name="gridLayout">
-         <item row="0" column="0" rowspan="4">
-          <widget class="QListWidget" name="seqList">
-           <property name="toolTip">
-            <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:'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;">Sequences in FASTA or FASTQ formats are supported. </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The quality scores for FASTA sequences can be provided in an additional file. The file must be located in the same folder as the original sequences and have the same name as FASTA file, but another extention: <span style=" font-weight:600; font-style:italic;">.qual</span></p></body></html></string>
-           </property>
-          </widget>
-         </item>
-         <item row="0" column="1">
-          <widget class="QPushButton" name="addButton">
-           <property name="text">
-            <string>Add</string>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="1">
-          <widget class="QPushButton" name="removeButton">
-           <property name="text">
-            <string>Remove</string>
-           </property>
-          </widget>
-         </item>
-         <item row="2" column="1">
-          <widget class="QPushButton" name="removeAllButton">
-           <property name="text">
-            <string>Remove All</string>
-           </property>
-          </widget>
-         </item>
-         <item row="3" column="1">
-          <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>
-        </layout>
-       </item>
-       <item>
-        <widget class="QLabel" name="label_2">
-         <property name="text">
-          <string>Result contig</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout">
-         <item>
-          <widget class="QLineEdit" name="outputPathLineEdit">
-           <property name="toolTip">
-            <string>Path to result contig alignment in ACE format.</string>
-           </property>
-           <property name="readOnly">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="specifyOutputPathButton">
-           <property name="text">
-            <string>...</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="tab_2">
-      <attribute name="title">
-       <string>Advanced</string>
-      </attribute>
-      <layout class="QGridLayout" name="gridLayout_2">
-       <item row="0" column="0">
-        <widget class="QGroupBox" name="groupBox_3">
-         <property name="title">
-          <string>Clipping for poor regions</string>
-         </property>
-         <layout class="QGridLayout" name="gridLayout_4">
-          <item row="0" column="0">
-           <widget class="QLabel" name="label_5">
-            <property name="text">
-             <string>Base quality cutoff for clipping (-c)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <widget class="QSpinBox" name="baseQualityClipCutoffBox">
-            <property name="minimum">
-             <number>5</number>
-            </property>
-            <property name="value">
-             <number>12</number>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="label_8">
-            <property name="text">
-             <string>Clipping range (-y)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1">
-           <widget class="QSpinBox" name="clippingRangeBox">
-            <property name="minimum">
-             <number>6</number>
-            </property>
-            <property name="maximum">
-             <number>1000</number>
-            </property>
-            <property name="value">
-             <number>250</number>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </item>
-       <item row="0" column="1" colspan="2">
-        <widget class="QGroupBox" name="groupBox_6">
-         <property name="title">
-          <string>Length and percent identity of an overlap</string>
-         </property>
-         <layout class="QGridLayout" name="gridLayout_7">
-          <item row="0" column="0">
-           <widget class="QLabel" name="label_12">
-            <property name="text">
-             <string>Overlap length cutoff (-o)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="2">
-           <widget class="QSpinBox" name="overlapLengthCutoffBox">
-            <property name="minimum">
-             <number>20</number>
-            </property>
-            <property name="maximum">
-             <number>100</number>
-            </property>
-            <property name="value">
-             <number>40</number>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0" colspan="2">
-           <widget class="QLabel" name="label_15">
-            <property name="text">
-             <string>Overlap percent identity cutoff (-p)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="2">
-           <widget class="QSpinBox" name="overlapPercentIdentityBox">
-            <property name="minimum">
-             <number>65</number>
-            </property>
-            <property name="maximum">
-             <number>100</number>
-            </property>
-            <property name="value">
-             <number>80</number>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </item>
-       <item row="1" column="0">
-        <widget class="QGroupBox" name="groupBox_2">
-         <property name="title">
-          <string>Quality difference score of an overlap</string>
-         </property>
-         <layout class="QGridLayout" name="gridLayout_3">
-          <item row="0" column="0">
-           <widget class="QLabel" name="label_4">
-            <property name="text">
-             <string>Base quality cutoff for differences (-b)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <widget class="QSpinBox" name="baseQualityDiffCutoffBox">
-            <property name="minimum">
-             <number>15</number>
-            </property>
-            <property name="value">
-             <number>20</number>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1">
-           <widget class="QSpinBox" name="maxQScoreDiffBox">
-            <property name="minimum">
-             <number>20</number>
-            </property>
-            <property name="maximum">
-             <number>1000</number>
-            </property>
-            <property name="value">
-             <number>200</number>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="label_6">
-            <property name="text">
-             <string>Max qscore sum at differences (-d)</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </item>
-       <item row="1" column="1" rowspan="2" colspan="2">
-        <widget class="QGroupBox" name="groupBox">
-         <property name="title">
-          <string>Other parameters</string>
-         </property>
-         <layout class="QGridLayout" name="gridLayout_8">
-          <item row="0" column="0">
-           <widget class="QLabel" name="label_7">
-            <property name="text">
-             <string>Max number of word matches (-t)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <widget class="QSpinBox" name="maxNumWordMatchesBox">
-            <property name="minimum">
-             <number>30</number>
-            </property>
-            <property name="maximum">
-             <number>1000</number>
-            </property>
-            <property name="value">
-             <number>300</number>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="label_3">
-            <property name="text">
-             <string>Band expansion size (-a)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1">
-           <widget class="QSpinBox" name="bandExpansionBox">
-            <property name="toolTip">
-             <string/>
-            </property>
-            <property name="whatsThis">
-             <string/>
-            </property>
-            <property name="minimum">
-             <number>10</number>
-            </property>
-            <property name="value">
-             <number>20</number>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="0">
-           <widget class="QLabel" name="maxGapLengthInOverlapLabel">
-            <property name="text">
-             <string>Max gap length in any overlap (-f)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="1">
-           <widget class="QSpinBox" name="maxGapLengthBox">
-            <property name="minimum">
-             <number>1</number>
-            </property>
-            <property name="maximum">
-             <number>100</number>
-            </property>
-            <property name="value">
-             <number>20</number>
-            </property>
-           </widget>
-          </item>
-          <item row="3" column="0">
-           <widget class="QCheckBox" name="reverseReadsBox">
-            <property name="text">
-             <string>Assembly reverse reads (-r)</string>
-            </property>
-            <property name="checked">
-             <bool>true</bool>
-            </property>
-           </widget>
-          </item>
-          <item row="4" column="0">
-           <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>
-       <item row="2" column="0">
-        <widget class="QGroupBox" name="groupBox_4">
-         <property name="title">
-          <string>Similarity score of an overlap</string>
-         </property>
-         <layout class="QGridLayout" name="gridLayout_5">
-          <item row="1" column="0">
-           <widget class="QLabel" name="label_11">
-            <property name="text">
-             <string>Mismatch score factor (-n)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1">
-           <widget class="QSpinBox" name="mismatchScoreFactorBox">
-            <property name="minimum">
-             <number>-100</number>
-            </property>
-            <property name="maximum">
-             <number>-1</number>
-            </property>
-            <property name="value">
-             <number>-5</number>
-            </property>
-           </widget>
-          </item>
-          <item row="4" column="0">
-           <widget class="QLabel" name="OverlapSimilarityScoreCutoffLabel">
-            <property name="text">
-             <string>Overlap similarity score cutoff (-s)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="4" column="1">
-           <widget class="QSpinBox" name="overlapSimilarityScoreCutoffBox">
-            <property name="minimum">
-             <number>400</number>
-            </property>
-            <property name="maximum">
-             <number>1000</number>
-            </property>
-            <property name="value">
-             <number>900</number>
-            </property>
-           </widget>
-          </item>
-          <item row="3" column="0">
-           <widget class="QLabel" name="label_13">
-            <property name="text">
-             <string>Gap penalty factor (-g)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="0">
-           <widget class="QLabel" name="MaxNumbeOfWordMismatchesBox">
-            <property name="text">
-             <string>Match score factor (-m)</string>
-            </property>
-           </widget>
-          </item>
-          <item row="3" column="1">
-           <widget class="QSpinBox" name="gapPenaltyFactorBox">
-            <property name="value">
-             <number>6</number>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <widget class="QSpinBox" name="matchScoreFactorBox">
-            <property name="minimum">
-             <number>1</number>
-            </property>
-            <property name="value">
-             <number>2</number>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-    </widget>
-   </item>
-   <item row="1" column="0" colspan="2">
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <tabstops>
-  <tabstop>tabWidget</tabstop>
-  <tabstop>baseQualityClipCutoffBox</tabstop>
-  <tabstop>clippingRangeBox</tabstop>
-  <tabstop>overlapLengthCutoffBox</tabstop>
-  <tabstop>overlapPercentIdentityBox</tabstop>
-  <tabstop>baseQualityDiffCutoffBox</tabstop>
-  <tabstop>maxQScoreDiffBox</tabstop>
-  <tabstop>maxNumWordMatchesBox</tabstop>
-  <tabstop>bandExpansionBox</tabstop>
-  <tabstop>maxGapLengthBox</tabstop>
-  <tabstop>matchScoreFactorBox</tabstop>
-  <tabstop>mismatchScoreFactorBox</tabstop>
-  <tabstop>gapPenaltyFactorBox</tabstop>
-  <tabstop>overlapSimilarityScoreCutoffBox</tabstop>
-  <tabstop>reverseReadsBox</tabstop>
-  <tabstop>seqList</tabstop>
-  <tabstop>addButton</tabstop>
-  <tabstop>removeButton</tabstop>
-  <tabstop>removeAllButton</tabstop>
-  <tabstop>outputPathLineEdit</tabstop>
-  <tabstop>specifyOutputPathButton</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>CAP3SupportDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>370</x>
-     <y>475</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>370</x>
-     <y>247</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>CAP3SupportDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>370</x>
-     <y>475</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>370</x>
-     <y>247</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/external_tool_support/src/ui/ClustalOSupportRunDialog.ui b/src/plugins/external_tool_support/src/ui/ClustalOSupportRunDialog.ui
deleted file mode 100644
index db0d1f3..0000000
--- a/src/plugins/external_tool_support/src/ui/ClustalOSupportRunDialog.ui
+++ /dev/null
@@ -1,368 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ClustalOSupportRunDialog</class>
- <widget class="QDialog" name="ClustalOSupportRunDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>400</width>
-    <height>425</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>16777215</width>
-    <height>16777215</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Align with Clustal Omega</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
-   <item>
-    <layout class="QVBoxLayout" name="verticalLayout">
-     <item>
-      <widget class="QGroupBox" name="inputGroupBox">
-       <property name="title">
-        <string/>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_2">
-        <item row="0" column="0">
-         <layout class="QGridLayout" name="gridLayout">
-          <item row="0" column="0">
-           <widget class="QLabel" name="label_2">
-            <property name="text">
-             <string>Input file</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <widget class="QLineEdit" name="inputFileLineEdit"/>
-          </item>
-          <item row="0" column="2">
-           <widget class="QToolButton" name="inputFilePathButton">
-            <property name="text">
-             <string>...</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="label_3">
-            <property name="text">
-             <string>Output file</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1">
-           <widget class="QLineEdit" name="outputFileLineEdit"/>
-          </item>
-          <item row="1" column="2">
-           <widget class="QToolButton" name="outputFilePathButton">
-            <property name="text">
-             <string>...</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item>
-      <widget class="QGroupBox" name="groupBox">
-       <property name="title">
-        <string>Iteration</string>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_7">
-        <item row="0" column="0">
-         <layout class="QGridLayout" name="gridLayout_6">
-          <item row="0" column="0">
-           <layout class="QGridLayout" name="gridLayout_3">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="iterationNumberCheckBox">
-              <property name="text">
-               <string>Number of iterations</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <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>
-            <item row="0" column="2">
-             <widget class="QSpinBox" name="iterationNumberSpinBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="minimum">
-               <number>1</number>
-              </property>
-              <property name="maximum">
-               <number>999</number>
-              </property>
-              <property name="value">
-               <number>1</number>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="1" column="0">
-           <layout class="QGridLayout" name="gridLayout_4">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="maxGTIterationsCheckBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="cursor">
-               <cursorShape>ArrowCursor</cursorShape>
-              </property>
-              <property name="text">
-               <string>Max number guidetree iterations</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <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="0" column="2">
-             <widget class="QSpinBox" name="maxGTIterationsSpinBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="minimum">
-               <number>0</number>
-              </property>
-              <property name="maximum">
-               <number>999</number>
-              </property>
-              <property name="value">
-               <number>0</number>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="2" column="0">
-           <layout class="QGridLayout" name="gridLayout_5">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="maxHMMIterationsCheckBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="text">
-               <string>Max number of HMM iterations</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <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>
-            <item row="0" column="2">
-             <widget class="QSpinBox" name="maxHMMIterationsSpinBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="maximum">
-               <number>999</number>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item>
-      <widget class="QGroupBox" name="groupBox_2">
-       <property name="title">
-        <string>Miscellaneous</string>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_10">
-        <item row="0" column="0">
-         <layout class="QGridLayout" name="gridLayout_9">
-          <item row="0" column="0">
-           <layout class="QGridLayout" name="gridLayout_8">
-            <item row="0" column="0">
-             <widget class="QLabel" name="label">
-              <property name="text">
-               <string>Number of CPUs being used</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <spacer name="horizontalSpacer_5">
-              <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="0" column="2">
-             <widget class="QSpinBox" name="numberOfCPUSpinBox">
-              <property name="minimumSize">
-               <size>
-                <width>42</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="minimum">
-               <number>1</number>
-              </property>
-              <property name="maximum">
-               <number>6000</number>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="1" column="0">
-           <widget class="QCheckBox" name="setAutoCheckBox">
-            <property name="text">
-             <string>Set options automatically</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-    </layout>
-   </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>maxGTIterationsCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>maxGTIterationsSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>108</x>
-     <y>147</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>290</x>
-     <y>147</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>iterationNumberCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>maxGTIterationsCheckBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>108</x>
-     <y>147</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>108</x>
-     <y>178</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>iterationNumberCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>maxHMMIterationsCheckBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>135</x>
-     <y>46</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>135</x>
-     <y>106</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>maxHMMIterationsCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>maxHMMIterationsSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>135</x>
-     <y>106</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>306</x>
-     <y>106</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>iterationNumberCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>iterationNumberSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>135</x>
-     <y>46</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>283</x>
-     <y>46</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/external_tool_support/src/ui/ClustalWSupportRunDialog.ui b/src/plugins/external_tool_support/src/ui/ClustalWSupportRunDialog.ui
deleted file mode 100644
index b63b6bf..0000000
--- a/src/plugins/external_tool_support/src/ui/ClustalWSupportRunDialog.ui
+++ /dev/null
@@ -1,607 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ClustalWSupportRunDialog</class>
- <widget class="QDialog" name="ClustalWSupportRunDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>485</width>
-    <height>452</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>400</width>
-    <height>0</height>
-   </size>
-  </property>
-  <property name="maximumSize">
-   <size>
-    <width>40067</width>
-    <height>448567</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Align with ClustalW</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
-   <item>
-    <layout class="QVBoxLayout" name="verticalLayout">
-     <item>
-      <widget class="QGroupBox" name="inputGroupBox">
-       <property name="title">
-        <string/>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_10">
-        <item row="0" column="0">
-         <layout class="QGridLayout" name="gridLayout_9">
-          <item row="0" column="0">
-           <widget class="QLabel" name="inputFileLabel">
-            <property name="text">
-             <string>Input file</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <widget class="QLineEdit" name="inputFileLineEdit"/>
-          </item>
-          <item row="0" column="2">
-           <widget class="QToolButton" name="inputFilePathButton">
-            <property name="text">
-             <string>...</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="outputFileLabel">
-            <property name="text">
-             <string>Output file</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1">
-           <widget class="QLineEdit" name="outputFileLineEdit">
-            <property name="maximumSize">
-             <size>
-              <width>16777214</width>
-              <height>16777215</height>
-             </size>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="2">
-           <widget class="QToolButton" name="outputFilePathButton">
-            <property name="text">
-             <string>...</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item>
-      <widget class="QGroupBox" name="groupBox">
-       <property name="title">
-        <string>Advanced options</string>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_8">
-        <item row="0" column="0">
-         <layout class="QGridLayout" name="gridLayout_7">
-          <item row="0" column="0">
-           <layout class="QGridLayout" name="gridLayout">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="gapOpenCheckBox">
-              <property name="text">
-               <string>Gap opening penalty</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <spacer name="horizontalSpacer_2">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-              <property name="sizeHint" stdset="0">
-               <size>
-                <width>98</width>
-                <height>16</height>
-               </size>
-              </property>
-             </spacer>
-            </item>
-            <item row="0" column="2">
-             <widget class="QDoubleSpinBox" name="gapOpenSpinBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>105</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="maximum">
-               <double>100.000000000000000</double>
-              </property>
-              <property name="value">
-               <double>15.000000000000000</double>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="1" column="0">
-           <layout class="QGridLayout" name="gridLayout_2">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="gapExtCheckBox">
-              <property name="text">
-               <string>Gap extension penalty</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <spacer name="horizontalSpacer_3">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-              <property name="sizeHint" stdset="0">
-               <size>
-                <width>88</width>
-                <height>16</height>
-               </size>
-              </property>
-             </spacer>
-            </item>
-            <item row="0" column="2">
-             <widget class="QDoubleSpinBox" name="gapExtSpinBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>105</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="maximum">
-               <double>10.000000000000000</double>
-              </property>
-              <property name="value">
-               <double>6.660000000000000</double>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="2" column="0">
-           <layout class="QGridLayout" name="gridLayout_3">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="weightMatrixCheckBox">
-              <property name="text">
-               <string>Weight matrix</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <spacer name="horizontalSpacer_4">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-              <property name="sizeHint" stdset="0">
-               <size>
-                <width>128</width>
-                <height>16</height>
-               </size>
-              </property>
-             </spacer>
-            </item>
-            <item row="0" column="2">
-             <widget class="QComboBox" name="weightMatrixComboBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>105</width>
-                <height>0</height>
-               </size>
-              </property>
-              <item>
-               <property name="text">
-                <string>IUB</string>
-               </property>
-              </item>
-              <item>
-               <property name="text">
-                <string>CLUSTALW</string>
-               </property>
-              </item>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="3" column="0">
-           <layout class="QGridLayout" name="gridLayout_4">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="iterationTypeCheckBox">
-              <property name="text">
-               <string>Iteration type</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <spacer name="horizontalSpacer_5">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-              <property name="sizeHint" stdset="0">
-               <size>
-                <width>128</width>
-                <height>16</height>
-               </size>
-              </property>
-             </spacer>
-            </item>
-            <item row="0" column="2">
-             <widget class="QComboBox" name="iterationTypeComboBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>105</width>
-                <height>0</height>
-               </size>
-              </property>
-              <item>
-               <property name="text">
-                <string>NONE</string>
-               </property>
-              </item>
-              <item>
-               <property name="text">
-                <string>TREE</string>
-               </property>
-              </item>
-              <item>
-               <property name="text">
-                <string>ALIGNMENT</string>
-               </property>
-              </item>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="4" column="0">
-           <layout class="QGridLayout" name="gridLayout_5">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="maxIterationsCheckBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="cursor">
-               <cursorShape>ArrowCursor</cursorShape>
-              </property>
-              <property name="text">
-               <string>Max iterations</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <spacer name="horizontalSpacer_6">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-              <property name="sizeHint" stdset="0">
-               <size>
-                <width>128</width>
-                <height>16</height>
-               </size>
-              </property>
-             </spacer>
-            </item>
-            <item row="0" column="2">
-             <widget class="QSpinBox" name="maxIterationsSpinBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>105</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="minimum">
-               <number>1</number>
-              </property>
-              <property name="maximum">
-               <number>999</number>
-              </property>
-              <property name="value">
-               <number>3</number>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="5" column="0">
-           <layout class="QGridLayout" name="gridLayout_6">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="outOrderCheckBox">
-              <property name="text">
-               <string>Out sequences order</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <spacer name="horizontalSpacer_7">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-              <property name="sizeHint" stdset="0">
-               <size>
-                <width>98</width>
-                <height>17</height>
-               </size>
-              </property>
-             </spacer>
-            </item>
-            <item row="0" column="2">
-             <widget class="QComboBox" name="outOrderComboBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>105</width>
-                <height>0</height>
-               </size>
-              </property>
-              <item>
-               <property name="text">
-                <string>Input</string>
-               </property>
-              </item>
-              <item>
-               <property name="text">
-                <string>Aligned</string>
-               </property>
-              </item>
-             </widget>
-            </item>
-           </layout>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item>
-      <widget class="QGroupBox" name="proteinGapParamGroupBox">
-       <property name="enabled">
-        <bool>false</bool>
-       </property>
-       <property name="title">
-        <string>Protein gap parameters</string>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_13">
-        <item row="0" column="0">
-         <layout class="QGridLayout" name="gridLayout_12">
-          <item row="0" column="0">
-           <layout class="QGridLayout" name="gridLayout_11">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="gapDistancesCheckBox">
-              <property name="text">
-               <string>Gap separation distance</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <spacer name="horizontalSpacer_8">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-              <property name="sizeHint" stdset="0">
-               <size>
-                <width>118</width>
-                <height>20</height>
-               </size>
-              </property>
-             </spacer>
-            </item>
-            <item row="0" column="2">
-             <widget class="QSpinBox" name="gapDistancesSpinBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>105</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="minimum">
-               <number>1</number>
-              </property>
-              <property name="maximum">
-               <number>10</number>
-              </property>
-              <property name="value">
-               <number>4</number>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="1" column="0">
-           <widget class="QCheckBox" name="hydrophilicGapsOffCheckBox">
-            <property name="text">
-             <string>Hydrophilic gaps off</string>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="0">
-           <widget class="QCheckBox" name="endGapsCheckBox">
-            <property name="text">
-             <string>No end gap separation penalty</string>
-            </property>
-           </widget>
-          </item>
-          <item row="3" column="0">
-           <widget class="QCheckBox" name="residueSpecificGapsOffCheckBox">
-            <property name="text">
-             <string>Residue-specific gaps off</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-    </layout>
-   </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>gapOpenCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>gapOpenSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>108</x>
-     <y>48</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>290</x>
-     <y>48</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>gapExtCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>gapExtSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>108</x>
-     <y>81</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>290</x>
-     <y>81</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>gapDistancesCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>gapDistancesSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>108</x>
-     <y>156</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>290</x>
-     <y>156</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>maxIterationsCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>maxIterationsSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>108</x>
-     <y>147</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>290</x>
-     <y>147</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>weightMatrixCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>weightMatrixComboBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>108</x>
-     <y>114</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>290</x>
-     <y>114</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>iterationTypeCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>iterationTypeComboBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>108</x>
-     <y>147</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>290</x>
-     <y>147</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>iterationTypeCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>maxIterationsCheckBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>108</x>
-     <y>147</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>108</x>
-     <y>178</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>outOrderCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>outOrderComboBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>108</x>
-     <y>209</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>290</x>
-     <y>209</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/external_tool_support/src/ui/MAFFTSupportRunDialog.ui b/src/plugins/external_tool_support/src/ui/MAFFTSupportRunDialog.ui
deleted file mode 100644
index bd31b25..0000000
--- a/src/plugins/external_tool_support/src/ui/MAFFTSupportRunDialog.ui
+++ /dev/null
@@ -1,282 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>MAFFTSupportRunDialog</class>
- <widget class="QDialog" name="MAFFTSupportRunDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>438</width>
-    <height>238</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>438</width>
-    <height>0</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Align with MAFFT</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
-   <item>
-    <layout class="QVBoxLayout" name="verticalLayout">
-     <item>
-      <widget class="QGroupBox" name="inputGroupBox">
-       <property name="title">
-        <string/>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_2">
-        <item row="0" column="0">
-         <layout class="QGridLayout" name="gridLayout">
-          <item row="0" column="0">
-           <widget class="QLabel" name="label">
-            <property name="text">
-             <string>Input file</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <widget class="QLineEdit" name="inputFileLineEdit"/>
-          </item>
-          <item row="0" column="2">
-           <widget class="QToolButton" name="inputFilePathButton">
-            <property name="text">
-             <string>...</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="label_2">
-            <property name="text">
-             <string>Output file</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1">
-           <widget class="QLineEdit" name="outputFileLineEdit"/>
-          </item>
-          <item row="1" column="2">
-           <widget class="QToolButton" name="outputFilePathButton">
-            <property name="text">
-             <string>...</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item>
-      <widget class="QGroupBox" name="groupBox">
-       <property name="title">
-        <string>Advanced options</string>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_7">
-        <item row="0" column="0">
-         <layout class="QGridLayout" name="gridLayout_6">
-          <item row="0" column="0">
-           <layout class="QGridLayout" name="gridLayout_3">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="gapOpenCheckBox">
-              <property name="text">
-               <string>Gap opening penalty</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <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>
-            <item row="0" column="2">
-             <widget class="QDoubleSpinBox" name="gapOpenSpinBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>55</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="maximum">
-               <double>10.000000000000000</double>
-              </property>
-              <property name="singleStep">
-               <double>0.100000000000000</double>
-              </property>
-              <property name="value">
-               <double>1.530000000000000</double>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="1" column="0">
-           <layout class="QGridLayout" name="gridLayout_4">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="gapExtCheckBox">
-              <property name="text">
-               <string>Offset (works like gap extension penalty)</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <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="0" column="2">
-             <widget class="QDoubleSpinBox" name="gapExtSpinBox">
-              <property name="enabled">
-               <bool>false</bool>
-              </property>
-              <property name="minimumSize">
-               <size>
-                <width>55</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="maximum">
-               <double>10.000000000000000</double>
-              </property>
-              <property name="value">
-               <double>0.000000000000000</double>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-          <item row="2" column="0">
-           <layout class="QGridLayout" name="gridLayout_5">
-            <item row="0" column="0">
-             <widget class="QCheckBox" name="maxNumberIterRefinementCheckBox">
-              <property name="text">
-               <string>Maximum number of iterative refinement</string>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <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>
-            <item row="0" column="2">
-             <widget class="QSpinBox" name="maxNumberIterRefinementSpinBox">
-              <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>55</width>
-                <height>0</height>
-               </size>
-              </property>
-              <property name="maximum">
-               <number>1000</number>
-              </property>
-             </widget>
-            </item>
-           </layout>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-    </layout>
-   </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>gapOpenCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>gapOpenSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>160</x>
-     <y>48</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>356</x>
-     <y>48</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>gapExtCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>gapExtSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>160</x>
-     <y>79</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>356</x>
-     <y>79</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>maxNumberIterRefinementCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>maxNumberIterRefinementSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>160</x>
-     <y>110</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>356</x>
-     <y>110</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/external_tool_support/src/ui/PhyMLDialog.ui b/src/plugins/external_tool_support/src/ui/PhyMLDialog.ui
deleted file mode 100644
index 80a07aa..0000000
--- a/src/plugins/external_tool_support/src/ui/PhyMLDialog.ui
+++ /dev/null
@@ -1,587 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>PhyMLDialog</class>
- <widget class="QWidget" name="PhyMLDialog">
-  <property name="windowModality">
-   <enum>Qt::NonModal</enum>
-  </property>
-  <property name="enabled">
-   <bool>true</bool>
-  </property>
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>509</width>
-    <height>251</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>0</width>
-    <height>0</height>
-   </size>
-  </property>
-  <property name="contextMenuPolicy">
-   <enum>Qt::DefaultContextMenu</enum>
-  </property>
-  <property name="windowTitle">
-   <string notr="true"/>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <property name="spacing">
-    <number>-1</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>
-    <widget class="QTabWidget" name="twSettings">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="currentIndex">
-      <number>0</number>
-     </property>
-     <widget class="QWidget" name="substitutionModel">
-      <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>
-       <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>
-       </item>
-       <item row="1" column="1">
-        <widget class="QComboBox" name="subModelCombo">
-         <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_11">
-         <item>
-          <widget class="QLabel" name="equilFreqLabel">
-           <property name="text">
-            <string>Equilibrium frequencies</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item row="2" column="1">
-        <layout class="QHBoxLayout" name="horizontalLayout_16">
-         <property name="leftMargin">
-          <number>0</number>
-         </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>
-       </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>
-       </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>
-       <item row="3" column="1">
-        <widget class="QSpinBox" name="tranSpinBox">
-         <property name="minimumSize">
-          <size>
-           <width>100</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="specialValueText">
-          <string>estimated </string>
-         </property>
-         <property name="minimum">
-          <number>-1</number>
-         </property>
-         <property name="maximum">
-          <number>990000</number>
-         </property>
-         <property name="value">
-          <number>0</number>
-         </property>
-        </widget>
-       </item>
-       <item row="4" column="1">
-        <widget class="QDoubleSpinBox" name="sitesSpinBox">
-         <property name="minimumSize">
-          <size>
-           <width>100</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="specialValueText">
-          <string>estimated </string>
-         </property>
-         <property name="minimum">
-          <double>-0.010000000000000</double>
-         </property>
-         <property name="maximum">
-          <double>1.000000000000000</double>
-         </property>
-         <property name="singleStep">
-          <double>0.010000000000000</double>
-         </property>
-         <property name="value">
-          <double>0.000000000000000</double>
-         </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>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>100</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="specialValueText">
-          <string>estimated </string>
-         </property>
-         <property name="minimum">
-          <number>1</number>
-         </property>
-         <property name="maximum">
-          <number>990000</number>
-         </property>
-         <property name="value">
-          <number>4</number>
-         </property>
-        </widget>
-       </item>
-       <item row="6" column="1">
-        <widget class="QSpinBox" name="gammaSpinBox">
-         <property name="minimumSize">
-          <size>
-           <width>100</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="specialValueText">
-          <string>estimated </string>
-         </property>
-         <property name="minimum">
-          <number>-1</number>
-         </property>
-         <property name="maximum">
-          <number>990000</number>
-         </property>
-         <property name="value">
-          <number>0</number>
-         </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>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="branchSupport">
-      <attribute name="title">
-       <string>Branch Support</string>
-      </attribute>
-      <layout class="QFormLayout" name="formLayout_2">
-       <property name="sizeConstraint">
-        <enum>QLayout::SetMinAndMaxSize</enum>
-       </property>
-       <property name="fieldGrowthPolicy">
-        <enum>QFormLayout::ExpandingFieldsGrow</enum>
-       </property>
-       <item row="0" column="0">
-        <widget class="QCheckBox" name="fastMethodCheckbox">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Minimum" vsizetype="MinimumExpanding">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Use fast likelihood-based method</string>
-         </property>
-         <property name="checked">
-          <bool>true</bool>
-         </property>
-         <property name="autoRepeat">
-          <bool>false</bool>
-         </property>
-         <property name="autoExclusive">
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="1">
-        <widget class="QComboBox" name="fastMethodCombo">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="0">
-        <widget class="QCheckBox" name="bootstrapCheckBox">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Minimum" vsizetype="Expanding">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="text">
-          <string>Perform bootstrap</string>
-         </property>
-         <property name="checked">
-          <bool>false</bool>
-         </property>
-         <property name="autoExclusive">
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="1">
-        <widget class="QSpinBox" name="bootstrapSpinBox">
-         <property name="enabled">
-          <bool>false</bool>
-         </property>
-         <property name="toolTip">
-          <string>It is the number of bootstrap replicates.</string>
-         </property>
-         <property name="maximum">
-          <number>990000</number>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="treeSearching">
-      <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>
-       <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>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>180</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>
-        </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>
-       </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>
-       </item>
-       <item row="2" column="1">
-        <widget class="QSpinBox" name="treeNumbersSpinBox">
-         <property name="enabled">
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-       <item row="3" column="0">
-        <widget class="QCheckBox" name="optTopologyCheckbox">
-         <property name="text">
-          <string>Optimise topology</string>
-         </property>
-         <property name="checked">
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-       <item row="4" column="0">
-        <widget class="QCheckBox" name="optBranchCheckbox">
-         <property name="text">
-          <string>Optimise branch lengths</string>
-         </property>
-         <property name="checked">
-          <bool>true</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>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="displayOptionsTab">
-      <attribute name="title">
-       <string>Display Options</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_2">
-       <property name="sizeConstraint">
-        <enum>QLayout::SetMinAndMaxSize</enum>
-       </property>
-       <item>
-        <widget class="U2::PhyTreeDisplayOptionsWidget" name="displayOptions" native="true"/>
-       </item>
-       <item>
-        <spacer name="verticalSpacer">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeType">
-          <enum>QSizePolicy::MinimumExpanding</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>0</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>U2::PhyTreeDisplayOptionsWidget</class>
-   <extends>QWidget</extends>
-   <header location="global">U2View/PhyTreeDisplayOptionsWidget.h</header>
-   <container>1</container>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins/external_tool_support/src/ui/TCoffeeSupportRunDialog.ui b/src/plugins/external_tool_support/src/ui/TCoffeeSupportRunDialog.ui
deleted file mode 100644
index 89c2dd0..0000000
--- a/src/plugins/external_tool_support/src/ui/TCoffeeSupportRunDialog.ui
+++ /dev/null
@@ -1,252 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>TCoffeeSupportRunDialog</class>
- <widget class="QDialog" name="TCoffeeSupportRunDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>450</width>
-    <height>232</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>450</width>
-    <height>0</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>Align with T-Coffee</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
-   <item>
-    <layout class="QVBoxLayout" name="verticalLayout">
-     <item>
-      <widget class="QGroupBox" name="inputGroupBox">
-       <property name="title">
-        <string/>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_3">
-        <item row="0" column="0">
-         <layout class="QGridLayout" name="gridLayout_2">
-          <item row="0" column="0">
-           <widget class="QLabel" name="label">
-            <property name="text">
-             <string>Input file</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <widget class="QLineEdit" name="inputFileLineEdit"/>
-          </item>
-          <item row="0" column="2">
-           <widget class="QToolButton" name="inputFilePathButton">
-            <property name="text">
-             <string>...</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QLabel" name="label_2">
-            <property name="text">
-             <string>Output file</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1">
-           <widget class="QLineEdit" name="outputFileLineEdit"/>
-          </item>
-          <item row="1" column="2">
-           <widget class="QToolButton" name="outputFilePathButton">
-            <property name="text">
-             <string>...</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item>
-      <widget class="QGroupBox" name="groupBox">
-       <property name="title">
-        <string>Advanced options</string>
-       </property>
-       <layout class="QGridLayout" name="gridLayout_4">
-        <item row="0" column="0">
-         <layout class="QGridLayout" name="gridLayout">
-          <item row="0" column="0">
-           <widget class="QCheckBox" name="gapOpenCheckBox">
-            <property name="text">
-             <string>Gap opening penalty</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1">
-           <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>
-          <item row="0" column="2">
-           <widget class="QSpinBox" name="gapOpenSpinBox">
-            <property name="enabled">
-             <bool>false</bool>
-            </property>
-            <property name="minimum">
-             <number>-10000</number>
-            </property>
-            <property name="maximum">
-             <number>0</number>
-            </property>
-            <property name="singleStep">
-             <number>50</number>
-            </property>
-            <property name="value">
-             <number>-50</number>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
-           <widget class="QCheckBox" name="gapExtCheckBox">
-            <property name="text">
-             <string>Gap extension penalty</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1">
-           <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="1" column="2">
-           <widget class="QSpinBox" name="gapExtSpinBox">
-            <property name="enabled">
-             <bool>false</bool>
-            </property>
-            <property name="minimum">
-             <number>-5000</number>
-            </property>
-            <property name="maximum">
-             <number>5000</number>
-            </property>
-            <property name="singleStep">
-             <number>10</number>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="0">
-           <widget class="QCheckBox" name="maxNumberIterRefinementCheckBox">
-            <property name="text">
-             <string>Number of iterations</string>
-            </property>
-           </widget>
-          </item>
-          <item row="2" column="1">
-           <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>
-          <item row="2" column="2">
-           <widget class="QSpinBox" name="maxNumberIterRefinementSpinBox">
-            <property name="enabled">
-             <bool>false</bool>
-            </property>
-            <property name="maximum">
-             <number>1000</number>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </widget>
-     </item>
-    </layout>
-   </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>maxNumberIterRefinementCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>maxNumberIterRefinementSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>160</x>
-     <y>110</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>356</x>
-     <y>110</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>gapOpenCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>gapOpenSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>160</x>
-     <y>48</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>356</x>
-     <y>48</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>gapExtCheckBox</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>gapExtSpinBox</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>160</x>
-     <y>79</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>356</x>
-     <y>79</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.cpp b/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.cpp
index 7c2de85..c87ba1d 100644
--- a/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.cpp
+++ b/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.cpp
@@ -90,6 +90,12 @@ void BaseShortReadsAlignerWorker::init() {
     inPairedChannel = ports.value(IN_PORT_DESCR_PAIRED);
     output = ports.value(OUT_PORT_DESCR);
     pairedReadsInput = getValue<QString>(LIBRARY) == "Paired-end";
+    readsFetcher = DatasetFetcher(this, inChannel, context);
+    pairedReadsFetcher = DatasetFetcher(this, inPairedChannel, context);
+
+    // Aligners output data keep context (e.g. dataset info) of upstream reads
+    output->addComplement(inChannel);
+    inChannel->addComplement(output);
 }
 
 DnaAssemblyToRefTaskSettings BaseShortReadsAlignerWorker::getSettings(U2OpStatus &os) {
@@ -123,45 +129,42 @@ DnaAssemblyToRefTaskSettings BaseShortReadsAlignerWorker::getSettings(U2OpStatus
 }
 
 Task *BaseShortReadsAlignerWorker::tick() {
-    bool pairedReadsInput = getValue<QString>(LIBRARY) == "Paired-end";
-
-    bool bothData = inChannel->hasMessage() && inPairedChannel->hasMessage();
+    readsFetcher.processInputMessage();
+    if (pairedReadsInput) {
+        pairedReadsFetcher.processInputMessage();
+    }
 
-    if ((!pairedReadsInput && inChannel->hasMessage()) || (pairedReadsInput && bothData)) {
+    if (isReadyToRun()) {
         U2OpStatus2Log os;
-
-        Message m = getMessageAndSetupScriptValues(inChannel);
-        QVariantMap data = m.getData().toMap();
-
         DnaAssemblyToRefTaskSettings settings = getSettings(os);
         if (os.hasError()) {
             return new FailTask(os.getError());
         }
+        settings.pairedReads = pairedReadsInput;
 
-        QString readsUrl = data[READS_URL_SLOT_ID].toString();
-
-        if(pairedReadsInput){
-            //paired
-            Message m2 = getMessageAndSetupScriptValues(inPairedChannel);
-            QVariantMap data2 = m2.getData().toMap();
-
-            QString readsPairedUrl = data2[READS_PAIRED_URL_SLOT_ID].toString();
-            settings.shortReadSets.append(ShortReadSet(readsUrl, ShortReadSet::PairedEndReads, ShortReadSet::UpstreamMate));
-            settings.shortReadSets.append(ShortReadSet(readsPairedUrl, ShortReadSet::PairedEndReads, ShortReadSet::DownstreamMate));
-            settings.pairedReads = true;
-        }else {
-            //single
-            settings.shortReadSets.append(ShortReadSet(readsUrl, ShortReadSet::SingleEndReads, ShortReadSet::UpstreamMate));
-            settings.pairedReads = false;
+        if (pairedReadsInput) {
+            settings.shortReadSets << toUrls(readsFetcher.takeFullDataset(), READS_URL_SLOT_ID, ShortReadSet::PairedEndReads, ShortReadSet::UpstreamMate);
+            settings.shortReadSets << toUrls(pairedReadsFetcher.takeFullDataset(), READS_PAIRED_URL_SLOT_ID, ShortReadSet::PairedEndReads, ShortReadSet::DownstreamMate);
+        } else {
+            settings.shortReadSets << toUrls(readsFetcher.takeFullDataset(), READS_URL_SLOT_ID, ShortReadSet::SingleEndReads, ShortReadSet::UpstreamMate);
         }
 
         DnaAssemblyToReferenceTask* t = getTask(settings);
         connect(t, SIGNAL(si_stateChanged()), SLOT(sl_taskFinished()));
         return t;
-    }else if (inChannel->isEnded()) {
+    }
+
+    if (dataFinished()) {
         setDone();
         output->setEnded();
     }
+
+    if (pairedReadsInput) {
+        const QString error = checkPairedReads();
+        if (!error.isEmpty()) {
+            return new FailTask(error);
+        }
+    }
     return NULL;
 }
 
@@ -207,11 +210,37 @@ void BaseShortReadsAlignerWorker::sl_taskFinished() {
     output->put(Message(output->getBusType(), data));
 
     context->getMonitor()->addOutputFile(url, getActor()->getId());
+}
 
-    if (inChannel->isEnded() && !inChannel->hasMessage()) {
-        setDone();
-        output->setEnded();
+QList<ShortReadSet> BaseShortReadsAlignerWorker::toUrls(const QList<Message> &messages, const QString &urlSlotId, ShortReadSet::LibraryType libType, ShortReadSet::MateOrder order) const {
+    QList<ShortReadSet> result;
+    foreach (const Message &message, messages) {
+        const QVariantMap data = message.getData().toMap();
+        if (data.contains(urlSlotId)) {
+            const QString url = data.value(urlSlotId).value<QString>();
+            result << ShortReadSet(url, libType, order);
+        }
     }
+    return result;
+}
+
+bool BaseShortReadsAlignerWorker::isReadyToRun() const {
+    return readsFetcher.hasFullDataset() && (!pairedReadsInput || pairedReadsFetcher.hasFullDataset());
+}
+
+bool BaseShortReadsAlignerWorker::dataFinished() const {
+    return readsFetcher.isDone() && (!pairedReadsInput || pairedReadsFetcher.isDone());
+}
+
+QString BaseShortReadsAlignerWorker::checkPairedReads() const {
+    CHECK(pairedReadsInput, "");
+    if (readsFetcher.isDone() && pairedReadsFetcher.hasFullDataset()) {
+        return tr("Not enough upstream reads datasets");
+    }
+    if (pairedReadsFetcher.isDone() && readsFetcher.hasFullDataset()) {
+        return tr("Not enough downstream reads datasets");
+    }
+    return "";
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -309,7 +338,7 @@ QList<PortDescriptor*> BaseShortReadsAlignerWorkerFactory::getPortDescriptors()
     DataTypePtr inTypeSet(new MapDataType(IN_TYPE_ID, inTypeMap));
     DataTypePtr inTypeSetPaired(new MapDataType(IN_TYPE_ID, inTypeMapPaired));
     PortDescriptor* readsDescriptor = new PortDescriptor(inPortDesc, inTypeSet, true);
-    PortDescriptor* readsDescriptor2 = new PortDescriptor(inPortDescPaired, inTypeSetPaired, true);
+    PortDescriptor* readsDescriptor2 = new PortDescriptor(inPortDescPaired, inTypeSetPaired, true, false, IntegralBusPort::BLIND_INPUT);
     portDescs << readsDescriptor2;
     portDescs << readsDescriptor;
 
@@ -354,6 +383,5 @@ QString ShortReadsAlignerPrompter::composeRichDoc() {
     return res;
 }
 
-
 } //LocalWorkflow
 } //U2
diff --git a/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.h b/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.h
index 9cd2f5f..0d9e693 100644
--- a/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.h
+++ b/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.h
@@ -22,10 +22,11 @@
 #ifndef _U2_BASE_SHORT_READS_ALIGNER_WORKER_H_
 #define _U2_BASE_SHORT_READS_ALIGNER_WORKER_H_
 
+#include <U2Lang/DatasetFetcher.h>
 #include <U2Lang/LocalDomain.h>
 #include <U2Lang/WorkflowUtils.h>
 #include <U2Core/GUrl.h>
-
+#include <U2Algorithm/DnaAssemblyTask.h>
 
 namespace U2 {
 
@@ -53,7 +54,10 @@ protected:
     virtual QString getDefaultFileName() const = 0;
     virtual QString getBaseSubdir() const = 0;
     virtual DnaAssemblyToReferenceTask* getTask(const DnaAssemblyToRefTaskSettings &settings) const = 0;
-
+    QList<ShortReadSet> toUrls(const QList<Message> &messages, const QString &urlSlotId, ShortReadSet::LibraryType libType, ShortReadSet::MateOrder order) const;
+    bool isReadyToRun() const;
+    bool dataFinished() const;
+    QString checkPairedReads() const;
 
 protected:
     QString      algName;
@@ -62,6 +66,9 @@ protected:
     IntegralBus *output;
     bool pairedReadsInput;
 
+    DatasetFetcher readsFetcher;
+    DatasetFetcher pairedReadsFetcher;
+
 public slots:
     void sl_taskFinished();
 };
diff --git a/src/plugins/external_tool_support/src/ui/BlastAllSupportDialog.ui b/src/plugins/external_tool_support/src/utils/BlastAllSupportDialog.ui
similarity index 100%
rename from src/plugins/external_tool_support/src/ui/BlastAllSupportDialog.ui
rename to src/plugins/external_tool_support/src/utils/BlastAllSupportDialog.ui
diff --git a/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidget.ui b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidget.ui
new file mode 100644
index 0000000..344fdea
--- /dev/null
+++ b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidget.ui
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>BlastDBSelectorWidget</class>
+ <widget class="QWidget" name="BlastDBSelectorWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>293</width>
+    <height>68</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <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">
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QLabel" name="label_14">
+       <property name="text">
+        <string>Database path:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="databasePathLineEdit"/>
+     </item>
+    </layout>
+   </item>
+   <item row="0" column="1" rowspan="2">
+    <widget class="QPushButton" name="selectDatabasePushButton">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>90</width>
+       <height>0</height>
+      </size>
+     </property>
+     <property name="text">
+      <string>Select
+a database file</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <item>
+      <widget class="QLabel" name="label_5">
+       <property name="text">
+        <string>Base name for BLAST DB files:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLineEdit" name="baseNameLineEdit"/>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.h b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.h
index 302c231..7d907a0 100644
--- a/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.h
+++ b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_BLAST_DBSELECTOR_WIDGET_CONTROLLER_H_
 #define _U2_BLAST_DBSELECTOR_WIDGET_CONTROLLER_H_
 
-#include <ui/ui_BlastDBSelectorWidget.h>
+#include <ui_BlastDBSelectorWidget.h>
 
 namespace U2 {
 
diff --git a/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.cpp b/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.cpp
index ab6c495..e04a55a 100644
--- a/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.cpp
+++ b/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.cpp
@@ -60,7 +60,7 @@ BlastRunCommonDialog::BlastRunCommonDialog(QWidget *parent, BlastType blastType,
 : QDialog(parent), ca_c(NULL), useCompValues(useCompValues), compValues(compValues)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467794");
+    new HelpButton(this, buttonBox, "17470727");
     buttonBox->button(QDialogButtonBox::Yes)->setText(tr("Restore to default"));
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.h b/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.h
index 58b3238..5a96bbe 100644
--- a/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.h
+++ b/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.h
@@ -25,7 +25,7 @@
 #include <QDialog>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Gui/DialogUtils.h>
-#include <ui/ui_BlastAllSupportDialog.h>
+#include <ui_BlastAllSupportDialog.h>
 #include <U2Gui/CreateAnnotationWidgetController.h>
 #include "BlastTaskSettings.h"
 #include "BlastDBSelectorWidgetController.h"
diff --git a/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.cpp b/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.cpp
index bf819de..ef41bc4 100644
--- a/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.cpp
+++ b/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.cpp
@@ -134,8 +134,10 @@ void ExternalToolJustValidateTask::run() {
             return;
         }
 
-        while (!externalToolProcess->waitForFinished(1000)) {
-            if (isCanceled()) {
+        int elapsedTime = 0;
+        while (!externalToolProcess->waitForFinished(CHECK_PERIOD_MS)) {
+            elapsedTime += CHECK_PERIOD_MS;
+            if (isCanceled() || elapsedTime >= TIMEOUT_MS) {
                 cancelProcess();
             }
         }
diff --git a/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.h b/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.h
index cbeb51f..35a46a1 100644
--- a/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.h
+++ b/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.h
@@ -81,6 +81,8 @@ private:
     QString     lastOutLine;
 
     QProcess*   externalToolProcess;
+    static const int CHECK_PERIOD_MS = 1000;
+    static const int TIMEOUT_MS = 30000;
 };
 
 class ExternalToolSearchAndValidateTask : public ExternalToolValidateTask {
diff --git a/src/plugins/external_tool_support/transl/english.ts b/src/plugins/external_tool_support/transl/english.ts
index bc884f4..cbf5bfb 100644
--- a/src/plugins/external_tool_support/transl/english.ts
+++ b/src/plugins/external_tool_support/transl/english.ts
@@ -4,78 +4,78 @@
 <context>
     <name>BlastAllSupportDialog</name>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="20"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="20"/>
         <source>Request to Local BLAST Database</source>
         <translation>Request to Local BLAST Database</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="42"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="42"/>
         <source>General options</source>
         <translation>General options</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="53"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="53"/>
         <source>Select search:</source>
         <translation>Select search:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="61"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="61"/>
         <source>blastn</source>
         <extracomment>qwe</extracomment>
         <translation>blastn</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="66"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="66"/>
         <source>blastp</source>
         <translation>blastp</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="76"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="76"/>
         <source>blastx</source>
         <translation>blastx</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="81"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="81"/>
         <source>tblastn</source>
         <translation>tblastn</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="86"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="86"/>
         <source>tblastx</source>
         <translation>tblastx</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="94"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="94"/>
         <source>Search for short, nearly exact matches</source>
         <translation>Search for short, nearly exact matches</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="101"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="101"/>
         <source>Expectation value </source>
         <translation>Expectation value </translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="108"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="108"/>
         <source>Megablast</source>
         <translation>Megablast</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="125"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="125"/>
         <source>Off</source>
         <translation>Off</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="159"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="159"/>
         <source>Both strands</source>
         <translation>Both strands</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="169"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="169"/>
         <source>Direct</source>
         <translation>Direct</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="176"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="176"/>
         <source>Complement</source>
         <translation>Complement</translation>
     </message>
@@ -84,82 +84,82 @@
         <translation type="vanished">Base name for BLAST DB files:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="230"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="230"/>
         <source>Number of CPUs being used</source>
         <translation>Number of CPUs being used</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="268"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="268"/>
         <source>Advanced options</source>
         <translation>Advanced options</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="391"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="391"/>
         <source>Word size</source>
         <translation>Word size</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="528"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="528"/>
         <source>Gap costs</source>
         <translation>Gap costs</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="307"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="307"/>
         <source>Match scores</source>
         <translation>Match scores</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="337"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="337"/>
         <source>1 -3</source>
         <translation>1 -3</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="342"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="342"/>
         <source>1 -4</source>
         <translation>1 -4</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="347"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="347"/>
         <source>1 -2</source>
         <translation>1 -2</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="352"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="352"/>
         <source>1 -1</source>
         <translation>1 -1</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="357"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="357"/>
         <source>2 -7</source>
         <translation>2 -7</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="362"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="362"/>
         <source>2 -5</source>
         <translation>2 -5</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="367"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="367"/>
         <source>2 -3</source>
         <translation>2 -3</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="372"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="372"/>
         <source>4 -5</source>
         <translation>4 -5</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="377"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="377"/>
         <source>5 -4</source>
         <translation>5 -4</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="404"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="404"/>
         <source>Matrix</source>
         <translation>Matrix</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="71"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="71"/>
         <source>gpu-blastp</source>
         <translation>gpu-blastp</translation>
     </message>
@@ -174,162 +174,162 @@ a database file</source>
 a database file</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="412"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="412"/>
         <source>BLOSUM62</source>
         <translation>BLOSUM62</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="417"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="417"/>
         <source>BLOSUM45</source>
         <translation>BLOSUM45</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="422"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="422"/>
         <source>BLOSUM80</source>
         <translation>BLOSUM80</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="427"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="427"/>
         <source>PAM30</source>
         <translation>PAM30</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="432"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="432"/>
         <source>PAM70</source>
         <translation>PAM70</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="320"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="320"/>
         <source>Service</source>
         <translation>Service</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="115"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="115"/>
         <source>Max hits:</source>
         <translation>Max hits:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="283"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="283"/>
         <source>plain</source>
         <translation>plain</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="288"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="288"/>
         <source>psi</source>
         <translation>psi</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="293"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="293"/>
         <source>phi</source>
         <translation>phi</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="443"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="443"/>
         <source>PHI pattern</source>
         <translation>PHI pattern</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="483"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="483"/>
         <source>Threshold for extending hits</source>
         <translation>Threshold for extending hits</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="486"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="486"/>
         <source>Threshold</source>
         <translation>Threshold</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="535"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="535"/>
         <source>Composition-based statistics</source>
         <translation>Composition-based statistics</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="543"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="543"/>
         <source>D or d: default (equivalent to 2 )</source>
         <translation>D or d: default (equivalent to 2 )</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="548"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="548"/>
         <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/ui/BlastAllSupportDialog.ui" line="553"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="553"/>
         <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/ui/BlastAllSupportDialog.ui" line="558"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="558"/>
         <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/ui/BlastAllSupportDialog.ui" line="563"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="563"/>
         <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/ui/BlastAllSupportDialog.ui" line="575"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="575"/>
         <source>Filters</source>
         <translation>Filters</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="581"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="581"/>
         <source>Low complexity filter</source>
         <translation>Low complexity filter</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="588"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="588"/>
         <source>Human repeats filter</source>
         <translation>Human repeats filter</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="598"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="598"/>
         <source>Masks</source>
         <translation>Masks</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="604"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="604"/>
         <source>Mask for lookup table only</source>
         <translation>Mask for lookup table only</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="614"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="614"/>
         <source>Mask lower case letters</source>
         <translation>Mask lower case letters</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="640"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="640"/>
         <source>Extension options</source>
         <translation>Extension options</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="648"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="648"/>
         <source>X dropoff value (in bits)</source>
         <translation>X dropoff value (in bits)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="654"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="654"/>
         <source>For gapped alignment</source>
         <translation>For gapped alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="668"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="668"/>
         <source>For ungapped extensions</source>
         <translation>For ungapped extensions</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="675"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="675"/>
         <source>For final gapped alignment</source>
         <translation>For final gapped alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="699"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="699"/>
         <source>Multiple Hits window size</source>
         <translation>Multiple Hits Window Size</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="711"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="711"/>
         <source>Perform gapped alignment</source>
         <translation>Perform gapped alignment</translation>
     </message>
@@ -337,22 +337,22 @@ a database file</translation>
 <context>
     <name>BlastDBCmdDialog</name>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="26"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="26"/>
         <source>Fetch Sequence from BLAST Database</source>
         <translation>Fetch Sequence from BLAST Database</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="44"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="44"/>
         <source>Entery query ID:</source>
         <translation>Enter query ID:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="54"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="54"/>
         <source>Select database :</source>
         <translation>Select database :</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="104"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="104"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -369,12 +369,12 @@ a database file</translation>
         <translation type="vanished">protein</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="88"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="88"/>
         <source>Output path:</source>
         <translation>Output path:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="116"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="116"/>
         <source>Add to project</source>
         <translation>Add to project</translation>
     </message>
@@ -382,24 +382,24 @@ a database file</translation>
 <context>
     <name>BlastDBSelectorWidget</name>
     <message>
-        <location filename="../src/ui/BlastDBSelectorWidget.ui" line="14"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="14"/>
         <source>Form</source>
         <translation type="unfinished">Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBSelectorWidget.ui" line="34"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="34"/>
         <source>Database path:</source>
         <translation type="unfinished">Database path:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBSelectorWidget.ui" line="58"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="58"/>
         <source>Select
 a database file</source>
         <translation type="unfinished">Select
 a database file</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBSelectorWidget.ui" line="68"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="68"/>
         <source>Base name for BLAST DB files:</source>
         <translation type="unfinished">Base name for BLAST DB files:</translation>
     </message>
@@ -407,159 +407,159 @@ a database file</translation>
 <context>
     <name>Bowtie2Settings</name>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="41"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="41"/>
         <source>Parameters</source>
         <translation>Parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="60"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="76"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="60"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="76"/>
         <source><html><head/><body><p><span style=" font-size:8pt;">By default, Bowtie2 performs end-to-end read alignment. That is, it searches for alignments involving all of the read characters. This is also called an &quot;untrimmed&quot; or &quot;unclipped&quot; alignment.</span></p><p><span style=" font-size:8pt;">When the --local option is specified, Bowtie2 performs local read alignment. In  [...]
         <translation><html><head/><body><p><span style=" font-size:8pt;">By default, Bowtie2 performs end-to-end read alignment. That is, it searches for alignments involving all of the read characters. This is also called an &quot;untrimmed&quot; or &quot;unclipped&quot; alignment.</span></p><p><span style=" font-size:8pt;">When the --local option is specified, Bowtie2 performs local read alignment [...]
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="63"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="63"/>
         <source>Mode</source>
         <translation>Mode</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="86"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="86"/>
         <source>--end-to-end</source>
         <translation>--end-to-end</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="91"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="91"/>
         <source>--local</source>
         <translation>--local</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="106"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="174"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="106"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="174"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">&quot;Pads&quot; dynamic programming problems by specified number of columns on either side to allow gaps.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">&quot;Pads&quot; dynamic programming problems by specified number of columns on either side to allow gaps.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="109"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="109"/>
         <source>Add columns to allow gaps (--dpad)</source>
         <translation>Add columns to allow gaps (--dpad)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="119"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="187"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="119"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="187"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">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.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">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.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="132"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="197"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="132"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="197"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">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.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">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.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="148"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="252"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="148"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="252"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">Disallow gaps within specified number of positions of the beginning or end of the read.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Disallow gaps within specified number of positions of the beginning or end of the read.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="161"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="229"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="161"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="229"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">Use specified value as the seed for pseudo-random number generator.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Use specified value as the seed for pseudo-random number generator.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="164"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="164"/>
         <source>Seed (--seed)</source>
         <translation>Seed (--seed)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="190"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="190"/>
         <source>Number of mismatches</source>
         <translation>Number of mismatches</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="200"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="200"/>
         <source>Threads</source>
         <translation>Threads</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="210"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="239"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="210"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="239"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">Sets the length of the seed substrings to align. Smaller values make alignment slower but more senstive.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Sets the length of the seed substrings to align. Smaller values make alignment slower but more senstive.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="242"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="242"/>
         <source>Seed length (--L)</source>
         <translation>Seed length (--L)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="255"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="255"/>
         <source>Disallow gaps (--gbar)</source>
         <translation>Disallow gaps (--gbar)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="284"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="284"/>
         <source>Flags</source>
         <translation>Flags</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="296"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="296"/>
         <source><html><head/><body><p><span style=" font-size:8pt;">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 &quot;mixed mode.&quot; To disable mixed mode, set this option.</span></p><p><span style=" font-size:8pt;">Bowtie2 runs a little faster in the mixed mode, but will only consider alignme [...]
         <translation><html><head/><body><p><span style=" font-size:8pt;">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 &quot;mixed mode.&quot; To disable mixed mode, set this option.</span></p><p><span style=" font-size:8pt;">Bowtie2 runs a little faster in the mixed mode, but will only consider al [...]
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="299"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="299"/>
         <source>No unpaired alignments (--no-mixed)</source>
         <translation>No unpaired alignments (--no-mixed)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="306"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="306"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">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.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">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.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="309"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="309"/>
         <source>No discordant alignments (--no-discordant)</source>
         <translation>No discordant alignments (--no-discordant)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="316"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="316"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">If this option is selected, Bowtie2 will not attempt to align against the forward reference strand.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">If this option is selected, Bowtie2 will not attempt to align against the forward reference strand.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="319"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="319"/>
         <source>No forward orientation (--nofw)</source>
         <translation>No forward orientation (--nofw)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="326"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="326"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">If this option is selected, Bowtie2 will not attempt to align against the reverse-complement reference strand.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">If this option is selected, Bowtie2 will not attempt to align against the reverse-complement reference strand.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="329"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="329"/>
         <source>No reverse-complement orientation (--norc)</source>
         <translation>No reverse-complement orientation (--norc)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="336"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="336"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">If one mate alignment overlaps the other at all, consider that to be non-concordant. Default: mates can overlap in a concordant alignment.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">If one mate alignment overlaps the other at all, consider that to be non-concordant. Default: mates can overlap in a concordant alignment.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="339"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="339"/>
         <source>No overlapping mates (--no-overlap)</source>
         <translation>No overlapping mates (--no-overlap)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="346"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="346"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">If one mate alignment contains the other, consider that to be non-concordant. Default: a mate can contain the other in a concordant alignment.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">If one mate alignment contains the other, consider that to be non-concordant. Default: a mate can contain the other in a concordant alignment.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="349"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="349"/>
         <source>No mates containing one another (--no-contain)</source>
         <translation>No mates containing one another (--no-contain)</translation>
     </message>
@@ -567,12 +567,12 @@ a database file</translation>
 <context>
     <name>BowtieBuildSettings</name>
     <message>
-        <location filename="../src/ui/BowtieBuildSettings.ui" line="20"/>
+        <location filename="../src/bowtie/BowtieBuildSettings.ui" line="20"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieBuildSettings.ui" line="29"/>
+        <location filename="../src/bowtie/BowtieBuildSettings.ui" line="29"/>
         <source>Colorspace</source>
         <translation>Colorspace</translation>
     </message>
@@ -580,12 +580,12 @@ a database file</translation>
 <context>
     <name>BowtieSettings</name>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="41"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="41"/>
         <source>Parameters</source>
         <translation>Parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="110"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="110"/>
         <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; }
@@ -606,12 +606,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;">rounding can be disabled with --nomaqround.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="121"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="121"/>
         <source>Maq error (--maqerr)</source>
         <translation>Maq error (--maqerr)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="144"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="144"/>
         <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; }
@@ -628,7 +628,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;">The lowest permitted setting is 5 and the default is 28. bowtie is faster for larger values of -l.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="176"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="176"/>
         <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; }
@@ -653,7 +653,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;">Default: 250.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="215"/>
+        <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. 
@@ -668,17 +668,17 @@ try adjusting this parameter up to dedicate more memory to the descriptors.
 Default: 64.</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="246"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="246"/>
         <source>Use <int> as the seed for pseudo-random number generator</source>
         <translation>Use <int> as the seed for pseudo-random number generator</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="60"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="60"/>
         <source>Mode:  </source>
         <translation>Mode:  </translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="67"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="67"/>
         <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; }
@@ -699,82 +699,82 @@ 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;">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.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="82"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="82"/>
         <source>-n mode</source>
         <translation>-n mode</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="87"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="87"/>
         <source>-v mode</source>
         <translation>-v mode</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="153"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="153"/>
         <source>Seed length (--seedlen)</source>
         <translation>Seed length (--seedlen)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="189"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="189"/>
         <source>Maximum of backtracks (--maxbts)</source>
         <translation>Maximum of backtracks (--maxbts)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="223"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="223"/>
         <source>Descriptors memory usage (--chunkmbs)</source>
         <translation>Descriptors memory usage (--chunkmbs)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="249"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="249"/>
         <source>Seed (--seed)</source>
         <translation>Seed (--seed)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="266"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="266"/>
         <source>Threads</source>
         <translation>Threads</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="300"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="300"/>
         <source>Flags</source>
         <translation>Flags</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="312"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="312"/>
         <source>Colorspace (--color)</source>
         <translation>Colorspace (--color)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="329"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="329"/>
         <source>No Maq rounding (--nomaqround)</source>
         <translation>No Maq rounding (--nomaqround)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="339"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="339"/>
         <source>No forward orientation (--nofw)</source>
         <translation>No forward orientation (--nofw)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="349"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="349"/>
         <source>No reverse-complement orientation (--norc)</source>
         <translation>No reverse-complement orientation (--norc)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="369"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="369"/>
         <source>Try as hard (--tryhard)</source>
         <translation>Try as hard (--tryhard)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="383"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="383"/>
         <source>Best alignments (--best)</source>
         <translation>Best alignments (--best)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="393"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="393"/>
         <source>All alignments (--all)</source>
         <translation>All alignments (--all)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="319"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="319"/>
         <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; }
@@ -793,17 +793,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;">By default, bowtie also rounds this way. --nomaqround prevents this rounding in bowtie.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="336"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="336"/>
         <source>If --nofw is specified, bowtie will not attempt to align against the forward reference strand.</source>
         <translation>If --nofw is specified, bowtie will not attempt to align against the forward reference strand.</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="346"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="346"/>
         <source>If --norc is specified, bowtie will not attempt to align against the reverse-complement reference strand.</source>
         <translation>If --norc is specified, bowtie will not attempt to align against the reverse-complement reference strand.</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="356"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="356"/>
         <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; }
@@ -828,7 +828,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;">or (c) not many reads have valid alignments.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="376"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="376"/>
         <source>Make Bowtie guarantee that reported singleton alignments are "best" in terms of stratum
 (i.e. number of mismatches, or mismatches in the seed in the case of -n mode)
 and in terms of the quality values at the mismatched position(s).
@@ -841,7 +841,7 @@ bowtie is somewhat slower when --best is specified.
 </translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="390"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="390"/>
         <source>Report all valid alignments per read or pair.</source>
         <translation>Report all valid alignments per read or pair.</translation>
     </message>
@@ -849,27 +849,32 @@ bowtie is somewhat slower when --best is specified.
 <context>
     <name>BwaBuildSettings</name>
     <message>
-        <location filename="../src/ui/BwaBuildSettings.ui" line="20"/>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="20"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaBuildSettings.ui" line="54"/>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="63"/>
         <source>Index algorithm (-a)</source>
         <translation>Index algorithm (-a)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaBuildSettings.ui" line="68"/>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="77"/>
+        <source>autodetect</source>
+        <translation type="unfinished">autodetect</translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="82"/>
         <source>bwtsw</source>
         <translation>bwtsw</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaBuildSettings.ui" line="73"/>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="87"/>
         <source>div</source>
         <translation>div</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaBuildSettings.ui" line="78"/>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="92"/>
         <source>is</source>
         <translation>is</translation>
     </message>
@@ -877,212 +882,212 @@ bowtie is somewhat slower when --best is specified.
 <context>
     <name>BwaMemSettings</name>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="20"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="20"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="36"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="36"/>
         <source>Base Options</source>
         <translation>Base Options</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="441"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="441"/>
         <source>Penalty for a mismatch</source>
         <translation>Penalty for a mismatch</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="409"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="409"/>
         <source>Score for a sequence match</source>
         <translation>Score for a sequence match</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="393"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="393"/>
         <source>Score for a match (-A)</source>
         <translation>Score for a match (-A)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="425"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="425"/>
         <source>Mismatch penalty (-B)</source>
         <translation>Mismatch penalty (-B)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="454"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="454"/>
         <source>Gap open penalty (-O)</source>
         <translation>Gap open penalty (-O)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="557"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="557"/>
         <source>Penalty for an unpaired read pair</source>
         <translation>Penalty for an unpaired read pair</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="586"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="586"/>
         <source>Minimum score to output</source>
         <translation>Minimum score to output</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="541"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="541"/>
         <source>Penalty unpaired (-U)</source>
         <translation>Penalty unpaired (-U)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="528"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="528"/>
         <source>Penalty for clipping </source>
         <translation>Penalty for clipping </translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="470"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="470"/>
         <source>Gap open penalty</source>
         <translation>Gap open penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="499"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="499"/>
         <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/ui/BwaMemSettings.ui" line="512"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="512"/>
         <source>Penalty for clipping (-L)</source>
         <translation>Penalty for clipping (-L)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="483"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="483"/>
         <source>Gap extention penalty (-E)</source>
         <translation>Gap extention penalty (-E)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="570"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="570"/>
         <source>Score threshold (-T)</source>
         <translation>Score threshold (-T)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="209"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="209"/>
         <source>Internall seeds length (-r)</source>
         <translation>Internall seeds length (-r)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="107"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="107"/>
         <source>Min seed length (-k)</source>
         <translation>Min seed length (-k)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="69"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="69"/>
         <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/ui/BwaMemSettings.ui" line="56"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="56"/>
         <source>Number of threads</source>
         <translation>Number of threads</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="193"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="193"/>
         <source>Off-diagonal X-dropoff</source>
         <translation>Off-diagonal X-dropoff</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="161"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="161"/>
         <source>Band width for banded alignment</source>
         <translation>Band width for banded alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="145"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="145"/>
         <source>Band width (-w)</source>
         <translation>Band width (-w)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="123"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="123"/>
         <source>Minimum seed length</source>
         <translation>Minimum seed length</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="88"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="88"/>
         <source>Number of threads (-t)</source>
         <translation>Number of threads (-t)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="177"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="177"/>
         <source>Dropoff (-d)</source>
         <translation>Dropoff (-d)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="228"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="228"/>
         <source>Skip seeds threshold (-c)</source>
         <translation>Skip seeds threshold (-c)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="244"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="244"/>
         <source>Skip seeds with more than INT occurrences </source>
         <translation>Skip seeds with more than INT occurrences </translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="266"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="266"/>
         <source>Drop chain threshold (-D)</source>
         <translation>Drop chain threshold (-D)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="282"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="282"/>
         <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/ui/BwaMemSettings.ui" line="308"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="308"/>
         <source>Index algorithm (-a)</source>
         <translation>Index algorithm (-a)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="325"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="325"/>
         <source>autodetect</source>
         <translation>autodetect</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="330"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="330"/>
         <source>bwtsw</source>
         <translation>bwtsw</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="335"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="335"/>
         <source>div</source>
         <translation>div</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="340"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="340"/>
         <source>is</source>
         <translation>is</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="599"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="599"/>
         <source>Rounds of mate rescues (-m)</source>
         <translation>Rounds of mate rescues (-m)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="615"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="615"/>
         <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/ui/BwaMemSettings.ui" line="348"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="348"/>
         <source>Skip mate rescue</source>
         <translation>Skip mate rescue</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="351"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="351"/>
         <source>Skip mate rescue (-S)</source>
         <translation>Skip mate rescue (-S)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="358"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="358"/>
         <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/ui/BwaMemSettings.ui" line="361"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="361"/>
         <source>Skip pairing (-P)</source>
         <translation>Skip pairing (-P)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="633"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="633"/>
         <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; }
@@ -1098,137 +1103,137 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>BwaSettings</name>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="20"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="20"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="135"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="135"/>
         <source>  Best hits (-R)</source>
         <translation>Best hits (-R)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="336"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="336"/>
         <source>Max gap extensions (-e)</source>
         <translation>Max gap extensions (-e)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="346"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="346"/>
         <source>Indel offset (-i)</source>
         <translation>Indel offset (-i)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="263"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="263"/>
         <source>Max long deletion extensions (-d)</source>
         <translation>Max long deletion extensions (-d)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="194"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="194"/>
         <source>Seed length (-l)</source>
         <translation>Seed length (-l)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="482"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="482"/>
         <source>Max seed differences (-k)</source>
         <translation>Max seed differences (-k)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="283"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="283"/>
         <source>Max queue entries (-m)</source>
         <translation>Max queue entries (-m)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="356"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="356"/>
         <source>Enable long gaps</source>
         <translation>Enable long gaps</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="171"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="171"/>
         <source>Missing prob (-n)</source>
         <translation>Missing prob (-n)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="154"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="154"/>
         <source>Max #diff (-n)</source>
         <translation>Max #diff (-n)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="42"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="42"/>
         <source>Long-scaled gap penalty for long deletions (-L)</source>
         <translation>Long-scaled gap penalty for long deletions (-L)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="241"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="241"/>
         <source>Advanced</source>
         <translation>Advanced</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="395"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="395"/>
         <source>Gap open penalty (-O)</source>
         <translation>Gap open penalty (-O)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="303"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="303"/>
         <source>Barcode length (-B)</source>
         <translation>Barcode length (-B)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="435"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="435"/>
         <source>Quality threshold (-q)</source>
         <translation>Quality threshold (-q)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="375"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="375"/>
         <source>Mismatch penalty (-M)</source>
         <translation>Mismatch penalty (-M)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="415"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="415"/>
         <source>Gap extension penalty (-E)</source>
         <translation>Gap extension penalty (-E)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="462"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="462"/>
         <source>Threads (-t)</source>
         <translation>Threads (-t)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="49"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="49"/>
         <source>Non-iterative mode (-N)</source>
         <translation>Non-iterative mode (-N)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="72"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="72"/>
         <source>Max gap opens (-o)</source>
         <translation>Max gap opens (-o)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="30"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="30"/>
         <source>Base Options</source>
         <translation>Base Options</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="85"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="85"/>
         <source>Index algorithm (-a)</source>
         <translation>Index algorithm (-a)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="102"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="102"/>
         <source>autodetect</source>
         <translation>autodetect</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="107"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="107"/>
         <source>bwtsw</source>
         <translation>bwtsw</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="112"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="112"/>
         <source>div</source>
         <translation>div</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="117"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="117"/>
         <source>is</source>
         <translation>is</translation>
     </message>
@@ -1236,107 +1241,107 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>BwaSwSettings</name>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="14"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="30"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="30"/>
         <source>Base Options</source>
         <translation>Base Options</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="288"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="288"/>
         <source>Score threshold (divided by match score) (-T)</source>
         <translation>Score threshold (divided by match score) (-T)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="233"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="233"/>
         <source>Number of threads (-t)</source>
         <translation>Number of threads (-t)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="334"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="334"/>
         <source>Number of seeds to start rev alginment (-N)</source>
         <translation>Number of seeds to start rev alginment (-N)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="311"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="311"/>
         <source>Z-best (-z)</source>
         <translation>Z-best (-z)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="393"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="393"/>
         <source>Prefer hard clipping in SAM output (-H)</source>
         <translation>Prefer hard clipping in SAM output (-H)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="256"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="256"/>
         <source>Size of chunk of reads (-s)</source>
         <translation>Size of chunk of reads (-s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="90"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="90"/>
         <source>Score for a match (-a)</source>
         <translation>Score for a match (-a)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="159"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="159"/>
         <source>Gap extention penalty (-r)</source>
         <translation>Gap extention penalty (-r)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="113"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="113"/>
         <source>Mismatch penalty (-b)</source>
         <translation>Mismatch penalty (-b)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="64"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="64"/>
         <source>autodetect</source>
         <translation>autodetect</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="69"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="69"/>
         <source>bwtsw</source>
         <translation>bwtsw</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="74"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="74"/>
         <source>div</source>
         <translation>div</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="79"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="79"/>
         <source>is</source>
         <translation>is</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="136"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="136"/>
         <source>Gap open penalty (-q)</source>
         <translation>Gap open penalty (-q)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="182"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="182"/>
         <source>Band width (-w)</source>
         <translation>Band width (-w)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="208"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="208"/>
         <source>Index algorithm (-a)</source>
         <translation>Index algorithm (-a)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="380"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="380"/>
         <source>Mask level (-c)</source>
         <translation>Mask level (-c)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="347"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="347"/>
         <source><html><head/><body><p>Number of seed to trigger reverse alignment</p></body></html></source>
         <translation><html><head/><body><p>Number of seed to trigger reverse alignment</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="405"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="405"/>
         <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; }
@@ -1352,22 +1357,22 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>CAP3SupportDialog</name>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="20"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="14"/>
         <source>Contig Assembly with CAP3</source>
         <translation>Contig Assembly with CAP3</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="30"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="27"/>
         <source>Base</source>
         <translation>Base</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="36"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="33"/>
         <source>Input files (long DNA reads to assembly)</source>
         <translation>Input files (long DNA reads to assembly)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="45"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="42"/>
         <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; }
@@ -1382,132 +1387,132 @@ 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;">The quality scores for FASTA sequences can be provided in an additional file. The file must be located in the same folder as the original sequences and have the same name as FASTA file, but another extention: <span style=" font-weight:600; font-style:italic;">.qual</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="57"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="54"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="64"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="61"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="71"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="68"/>
         <source>Remove All</source>
         <translation>Remove All</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="93"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="90"/>
         <source>Result contig</source>
         <translation>Result contig</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="102"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="99"/>
         <source>Path to result contig alignment in ACE format.</source>
         <translation>Path to result contig alignment in ACE format.</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="128"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="125"/>
         <source>Clipping for poor regions</source>
         <translation>Clipping for poor regions</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="134"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="131"/>
         <source>Base quality cutoff for clipping (-c)</source>
         <translation>Base quality cutoff for clipping (-c)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="151"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="148"/>
         <source>Clipping range (-y)</source>
         <translation>Clipping range (-y)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="174"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="171"/>
         <source>Length and percent identity of an overlap</source>
         <translation>Length and percent identity of an overlap</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="180"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="177"/>
         <source>Overlap length cutoff (-o)</source>
         <translation>Overlap length cutoff (-o)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="200"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="197"/>
         <source>Overlap percent identity cutoff (-p)</source>
         <translation>Overlap percent identity cutoff (-p)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="223"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="220"/>
         <source>Quality difference score of an overlap</source>
         <translation>Quality difference score of an overlap</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="229"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="226"/>
         <source>Base quality cutoff for differences (-b)</source>
         <translation>Base quality cutoff for differences (-b)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="259"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="256"/>
         <source>Max qscore sum at differences (-d)</source>
         <translation>Max qscore sum at differences (-d)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="269"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="266"/>
         <source>Other parameters</source>
         <translation>Other parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="275"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="272"/>
         <source>Max number of word matches (-t)</source>
         <translation>Max number of word matches (-t)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="295"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="292"/>
         <source>Band expansion size (-a)</source>
         <translation>Band expansion size (-a)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="318"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="315"/>
         <source>Max gap length in any overlap (-f)</source>
         <translation>Max gap length in any overlap (-f)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="338"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="335"/>
         <source>Assembly reverse reads (-r)</source>
         <translation>Assembly reverse reads (-r)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="364"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="361"/>
         <source>Similarity score of an overlap</source>
         <translation>Similarity score of an overlap</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="370"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="367"/>
         <source>Mismatch score factor (-n)</source>
         <translation>Mismatch score factor (-n)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="390"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="387"/>
         <source>Overlap similarity score cutoff (-s)</source>
         <translation>Overlap similarity score cutoff (-s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="410"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="407"/>
         <source>Gap penalty factor (-g)</source>
         <translation>Gap penalty factor (-g)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="417"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="414"/>
         <source>Match score factor (-m)</source>
         <translation>Match score factor (-m)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="112"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="109"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="122"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="119"/>
         <source>Advanced</source>
         <translation>Advanced</translation>
     </message>
@@ -1515,58 +1520,58 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ClustalOSupportRunDialog</name>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="26"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="26"/>
         <source>Align with Clustal Omega</source>
         <translation>Align with Clustal Omega</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="42"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="42"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="52"/>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="69"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="52"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="69"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="59"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="59"/>
         <source>Output file</source>
         <translation>Output file</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="81"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="81"/>
         <source>Iteration</source>
         <translation>Iteration</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="91"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="91"/>
         <source>Number of iterations</source>
         <translation>Number of iterations</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="137"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="137"/>
         <source>Max number guidetree iterations</source>
         <translation>Max number guidetree iterations</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="180"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="180"/>
         <source>Max number of HMM iterations</source>
         <translation>Max number of HMM iterations</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="217"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="217"/>
         <source>Miscellaneous</source>
         <translation>Miscellaneous</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="227"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="227"/>
         <source>Number of CPUs being used</source>
         <translation>Number of CPUs being used</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="265"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="265"/>
         <source>Set options automatically</source>
         <translation>Set options automatically</translation>
     </message>
@@ -1574,118 +1579,118 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ClustalWSupportRunDialog</name>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="26"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="26"/>
         <source>Align with ClustalW</source>
         <translation>Align with ClustalW</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="42"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="42"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="52"/>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="76"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="52"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="76"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="59"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="59"/>
         <source>Output file</source>
         <translation>Output file</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="88"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="88"/>
         <source>Advanced options</source>
         <translation>Advanced options</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="98"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="98"/>
         <source>Gap opening penalty</source>
         <translation>Gap opening penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="141"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="141"/>
         <source>Gap extension penalty</source>
         <translation>Gap extension penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="184"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="184"/>
         <source>Weight matrix</source>
         <translation>Weight matrix</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="214"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="214"/>
         <source>IUB</source>
         <translation>IUB</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="219"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="219"/>
         <source>CLUSTALW</source>
         <translation>CLUSTALW</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="289"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="289"/>
         <source>Max iterations</source>
         <translation>Max iterations</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="261"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="261"/>
         <source>NONE</source>
         <translation>NONE</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="266"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="266"/>
         <source>TREE</source>
         <translation>TREE</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="271"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="271"/>
         <source>ALIGNMENT</source>
         <translation>ALIGNMENT</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="231"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="231"/>
         <source>Iteration type</source>
         <translation>Iteration type</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="335"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="335"/>
         <source>Out sequences order</source>
         <translation>Out sequences order</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="365"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="365"/>
         <source>Input</source>
         <translation>Input</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="370"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="370"/>
         <source>Aligned</source>
         <translation>Aligned</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="388"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="388"/>
         <source>Protein gap parameters</source>
         <translation>Protein gap parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="398"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="398"/>
         <source>Gap separation distance</source>
         <translation>Gap separation distance</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="456"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="456"/>
         <source>Residue-specific gaps off</source>
         <translation>Residue-specific gaps off</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="442"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="442"/>
         <source>Hydrophilic gaps off</source>
         <translation>Hydrophilic gaps off</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="449"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="449"/>
         <source>No end gap separation penalty</source>
         <translation>No end gap separation penalty</translation>
     </message>
@@ -1693,52 +1698,52 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ETSSettingsWidget</name>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="26"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="26"/>
         <source>Resource settings</source>
         <translation>Resource settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="40"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="40"/>
         <source>You can select path for</source>
         <translation>You can select path for</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="47"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="47"/>
         <source>Check lastest version of external tools package</source>
         <translation>Check latest version of external tools package</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="50"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="50"/>
         <source><a href="http://ugene.unipro.ru/external.html">external tools package</a></source>
         <translation><a href="http://ugene.unipro.ru/external.html">external tools package</a></translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="70"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="70"/>
         <source>Browse...</source>
         <translation>Browse...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="86"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="86"/>
         <source>Supported tools</source>
         <translation>Supported tools</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="102"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="102"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="107"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="107"/>
         <source>Path</source>
         <translation>Path</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="142"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="142"/>
         <source>Additional information</source>
         <translation>Additional information</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="177"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="177"/>
         <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; }
@@ -1751,12 +1756,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;">Select an external tool to view more information about it.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="197"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="197"/>
         <source>Binary path:</source>
         <translation>Binary path:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="207"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="207"/>
         <source>Version info</source>
         <translation>Version info</translation>
     </message>
@@ -1764,89 +1769,89 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>FormatDBSupportRunDialog</name>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="20"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="20"/>
         <source>Format Database</source>
         <translation>Format Database</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="29"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="29"/>
         <source>Input data</source>
         <translation>Input data</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="35"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="35"/>
         <source>Select input file(s) for formatting database:</source>
         <translation>Select input file(s) for formatting database:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="53"/>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="84"/>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="190"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="53"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="84"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="190"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="62"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="62"/>
         <source>Or select directory with input files:</source>
         <translation>Or select directory with input files:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="96"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="96"/>
         <source>File filter</source>
         <translation>File filter</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="104"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="104"/>
         <source>Include files filter</source>
         <translation>Include files filter</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="114"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="114"/>
         <source>*.fa;*.fasta</source>
         <translation>*.fa;*.fasta</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="121"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="121"/>
         <source>Exclude files filter</source>
         <translation>Exclude files filter</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="131"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="131"/>
         <source>*.pal</source>
         <translation>*.pal</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="143"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="143"/>
         <source>Type of file(s)</source>
         <translation>Type of file(s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="149"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="149"/>
         <source>protein</source>
         <translation>protein</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="159"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="159"/>
         <source>nucleotide</source>
         <translation>nucleotide</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="172"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="172"/>
         <source>Output settings</source>
         <translation>Output settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="178"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="178"/>
         <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/ui/FormatDBSupportRunDialog.ui" line="201"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="201"/>
         <source>Base name for BLAST files:</source>
         <translation>Base name for BLAST files:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="211"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="211"/>
         <source>Title for database file:</source>
         <translation>Title for database file:</translation>
     </message>
@@ -1881,43 +1886,43 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>MAFFTSupportRunDialog</name>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="20"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="20"/>
         <source>Align with MAFFT</source>
         <translation>Align with MAFFT</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="36"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="36"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="46"/>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="63"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="46"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="63"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="53"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="53"/>
         <source>Output file</source>
         <translation>Output file</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="75"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="75"/>
         <source>Advanced options</source>
         <translation>Advanced options</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="85"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="85"/>
         <source>Gap opening penalty</source>
         <translation>Gap opening penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="131"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="131"/>
         <source>Offset (works like gap extension penalty)</source>
         <translation>Offset (works like gap extension penalty)</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="174"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="174"/>
         <source>Maximum number of iterative refinement</source>
         <translation>Maximum number of iterative refinement</translation>
     </message>
@@ -1929,62 +1934,62 @@ p, li { white-space: pre-wrap; }
         <translation type="vanished">MrBayes Settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="60"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="60"/>
         <source>Model</source>
         <translation>Model</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="78"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="78"/>
         <source>ModelType</source>
         <translation>ModelType</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="95"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="95"/>
         <source>Rate</source>
         <translation>Rate</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="118"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="118"/>
         <source>Gamma</source>
         <translation>Gamma</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="151"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="151"/>
         <source>MCMC</source>
         <translation>MCMC</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="163"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="163"/>
         <source>Chain length</source>
         <translation>Chain length</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="189"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="189"/>
         <source>Subsampling frequence</source>
         <translation>Subsampling frequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="221"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="221"/>
         <source>Burn-in length</source>
         <translation>Burn-in length</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="250"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="250"/>
         <source>Heated chains</source>
         <translation>Heated chains</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="279"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="279"/>
         <source>Heated chain temp</source>
         <translation>Heated chain temp</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="321"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="321"/>
         <source>Random seed</source>
         <translation>Random seed</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="329"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="329"/>
         <source>Display Options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1992,119 +1997,119 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PhyMLDialog</name>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="77"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="77"/>
         <source>Substitution model</source>
         <translation>Substitution model</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="98"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="98"/>
         <source>Equilibrium frequencies</source>
         <translation>Equilibrium frequencies</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="112"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="112"/>
         <source>optimized</source>
         <translation>optimized</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="119"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="119"/>
         <source>empirical</source>
         <translation>empirical</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="293"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="293"/>
         <source>Transition / transversion ratio </source>
         <translation>Transition / transversion ratio </translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="139"/>
-        <location filename="../src/ui/PhyMLDialog.ui" line="171"/>
-        <location filename="../src/ui/PhyMLDialog.ui" line="289"/>
+        <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>Check to set user value. 
 Uncheck to get the maximum likelihood estimate.</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="190"/>
-        <location filename="../src/ui/PhyMLDialog.ui" line="212"/>
-        <location filename="../src/ui/PhyMLDialog.ui" line="243"/>
-        <location filename="../src/ui/PhyMLDialog.ui" line="265"/>
+        <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"/>
         <source>estimated </source>
         <translation>estimated </translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="143"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="143"/>
         <source>Proportion of invariable sites</source>
         <translation>Proportion of invariable sites</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="63"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="63"/>
         <source>Substitution Model</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="154"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="154"/>
         <source>Number of substitution rate categories</source>
         <translation>Number of substitution rate categories</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="175"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="175"/>
         <source>Gamma shape parameter</source>
         <translation>Gamma shape parameter</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="303"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="303"/>
         <source>Branch Support</source>
         <translation>Branch Support</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="321"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="321"/>
         <source>Use fast likelihood-based method</source>
         <translation>Use fast likelihood-based method</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="353"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="353"/>
         <source>Perform bootstrap</source>
         <translation>Perform bootstrap</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="369"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="369"/>
         <source>It is the number of bootstrap replicates.</source>
         <translation>It is the number of bootstrap replicates.</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="380"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="380"/>
         <source>Tree Searching</source>
         <translation>Tree Searching</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="470"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="470"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="482"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="482"/>
         <source>Type of tree improvement</source>
         <translation>Type of tree improvement</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="499"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="499"/>
         <source>Set number of random starting tree</source>
         <translation>Set number of random starting tree</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="515"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="515"/>
         <source>Optimise topology</source>
         <translation>Optimise topology</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="525"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="525"/>
         <source>Optimise branch lengths</source>
         <translation>Optimise branch lengths</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="546"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="546"/>
         <source>Display Options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2233,80 +2238,85 @@ Uncheck to get the maximum likelihood estimate.</translation>
     </message>
     <message>
         <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>
+    </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>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>
+        <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>
 </context>
 <context>
     <name>SpadesSettings</name>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="20"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="20"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="30"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="30"/>
         <source>Base Options</source>
         <translation>Base Options</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="45"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="45"/>
         <source>Running mode</source>
         <translation>Running mode</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="59"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="59"/>
         <source>Error Correction and Assembly</source>
         <translation>Error Correction and Assembly</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="64"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="64"/>
         <source>Assembly only</source>
         <translation>Assembly only</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="69"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="69"/>
         <source>Error correction only</source>
         <translation>Error correction only</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="80"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="80"/>
         <source>k-mer sizes (-k)</source>
         <translation>k-mer sizes (-k)</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="99"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="99"/>
         <source>Dataset type</source>
         <translation>Dataset type</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="112"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="112"/>
         <source>auto</source>
         <translation>auto</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="120"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="120"/>
         <source>Multi Cell</source>
         <translation>Multi Cell</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="125"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="125"/>
         <source>Single Cell</source>
         <translation>Single Cell</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="142"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="142"/>
         <source>Memory limit GB (-m)</source>
         <translation>Memory limit GB (-m)</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="158"/>
-        <location filename="../src/ui/SpadesSettings.ui" line="190"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="158"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="190"/>
         <source>Number of threads</source>
         <translation>Number of threads</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="174"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="174"/>
         <source>Number of threads (-t)</source>
         <translation>Number of threads (-t)</translation>
     </message>
@@ -2314,43 +2324,43 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>TCoffeeSupportRunDialog</name>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="20"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="20"/>
         <source>Align with T-Coffee</source>
         <translation>Align with T-Coffee</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="36"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="36"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="46"/>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="63"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="46"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="63"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="53"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="53"/>
         <source>Output file</source>
         <translation>Output file</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="75"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="75"/>
         <source>Advanced options</source>
         <translation>Advanced options</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="83"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="83"/>
         <source>Gap opening penalty</source>
         <translation>Gap opening penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="122"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="122"/>
         <source>Gap extension penalty</source>
         <translation>Gap extension penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="158"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="158"/>
         <source>Number of iterations</source>
         <translation>Number of iterations</translation>
     </message>
@@ -2675,7 +2685,7 @@ Uncheck to get the maximum likelihood estimate.</translation>
         <translation type="vanished">Select a database file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.cpp" line="80"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.cpp" line="84"/>
         <source>Set a result FASTA file name</source>
         <translation>Set a result FASTA file name</translation>
     </message>
@@ -3104,22 +3114,36 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>U2::BwaAlignTask</name>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="92"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="105"/>
         <source>Short reads are not provided</source>
         <translation>Short reads are not provided</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="99"/>
         <source>In paired-end mode it possible to analyze only 2 read sets using BWA</source>
-        <translation>In paired-end mode it possible to analyze only 2 read sets using BWA</translation>
+        <translation type="vanished">In paired-end mode it possible to analyze only 2 read sets using BWA</translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaTask.cpp" line="123"/>
+        <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="194"/>
+        <source>Align reads with BWA Multitask</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaTask.cpp" line="235"/>
+        <source>Saming reads with BWA Multitask</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="217"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="286"/>
         <source>Log is incomplete</source>
         <translation>Log is incomplete</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="220"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="289"/>
         <source>Log is incorrect</source>
         <translation>Log is incorrect</translation>
     </message>
@@ -3127,20 +3151,29 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>U2::BwaMemAlignTask</name>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="242"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="312"/>
         <source>Short reads are not provided</source>
         <translation>Short reads are not provided</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="251"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="331"/>
+        <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="420"/>
+        <source>Align reads with BWA-MEM Multitask</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Wrong settings of paired reads. For paired-read alignment by BWA MEM only a single pair of reads is acceptable.</source>
-        <translation>Wrong settings of paired reads. For paired-read alignment by BWA MEM only a single pair of reads is acceptable.</translation>
+        <translation type="vanished">Wrong settings of paired reads. For paired-read alignment by BWA MEM only a single pair of reads is acceptable.</translation>
     </message>
 </context>
 <context>
     <name>U2::BwaMemSettingsWidget</name>
     <message>
-        <location filename="../src/bwa/BwaSettingsWidget.cpp" line="338"/>
+        <location filename="../src/bwa/BwaSettingsWidget.cpp" line="298"/>
         <source>NOTE: bwa mem accepts reads only in FASTA or FASTQ format. Reads should be compiled into a single file for each mate end.</source>
         <translation>NOTE: bwa mem accepts reads only in FASTA or FASTQ format. Reads should be compiled into a single file for each mate end.</translation>
     </message>
@@ -3156,12 +3189,12 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>U2::BwaSwAlignTask</name>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="338"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="470"/>
         <source>Short reads are not provided</source>
         <translation>Short reads are not provided</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="348"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="480"/>
         <source>BWA SW can not align paired reads</source>
         <translation>BWA SW can not align paired reads</translation>
     </message>
@@ -3169,7 +3202,7 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>U2::BwaSwSettingsWidget</name>
     <message>
-        <location filename="../src/bwa/BwaSettingsWidget.cpp" line="270"/>
+        <location filename="../src/bwa/BwaSettingsWidget.cpp" line="230"/>
         <source>NOTE: bwa-sw performs alignment of long sequencing reads (Sanger or 454). It accepts reads only in FASTA or FASTQ format. Reads should be compiled into single file.</source>
         <translation>NOTE: bwa-sw performs alignment of long sequencing reads (Sanger or 454). It accepts reads only in FASTA or FASTQ format. Reads should be compiled into single file.</translation>
     </message>
@@ -3177,19 +3210,22 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>U2::BwaTask</name>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="479"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="620"/>
         <source>Multiple read files are not supported by bwa-sw. Please combine your reads into single FASTA file.</source>
         <translation>Multiple read files are not supported by bwa-sw. Please combine your reads into single FASTA file.</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="485"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="626"/>
+        <source>Please, provide same number of files with downstream and upstream reads.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Multiple read files are not supported by bwa-mem. Please combine your reads into single FASTA file.</source>
-        <translation>Multiple read files are not supported by bwa-mem. Please combine your reads into single FASTA file.</translation>
+        <translation type="vanished">Multiple read files are not supported by bwa-mem. Please combine your reads into single FASTA file.</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="488"/>
         <source>Please, provide two files with paired reads.</source>
-        <translation>Please, provide two files with paired reads.</translation>
+        <translation type="vanished">Please, provide two files with paired reads.</translation>
     </message>
 </context>
 <context>
@@ -3228,22 +3264,22 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>U2::CAP3SupportDialog</name>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="47"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="44"/>
         <source>Run</source>
         <translation>Run</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="89"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="97"/>
         <source>List of input files is empty!</source>
         <translation>List of input files is empty!</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="101"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="109"/>
         <source>Result contig file name is not set!</source>
         <translation>Result contig file name is not set!</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="107"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="115"/>
         <source>Destination file already exists.
 To overwrite the file, press 'Replace'.
 To save under other name press 'Cancel' and change name in 'Result contig' field.</source>
@@ -3252,30 +3288,29 @@ To overwrite the file, press 'Replace'.
 To save under other name press 'Cancel' and change name in 'Result contig' field.</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="110"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="118"/>
         <source>Replace</source>
         <translation>Replace</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="139"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="147"/>
         <source>Add Sequences to Assembly</source>
         <translation>Add Sequences to Assembly</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="170"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="86"/>
         <source>Set Result Contig File Name</source>
         <translation>Set Result Contig File Name</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="48"/>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="111"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="45"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="119"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="170"/>
         <source>ACE format (*.ace)</source>
-        <translation>ACE format (*.ace)</translation>
+        <translation type="vanished">ACE format (*.ace)</translation>
     </message>
 </context>
 <context>
@@ -3356,12 +3391,12 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalOSupportRunDialog</name>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="55"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="49"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="56"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="50"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -3422,38 +3457,38 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalOWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="91"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="84"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="92"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="85"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="108"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="96"/>
         <source>Open an alignment file</source>
         <translation>Open an alignment file</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="118"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="110"/>
         <source>Save an multiple alignment file</source>
         <translation>Save an multiple alignment file</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="143"/>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="146"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="135"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="138"/>
         <source>Kalign with Align</source>
         <translation>Align with Kalign</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="144"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="136"/>
         <source>Input file is not set!</source>
         <translation>Input file is not set!</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="147"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="139"/>
         <source>Output file is not set!</source>
         <translation>Output file is not set!</translation>
     </message>
@@ -3505,12 +3540,12 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalWSupportRunDialog</name>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="52"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="46"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="53"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="47"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -3566,38 +3601,38 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalWWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="131"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="124"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="132"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="125"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="154"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="141"/>
         <source>Open an alignment file</source>
         <translation>Open an alignment file</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="164"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="155"/>
         <source>Save an multiple alignment file</source>
         <translation>Save an multiple alignment file</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="215"/>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="218"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="201"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="204"/>
         <source>Kalign with Align</source>
         <translation>Align with Kalign</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="216"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="202"/>
         <source>Input file is not set!</source>
         <translation>Input file is not set!</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="219"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="205"/>
         <source>Output file is not set!</source>
         <translation>Output file is not set!</translation>
     </message>
@@ -3764,7 +3799,7 @@ To save under other name press 'Cancel' and change name in 'Resul
         <translation>Unable to get an assembly object.</translation>
     </message>
     <message>
-        <location filename="../src/cufflinks/CufflinksSupportTask.cpp" line="233"/>
+        <location filename="../src/cufflinks/CufflinksSupportTask.cpp" line="235"/>
         <source>An internal error occurred during getting annotations from a %1 output file!</source>
         <translation>An internal error occurred during getting annotations from a %1 output file!</translation>
     </message>
@@ -3866,7 +3901,7 @@ To save under other name press 'Cancel' and change name in 'Resul
         <translation>Tool does not start.<br>It is possible that the specified executable file <i>%1</i> for %2 tool is invalid. You can change the path to the executable file in the external tool settings in the global preferences.</translation>
     </message>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="156"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="158"/>
         <source>Can not find expected message.<br>It is possible that the specified executable file <i>%1</i> for %2 tool is invalid. You can change the path to the executable file in the external tool settings in the global preferences.</source>
         <translation>Can not find expected message.<br>It is possible that the specified executable file <i>%1</i> for %2 tool is invalid. You can change the path to the executable file in the external tool settings in the global preferences.</translation>
     </message>
@@ -3874,7 +3909,7 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolSearchAndValidateTask</name>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="347"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="349"/>
         <source>Can not find expected message.<br>It is possible that the specified executable file <i>%1</i> for %2 tool is invalid. You can change the path to the executable file in the external tool settings in the global preferences.</source>
         <translation>Can not find expected message.<br>It is possible that the specified executable file <i>%1</i> for %2 tool is invalid. You can change the path to the executable file in the external tool settings in the global preferences.</translation>
     </message>
@@ -4107,12 +4142,12 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolsInstallTask</name>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="391"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="393"/>
         <source>Installing external tools</source>
         <translation>Installing external tools</translation>
     </message>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="396"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="398"/>
         <source> failed: </source>
         <translation> failed: </translation>
     </message>
@@ -4134,13 +4169,13 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolsValidateTask</name>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="362"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="364"/>
         <source>Checking external tools</source>
         <translation>Checking external tools</translation>
     </message>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="380"/>
         <location filename="../src/utils/ExternalToolValidateTask.cpp" line="382"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="384"/>
         <source> failed: </source>
         <translation> failed: </translation>
     </message>
@@ -4323,98 +4358,108 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::LocalWorkflow::BaseShortReadsAlignerWorker</name>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="247"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="238"/>
+        <source>Not enough upstream reads datasets</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="241"/>
+        <source>Not enough downstream reads datasets</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="276"/>
         <source>Output directory</source>
         <translation>Output directory</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="248"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="277"/>
         <source>Directory to save output files.</source>
         <translation>Directory to save output files.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="251"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="280"/>
         <source>Reference genome</source>
         <translation>Reference genome</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="252"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="281"/>
         <source>Path to indexed reference genome.</source>
         <translation>Path to indexed reference genome.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="255"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="284"/>
         <source>Library</source>
         <translation>Library</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="256"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="285"/>
         <source>Is this library mate-paired?</source>
         <translation>Is this library mate-paired?</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="259"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="288"/>
         <source>Output file name</source>
         <translation>Output file name</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="260"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="289"/>
         <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="292"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="321"/>
         <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="293"/>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="303"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="322"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="332"/>
         <source>Input reads to be aligned.</source>
         <translation>Input reads to be aligned.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="295"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="324"/>
         <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="296"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="325"/>
         <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="302"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="331"/>
         <source>Input data</source>
         <translation>Input data</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="306"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="335"/>
         <source>Reverse FASTQ file</source>
         <translation>Reverse FASTQ file</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="307"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="336"/>
         <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="319"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="348"/>
         <source>Assembly URL</source>
         <translation>Assembly URL</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="320"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="349"/>
         <source>Output assembly URL.</source>
         <translation>Output assembly URL.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="323"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="352"/>
         <source>Output data</source>
         <translation>Output data</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="324"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="353"/>
         <source>Output assembly files.</source>
         <translation>Output assembly files.</translation>
     </message>
@@ -7557,32 +7602,32 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::MACSPrompter</name>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="570"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="571"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="577"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="578"/>
         <source>Uses <u>%1</u> as treatment</source>
         <translation>Uses <u>%1</u> as treatment</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="579"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="580"/>
         <source> and <u>%1</u> as control</source>
         <translation> and <u>%1</u> as control</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="582"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="583"/>
         <source> to call peaks.</source>
         <translation> to call peaks.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="584"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="586"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="587"/>
         <source> and pileup with <u>%1</u> span</source>
         <translation> and pileup with <u>%1</u> span</translation>
     </message>
@@ -7590,262 +7635,267 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::MACSWorker</name>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="194"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="195"/>
         <source>Bad model fold region: %1. Default region is used</source>
         <translation>Bad model fold region: %1. Default region is used</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="261"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="195"/>
+        <source>unrecognized parsing error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/macs/MACSWorker.cpp" line="262"/>
         <source>Input control and treatment annotations are the same</source>
         <translation>Input control and treatment annotations are the same</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="275"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="276"/>
         <source>Treatment features</source>
         <translation>Treatment features</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="276"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="277"/>
         <source>ChIP-seq treatment features.</source>
         <translation>ChIP-seq treatment features.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="278"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="279"/>
         <source>Control features</source>
         <translation>Control features</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="279"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="280"/>
         <source>Control features (Optional).</source>
         <translation>Control features (Optional).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="284"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="285"/>
         <source>MACS data</source>
         <translation>MACS data</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="285"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="286"/>
         <source>ChIP-seq treatment features and control features (optional) to call peaks with MACS.</source>
         <translation>ChIP-seq treatment features and control features (optional) to call peaks with MACS.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="293"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="294"/>
         <source>Peak regions</source>
         <translation>Peak regions</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="294"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="295"/>
         <source>Peak locations. Typically used in gene association study like CEAS, or correlation calculation.</source>
         <translation>Peak locations. Typically used in gene association study like CEAS, or correlation calculation.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="296"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="297"/>
         <source>Peak summits</source>
         <translation>Peak summits</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="297"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="298"/>
         <source>Peak summits locations for every peaks. Typically used in DNA motif analysis or conservation check.</source>
         <translation>Peak summits locations for every peaks. Typically used in DNA motif analysis or conservation check.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="299"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="300"/>
         <source>Treatment fragments pileup (wiggle)</source>
         <translation>Treatment fragments pileup (wiggle)</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="300"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="301"/>
         <source>Wiggle format files which can be imported to UCSC genome browser/GMOD/Affy IGB.</source>
         <translation>Wiggle format files which can be imported to UCSC genome browser/GMOD/Affy IGB.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="303"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="304"/>
         <source>MACS output data</source>
         <translation>MACS output data</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="304"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="305"/>
         <source>ChIP-seq peaks and summits. Pileup data (optional)</source>
         <translation>ChIP-seq peaks and summits. Pileup data (optional)</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="317"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="318"/>
         <source>Output directory</source>
         <translation>Output directory</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="318"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="319"/>
         <source>Directory to save MACS output files.</source>
         <translation>Directory to save MACS output files.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="320"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="321"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="321"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="322"/>
         <source>The name string of the experiment. MACS will use this string NAME to create output files like 'NAME_peaks.xls', 'NAME_negative_peaks.xls', 'NAME_peaks.bed', 'NAME_summits.bed', 'NAME_model.r' and so on. So please avoid any confliction between these filenames and your existing files (--name).</source>
         <translation>The name string of the experiment. MACS will use this string NAME to create output files like 'NAME_peaks.xls', 'NAME_negative_peaks.xls', 'NAME_peaks.bed', 'NAME_summits.bed', 'NAME_model.r' and so on. So please avoid any confliction between these filenames and your existing files (--name).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="325"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="326"/>
         <source>Wiggle output</source>
         <translation>Wiggle output</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="326"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="327"/>
         <source>If this flag is on, MACS will store the fragment pileup in wiggle format for the whole genome data instead of for every chromosomes (--wig) (--single-profile).</source>
         <translation>If this flag is on, MACS will store the fragment pileup in wiggle format for the whole genome data instead of for every chromosomes (--wig) (--single-profile).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="328"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="329"/>
         <source>Wiggle space</source>
         <translation>Wiggle space</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="329"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="330"/>
         <source>By default, the resolution for saving wiggle files is 10 bps,i.e., MACS will save the raw tag count every 10 bps. You can change it along with '--wig' option (--space).</source>
         <translation>By default, the resolution for saving wiggle files is 10 bps,i.e., MACS will save the raw tag count every 10 bps. You can change it along with '--wig' option (--space).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="332"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="333"/>
         <source>Genome size (Mbp)</source>
         <translation>Genome size (Mbp)</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="333"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="334"/>
         <source>Homo sapience - 2700 Mbp<br>Mus musculus - 1870 Mbp<br>Caenorhabditis elegans - 90 Mbp<br>Drosophila melanogaster  - 120 Mbp<br> It's the mappable genome size or effective genome size which is defined as the genome size which can be sequenced. Because of the repetitive features on the chromosomes, the actual mappable genome size will be smaller than the original size, about 90% or 70% of the genome size (--gsize).</source>
         <translation>Homo sapience - 2700 Mbp<br>Mus musculus - 1870 Mbp<br>Caenorhabditis elegans - 90 Mbp<br>Drosophila melanogaster  - 120 Mbp<br> It's the mappable genome size or effective genome size which is defined as the genome size which can be sequenced. Because of the repetitive features on the chromosomes, the actual mappable genome size will be smaller than the original size, about 90% or 70% of the genome size (--gsize).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="342"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="343"/>
         <source>P-value</source>
         <translation>P-value</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="343"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="344"/>
         <source>P-value cutoff. Default is 0.00001, for looser results, try 0.001 instead (--pvalue).</source>
         <translation>P-value cutoff. Default is 0.00001, for looser results, try 0.001 instead (--pvalue).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="345"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="346"/>
         <source>Q-value</source>
         <translation>Q-value</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="346"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="347"/>
         <source>Minimum FDR (q-value) cutoff for peak detection.</source>
         <translation>Minimum FDR (q-value) cutoff for peak detection.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="348"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="349"/>
         <source>Use model</source>
         <translation>Use model</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="349"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="350"/>
         <source>Whether or not to use MACS paired peaks model (--nomodel).</source>
         <translation>Whether or not to use MACS paired peaks model (--nomodel).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="351"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="352"/>
         <source>Model fold</source>
         <translation>Model fold</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="352"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="353"/>
         <source>Select the regions within MFOLD range of high-confidence enrichment ratio against. <b>Model fold</b> is available when <b>Use model</b> is true, which is the foldchange to chose paired peaks to build paired peaks model. Users need to set a lower(smaller) and upper(larger) number for fold change so that MACS will only use the peaks within these foldchange range to build model (--mfold).</source>
         <translation>Select the regions within MFOLD range of high-confidence enrichment ratio against. <b>Model fold</b> is available when <b>Use model</b> is true, which is the foldchange to chose paired peaks to build paired peaks model. Users need to set a lower(smaller) and upper(larger) number for fold change so that MACS will only use the peaks within these foldchange range to build model (--mfold).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="357"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="358"/>
         <source>Shift size</source>
         <translation>Shift size</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="358"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="359"/>
         <source>An arbitrary shift value used as a half of the fragment size when model is not built. <b>Shift size</b> is available when <b>Use model</b> is false, which will represent the HALF of the fragment size of your sample. If your sonication and size selection size is 300 bps, after you trim out nearly 100 bps adapters, the fragment size is about 200 bps, so you can specify 100 here (--shiftsize).</source>
         <translation>An arbitrary shift value used as a half of the fragment size when model is not built. <b>Shift size</b> is available when <b>Use model</b> is false, which will represent the HALF of the fragment size of your sample. If your sonication and size selection size is 300 bps, after you trim out nearly 100 bps adapters, the fragment size is about 200 bps, so you can specify 100 here (--shiftsize).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="363"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="364"/>
         <source>Keep duplicates</source>
         <translation>Keep duplicates</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="364"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="365"/>
         <source>It controls the MACS behavior towards duplicate tags at the exact same location -- the same coordination and the same strand. The default <b>auto</b> option makes MACS calculate the maximum tags at the exact same location based on binomal distribution using 1e-5 as pvalue cutoff; and the <b>all</b> option keeps every tags. If an <b>integer</b> is given, at most this number of tags will be kept at the same location (--keep-dup).</source>
         <translation>It controls the MACS behavior towards duplicate tags at the exact same location -- the same coordination and the same strand. The default <b>auto</b> option makes MACS calculate the maximum tags at the exact same location based on binomal distribution using 1e-5 as pvalue cutoff; and the <b>all</b> option keeps every tags. If an <b>integer</b> is given, at most this number of tags will be kept at the same location (--keep-dup).</tr [...]
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="368"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="369"/>
         <source>Band width</source>
         <translation>Band width</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="369"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="370"/>
         <source>The band width which is used to scan the genome for model building. You can set this parameter as the sonication fragment size expected from wet experiment. Used only while building the shifting model (--bw).</source>
         <translation>The band width which is used to scan the genome for model building. You can set this parameter as the sonication fragment size expected from wet experiment. Used only while building the shifting model (--bw).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="373"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="374"/>
         <source>Extended fragment pileup</source>
         <translation>Extended fragment pileup</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="374"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="375"/>
         <source>Whether or not to generate extended fragment pileup, local lambda and score tracks at every bp.</source>
         <translation>Whether or not to generate extended fragment pileup, local lambda and score tracks at every bp.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="378"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="379"/>
         <source>Tag size (optional)</source>
         <translation>Tag size (optional)</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="379"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="380"/>
         <source>Length of reads. Determined from first 10 reads if not specified (input <b>0</b>) (--tsize).</source>
         <translation>Length of reads. Determined from first 10 reads if not specified (input <b>0</b>) (--tsize).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="383"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="384"/>
         <source>Use lambda</source>
         <translation>Use lambda</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="384"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="385"/>
         <source>Whether to use local lambda model which can use the local bias at peak regions to throw out false positives (--nolambda).</source>
         <translation>Whether to use local lambda model which can use the local bias at peak regions to throw out false positives (--nolambda).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="386"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="387"/>
         <source>Small nearby region</source>
         <translation>Small nearby region</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="387"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="388"/>
         <source>The small nearby region in basepairs to calculate dynamic lambda. This is used to capture the bias near the peak summit region. Invalid if there is no control data (--slocal).</source>
         <translation>The small nearby region in basepairs to calculate dynamic lambda. This is used to capture the bias near the peak summit region. Invalid if there is no control data (--slocal).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="390"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="391"/>
         <source>Large nearby region</source>
         <translation>Large nearby region</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="391"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="392"/>
         <source>The large nearby region in basepairs to calculate dynamic lambda.  This is used to capture the surround bias (--llocal).</source>
         <translation>The large nearby region in basepairs to calculate dynamic lambda.  This is used to capture the surround bias (--llocal).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="394"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="395"/>
         <source>Auto bimodal</source>
         <translation>Auto bimodal</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="395"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="396"/>
         <source>Whether turn on the auto pair model process.If set, when MACS failed to build paired model, it will use the nomodelsettings, the “Shift size” parameter to shift and extend each tags (--on-auto).</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7869,62 +7919,62 @@ Default: 64.</translation>
         </translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="399"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="400"/>
         <source>Scale to large</source>
         <translation>Scale to large</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="400"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="401"/>
         <source> When set, scale the small sample up to the bigger sample.By default, the bigger dataset will be scaled down towards the smaller dataset,which will lead to smaller p/qvalues and more specific results.Keep in mind that scaling down will bring down background noise more (--to-large).</source>
         <translation> When set, scale the small sample up to the bigger sample.By default, the bigger dataset will be scaled down towards the smaller dataset,which will lead to smaller p/qvalues and more specific results.Keep in mind that scaling down will bring down background noise more (--to-large).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="405"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="406"/>
         <source>Shift control</source>
         <translation>Shift control</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="406"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="407"/>
         <source>When set, control tags will be shifted just as ChIP tags according to their strand before the extension of d, slocal and llocal. By default, control tags are extended centeredat their current positions regardless of strand. You may consider to turn this option on whilecomparing two ChIP datasets of different condition but the same factor.</source>
         <translation>When set, control tags will be shifted just as ChIP tags according to their strand before the extension of d, slocal and llocal. By default, control tags are extended centeredat their current positions regardless of strand. You may consider to turn this option on whilecomparing two ChIP datasets of different condition but the same factor.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="411"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="412"/>
         <source>Half-extend</source>
         <translation>Half-extend</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="412"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="413"/>
         <source>When set, MACS extends 1/2 d size for each fragment centered at its middle point.</source>
         <translation>When set, MACS extends 1/2 d size for each fragment centered at its middle point.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="414"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="415"/>
         <source>Broad</source>
         <translation>Broad</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="415"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="416"/>
         <source>If set, MACS will try to call broad peaks by linking nearby highly enriched regions.The linking region is controlled by another cutoff through “Broad cutoff”.The maximum linking region length is 4 times of d from MACS.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="419"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="420"/>
         <source>Broad cutoff</source>
         <translation>Broad cutoff</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="420"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="421"/>
         <source>Cutoff for broad region. This option is not available unless “Broad” is set.If “P-value” is set, this is a pvalue cutoff, otherwise, it's a qvalue cutoff.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="548"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="549"/>
         <source>Find Peaks with MACS</source>
         <translation>Find Peaks with MACS</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="549"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="550"/>
         <source>Performs peak calling for ChIP-Seq data.</source>
         <translation>Performs peak calling for ChIP-Seq data.</translation>
     </message>
@@ -8324,22 +8374,22 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::ShortReadsAlignerPrompter</name>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="340"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="369"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="346"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="375"/>
         <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="348"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="377"/>
         <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="352"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="381"/>
         <source> to reference genome <u>%1</u>.</source>
         <translation> to reference genome <u>%1</u>.</translation>
     </message>
@@ -9466,12 +9516,12 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::MAFFTSupportRunDialog</name>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="52"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="46"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="53"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="47"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -9543,38 +9593,38 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::MAFFTWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="84"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="76"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="85"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="77"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="100"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="86"/>
         <source>Open an alignment file</source>
         <translation>Open an alignment file</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="110"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="100"/>
         <source>Save an multiple alignment file</source>
         <translation>Save an multiple alignment file</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="134"/>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="137"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="119"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="122"/>
         <source>Kalign with Align</source>
         <translation>Align with Kalign</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="135"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="120"/>
         <source>Input file is not set!</source>
         <translation>Input file is not set!</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="138"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="123"/>
         <source>Output file is not set!</source>
         <translation>Output file is not set!</translation>
     </message>
@@ -10058,6 +10108,25 @@ Set it empty if you want to run Tophat once for all input reads</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"/>
+        <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"/>
+        <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"/>
+        <source>Failed to download SnpEff database. Check your internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::SnpEffSupport</name>
     <message>
         <location filename="../src/snpeff/SnpEffSupport.cpp" line="49"/>
@@ -10068,7 +10137,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::SnpEffTask</name>
     <message>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="171"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="198"/>
         <source>SNPEff dataDir is not initialized.</source>
         <translation>SNPEff dataDir is not initialized.</translation>
     </message>
@@ -10203,12 +10272,12 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::TCoffeeSupportRunDialog</name>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="52"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="47"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="53"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="48"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -10274,38 +10343,38 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::TCoffeeWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="83"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="76"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="84"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="77"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="98"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="86"/>
         <source>Open an alignment file</source>
         <translation>Open an alignment file</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="108"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="100"/>
         <source>Save an multiple alignment file</source>
         <translation>Save an multiple alignment file</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="132"/>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="135"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="119"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="122"/>
         <source>Kalign with Align</source>
         <translation>Align with Kalign</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="133"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="120"/>
         <source>Input file is not set!</source>
         <translation>Input file is not set!</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="136"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="123"/>
         <source>Output file is not set!</source>
         <translation>Output file is not set!</translation>
     </message>
@@ -10375,7 +10444,12 @@ Set it empty if you want to run Tophat once for all input reads</translation>
         <translation>Preparing TopHatSupportTask internal error: unable to get a sequence object!</translation>
     </message>
     <message>
-        <location filename="../src/tophat/TopHatSupportTask.cpp" line="280"/>
+        <location filename="../src/tophat/TopHatSupportTask.cpp" line="262"/>
+        <source>TopHat was not able to map reads to the reference.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tophat/TopHatSupportTask.cpp" line="284"/>
         <source>There are no accepted hits in the result</source>
         <translation>There are no accepted hits in the result</translation>
     </message>
@@ -10477,9 +10551,9 @@ Set it empty if you want to run Tophat once for all input reads</translation>
         <translation type="unfinished">Only one of these slots must be binded: '%1', '%2'</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="235"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="236"/>
         <location filename="../src/spades/SpadesWorker.cpp" line="189"/>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="224"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="253"/>
         <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 00ab88e..b73a3c6 100644
--- a/src/plugins/external_tool_support/transl/russian.ts
+++ b/src/plugins/external_tool_support/transl/russian.ts
@@ -4,63 +4,63 @@
 <context>
     <name>BlastAllSupportDialog</name>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="20"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="20"/>
         <source>Request to Local BLAST Database</source>
         <translation>Запрос к локальной базе данных BLAST</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="42"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="42"/>
         <source>General options</source>
         <translation>Основные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="53"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="53"/>
         <source>Select search:</source>
         <translation>Тип поиска:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="61"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="61"/>
         <source>blastn</source>
         <extracomment>qwe</extracomment>
         <translation>blastn</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="66"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="66"/>
         <source>blastp</source>
         <translation>blastp</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="76"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="76"/>
         <source>blastx</source>
         <translation>blastx</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="81"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="81"/>
         <source>tblastn</source>
         <translation>tblastn</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="86"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="86"/>
         <source>tblastx</source>
         <translation>tblastx</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="94"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="94"/>
         <source>Search for short, nearly exact matches</source>
         <translation>Поиск коротких последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="101"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="101"/>
         <source>Expectation value </source>
         <translation>Математическое ожидание</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="108"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="108"/>
         <source>Megablast</source>
         <translation>Megablast</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="125"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="125"/>
         <source>Off</source>
         <translation>Выключить</translation>
     </message>
@@ -69,97 +69,97 @@
         <translation type="vanished">Базовое имя для файлов БД:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="230"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="230"/>
         <source>Number of CPUs being used</source>
         <translation>Использовать процессоров</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="268"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="268"/>
         <source>Advanced options</source>
         <translation>Дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="391"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="391"/>
         <source>Word size</source>
         <translation>Размер слова</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="528"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="528"/>
         <source>Gap costs</source>
         <translation>Вес пробела</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="307"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="307"/>
         <source>Match scores</source>
         <translation>Веса совпадений</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="337"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="337"/>
         <source>1 -3</source>
         <translation>1 -3</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="159"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="159"/>
         <source>Both strands</source>
         <translation>Обе цепи</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="169"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="169"/>
         <source>Direct</source>
         <translation>Прямая</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="176"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="176"/>
         <source>Complement</source>
         <translation>Комплементарная</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="342"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="342"/>
         <source>1 -4</source>
         <translation>1 -4</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="347"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="347"/>
         <source>1 -2</source>
         <translation>1 -2</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="352"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="352"/>
         <source>1 -1</source>
         <translation>1 -1</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="357"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="357"/>
         <source>2 -7</source>
         <translation>2 -7</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="362"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="362"/>
         <source>2 -5</source>
         <translation>2 -5</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="367"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="367"/>
         <source>2 -3</source>
         <translation>2 -3</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="372"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="372"/>
         <source>4 -5</source>
         <translation>4 -5</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="377"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="377"/>
         <source>5 -4</source>
         <translation>5 -4</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="404"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="404"/>
         <source>Matrix</source>
         <translation>Матрица</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="71"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="71"/>
         <source>gpu-blastp</source>
         <translation>gpu-blastp</translation>
     </message>
@@ -173,162 +173,162 @@ a database file</source>
         <translation type="vanished">Выберите файл базы данных</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="412"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="412"/>
         <source>BLOSUM62</source>
         <translation>BLOSUM62</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="417"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="417"/>
         <source>BLOSUM45</source>
         <translation>BLOSUM45</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="422"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="422"/>
         <source>BLOSUM80</source>
         <translation>BLOSUM80</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="427"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="427"/>
         <source>PAM30</source>
         <translation>PAM30</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="432"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="432"/>
         <source>PAM70</source>
         <translation>PAM70</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="320"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="320"/>
         <source>Service</source>
         <translation>Сервис</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="115"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="115"/>
         <source>Max hits:</source>
         <translation>Макс. число совпадений:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="283"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="283"/>
         <source>plain</source>
         <translation>простой</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="288"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="288"/>
         <source>psi</source>
         <translation>psi</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="293"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="293"/>
         <source>phi</source>
         <translation>phi</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="443"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="443"/>
         <source>PHI pattern</source>
         <translation>Шаблон PHI</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="483"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="483"/>
         <source>Threshold for extending hits</source>
         <translation>Порог для расширенных совпадений</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="486"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="486"/>
         <source>Threshold</source>
         <translation>Порог</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="535"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="535"/>
         <source>Composition-based statistics</source>
         <translation>Статистика состава</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="543"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="543"/>
         <source>D or d: default (equivalent to 2 )</source>
         <translation>D или d: по умолчанию (равно 2)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="548"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="548"/>
         <source>0 or F or f: No composition-based statistics</source>
         <translation>0 или F или f: Нет статистики состава</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="553"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="553"/>
         <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/ui/BlastAllSupportDialog.ui" line="558"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="558"/>
         <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/ui/BlastAllSupportDialog.ui" line="563"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="563"/>
         <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/ui/BlastAllSupportDialog.ui" line="575"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="575"/>
         <source>Filters</source>
         <translation>Фильтры</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="581"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="581"/>
         <source>Low complexity filter</source>
         <translation>Фильтр низкой сложности</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="588"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="588"/>
         <source>Human repeats filter</source>
         <translation>Фильтр человеческих повторов</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="598"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="598"/>
         <source>Masks</source>
         <translation>Маски</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="604"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="604"/>
         <source>Mask for lookup table only</source>
         <translation>Только маска таблицы поиска</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="614"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="614"/>
         <source>Mask lower case letters</source>
         <translation>Маска символов нижн. регистра</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="640"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="640"/>
         <source>Extension options</source>
         <translation>Возможности расширения</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="648"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="648"/>
         <source>X dropoff value (in bits)</source>
         <translation>X dropoff значение (в битах)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="654"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="654"/>
         <source>For gapped alignment</source>
         <translation>Для выравниваний с пробелами</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="668"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="668"/>
         <source>For ungapped extensions</source>
         <translation>Для расширений без пробелов</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="675"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="675"/>
         <source>For final gapped alignment</source>
         <translation>Для финального выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="699"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="699"/>
         <source>Multiple Hits window size</source>
         <translation>Множественные пересечения окна</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastAllSupportDialog.ui" line="711"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="711"/>
         <source>Perform gapped alignment</source>
         <translation>Выполнить выравнивание</translation>
     </message>
@@ -336,22 +336,22 @@ a database file</source>
 <context>
     <name>BlastDBCmdDialog</name>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="26"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="26"/>
         <source>Fetch Sequence from BLAST Database</source>
         <translation>Извлечь последовательность из базы данных BLAST</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="44"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="44"/>
         <source>Entery query ID:</source>
         <translation>Идентификатор запроса:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="54"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="54"/>
         <source>Select database :</source>
         <translation>Выберите базу данных:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="104"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="104"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -368,12 +368,12 @@ a database file</source>
         <translation type="vanished">белки</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="88"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="88"/>
         <source>Output path:</source>
         <translation>Выходной путь:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBCmdDialog.ui" line="116"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="116"/>
         <source>Add to project</source>
         <translation>Добавить в проект</translation>
     </message>
@@ -381,23 +381,23 @@ a database file</source>
 <context>
     <name>BlastDBSelectorWidget</name>
     <message>
-        <location filename="../src/ui/BlastDBSelectorWidget.ui" line="14"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="14"/>
         <source>Form</source>
         <translation type="unfinished">Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBSelectorWidget.ui" line="34"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="34"/>
         <source>Database path:</source>
         <translation type="unfinished">Путь к БД:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBSelectorWidget.ui" line="58"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="58"/>
         <source>Select
 a database file</source>
         <translation type="unfinished">Выберите файл базы данных</translation>
     </message>
     <message>
-        <location filename="../src/ui/BlastDBSelectorWidget.ui" line="68"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="68"/>
         <source>Base name for BLAST DB files:</source>
         <translation type="unfinished">Базовое имя для файлов БД:</translation>
     </message>
@@ -405,159 +405,159 @@ a database file</source>
 <context>
     <name>Bowtie2Settings</name>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="41"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="41"/>
         <source>Parameters</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="60"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="76"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="60"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="76"/>
         <source><html><head/><body><p><span style=" font-size:8pt;">By default, Bowtie2 performs end-to-end read alignment. That is, it searches for alignments involving all of the read characters. This is also called an &quot;untrimmed&quot; or &quot;unclipped&quot; alignment.</span></p><p><span style=" font-size:8pt;">When the --local option is specified, Bowtie2 performs local read alignment. In  [...]
         <translation><html><head/><body><p><span style=" font-size:8pt;">По умолчанию, Bowtie2 выполняет end-to-end выравнивание. Т.е. он ищет выравнивания с с участием всех символов. Это также называется &quot;необрезное&quot; или &quot;необрезаемое&quot; выравнивание.</span></p><p><span style=" font-size:8pt;">Когда опция --local установлена, Bowtie2 выполняет локальное выравнивание. В этом режиме [...]
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="63"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="63"/>
         <source>Mode</source>
         <translation>Режим</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="86"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="86"/>
         <source>--end-to-end</source>
         <translation>--end-to-end</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="91"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="91"/>
         <source>--local</source>
         <translation>--local</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="106"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="174"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="106"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="174"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">&quot;Pads&quot; dynamic programming problems by specified number of columns on either side to allow gaps.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">&quot;Подкладки&quot; проблем динамического программирования по указанному числу столбцов с обеих сторон для разрешения пробелов.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="109"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="109"/>
         <source>Add columns to allow gaps (--dpad)</source>
         <translation>Добавляет столбцы, чтобы допустить пробелы (--dpad)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="119"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="187"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="119"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="187"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">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.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Задает количество несовпадений с разрешенным в выравнивании. Может быть 0 или 1. Повышение этого параметра делает выранивание более медленным (чаще всего очень медленным) но повышает точность.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="132"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="197"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="132"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="197"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">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.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Запуск определенного количество параллельных потоков поиска. Потоки будут работать на отдельных процессорах/ ядрах и синхронизоваться при разборе ридов и выводе выравнивания.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="148"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="252"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="148"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="252"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">Disallow gaps within specified number of positions of the beginning or end of the read.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Запретить пробелы в указанных позициях в начале или в конце рида.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="161"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="229"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="161"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="229"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">Use specified value as the seed for pseudo-random number generator.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Использовать указанное значение в качестве источника для псевдо-генератора случайных чисел.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="164"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="164"/>
         <source>Seed (--seed)</source>
         <translation>Затравка (--seed)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="190"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="190"/>
         <source>Number of mismatches</source>
         <translation>Число несоответствий</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="200"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="200"/>
         <source>Threads</source>
         <translation>Потоки</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="210"/>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="239"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="210"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="239"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">Sets the length of the seed substrings to align. Smaller values make alignment slower but more senstive.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Устанавливает длину подстрок затравки для выравнивания. Меньшие значения делают выравнивание медленнее, но более чувствительны.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="242"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="242"/>
         <source>Seed length (--L)</source>
         <translation>Длина затравки (--L)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="255"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="255"/>
         <source>Disallow gaps (--gbar)</source>
         <translation>Запретить пробелы (--gbar)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="284"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="284"/>
         <source>Flags</source>
         <translation>Флаги</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="296"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="296"/>
         <source><html><head/><body><p><span style=" font-size:8pt;">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 &quot;mixed mode.&quot; To disable mixed mode, set this option.</span></p><p><span style=" font-size:8pt;">Bowtie2 runs a little faster in the mixed mode, but will only consider alignme [...]
         <translation><html><head/><body><p><span style=" font-size:8pt;">Если Bowtie2 не сможет найти пару для выполнения парного выравнивания по умолчанию будет сделано непарное выравнивание. Это называется &quot;смешанным режимом.&quot; Чтобы отключить смешанный режим, установите эту опцию.</span></p><p><span style=" font-size:8pt;">Bowtie2 запустится немного быстрее в смешанном режиме чем для парного выр [...]
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="299"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="299"/>
         <source>No unpaired alignments (--no-mixed)</source>
         <translation>Только парное выравнивание (--no-mixed)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="306"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="306"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">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.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">По умолчанию, Bowtie2 ищет несогласованные выравнивания, если он не может найти какие-либо согласованные выравнивания. Несогласованное выравнивание это выравнивание, в котором оба рида выровнены однозначно, но они не удовлетворяют условию парности. Это опция отключает это поведение.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="309"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="309"/>
         <source>No discordant alignments (--no-discordant)</source>
         <translation>Только согласованные выравнивания (--no-discordant)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="316"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="316"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">If this option is selected, Bowtie2 will not attempt to align against the forward reference strand.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Если выбрана эта опция, Bowtie2 не будет пытаться выровнять прямую цепь.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="319"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="319"/>
         <source>No forward orientation (--nofw)</source>
         <translation>Не прямая ориентация (--nofw)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="326"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="326"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">If this option is selected, Bowtie2 will not attempt to align against the reverse-complement reference strand.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Если выбрана эта опция, Bowtie2 не будет пытаться выровнять обратно-комплементарную цепь.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="329"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="329"/>
         <source>No reverse-complement orientation (--norc)</source>
         <translation>Не обратно-комплементарная ориентация (--norc)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="336"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="336"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">If one mate alignment overlaps the other at all, consider that to be non-concordant. Default: mates can overlap in a concordant alignment.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Если один участник выравнивания перекрывается с другим, то это несогласованное выравни вание. По умолчанию: участники могут перекрываться в согласованном выравнивании.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="339"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="339"/>
         <source>No overlapping mates (--no-overlap)</source>
         <translation>Без перекрытий (--no-overlap)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="346"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="346"/>
         <source><html><head/><body><p><span style=" font-size:9pt;">If one mate alignment contains the other, consider that to be non-concordant. Default: a mate can contain the other in a concordant alignment.</span></p></body></html></source>
         <translation><html><head/><body><p><span style=" font-size:9pt;">Если один участник выравнивания содержит другой, то это несогласованное выравнивание. По умолчанию одна часть выравнивания может содержать другую в согласованном выравнивании.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Bowtie2Settings.ui" line="349"/>
+        <location filename="../src/bowtie2/Bowtie2Settings.ui" line="349"/>
         <source>No mates containing one another (--no-contain)</source>
         <translation>Без вложений (--no-contain)</translation>
     </message>
@@ -565,12 +565,12 @@ a database file</source>
 <context>
     <name>BowtieBuildSettings</name>
     <message>
-        <location filename="../src/ui/BowtieBuildSettings.ui" line="20"/>
+        <location filename="../src/bowtie/BowtieBuildSettings.ui" line="20"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieBuildSettings.ui" line="29"/>
+        <location filename="../src/bowtie/BowtieBuildSettings.ui" line="29"/>
         <source>Colorspace</source>
         <translation>Цвета</translation>
     </message>
@@ -578,12 +578,12 @@ a database file</source>
 <context>
     <name>BowtieSettings</name>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="41"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="41"/>
         <source>Parameters</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="110"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="110"/>
         <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; }
@@ -604,12 +604,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;">округление может быть отключено при помощи --nomaqround.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="121"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="121"/>
         <source>Maq error (--maqerr)</source>
         <translation>Ошибка Maq (--maqerr)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="144"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="144"/>
         <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; }
@@ -626,7 +626,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;">Наименьшее допустимое значение 5, по умолчанию 28. Большие значения -l увеличивают скорость.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="176"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="176"/>
         <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; }
@@ -651,7 +651,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;">По умолчанию: 250.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="215"/>
+        <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. 
@@ -666,17 +666,17 @@ Bowtie пытается свести к минимуму воздействие
 Значение по умолчанию: 64.</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="246"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="246"/>
         <source>Use <int> as the seed for pseudo-random number generator</source>
         <translation>Используйте <int> в качестве затравки для псевдо-случайного генератора</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="60"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="60"/>
         <source>Mode:  </source>
         <translation>Режим:  </translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="67"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="67"/>
         <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; }
@@ -697,82 +697,82 @@ 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;">В режиме-v, выравнивание может иметь не более чем V несовпадений, где V может быть числом от 0 до 3. Опция -v является взаимоисключающей с опцией -n</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="82"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="82"/>
         <source>-n mode</source>
         <translation>режим -n</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="87"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="87"/>
         <source>-v mode</source>
         <translation>режим -v</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="153"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="153"/>
         <source>Seed length (--seedlen)</source>
         <translation>Длина затравки (--seedlen)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="189"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="189"/>
         <source>Maximum of backtracks (--maxbts)</source>
         <translation>Максимальное число отступов (--maxbts)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="223"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="223"/>
         <source>Descriptors memory usage (--chunkmbs)</source>
         <translation>Использование памяти дескрипторами (--chunkmbs)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="249"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="249"/>
         <source>Seed (--seed)</source>
         <translation>Затравка (--seed)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="266"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="266"/>
         <source>Threads</source>
         <translation>Потоки</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="300"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="300"/>
         <source>Flags</source>
         <translation>Флаги</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="312"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="312"/>
         <source>Colorspace (--color)</source>
         <translation>Цвета (--color)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="329"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="329"/>
         <source>No Maq rounding (--nomaqround)</source>
         <translation>Без округления Maq (--nomaqround)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="339"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="339"/>
         <source>No forward orientation (--nofw)</source>
         <translation>Не прямая ориентация (--nofw)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="349"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="349"/>
         <source>No reverse-complement orientation (--norc)</source>
         <translation>Не обратно-комплементарная ориентация (--norc)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="369"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="369"/>
         <source>Try as hard (--tryhard)</source>
         <translation>Упорно пытаться (--tryhard)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="383"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="383"/>
         <source>Best alignments (--best)</source>
         <translation>Лучшие выравнивания (--best)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="393"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="393"/>
         <source>All alignments (--all)</source>
         <translation>Все выравнивания (--all)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="319"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="319"/>
         <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; }
@@ -791,17 +791,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;">По умолчанию, bowtie также вокруг этих значений. --nomaqround препятствует этому округлению в bowtie.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="336"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="336"/>
         <source>If --nofw is specified, bowtie will not attempt to align against the forward reference strand.</source>
         <translation>Если установлена опция --nofw, bowtie  не будет пытаться выровнять прямую цепь.</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="346"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="346"/>
         <source>If --norc is specified, bowtie will not attempt to align against the reverse-complement reference strand.</source>
         <translation>Если установлена опция --norc, bowtie не будет пытаться выровнять обратно-комплементарную цепь.</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="356"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="356"/>
         <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; }
@@ -826,7 +826,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;">или (c) не очень много ридов имеют подходящее выравнивание.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="376"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="376"/>
         <source>Make Bowtie guarantee that reported singleton alignments are "best" in terms of stratum
 (i.e. number of mismatches, or mismatches in the seed in the case of -n mode)
 and in terms of the quality values at the mismatched position(s).
@@ -838,7 +838,7 @@ bowtie is somewhat slower when --best is specified.
 bowtie медленнее, когда указан режим --best.</translation>
     </message>
     <message>
-        <location filename="../src/ui/BowtieSettings.ui" line="390"/>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="390"/>
         <source>Report all valid alignments per read or pair.</source>
         <translation>Сообщить о всех допустимых выравниваниях для рида или пары.</translation>
     </message>
@@ -846,27 +846,32 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>BwaBuildSettings</name>
     <message>
-        <location filename="../src/ui/BwaBuildSettings.ui" line="20"/>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="20"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaBuildSettings.ui" line="54"/>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="63"/>
         <source>Index algorithm (-a)</source>
         <translation>Алгоритм (-а)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaBuildSettings.ui" line="68"/>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="77"/>
+        <source>autodetect</source>
+        <translation type="unfinished">autodetect</translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="82"/>
         <source>bwtsw</source>
         <translation>bwtsw</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaBuildSettings.ui" line="73"/>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="87"/>
         <source>div</source>
         <translation>div</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaBuildSettings.ui" line="78"/>
+        <location filename="../src/bwa/BwaBuildSettings.ui" line="92"/>
         <source>is</source>
         <translation>is</translation>
     </message>
@@ -874,212 +879,212 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>BwaMemSettings</name>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="20"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="20"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="36"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="36"/>
         <source>Base Options</source>
         <translation>Основные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="441"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="441"/>
         <source>Penalty for a mismatch</source>
         <translation>Штраф за несовпадение</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="409"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="409"/>
         <source>Score for a sequence match</source>
         <translation>Вес совпадения</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="393"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="393"/>
         <source>Score for a match (-A)</source>
         <translation>Веса совпадений (-A)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="425"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="425"/>
         <source>Mismatch penalty (-B)</source>
         <translation>Штраф за несовпадение (-B)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="454"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="454"/>
         <source>Gap open penalty (-O)</source>
         <translation>Штраф за открытие пробела (-O)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="557"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="557"/>
         <source>Penalty for an unpaired read pair</source>
         <translation>Штраф за непарные риды</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="586"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="586"/>
         <source>Minimum score to output</source>
         <translation>Минимальная оценка для вывода</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="541"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="541"/>
         <source>Penalty unpaired (-U)</source>
         <translation>Штраф за непарные риды (-U)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="528"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="528"/>
         <source>Penalty for clipping </source>
         <translation>Штраф за отсечение</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="470"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="470"/>
         <source>Gap open penalty</source>
         <translation>Штраф за открывающий пропуск</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="499"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="499"/>
         <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/ui/BwaMemSettings.ui" line="512"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="512"/>
         <source>Penalty for clipping (-L)</source>
         <translation>Штраф за отсечение (-L)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="483"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="483"/>
         <source>Gap extention penalty (-E)</source>
         <translation>Штраф за расширение пробела (-E)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="570"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="570"/>
         <source>Score threshold (-T)</source>
         <translation>Порог оценки (-T)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="209"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="209"/>
         <source>Internall seeds length (-r)</source>
         <translation>Внутренняя длина затравки (-r)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="107"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="107"/>
         <source>Min seed length (-k)</source>
         <translation>Минимальная длина затравки (-k)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="69"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="69"/>
         <source>Look for internal seeds inside a seed longer than {-k} * FLOAT</source>
         <translation>Поиск внутренние затравки внутри затравки длиннее чем {-k} * FLOAT</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="56"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="56"/>
         <source>Number of threads</source>
         <translation>Число потоков</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="193"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="193"/>
         <source>Off-diagonal X-dropoff</source>
         <translation>Снижение</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="161"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="161"/>
         <source>Band width for banded alignment</source>
         <translation>Ширина полосы для выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="145"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="145"/>
         <source>Band width (-w)</source>
         <translation>Ширина полосы (-w)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="123"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="123"/>
         <source>Minimum seed length</source>
         <translation>Минимальная длина затравки</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="88"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="88"/>
         <source>Number of threads (-t)</source>
         <translation>Число потоков (-t)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="177"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="177"/>
         <source>Dropoff (-d)</source>
         <translation>Снижение (-d)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="228"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="228"/>
         <source>Skip seeds threshold (-c)</source>
         <translation>Порог затравки (-c)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="244"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="244"/>
         <source>Skip seeds with more than INT occurrences </source>
         <translation>Пропускает затравки с более чем с указанным количеством вхождений</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="266"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="266"/>
         <source>Drop chain threshold (-D)</source>
         <translation>Порог снижения цепи (-D)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="282"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="282"/>
         <source>Drop chains shorter than FLOAT fraction of the longest overlapping chain</source>
         <translation>Снижение цепи короче FLOAT фракции самого длинного перекрытия цепи</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="308"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="308"/>
         <source>Index algorithm (-a)</source>
         <translation>Алгоритм (-a)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="325"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="325"/>
         <source>autodetect</source>
         <translation>autodetect</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="330"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="330"/>
         <source>bwtsw</source>
         <translation>bwtsw</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="335"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="335"/>
         <source>div</source>
         <translation>div</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="340"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="340"/>
         <source>is</source>
         <translation>is</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="599"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="599"/>
         <source>Rounds of mate rescues (-m)</source>
         <translation>Округление за освобождение участника (-m)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="615"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="615"/>
         <source>Perform at most INT rounds of mate rescues for each read</source>
         <translation>Выполняет для большинства INT округлений освобождений участников для каждого рида</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="348"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="348"/>
         <source>Skip mate rescue</source>
         <translation>Пропустить освобождение участника</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="351"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="351"/>
         <source>Skip mate rescue (-S)</source>
         <translation>Пропустить освобождение участника (-S)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="358"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="358"/>
         <source>Skip pairing; mate rescue performed unless -S also in use</source>
         <translation>Пропустить спаривание; участник освобождается кроме случая когда -S также используется</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="361"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="361"/>
         <source>Skip pairing (-P)</source>
         <translation>Пропустить спаривание (-P)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaMemSettings.ui" line="633"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="633"/>
         <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; }
@@ -1095,137 +1100,137 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>BwaSettings</name>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="20"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="20"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="135"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="135"/>
         <source>  Best hits (-R)</source>
         <translation>Лучшие попытки (-R)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="336"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="336"/>
         <source>Max gap extensions (-e)</source>
         <translation>Максимальное расширение пробела (-e)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="346"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="346"/>
         <source>Indel offset (-i)</source>
         <translation>Смещение (-i)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="263"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="263"/>
         <source>Max long deletion extensions (-d)</source>
         <translation>Максимальная длина сокрашения пропуска (-d)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="194"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="194"/>
         <source>Seed length (-l)</source>
         <translation>Длина затравки (-l)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="482"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="482"/>
         <source>Max seed differences (-k)</source>
         <translation>Максимальное различие затравок (-k)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="283"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="283"/>
         <source>Max queue entries (-m)</source>
         <translation>Максимальное число записей в очереди (-m)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="356"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="356"/>
         <source>Enable long gaps</source>
         <translation>Допустимы длинные пробелы</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="171"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="171"/>
         <source>Missing prob (-n)</source>
         <translation>Доля потери (-n)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="154"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="154"/>
         <source>Max #diff (-n)</source>
         <translation>Максимальное расстояние редактирования (-n)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="42"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="42"/>
         <source>Long-scaled gap penalty for long deletions (-L)</source>
         <translation>Долгосрочный штраф за длительный пробел (-L)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="241"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="241"/>
         <source>Advanced</source>
         <translation>Дополнительно</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="395"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="395"/>
         <source>Gap open penalty (-O)</source>
         <translation>Штраф за открытие пробела (-O)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="303"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="303"/>
         <source>Barcode length (-B)</source>
         <translation>Длина штрих-кода (-B)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="435"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="435"/>
         <source>Quality threshold (-q)</source>
         <translation>Порог качества (-q)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="375"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="375"/>
         <source>Mismatch penalty (-M)</source>
         <translation>Штраф за несовпадение (-M)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="415"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="415"/>
         <source>Gap extension penalty (-E)</source>
         <translation>Штраф за расширение пробела (-E)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="462"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="462"/>
         <source>Threads (-t)</source>
         <translation>Потоки (-t)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="49"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="49"/>
         <source>Non-iterative mode (-N)</source>
         <translation>Неитеративный режим (-N)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="72"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="72"/>
         <source>Max gap opens (-o)</source>
         <translation>Максимальное число пробелов (-o)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="30"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="30"/>
         <source>Base Options</source>
         <translation>Основные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="85"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="85"/>
         <source>Index algorithm (-a)</source>
         <translation>Алгоритм (-а)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="102"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="102"/>
         <source>autodetect</source>
         <translation>autodetect</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="107"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="107"/>
         <source>bwtsw</source>
         <translation>bwtsw</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="112"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="112"/>
         <source>div</source>
         <translation>div</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSettings.ui" line="117"/>
+        <location filename="../src/bwa/BwaSettings.ui" line="117"/>
         <source>is</source>
         <translation>is</translation>
     </message>
@@ -1233,107 +1238,107 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>BwaSwSettings</name>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="14"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="30"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="30"/>
         <source>Base Options</source>
         <translation>Основные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="288"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="288"/>
         <source>Score threshold (divided by match score) (-T)</source>
         <translation>Порог оценки (-T)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="233"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="233"/>
         <source>Number of threads (-t)</source>
         <translation>Число потоков (-t)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="334"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="334"/>
         <source>Number of seeds to start rev alginment (-N)</source>
         <translation>Число затравок, чтобы начать обратное выравнивание (-N)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="311"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="311"/>
         <source>Z-best (-z)</source>
         <translation>Лучшие (-z)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="393"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="393"/>
         <source>Prefer hard clipping in SAM output (-H)</source>
         <translation>Строгое отсечение в выходном SAM файле (-H)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="256"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="256"/>
         <source>Size of chunk of reads (-s)</source>
         <translation>Размер куска ридов (-s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="90"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="90"/>
         <source>Score for a match (-a)</source>
         <translation>Веса совпадений (-a)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="159"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="159"/>
         <source>Gap extention penalty (-r)</source>
         <translation>Штраф за расширение пробела (-r)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="113"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="113"/>
         <source>Mismatch penalty (-b)</source>
         <translation>Штраф за несовпадение (-b)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="64"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="64"/>
         <source>autodetect</source>
         <translation>autodetect</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="69"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="69"/>
         <source>bwtsw</source>
         <translation>bwtsw</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="74"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="74"/>
         <source>div</source>
         <translation>div</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="79"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="79"/>
         <source>is</source>
         <translation>is</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="136"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="136"/>
         <source>Gap open penalty (-q)</source>
         <translation>Штраф за открытие пробела (-q)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="182"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="182"/>
         <source>Band width (-w)</source>
         <translation>Ширина полосы (-w)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="208"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="208"/>
         <source>Index algorithm (-a)</source>
         <translation>Алгоритм (-а)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="380"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="380"/>
         <source>Mask level (-c)</source>
         <translation>Уровень маски (-c)</translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="347"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="347"/>
         <source><html><head/><body><p>Number of seed to trigger reverse alignment</p></body></html></source>
         <translation><html><head/><body><p>Число затравок, чтобы начать обратное выравнивание</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BwaSwSettings.ui" line="405"/>
+        <location filename="../src/bwa/BwaSwSettings.ui" line="405"/>
         <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; }
@@ -1349,22 +1354,22 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>CAP3SupportDialog</name>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="20"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="14"/>
         <source>Contig Assembly with CAP3</source>
         <translation>Сборка контигов с помощью CAP3</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="30"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="27"/>
         <source>Base</source>
         <translation>Основа</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="36"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="33"/>
         <source>Input files (long DNA reads to assembly)</source>
         <translation>Входные файлы (длинные ДНК риды)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="45"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="42"/>
         <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; }
@@ -1379,132 +1384,132 @@ 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;">Значения качества для последовательностей в формате FASTA будут записаны в соответствующий файл. Этот файл будет сохранен в ту же директорию, что и оригинальные последовательности и будет назван как файл FASTA, но с другим расширением: <span style=" font-weight:600; font-style:italic;">.qual</span></p></body></html> [...]
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="57"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="54"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="64"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="61"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="71"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="68"/>
         <source>Remove All</source>
         <translation>Удалить все</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="93"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="90"/>
         <source>Result contig</source>
         <translation>Результирующий контиг</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="102"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="99"/>
         <source>Path to result contig alignment in ACE format.</source>
         <translation>Путь до результирующего контига в формате ACE.</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="128"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="125"/>
         <source>Clipping for poor regions</source>
         <translation>Отсечение пустых регионов</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="134"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="131"/>
         <source>Base quality cutoff for clipping (-c)</source>
         <translation>Размер среза (-c)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="151"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="148"/>
         <source>Clipping range (-y)</source>
         <translation>Диапазон обрезания (-y)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="174"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="171"/>
         <source>Length and percent identity of an overlap</source>
         <translation>Длина и процент идентичности перекрытия</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="180"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="177"/>
         <source>Overlap length cutoff (-o)</source>
         <translation>Обрезная длина перекрытия (-o)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="200"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="197"/>
         <source>Overlap percent identity cutoff (-p)</source>
         <translation>Обрезной процент идентичности перекрытия (-p)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="223"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="220"/>
         <source>Quality difference score of an overlap</source>
         <translation>Оценка качества различия перекрытия</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="229"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="226"/>
         <source>Base quality cutoff for differences (-b)</source>
         <translation>Базовый срез для различий (-b)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="259"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="256"/>
         <source>Max qscore sum at differences (-d)</source>
         <translation>Максимальная сумма оценок для различий (-d)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="269"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="266"/>
         <source>Other parameters</source>
         <translation>Дополнительные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="275"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="272"/>
         <source>Max number of word matches (-t)</source>
         <translation>Максимальное число совпадений (-t)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="295"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="292"/>
         <source>Band expansion size (-a)</source>
         <translation>Размер расширения диапазона (-a)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="318"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="315"/>
         <source>Max gap length in any overlap (-f)</source>
         <translation>Максимальная длина пробела в перекрытии (-f)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="338"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="335"/>
         <source>Assembly reverse reads (-r)</source>
         <translation>Сборка обратных прочтений (-r)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="364"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="361"/>
         <source>Similarity score of an overlap</source>
         <translation>Оценка схожести перекрытия</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="370"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="367"/>
         <source>Mismatch score factor (-n)</source>
         <translation>Фактор оценки несовпадения (-n)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="390"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="387"/>
         <source>Overlap similarity score cutoff (-s)</source>
         <translation>Срез оценки схожести перекрытия (-s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="410"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="407"/>
         <source>Gap penalty factor (-g)</source>
         <translation>Фактор штрафа за пробел (-g)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="417"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="414"/>
         <source>Match score factor (-m)</source>
         <translation>Фактор оценки совпадений (-m)</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="112"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="109"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/CAP3SupportDialog.ui" line="122"/>
+        <location filename="../src/cap3/CAP3SupportDialog.ui" line="119"/>
         <source>Advanced</source>
         <translation>Дополнительно</translation>
     </message>
@@ -1512,58 +1517,58 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ClustalOSupportRunDialog</name>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="26"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="26"/>
         <source>Align with Clustal Omega</source>
         <translation>Выравнивание с помощью ClustalO</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="42"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="42"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="52"/>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="69"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="52"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="69"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="59"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="59"/>
         <source>Output file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="81"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="81"/>
         <source>Iteration</source>
         <translation>Итерация</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="91"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="91"/>
         <source>Number of iterations</source>
         <translation>Количество итераций</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="137"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="137"/>
         <source>Max number guidetree iterations</source>
         <translation>Максимальное число итераций дерева</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="180"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="180"/>
         <source>Max number of HMM iterations</source>
         <translation>Максимальное число итераций HMM</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="217"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="217"/>
         <source>Miscellaneous</source>
         <translation>Смешанные</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="227"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="227"/>
         <source>Number of CPUs being used</source>
         <translation>Использовать процессоров</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalOSupportRunDialog.ui" line="265"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="265"/>
         <source>Set options automatically</source>
         <translation>Установить параметры автоматически</translation>
     </message>
@@ -1571,118 +1576,118 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ClustalWSupportRunDialog</name>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="26"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="26"/>
         <source>Align with ClustalW</source>
         <translation>Выравнивание с помощью ClustalW</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="42"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="42"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="52"/>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="76"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="52"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="76"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="59"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="59"/>
         <source>Output file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="88"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="88"/>
         <source>Advanced options</source>
         <translation>Дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="98"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="98"/>
         <source>Gap opening penalty</source>
         <translation>Штраф за открытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="141"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="141"/>
         <source>Gap extension penalty</source>
         <translation>Штраф за промежуточный пробел</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="184"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="184"/>
         <source>Weight matrix</source>
         <translation>Весовая матрица</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="214"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="214"/>
         <source>IUB</source>
         <translation>IUB</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="219"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="219"/>
         <source>CLUSTALW</source>
         <translation>CLUSTALW</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="289"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="289"/>
         <source>Max iterations</source>
         <translation>Количество итераций</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="261"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="261"/>
         <source>NONE</source>
         <translation>Нет</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="266"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="266"/>
         <source>TREE</source>
         <translation>Дерево</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="271"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="271"/>
         <source>ALIGNMENT</source>
         <translation>Выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="231"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="231"/>
         <source>Iteration type</source>
         <translation>Тип итераций</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="335"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="335"/>
         <source>Out sequences order</source>
         <translation>Порядок последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="365"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="365"/>
         <source>Input</source>
         <translation>Входные</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="370"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="370"/>
         <source>Aligned</source>
         <translation>Выровненные</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="388"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="388"/>
         <source>Protein gap parameters</source>
         <translation>Параметры для белковых последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="398"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="398"/>
         <source>Gap separation distance</source>
         <translation>Расстояние между пробелами</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="456"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="456"/>
         <source>Residue-specific gaps off</source>
         <translation>Откл. специфические для остатков пробелы</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="442"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="442"/>
         <source>Hydrophilic gaps off</source>
         <translation>Отключить гидрофильные пробелы</translation>
     </message>
     <message>
-        <location filename="../src/ui/ClustalWSupportRunDialog.ui" line="449"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="449"/>
         <source>No end gap separation penalty</source>
         <translation>Не вводить штраф за разделение пробелов</translation>
     </message>
@@ -1690,52 +1695,52 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ETSSettingsWidget</name>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="26"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="26"/>
         <source>Resource settings</source>
         <translation>Настройки ресурсов</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="40"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="40"/>
         <source>You can select path for</source>
         <translation>Вы можете выбрать путь для</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="47"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="47"/>
         <source>Check lastest version of external tools package</source>
         <translation>Проверить наличие новой версии пакета внешних инструментов</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="50"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="50"/>
         <source><a href="http://ugene.unipro.ru/external.html">external tools package</a></source>
         <translation><a href="http://ugene.unipro.ru/external.html">пакет внешних инструментов</a></translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="70"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="70"/>
         <source>Browse...</source>
         <translation>Открыть...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="86"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="86"/>
         <source>Supported tools</source>
         <translation>Поддерживаемые программы</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="102"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="102"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="107"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="107"/>
         <source>Path</source>
         <translation>Путь</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="142"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="142"/>
         <source>Additional information</source>
         <translation>Дополнительная информация</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="177"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="177"/>
         <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; }
@@ -1748,12 +1753,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;">Выберите внешний инструмент, чтобы просмотреть дополнительную информацию о нем.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="197"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="197"/>
         <source>Binary path:</source>
         <translation>Путь:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ETSSettingsWidget.ui" line="207"/>
+        <location filename="../src/ETSSettingsWidget.ui" line="207"/>
         <source>Version info</source>
         <translation>Информация о версии</translation>
     </message>
@@ -1761,89 +1766,89 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>FormatDBSupportRunDialog</name>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="20"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="20"/>
         <source>Format Database</source>
         <translation>Форматирование базы данных</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="29"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="29"/>
         <source>Input data</source>
         <translation>Входные данные</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="35"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="35"/>
         <source>Select input file(s) for formatting database:</source>
         <translation>Выберите входной файл(ы) для форматирования базы данных:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="53"/>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="84"/>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="190"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="53"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="84"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="190"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="62"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="62"/>
         <source>Or select directory with input files:</source>
         <translation>Или выберите директорию со входными файлами:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="96"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="96"/>
         <source>File filter</source>
         <translation>Фильтр</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="104"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="104"/>
         <source>Include files filter</source>
         <translation>Включающий фильтр</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="114"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="114"/>
         <source>*.fa;*.fasta</source>
         <translation>*.fa;*.fasta</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="121"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="121"/>
         <source>Exclude files filter</source>
         <translation>Исключающий фильтр</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="131"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="131"/>
         <source>*.pal</source>
         <translation>*.pal</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="143"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="143"/>
         <source>Type of file(s)</source>
         <translation>Тип файла(ов)</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="149"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="149"/>
         <source>protein</source>
         <translation>белки</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="159"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="159"/>
         <source>nucleotide</source>
         <translation>нуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="172"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="172"/>
         <source>Output settings</source>
         <translation>Выходные настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="178"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="178"/>
         <source>Select the path to save the database into:</source>
         <translation>Выберите путь для сохранения базы данных:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="201"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="201"/>
         <source>Base name for BLAST files:</source>
         <translation>Базовое имя для файлов BLAST:</translation>
     </message>
     <message>
-        <location filename="../src/ui/FormatDBSupportRunDialog.ui" line="211"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="211"/>
         <source>Title for database file:</source>
         <translation>Название для файла базы данных:</translation>
     </message>
@@ -1878,43 +1883,43 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>MAFFTSupportRunDialog</name>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="20"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="20"/>
         <source>Align with MAFFT</source>
         <translation>Выравнивание с помощью MAFFT</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="36"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="36"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="46"/>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="63"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="46"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="63"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="53"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="53"/>
         <source>Output file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="75"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="75"/>
         <source>Advanced options</source>
         <translation>Дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="85"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="85"/>
         <source>Gap opening penalty</source>
         <translation>Штраф за открывающий пропуск</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="131"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="131"/>
         <source>Offset (works like gap extension penalty)</source>
         <translation>Смещение (работает как штраф за промежуточный пробел)</translation>
     </message>
     <message>
-        <location filename="../src/ui/MAFFTSupportRunDialog.ui" line="174"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="174"/>
         <source>Maximum number of iterative refinement</source>
         <translation>Максимальное число итераций</translation>
     </message>
@@ -1926,62 +1931,62 @@ p, li { white-space: pre-wrap; }
         <translation type="vanished">Настройки метода MrBayes</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="60"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="60"/>
         <source>Model</source>
         <translation>Настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="78"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="78"/>
         <source>ModelType</source>
         <translation>ModelType</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="95"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="95"/>
         <source>Rate</source>
         <translation>Показатель</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="118"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="118"/>
         <source>Gamma</source>
         <translation>Гамма</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="151"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="151"/>
         <source>MCMC</source>
         <translation>MCMC</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="163"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="163"/>
         <source>Chain length</source>
         <translation>Длина цепи</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="189"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="189"/>
         <source>Subsampling frequence</source>
         <translation>Размер выборки</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="221"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="221"/>
         <source>Burn-in length</source>
         <translation>Длина прожига</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="250"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="250"/>
         <source>Heated chains</source>
         <translation>Подогретые цепи</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="279"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="279"/>
         <source>Heated chain temp</source>
         <translation>Температура подогрева цепей</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="321"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="321"/>
         <source>Random seed</source>
         <translation>Затравка</translation>
     </message>
     <message>
-        <location filename="../src/ui/MrBayesDialog.ui" line="329"/>
+        <location filename="../src/mrbayes/MrBayesDialog.ui" line="329"/>
         <source>Display Options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1989,119 +1994,119 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PhyMLDialog</name>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="77"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="77"/>
         <source>Substitution model</source>
         <translation>Модель замен</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="98"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="98"/>
         <source>Equilibrium frequencies</source>
         <translation>Равновесные частоты</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="112"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="112"/>
         <source>optimized</source>
         <translation>оптимизированные</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="119"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="119"/>
         <source>empirical</source>
         <translation>эмпирические</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="293"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="293"/>
         <source>Transition / transversion ratio </source>
         <translation>Коэффициент перехода/трансверсии</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="139"/>
-        <location filename="../src/ui/PhyMLDialog.ui" line="171"/>
-        <location filename="../src/ui/PhyMLDialog.ui" line="289"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="190"/>
-        <location filename="../src/ui/PhyMLDialog.ui" line="212"/>
-        <location filename="../src/ui/PhyMLDialog.ui" line="243"/>
-        <location filename="../src/ui/PhyMLDialog.ui" line="265"/>
+        <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"/>
         <source>estimated </source>
         <translation>оценка</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="143"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="143"/>
         <source>Proportion of invariable sites</source>
         <translation>Доля неизменяемых сайтов</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="63"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="63"/>
         <source>Substitution Model</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="154"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="154"/>
         <source>Number of substitution rate categories</source>
         <translation>Число категорий коэффициента замещения</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="175"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="175"/>
         <source>Gamma shape parameter</source>
         <translation>Параметр формы Гамма</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="303"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="303"/>
         <source>Branch Support</source>
         <translation>Поддержка ветви</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="321"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="321"/>
         <source>Use fast likelihood-based method</source>
         <translation>Использовать быстрый метод максимального правдоподобия</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="353"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="353"/>
         <source>Perform bootstrap</source>
         <translation>Выполнить начальную загрузку</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="369"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="369"/>
         <source>It is the number of bootstrap replicates.</source>
         <translation>Это число начальных загрузок.</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="380"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="380"/>
         <source>Tree Searching</source>
         <translation>Поиск дерева</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="470"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="470"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="482"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="482"/>
         <source>Type of tree improvement</source>
         <translation>Тип улучшения дерева</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="499"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="499"/>
         <source>Set number of random starting tree</source>
         <translation>Установить число случайных начал дерева</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="515"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="515"/>
         <source>Optimise topology</source>
         <translation>Оптимизировать топологию</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="525"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="525"/>
         <source>Optimise branch lengths</source>
         <translation>Оптимизировать длину ветвей</translation>
     </message>
     <message>
-        <location filename="../src/ui/PhyMLDialog.ui" line="546"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="546"/>
         <source>Display Options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2230,80 +2235,85 @@ Uncheck to get the maximum likelihood estimate.</source>
     </message>
     <message>
         <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>
+    </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>NOTE: "bwtsw" алгоритм не поддерживается для работы с рефересными последовательностями, размер которых меньше 10 MB. В таком случае рекомендуется изменить алгоритм на "is"</translation>
+        <translation type="vanished">NOTE: "bwtsw" алгоритм не поддерживается для работы с рефересными последовательностями, размер которых меньше 10 MB. В таком случае рекомендуется изменить алгоритм на "is"</translation>
     </message>
 </context>
 <context>
     <name>SpadesSettings</name>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="20"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="20"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="30"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="30"/>
         <source>Base Options</source>
         <translation>Основные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="45"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="45"/>
         <source>Running mode</source>
         <translation>Режим запуска</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="59"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="59"/>
         <source>Error Correction and Assembly</source>
         <translation>Исправление ошибок и сборка</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="64"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="64"/>
         <source>Assembly only</source>
         <translation>Только сборка</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="69"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="69"/>
         <source>Error correction only</source>
         <translation>Только исправление ошибок</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="80"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="80"/>
         <source>k-mer sizes (-k)</source>
         <translation>размеры k-mer (-k)</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="99"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="99"/>
         <source>Dataset type</source>
         <translation>Тип набора данных</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="112"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="112"/>
         <source>auto</source>
         <translation>авто</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="120"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="120"/>
         <source>Multi Cell</source>
         <translation>Сложная ячейка</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="125"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="125"/>
         <source>Single Cell</source>
         <translation>Одиночная ячейка</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="142"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="142"/>
         <source>Memory limit GB (-m)</source>
         <translation>Предел памяти GB (-m)</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="158"/>
-        <location filename="../src/ui/SpadesSettings.ui" line="190"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="158"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="190"/>
         <source>Number of threads</source>
         <translation>Число потоков</translation>
     </message>
     <message>
-        <location filename="../src/ui/SpadesSettings.ui" line="174"/>
+        <location filename="../src/spades/SpadesSettings.ui" line="174"/>
         <source>Number of threads (-t)</source>
         <translation>Число потоков (-t)</translation>
     </message>
@@ -2311,43 +2321,43 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>TCoffeeSupportRunDialog</name>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="20"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="20"/>
         <source>Align with T-Coffee</source>
         <translation>Выравнивание с помощью T-Coffee</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="36"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="36"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="46"/>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="63"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="46"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="63"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="53"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="53"/>
         <source>Output file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="75"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="75"/>
         <source>Advanced options</source>
         <translation>Дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="83"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="83"/>
         <source>Gap opening penalty</source>
         <translation>Штраф за открывающий пропуск</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="122"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="122"/>
         <source>Gap extension penalty</source>
         <translation>Штраф за промежуточный пробел</translation>
     </message>
     <message>
-        <location filename="../src/ui/TCoffeeSupportRunDialog.ui" line="158"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="158"/>
         <source>Number of iterations</source>
         <translation>Количество итераций</translation>
     </message>
@@ -2672,7 +2682,7 @@ Uncheck to get the maximum likelihood estimate.</source>
         <translation type="vanished">Выберите файл базы данных</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.cpp" line="80"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.cpp" line="84"/>
         <source>Set a result FASTA file name</source>
         <translation>Выберите имя результирующего FASTA файла</translation>
     </message>
@@ -3101,22 +3111,36 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>U2::BwaAlignTask</name>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="92"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="105"/>
         <source>Short reads are not provided</source>
         <translation>Short reads are not provided</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="99"/>
         <source>In paired-end mode it possible to analyze only 2 read sets using BWA</source>
-        <translation>In paired-end mode it possible to analyze only 2 read sets using BWA</translation>
+        <translation type="vanished">In paired-end mode it possible to analyze only 2 read sets using BWA</translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaTask.cpp" line="123"/>
+        <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="194"/>
+        <source>Align reads with BWA Multitask</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaTask.cpp" line="235"/>
+        <source>Saming reads with BWA Multitask</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="217"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="286"/>
         <source>Log is incomplete</source>
         <translation>Log is incomplete</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="220"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="289"/>
         <source>Log is incorrect</source>
         <translation>Log is incorrect</translation>
     </message>
@@ -3124,20 +3148,29 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>U2::BwaMemAlignTask</name>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="242"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="312"/>
         <source>Short reads are not provided</source>
         <translation>Short reads are not provided</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="251"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="331"/>
+        <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="420"/>
+        <source>Align reads with BWA-MEM Multitask</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Wrong settings of paired reads. For paired-read alignment by BWA MEM only a single pair of reads is acceptable.</source>
-        <translation>Wrong settings of paired reads. For paired-read alignment by BWA MEM only a single pair of reads is acceptable.</translation>
+        <translation type="vanished">Wrong settings of paired reads. For paired-read alignment by BWA MEM only a single pair of reads is acceptable.</translation>
     </message>
 </context>
 <context>
     <name>U2::BwaMemSettingsWidget</name>
     <message>
-        <location filename="../src/bwa/BwaSettingsWidget.cpp" line="338"/>
+        <location filename="../src/bwa/BwaSettingsWidget.cpp" line="298"/>
         <source>NOTE: bwa mem accepts reads only in FASTA or FASTQ format. Reads should be compiled into a single file for each mate end.</source>
         <translation>NOTE: bwa mem принимает риды только в формате FASTA или FASTQ формате.</translation>
     </message>
@@ -3153,12 +3186,12 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>U2::BwaSwAlignTask</name>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="338"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="470"/>
         <source>Short reads are not provided</source>
         <translation>Short reads are not provided</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="348"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="480"/>
         <source>BWA SW can not align paired reads</source>
         <translation>BWA SW can not align paired reads</translation>
     </message>
@@ -3166,7 +3199,7 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>U2::BwaSwSettingsWidget</name>
     <message>
-        <location filename="../src/bwa/BwaSettingsWidget.cpp" line="270"/>
+        <location filename="../src/bwa/BwaSettingsWidget.cpp" line="230"/>
         <source>NOTE: bwa-sw performs alignment of long sequencing reads (Sanger or 454). It accepts reads only in FASTA or FASTQ format. Reads should be compiled into single file.</source>
         <translation>NOTE: bwa-sw выравнивает длинные риды. Принимает риды только в формате FASTA или FASTQ формате.</translation>
     </message>
@@ -3174,19 +3207,22 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>U2::BwaTask</name>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="479"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="620"/>
         <source>Multiple read files are not supported by bwa-sw. Please combine your reads into single FASTA file.</source>
         <translation>Multiple read files are not supported by bwa-sw. Please combine your reads into single FASTA file.</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="485"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="626"/>
+        <source>Please, provide same number of files with downstream and upstream reads.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Multiple read files are not supported by bwa-mem. Please combine your reads into single FASTA file.</source>
-        <translation>Multiple read files are not supported by bwa-mem. Please combine your reads into single FASTA file.</translation>
+        <translation type="vanished">Multiple read files are not supported by bwa-mem. Please combine your reads into single FASTA file.</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="488"/>
         <source>Please, provide two files with paired reads.</source>
-        <translation>Please, provide two files with paired reads.</translation>
+        <translation type="vanished">Please, provide two files with paired reads.</translation>
     </message>
 </context>
 <context>
@@ -3225,22 +3261,22 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>U2::CAP3SupportDialog</name>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="47"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="44"/>
         <source>Run</source>
         <translation>Запустить</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="89"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="97"/>
         <source>List of input files is empty!</source>
         <translation>Входные файлы не указаны!</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="101"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="109"/>
         <source>Result contig file name is not set!</source>
         <translation>Имя для выходного файла не указано!</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="107"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="115"/>
         <source>Destination file already exists.
 To overwrite the file, press 'Replace'.
 To save under other name press 'Cancel' and change name in 'Result contig' field.</source>
@@ -3249,30 +3285,29 @@ To save under other name press 'Cancel' and change name in 'Resul
 Чтобы сохранить под другим именем нажмите 'Отмена' и измените имя в поле 'Выходной контиг'.</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="110"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="118"/>
         <source>Replace</source>
         <translation>Переписать</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="139"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="147"/>
         <source>Add Sequences to Assembly</source>
         <translation>Добавить последовательности в сборку</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="170"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="86"/>
         <source>Set Result Contig File Name</source>
         <translation>Задать имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="48"/>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="111"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="45"/>
+        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="119"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/cap3/CAP3SupportDialog.cpp" line="170"/>
         <source>ACE format (*.ace)</source>
-        <translation>Формат ACE (*.ace)</translation>
+        <translation type="vanished">Формат ACE (*.ace)</translation>
     </message>
 </context>
 <context>
@@ -3353,12 +3388,12 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalOSupportRunDialog</name>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="55"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="49"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="56"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="50"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -3419,38 +3454,38 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalOWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="91"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="84"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="92"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="85"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="108"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="96"/>
         <source>Open an alignment file</source>
         <translation>Открыть выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="118"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="110"/>
         <source>Save an multiple alignment file</source>
         <translation>Сохранить выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="143"/>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="146"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="135"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="138"/>
         <source>Kalign with Align</source>
         <translation>Выравнивание с помощью Kalign</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="144"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="136"/>
         <source>Input file is not set!</source>
         <translation>Не указан входной файл!</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="147"/>
+        <location filename="../src/clustalo/ClustalOSupportRunDialog.cpp" line="139"/>
         <source>Output file is not set!</source>
         <translation>Не указан выходной файл!</translation>
     </message>
@@ -3502,12 +3537,12 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalWSupportRunDialog</name>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="52"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="46"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="53"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="47"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -3563,38 +3598,38 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalWWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="131"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="124"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="132"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="125"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="154"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="141"/>
         <source>Open an alignment file</source>
         <translation>Открыть выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="164"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="155"/>
         <source>Save an multiple alignment file</source>
         <translation>Сохранить выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="215"/>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="218"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="201"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="204"/>
         <source>Kalign with Align</source>
         <translation>Выравнивание с помощью Kalign</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="216"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="202"/>
         <source>Input file is not set!</source>
         <translation>Не указан входной файл!</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="219"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.cpp" line="205"/>
         <source>Output file is not set!</source>
         <translation>Не указан выходной файл!</translation>
     </message>
@@ -3761,7 +3796,7 @@ To save under other name press 'Cancel' and change name in 'Resul
         <translation>Unable to get an assembly object.</translation>
     </message>
     <message>
-        <location filename="../src/cufflinks/CufflinksSupportTask.cpp" line="233"/>
+        <location filename="../src/cufflinks/CufflinksSupportTask.cpp" line="235"/>
         <source>An internal error occurred during getting annotations from a %1 output file!</source>
         <translation>An internal error occurred during getting annotations from a %1 output file!</translation>
     </message>
@@ -3863,7 +3898,7 @@ To save under other name press 'Cancel' and change name in 'Resul
         <translation>Tool does not start.<br>It is possible that the specified executable file <i>%1</i> for %2 tool is invalid. You can change the path to the executable file in the external tool settings in the global preferences.</translation>
     </message>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="156"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="158"/>
         <source>Can not find expected message.<br>It is possible that the specified executable file <i>%1</i> for %2 tool is invalid. You can change the path to the executable file in the external tool settings in the global preferences.</source>
         <translation>Can not find expected message.<br>It is possible that the specified executable file <i>%1</i> for %2 tool is invalid. You can change the path to the executable file in the external tool settings in the global preferences.</translation>
     </message>
@@ -3871,7 +3906,7 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolSearchAndValidateTask</name>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="347"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="349"/>
         <source>Can not find expected message.<br>It is possible that the specified executable file <i>%1</i> for %2 tool is invalid. You can change the path to the executable file in the external tool settings in the global preferences.</source>
         <translation>Can not find expected message.<br>It is possible that the specified executable file <i>%1</i> for %2 tool is invalid. You can change the path to the executable file in the external tool settings in the global preferences.</translation>
     </message>
@@ -4104,12 +4139,12 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolsInstallTask</name>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="391"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="393"/>
         <source>Installing external tools</source>
         <translation>Installing external tools</translation>
     </message>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="396"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="398"/>
         <source> failed: </source>
         <translation> failed: </translation>
     </message>
@@ -4131,13 +4166,13 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolsValidateTask</name>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="362"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="364"/>
         <source>Checking external tools</source>
         <translation>Checking external tools</translation>
     </message>
     <message>
-        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="380"/>
         <location filename="../src/utils/ExternalToolValidateTask.cpp" line="382"/>
+        <location filename="../src/utils/ExternalToolValidateTask.cpp" line="384"/>
         <source> failed: </source>
         <translation> failed: </translation>
     </message>
@@ -4320,98 +4355,108 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::LocalWorkflow::BaseShortReadsAlignerWorker</name>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="247"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="238"/>
+        <source>Not enough upstream reads datasets</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="241"/>
+        <source>Not enough downstream reads datasets</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="276"/>
         <source>Output directory</source>
         <translation>Выходная директория</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="248"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="277"/>
         <source>Directory to save output files.</source>
         <translation>Директория для сохранения выходных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="251"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="280"/>
         <source>Reference genome</source>
         <translation>Референсный геном</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="252"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="281"/>
         <source>Path to indexed reference genome.</source>
         <translation>Путь до индексированного референсного генома.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="255"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="284"/>
         <source>Library</source>
         <translation>Библиотека</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="256"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="285"/>
         <source>Is this library mate-paired?</source>
         <translation>Это парная библиотека?</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="259"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="288"/>
         <source>Output file name</source>
         <translation>Имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="260"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="289"/>
         <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="292"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="321"/>
         <source>URL of a file with reads</source>
         <translation>Путь до файла с ридами</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="293"/>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="303"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="322"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="332"/>
         <source>Input reads to be aligned.</source>
         <translation>Входные риды будут выровнены.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="295"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="324"/>
         <source>URL of a file with mate reads</source>
         <translation>Путь до файла с ридами</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="296"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="325"/>
         <source>Input mate reads to be aligned.</source>
         <translation>Входные риды будут выровнены.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="302"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="331"/>
         <source>Input data</source>
         <translation>Входные данные</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="306"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="335"/>
         <source>Reverse FASTQ file</source>
         <translation>Обратный FASTQ файл</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="307"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="336"/>
         <source>Reverse paired reads to be aligned.</source>
         <translation>Обратные парные риды будут выровнены.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="319"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="348"/>
         <source>Assembly URL</source>
         <translation>Путь до сборки</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="320"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="349"/>
         <source>Output assembly URL.</source>
         <translation>Путь выходной сборки.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="323"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="352"/>
         <source>Output data</source>
         <translation>Выходные данные</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="324"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="353"/>
         <source>Output assembly files.</source>
         <translation>Выходные файлы сборки.</translation>
     </message>
@@ -6479,17 +6524,17 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="156"/>
         <source>The directory to store Conduct GO results.</source>
-        <translation>Директория для сохранения выходных Conduct GO файлов.</translation>
+        <translation>директория для сохранения выходных Conduct GO файлов.</translation>
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="158"/>
         <source>Title</source>
-        <translation>Название</translation>
+        <translation>Имя</translation>
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="159"/>
         <source>Title is used to name the output files - so make it meaningful.</source>
-        <translation>Название выходных файлов.</translation>
+        <translation>имя для выходных файлов.</translation>
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="161"/>
@@ -6499,7 +6544,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="162"/>
         <source>Select a gene universe.</source>
-        <translation>Выберите множество генов.</translation>
+        <translation>выберите множество генов.</translation>
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="197"/>
@@ -6509,7 +6554,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="198"/>
         <source>Given a list of genes, using Bioconductor (GO, GOstats) and  DAVID at NIH.</source>
-        <translation>Выдает список генов, используя Bioconductor (GO, GOstats) и  DAVID в NIH.</translation>
+        <translation>этот элемент выдает список генов, используя Bioconductor (GO, GOstats) и  DAVID в NIH.</translation>
     </message>
 </context>
 <context>
@@ -7569,32 +7614,32 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::MACSPrompter</name>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="570"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="571"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="577"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="578"/>
         <source>Uses <u>%1</u> as treatment</source>
         <translation>Использует <u>%1</u> в качестве обработки</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="579"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="580"/>
         <source> and <u>%1</u> as control</source>
         <translation> и <u>%1</u> в качестве контроля</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="582"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="583"/>
         <source> to call peaks.</source>
         <translation>вызова сигналов.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="584"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="585"/>
         <source> Outputs all files to <u>%1</u> directory</source>
         <translation> Сохраняет все выходные файлы в<u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="586"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="587"/>
         <source> and pileup with <u>%1</u> span</source>
         <translation> и накапливается в диапазоне <u>%1</u></translation>
     </message>
@@ -7602,262 +7647,267 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::MACSWorker</name>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="194"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="195"/>
         <source>Bad model fold region: %1. Default region is used</source>
         <translation>Bad model fold region: %1. Default region is used</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="261"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="195"/>
+        <source>unrecognized parsing error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/macs/MACSWorker.cpp" line="262"/>
         <source>Input control and treatment annotations are the same</source>
         <translation>Входные контрольные и обработанные аннотации одинаковы</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="275"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="276"/>
         <source>Treatment features</source>
         <translation>Treatment особенности</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="276"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="277"/>
         <source>ChIP-seq treatment features.</source>
         <translation>ChIP-seq treatment особенности.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="278"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="279"/>
         <source>Control features</source>
         <translation>Контрольные особенности</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="279"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="280"/>
         <source>Control features (Optional).</source>
         <translation>Контрольные особенности.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="284"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="285"/>
         <source>MACS data</source>
         <translation>Данные MACS</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="285"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="286"/>
         <source>ChIP-seq treatment features and control features (optional) to call peaks with MACS.</source>
         <translation>ChIP-seq treatment особенности и контрольные особенности для вызова пиков при помощи MACS.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="293"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="294"/>
         <source>Peak regions</source>
         <translation>Пиковые регионы</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="294"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="295"/>
         <source>Peak locations. Typically used in gene association study like CEAS, or correlation calculation.</source>
         <translation>Расположение пиков. Обычно используется в CEAS или расчете корреляции.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="296"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="297"/>
         <source>Peak summits</source>
         <translation>Пределы пиков</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="297"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="298"/>
         <source>Peak summits locations for every peaks. Typically used in DNA motif analysis or conservation check.</source>
         <translation>Расположение пределов для каждого пика.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="299"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="300"/>
         <source>Treatment fragments pileup (wiggle)</source>
         <translation>Накопление treatment фрагментов (wiggle)</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="300"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="301"/>
         <source>Wiggle format files which can be imported to UCSC genome browser/GMOD/Affy IGB.</source>
         <translation>Файлы формата wiggle, которые могут быть импортированы в геномный браузер/GMOD/Affy IGB.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="303"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="304"/>
         <source>MACS output data</source>
         <translation>Выходные данные MACS</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="304"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="305"/>
         <source>ChIP-seq peaks and summits. Pileup data (optional)</source>
         <translation>ChIP-seq пики и пределы. Накопленные данные</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="317"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="318"/>
         <source>Output directory</source>
         <translation>Выходная директория</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="318"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="319"/>
         <source>Directory to save MACS output files.</source>
         <translation>Директория для сохранения выходных файлов MACS.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="320"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="321"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="321"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="322"/>
         <source>The name string of the experiment. MACS will use this string NAME to create output files like 'NAME_peaks.xls', 'NAME_negative_peaks.xls', 'NAME_peaks.bed', 'NAME_summits.bed', 'NAME_model.r' and so on. So please avoid any confliction between these filenames and your existing files (--name).</source>
         <translation>Имя эксперимента. MACS будет использовать это имя для создания выходных файлов, например 'NAME_peaks.xls', 'NAME_negative_peaks.xls', 'NAME_peaks.bed', 'NAME_summits.bed', 'NAME_model.r' (--name).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="325"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="326"/>
         <source>Wiggle output</source>
         <translation>Выходной файл в формате wiggle</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="326"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="327"/>
         <source>If this flag is on, MACS will store the fragment pileup in wiggle format for the whole genome data instead of for every chromosomes (--wig) (--single-profile).</source>
         <translation>Если этот флаг установлен, MACS будет сохранять накопленные фрагменты в формате wiggle для всего генома вместо каждой отдельной хромосомы (--wig) (--single-profile).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="328"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="329"/>
         <source>Wiggle space</source>
         <translation>Пространство wiggle</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="329"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="330"/>
         <source>By default, the resolution for saving wiggle files is 10 bps,i.e., MACS will save the raw tag count every 10 bps. You can change it along with '--wig' option (--space).</source>
         <translation>По умолчанию, разрешение для сохранения файлов 10 нукл. Вы можете изменить это при помощи опции '--wig' (--space).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="332"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="333"/>
         <source>Genome size (Mbp)</source>
         <translation>Размер генома (Mbp)</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="333"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="334"/>
         <source>Homo sapience - 2700 Mbp<br>Mus musculus - 1870 Mbp<br>Caenorhabditis elegans - 90 Mbp<br>Drosophila melanogaster  - 120 Mbp<br> It's the mappable genome size or effective genome size which is defined as the genome size which can be sequenced. Because of the repetitive features on the chromosomes, the actual mappable genome size will be smaller than the original size, about 90% or 70% of the genome size (--gsize).</source>
         <translation>Homo sapience - 2700 Mbp<br>Mus musculus - 1870 Mbp<br>Caenorhabditis elegans - 90 Mbp<br>Drosophila melanogaster  - 120 Mbp<br>. Это графический размер генома или эффективный размер генома, который определяется как размер генома, который может быть упорядочен. Из-за повторяющихся особенностей на хромосомах, фактическое отображаемыми размер генома будет меньше исходного размера, приблизительно 90% или 70% от размера генома (--gsize).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="342"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="343"/>
         <source>P-value</source>
         <translation>P-значение</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="343"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="344"/>
         <source>P-value cutoff. Default is 0.00001, for looser results, try 0.001 instead (--pvalue).</source>
         <translation>P-значение среза. По умолчанию 0.00001 (--pvalue).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="345"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="346"/>
         <source>Q-value</source>
         <translation>Q-значение</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="346"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="347"/>
         <source>Minimum FDR (q-value) cutoff for peak detection.</source>
         <translation>Минимальный срез FDR для поиска пика.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="348"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="349"/>
         <source>Use model</source>
         <translation>Использовать модель</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="349"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="350"/>
         <source>Whether or not to use MACS paired peaks model (--nomodel).</source>
         <translation>Использовать или нет модель парных пиков MACS (--nomodel).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="351"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="352"/>
         <source>Model fold</source>
         <translation>Моедль сложения</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="352"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="353"/>
         <source>Select the regions within MFOLD range of high-confidence enrichment ratio against. <b>Model fold</b> is available when <b>Use model</b> is true, which is the foldchange to chose paired peaks to build paired peaks model. Users need to set a lower(smaller) and upper(larger) number for fold change so that MACS will only use the peaks within these foldchange range to build model (--mfold).</source>
         <translation><b>Модель сложения</b> доступна когда параметр<b>Использовать модель</b> истина. Необходимо выбрать нижнюю и верхнюю границы для этой модели, MACS будет использовать только пики из этого интервала для построения модели (--mfold).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="357"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="358"/>
         <source>Shift size</source>
         <translation>Величина сдвига</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="358"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="359"/>
         <source>An arbitrary shift value used as a half of the fragment size when model is not built. <b>Shift size</b> is available when <b>Use model</b> is false, which will represent the HALF of the fragment size of your sample. If your sonication and size selection size is 300 bps, after you trim out nearly 100 bps adapters, the fragment size is about 200 bps, so you can specify 100 here (--shiftsize).</source>
         <translation>Величина сдвига используется как половина размера фрагмента в том случае, когда модель не построена. <b>Величина сдвига</b> доступна когда параметр <b>Использовать модель</b> не истина (--shiftsize).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="363"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="364"/>
         <source>Keep duplicates</source>
         <translation>Сохранять дубликаты</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="364"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="365"/>
         <source>It controls the MACS behavior towards duplicate tags at the exact same location -- the same coordination and the same strand. The default <b>auto</b> option makes MACS calculate the maximum tags at the exact same location based on binomal distribution using 1e-5 as pvalue cutoff; and the <b>all</b> option keeps every tags. If an <b>integer</b> is given, at most this number of tags will be kept at the same location (--keep-dup).</source>
         <translation>Этот параметр контролирует поведение MACS для дубликатов, найденных в одном месте, с одинаковыми координатами и в одинаковой цепи (--keep-dup).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="368"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="369"/>
         <source>Band width</source>
         <translation>Ширина полосы</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="369"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="370"/>
         <source>The band width which is used to scan the genome for model building. You can set this parameter as the sonication fragment size expected from wet experiment. Used only while building the shifting model (--bw).</source>
         <translation>Ширина полосы, которая используется для сканирования генома для построения модели. Используется только при построении модели сдвига (--bw).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="373"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="374"/>
         <source>Extended fragment pileup</source>
         <translation>Накопления расширенного фрагмента</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="374"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="375"/>
         <source>Whether or not to generate extended fragment pileup, local lambda and score tracks at every bp.</source>
         <translation>Генерировать или нет накопления разширенного фрагмента.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="378"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="379"/>
         <source>Tag size (optional)</source>
         <translation>Размер ярлыка</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="379"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="380"/>
         <source>Length of reads. Determined from first 10 reads if not specified (input <b>0</b>) (--tsize).</source>
         <translation>Длина ридов. Определеятся из первых 10 ридов (--tsize).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="383"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="384"/>
         <source>Use lambda</source>
         <translation>Использовать лямбда</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="384"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="385"/>
         <source>Whether to use local lambda model which can use the local bias at peak regions to throw out false positives (--nolambda).</source>
         <translation>Следует ли использовать локальную модель лямбда (--nanolambda).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="386"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="387"/>
         <source>Small nearby region</source>
         <translation>Небольшой ближайший регион</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="387"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="388"/>
         <source>The small nearby region in basepairs to calculate dynamic lambda. This is used to capture the bias near the peak summit region. Invalid if there is no control data (--slocal).</source>
         <translation>Небольшой ближайший регион в парах оснований для расчета динамической лямбда. Это используется, чтобы захватить смещения вблизи области пика. (--local).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="390"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="391"/>
         <source>Large nearby region</source>
         <translation>Большой ближайший регион</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="391"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="392"/>
         <source>The large nearby region in basepairs to calculate dynamic lambda.  This is used to capture the surround bias (--llocal).</source>
         <translation>Большой ближайший регион в парах оснований для расчета динамической лямбда. Это используется, чтобы захватить объемные смещения (--local).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="394"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="395"/>
         <source>Auto bimodal</source>
         <translation>Авто бимодальный</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="395"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="396"/>
         <source>Whether turn on the auto pair model process.If set, when MACS failed to build paired model, it will use the nomodelsettings, the “Shift size” parameter to shift and extend each tags (--on-auto).</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7874,62 +7924,62 @@ bowtie медленнее, когда указан режим --best.</translati
         <translation type="vanished">Срез для широких регионов.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="399"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="400"/>
         <source>Scale to large</source>
         <translation>Масштаб для больших</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="400"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="401"/>
         <source> When set, scale the small sample up to the bigger sample.By default, the bigger dataset will be scaled down towards the smaller dataset,which will lead to smaller p/qvalues and more specific results.Keep in mind that scaling down will bring down background noise more (--to-large).</source>
         <translation>Когда установлено, масштаб увеличивается до большого. (--to-large).</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="405"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="406"/>
         <source>Shift control</source>
         <translation>Контроль сдвига</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="406"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="407"/>
         <source>When set, control tags will be shifted just as ChIP tags according to their strand before the extension of d, slocal and llocal. By default, control tags are extended centeredat their current positions regardless of strand. You may consider to turn this option on whilecomparing two ChIP datasets of different condition but the same factor.</source>
         <translation>Если установлен ярлыки управления будут сдвинуты как ChIP ярлыки.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="411"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="412"/>
         <source>Half-extend</source>
         <translation>Расширение наполовину</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="412"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="413"/>
         <source>When set, MACS extends 1/2 d size for each fragment centered at its middle point.</source>
         <translation>Когда установлен, MACS расширяет размер на 1/2 от размера для каждого фрагмента.</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="414"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="415"/>
         <source>Broad</source>
         <translation>Широкий</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="415"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="416"/>
         <source>If set, MACS will try to call broad peaks by linking nearby highly enriched regions.The linking region is controlled by another cutoff through “Broad cutoff”.The maximum linking region length is 4 times of d from MACS.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="419"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="420"/>
         <source>Broad cutoff</source>
         <translation>Широкий срез</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="420"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="421"/>
         <source>Cutoff for broad region. This option is not available unless “Broad” is set.If “P-value” is set, this is a pvalue cutoff, otherwise, it's a qvalue cutoff.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="548"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="549"/>
         <source>Find Peaks with MACS</source>
         <translation>Поиск пиков с помощью MACS</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="549"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="550"/>
         <source>Performs peak calling for ChIP-Seq data.</source>
         <translation>Выполняет поиск пиков для данных  ChIP-Seq.</translation>
     </message>
@@ -8055,7 +8105,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="333"/>
         <source> to annotate with genes nearby from <u>%1</u>.</source>
-        <translation> для аннотации генов рядом с  to <u>%1</u>.</translation>
+        <translation> для аннотации генов рядом с <u>%1</u>.</translation>
     </message>
 </context>
 <context>
@@ -8138,7 +8188,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="240"/>
         <source>Select which type of genes need to output. <b>up</b> for genes upstream to peak summit, <b>down</b> for genes downstream to peak summit, <b>all</b> for both <b>up</b> and <b>down</b> (--op).</source>
-        <translation>Выберите тип генов для выходных файлов <b>up</b> для вышележащих генов, <b>down</b> для нижележащих генов, <b>all</b> для обоих <b>up</b> и <b>down</b> (--op).</translation>
+        <translation>выберите тип генов для выходных файлов <b>up</b> для вышележащих генов, <b>down</b> для нижележащих генов, <b>all</b> для обоих <b>up</b> и <b>down</b>. Соответствует опции --op.</translation>
     </message>
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="245"/>
@@ -8148,7 +8198,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="246"/>
         <source>Output <b>official gene symbol</b> instead of <b>refseq name</b> (--symbol).</source>
-        <translation>Выходной <b>официальный символ гена</b> вместо <b>имени refseq</b> (--symbol).</translation>
+        <translation>выходной <b>официальный символ гена</b> вместо <b>имени refseq</b>. Соответствует опции --symbol.</translation>
     </message>
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="248"/>
@@ -8158,7 +8208,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="249"/>
         <source>Set a number which unit is base. It will get the refGenes in n bases from peak center (--distance).</source>
-        <translation>Установите число, которое является базовым. Он будет получать refGenes в n базах из центра пика (--distance).</translation>
+        <translation>установите число, которое является базовым. Он будет получать refGenes в n базах из центра пика. Соответствует опции --distance.</translation>
     </message>
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="251"/>
@@ -8168,7 +8218,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="252"/>
         <source>Select a genome file (sqlite3 file) to search refGenes (--genome).</source>
-        <translation>Выберите файл генома для (sqlite3 файл) для поиска refGenes (--genome).</translation>
+        <translation>выберите файл генома для (sqlite3 файл) для поиска refGenes. Соответствует опции --genome.</translation>
     </message>
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="307"/>
@@ -8178,7 +8228,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/peak2gene/Peak2GeneWorker.cpp" line="308"/>
         <source>Gets refGenes near the ChIP regions identified by a peak-caller.</source>
-        <translation>Получает refGenes рядом с регионами ChIP найденными поиском пиков.</translation>
+        <translation>этот элемент получает refGenes рядом с регионами ChIP найденными поиском пиков.</translation>
     </message>
 </context>
 <context>
@@ -8329,22 +8379,22 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::ShortReadsAlignerPrompter</name>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="340"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="369"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="346"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="375"/>
         <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="348"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="377"/>
         <source>Aligns reads from <u>%1</u> </source>
         <translation>Выравнивает риды из <u>%1</u> </translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="352"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="381"/>
         <source> to reference genome <u>%1</u>.</source>
         <translation> на референсный геном <u>%1</u>.</translation>
     </message>
@@ -9467,12 +9517,12 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::MAFFTSupportRunDialog</name>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="52"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="46"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="53"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="47"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -9544,38 +9594,38 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::MAFFTWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="84"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="76"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="85"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="77"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="100"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="86"/>
         <source>Open an alignment file</source>
         <translation>Открыть выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="110"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="100"/>
         <source>Save an multiple alignment file</source>
         <translation>Сохранить выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="134"/>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="137"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="119"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="122"/>
         <source>Kalign with Align</source>
         <translation>Выравнивание с помощью Kalign</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="135"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="120"/>
         <source>Input file is not set!</source>
         <translation>Не указан входной файл!</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="138"/>
+        <location filename="../src/mafft/MAFFTSupportRunDialog.cpp" line="123"/>
         <source>Output file is not set!</source>
         <translation>Не указан выходной файл!</translation>
     </message>
@@ -10059,6 +10109,25 @@ Set it empty if you want to run Tophat once for all input reads</source>
     </message>
 </context>
 <context>
+    <name>U2::SnpEffParser</name>
+    <message>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="59"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="81"/>
+        <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"/>
+        <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"/>
+        <source>Failed to download SnpEff database. Check your internet connection.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::SnpEffSupport</name>
     <message>
         <location filename="../src/snpeff/SnpEffSupport.cpp" line="49"/>
@@ -10069,7 +10138,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::SnpEffTask</name>
     <message>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="171"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="198"/>
         <source>SNPEff dataDir is not initialized.</source>
         <translation>SNPEff dataDir is not initialized.</translation>
     </message>
@@ -10204,12 +10273,12 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::TCoffeeSupportRunDialog</name>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="52"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="47"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="53"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="48"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -10275,38 +10344,38 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::TCoffeeWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="83"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="76"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="84"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="77"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="98"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="86"/>
         <source>Open an alignment file</source>
         <translation>Открыть выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="108"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="100"/>
         <source>Save an multiple alignment file</source>
         <translation>Сохранить выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="132"/>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="135"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="119"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="122"/>
         <source>Kalign with Align</source>
         <translation>Выравнивание с помощью Kalign</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="133"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="120"/>
         <source>Input file is not set!</source>
         <translation>Не указан входной файл!</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="136"/>
+        <location filename="../src/tcoffee/TCoffeeSupportRunDialog.cpp" line="123"/>
         <source>Output file is not set!</source>
         <translation>Не указан выходной файл!</translation>
     </message>
@@ -10376,7 +10445,12 @@ Set it empty if you want to run Tophat once for all input reads</source>
         <translation>Preparing TopHatSupportTask internal error: unable to get a sequence object!</translation>
     </message>
     <message>
-        <location filename="../src/tophat/TopHatSupportTask.cpp" line="280"/>
+        <location filename="../src/tophat/TopHatSupportTask.cpp" line="262"/>
+        <source>TopHat was not able to map reads to the reference.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tophat/TopHatSupportTask.cpp" line="284"/>
         <source>There are no accepted hits in the result</source>
         <translation>There are no accepted hits in the result</translation>
     </message>
@@ -10478,9 +10552,9 @@ Set it empty if you want to run Tophat once for all input reads</source>
         <translation type="unfinished">Только один из этих слотов должен быть связан: '%1', '%2'</translation>
     </message>
     <message>
-        <location filename="../src/macs/MACSWorker.cpp" line="235"/>
+        <location filename="../src/macs/MACSWorker.cpp" line="236"/>
         <location filename="../src/spades/SpadesWorker.cpp" line="189"/>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="224"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="253"/>
         <source>The slot must be not empty: '%1'</source>
         <translation type="unfinished">Слот не должен быть пустым: '%1'</translation>
     </message>
diff --git a/src/plugins/genome_aligner/CMakeLists.txt b/src/plugins/genome_aligner/CMakeLists.txt
new file mode 100644
index 0000000..fd80ef2
--- /dev/null
+++ b/src/plugins/genome_aligner/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME genome_aligner)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/genome_aligner/genome_aligner.pro b/src/plugins/genome_aligner/genome_aligner.pro
index 346bb41..a0b9a02 100644
--- a/src/plugins/genome_aligner/genome_aligner.pro
+++ b/src/plugins/genome_aligner/genome_aligner.pro
@@ -20,9 +20,9 @@ HEADERS += src/BuildSArraySettingsWidget.h \
            src/WriteAlignedReadsSubTask.h \
            src/DataBunch.h
 
-FORMS += src/ui/BuildSuffixArraySettings.ui \
-         src/ui/GenomeAlignerSettings.ui \
-         src/ui/GenomeAlignerSettingsWidget.ui
+FORMS += src/BuildSuffixArraySettings.ui \
+         src/GenomeAlignerSettings.ui \
+         src/GenomeAlignerSettingsWidget.ui
 SOURCES += src/BuildSArraySettingsWidget.cpp \
            src/GenomeAlignerCMDLineTask.cpp \
            src/GenomeAlignerFindTask.cpp \
diff --git a/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.h b/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.h
index d0b2fe5..7682ef6 100644
--- a/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.h
+++ b/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.h
@@ -22,7 +22,7 @@
 #ifndef _DIST_BUILD_SARRAY_WIDGET_H_
 #define _DIST_BUILD_SARRAY_WIDGET_H_
 
-#include "ui/ui_BuildSuffixArraySettings.h"
+#include "ui_BuildSuffixArraySettings.h"
 #include "U2View/DnaAssemblyGUIExtension.h"
 
 namespace U2{
diff --git a/src/plugins/genome_aligner/src/ui/BuildSuffixArraySettings.ui b/src/plugins/genome_aligner/src/BuildSuffixArraySettings.ui
similarity index 100%
rename from src/plugins/genome_aligner/src/ui/BuildSuffixArraySettings.ui
rename to src/plugins/genome_aligner/src/BuildSuffixArraySettings.ui
diff --git a/src/plugins/genome_aligner/src/ui/GenomeAlignerSettings.ui b/src/plugins/genome_aligner/src/GenomeAlignerSettings.ui
similarity index 100%
rename from src/plugins/genome_aligner/src/ui/GenomeAlignerSettings.ui
rename to src/plugins/genome_aligner/src/GenomeAlignerSettings.ui
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.cpp b/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.cpp
index 8bfd33e..56bd95a 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.cpp
@@ -73,7 +73,7 @@ AppSettingsGUIPageWidget* GenomeAlignerSettingsPageController::createWidget(AppS
     return r;
 }
 
-const QString GenomeAlignerSettingsPageController::helpPageId = QString("17467525");
+const QString GenomeAlignerSettingsPageController::helpPageId = QString("17470452");
 
 GenomeAlignerSettingsPageWidget::GenomeAlignerSettingsPageWidget(GenomeAlignerSettingsPageController* ) {
     setupUi(this);
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.h b/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.h
index 12d0e4f..240fb6a 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_GA_SETTINGS_GUI_CONTROLLER_H_
 #define _U2_GA_SETTINGS_GUI_CONTROLLER_H_
 
-#include <ui/ui_GenomeAlignerSettingsWidget.h>
+#include <ui_GenomeAlignerSettingsWidget.h>
 
 #include <U2Gui/AppSettingsGUI.h>
 
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.h b/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.h
index b16ae9c..cff8f5f 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.h
@@ -22,7 +22,7 @@
 #ifndef _DIST_MATRIX_MODEL_WIDGET_H_
 #define _DIST_MATRIX_MODEL_WIDGET_H_
 
-#include "ui/ui_GenomeAlignerSettings.h"
+#include "ui_GenomeAlignerSettings.h"
 #include "U2View/DnaAssemblyGUIExtension.h"
 
 namespace U2{
diff --git a/src/plugins/genome_aligner/src/ui/GenomeAlignerSettingsWidget.ui b/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.ui
similarity index 100%
rename from src/plugins/genome_aligner/src/ui/GenomeAlignerSettingsWidget.ui
rename to src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.ui
diff --git a/src/plugins/genome_aligner/transl/english.ts b/src/plugins/genome_aligner/transl/english.ts
index f6f0ee2..cb7993b 100644
--- a/src/plugins/genome_aligner/transl/english.ts
+++ b/src/plugins/genome_aligner/transl/english.ts
@@ -4,12 +4,12 @@
 <context>
     <name>BuildSuffixArraySettings</name>
     <message>
-        <location filename="../src/ui/BuildSuffixArraySettings.ui" line="29"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="29"/>
         <source>Reference fragmentation</source>
         <translation>Reference fragmentation</translation>
     </message>
     <message>
-        <location filename="../src/ui/BuildSuffixArraySettings.ui" line="43"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="43"/>
         <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; }
@@ -26,12 +26,12 @@ p, li { white-space: pre-wrap; }
              amount of memory used during the alignment.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BuildSuffixArraySettings.ui" line="103"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="103"/>
         <source>Total memory usage:</source>
         <translation>Total memory usage:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BuildSuffixArraySettings.ui" line="130"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="130"/>
         <source>System memory size:</source>
         <translation>System memory size:</translation>
     </message>
@@ -39,64 +39,64 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>GenomeAlignerSettings</name>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="14"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="36"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="36"/>
         <source>Chech this box if mismatches between the reference sequence and the reads are allowed.</source>
         <translation>Check this box if mismatches between the reference sequence and the reads are allowed.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="39"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="39"/>
         <source>Mismatches allowed</source>
         <translation>Mismatches allowed</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="53"/>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="79"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="53"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="79"/>
         <source>Select the number of mismatched nucleotides allowed.</source>
         <translation>Select the number of mismatched nucleotides allowed.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="92"/>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="118"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="92"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="118"/>
         <source>Select the percentage of mismatches allowed. Note, that absolute number of mismatches can vary for different reads.</source>
         <translation>Select the percentage of mismatches allowed. Note, that absolute number of mismatches can vary for different reads.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="56"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="56"/>
         <source>Mismatches number</source>
         <translation>Mismatches number</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="30"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="30"/>
         <source>Common parameters</source>
         <translation>Common parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="95"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="95"/>
         <source>Percentage of mismatches</source>
         <translation>Percentage of mismatches</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="148"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="148"/>
         <source>Set short reads aligning options.</source>
         <translation>Set short reads aligning options.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="171"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="171"/>
         <source>Use both the read and its reverse complement during aligning.</source>
         <translation>Use both the read and its reverse complement during aligning.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="174"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="174"/>
         <source>Align reverse complement reads</source>
         <translation>Align reverse complement reads</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="184"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="184"/>
         <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; }
@@ -109,68 +109,68 @@ 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;">Report only about best alignments (in terms of mismatches).</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="191"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="191"/>
         <source>Use "best"-mode during the alignment</source>
         <translation>Use "best"-mode during the alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="246"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="246"/>
         <source>Use an openCL-enabled GPU during the aligning.</source>
         <translation>Use an openCL-enabled GPU during the aligning.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="249"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="249"/>
         <source>Use GPU-optimization</source>
         <translation>Use GPU-optimization</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="275"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="275"/>
         <source>Advanced parameters</source>
         <translation>Advanced parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="281"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="281"/>
         <source>Maximum memory for short reads</source>
         <translation>Maximum memory for short reads</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="331"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="331"/>
         <source>Total memory usage:</source>
         <translation>Total memory usage:</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="374"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="374"/>
         <source>System memory size:</source>
         <translation>System memory size:</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="416"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="416"/>
         <source>Index parameters</source>
         <translation>Index parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="422"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="422"/>
         <source>Reference fragmentation</source>
         <translation>Reference fragmentation</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="482"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="482"/>
         <source>Index memory usage size:</source>
         <translation>Index memory usage size:</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="545"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="545"/>
         <source>Directory for index files:</source>
         <translation>Directory for index files:</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="201"/>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="227"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="201"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="227"/>
         <source>Omit reads with qualities lower than the specified value. Reads that have no qualities are not omited.</source>
         <translation>Omit reads with qualities lower than the specified value. Reads that have no qualities are not omited.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="289"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="289"/>
         <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; }
@@ -185,7 +185,7 @@ p, li { white-space: pre-wrap; }
                  </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="430"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="430"/>
         <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; }
@@ -202,27 +202,27 @@ p, li { white-space: pre-wrap; }
                  amount of memory used during the alignment.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="513"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="535"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="535"/>
         <source>Specify an index to build during execution of the selected short reads aligning algorithm. If this option is selected, the value is <b>required</b>.</source>
         <translation>Specify an index to build during execution of the selected short reads aligning algorithm. If this option is selected, the value is <b>required</b>.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="528"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="528"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="151"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="151"/>
         <source>Align options</source>
         <translation>Align options</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="204"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="204"/>
         <source>Omit reads with qualities lower than</source>
         <translation>Omit reads with qualities lower than</translation>
     </message>
@@ -230,17 +230,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>GenomeAlignerSettingsWidget</name>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettingsWidget.ui" line="14"/>
+        <location filename="../src/GenomeAlignerSettingsWidget.ui" line="14"/>
         <source>Genome aligner settings</source>
         <translation>Genome aligner settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettingsWidget.ui" line="20"/>
+        <location filename="../src/GenomeAlignerSettingsWidget.ui" line="20"/>
         <source>Directories</source>
         <translation>Directories</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettingsWidget.ui" line="26"/>
+        <location filename="../src/GenomeAlignerSettingsWidget.ui" line="26"/>
         <source>Directory for built indexes</source>
         <translation>Directory for built indexes</translation>
     </message>
diff --git a/src/plugins/genome_aligner/transl/russian.ts b/src/plugins/genome_aligner/transl/russian.ts
index 7f6e72f..839209f 100644
--- a/src/plugins/genome_aligner/transl/russian.ts
+++ b/src/plugins/genome_aligner/transl/russian.ts
@@ -4,12 +4,12 @@
 <context>
     <name>BuildSuffixArraySettings</name>
     <message>
-        <location filename="../src/ui/BuildSuffixArraySettings.ui" line="29"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="29"/>
         <source>Reference fragmentation</source>
         <translation>Разбиение референса</translation>
     </message>
     <message>
-        <location filename="../src/ui/BuildSuffixArraySettings.ui" line="43"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="43"/>
         <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; }
@@ -26,12 +26,12 @@ p, li { white-space: pre-wrap; }
              количество памяти, используемое для выравнивания.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/BuildSuffixArraySettings.ui" line="103"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="103"/>
         <source>Total memory usage:</source>
         <translation>Использование памяти:</translation>
     </message>
     <message>
-        <location filename="../src/ui/BuildSuffixArraySettings.ui" line="130"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="130"/>
         <source>System memory size:</source>
         <translation>Доступно памяти:</translation>
     </message>
@@ -39,64 +39,64 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>GenomeAlignerSettings</name>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="14"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="36"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="36"/>
         <source>Chech this box if mismatches between the reference sequence and the reads are allowed.</source>
         <translation>Отметьте этот чекбокс если допускается несоответствие с референсной последовательностью.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="39"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="39"/>
         <source>Mismatches allowed</source>
         <translation>Допустимо несоответствий</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="53"/>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="79"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="53"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="79"/>
         <source>Select the number of mismatched nucleotides allowed.</source>
         <translation>Задайте допустимое число несоответствий.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="92"/>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="118"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="92"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="118"/>
         <source>Select the percentage of mismatches allowed. Note, that absolute number of mismatches can vary for different reads.</source>
         <translation>Задайте допустимое число несоответствий в процентах.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="56"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="56"/>
         <source>Mismatches number</source>
         <translation>Число несоответствий</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="30"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="30"/>
         <source>Common parameters</source>
         <translation>Общие параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="95"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="95"/>
         <source>Percentage of mismatches</source>
         <translation>Доля несоответствий</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="148"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="148"/>
         <source>Set short reads aligning options.</source>
         <translation>Установите настройки выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="171"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="171"/>
         <source>Use both the read and its reverse complement during aligning.</source>
         <translation>Использовать риды и обратно-комплементарные риды в процессе выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="174"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="174"/>
         <source>Align reverse complement reads</source>
         <translation>Выровнять обратно-комплементарные риды</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="184"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="184"/>
         <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; }
@@ -109,68 +109,68 @@ 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/ui/GenomeAlignerSettings.ui" line="191"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="191"/>
         <source>Use "best"-mode during the alignment</source>
         <translation>Использовать "best" режим в процессе выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="246"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="246"/>
         <source>Use an openCL-enabled GPU during the aligning.</source>
         <translation>Использовать доступные openCL GPU в процессе выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="249"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="249"/>
         <source>Use GPU-optimization</source>
         <translation>Использовать GPU оптимизацию</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="275"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="275"/>
         <source>Advanced parameters</source>
         <translation>Дополнительные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="281"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="281"/>
         <source>Maximum memory for short reads</source>
         <translation>Максимум требуемой памяти</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="331"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="331"/>
         <source>Total memory usage:</source>
         <translation>Использовано памяти:</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="374"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="374"/>
         <source>System memory size:</source>
         <translation>Доступно памяти:</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="416"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="416"/>
         <source>Index parameters</source>
         <translation>Параметры для индекса</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="422"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="422"/>
         <source>Reference fragmentation</source>
         <translation>Разбиение референса</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="482"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="482"/>
         <source>Index memory usage size:</source>
         <translation>Использование памяти для индекса:</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="545"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="545"/>
         <source>Directory for index files:</source>
         <translation>Директория для индексных файлов:</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="201"/>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="227"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="201"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="227"/>
         <source>Omit reads with qualities lower than the specified value. Reads that have no qualities are not omited.</source>
         <translation>Пропустить риды с качеством ниже указанного значения. Риды, которые не имеют оценки качества не пропускаются.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="289"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="289"/>
         <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; }
@@ -185,7 +185,7 @@ p, li { white-space: pre-wrap; }
                  </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="430"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="430"/>
         <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; }
@@ -202,27 +202,27 @@ p, li { white-space: pre-wrap; }
              количество памяти, используемое для выравнивания.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="513"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="535"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="535"/>
         <source>Specify an index to build during execution of the selected short reads aligning algorithm. If this option is selected, the value is <b>required</b>.</source>
         <translation>Укажите индексный файл для выравнивания выбранным алгоритмом. Если опция выбрана, то значение <b>обязательно</b>.</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="528"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="528"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="151"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="151"/>
         <source>Align options</source>
         <translation>Настройки выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettings.ui" line="204"/>
+        <location filename="../src/GenomeAlignerSettings.ui" line="204"/>
         <source>Omit reads with qualities lower than</source>
         <translation>Пропустить риды с качеством менее чем</translation>
     </message>
@@ -230,17 +230,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>GenomeAlignerSettingsWidget</name>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettingsWidget.ui" line="14"/>
+        <location filename="../src/GenomeAlignerSettingsWidget.ui" line="14"/>
         <source>Genome aligner settings</source>
         <translation>Настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettingsWidget.ui" line="20"/>
+        <location filename="../src/GenomeAlignerSettingsWidget.ui" line="20"/>
         <source>Directories</source>
         <translation>Директории</translation>
     </message>
     <message>
-        <location filename="../src/ui/GenomeAlignerSettingsWidget.ui" line="26"/>
+        <location filename="../src/GenomeAlignerSettingsWidget.ui" line="26"/>
         <source>Directory for built indexes</source>
         <translation>Директория для сохранения индекса</translation>
     </message>
diff --git a/src/plugins/linkdata_support/CMakeLists.txt b/src/plugins/linkdata_support/CMakeLists.txt
new file mode 100644
index 0000000..5d2e15e
--- /dev/null
+++ b/src/plugins/linkdata_support/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME linkdata_support)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp b/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp
index b0be4de..cc5fa3a 100644
--- a/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp
+++ b/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp
@@ -35,11 +35,25 @@
 
 namespace U2 {
 
-    extern "C" Q_DECL_EXPORT Plugin * U2_PLUGIN_INIT_FUNC() {
+extern "C" Q_DECL_EXPORT Plugin * U2_PLUGIN_INIT_FUNC() {
     OpenCLSupportPlugin * plug = new OpenCLSupportPlugin();
     return plug;
 }
 
+extern "C" Q_DECL_EXPORT bool U2_PLUGIN_VERIFY_FUNC() {
+    {
+        volatile OpenCLSupportPlugin plug;
+        Q_UNUSED(plug);
+    }
+    return true;
+}
+
+extern "C" Q_DECL_EXPORT QString * U2_PLUGIN_FAIL_MASSAGE_FUNC() {
+    return new QString(OpenCLSupportPlugin::tr("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>").arg("http://ugene.net/using-video-cards.html"));
+}
+
 const static char * RESOURCE_OPENCL_GPU_NAME = "OpenCLGpu";
 
 OpenCLSupportPlugin::OpenCLSupportPlugin() : Plugin(tr("OpenCL Support"),
@@ -49,7 +63,7 @@ OpenCLSupportPlugin::OpenCLSupportPlugin() : Plugin(tr("OpenCL Support"),
     OpenCLGpuRegistry* registry = AppContext::getOpenCLGpuRegistry();
     registry->setOpenCLHelper(&openCLHelper);
 
-    OpenCLSupportError err = obtainGpusInfo( err_str );
+    err = obtainGpusInfo( err_str );
     if( err_str.isEmpty() && gpus.empty() ) {
         err_str = "No OpenCL-enabled GPUs found.";
     }
@@ -78,6 +92,10 @@ OpenCLSupportPlugin::~OpenCLSupportPlugin() {
     registry->setOpenCLHelper(NULL);
 }
 
+OpenCLSupportPlugin::OpenCLSupportError OpenCLSupportPlugin::getError() const {
+    return err;
+}
+
 
 QString OpenCLSupportPlugin::getSettingsErrorString( OpenCLSupportError err ) {
     switch(err) {
diff --git a/src/plugins/opencl_support/src/OpenCLSupportPlugin.h b/src/plugins/opencl_support/src/OpenCLSupportPlugin.h
index 6e0dca6..49eefe6 100644
--- a/src/plugins/opencl_support/src/OpenCLSupportPlugin.h
+++ b/src/plugins/opencl_support/src/OpenCLSupportPlugin.h
@@ -41,6 +41,8 @@ public:
 
     OpenCLSupportPlugin();
     ~OpenCLSupportPlugin();
+
+    OpenCLSupportError getError() const;
 private:
     OpenCLSupportError obtainGpusInfo( QString & err );
     void loadGpusSettings();
@@ -51,7 +53,9 @@ private:
     static QString getSettingsErrorString( OpenCLSupportError err );
 
     QList<OpenCLGpuModel *> gpus;
-    OpenCLHelper openCLHelper;
+    OpenCLHelper            openCLHelper;
+
+    OpenCLSupportError      err;
 };
 
 }
diff --git a/src/plugins/opencl_support/src/OpenCLSupportSettingsController.cpp b/src/plugins/opencl_support/src/OpenCLSupportSettingsController.cpp
index a9d67d1..65204c1 100644
--- a/src/plugins/opencl_support/src/OpenCLSupportSettingsController.cpp
+++ b/src/plugins/opencl_support/src/OpenCLSupportSettingsController.cpp
@@ -74,7 +74,7 @@ AppSettingsGUIPageWidget * OpenCLSupportSettingsPageController::createWidget( Ap
     return w;
 }
 
-const QString OpenCLSupportSettingsPageController::helpPageId = QString("17467523");
+const QString OpenCLSupportSettingsPageController::helpPageId = QString("17470450");
 
 OpenCLSupportSettingsPageState::OpenCLSupportSettingsPageState( int num_gpus ) {
     assert( num_gpus >= 0 );
diff --git a/src/plugins/orf_marker/CMakeLists.txt b/src/plugins/orf_marker/CMakeLists.txt
new file mode 100644
index 0000000..7d2eb39
--- /dev/null
+++ b/src/plugins/orf_marker/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME orf_marker)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/orf_marker/orf_marker.pro b/src/plugins/orf_marker/orf_marker.pro
index 14d2055..81a563a 100644
--- a/src/plugins/orf_marker/orf_marker.pro
+++ b/src/plugins/orf_marker/orf_marker.pro
@@ -7,7 +7,7 @@ HEADERS += src/ORFDialog.h \
            src/ORFMarkerTests.h \
            src/ORFQuery.h \
            src/ORFWorker.h
-FORMS += src/ui/ORFDialogUI.ui
+FORMS += src/ORFDialogUI.ui
 SOURCES += src/ORFDialog.cpp \
            src/ORFMarkerPlugin.cpp \
            src/ORFMarkerTask.cpp \
diff --git a/src/plugins/orf_marker/src/ORFDialog.cpp b/src/plugins/orf_marker/src/ORFDialog.cpp
index dd3143b..32dfa55 100644
--- a/src/plugins/orf_marker/src/ORFDialog.cpp
+++ b/src/plugins/orf_marker/src/ORFDialog.cpp
@@ -79,7 +79,7 @@ ORFDialog::ORFDialog(ADVSequenceObjectContext* _ctx)
 : QDialog(_ctx->getAnnotatedDNAView()->getWidget()), aaUpdateTask(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467725");
+    new HelpButton(this, buttonBox, "17470658");
 
     tabWidget->setCurrentIndex(0);
 
@@ -105,7 +105,7 @@ ORFDialog::ORFDialog(ADVSequenceObjectContext* _ctx)
 
     connect(AppContext::getTaskScheduler(), SIGNAL(si_stateChanged(Task*)), SLOT(sl_onTaskFinished(Task*)));
     connect(timer, SIGNAL(timeout()), SLOT(sl_onTimer()));
-    QMenu* m = ctx->createTranslationsMenu();
+    QMenu* m = ctx->createGeneticCodeMenu();
     foreach(QAction* a, m->actions()) {
         transCombo->addItem(a->text(), qVariantFromValue<QAction*>(a));
         if (a->isChecked()) transCombo->setCurrentIndex(transCombo->count()-1);
diff --git a/src/plugins/orf_marker/src/ORFDialog.h b/src/plugins/orf_marker/src/ORFDialog.h
index 7301c42..2943455 100644
--- a/src/plugins/orf_marker/src/ORFDialog.h
+++ b/src/plugins/orf_marker/src/ORFDialog.h
@@ -22,7 +22,7 @@
 #ifndef _U2_ORFDIALOG_H_
 #define _U2_ORFDIALOG_H_
 
-#include "ui/ui_ORFDialogUI.h"
+#include "ui_ORFDialogUI.h"
 
 #include <U2Core/global.h>
 #include <U2Core/U2Region.h>
diff --git a/src/plugins/orf_marker/src/ui/ORFDialogUI.ui b/src/plugins/orf_marker/src/ORFDialogUI.ui
similarity index 100%
rename from src/plugins/orf_marker/src/ui/ORFDialogUI.ui
rename to src/plugins/orf_marker/src/ORFDialogUI.ui
diff --git a/src/plugins/orf_marker/src/ORFMarkerTask.cpp b/src/plugins/orf_marker/src/ORFMarkerTask.cpp
index 0358a17..3ec1877 100644
--- a/src/plugins/orf_marker/src/ORFMarkerTask.cpp
+++ b/src/plugins/orf_marker/src/ORFMarkerTask.cpp
@@ -123,7 +123,7 @@ QList<Task *> FindORFsToAnnotationsTask::onSubTaskFinished(Task *subTask) {
 // ORFs auto annotation updater
 
 ORFAutoAnnotationsUpdater::ORFAutoAnnotationsUpdater()
-: AutoAnnotationsUpdater(tr("ORFs"), ORFAlgorithmSettings::ANNOTATION_GROUP_NAME)
+: AutoAnnotationsUpdater(tr("ORFs"), ORFAlgorithmSettings::ANNOTATION_GROUP_NAME, false, true)
 {
 
 }
@@ -138,9 +138,7 @@ Task* ORFAutoAnnotationsUpdater::createAutoAnnotationsUpdateTask( const AutoAnno
     cfg.circularSearch = dnaObj->isCircular();
 
     cfg.complementTT = GObjectUtils::findComplementTT(dnaObj->getAlphabet());
-    if (cfg.proteinTT == NULL) {
-        cfg.proteinTT = GObjectUtils::findAminoTT(dnaObj,false);
-    }
+    cfg.proteinTT = aa->getAminoTT();
 
     const U2Region wholeSequenceRegion = U2Region(0, dnaObj->getSequenceLength());
     cfg.searchRegion = cfg.searchRegion.intersect(wholeSequenceRegion);
diff --git a/src/plugins/pcr/CMakeLists.txt b/src/plugins/pcr/CMakeLists.txt
new file mode 100644
index 0000000..12f3c64
--- /dev/null
+++ b/src/plugins/pcr/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME pcr)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/pcr/html/report.html b/src/plugins/pcr/html/report.html
index 5839c28..1460bbf 100644
--- a/src/plugins/pcr/html/report.html
+++ b/src/plugins/pcr/html/report.html
@@ -1,6 +1,7 @@
 <!DOCTYPE html>
 <html>
 <head>
+<meta charset="utf-8">
 <style type="text/css">
     .chapter-content {
         margin-left: 50px;
diff --git a/src/plugins/pcr/pcr.pro b/src/plugins/pcr/pcr.pro
index 4025055..d64860d 100644
--- a/src/plugins/pcr/pcr.pro
+++ b/src/plugins/pcr/pcr.pro
@@ -33,14 +33,14 @@ HEADERS += src/EditPrimerDialog.h \
            src/import/ImportPrimersFromFolderTask.h \
            src/import/ImportPrimersMultiTask.h \
 
-FORMS += src/ui/EditPrimerDialog.ui \
-         src/ui/ExportPrimersDialog.ui \
-         src/ui/ImportPrimersDialog.ui \
-         src/ui/InSilicoPcrOptionPanelWidget.ui \
-         src/ui/PrimerGroupBox.ui \
-         src/ui/PrimerLibrarySelector.ui \
-         src/ui/PrimerLibraryWidget.ui \
-         src/ui/PrimersDetailsDialog.ui
+FORMS += src/EditPrimerDialog.ui \
+         src/export/ExportPrimersDialog.ui \
+         src/import/ImportPrimersDialog.ui \
+         src/InSilicoPcrOptionPanelWidget.ui \
+         src/PrimerGroupBox.ui \
+         src/PrimerLibrarySelector.ui \
+         src/PrimerLibraryWidget.ui \
+         src/PrimersDetailsDialog.ui
 
 SOURCES += src/EditPrimerDialog.cpp \
            src/ExtractProductTask.cpp \
diff --git a/src/plugins/pcr/src/EditPrimerDialog.cpp b/src/plugins/pcr/src/EditPrimerDialog.cpp
index 2f6f9c8..760a670 100644
--- a/src/plugins/pcr/src/EditPrimerDialog.cpp
+++ b/src/plugins/pcr/src/EditPrimerDialog.cpp
@@ -50,9 +50,10 @@ EditPrimerDialog::EditPrimerDialog(QWidget *parent, const Primer &editToPrimer)
 void EditPrimerDialog::init() {
     GCOUNTER(cvar, tvar, "Add primer in library");
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467823");
+    new HelpButton(this, buttonBox, "17470749");
+
+    primerEdit->setValidator(new PrimerValidator(this));
 
-    primerEdit->setValidator(new QRegExpValidator(QRegExp("[acgtACGT]+")));
     connect(primerEdit, SIGNAL(textEdited(const QString &)), SLOT(sl_onPrimerChanged(const QString &)));
 
     connect(primerEdit, SIGNAL(textChanged(const QString &)), SLOT(sl_validate()));
diff --git a/src/plugins/pcr/src/EditPrimerDialog.h b/src/plugins/pcr/src/EditPrimerDialog.h
index 17884df..d0da989 100644
--- a/src/plugins/pcr/src/EditPrimerDialog.h
+++ b/src/plugins/pcr/src/EditPrimerDialog.h
@@ -30,7 +30,7 @@
 
 namespace U2 {
 
-class EditPrimerDialog : public QDialog, private Ui::EditPrimerDialog {
+class EditPrimerDialog : public QDialog, private Ui_EditPrimerDialog {
     Q_OBJECT
 public:
     EditPrimerDialog(QWidget *parent);
diff --git a/src/plugins/pcr/src/ui/EditPrimerDialog.ui b/src/plugins/pcr/src/EditPrimerDialog.ui
similarity index 100%
rename from src/plugins/pcr/src/ui/EditPrimerDialog.ui
rename to src/plugins/pcr/src/EditPrimerDialog.ui
diff --git a/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp b/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp
index 02df8d4..bb66096 100644
--- a/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp
+++ b/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp
@@ -30,7 +30,7 @@
 
 namespace U2 {
 
-const QString InSilicoPcrOPWidgetFactory::GROUP_DOC_PAGE = "17467821";
+const QString InSilicoPcrOPWidgetFactory::GROUP_DOC_PAGE = "17470747";
 
 InSilicoPcrOPWidgetFactory::InSilicoPcrOPWidgetFactory()
 : OPWidgetFactory()
diff --git a/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.cpp b/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.cpp
index 3d84120..af99777 100644
--- a/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.cpp
+++ b/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.cpp
@@ -53,8 +53,11 @@ namespace {
 }
 
 InSilicoPcrOptionPanelWidget::InSilicoPcrOptionPanelWidget(AnnotatedDNAView *annotatedDnaView)
-    : QWidget(), annotatedDnaView(annotatedDnaView), pcrTask(NULL), resultTableShown(false),
-    savableWidget(this, GObjectViewUtils::findViewByName(annotatedDnaView->getName()))
+    : QWidget(),
+      annotatedDnaView(annotatedDnaView),
+      pcrTask(NULL),
+      resultTableShown(false),
+      savableWidget(this, GObjectViewUtils::findViewByName(annotatedDnaView->getName()))
 {
     GCOUNTER(cvar, tvar, "PCR options panel");
     setupUi(this);
@@ -65,6 +68,9 @@ InSilicoPcrOptionPanelWidget::InSilicoPcrOptionPanelWidget(AnnotatedDNAView *ann
     annsComboBox->addItem(tr("All intersected"), ExtractProductSettings::All);
     annsComboBox->addItem(tr("None"), ExtractProductSettings::None);
 
+    forwardPrimerBox->setAnnotatedDnaView(annotatedDnaView);
+    reversePrimerBox->setAnnotatedDnaView(annotatedDnaView);
+
     connect(forwardPrimerBox, SIGNAL(si_primerChanged()), SLOT(sl_onPrimerChanged()));
     connect(reversePrimerBox, SIGNAL(si_primerChanged()), SLOT(sl_onPrimerChanged()));
     connect(findProductButton, SIGNAL(clicked()), SLOT(sl_findProduct()));
diff --git a/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.h b/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.h
index 11b5eb7..bcd942b 100644
--- a/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.h
+++ b/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.h
@@ -33,7 +33,7 @@ class AnnotatedDNAView;
 class InSilicoPcrTask;
 class PrimerGroupBox;
 
-class InSilicoPcrOptionPanelWidget : public QWidget, public Ui::InSilicoPcrOptionPanelWidget {
+class InSilicoPcrOptionPanelWidget : public QWidget, public Ui_InSilicoPcrOptionPanelWidget {
     Q_OBJECT
 public:
     InSilicoPcrOptionPanelWidget(AnnotatedDNAView *annotatedDnaView);
diff --git a/src/plugins/pcr/src/ui/InSilicoPcrOptionPanelWidget.ui b/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.ui
similarity index 100%
rename from src/plugins/pcr/src/ui/InSilicoPcrOptionPanelWidget.ui
rename to src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.ui
diff --git a/src/plugins/pcr/src/InSilicoPcrProductsTable.cpp b/src/plugins/pcr/src/InSilicoPcrProductsTable.cpp
index 472867a..6134306 100644
--- a/src/plugins/pcr/src/InSilicoPcrProductsTable.cpp
+++ b/src/plugins/pcr/src/InSilicoPcrProductsTable.cpp
@@ -26,7 +26,8 @@
 #include <U2View/ADVSequenceWidget.h>
 
 #include "InSilicoPcrTask.h"
-#include "PrimerGroupBox.h"
+#include "Primer.h"
+#include "PrimerStatistics.h"
 
 #include "InSilicoPcrProductsTable.h"
 
@@ -72,7 +73,9 @@ void InSilicoPcrProductsTable::setCurrentProducts(const QList<InSilicoPcrProduct
         QTableWidgetItem *regionItem = new QTableWidgetItem(QString("%1 - %2").arg(startPos).arg(endPos));
         setItem(row, 0, regionItem);
         setItem(row, 1, new QTableWidgetItem(QString::number(product.region.length)));
-        setItem(row, 2, new QTableWidgetItem(PrimerGroupBox::getDoubleStringValue(product.ta)));
+        setItem(row, 2, new QTableWidgetItem(product.ta != Primer::INVALID_TM
+                ? PrimerStatistics::getDoubleStringValue(product.ta)
+                : tr("N/A")));
         row++;
     }
     if (row > 0) {
diff --git a/src/plugins/pcr/src/InSilicoPcrTask.cpp b/src/plugins/pcr/src/InSilicoPcrTask.cpp
index 7979e1b..0d5082e 100644
--- a/src/plugins/pcr/src/InSilicoPcrTask.cpp
+++ b/src/plugins/pcr/src/InSilicoPcrTask.cpp
@@ -26,6 +26,7 @@
 #include <U2Core/DNATranslation.h>
 #include <U2Core/L10n.h>
 
+#include "Primer.h"
 #include "PrimerStatistics.h"
 
 #include "InSilicoPcrTask.h"
@@ -41,7 +42,8 @@ InSilicoPcrTaskSettings::InSilicoPcrTaskSettings()
 }
 
 InSilicoPcrProduct::InSilicoPcrProduct()
-: ta(0.0), forwardPrimerMatchLength(0), reversePrimerMatchLength(0)
+    : forwardPrimerMatchLength(0),
+      reversePrimerMatchLength(0)
 {
 
 }
@@ -72,6 +74,7 @@ FindAlgorithmTaskSettings InSilicoPcrTask::getFindPatternSettings(U2Strand::Dire
     result.searchRegion.length = settings.sequence.length();
     result.patternSettings = FindAlgorithmPatternSettings_Subst;
     result.strand = FindAlgorithmStrand_Both;
+    result.useAmbiguousBases = true;
 
     if (U2Strand::Direct == direction) {
         result.pattern = settings.forwardPrimer;
@@ -162,8 +165,8 @@ bool InSilicoPcrTask::checkPerfectMatch(const U2Region &region, QByteArray prime
     SAFE_POINT(sequence.length() == primer.length(), L10N::internalError("Wrong match length"), false);
 
     int perfectMatch = qMin(sequence.length(), int(settings.perfectMatch));
-    for (int i=0; i<perfectMatch; i++) {
-        if (sequence.at(sequence.length() - 1 - i) != primer.at(primer.length() - 1 - i)) {
+    for (int i = 0; i < perfectMatch; i++) {
+        if (!FindAlgorithm::cmpAmbiguous(sequence.at(sequence.length() - 1 - i), primer.at(primer.length() - 1 - i))) {
             return false;
         }
     }
@@ -171,7 +174,13 @@ bool InSilicoPcrTask::checkPerfectMatch(const U2Region &region, QByteArray prime
 }
 
 QByteArray InSilicoPcrTask::getSequence(const U2Region &region, U2Strand::Direction direction) const {
-    const QByteArray sequence = settings.sequence.mid(region.startPos, region.length);
+    QByteArray sequence;
+    if (settings.isCircular && region.endPos() > settings.sequence.size()) {
+        sequence = settings.sequence.mid(region.startPos, settings.sequence.size() - region.startPos);
+        sequence += settings.sequence.mid(0, region.endPos() - settings.sequence.size());
+    } else {
+        sequence = settings.sequence.mid(region.startPos, region.length);
+    }
     if (U2Strand::Complementary == direction) {
         return DNASequenceUtils::reverseComplement(sequence);
     }
@@ -179,17 +188,22 @@ QByteArray InSilicoPcrTask::getSequence(const U2Region &region, U2Strand::Direct
 }
 
 QString InSilicoPcrTask::generateReport() const {
-    PrimersPairStatistics calc(settings.forwardPrimer, settings.reversePrimer);
     QString spaces;
     for (int i=0; i<150; i++) {
         spaces += " ";
     }
-    return tr("Products found: %1").arg(results.size()) +
-           "<br>" +
-           spaces +
-           "<br>" +
-           tr("Primers details:") +
-           calc.generateReport();
+    if (PrimerStatistics::validate(settings.forwardPrimer) && PrimerStatistics::validate(settings.reversePrimer)) {
+        PrimersPairStatistics calc(settings.forwardPrimer, settings.reversePrimer);
+        return tr("Products found: %1").arg(results.size()) +
+                "<br>" +
+                spaces +
+                "<br>" +
+                tr("Primers details:") +
+                calc.generateReport();
+    }
+
+    return tr("Products found: %1. <br><br>"
+              "The detailed information about primers is not available as primers or sequence contain a character from the Extended DNA alphabet.").arg(results.size());
 }
 
 InSilicoPcrProduct InSilicoPcrTask::createResult(const U2Region &leftPrimer, const U2Region &product, const U2Region &rightPrimer, U2Strand::Direction direction) const {
@@ -201,7 +215,9 @@ InSilicoPcrProduct InSilicoPcrTask::createResult(const U2Region &leftPrimer, con
 
     InSilicoPcrProduct result;
     result.region = product;
-    result.ta = PrimerStatistics::getAnnealingTemperature(productSequence, settings.forwardPrimer, settings.reversePrimer);
+    result.ta = PrimerStatistics::getAnnealingTemperature(productSequence,
+                                                          direction == U2Strand::Direct ? settings.forwardPrimer : settings.reversePrimer,
+                                                          direction == U2Strand::Direct ? settings.reversePrimer : settings.forwardPrimer);
     result.forwardPrimerMatchLength = leftPrimer.length;
     result.reversePrimerMatchLength = rightPrimer.length;
     result.forwardPrimer = settings.forwardPrimer;
@@ -209,6 +225,7 @@ InSilicoPcrProduct InSilicoPcrTask::createResult(const U2Region &leftPrimer, con
     if (U2Strand::Complementary == direction) {
         qSwap(result.forwardPrimer, result.reversePrimer);
     }
+
     return result;
 }
 
diff --git a/src/plugins/pcr/src/Primer.cpp b/src/plugins/pcr/src/Primer.cpp
index 0f5744b..4941644 100644
--- a/src/plugins/pcr/src/Primer.cpp
+++ b/src/plugins/pcr/src/Primer.cpp
@@ -23,6 +23,8 @@
 
 namespace U2 {
 
+const double Primer::INVALID_GC = -1;
+const double Primer::INVALID_TM = -1;
 Primer::Primer()
 : U2Entity(), gc(0.0), tm(0.0)
 {
diff --git a/src/plugins/pcr/src/Primer.h b/src/plugins/pcr/src/Primer.h
index 2c1ae0c..44597d2 100644
--- a/src/plugins/pcr/src/Primer.h
+++ b/src/plugins/pcr/src/Primer.h
@@ -43,6 +43,8 @@ public:
     double tm;
 
     static const int MAX_LEN = 1024;
+    static const double INVALID_TM;
+    static const double INVALID_GC;
 };
 
 } // U2
diff --git a/src/plugins/pcr/src/PrimerDimersFinder.cpp b/src/plugins/pcr/src/PrimerDimersFinder.cpp
index a629a70..cc4988a 100644
--- a/src/plugins/pcr/src/PrimerDimersFinder.cpp
+++ b/src/plugins/pcr/src/PrimerDimersFinder.cpp
@@ -44,7 +44,7 @@ QString DimerFinderResult::getShortReport() const {
 static QMap<QByteArray, qreal> initEnergyMap() {
     QMap<QByteArray, qreal> initializedEnergyMap;
 
-    /*The pairwise dG� values for DNA are taken from article:
+    /*The pairwise dG values for DNA are taken from article:
     Breslauer, K.,J., Frank, R., Blocker, H., and Marky, L.A. (1986) Predicting DNA duplex
     stability from the base sequence, Proc. Natl. Acad. Sci. USA 83:3746-3750.*/
 
@@ -263,3 +263,4 @@ QString HeteroDimersFinder::getDimersOverlapping(int dimerFormationPos) {
 }
 
 } // U2
+
diff --git a/src/plugins/pcr/src/PrimerGroupBox.cpp b/src/plugins/pcr/src/PrimerGroupBox.cpp
index 1ce649e..959d645 100644
--- a/src/plugins/pcr/src/PrimerGroupBox.cpp
+++ b/src/plugins/pcr/src/PrimerGroupBox.cpp
@@ -21,21 +21,35 @@
 
 #include <QMainWindow>
 
+#include <U2Algorithm/FindAlgorithmTask.h>
+
 #include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequenceObject.h>
 #include <U2Core/DNASequenceUtils.h>
-#include <U2Gui/MainWindow.h>
+#include <U2Core/DNATranslationImpl.h>
+#include <U2Core/L10n.h>
+#include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/TextUtils.h>
+#include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <U2Core/QObjectScopedPointer.h>
+#include <U2Gui/MainWindow.h>
+
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
 
 #include "PrimerGroupBox.h"
 #include "PrimerLibrarySelector.h"
 #include "PrimerStatistics.h"
 
+
 namespace U2 {
 
 PrimerGroupBox::PrimerGroupBox(QWidget *parent)
-: QWidget(parent)
+    : QWidget(parent),
+      findPrimerTask(NULL),
+      annotatedDnaView(NULL)
 {
     setupUi(this);
 
@@ -44,13 +58,18 @@ PrimerGroupBox::PrimerGroupBox(QWidget *parent)
     connect(browseButton, SIGNAL(clicked()), SLOT(sl_browse()));
 }
 
-void PrimerGroupBox::sl_onPrimerChanged(const QString &sequence) {
-    QString characteristics;
-    if (!sequence.isEmpty()) {
-        characteristics += getTmString(sequence) + ", ";
-        characteristics += QString::number(sequence.length()) + tr("-mer");
+void PrimerGroupBox::setAnnotatedDnaView(AnnotatedDNAView *dnaView) {
+    cancelFindPrimerTask();
+    annotatedDnaView = dnaView;
+    connect(annotatedDnaView, SIGNAL(si_focusChanged(ADVSequenceWidget*,ADVSequenceWidget*)), SLOT(sl_focusChanged()));
+}
+
+void PrimerGroupBox::sl_onPrimerChanged(const QString &primer) {
+    if (PrimerStatistics::validate(primer) || primer.isEmpty() || annotatedDnaView == NULL) {
+        updateStatistics(primer);
+    } else {
+        findPrimerAlternatives(primer);
     }
-    characteristicsLabel->setText(characteristics);
 
     emit si_primerChanged();
 }
@@ -79,16 +98,101 @@ void PrimerGroupBox::sl_browse() {
     primerEdit->setInvalidatedText(result.sequence);
 }
 
-QString PrimerGroupBox::getDoubleStringValue(double value) {
-    QString result = QString::number(value, 'f', 2);
-    result.remove(QRegExp("\\.?0+$"));
-    return result;
+void PrimerGroupBox::sl_findPrimerTaskStateChanged() {
+    SAFE_POINT(findPrimerTask != NULL, "Catched the taskStateChanged of unknown task", );
+
+    CHECK(findPrimerTask->isFinished() || findPrimerTask->isCanceled() || findPrimerTask->hasError(), );
+
+    if (!findPrimerTask->getStateInfo().isCoR()) {
+        QList<FindAlgorithmResult> results = findPrimerTask->popResults();
+        if (results.size() == 1) {
+            // in case of the sequence context was changed the task is canceled
+            ADVSequenceObjectContext *sequenceContext = annotatedDnaView->getSequenceInFocus();
+            SAFE_POINT(NULL != sequenceContext, L10N::nullPointerError("Sequence Context"), );
+            U2SequenceObject *sequenceObject = sequenceContext->getSequenceObject();
+            SAFE_POINT(NULL != sequenceObject, L10N::nullPointerError("Sequence Object"), );
+
+            QByteArray primerOnSeq = sequenceObject->getSequenceData(results.first().region);
+            if (results.first().strand == U2Strand::Complementary) {
+                SAFE_POINT(findPrimerTask->getSettings().complementTT != NULL, L10N::nullPointerError("Complement Translation"), );
+                findPrimerTask->getSettings().complementTT->translate(primerOnSeq.data(), primerOnSeq.length());
+                TextUtils::reverse(primerOnSeq.data(), primerOnSeq.length());
+            }
+            updateStatistics(QString(primerOnSeq));
+        }
+    }
+    findPrimerTask = NULL;
+    disconnect(this, SLOT(sl_findPrimerTaskStateChanged()));
+}
+
+void PrimerGroupBox::sl_focusChanged() {
+    cancelFindPrimerTask();
+    if (annotatedDnaView->getSequenceInFocus() != NULL) {
+        sl_onPrimerChanged(primerEdit->text());
+    } else {
+        annotatedDnaView = NULL;
+    }
 }
 
 QString PrimerGroupBox::getTmString(const QString &sequence) {
     double tm = PrimerStatistics::getMeltingTemperature(sequence.toLocal8Bit());
-    QString tmString = getDoubleStringValue(tm);
-    return tr("Tm = ") + tmString + QString::fromLatin1("\x00B0") + "C";
+    QString tmString = tm != Primer::INVALID_TM ? PrimerStatistics::getDoubleStringValue(tm) + QString::fromLatin1("\x00B0") + "C" : tr("N/A");
+    return tr("Tm = ") + tmString;
+}
+
+void PrimerGroupBox::findPrimerAlternatives(const QString& primer) {
+    cancelFindPrimerTask();
+    updateStatistics(primer);
+
+    FindAlgorithmTaskSettings settings;
+
+    SAFE_POINT(annotatedDnaView != NULL, L10N::nullPointerError("Annotated DNA view"), );
+    ADVSequenceObjectContext *sequenceContext = annotatedDnaView->getSequenceInFocus();
+    SAFE_POINT(NULL != sequenceContext, L10N::nullPointerError("Sequence Context"), );
+    U2SequenceObject *sequenceObject = sequenceContext->getSequenceObject();
+    SAFE_POINT(NULL != sequenceObject, L10N::nullPointerError("Sequence Object"), );
+
+    U2OpStatusImpl os;
+    settings.sequence = sequenceObject->getWholeSequenceData(os);
+
+    settings.searchIsCircular = sequenceObject->isCircular();
+    settings.searchRegion.length = sequenceObject->getSequenceLength();
+    settings.patternSettings = FindAlgorithmPatternSettings_Subst;
+    settings.strand = FindAlgorithmStrand_Both;
+    settings.useAmbiguousBases = true;
+    settings.pattern = primer.toLatin1();
+
+    const DNAAlphabet *alphabet = AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_EXTENDED());
+    SAFE_POINT(NULL != alphabet, L10N::nullPointerError("DNA Alphabet"), );
+    DNATranslation *translator = AppContext::getDNATranslationRegistry()->lookupComplementTranslation(alphabet);
+    SAFE_POINT(NULL != translator, L10N::nullPointerError("DNA Translator"), );
+    settings.complementTT = translator;
+
+    findPrimerTask = new FindAlgorithmTask(settings);
+    connect(findPrimerTask, SIGNAL(si_stateChanged()), this, SLOT(sl_findPrimerTaskStateChanged()));
+
+    AppContext::getTaskScheduler()->registerTopLevelTask(findPrimerTask);
+}
+
+void PrimerGroupBox::cancelFindPrimerTask() {
+    if (findPrimerTask != NULL) {
+        disconnect(this, SLOT(sl_findPrimerTaskStateChanged()));
+        if(!findPrimerTask->isCanceled() && findPrimerTask->getState() != Task::State_Finished){
+            findPrimerTask->cancel();
+        }
+        findPrimerTask = NULL;
+    }
+}
+
+void PrimerGroupBox::updateStatistics(const QString &primer) {
+    QString characteristics;
+
+    if (!primer.isEmpty()) {
+        characteristics += getTmString(primer) + ", ";
+        characteristics += QString::number(primer.length()) + tr("-mer");
+    }
+
+    characteristicsLabel->setText(characteristics);
 }
 
 } // U2
diff --git a/src/plugins/pcr/src/PrimerGroupBox.h b/src/plugins/pcr/src/PrimerGroupBox.h
index b3977e1..8a9e25a 100644
--- a/src/plugins/pcr/src/PrimerGroupBox.h
+++ b/src/plugins/pcr/src/PrimerGroupBox.h
@@ -26,26 +26,41 @@
 
 namespace U2 {
 
-class PrimerGroupBox : public QWidget, public Ui::PrimerGroupBox {
+class ADVSequenceObjectContext;
+class AnnotatedDNAView;
+class FindAlgorithmTask;
+class U2SequenceObject;
+
+class PrimerGroupBox : public QWidget, public Ui_PrimerGroupBox {
     Q_OBJECT
 public:
     PrimerGroupBox(QWidget *parent);
+    void setAnnotatedDnaView(AnnotatedDNAView* dnaView);
 
     QByteArray getPrimer() const;
     uint getMismatches() const;
 
-    static QString getDoubleStringValue(double value);
-
 signals:
     void si_primerChanged();
 
 private slots:
-    void sl_onPrimerChanged(const QString &sequence);
+    void sl_onPrimerChanged(const QString &primer);
     void sl_translate();
     void sl_browse();
 
+    void sl_findPrimerTaskStateChanged();
+    void sl_focusChanged();
+
 private:
     static QString getTmString(const QString &sequence);
+
+    void findPrimerAlternatives(const QString& primer);
+    void cancelFindPrimerTask();
+
+    void updateStatistics(const QString &primer);
+
+    FindAlgorithmTask* findPrimerTask;
+    AnnotatedDNAView*   annotatedDnaView;
 };
 
 } // U2
diff --git a/src/plugins/pcr/src/ui/PrimerGroupBox.ui b/src/plugins/pcr/src/PrimerGroupBox.ui
similarity index 100%
rename from src/plugins/pcr/src/ui/PrimerGroupBox.ui
rename to src/plugins/pcr/src/PrimerGroupBox.ui
diff --git a/src/plugins/pcr/src/PrimerLibrary.cpp b/src/plugins/pcr/src/PrimerLibrary.cpp
index e8deadf..4aed8a4 100644
--- a/src/plugins/pcr/src/PrimerLibrary.cpp
+++ b/src/plugins/pcr/src/PrimerLibrary.cpp
@@ -177,17 +177,24 @@ void PrimerLibrary::removePrimer(const Primer &primer, U2OpStatus &os) {
 }
 
 void PrimerLibrary::addRawPrimer(Primer primer, U2OpStatus &os) {
-    PrimerStatisticsCalculator calc(primer.sequence.toLocal8Bit());
-    primer.gc = calc.getGC();
-    primer.tm = calc.getTm();
+    setTmAndGcOfPrimer(primer);
     addPrimer(primer, os);
 }
 
 void PrimerLibrary::updateRawPrimer(Primer primer, U2OpStatus &os) {
-    PrimerStatisticsCalculator calc(primer.sequence.toLocal8Bit());
-    primer.gc = calc.getGC();
-    primer.tm = calc.getTm();
+    setTmAndGcOfPrimer(primer);
     updatePrimer(primer, os);
 }
 
+void PrimerLibrary::setTmAndGcOfPrimer(Primer &primer) {
+    if (PrimerStatistics::validate(primer.sequence)) {
+        PrimerStatisticsCalculator calc(primer.sequence.toLocal8Bit());
+        primer.gc = calc.getGC();
+        primer.tm = calc.getTm();
+    } else {
+        primer.gc = Primer::INVALID_GC;
+        primer.tm = Primer::INVALID_TM;
+    }
+}
+
 } // U2
diff --git a/src/plugins/pcr/src/PrimerLibrary.h b/src/plugins/pcr/src/PrimerLibrary.h
index 5375db7..d460275 100644
--- a/src/plugins/pcr/src/PrimerLibrary.h
+++ b/src/plugins/pcr/src/PrimerLibrary.h
@@ -60,6 +60,7 @@ signals:
 
 private:
     static void initPrimerUdr(U2OpStatus &os);
+    static void setTmAndGcOfPrimer(Primer& primer);
 
     PrimerLibrary(DbiConnection *connection);
 
diff --git a/src/plugins/pcr/src/PrimerLibrarySelector.cpp b/src/plugins/pcr/src/PrimerLibrarySelector.cpp
index 3c205a4..5953dbe 100644
--- a/src/plugins/pcr/src/PrimerLibrarySelector.cpp
+++ b/src/plugins/pcr/src/PrimerLibrarySelector.cpp
@@ -36,7 +36,7 @@ PrimerLibrarySelector::PrimerLibrarySelector(QWidget *parent)
 {
     GCOUNTER(cvar, tvar, "PrimerLibrarySelector");
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467821");
+    new HelpButton(this, buttonBox, "17470747");
 
     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 a8386c7..509cd6a 100644
--- a/src/plugins/pcr/src/PrimerLibrarySelector.h
+++ b/src/plugins/pcr/src/PrimerLibrarySelector.h
@@ -30,7 +30,7 @@
 
 namespace U2 {
 
-class PrimerLibrarySelector : public QDialog, Ui::PrimerLibrarySelector {
+class PrimerLibrarySelector : public QDialog, Ui_PrimerLibrarySelector {
     Q_OBJECT
 public:
     PrimerLibrarySelector(QWidget *parent);
diff --git a/src/plugins/pcr/src/ui/PrimerLibrarySelector.ui b/src/plugins/pcr/src/PrimerLibrarySelector.ui
similarity index 100%
rename from src/plugins/pcr/src/ui/PrimerLibrarySelector.ui
rename to src/plugins/pcr/src/PrimerLibrarySelector.ui
diff --git a/src/plugins/pcr/src/PrimerLibraryTable.cpp b/src/plugins/pcr/src/PrimerLibraryTable.cpp
index b3a4d1c..71c3044 100644
--- a/src/plugins/pcr/src/PrimerLibraryTable.cpp
+++ b/src/plugins/pcr/src/PrimerLibraryTable.cpp
@@ -131,9 +131,9 @@ QVariant PrimerLibraryModel::displayData(const QModelIndex &index) const {
         case 0:
             return primer.name;
         case 1:
-            return PrimerGroupBox::getDoubleStringValue(primer.gc);
+            return primer.gc != Primer::INVALID_GC ? PrimerStatistics::getDoubleStringValue(primer.gc) : tr("N/A");
         case 2:
-            return PrimerGroupBox::getDoubleStringValue(primer.tm);
+            return primer.tm != Primer::INVALID_TM ? PrimerStatistics::getDoubleStringValue(primer.tm) : tr("N/A");
         case 3:
             return primer.sequence.length();
         case 4:
diff --git a/src/plugins/pcr/src/PrimerLibraryWidget.cpp b/src/plugins/pcr/src/PrimerLibraryWidget.cpp
index b0961f4..6b00961 100644
--- a/src/plugins/pcr/src/PrimerLibraryWidget.cpp
+++ b/src/plugins/pcr/src/PrimerLibraryWidget.cpp
@@ -52,7 +52,7 @@ PrimerLibraryWidget::PrimerLibraryWidget(QWidget *parent)
 : QWidget(parent), editPrimerButton(NULL), removePrimersButton(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467823");
+    new HelpButton(this, buttonBox, "17470749");
 
     QPushButton *newPrimerButton = buttonBox->addButton(tr("New primer"), QDialogButtonBox::ActionRole);
     connect(newPrimerButton, SIGNAL(clicked()), SLOT(sl_newPrimer()));
@@ -132,7 +132,7 @@ void PrimerLibraryWidget::sl_importPrimers() {
 void PrimerLibraryWidget::sl_exportPrimers() {
     const QList<Primer> selection = primerTable->getSelection();
     SAFE_POINT(!selection.isEmpty(), L10N::nullPointerError("Selection"), );
-    QObjectScopedPointer<ExportPrimersDialog> exportDialog = new ExportPrimersDialog(selection);
+    QObjectScopedPointer<ExportPrimersDialog> exportDialog = new ExportPrimersDialog(selection, this);
     exportDialog->exec();
 }
 
diff --git a/src/plugins/pcr/src/PrimerLibraryWidget.h b/src/plugins/pcr/src/PrimerLibraryWidget.h
index d632d98..6888618 100644
--- a/src/plugins/pcr/src/PrimerLibraryWidget.h
+++ b/src/plugins/pcr/src/PrimerLibraryWidget.h
@@ -34,7 +34,7 @@
 
 namespace U2 {
 
-class PrimerLibraryWidget : public QWidget, private Ui::PrimerLibraryWidget {
+class PrimerLibraryWidget : public QWidget, private Ui_PrimerLibraryWidget {
     Q_OBJECT
 public:
     PrimerLibraryWidget(QWidget *parent);
diff --git a/src/plugins/pcr/src/ui/PrimerLibraryWidget.ui b/src/plugins/pcr/src/PrimerLibraryWidget.ui
similarity index 100%
rename from src/plugins/pcr/src/ui/PrimerLibraryWidget.ui
rename to src/plugins/pcr/src/PrimerLibraryWidget.ui
diff --git a/src/plugins/pcr/src/PrimerLineEdit.cpp b/src/plugins/pcr/src/PrimerLineEdit.cpp
index 1008eff..094d3ab 100644
--- a/src/plugins/pcr/src/PrimerLineEdit.cpp
+++ b/src/plugins/pcr/src/PrimerLineEdit.cpp
@@ -22,6 +22,9 @@
 #include <QPainter>
 #include <QStyleOption>
 
+#include <U2Core/AppContext.h>
+#include <U2Core/U2AlphabetUtils.h>
+
 #include "PrimerLineEdit.h"
 
 namespace U2 {
@@ -29,7 +32,7 @@ namespace U2 {
 PrimerLineEdit::PrimerLineEdit(QWidget *parent)
 : QLineEdit(parent)
 {
-    setValidator(new PrimerValidator(QRegExp("[acgtACGT]+"), this));
+    setValidator(new PrimerValidator(this));
 }
 
 void PrimerLineEdit::setInvalidatedText(const QString &text) {
@@ -80,10 +83,15 @@ QRect PrimerLineEdit::placeHolderRect() const {
     return lineRect.adjusted(minLB, 0, -minRB, 0);
 }
 
-PrimerValidator::PrimerValidator(const QRegExp &rx, QObject *parent)
-: QRegExpValidator(rx, parent)
+PrimerValidator::PrimerValidator(QObject *parent, bool allowExtended)
+: QRegExpValidator(parent)
 {
-
+    const DNAAlphabet* alphabet = AppContext::getDNAAlphabetRegistry()->findById(
+                allowExtended ? BaseDNAAlphabetIds::NUCL_DNA_EXTENDED() : BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
+    QByteArray alphabetChars = alphabet->getAlphabetChars(true);
+    // Gaps are not allowed
+    alphabetChars.remove(alphabetChars.indexOf('-'), 1);
+    setRegExp(QRegExp(QString("[%1]+").arg(alphabetChars.constData())));
 }
 
 QValidator::State PrimerValidator::validate(QString &input, int &pos) const {
diff --git a/src/plugins/pcr/src/PrimerLineEdit.h b/src/plugins/pcr/src/PrimerLineEdit.h
index 6f91a5b..d3103ae 100644
--- a/src/plugins/pcr/src/PrimerLineEdit.h
+++ b/src/plugins/pcr/src/PrimerLineEdit.h
@@ -43,7 +43,7 @@ private:
 
 class PrimerValidator : public QRegExpValidator {
 public:
-    PrimerValidator(const QRegExp &rx, QObject *parent);
+    PrimerValidator(QObject* parent, bool allowExtended = true);
     State validate(QString &input, int &pos) const;
 };
 
diff --git a/src/plugins/pcr/src/PrimerStatistics.cpp b/src/plugins/pcr/src/PrimerStatistics.cpp
index cbd0d4b..01dd62c 100644
--- a/src/plugins/pcr/src/PrimerStatistics.cpp
+++ b/src/plugins/pcr/src/PrimerStatistics.cpp
@@ -19,31 +19,86 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequenceUtils.h>
+#include <U2Core/DNATranslation.h>
+#include <U2Core/L10n.h>
+#include <U2Core/TextUtils.h>
 #include <U2Core/U2SafePoints.h>
 
+#include "Primer.h"
 #include "PrimerGroupBox.h"
 
 #include "PrimerStatistics.h"
 
 namespace U2 {
 
-bool PrimerStatistics::checkPcrPrimersPair(const QByteArray &forward, const QByteArray &reverse, QString &error) {
+bool PrimerStatistics::checkPcrPrimersPair(const QByteArray &forward, const QByteArray &reverse, QString &message) {
+    bool forwardIsValid = validate(forward);
+    bool reverseIsValid = validate(reverse);
+    if (!forwardIsValid && !reverseIsValid) {
+        message = tr("The primers contain a character from the Extended DNA alphabet.");
+    } else if (!forwardIsValid) {
+        message = tr("The forward primer contains a character from the Extended DNA alphabet.");
+    } else if (!reverseIsValid) {
+        message = tr("The reverse primer contains a character from the Extended DNA alphabet.");
+    }
+    if (!message.isEmpty()) {
+        return false;
+    }
+
     PrimersPairStatistics calc(forward, reverse);
-    error = calc.getFirstError();
-    return error.isEmpty();
+    message = calc.getFirstError();
+    return message.isEmpty();
 }
 
 double PrimerStatistics::getMeltingTemperature(const QByteArray &sequence) {
+    CHECK(validate(sequence), Primer::INVALID_TM);
     PrimerStatisticsCalculator calc(sequence);
     return calc.getTm();
 }
 
+double PrimerStatistics::getMeltingTemperature(const QByteArray& initialPrimer, const QByteArray& alternativePrimer) {
+    if (PrimerStatistics::validate(initialPrimer)) {
+        return PrimerStatistics::getMeltingTemperature(initialPrimer);
+    }
+    if (PrimerStatistics::validate(alternativePrimer)) {
+        return PrimerStatistics::getMeltingTemperature(alternativePrimer);
+    }
+    return Primer::INVALID_TM;
+}
+
 double PrimerStatistics::getAnnealingTemperature(const QByteArray &product, const QByteArray &forwardPrimer, const QByteArray &reversePrimer) {
-    double primersTm = (getMeltingTemperature(forwardPrimer) + getMeltingTemperature(reversePrimer)) / 2;
+    CHECK(validate(product) == true, Primer::INVALID_TM);
+
+    double forwardTm = getMeltingTemperature(forwardPrimer, product.left(forwardPrimer.length()));
+    CHECK(forwardTm != Primer::INVALID_TM, Primer::INVALID_TM);
+    double reverseTm = getMeltingTemperature(reversePrimer, DNASequenceUtils::reverseComplement(product.right(reversePrimer.length())));
+    CHECK(reverseTm != Primer::INVALID_TM, Primer::INVALID_TM);
+
+    double primersTm = (forwardTm + reverseTm) / 2;
     double productTm = getMeltingTemperature(product);
     return 0.3 * primersTm + 0.7 * productTm - 14.9;
 }
 
+bool PrimerStatistics::validate(const QByteArray &primer) {
+    return validate(QString(primer));
+}
+
+bool PrimerStatistics::validate(QString primer) {
+    PrimerValidator pv(NULL, false);
+    int pos = 0;
+    return pv.validate(primer, pos) == QValidator::Acceptable;
+}
+
+
+QString PrimerStatistics::getDoubleStringValue(double value) {
+    QString result = QString::number(value, 'f', 2);
+    result.remove(QRegExp("\\.?0+$"));
+    return result;
+}
+
 /************************************************************************/
 /* PrimerStatisticsCalculator */
 /************************************************************************/
@@ -213,7 +268,8 @@ namespace {
 }
 
 PrimersPairStatistics::PrimersPairStatistics(const QByteArray &forward, const QByteArray &reverse)
-: forward(forward, PrimerStatisticsCalculator::Forward), reverse(reverse, PrimerStatisticsCalculator::Reverse)
+    : forward(forward, PrimerStatisticsCalculator::Forward),
+      reverse(reverse, PrimerStatisticsCalculator::Reverse)
 {
     HeteroDimersFinder dimersFinder(forward, reverse);
     dimersInfo = dimersFinder.getResult();
diff --git a/src/plugins/pcr/src/PrimerStatistics.h b/src/plugins/pcr/src/PrimerStatistics.h
index ba83600..c087f4a 100644
--- a/src/plugins/pcr/src/PrimerStatistics.h
+++ b/src/plugins/pcr/src/PrimerStatistics.h
@@ -25,16 +25,21 @@
 #include <QObject>
 #include "PrimerDimersFinder.h"
 
+
 namespace U2 {
 
 class PrimerStatistics : public QObject {
     Q_OBJECT
 public:
-    static bool checkPcrPrimersPair(const QByteArray &forward, const QByteArray &reverse, QString &error);
+    static bool checkPcrPrimersPair(const QByteArray &forward, const QByteArray &reverse, QString &message);
     static double getMeltingTemperature(const QByteArray &sequence);
+    static double getMeltingTemperature(const QByteArray& initialPrimer, const QByteArray& alternativePrimer);
     static double getAnnealingTemperature(const QByteArray &product, const QByteArray &forwardPrimer, const QByteArray &reversePrimer);
 
-    static QString generatePrimersPairReport(const QByteArray &forward, const QByteArray &reverse);
+    static bool validate(const QByteArray& primer);
+    static bool validate(QString primer);
+
+    static QString getDoubleStringValue(double value);
 };
 
 class PrimerStatisticsCalculator {
diff --git a/src/plugins/pcr/src/PrimersDetailsDialog.cpp b/src/plugins/pcr/src/PrimersDetailsDialog.cpp
index eccc32e..5836636 100644
--- a/src/plugins/pcr/src/PrimersDetailsDialog.cpp
+++ b/src/plugins/pcr/src/PrimersDetailsDialog.cpp
@@ -32,7 +32,7 @@ PrimersDetailsDialog::PrimersDetailsDialog(QWidget *parent, const QString &detai
 {
     GCOUNTER(cvar, tvar, "PrimersDetailsDialog");
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467822");
+    new HelpButton(this, buttonBox, "17470748");
     textEdit->setText(details);
 }
 
diff --git a/src/plugins/pcr/src/PrimersDetailsDialog.h b/src/plugins/pcr/src/PrimersDetailsDialog.h
index bf3049f..e656d16 100644
--- a/src/plugins/pcr/src/PrimersDetailsDialog.h
+++ b/src/plugins/pcr/src/PrimersDetailsDialog.h
@@ -28,7 +28,7 @@
 
 namespace U2 {
 
-class PrimersDetailsDialog : public QDialog, private Ui::PrimersDetailsDialog {
+class PrimersDetailsDialog : public QDialog, private Ui_PrimersDetailsDialog {
 public:
     PrimersDetailsDialog(QWidget *parent, const QString &details);
 };
diff --git a/src/plugins/pcr/src/ui/PrimersDetailsDialog.ui b/src/plugins/pcr/src/PrimersDetailsDialog.ui
similarity index 100%
rename from src/plugins/pcr/src/ui/PrimersDetailsDialog.ui
rename to src/plugins/pcr/src/PrimersDetailsDialog.ui
diff --git a/src/plugins/pcr/src/export/ExportPrimersDialog.cpp b/src/plugins/pcr/src/export/ExportPrimersDialog.cpp
index d2d2157..8a73ccb 100644
--- a/src/plugins/pcr/src/export/ExportPrimersDialog.cpp
+++ b/src/plugins/pcr/src/export/ExportPrimersDialog.cpp
@@ -32,6 +32,7 @@
 #include <U2Core/Log.h>
 #include <U2Core/ProjectModel.h>
 #include <U2Core/ProjectService.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/U2ObjectDbi.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -42,8 +43,8 @@
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/ProjectTreeItemSelectorDialog.h>
 #include <U2Gui/ProjectUtils.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/SharedConnectionsDialog.h>
-#include <U2Core/QObjectScopedPointer.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "ExportPrimersDialog.h"
@@ -55,12 +56,12 @@ namespace U2 {
 const QString ExportPrimersDialog::LOCAL_FILE = QObject::tr("Local file");
 const QString ExportPrimersDialog::SHARED_DB = QObject::tr("Shared database");
 
-ExportPrimersDialog::ExportPrimersDialog(const QList<Primer> &primers) :
-    QDialog(NULL),
+ExportPrimersDialog::ExportPrimersDialog(const QList<Primer> &primers, QWidget *parent) :
+    QDialog(parent),
     primers(primers)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467823");
+    new HelpButton(this, buttonBox, "17470749");
 
     init();
     connectSignals();
@@ -73,29 +74,6 @@ void ExportPrimersDialog::sl_updateState() {
     folderContainer->setEnabled(0 < cbDatabase->count());
 }
 
-void ExportPrimersDialog::sl_formatChanged() {
-    const QString newFilePath = GUrlUtils::changeFileExt(GUrl(leFilePath->text()), cbFormat->currentText()).getURLString();
-    leFilePath->setText(newFilePath);
-}
-
-void ExportPrimersDialog::sl_fileBrowse() {
-    LastUsedDirHelper dirHelper("ExportPrimersDialog");
-    const QString filter = FormatUtils::prepareDocumentsFileFilter(cbFormat->currentText(), true);
-
-    QFileDialog::Options additionalOptions;
-    Q_UNUSED(additionalOptions);
-#ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
-        additionalOptions = QFileDialog::DontUseNativeDialog;
-    }
-#endif
-
-    const QString filePath = U2FileDialog::getSaveFileName(this, tr("Export to"), dirHelper.dir + GUrl(leFilePath->text()).fileName(), filter, NULL, additionalOptions);
-    CHECK(!filePath.isEmpty(), );
-
-    leFilePath->setText(filePath);
-}
-
 void ExportPrimersDialog::sl_connect() {
     const bool projectExists = (NULL != AppContext::getProject());
     QPointer<SharedConnectionsDialog> connectionDialog = new SharedConnectionsDialog(this);
@@ -154,7 +132,7 @@ void ExportPrimersDialog::accept() {
     GUIUtils::setWidgetWarning(leFolder, false);
 
     U2OpStatusImpl os;
-    GUrlUtils::validateLocalFileUrl(GUrl(leFilePath->text()), os);
+    GUrlUtils::validateLocalFileUrl(GUrl(saveController->getSaveFileName()), os);
     if (LOCAL_FILE == cbExport->currentText() && os.isCoR()) {
         GUIUtils::setWidgetWarning(leFilePath, true);
         return;
@@ -172,7 +150,7 @@ void ExportPrimersDialog::accept() {
 
     Task *exportTask = NULL;
     if (LOCAL_FILE == cbExport->currentText()) {
-        exportTask = new ExportPrimersToLocalFileTask(primers, cbFormat->currentText(), leFilePath->text());
+        exportTask = new ExportPrimersToLocalFileTask(primers, saveController->getFormatIdToSave(), saveController->getSaveFileName());
     } else {
         exportTask = new ExportPrimersToDatabaseTask(primers, cbDatabase->itemData(cbDatabase->currentIndex()).value<U2DbiRef>(), leFolder->text());
     }
@@ -185,34 +163,7 @@ void ExportPrimersDialog::init() {
     cbExport->addItem(LOCAL_FILE);
     cbExport->addItem(SHARED_DB);
 
-    DocumentFormatConstraints constr;
-    constr.supportedObjectTypes.insert(GObjectTypes::SEQUENCE);
-    constr.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    constr.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
-    constr.addFlagToExclude(DocumentFormatFlag_Hidden);
-    if (primers.size() > 1) {
-        constr.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
-    }
-
-    const QList<DocumentFormatId> formatIds = AppContext::getDocumentFormatRegistry()->selectFormats(constr);
-    foreach (const DocumentFormatId &formatId, formatIds) {
-        DocumentFormat *format = AppContext::getDocumentFormatRegistry()->getFormatById(formatId);
-        if (Q_UNLIKELY(NULL == format)) {
-            coreLog.error(L10N::nullPointerError("document format '%1'").arg(formatId));
-            Q_ASSERT(false);
-            continue;
-        }
-
-        cbFormat->addItem(formatId);
-    }
-    cbFormat->setCurrentIndex(cbFormat->findText(BaseDocumentFormats::PLAIN_GENBANK));
-
-    DocumentFormat *currentFormat = AppContext::getDocumentFormatRegistry()->getFormatById(cbFormat->currentText());
-    SAFE_POINT(NULL != currentFormat, L10N::nullPointerError("current format"), );
-    const QStringList extensions = currentFormat->getSupportedDocumentFileExtensions();
-    SAFE_POINT(!extensions.isEmpty(), QString("'%1' format extenations list is empty").arg(cbFormat->currentText()), );
-    leFilePath->setText(AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath() + QDir::separator() + "primers" + "." + extensions.first());
-
+    initSaveController();
     initDatabases();
 }
 
@@ -227,10 +178,31 @@ void ExportPrimersDialog::initDatabases() {
     }
 }
 
+void ExportPrimersDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = "ExportPrimersDialog";
+    config.defaultFileName = GUrlUtils::getDefaultDataPath() + "/primers.gb";
+    config.defaultFormatId = BaseDocumentFormats::PLAIN_GENBANK;
+    config.fileDialogButton = tbFileBrowse;
+    config.fileNameEdit = leFilePath;
+    config.formatCombo = cbFormat;
+    config.parentWidget = this;
+    config.saveTitle = tr("Export to");
+
+    DocumentFormatConstraints constraints;
+    constraints.supportedObjectTypes.insert(GObjectTypes::SEQUENCE);
+    constraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+    constraints.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
+    constraints.addFlagToExclude(DocumentFormatFlag_Hidden);
+    if (primers.size() > 1) {
+        constraints.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
+    }
+
+    saveController = new SaveDocumentController(config, constraints, this);
+}
+
 void ExportPrimersDialog::connectSignals() {
     connect(cbExport, SIGNAL(currentIndexChanged(int)), SLOT(sl_updateState()));
-    connect(cbFormat, SIGNAL(currentIndexChanged(int)), SLOT(sl_formatChanged()));
-    connect(tbFileBrowse, SIGNAL(clicked()), SLOT(sl_fileBrowse()));
     connect(tbConnect, SIGNAL(clicked()), SLOT(sl_connect()));
     connect(tbFolderBrowse, SIGNAL(clicked()), SLOT(sl_folderBrowse()));
     if (NULL != AppContext::getProject()) {
diff --git a/src/plugins/pcr/src/export/ExportPrimersDialog.h b/src/plugins/pcr/src/export/ExportPrimersDialog.h
index 1fe3db6..a81768c 100644
--- a/src/plugins/pcr/src/export/ExportPrimersDialog.h
+++ b/src/plugins/pcr/src/export/ExportPrimersDialog.h
@@ -23,21 +23,20 @@
 #define _U2_EXPORT_PRIMERS_DIALOG_H_
 
 #include "Primer.h"
-#include "ui/ui_ExportPrimersDialog.h"
+#include "ui_ExportPrimersDialog.h"
 
 namespace U2 {
 
 class Document;
+class SaveDocumentController;
 
 class ExportPrimersDialog : public QDialog, private Ui_ExportPrimersDialog {
     Q_OBJECT
 public:
-    ExportPrimersDialog(const QList<Primer> &primers);
+    ExportPrimersDialog(const QList<Primer> &primers, QWidget *parent);
 
 private slots:
     void sl_updateState();
-    void sl_formatChanged();
-    void sl_fileBrowse();
     void sl_connect();
     void sl_connectionCompleted();
     void sl_documentAdded(Document *document);
@@ -48,11 +47,13 @@ private slots:
 private:
     void init();
     void initDatabases();
+    void initSaveController();
     void connectSignals();
     void connectProjectSignals();
     bool isFileMode() const;
 
     QList<Primer> primers;
+    SaveDocumentController *saveController;
 
     static const QString LOCAL_FILE;
     static const QString SHARED_DB;
diff --git a/src/plugins/pcr/src/ui/ExportPrimersDialog.ui b/src/plugins/pcr/src/export/ExportPrimersDialog.ui
similarity index 100%
rename from src/plugins/pcr/src/ui/ExportPrimersDialog.ui
rename to src/plugins/pcr/src/export/ExportPrimersDialog.ui
diff --git a/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.cpp b/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.cpp
index 6437be7..0a38ea0 100644
--- a/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.cpp
+++ b/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.cpp
@@ -36,14 +36,14 @@ namespace U2 {
 
 ImportPrimerFromObjectTask::ImportPrimerFromObjectTask(GObject *object) :
     Task(tr("Import primer from the shared database object: %1").arg(NULL == object ? "N/A" : object->getGObjectName()),
-         TaskFlags(TaskFlag_ReportingIsEnabled | TaskFlag_ReportingIsSupported))
+    TaskFlags(TaskFlag_ReportingIsEnabled | TaskFlag_ReportingIsSupported)), validator(this)
 {
     SAFE_POINT_EXT(NULL != object, setError(L10N::nullPointerError("an input object")), );
     SAFE_POINT_EXT(GObjectTypes::SEQUENCE == object->getGObjectType(), setError(tr("A non-sequence object was provided")), );
     sequenceObject = qobject_cast<U2SequenceObject *>(object);
     SAFE_POINT_EXT(NULL != sequenceObject, setError(L10N::nullPointerError("sequence object")), );
     SAFE_POINT_EXT(sequenceObject->getAlphabet(), setError(L10N::nullPointerError("sequence alphabet")), );
-    CHECK_EXT(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT() == sequenceObject->getAlphabet()->getId(), setError(tr("The sequence has an unsupported alphabet: only standard nucleotide alphabet is supported")), );
+    CHECK_EXT(sequenceObject->getAlphabet()->isDNA(), setError(tr("The sequence has an unsupported alphabet: only nucleotide alphabet is supported")), );
     CHECK_EXT(sequenceObject->getSequenceLength() < Primer::MAX_LEN, setError(tr("Can't convert a sequence to primer: the sequence is too long")), );
 }
 
@@ -52,8 +52,8 @@ void ImportPrimerFromObjectTask::run() {
     primer.sequence = sequenceObject->getWholeSequenceData(stateInfo);
     CHECK_OP(stateInfo, );
 
-    QRegExp regExp("[^ACGT]");
-    if (primer.sequence.contains(regExp)) {
+    int pos = 0;
+    if (validator.validate(primer.sequence, pos) == QValidator::Invalid) {
         setError(tr("The primer sequence contains non-ACGT symbols"));
         return;
     }
@@ -65,7 +65,7 @@ void ImportPrimerFromObjectTask::run() {
 
 QString ImportPrimerFromObjectTask::generateReport() const {
     const QString docName = (NULL == sequenceObject->getDocument() ? tr("Without document") : sequenceObject->getDocument()->getName());
-    QString report = QString("<b>%1</b>%2: <font color='%3'>%4</font>").arg(docName).arg(sequenceObject->getGObjectName());
+    QString report = QString("<b>%1</b> %2: <font color='%3'>%4</font>").arg(docName).arg(sequenceObject->getGObjectName());
     if (isCanceled()) {
         return report.arg(L10N::errorColorLabelHtmlStr()).arg(tr("cancelled"));
     }
diff --git a/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.h b/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.h
index 25ad7aa..35aaa62 100644
--- a/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.h
+++ b/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.h
@@ -25,6 +25,7 @@
 #include <U2Core/Task.h>
 
 #include "Primer.h"
+#include "PrimerLineEdit.h"
 
 namespace U2 {
 
@@ -40,6 +41,7 @@ public:
     QString generateReport() const;
 
 private:
+    PrimerValidator validator;
     U2SequenceObject *sequenceObject;
     Primer primer;
 };
diff --git a/src/plugins/pcr/src/import/ImportPrimersDialog.cpp b/src/plugins/pcr/src/import/ImportPrimersDialog.cpp
index 3097313..f7253eb 100644
--- a/src/plugins/pcr/src/import/ImportPrimersDialog.cpp
+++ b/src/plugins/pcr/src/import/ImportPrimersDialog.cpp
@@ -49,7 +49,7 @@ ImportPrimersDialog::ImportPrimersDialog(QWidget *parent) :
     waitForConnection(false)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467823");
+    new HelpButton(this, buttonBox, "17470749");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Import"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     init();
@@ -80,7 +80,7 @@ void ImportPrimersDialog::sl_addFileClicked() {
     QFileDialog::Options additionalOptions;
     Q_UNUSED(additionalOptions);
 #ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         additionalOptions = QFileDialog::DontUseNativeDialog;
     }
 #endif
diff --git a/src/plugins/pcr/src/import/ImportPrimersDialog.h b/src/plugins/pcr/src/import/ImportPrimersDialog.h
index fda0866..fc2d8c4 100644
--- a/src/plugins/pcr/src/import/ImportPrimersDialog.h
+++ b/src/plugins/pcr/src/import/ImportPrimersDialog.h
@@ -26,7 +26,7 @@
 
 #include <U2Core/ProjectTreeControllerModeSettings.h>
 
-#include "ui/ui_ImportPrimersDialog.h"
+#include "ui_ImportPrimersDialog.h"
 
 namespace U2 {
 
diff --git a/src/plugins/pcr/src/ui/ImportPrimersDialog.ui b/src/plugins/pcr/src/import/ImportPrimersDialog.ui
similarity index 100%
rename from src/plugins/pcr/src/ui/ImportPrimersDialog.ui
rename to src/plugins/pcr/src/import/ImportPrimersDialog.ui
diff --git a/src/plugins/pcr/transl/english.ts b/src/plugins/pcr/transl/english.ts
index 9e4bf11..56c0664 100644
--- a/src/plugins/pcr/transl/english.ts
+++ b/src/plugins/pcr/transl/english.ts
@@ -4,17 +4,17 @@
 <context>
     <name>EditPrimerDialog</name>
     <message>
-        <location filename="../src/ui/EditPrimerDialog.ui" line="14"/>
+        <location filename="../src/EditPrimerDialog.ui" line="14"/>
         <source>Create New Primer</source>
         <translation>Create New Primer</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditPrimerDialog.ui" line="29"/>
+        <location filename="../src/EditPrimerDialog.ui" line="29"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditPrimerDialog.ui" line="36"/>
+        <location filename="../src/EditPrimerDialog.ui" line="36"/>
         <source>New Primer</source>
         <translation>New Primer</translation>
     </message>
@@ -22,43 +22,43 @@
 <context>
     <name>ExportPrimersDialog</name>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="20"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="20"/>
         <source>Export Primers</source>
         <translation>Export Primers</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="31"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="31"/>
         <source>Export to:</source>
         <translation>Export to:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="59"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="59"/>
         <source>Format:</source>
         <translation>Format:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="76"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="76"/>
         <source>File path:</source>
         <translation>File path:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="88"/>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="153"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="88"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="153"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="109"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="109"/>
         <source>Database:</source>
         <translation>Database:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="116"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="116"/>
         <source>Destination folder:</source>
         <translation>Destination folder:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="135"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="135"/>
         <source>Connect</source>
         <translation>Connect</translation>
     </message>
@@ -74,43 +74,43 @@
 <context>
     <name>ImportPrimersDialog</name>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="20"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="20"/>
         <source>Import Primers</source>
         <translation>Import Primers</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="31"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="31"/>
         <source>Import from:</source>
         <translation>Import from:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="57"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="57"/>
         <source>Connect to database</source>
         <translation>Connect to database</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="75"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="75"/>
         <source>Files:</source>
         <translation>Files:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="100"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="100"/>
         <source>Add file(s)</source>
         <translation>Add file(s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="107"/>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="173"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="107"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="173"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="141"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="141"/>
         <source>Objects:</source>
         <translation>Objects:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="166"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="166"/>
         <source>Add object(s)</source>
         <translation>Add object(s)</translation>
     </message>
@@ -118,63 +118,63 @@
 <context>
     <name>InSilicoPcrOptionPanelWidget</name>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="14"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="121"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="121"/>
         <source>Maximum product</source>
         <translation>Maximum product</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="105"/>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="137"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="105"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="137"/>
         <source> bp</source>
         <translation> bp</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="89"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="89"/>
         <source>3' perfect match</source>
         <translation>3' perfect match</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="153"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="153"/>
         <source>Extract annotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="174"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="174"/>
         <source><a href="details">Show primers details</a></source>
         <translation><a href="details">Show primers details</a></translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="235"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="235"/>
         <source>Find product(s)</source>
         <translation>Find product(s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="330"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="330"/>
         <source>Region</source>
         <translation>Region</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="335"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="335"/>
         <source>Length</source>
         <translation>Length</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="340"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="340"/>
         <source>Ta</source>
         <translation>Ta</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="369"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="369"/>
         <source>Extract product(s)</source>
         <translation>Extract product(s)</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="383"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="383"/>
         <source>Info: choose a nucleic sequence for running In Silico PCR</source>
         <translation>Info: choose a nucleic sequence for running In Silico PCR</translation>
     </message>
@@ -182,27 +182,27 @@
 <context>
     <name>PrimerGroupBox</name>
     <message>
-        <location filename="../src/ui/PrimerGroupBox.ui" line="14"/>
+        <location filename="../src/PrimerGroupBox.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/PrimerGroupBox.ui" line="69"/>
+        <location filename="../src/PrimerGroupBox.ui" line="69"/>
         <source>Reverse-complement sequence</source>
         <translation>Reverse-complement sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/PrimerGroupBox.ui" line="98"/>
+        <location filename="../src/PrimerGroupBox.ui" line="98"/>
         <source>Choose a primer from the primer library</source>
         <translation>Choose a primer from the primer library</translation>
     </message>
     <message>
-        <location filename="../src/ui/PrimerGroupBox.ui" line="125"/>
+        <location filename="../src/PrimerGroupBox.ui" line="125"/>
         <source>Mismatches</source>
         <translation>Mismatches</translation>
     </message>
     <message>
-        <location filename="../src/ui/PrimerGroupBox.ui" line="132"/>
+        <location filename="../src/PrimerGroupBox.ui" line="132"/>
         <source> bp</source>
         <translation> bp</translation>
     </message>
@@ -210,7 +210,7 @@
 <context>
     <name>PrimerLibrarySelector</name>
     <message>
-        <location filename="../src/ui/PrimerLibrarySelector.ui" line="14"/>
+        <location filename="../src/PrimerLibrarySelector.ui" line="14"/>
         <source>Choose Primer</source>
         <translation>Choose Primer</translation>
     </message>
@@ -218,7 +218,7 @@
 <context>
     <name>PrimerLibraryWidget</name>
     <message>
-        <location filename="../src/ui/PrimerLibraryWidget.ui" line="14"/>
+        <location filename="../src/PrimerLibraryWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
@@ -226,7 +226,7 @@
 <context>
     <name>PrimersDetailsDialog</name>
     <message>
-        <location filename="../src/ui/PrimersDetailsDialog.ui" line="14"/>
+        <location filename="../src/PrimersDetailsDialog.ui" line="14"/>
         <source>Primers Details</source>
         <translation>Primers Details</translation>
     </message>
@@ -234,12 +234,12 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/export/ExportPrimersDialog.cpp" line="55"/>
+        <location filename="../src/export/ExportPrimersDialog.cpp" line="56"/>
         <source>Local file</source>
         <translation>Local file</translation>
     </message>
     <message>
-        <location filename="../src/export/ExportPrimersDialog.cpp" line="56"/>
+        <location filename="../src/export/ExportPrimersDialog.cpp" line="57"/>
         <location filename="../src/import/ImportPrimersDialog.cpp" line="45"/>
         <source>Shared database</source>
         <translation>Shared database</translation>
@@ -261,7 +261,7 @@
 <context>
     <name>U2::ExportPrimersDialog</name>
     <message>
-        <location filename="../src/export/ExportPrimersDialog.cpp" line="93"/>
+        <location filename="../src/export/ExportPrimersDialog.cpp" line="190"/>
         <source>Export to</source>
         <translation>Export to</translation>
     </message>
@@ -334,9 +334,13 @@
         <translation>A non-sequence object was provided</translation>
     </message>
     <message>
-        <location filename="../src/import/ImportPrimerFromObjectTask.cpp" line="46"/>
         <source>The sequence has an unsupported alphabet: only standard nucleotide alphabet is supported</source>
-        <translation>The sequence has an unsupported alphabet: only standard nucleotide alphabet is supported</translation>
+        <translation type="vanished">The sequence has an unsupported alphabet: only standard nucleotide alphabet is supported</translation>
+    </message>
+    <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>
     </message>
     <message>
         <location filename="../src/import/ImportPrimerFromObjectTask.cpp" line="47"/>
@@ -458,88 +462,101 @@
 <context>
     <name>U2::InSilicoPcrOptionPanelWidget</name>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="61"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="64"/>
         <source>Forward primer</source>
         <translation>Forward primer</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="62"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="65"/>
         <source>Reverse primer</source>
         <translation>Reverse primer</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="63"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="66"/>
         <source>Settings</source>
         <translation>Settings</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="64"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="67"/>
         <source>Inner</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="65"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="68"/>
         <source>All intersected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="66"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="69"/>
         <source>None</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="79"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="85"/>
         <source>Show primers details</source>
         <translation>Show primers details</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="126"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="132"/>
         <source>Find product(s)</source>
         <translation>Find product(s)</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="129"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="135"/>
         <source>Warning: </source>
         <translation>Warning: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="130"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="136"/>
         <source>Find product(s) anyway</source>
         <translation>Find product(s) anyway</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="207"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="213"/>
         <source>Extract In Silico PCR products</source>
         <translation>Extract In Silico PCR products</translation>
     </message>
 </context>
 <context>
+    <name>U2::InSilicoPcrProductsTable</name>
+    <message>
+        <location filename="../src/InSilicoPcrProductsTable.cpp" line="78"/>
+        <source>N/A</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::InSilicoPcrTask</name>
     <message>
-        <location filename="../src/InSilicoPcrTask.cpp" line="50"/>
+        <location filename="../src/InSilicoPcrTask.cpp" line="52"/>
         <source>In Silico PCR</source>
         <translation>In Silico PCR</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrTask.cpp" line="103"/>
+        <location filename="../src/InSilicoPcrTask.cpp" line="106"/>
         <source>Forward primers found: %1</source>
         <translation>Forward primers found: %1</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrTask.cpp" line="104"/>
+        <location filename="../src/InSilicoPcrTask.cpp" line="107"/>
         <source>Reverse primers found: %1</source>
         <translation>Reverse primers found: %1</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrTask.cpp" line="187"/>
+        <location filename="../src/InSilicoPcrTask.cpp" line="197"/>
         <source>Products found: %1</source>
         <translation>Products found: %1</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrTask.cpp" line="191"/>
+        <location filename="../src/InSilicoPcrTask.cpp" line="201"/>
         <source>Primers details:</source>
         <translation>Primers details:</translation>
     </message>
+    <message>
+        <location filename="../src/InSilicoPcrTask.cpp" line="205"/>
+        <source>Products found: %1. <br><br>The detailed information about primers is not available as primers or sequence contain a character from the Extended DNA alphabet.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::InSilicoPcrWorkflowTask</name>
@@ -915,12 +932,17 @@
 <context>
     <name>U2::PrimerGroupBox</name>
     <message>
-        <location filename="../src/PrimerGroupBox.cpp" line="51"/>
+        <location filename="../src/PrimerGroupBox.cpp" line="139"/>
+        <source>N/A</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/PrimerGroupBox.cpp" line="192"/>
         <source>-mer</source>
         <translation>-mer</translation>
     </message>
     <message>
-        <location filename="../src/PrimerGroupBox.cpp" line="91"/>
+        <location filename="../src/PrimerGroupBox.cpp" line="140"/>
         <source>Tm = </source>
         <translation>Tm = </translation>
     </message>
@@ -979,6 +1001,12 @@
         <source>Incorrect primer number</source>
         <translation>Incorrect primer number</translation>
     </message>
+    <message>
+        <location filename="../src/PrimerLibraryTable.cpp" line="134"/>
+        <location filename="../src/PrimerLibraryTable.cpp" line="136"/>
+        <source>N/A</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::PrimerLibrarySelector</name>
@@ -1029,62 +1057,77 @@ Use "Tools -> Primer -> Primer Library" for managing the library
 <context>
     <name>U2::PrimerStatistics</name>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="161"/>
+        <location filename="../src/PrimerStatistics.cpp" line="41"/>
+        <source>The primers contain a character from the Extended DNA alphabet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/PrimerStatistics.cpp" line="43"/>
+        <source>The forward primer contains a character from the Extended DNA alphabet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/PrimerStatistics.cpp" line="45"/>
+        <source>The reverse primer contains a character from the Extended DNA alphabet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/PrimerStatistics.cpp" line="216"/>
         <source>low GC-content</source>
         <translation>low GC-content</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="162"/>
+        <location filename="../src/PrimerStatistics.cpp" line="217"/>
         <source>high GC-content</source>
         <translation>high GC-content</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="168"/>
+        <location filename="../src/PrimerStatistics.cpp" line="223"/>
         <source>low melting temperature</source>
         <translation>low melting temperature</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="169"/>
+        <location filename="../src/PrimerStatistics.cpp" line="224"/>
         <source>high melting temperature</source>
         <translation>high melting temperature</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="175"/>
+        <location filename="../src/PrimerStatistics.cpp" line="230"/>
         <source>low GC clamp</source>
         <translation>low GC clamp</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="181"/>
+        <location filename="../src/PrimerStatistics.cpp" line="236"/>
         <source>high base runs value</source>
         <translation>high base runs value</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="188"/>
+        <location filename="../src/PrimerStatistics.cpp" line="243"/>
         <source>forward primer has %1.</source>
         <translation>forward primer has %1.</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="190"/>
+        <location filename="../src/PrimerStatistics.cpp" line="245"/>
         <source>reverse primer has %1.</source>
         <translation>reverse primer has %1.</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="259"/>
+        <location filename="../src/PrimerStatistics.cpp" line="315"/>
         <source>Criteria</source>
         <translation>Criteria</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="260"/>
+        <location filename="../src/PrimerStatistics.cpp" line="316"/>
         <source>Valid Values</source>
         <translation>Valid Values</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="261"/>
+        <location filename="../src/PrimerStatistics.cpp" line="317"/>
         <source>Forward</source>
         <translation>Forward</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="262"/>
+        <location filename="../src/PrimerStatistics.cpp" line="318"/>
         <source>Reverse</source>
         <translation>Reverse</translation>
     </message>
diff --git a/src/plugins/pcr/transl/russian.ts b/src/plugins/pcr/transl/russian.ts
index 1f8d1fe..23344b3 100644
--- a/src/plugins/pcr/transl/russian.ts
+++ b/src/plugins/pcr/transl/russian.ts
@@ -4,17 +4,17 @@
 <context>
     <name>EditPrimerDialog</name>
     <message>
-        <location filename="../src/ui/EditPrimerDialog.ui" line="14"/>
+        <location filename="../src/EditPrimerDialog.ui" line="14"/>
         <source>Create New Primer</source>
         <translation>Создать новый праймер</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditPrimerDialog.ui" line="29"/>
+        <location filename="../src/EditPrimerDialog.ui" line="29"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/ui/EditPrimerDialog.ui" line="36"/>
+        <location filename="../src/EditPrimerDialog.ui" line="36"/>
         <source>New Primer</source>
         <translation>Новый праймер</translation>
     </message>
@@ -22,43 +22,43 @@
 <context>
     <name>ExportPrimersDialog</name>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="20"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="20"/>
         <source>Export Primers</source>
         <translation>Экспорт праймеров</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="31"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="31"/>
         <source>Export to:</source>
         <translation>Экспортировать в:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="59"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="59"/>
         <source>Format:</source>
         <translation>Формат:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="76"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="76"/>
         <source>File path:</source>
         <translation>Путь:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="88"/>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="153"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="88"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="153"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="109"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="109"/>
         <source>Database:</source>
         <translation>База данных:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="116"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="116"/>
         <source>Destination folder:</source>
         <translation>Папка для сохранения:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExportPrimersDialog.ui" line="135"/>
+        <location filename="../src/export/ExportPrimersDialog.ui" line="135"/>
         <source>Connect</source>
         <translation>Подключиться</translation>
     </message>
@@ -74,43 +74,43 @@
 <context>
     <name>ImportPrimersDialog</name>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="20"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="20"/>
         <source>Import Primers</source>
         <translation>Импорт праймеров</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="31"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="31"/>
         <source>Import from:</source>
         <translation>Импортировать из:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="57"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="57"/>
         <source>Connect to database</source>
         <translation>Подключиться к базе данных</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="75"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="75"/>
         <source>Files:</source>
         <translation>Файлы:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="100"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="100"/>
         <source>Add file(s)</source>
         <translation>Добавить файл(ы)</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="107"/>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="173"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="107"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="173"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="141"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="141"/>
         <source>Objects:</source>
         <translation>Объекты:</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportPrimersDialog.ui" line="166"/>
+        <location filename="../src/import/ImportPrimersDialog.ui" line="166"/>
         <source>Add object(s)</source>
         <translation>Добавить объект(ы)</translation>
     </message>
@@ -118,63 +118,63 @@
 <context>
     <name>InSilicoPcrOptionPanelWidget</name>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="14"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="121"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="121"/>
         <source>Maximum product</source>
         <translation>Максимальный продукт</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="105"/>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="137"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="105"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="137"/>
         <source> bp</source>
         <translation> нк</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="89"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="89"/>
         <source>3' perfect match</source>
         <translation>3' идеальное совпадение</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="153"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="153"/>
         <source>Extract annotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="174"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="174"/>
         <source><a href="details">Show primers details</a></source>
         <translation><a href="details">Показать информацию о праймерах</a></translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="235"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="235"/>
         <source>Find product(s)</source>
         <translation>Найти продукт(ы)</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="330"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="330"/>
         <source>Region</source>
         <translation>Регион</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="335"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="335"/>
         <source>Length</source>
         <translation>Длина</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="340"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="340"/>
         <source>Ta</source>
         <translation>Ta</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="369"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="369"/>
         <source>Extract product(s)</source>
         <translation>Извлечь продукт(ы)</translation>
     </message>
     <message>
-        <location filename="../src/ui/InSilicoPcrOptionPanelWidget.ui" line="383"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="383"/>
         <source>Info: choose a nucleic sequence for running In Silico PCR</source>
         <translation>Информация: выберите нуклеотидную последовательность для запуска In Silico PCR</translation>
     </message>
@@ -182,27 +182,27 @@
 <context>
     <name>PrimerGroupBox</name>
     <message>
-        <location filename="../src/ui/PrimerGroupBox.ui" line="14"/>
+        <location filename="../src/PrimerGroupBox.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/PrimerGroupBox.ui" line="69"/>
+        <location filename="../src/PrimerGroupBox.ui" line="69"/>
         <source>Reverse-complement sequence</source>
         <translation>Обратно-комплементарная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ui/PrimerGroupBox.ui" line="98"/>
+        <location filename="../src/PrimerGroupBox.ui" line="98"/>
         <source>Choose a primer from the primer library</source>
         <translation>Выберите праймер из библиотеки праймеров</translation>
     </message>
     <message>
-        <location filename="../src/ui/PrimerGroupBox.ui" line="125"/>
+        <location filename="../src/PrimerGroupBox.ui" line="125"/>
         <source>Mismatches</source>
         <translation>Несоответствия</translation>
     </message>
     <message>
-        <location filename="../src/ui/PrimerGroupBox.ui" line="132"/>
+        <location filename="../src/PrimerGroupBox.ui" line="132"/>
         <source> bp</source>
         <translation> нк</translation>
     </message>
@@ -210,7 +210,7 @@
 <context>
     <name>PrimerLibrarySelector</name>
     <message>
-        <location filename="../src/ui/PrimerLibrarySelector.ui" line="14"/>
+        <location filename="../src/PrimerLibrarySelector.ui" line="14"/>
         <source>Choose Primer</source>
         <translation>Выберите праймер</translation>
     </message>
@@ -218,7 +218,7 @@
 <context>
     <name>PrimerLibraryWidget</name>
     <message>
-        <location filename="../src/ui/PrimerLibraryWidget.ui" line="14"/>
+        <location filename="../src/PrimerLibraryWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
@@ -226,7 +226,7 @@
 <context>
     <name>PrimersDetailsDialog</name>
     <message>
-        <location filename="../src/ui/PrimersDetailsDialog.ui" line="14"/>
+        <location filename="../src/PrimersDetailsDialog.ui" line="14"/>
         <source>Primers Details</source>
         <translation>Информация о праймерах</translation>
     </message>
@@ -234,12 +234,12 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/export/ExportPrimersDialog.cpp" line="55"/>
+        <location filename="../src/export/ExportPrimersDialog.cpp" line="56"/>
         <source>Local file</source>
         <translation>Локальный файл</translation>
     </message>
     <message>
-        <location filename="../src/export/ExportPrimersDialog.cpp" line="56"/>
+        <location filename="../src/export/ExportPrimersDialog.cpp" line="57"/>
         <location filename="../src/import/ImportPrimersDialog.cpp" line="45"/>
         <source>Shared database</source>
         <translation>Общая база данных</translation>
@@ -261,7 +261,7 @@
 <context>
     <name>U2::ExportPrimersDialog</name>
     <message>
-        <location filename="../src/export/ExportPrimersDialog.cpp" line="93"/>
+        <location filename="../src/export/ExportPrimersDialog.cpp" line="190"/>
         <source>Export to</source>
         <translation>Экспортировать в</translation>
     </message>
@@ -334,9 +334,13 @@
         <translation>A non-sequence object was provided</translation>
     </message>
     <message>
-        <location filename="../src/import/ImportPrimerFromObjectTask.cpp" line="46"/>
         <source>The sequence has an unsupported alphabet: only standard nucleotide alphabet is supported</source>
-        <translation>The sequence has an unsupported alphabet: only standard nucleotide alphabet is supported</translation>
+        <translation type="vanished">The sequence has an unsupported alphabet: only standard nucleotide alphabet is supported</translation>
+    </message>
+    <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>
     </message>
     <message>
         <location filename="../src/import/ImportPrimerFromObjectTask.cpp" line="47"/>
@@ -458,88 +462,101 @@
 <context>
     <name>U2::InSilicoPcrOptionPanelWidget</name>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="61"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="64"/>
         <source>Forward primer</source>
         <translation>Прямой праймер</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="62"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="65"/>
         <source>Reverse primer</source>
         <translation>Обратный праймер</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="63"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="66"/>
         <source>Settings</source>
         <translation>Настройки</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="64"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="67"/>
         <source>Inner</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="65"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="68"/>
         <source>All intersected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="66"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="69"/>
         <source>None</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="79"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="85"/>
         <source>Show primers details</source>
         <translation>Показать информацию о праймерах</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="126"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="132"/>
         <source>Find product(s)</source>
         <translation>Найти продукт(ы)</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="129"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="135"/>
         <source>Warning: </source>
         <translation>Предупреждение: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="130"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="136"/>
         <source>Find product(s) anyway</source>
         <translation>Найти продукт(ы) в любом случае</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="207"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="213"/>
         <source>Extract In Silico PCR products</source>
         <translation>Извлечь продукты ПЦР in silico</translation>
     </message>
 </context>
 <context>
+    <name>U2::InSilicoPcrProductsTable</name>
+    <message>
+        <location filename="../src/InSilicoPcrProductsTable.cpp" line="78"/>
+        <source>N/A</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::InSilicoPcrTask</name>
     <message>
-        <location filename="../src/InSilicoPcrTask.cpp" line="50"/>
+        <location filename="../src/InSilicoPcrTask.cpp" line="52"/>
         <source>In Silico PCR</source>
         <translation>In Silico PCR</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrTask.cpp" line="103"/>
+        <location filename="../src/InSilicoPcrTask.cpp" line="106"/>
         <source>Forward primers found: %1</source>
         <translation>Forward primers found: %1</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrTask.cpp" line="104"/>
+        <location filename="../src/InSilicoPcrTask.cpp" line="107"/>
         <source>Reverse primers found: %1</source>
         <translation>Reverse primers found: %1</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrTask.cpp" line="187"/>
+        <location filename="../src/InSilicoPcrTask.cpp" line="197"/>
         <source>Products found: %1</source>
         <translation>Products found: %1</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrTask.cpp" line="191"/>
+        <location filename="../src/InSilicoPcrTask.cpp" line="201"/>
         <source>Primers details:</source>
         <translation>Информация о праймерах:</translation>
     </message>
+    <message>
+        <location filename="../src/InSilicoPcrTask.cpp" line="205"/>
+        <source>Products found: %1. <br><br>The detailed information about primers is not available as primers or sequence contain a character from the Extended DNA alphabet.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::InSilicoPcrWorkflowTask</name>
@@ -915,12 +932,17 @@
 <context>
     <name>U2::PrimerGroupBox</name>
     <message>
-        <location filename="../src/PrimerGroupBox.cpp" line="51"/>
+        <location filename="../src/PrimerGroupBox.cpp" line="139"/>
+        <source>N/A</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/PrimerGroupBox.cpp" line="192"/>
         <source>-mer</source>
         <translation>-mer</translation>
     </message>
     <message>
-        <location filename="../src/PrimerGroupBox.cpp" line="91"/>
+        <location filename="../src/PrimerGroupBox.cpp" line="140"/>
         <source>Tm = </source>
         <translation>Tm = </translation>
     </message>
@@ -979,6 +1001,12 @@
         <source>Incorrect primer number</source>
         <translation>Incorrect primer number</translation>
     </message>
+    <message>
+        <location filename="../src/PrimerLibraryTable.cpp" line="134"/>
+        <location filename="../src/PrimerLibraryTable.cpp" line="136"/>
+        <source>N/A</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::PrimerLibrarySelector</name>
@@ -1029,62 +1057,77 @@ Use "Tools -> Primer -> Primer Library" for managing the library
 <context>
     <name>U2::PrimerStatistics</name>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="161"/>
+        <location filename="../src/PrimerStatistics.cpp" line="41"/>
+        <source>The primers contain a character from the Extended DNA alphabet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/PrimerStatistics.cpp" line="43"/>
+        <source>The forward primer contains a character from the Extended DNA alphabet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/PrimerStatistics.cpp" line="45"/>
+        <source>The reverse primer contains a character from the Extended DNA alphabet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/PrimerStatistics.cpp" line="216"/>
         <source>low GC-content</source>
         <translation>low GC-content</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="162"/>
+        <location filename="../src/PrimerStatistics.cpp" line="217"/>
         <source>high GC-content</source>
         <translation>high GC-content</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="168"/>
+        <location filename="../src/PrimerStatistics.cpp" line="223"/>
         <source>low melting temperature</source>
         <translation>low melting temperature</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="169"/>
+        <location filename="../src/PrimerStatistics.cpp" line="224"/>
         <source>high melting temperature</source>
         <translation>high melting temperature</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="175"/>
+        <location filename="../src/PrimerStatistics.cpp" line="230"/>
         <source>low GC clamp</source>
         <translation>low GC clamp</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="181"/>
+        <location filename="../src/PrimerStatistics.cpp" line="236"/>
         <source>high base runs value</source>
         <translation>high base runs value</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="188"/>
+        <location filename="../src/PrimerStatistics.cpp" line="243"/>
         <source>forward primer has %1.</source>
         <translation>прямой праймер имеет %1.</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="190"/>
+        <location filename="../src/PrimerStatistics.cpp" line="245"/>
         <source>reverse primer has %1.</source>
         <translation>обратный праймер имеет %1.</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="259"/>
+        <location filename="../src/PrimerStatistics.cpp" line="315"/>
         <source>Criteria</source>
         <translation>Критерий</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="260"/>
+        <location filename="../src/PrimerStatistics.cpp" line="316"/>
         <source>Valid Values</source>
         <translation>Допустимые значения</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="261"/>
+        <location filename="../src/PrimerStatistics.cpp" line="317"/>
         <source>Forward</source>
         <translation>Прямой</translation>
     </message>
     <message>
-        <location filename="../src/PrimerStatistics.cpp" line="262"/>
+        <location filename="../src/PrimerStatistics.cpp" line="318"/>
         <source>Reverse</source>
         <translation>Обратный</translation>
     </message>
diff --git a/src/plugins/perf_monitor/CMakeLists.txt b/src/plugins/perf_monitor/CMakeLists.txt
new file mode 100644
index 0000000..ec399a9
--- /dev/null
+++ b/src/plugins/perf_monitor/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME perf_monitor)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/query_designer/CMakeLists.txt b/src/plugins/query_designer/CMakeLists.txt
new file mode 100644
index 0000000..c5df2cd
--- /dev/null
+++ b/src/plugins/query_designer/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME query_designer)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/query_designer/query_designer.pro b/src/plugins/query_designer/query_designer.pro
index 065ac09..a91727c 100644
--- a/src/plugins/query_designer/query_designer.pro
+++ b/src/plugins/query_designer/query_designer.pro
@@ -21,10 +21,10 @@ HEADERS += src/QueryDesignerPlugin.h \
            src/library/QDFindPolyRegionsActor.h \
            src/library/QDGcContentActor.h
 
-FORMS += src/ui/AddConstraintDialog.ui \
-         src/ui/QueryEditorWidget.ui \
-         src/ui/RunQueryDialog.ui \
-         src/ui/QDDialog.ui
+FORMS += src/AddConstraintDialog.ui \
+         src/QueryEditorWidget.ui \
+         src/RunQueryDialog.ui \
+         src/QDDialog.ui
 
 SOURCES += src/QueryDesignerPlugin.cpp \
            src/QueryViewController.cpp \
diff --git a/src/plugins/query_designer/src/ui/AddConstraintDialog.ui b/src/plugins/query_designer/src/AddConstraintDialog.ui
similarity index 100%
rename from src/plugins/query_designer/src/ui/AddConstraintDialog.ui
rename to src/plugins/query_designer/src/AddConstraintDialog.ui
diff --git a/src/plugins/query_designer/src/ui/QDDialog.ui b/src/plugins/query_designer/src/QDDialog.ui
similarity index 100%
rename from src/plugins/query_designer/src/ui/QDDialog.ui
rename to src/plugins/query_designer/src/QDDialog.ui
diff --git a/src/plugins/query_designer/src/QDRunDialog.cpp b/src/plugins/query_designer/src/QDRunDialog.cpp
index cf44675..2b622b3 100644
--- a/src/plugins/query_designer/src/QDRunDialog.cpp
+++ b/src/plugins/query_designer/src/QDRunDialog.cpp
@@ -40,8 +40,8 @@
 #include <U2Core/ProjectModel.h>
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/TaskSignalMapper.h>
-#include <U2Core/U2SafePoints.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/QDScheduler.h>
 
@@ -50,6 +50,7 @@
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/OpenViewTask.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include <U2View/ADVSequenceObjectContext.h>
@@ -70,72 +71,72 @@ namespace U2 {
 /*  Dialog for run from designer window                                 */
 /************************************************************************/
 
+const QString QDRunDialog::OUTPUT_FILE_DIR_DOMAIN = "qd_run_dialog/output_file";
+
 QDRunDialog::QDRunDialog(QDScheme* _scheme, QWidget* parent, const QString& defaultIn, const QString& defaultOut)
-: QDialog(parent), scheme(_scheme) {
+    : QDialog(parent),
+      scheme(_scheme),
+      saveController(NULL)
+{
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467440");
+    new HelpButton(this, buttonBox, "17470365");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     inFileEdit->setText(defaultIn);
-    outFileEdit->setText(defaultOut);
-    connect(tbInFile, SIGNAL(clicked()), SLOT(sl_selectFile()));
-    connect(tbOutFile, SIGNAL(clicked()), SLOT(sl_selectFile()));
+    initSaveController(defaultOut);
+
+    connect(tbInFile, SIGNAL(clicked()), SLOT(sl_selectInputFile()));
+    connect(outFileEdit, SIGNAL(textChanged(const QString &)), SLOT(sl_outputFileChanged()));
+    connect(outFileEdit, SIGNAL(textEdited(const QString &)), SLOT(sl_outputFileChanged()));
 
     QPushButton* runBtn = buttonBox->button(QDialogButtonBox::Ok);
     connect(runBtn, SIGNAL(clicked()), SLOT(sl_run()));
-
 }
 
-void QDRunDialog::sl_selectFile() {
-    QToolButton* tb = qobject_cast<QToolButton*>(sender());
-    assert(tb);
-    QLineEdit* edit = NULL;
-    if (tb==tbInFile) {
-        edit = inFileEdit;
-    } else {
-        assert(tb==tbOutFile);
-        edit = outFileEdit;
-    }
-
-    QString title;
-    QString fileFilter;
-    if (edit==inFileEdit) {
-        title = tr("Select input file");
-        fileFilter = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::SEQUENCE, true);
-    } else {
-        title = tr("Select output file");
-        fileFilter = DialogUtils::prepareDocumentsFileFilter(BaseDocumentFormats::PLAIN_GENBANK, true, QStringList());
-    }
-
+void QDRunDialog::sl_selectInputFile() {
     LastUsedDirHelper dir;
-    if (!edit->text().isEmpty()) {
-        QFileInfo fi(edit->text());
+    if (!inFileEdit->text().isEmpty()) {
+        QFileInfo fi(inFileEdit->text());
         dir.url = fi.absoluteFilePath();
         dir.dir = fi.absolutePath();
     }
 
-    if (edit==inFileEdit) {
-        dir.url = U2FileDialog::getOpenFileName(this, title, dir, fileFilter);
-    } else {
-        dir.url = U2FileDialog::getSaveFileName(this, title, dir, fileFilter);
-    }
+    QString fileFilter = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::SEQUENCE, true);
+    dir.url = U2FileDialog::getOpenFileName(this, tr("Select input file"), dir, fileFilter);
 
     if (!dir.url.isEmpty()) {
-        edit->setText(dir.url);
+        inFileEdit->setText(dir.url);
         QueryViewController* view = qobject_cast<QueryViewController*>(parentWidget());
-        assert(view);
-        if (edit==inFileEdit) {
-            view->setDefaultInFile(dir.url);
-        } else {
-            view->setDefaultOutFile(dir.url);
-        }
+        SAFE_POINT(NULL != view, "View is NULL", );
+        view->setDefaultInFile(dir.url);
     }
 }
 
+void QDRunDialog::sl_outputFileChanged() {
+    QueryViewController* view = qobject_cast<QueryViewController*>(parentWidget());
+    SAFE_POINT(NULL != view, "View is NULL", );
+    view->setDefaultOutFile(saveController->getSaveFileName());
+}
+
+void QDRunDialog::initSaveController(const QString &defaultOut) {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = OUTPUT_FILE_DIR_DOMAIN;
+    config.defaultFileName = defaultOut;
+    config.defaultFormatId = BaseDocumentFormats::PLAIN_GENBANK;
+    config.fileDialogButton = tbOutFile;
+    config.fileNameEdit = outFileEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select output file");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::PLAIN_GENBANK;
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
 void QDRunDialog::sl_run() {
-    const QString& inUri = inFileEdit->text();
-    const QString& outUri = outFileEdit->text();
+    const QString inUri = inFileEdit->text();
+    const QString outUri = saveController->getSaveFileName();
 
     if (inUri.isEmpty()) {
         QMessageBox::critical(this, L10N::errorTitle(), tr("The sequence is not specified!"));
@@ -292,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, "17467441");
+    new HelpButton(this, buttonBox, "17470366");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/query_designer/src/QDRunDialog.h b/src/plugins/query_designer/src/QDRunDialog.h
index 4e43739..080a4a6 100644
--- a/src/plugins/query_designer/src/QDRunDialog.h
+++ b/src/plugins/query_designer/src/QDRunDialog.h
@@ -22,21 +22,23 @@
 #ifndef _U2_QD_RUN_DIALOG_H_
 #define _U2_QD_RUN_DIALOG_H_
 
-#include <ui/ui_RunQueryDialog.h>
-#include <ui/ui_QDDialog.h>
+#include <ui_RunQueryDialog.h>
+#include <ui_QDDialog.h>
 
 #include <U2Core/Task.h>
 #include <U2Core/U2Region.h>
+
 #include <U2Gui/RegionSelector.h>
 
 namespace U2 {
 
-class QDScheme;
+class AnnotationTableObject;
 class Document;
+class DocumentProviderTask;
 class QDScheduler;
+class QDScheme;
+class SaveDocumentController;
 class SaveDocumentTask;
-class AnnotationTableObject;
-class DocumentProviderTask;
 
 class QDRunDialogTask : public Task {
     Q_OBJECT
@@ -67,11 +69,19 @@ class QDRunDialog : public QDialog, public Ui_RunQueryDlg {
     Q_OBJECT
 public:
     QDRunDialog(QDScheme* _scheme, QWidget* parent, const QString& defaultIn = QString(), const QString& defaultOut = QString());
+
 private slots:
     void sl_run();
-    void sl_selectFile();
+    void sl_selectInputFile();
+    void sl_outputFileChanged();
+
 private:
+    void initSaveController(const QString &defaultOut);
+
     QDScheme* scheme;
+    SaveDocumentController *saveController;
+
+    static const QString OUTPUT_FILE_DIR_DOMAIN;
 };
 
 class ADVSequenceObjectContext;
diff --git a/src/plugins/query_designer/src/ui/QueryEditorWidget.ui b/src/plugins/query_designer/src/QueryEditorWidget.ui
similarity index 100%
rename from src/plugins/query_designer/src/ui/QueryEditorWidget.ui
rename to src/plugins/query_designer/src/QueryEditorWidget.ui
diff --git a/src/plugins/query_designer/src/QueryViewController.cpp b/src/plugins/query_designer/src/QueryViewController.cpp
index b22bd7a..a22e71c 100644
--- a/src/plugins/query_designer/src/QueryViewController.cpp
+++ b/src/plugins/query_designer/src/QueryViewController.cpp
@@ -1147,7 +1147,7 @@ AddConstraintDialog::AddConstraintDialog(QueryScene* _scene, QDDistanceType _kin
                                          QDElement* defSrc, QDElement* defDst)
 : scene(_scene), kind(_kind) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467425");
+    new HelpButton(this, buttonBox, "17470350");
 
     QString title = "Add %1 Constraint";
     switch (kind)
diff --git a/src/plugins/query_designer/src/ui/RunQueryDialog.ui b/src/plugins/query_designer/src/RunQueryDialog.ui
similarity index 100%
rename from src/plugins/query_designer/src/ui/RunQueryDialog.ui
rename to src/plugins/query_designer/src/RunQueryDialog.ui
diff --git a/src/plugins/query_designer/transl/english.ts b/src/plugins/query_designer/transl/english.ts
index ce2f512..ea1eead 100644
--- a/src/plugins/query_designer/transl/english.ts
+++ b/src/plugins/query_designer/transl/english.ts
@@ -4,27 +4,27 @@
 <context>
     <name>AddConstraintDialog</name>
     <message>
-        <location filename="../src/ui/AddConstraintDialog.ui" line="14"/>
+        <location filename="../src/AddConstraintDialog.ui" line="14"/>
         <source>Add Constraint</source>
         <translation>Add Constraint</translation>
     </message>
     <message>
-        <location filename="../src/ui/AddConstraintDialog.ui" line="30"/>
+        <location filename="../src/AddConstraintDialog.ui" line="30"/>
         <source>From</source>
         <translation>From</translation>
     </message>
     <message>
-        <location filename="../src/ui/AddConstraintDialog.ui" line="43"/>
+        <location filename="../src/AddConstraintDialog.ui" line="43"/>
         <source>To</source>
         <translation>To</translation>
     </message>
     <message>
-        <location filename="../src/ui/AddConstraintDialog.ui" line="84"/>
+        <location filename="../src/AddConstraintDialog.ui" line="84"/>
         <source>Min</source>
         <translation>Min</translation>
     </message>
     <message>
-        <location filename="../src/ui/AddConstraintDialog.ui" line="97"/>
+        <location filename="../src/AddConstraintDialog.ui" line="97"/>
         <source>Max</source>
         <translation>Max</translation>
     </message>
@@ -32,22 +32,22 @@
 <context>
     <name>QDDialog</name>
     <message>
-        <location filename="../src/ui/QDDialog.ui" line="14"/>
+        <location filename="../src/QDDialog.ui" line="14"/>
         <source>Analyze with Query Schema</source>
         <translation>Analyze with Query Schema</translation>
     </message>
     <message>
-        <location filename="../src/ui/QDDialog.ui" line="22"/>
+        <location filename="../src/QDDialog.ui" line="22"/>
         <source>File with query</source>
         <translation>File with query</translation>
     </message>
     <message>
-        <location filename="../src/ui/QDDialog.ui" line="36"/>
+        <location filename="../src/QDDialog.ui" line="36"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/QDDialog.ui" line="54"/>
+        <location filename="../src/QDDialog.ui" line="54"/>
         <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; }
@@ -110,24 +110,24 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>QueryEditorWidget</name>
     <message>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="14"/>
+        <location filename="../src/QueryEditorWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="35"/>
+        <location filename="../src/QueryEditorWidget.ui" line="35"/>
         <source>Property Editor</source>
         <translation>Property Editor</translation>
     </message>
     <message>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="49"/>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="78"/>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="88"/>
+        <location filename="../src/QueryEditorWidget.ui" line="49"/>
+        <location filename="../src/QueryEditorWidget.ui" line="78"/>
+        <location filename="../src/QueryEditorWidget.ui" line="88"/>
         <source>TextLabel</source>
         <translation>TextLabel</translation>
     </message>
     <message>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="152"/>
+        <location filename="../src/QueryEditorWidget.ui" line="152"/>
         <source>Parameters</source>
         <translation>Parameters</translation>
     </message>
@@ -135,28 +135,28 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>RunQueryDlg</name>
     <message>
-        <location filename="../src/ui/RunQueryDialog.ui" line="26"/>
+        <location filename="../src/RunQueryDialog.ui" line="26"/>
         <source>Run Schema</source>
         <translation>Run Schema</translation>
     </message>
     <message>
-        <location filename="../src/ui/RunQueryDialog.ui" line="45"/>
+        <location filename="../src/RunQueryDialog.ui" line="45"/>
         <source>Load sequence</source>
         <translation>Load sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/RunQueryDialog.ui" line="58"/>
+        <location filename="../src/RunQueryDialog.ui" line="58"/>
         <source>Save results to</source>
         <translation>Save results to</translation>
     </message>
     <message>
-        <location filename="../src/ui/RunQueryDialog.ui" line="83"/>
-        <location filename="../src/ui/RunQueryDialog.ui" line="90"/>
+        <location filename="../src/RunQueryDialog.ui" line="83"/>
+        <location filename="../src/RunQueryDialog.ui" line="90"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/RunQueryDialog.ui" line="122"/>
+        <location filename="../src/RunQueryDialog.ui" line="122"/>
         <source>Add to project</source>
         <translation>Add to project</translation>
     </message>
@@ -315,44 +315,44 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDDialog</name>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="296"/>
+        <location filename="../src/QDRunDialog.cpp" line="297"/>
         <source>Search</source>
         <translation>Search</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="297"/>
+        <location filename="../src/QDRunDialog.cpp" line="298"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="337"/>
+        <location filename="../src/QDRunDialog.cpp" line="338"/>
         <source>Select query</source>
         <translation>Select query</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="353"/>
-        <location filename="../src/QDRunDialog.cpp" line="360"/>
+        <location filename="../src/QDRunDialog.cpp" line="354"/>
+        <location filename="../src/QDRunDialog.cpp" line="361"/>
         <source>Can not load %1</source>
         <translation>Can not load %1</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="390"/>
+        <location filename="../src/QDRunDialog.cpp" line="391"/>
         <source>File with query is not selected!</source>
         <translation>File with query is not selected!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="395"/>
+        <location filename="../src/QDRunDialog.cpp" line="396"/>
         <source>Error in schema!</source>
         <translation>Error in schema!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="401"/>
-        <location filename="../src/QDRunDialog.cpp" line="413"/>
+        <location filename="../src/QDRunDialog.cpp" line="402"/>
+        <location filename="../src/QDRunDialog.cpp" line="414"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="413"/>
+        <location filename="../src/QDRunDialog.cpp" line="414"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
@@ -738,32 +738,32 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDRunDialog</name>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="77"/>
+        <location filename="../src/QDRunDialog.cpp" line="83"/>
         <source>Run</source>
         <translation>Run</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="78"/>
+        <location filename="../src/QDRunDialog.cpp" line="84"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="104"/>
+        <location filename="../src/QDRunDialog.cpp" line="106"/>
         <source>Select input file</source>
         <translation>Select input file</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="107"/>
+        <location filename="../src/QDRunDialog.cpp" line="130"/>
         <source>Select output file</source>
         <translation>Select output file</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="141"/>
+        <location filename="../src/QDRunDialog.cpp" line="142"/>
         <source>The sequence is not specified!</source>
         <translation>The sequence is not specified!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="145"/>
+        <location filename="../src/QDRunDialog.cpp" line="146"/>
         <source>The output file is not selected!</source>
         <translation>The output file is not selected!</translation>
     </message>
@@ -771,17 +771,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDRunDialogTask</name>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="159"/>
+        <location filename="../src/QDRunDialog.cpp" line="160"/>
         <source>Query Designer</source>
         <translation>Query Designer</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="210"/>
+        <location filename="../src/QDRunDialog.cpp" line="211"/>
         <source>Sequence not found!</source>
         <translation>Sequence not found!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="219"/>
+        <location filename="../src/QDRunDialog.cpp" line="220"/>
         <source>Sequence not found, document: %1</source>
         <translation>Sequence not found, document: %1</translation>
     </message>
diff --git a/src/plugins/query_designer/transl/russian.ts b/src/plugins/query_designer/transl/russian.ts
index f808f95..999ee0d 100644
--- a/src/plugins/query_designer/transl/russian.ts
+++ b/src/plugins/query_designer/transl/russian.ts
@@ -4,27 +4,27 @@
 <context>
     <name>AddConstraintDialog</name>
     <message>
-        <location filename="../src/ui/AddConstraintDialog.ui" line="14"/>
+        <location filename="../src/AddConstraintDialog.ui" line="14"/>
         <source>Add Constraint</source>
         <translation>Добавить расстояние</translation>
     </message>
     <message>
-        <location filename="../src/ui/AddConstraintDialog.ui" line="30"/>
+        <location filename="../src/AddConstraintDialog.ui" line="30"/>
         <source>From</source>
         <translation>От</translation>
     </message>
     <message>
-        <location filename="../src/ui/AddConstraintDialog.ui" line="43"/>
+        <location filename="../src/AddConstraintDialog.ui" line="43"/>
         <source>To</source>
         <translation>До</translation>
     </message>
     <message>
-        <location filename="../src/ui/AddConstraintDialog.ui" line="84"/>
+        <location filename="../src/AddConstraintDialog.ui" line="84"/>
         <source>Min</source>
         <translation>Минимальное</translation>
     </message>
     <message>
-        <location filename="../src/ui/AddConstraintDialog.ui" line="97"/>
+        <location filename="../src/AddConstraintDialog.ui" line="97"/>
         <source>Max</source>
         <translation>Максимальное</translation>
     </message>
@@ -32,22 +32,22 @@
 <context>
     <name>QDDialog</name>
     <message>
-        <location filename="../src/ui/QDDialog.ui" line="14"/>
+        <location filename="../src/QDDialog.ui" line="14"/>
         <source>Analyze with Query Schema</source>
         <translation>Поиск сигналов с помощью дизайнера запросов</translation>
     </message>
     <message>
-        <location filename="../src/ui/QDDialog.ui" line="22"/>
+        <location filename="../src/QDDialog.ui" line="22"/>
         <source>File with query</source>
         <translation>Файл схемы запроса</translation>
     </message>
     <message>
-        <location filename="../src/ui/QDDialog.ui" line="36"/>
+        <location filename="../src/QDDialog.ui" line="36"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/QDDialog.ui" line="54"/>
+        <location filename="../src/QDDialog.ui" line="54"/>
         <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; }
@@ -110,24 +110,24 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>QueryEditorWidget</name>
     <message>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="14"/>
+        <location filename="../src/QueryEditorWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="35"/>
+        <location filename="../src/QueryEditorWidget.ui" line="35"/>
         <source>Property Editor</source>
         <translation>Редактор настроек</translation>
     </message>
     <message>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="49"/>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="78"/>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="88"/>
+        <location filename="../src/QueryEditorWidget.ui" line="49"/>
+        <location filename="../src/QueryEditorWidget.ui" line="78"/>
+        <location filename="../src/QueryEditorWidget.ui" line="88"/>
         <source>TextLabel</source>
         <translation>TextLabel</translation>
     </message>
     <message>
-        <location filename="../src/ui/QueryEditorWidget.ui" line="152"/>
+        <location filename="../src/QueryEditorWidget.ui" line="152"/>
         <source>Parameters</source>
         <translation>Параметры</translation>
     </message>
@@ -135,28 +135,28 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>RunQueryDlg</name>
     <message>
-        <location filename="../src/ui/RunQueryDialog.ui" line="26"/>
+        <location filename="../src/RunQueryDialog.ui" line="26"/>
         <source>Run Schema</source>
         <translation>Запуск схемы</translation>
     </message>
     <message>
-        <location filename="../src/ui/RunQueryDialog.ui" line="45"/>
+        <location filename="../src/RunQueryDialog.ui" line="45"/>
         <source>Load sequence</source>
         <translation>Последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ui/RunQueryDialog.ui" line="58"/>
+        <location filename="../src/RunQueryDialog.ui" line="58"/>
         <source>Save results to</source>
         <translation>Сохранить результаты в</translation>
     </message>
     <message>
-        <location filename="../src/ui/RunQueryDialog.ui" line="83"/>
-        <location filename="../src/ui/RunQueryDialog.ui" line="90"/>
+        <location filename="../src/RunQueryDialog.ui" line="83"/>
+        <location filename="../src/RunQueryDialog.ui" line="90"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/RunQueryDialog.ui" line="122"/>
+        <location filename="../src/RunQueryDialog.ui" line="122"/>
         <source>Add to project</source>
         <translation>Добавить к проекту</translation>
     </message>
@@ -315,44 +315,44 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDDialog</name>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="296"/>
+        <location filename="../src/QDRunDialog.cpp" line="297"/>
         <source>Search</source>
         <translation>Искать</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="297"/>
+        <location filename="../src/QDRunDialog.cpp" line="298"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="337"/>
+        <location filename="../src/QDRunDialog.cpp" line="338"/>
         <source>Select query</source>
         <translation>Выбор схемы запроса</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="353"/>
-        <location filename="../src/QDRunDialog.cpp" line="360"/>
+        <location filename="../src/QDRunDialog.cpp" line="354"/>
+        <location filename="../src/QDRunDialog.cpp" line="361"/>
         <source>Can not load %1</source>
         <translation>Не удаётся загрузить схему %1</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="390"/>
+        <location filename="../src/QDRunDialog.cpp" line="391"/>
         <source>File with query is not selected!</source>
         <translation>Не выбран файл схемы!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="395"/>
+        <location filename="../src/QDRunDialog.cpp" line="396"/>
         <source>Error in schema!</source>
         <translation>Ошибка в схеме!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="401"/>
-        <location filename="../src/QDRunDialog.cpp" line="413"/>
+        <location filename="../src/QDRunDialog.cpp" line="402"/>
+        <location filename="../src/QDRunDialog.cpp" line="414"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="413"/>
+        <location filename="../src/QDRunDialog.cpp" line="414"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
@@ -738,32 +738,32 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDRunDialog</name>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="107"/>
+        <location filename="../src/QDRunDialog.cpp" line="130"/>
         <source>Select output file</source>
         <translation>Выбрать выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="104"/>
+        <location filename="../src/QDRunDialog.cpp" line="106"/>
         <source>Select input file</source>
         <translation>Выбрать входной файл</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="77"/>
+        <location filename="../src/QDRunDialog.cpp" line="83"/>
         <source>Run</source>
         <translation>Выполнить</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="78"/>
+        <location filename="../src/QDRunDialog.cpp" line="84"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="141"/>
+        <location filename="../src/QDRunDialog.cpp" line="142"/>
         <source>The sequence is not specified!</source>
         <translation>Не задана последовательность!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="145"/>
+        <location filename="../src/QDRunDialog.cpp" line="146"/>
         <source>The output file is not selected!</source>
         <translation>Не задан выходной файл!</translation>
     </message>
@@ -771,17 +771,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDRunDialogTask</name>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="159"/>
+        <location filename="../src/QDRunDialog.cpp" line="160"/>
         <source>Query Designer</source>
         <translation>Дизайнер запросов</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="210"/>
+        <location filename="../src/QDRunDialog.cpp" line="211"/>
         <source>Sequence not found!</source>
         <translation>Последовательность не найдена!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="219"/>
+        <location filename="../src/QDRunDialog.cpp" line="220"/>
         <source>Sequence not found, document: %1</source>
         <translation>Последовательность не найдена, документ: %1</translation>
     </message>
diff --git a/src/plugins/remote_blast/CMakeLists.txt b/src/plugins/remote_blast/CMakeLists.txt
new file mode 100644
index 0000000..b76f15a
--- /dev/null
+++ b/src/plugins/remote_blast/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME remote_blast)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/remote_blast/remote_blast.pro b/src/plugins/remote_blast/remote_blast.pro
index 71fe94c..6779a0e 100644
--- a/src/plugins/remote_blast/remote_blast.pro
+++ b/src/plugins/remote_blast/remote_blast.pro
@@ -10,7 +10,7 @@ HEADERS += src/RemoteBLASTPlugin.h \
 			src/RemoteBLASTWorker.h \
 			src/DBRequestFactory.h \
                         src/BlastQuery.h
-FORMS += src/ui/RemoteBLASTDialog.ui
+FORMS += src/RemoteBLASTDialog.ui
 SOURCES += src/RemoteBLASTPlugin.cpp \
 			src/RemoteBLASTPluginTests.cpp \
 			src/RemoteBLASTTask.cpp \
diff --git a/src/plugins/remote_blast/src/ui/RemoteBLASTDialog.ui b/src/plugins/remote_blast/src/RemoteBLASTDialog.ui
similarity index 100%
rename from src/plugins/remote_blast/src/ui/RemoteBLASTDialog.ui
rename to src/plugins/remote_blast/src/RemoteBLASTDialog.ui
diff --git a/src/plugins/remote_blast/src/SendSelectionDialog.cpp b/src/plugins/remote_blast/src/SendSelectionDialog.cpp
index 97b2b23..ea6e391 100644
--- a/src/plugins/remote_blast/src/SendSelectionDialog.cpp
+++ b/src/plugins/remote_blast/src/SendSelectionDialog.cpp
@@ -137,7 +137,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, "17467726");
+    new HelpButton(this, buttonBox, "17470659");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/remote_blast/src/SendSelectionDialog.h b/src/plugins/remote_blast/src/SendSelectionDialog.h
index 535c078..f9f6ca9 100644
--- a/src/plugins/remote_blast/src/SendSelectionDialog.h
+++ b/src/plugins/remote_blast/src/SendSelectionDialog.h
@@ -22,7 +22,7 @@
 #ifndef _SEND_SELECTION_DIALOG_H_
 #define _SEND_SELECTION_DIALOG_H_
 
-#include "ui/ui_RemoteBLASTDialog.h"
+#include "ui_RemoteBLASTDialog.h"
 
 #include <U2Core/DNASequenceObject.h>
 #include <U2Gui/CreateAnnotationWidgetController.h>
diff --git a/src/plugins/remote_blast/transl/english.ts b/src/plugins/remote_blast/transl/english.ts
index 15fe948..2428558 100644
--- a/src/plugins/remote_blast/transl/english.ts
+++ b/src/plugins/remote_blast/transl/english.ts
@@ -79,142 +79,142 @@
 <context>
     <name>RemoteBLASTDialog</name>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="20"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="20"/>
         <source>Search Through a Remote Database</source>
         <translation>Search Through a Remote Database</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="54"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="54"/>
         <source>General options</source>
         <translation>General options</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="74"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="74"/>
         <source>Select the search type:</source>
         <translation>Select the search type:</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="82"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="82"/>
         <source>blastn</source>
         <translation>blastn</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="87"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="87"/>
         <source>blastp</source>
         <translation>blastp</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="92"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="92"/>
         <source>cdd</source>
         <translation>cdd</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="100"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="100"/>
         <source>Search for short, nearly exact matches</source>
         <translation>Search for short, nearly exact matches</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="107"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="107"/>
         <source>Expectation value:</source>
         <translation>Expectation value:</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="114"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="114"/>
         <source>Megablast</source>
         <translation>Megablast</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="182"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="182"/>
         <source>The database:</source>
         <translation>The database:</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="193"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="193"/>
         <source>Human genomic plus transcript - est_human</source>
         <translation>Human genomic plus transcript - est_human</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="198"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="198"/>
         <source>Mouse genomic plus transcript - est_mouse</source>
         <translation>Mouse genomic plus transcript - est_mouse</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="203"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="203"/>
         <source>Nucleotide collection - nr</source>
         <translation>Nucleotide collection - nr</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="208"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="208"/>
         <source>Reference nRNA sequences - refseq_rna</source>
         <translation>Reference nRNA sequences - refseq_rna</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="213"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="213"/>
         <source>Reference genomic seqence - refseq_genomic</source>
         <translation>Reference genomic seqence - refseq_genomic</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="218"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="218"/>
         <source>NCBI genomes - chromosome</source>
         <translation>NCBI genomes - chromosome</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="223"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="223"/>
         <source>Express sequence tags - est</source>
         <translation>Express sequence tags - est</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="228"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="228"/>
         <source>Non-human, non-mouse ESTs - est_other</source>
         <translation>Non-human, non-mouse ESTs - est_other</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="233"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="233"/>
         <source>Genomic survey sequences - gss</source>
         <translation>Genomic survey sequences - gss</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="238"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="238"/>
         <source>High throughput genomic sequences - HTGS</source>
         <translation>High throughput genomic sequences - HTGS</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="243"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="243"/>
         <source>Patent sequences - pat</source>
         <translation>Patent sequences - pat</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="248"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="248"/>
         <source>Protein data bank - pdb</source>
         <translation>Protein data bank - pdb</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="253"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="253"/>
         <source>Human ALU repeat elements - alu_repeats</source>
         <translation>Human ALU repeat elements - alu_repeats</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="258"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="258"/>
         <source>Sequence tagged sites - dbsts</source>
         <translation>Sequence tagged sites - dbsts</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="263"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="263"/>
         <source>Whole-genome shotgun reads - wgs</source>
         <translation>Whole-genome shotgun reads - wgs</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="268"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="268"/>
         <source>Environmental samples - env_nt</source>
         <translation>Environmental samples - env_nt</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="298"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="298"/>
         <source>The database description:</source>
         <translation>The database description:</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="326"/>
+        <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; }
@@ -227,238 +227,238 @@ p, li { white-space: pre-wrap; }
 <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/ui/RemoteBLASTDialog.ui" line="364"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="364"/>
         <source>Search timeout</source>
         <translation>Search timeout</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="380"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="380"/>
         <source> min</source>
         <translation> min</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="402"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="402"/>
         <source>Advanced options</source>
         <translation>Advanced options</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="423"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="423"/>
         <source>3</source>
         <translation>3</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="428"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="428"/>
         <source>7</source>
         <translation>7</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="433"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="433"/>
         <source>11</source>
         <translation>11</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="438"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="438"/>
         <source>15</source>
         <translation>15</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="452"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="452"/>
         <source>Word size</source>
         <translation>Word size</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="459"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="459"/>
         <source>Gap costs</source>
         <translation>Gap costs</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="476"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="476"/>
         <source>11 1</source>
         <translation>11 1</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="481"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="481"/>
         <source>5 2</source>
         <translation>5 2</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="486"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="486"/>
         <source>4 2</source>
         <translation>4 2</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="491"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="491"/>
         <source>1 2</source>
         <translation>1 2</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="496"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="496"/>
         <source>0 2</source>
         <translation>0 2</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="501"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="501"/>
         <source>3 1</source>
         <translation>3 1</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="506"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="506"/>
         <source>2 1</source>
         <translation>2 1</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="511"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="511"/>
         <source>1 1</source>
         <translation>1 1</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="525"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="525"/>
         <source>Match scores</source>
         <translation>Match scores</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="536"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="536"/>
         <source>1 -2</source>
         <translation>1 -2</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="541"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="541"/>
         <source>1 -3</source>
         <translation>1 -3</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="546"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="546"/>
         <source>1 -4</source>
         <translation>1 -4</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="551"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="551"/>
         <source>2 -3</source>
         <translation>2 -3</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="556"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="556"/>
         <source>4 -5</source>
         <translation>4 -5</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="561"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="561"/>
         <source>1 -1</source>
         <translation>1 -1</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="575"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="575"/>
         <source>Matrix</source>
         <translation>Matrix</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="588"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="588"/>
         <source>PHI pattern</source>
         <translation>PHI pattern</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="608"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="608"/>
         <source>Entrez query</source>
         <translation>Entrez query</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="618"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="618"/>
         <source>Service</source>
         <translation>Service</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="639"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="639"/>
         <source>plain</source>
         <translation>plain</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="644"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="644"/>
         <source>psi</source>
         <translation>psi</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="649"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="649"/>
         <source>phi</source>
         <translation>phi</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="661"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="661"/>
         <source>Filters</source>
         <translation>Filters</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="667"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="667"/>
         <source>Low complexity filter</source>
         <translation>Low complexity filter</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="674"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="674"/>
         <source>Human repeats filter</source>
         <translation>Human repeats filter</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="684"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="684"/>
         <source>Masks</source>
         <translation>Masks</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="690"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="690"/>
         <source>Mask for lookup table only</source>
         <translation>Mask for lookup table only</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="697"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="697"/>
         <source>Mask lower case letters</source>
         <translation>Mask lower case letters</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="709"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="709"/>
         <source>Filter results</source>
         <translation>Filter results</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="717"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="717"/>
         <source>Filter by</source>
         <translation>Filter by</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="762"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="762"/>
         <source>Select result by</source>
         <translation>Select result by</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="738"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="738"/>
         <source>accession</source>
         <translation>accession</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="121"/>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="131"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="121"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="131"/>
         <source>The maximum number of results</source>
         <translation>The maximum number of results</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="124"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="124"/>
         <source>Results limit:</source>
         <translation>Results limit:</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="752"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="752"/>
         <source>EValue</source>
         <translation>EValue</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="724"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="724"/>
         <source>def (filter by definition of annotations)</source>
         <translation>def (filter by definition of annotations)</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="745"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="745"/>
         <source>id</source>
         <translation>id</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="731"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="731"/>
         <source>Score</source>
         <translation>Score</translation>
     </message>
diff --git a/src/plugins/remote_blast/transl/russian.ts b/src/plugins/remote_blast/transl/russian.ts
index c47e1a2..737e258 100644
--- a/src/plugins/remote_blast/transl/russian.ts
+++ b/src/plugins/remote_blast/transl/russian.ts
@@ -79,142 +79,142 @@
 <context>
     <name>RemoteBLASTDialog</name>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="20"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="20"/>
         <source>Search Through a Remote Database</source>
         <translation>Запрос к удаленной базе данных</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="54"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="54"/>
         <source>General options</source>
         <translation>Основные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="74"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="74"/>
         <source>Select the search type:</source>
         <translation>Выберите вид поиска:</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="82"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="82"/>
         <source>blastn</source>
         <translation>blastn</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="87"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="87"/>
         <source>blastp</source>
         <translation>blastp</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="92"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="92"/>
         <source>cdd</source>
         <translation>cdd</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="100"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="100"/>
         <source>Search for short, nearly exact matches</source>
         <translation>Поиск коротких последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="107"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="107"/>
         <source>Expectation value:</source>
         <translation>Математическое ожидание:</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="114"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="114"/>
         <source>Megablast</source>
         <translation>Megablast</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="182"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="182"/>
         <source>The database:</source>
         <translation>База данных:</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="193"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="193"/>
         <source>Human genomic plus transcript - est_human</source>
         <translation>Human genomic plus transcript - est_human</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="198"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="198"/>
         <source>Mouse genomic plus transcript - est_mouse</source>
         <translation>Mouse genomic plus transcript - est_mouse</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="203"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="203"/>
         <source>Nucleotide collection - nr</source>
         <translation>Nucleotide collection - nr</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="208"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="208"/>
         <source>Reference nRNA sequences - refseq_rna</source>
         <translation>Reference nRNA sequences - refseq_rna</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="213"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="213"/>
         <source>Reference genomic seqence - refseq_genomic</source>
         <translation>Reference genomic seqence - refseq_genomic</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="218"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="218"/>
         <source>NCBI genomes - chromosome</source>
         <translation>NCBI genomes - chromosome</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="223"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="223"/>
         <source>Express sequence tags - est</source>
         <translation>Express sequence tags - est</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="228"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="228"/>
         <source>Non-human, non-mouse ESTs - est_other</source>
         <translation>Non-human, non-mouse ESTs - est_other</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="233"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="233"/>
         <source>Genomic survey sequences - gss</source>
         <translation>Genomic survey sequences - gss</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="238"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="238"/>
         <source>High throughput genomic sequences - HTGS</source>
         <translation>High throughput genomic sequences - HTGS</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="243"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="243"/>
         <source>Patent sequences - pat</source>
         <translation>Patent sequences - pat</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="248"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="248"/>
         <source>Protein data bank - pdb</source>
         <translation>Protein data bank - pdb</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="253"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="253"/>
         <source>Human ALU repeat elements - alu_repeats</source>
         <translation>Human ALU repeat elements - alu_repeats</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="258"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="258"/>
         <source>Sequence tagged sites - dbsts</source>
         <translation>Sequence tagged sites - dbsts</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="263"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="263"/>
         <source>Whole-genome shotgun reads - wgs</source>
         <translation>Whole-genome shotgun reads - wgs</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="268"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="268"/>
         <source>Environmental samples - env_nt</source>
         <translation>Environmental samples - env_nt</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="298"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="298"/>
         <source>The database description:</source>
         <translation>Описание базы данных:</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="326"/>
+        <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; }
@@ -227,238 +227,238 @@ p, li { white-space: pre-wrap; }
 <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/ui/RemoteBLASTDialog.ui" line="364"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="364"/>
         <source>Search timeout</source>
         <translation>Тайм-аут поиска</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="380"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="380"/>
         <source> min</source>
         <translation>мин</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="402"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="402"/>
         <source>Advanced options</source>
         <translation>Расширенные опции</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="423"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="423"/>
         <source>3</source>
         <translation>3</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="428"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="428"/>
         <source>7</source>
         <translation>7</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="433"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="433"/>
         <source>11</source>
         <translation>11</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="438"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="438"/>
         <source>15</source>
         <translation>15</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="452"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="452"/>
         <source>Word size</source>
         <translation>Размер слова</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="459"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="459"/>
         <source>Gap costs</source>
         <translation>Вес пробела</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="476"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="476"/>
         <source>11 1</source>
         <translation>11 1</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="481"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="481"/>
         <source>5 2</source>
         <translation>5 2</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="486"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="486"/>
         <source>4 2</source>
         <translation>4 2</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="491"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="491"/>
         <source>1 2</source>
         <translation>1 2</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="496"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="496"/>
         <source>0 2</source>
         <translation>0 2</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="501"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="501"/>
         <source>3 1</source>
         <translation>3 1</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="506"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="506"/>
         <source>2 1</source>
         <translation>2 1</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="511"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="511"/>
         <source>1 1</source>
         <translation>1 1</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="525"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="525"/>
         <source>Match scores</source>
         <translation>Веса совпадений</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="536"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="536"/>
         <source>1 -2</source>
         <translation>1 -2</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="541"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="541"/>
         <source>1 -3</source>
         <translation>1 -3</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="546"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="546"/>
         <source>1 -4</source>
         <translation>1 -4</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="551"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="551"/>
         <source>2 -3</source>
         <translation>2 -3</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="556"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="556"/>
         <source>4 -5</source>
         <translation>4 -5</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="561"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="561"/>
         <source>1 -1</source>
         <translation>1 -1</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="575"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="575"/>
         <source>Matrix</source>
         <translation>Матрица</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="588"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="588"/>
         <source>PHI pattern</source>
         <translation>Шаблон PHI</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="608"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="608"/>
         <source>Entrez query</source>
         <translation>Entrez запрос</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="618"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="618"/>
         <source>Service</source>
         <translation>Сервис</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="639"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="639"/>
         <source>plain</source>
         <translation>plain</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="644"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="644"/>
         <source>psi</source>
         <translation>psi</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="649"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="649"/>
         <source>phi</source>
         <translation>phi</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="661"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="661"/>
         <source>Filters</source>
         <translation>Фильтры</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="667"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="667"/>
         <source>Low complexity filter</source>
         <translation>Фильтр низкой сложности</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="674"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="674"/>
         <source>Human repeats filter</source>
         <translation>Фильтр человеческих повторов</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="684"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="684"/>
         <source>Masks</source>
         <translation>Маски</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="690"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="690"/>
         <source>Mask for lookup table only</source>
         <translation>Только маска таблицы поиска</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="697"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="697"/>
         <source>Mask lower case letters</source>
         <translation>Маска символов нижн. регистра</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="709"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="709"/>
         <source>Filter results</source>
         <translation>Результаты фильтрации</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="717"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="717"/>
         <source>Filter by</source>
         <translation>Фильтровать по</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="762"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="762"/>
         <source>Select result by</source>
         <translation>Выбрать результаты по</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="738"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="738"/>
         <source>accession</source>
         <translation>accession</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="121"/>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="131"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="121"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="131"/>
         <source>The maximum number of results</source>
         <translation>Максимальное число результатов</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="124"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="124"/>
         <source>Results limit:</source>
         <translation>Предел результатов:</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="752"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="752"/>
         <source>EValue</source>
         <translation>EValue</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="724"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="724"/>
         <source>def (filter by definition of annotations)</source>
         <translation>def (фильтр по определению аннотаций)</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="745"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="745"/>
         <source>id</source>
         <translation>id</translation>
     </message>
     <message>
-        <location filename="../src/ui/RemoteBLASTDialog.ui" line="731"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="731"/>
         <source>Score</source>
         <translation>Score</translation>
     </message>
diff --git a/src/plugins/remote_service/remote_service.license b/src/plugins/remote_service/remote_service.license
deleted file mode 100644
index d159169..0000000
--- a/src/plugins/remote_service/remote_service.license
+++ /dev/null
@@ -1,339 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/src/plugins/remote_service/remote_service.pri b/src/plugins/remote_service/remote_service.pri
deleted file mode 100644
index 3458094..0000000
--- a/src/plugins/remote_service/remote_service.pri
+++ /dev/null
@@ -1,7 +0,0 @@
-# include (remote_service.pri)
-
-PLUGIN_ID=remote_service
-PLUGIN_NAME=Remote tasks
-PLUGIN_VENDOR=Unipro
-
-include( ../../ugene_plugin_common.pri )
diff --git a/src/plugins/remote_service/remote_service.pro b/src/plugins/remote_service/remote_service.pro
deleted file mode 100644
index 92cc1a1..0000000
--- a/src/plugins/remote_service/remote_service.pro
+++ /dev/null
@@ -1,29 +0,0 @@
-include (remote_service.pri)
-
-# Input
-HEADERS += src/Base64File.h \
-           src/BufferedDataReader.h \
-           src/RemoteServiceCommon.h \
-           src/RemoteServiceMachine.h \
-           src/RemoteServicePingTask.h \
-           src/RemoteServicePlugin.h \
-           src/RemoteServiceSettingsUI.h \
-           src/RemoteServiceUtilTasks.h \
-           src/RemoteTasksDialog.h \
-           src/UctpRequestBuilders.h \
-           src/WebTransportProtocol.h \
-           src/base64/cdecode.h \
-           src/base64/cencode.h
-FORMS += src/ui/RemoteServiceSupportUI.ui src/ui/TaskStatisticsDialog.ui
-SOURCES += src/Base64File.cpp \
-           src/BufferedDataReader.cpp \
-           src/RemoteServiceMachine.cpp \
-           src/RemoteServicePingTask.cpp \
-           src/RemoteServicePlugin.cpp \
-           src/RemoteServiceSettingsUI.cpp \
-           src/RemoteServiceUtilTasks.cpp \
-           src/RemoteTasksDialog.cpp \
-           src/UctpRequestBuilders.cpp \
-           src/WebTransportProtocol.cpp \
-           src/base64/cdecode.c \
-           src/base64/cencode.c
diff --git a/src/plugins/remote_service/src/Base64File.cpp b/src/plugins/remote_service/src/Base64File.cpp
deleted file mode 100644
index be87906..0000000
--- a/src/plugins/remote_service/src/Base64File.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * 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 <QtCore/QFileInfo>
-#include <QtCore/QBuffer>
-
-#include "Base64File.h"
-
-#include <assert.h>
-
-namespace U2 {
-
-
-#define BUFSIZE 8192
-
-Base64File::Base64File( const QString& url )
-: file(url)
-{
-    base64_init_encodestate(&encodeState);
-    buf.reserve(BUFSIZE*2);
-    bufLen = 0;
-    bufOffset = 0;
-}
-
-bool Base64File::open( OpenMode mode )
-{
-    bool ok = file.open(mode);
-    if (ok) {
-        setOpenMode(mode);
-    }
-
-    return ok;
-}
-
-qint64 Base64File::size() const
-{
-    return QFileInfo(file).size() * 4/3;
-}
-
-
-qint64 Base64File::readData( char *data, qint64 maxlen )
-{
-    qint64 bytesRead = 0;
-
-    if (file.atEnd() && bufLen == 0) {
-        return -1;
-    }
-
-    forever {
-        if (bufLen == 0) {
-            // fill buffer
-            QByteArray fileData;
-            fileData.reserve(BUFSIZE);
-            bufOffset = 0;
-            qint64 len = file.read(fileData.data(), BUFSIZE);
-            if (len <= 0) {
-                // EOF is reached
-                break;
-            }
-            qint64 codelen = base64_encode_block(fileData.constData(), len, buf.data(), &encodeState);
-            bufLen += codelen;
-            if (file.atEnd()) {
-                bufLen += base64_encode_blockend(buf.data() + codelen, &encodeState);
-            }
-        }
-
-        qint64 bytesToRead = maxlen - bytesRead;
-        qint64 len = bufLen > bytesToRead ? bytesToRead : bufLen;
-        memcpy(data + bytesRead, buf.data() + bufOffset, len );
-        bufOffset += len;
-        bytesRead += len;
-        bufLen -= len;
-        if (bytesRead == maxlen) {
-            break;
-        }
-        assert(bufLen == 0);
-    }
-
-    return bytesRead;
-
-}
-
-qint64 Base64File::writeData( const char* , qint64 )
-{
-    return -1;
-}
-
-
-} //namespace
diff --git a/src/plugins/remote_service/src/Base64File.h b/src/plugins/remote_service/src/Base64File.h
deleted file mode 100644
index 85b3abe..0000000
--- a/src/plugins/remote_service/src/Base64File.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * 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 _BASE64_FILE_H_
-#define _BASE64_FILE_H_
-
-#include <QtCore/QFile>
-
-extern "C"
-{
-#include "base64/cencode.h"
-}
-
-namespace U2 {
-
-class Base64File : public QIODevice
-{
-public:
-    Base64File(const QString& url);
-    virtual bool isSequential() const { return true; }
-    virtual bool open(OpenMode mode);
-    virtual qint64 size() const;
-    QString fileName() const { return file.fileName(); }
-protected:
-    virtual qint64 readData(char *data, qint64 maxlen);
-    virtual qint64 writeData(const char* data, qint64 maxlen);
-
-private:
-    QByteArray          buf;
-    qint64              bufLen;
-    qint64              bufOffset;
-    QFile               file;
-    base64_encodestate  encodeState;
-};
-
-
-} // namespace
-
-
-#endif // _BASE64_FILE_H_
diff --git a/src/plugins/remote_service/src/BufferedDataReader.cpp b/src/plugins/remote_service/src/BufferedDataReader.cpp
deleted file mode 100644
index 721b50c..0000000
--- a/src/plugins/remote_service/src/BufferedDataReader.cpp
+++ /dev/null
@@ -1,200 +0,0 @@
-/**
- * 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 "BufferedDataReader.h"
-
-#include <assert.h>
-
-namespace U2 {
-
-static QList<QByteArray> splitBuffers(const QByteArray& request, const QByteArray& splitMarker) {
-    QList<QByteArray> result;
-    static int len = QByteArray(splitMarker).length() ;
-    int start = 0;
-
-    for (; ;) {
-        int pos = request.indexOf(splitMarker,start);
-        if (pos == -1 ) {
-            QByteArray buf = request.mid(start);
-            assert(buf.startsWith("</data>"));
-            result.append(buf);
-            break;
-        }
-        QByteArray buf = request.mid(start, pos - start );
-        assert(buf.endsWith(">"));
-        result.append(buf);
-        start = pos + len;
-    }
-
-    return result;
-
-}
-
-
-BufferedDataReader::BufferedDataReader( const QStringList& inputUrls, const QByteArray& requestTemplate, const QByteArray& splitMarker )
-    : curIdx(0), hasErrors(false)
-{
-    buffersData = splitBuffers(requestTemplate, splitMarker);
-
-    foreach (const QString& url, inputUrls) {
-        inputFiles.append(new Base64File(url));
-    }
-
-    for (int i = 0; i < buffersData.count(); ++i) {
-        inputBufs.append( new QBuffer(&buffersData[i]));
-    }
-
-    assert(buffersData.count() == inputFiles.count() + 1);
-    setErrorString("");
-
-}
-
-bool BufferedDataReader::open( OpenMode mode )
-{
-    if (mode != QIODevice::ReadOnly) {
-        setError("Only ReadOnly open mode is supported for device.");
-        return false;
-    }
-
-
-    if (buffersData.count() != inputFiles.count() + 1) {
-        setError("Incorrect buffer splitting.");
-        return false;
-    }
-
-    foreach (Base64File* file, inputFiles) {
-        if (!file->open(QIODevice::ReadOnly)) {
-            setError(QString("Failed to open file  %").arg(file->fileName()));
-            return false;
-        }
-    }
-
-    foreach (QBuffer* buf, inputBufs) {
-        if (!buf->open(QIODevice::ReadOnly)) {
-            setError(QString("Failed to open buffer of RunRemoteTaskRequest data."));
-            return false;
-        }
-    }
-
-
-    int numBufs = inputBufs.count();
-    for (int i = 0; i < numBufs; ++i) {
-        inputDevs.append(inputBufs[i]);
-        if (i + 1 < numBufs ) {
-            inputDevs.append(inputFiles[i]);
-        }
-    }
-
-    setOpenMode(QIODevice::ReadOnly);
-    return true;
-
-}
-
-/*
-    Each time this function is called, buffer of size=maxlen is prepared.
-    The buffer can include data from fragments of request template or from actual
-    file data.
-
-    After the buffer is prepared it's contents is copied into data.
-
-*/
-
-qint64 BufferedDataReader::readData( char *data, qint64 maxlen )
-{
-    assert(isOpen());
-
-    QByteArray preparedBuf;
-    preparedBuf.reserve(maxlen);
-
-    qint64 len = 0;
-    char* preparedData = preparedBuf.data();
-    const int MAX_INDEX = inputDevs.count() - 1;
-
-    if (hasErrors || curIdx > MAX_INDEX) {
-        return -1;
-    }
-
-    forever {
-        QIODevice* dev = inputDevs[curIdx];
-        assert(dev->isOpen());
-        qint64 bytesToRead = maxlen - len;
-        //TODO: support base64 encoding
-        qint64 bytesRead = dev->read(preparedData, bytesToRead);
-        if (-1 == bytesRead) {
-            setError(QString("Failed to read from buffered device."));
-            return -1;
-        }
-        len += bytesRead;
-        preparedData += bytesRead;
-
-        if (dev->bytesAvailable() == 0 && curIdx == MAX_INDEX ) {
-            curIdx++;
-            break;
-        }
-        if (len == maxlen ) {
-            break;
-        }
-        curIdx++;
-    }
-
-    memcpy(data, preparedBuf.constData(), len);
-
-    return len;
-}
-
-qint64 BufferedDataReader::writeData( const char* , qint64 )
-{
-    assert(0);
-    return -1;
-}
-
-
-
-BufferedDataReader::~BufferedDataReader()
-{
-    qDeleteAll(inputBufs);
-    qDeleteAll(inputFiles);
-}
-
-qint64 BufferedDataReader::size() const
-{
-    qint64 dataLen = 0;
-
-    foreach(QBuffer* buf, inputBufs) {
-        dataLen += buf->size();
-    }
-
-    foreach(Base64File* file, inputFiles) {
-        dataLen += file->size();
-    }
-
-    return dataLen + 100;
-}
-
-void BufferedDataReader::setError( const QString& errMsg )
-{
-    hasErrors = true;
-    setErrorString(errMsg);
-}
-
-
-
-} //namespace
diff --git a/src/plugins/remote_service/src/BufferedDataReader.h b/src/plugins/remote_service/src/BufferedDataReader.h
deleted file mode 100644
index 31736c6..0000000
--- a/src/plugins/remote_service/src/BufferedDataReader.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * 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 _BUFFERED_DATA_READER_H_
-#define _BUFFERED_DATA_READER_H_
-
-#include <QtCore/QList>
-#include <QtCore/QStringList>
-#include <QtCore/QFile>
-#include <QtCore/QBuffer>
-
-#include "Base64File.h"
-
-namespace U2 {
-
-class BufferedDataReader : public QIODevice
-{
-public:
-    BufferedDataReader(const QStringList& inputUrls, const QByteArray& requestTemplate, const QByteArray& splitMarker);
-    ~BufferedDataReader();
-    virtual bool isSequential() const { return true; }
-    virtual bool open(OpenMode mode);
-    virtual qint64 size() const;
-    void setError(const QString& errMsg);
-protected:
-    virtual qint64 readData(char *data, qint64 maxlen);
-    virtual qint64 writeData(const char* data, qint64 maxlen);
-
-private:
-    QList<QIODevice*>   inputDevs;
-    QList<Base64File*>       inputFiles;
-    QList<QBuffer*>     inputBufs;
-    QList<QByteArray>   buffersData;
-    int                 curIdx;
-    bool                hasErrors;
-
-};
-
-} //namespace
-
-#endif // _BUFFERED_DATA_READER_H_
-
diff --git a/src/plugins/remote_service/src/RemoteServiceCommon.h b/src/plugins/remote_service/src/RemoteServiceCommon.h
deleted file mode 100644
index b68bc66..0000000
--- a/src/plugins/remote_service/src/RemoteServiceCommon.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef _REMOTE_SERVICE_COMMON_H_
-#define _REMOTE_SERVICE_COMMON_H_
-
-namespace U2 {
-
-    
-class RemoteServiceCommon {
-public:
-    static const QString WEB_TRANSPORT_PROTOCOL_ID;
-};
-
-} // namespace U2
-
-#endif // _REMOTE_SERVICE_COMMON_H_
diff --git a/src/plugins/remote_service/src/RemoteServiceMachine.cpp b/src/plugins/remote_service/src/RemoteServiceMachine.cpp
deleted file mode 100644
index ecf37ec..0000000
--- a/src/plugins/remote_service/src/RemoteServiceMachine.cpp
+++ /dev/null
@@ -1,627 +0,0 @@
-/**
- * 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 <QtCore/QCryptographicHash>
-#include <QtCore/QThread>
-#include <QtCore/QTimer>
-#include <QtNetwork/QNetworkRequest>
-#include <QtNetwork/QNetworkReply>
-
-#ifndef QT_NO_OPENSSL
-#include <QtNetwork/QSslConfiguration>
-#endif
-
-#include <U2Core/AppContext.h>
-#include <U2Core/NetworkConfiguration.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/Log.h>
-#include <U2Core/GUrl.h>
-
-#include <U2Remote/RemoteMachineMonitor.h>
-#include <U2Lang/CoreLibConstants.h>
-
-#include "RemoteServiceCommon.h"
-#include "RemoteServiceMachine.h"
-#include "UctpRequestBuilders.h"
-
-namespace U2 {
-
-const QString RemoteServiceMachineSettings::GUEST_ACCOUNT("guest");
-
-#ifndef QT_NO_OPENSSL
-
-static bool registerMeta() {
-    qRegisterMetaType<QSslError>("QSslError");
-    qRegisterMetaType< QList<QSslError> >("QList<QSslError>");
-    return true;
-}
-
-static bool regMetaType = registerMeta();
-
-#endif
-
-// RemoteServiceMachine
-
-RemoteServiceMachine::RemoteServiceMachine(const RemoteServiceSettingsPtr& s)
-: settings(s), protocolHandler(new Uctp()), session(NULL)
-{
-
-    remoteServiceUrl = s->getUrl();
-
-    NetworkConfiguration* nc = AppContext::getAppSettings()->getNetworkConfiguration();
-    proxy = nc->getProxyByUrl(remoteServiceUrl);
-
-#ifndef QT_NO_OPENSSL
-    sslProtocol = nc->getSslProtocol();
-#endif //QT_NO_OPENSSL
-
-    QByteArray sid = s->getSessionId().toLatin1();
-    if (!sid.isEmpty() ) {
-        session.reset(new UctpSession(sid));
-    }
-    rsLog.trace("Started remote service machine instance");
-    parentThreadId = (qlonglong) QThread::currentThreadId();
-    rsLog.trace(QString("RemoteServiceMachine(): current thread is %1").arg( parentThreadId ));
-
-}
-
-RemoteServiceMachine::~RemoteServiceMachine() {
-
-}
-
-
-qint64 RemoteServiceMachine::runTask(TaskStateInfo& si, const QString & taskFactoryId, const QVariant & settings) {
-    qint64 taskId = -1;
-
-    if (taskFactoryId != Workflow::CoreLibConstants::WORKFLOW_ON_CLOUD_TASK_ID) {
-        si.setError(tr("Unsupported task type"));
-        return taskId;
-    }
-
-    initSession(si);
-    if (si.hasError()) {
-        return taskId;
-    }
-
-    rsLog.trace("Init session successful");
-
-    QVariantMap settingsMap = settings.toMap();
-    const QByteArray schema = settingsMap.value(Workflow::CoreLibConstants::WORKFLOW_SCHEMA_ATTR).toByteArray();
-    const QStringList inUrls =  settingsMap.value(Workflow::CoreLibConstants::DATA_IN_ATTR).toStringList();
-
-    RunRemoteTaskRequest request(session.data(), schema, inUrls);
-    QMap<QString,UctpElementData> replyData = sendRequest(si, request);
-    if (si.hasError()) {
-        return taskId;
-    }
-    UctpElementData elData = replyData.value(UctpElements::TASK);
-    QString taskIdStr (elData.attributesMap.value(UctpAttributes::TASK_ID));
-    bool ok = false;
-    taskId = taskIdStr.toLongLong(&ok);
-    if (!ok) {
-        si.setError(tr("Illegal task id format: %1").arg(taskId));
-        return taskId;
-    }
-    return taskId;
-}
-
-
-void RemoteServiceMachine::cancelTask(TaskStateInfo& si, qint64 taskId) {
-    UpdateRemoteTaskRequest request(UctpCommands::CANCEL_TASK, session.data(), taskId);
-    sendRequest(si, request);
-}
-
-static QString getElementValueByNameAttr(const QString& name, const QList<UctpElementData> elements) {
-    QString result;
-    foreach (const UctpElementData& data, elements) {
-        if (data.attributesMap.value(UctpAttributes::NAME) == name) {
-            result = data.textData;
-            break;
-        }
-    }
-
-    return result;
-}
-
- Task::State RemoteServiceMachine::getTaskState(TaskStateInfo& si, qint64 taskId) {
-    Task::State state = Task::State_Running;
-
-    QStringList properties;
-    properties.append(UctpElements::TASK_STATE);
-    properties.append(UctpElements::TASK_ERROR);
-    GetRemoteTaskPropertyRequest request(session.data(), taskId, properties);
-
-    QMap<QString,UctpElementData> replyData = sendRequest(si, request);
-    if (si.hasError()) {
-        return state;
-    }
-
-    QList<UctpElementData> propertyList = replyData.values(UctpElements::PROPERTY);
-    QByteArray stateText = getElementValueByNameAttr(UctpElements::TASK_STATE, propertyList).toLatin1();
-    if (stateText == UctpValues::UCTP_STATE_FINISHED) {
-        state = Task::State_Finished;
-        QByteArray errorText = getElementValueByNameAttr(UctpElements::TASK_ERROR, propertyList).toLatin1();
-        if (!errorText.isEmpty()) {
-            si.setError(errorText);
-        }
-    } else if (stateText.isEmpty()) {
-        si.setError(tr("Empty task state property"));
-    }
-    return state;
-}
-
-int RemoteServiceMachine::getTaskProgress(TaskStateInfo& si, qint64 taskId) {
-    int res = 0;
-    QStringList properties;
-    properties.append(UctpElements::TASK_PROGRESS);
-    GetRemoteTaskPropertyRequest request(session.data(), taskId, properties);
-
-    QMap<QString,UctpElementData> replyData = sendRequest(si, request);
-
-    if (si.hasError()) {
-        return res;
-    }
-
-    QList<UctpElementData> propertyList = replyData.values(UctpElements::PROPERTY);
-    QString buf = getElementValueByNameAttr(UctpElements::TASK_PROGRESS, propertyList);
-    bool ok = false;
-    res = buf.toInt(&ok);
-    if (!ok) {
-        si.setError(tr("Failed to parse task progress: %1").arg(buf));
-    }
-    return res;
-}
-
-void RemoteServiceMachine::getTaskResult(TaskStateInfo& si, qint64 taskId, const QStringList& urls, const QString& urlPrefix) {
-    try {
-        if (urls.isEmpty()) {
-            si.setError(tr("No files specified"));
-            return;
-        }
-
-        GetRemoteTaskResultRequst request(session.data(), taskId);
-
-        QMap<QString,UctpElementData> replyData = sendRequest(si, request);
-        if (si.hasError()) {
-            return;
-        }
-
-        QList<UctpElementData> elements = replyData.values(UctpElements::DATA);
-        if (!elements.isEmpty()) {
-            foreach( const GUrl& url, urls ) {
-                QString dataName = urlPrefix + url.fileName();
-                const QByteArray data = getElementValueByNameAttr(dataName, elements).toLatin1();
-                if (data.isEmpty()) {
-                    si.setError(tr("Result {%1} is not found.").arg(dataName));
-                    return;
-                }
-                saveResult( QByteArray::fromBase64(data), url.getURLString());
-            }
-        }
-
-    } catch (UctpError& e) {
-        si.setError(e.getErrorMessage());
-    }
-}
-
-
-QString RemoteServiceMachine::getTaskErrorMessage(TaskStateInfo& si, qint64 taskId) {
-    QString res;
-
-    QStringList properties;
-    properties.append(UctpElements::TASK_ERROR);
-    GetRemoteTaskPropertyRequest request(session.data(), taskId, properties);
-
-    QMap<QString,UctpElementData> replyData = sendRequest(si, request);
-    if (si.hasError()) {
-        return res;
-    }
-
-    QList<UctpElementData> propertyList = replyData.values(UctpElements::PROPERTY);
-    res = getElementValueByNameAttr(UctpElements::TASK_ERROR, propertyList);
-    return res;
-}
-
-void RemoteServiceMachine::ping(TaskStateInfo& si) {
-    PingRequest request;
-
-    sendRequest(si, request);
-}
-
-
-QString RemoteServiceMachine::getServerName(TaskStateInfo& si) {
-    QString res;
-    initSession(si);
-    if (si.hasError()) {
-        return res;
-    }
-
-    GetGlobalPropertyRequest request(session.data(), BaseGlobalProperties::HOST_NAME);
-    QMap<QString,UctpElementData> replyData = sendRequest(si, request);
-    if (si.hasError()) {
-        return res;
-    }
-    UctpElementData elData = replyData.value(UctpElements::PROPERTY);
-    if (elData.attributesMap.value(UctpAttributes::NAME) == BaseGlobalProperties::HOST_NAME ) {
-        res = elData.textData;
-    }
-    return res;
-}
-
-void RemoteServiceMachineReplyHandler::sl_onReplyFinished(QNetworkReply* reply ) {
-    assert(reply != NULL);
-    assert(eventLoop != NULL);
-    si->setDescription("");
-    if (reply->error() == QNetworkReply::NoError) {
-        bool parseOk = protocolHandler->parseReply(reply, command, *replyData);
-        if (!parseOk) {
-            si->setError(QString(tr("Failed to parse server response. %1")).arg(protocolHandler->getErrorText()));
-        }
-    } else {
-        if(!si->hasError()) {
-            si->setError(reply->errorString());
-        }
-    }
-
-    eventLoop->exit();
-}
-
-void RemoteServiceMachineReplyHandler::sl_onUploadProgress(qint64 bytesSent, qint64 bytesTotal) {
-    if(bytesTotal != -1) {
-        si->setDescription(RemoteServiceMachineReplyHandler::tr("Uploading %1%").arg((int)(bytesSent / (float)bytesTotal * 100)));
-    }
-    inactiveCount = 0;
-}
-
-void RemoteServiceMachineReplyHandler::sl_onDownloadProgress(qint64 bytesSent, qint64 bytesTotal) {
-    if(bytesTotal != -1) {
-        si->setDescription(RemoteServiceMachineReplyHandler::tr("Downloading %1%").arg((int)(bytesSent / (float)bytesTotal * 100)));
-    }
-    inactiveCount = 0;
-}
-
-void RemoteServiceMachineReplyHandler::sl_onTimer() {
-    if(si->cancelFlag) {
-        reply->abort();
-    }
-    if(static_cast<QTimer*>(sender())->interval() * inactiveCount > requestTimeout ) {
-        si->setError(RemoteServiceMachineReplyHandler::tr("Request inactivity time is up"));
-        reply->abort();
-    }
-    inactiveCount++;
-}
-
-void RemoteServiceMachineReplyHandler::onProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *auth){
-    auth->setUser(proxy.user());
-    auth->setPassword(proxy.password());
-    disconnect(this, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-}
-
-
-QMap<QString,UctpElementData> RemoteServiceMachine::sendRequest(TaskStateInfo& si,  UctpRequestBuilder& requestBuilder ) {
-
-    QByteArray command = requestBuilder.getCommand();
-    rsLog.trace(QString("SendRequest(%1): current thread is %2").arg(command.constData()).arg(( qlonglong) QThread::currentThreadId() ));
-
-    QMap<QString,UctpElementData> replyData;
-
-    QIODevice* dataSource = requestBuilder.getDataSource();
-
-    if (dataSource == NULL) {
-        si.setError(tr("Send request failed: empty message data"));
-        return replyData;
-    }
-
-    //qint64 dataLength = dataSource->size();
-    QEventLoop eventLoop;
-    QNetworkAccessManager networkManager;
-    networkManager.setProxy(proxy);
-
-    QNetworkRequest request (remoteServiceUrl);
-    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/xml");
-
-#ifndef QT_NO_OPENSSL
-    QSslConfiguration sslConf = QSslConfiguration::defaultConfiguration();
-
-    sslConf.setProtocol(sslProtocol);
-    request.setSslConfiguration(sslConf);
-#endif
-
-    QNetworkReply *reply = networkManager.post(request, dataSource );
-    QTimer timer;
-    RemoteServiceMachineReplyHandler handler(protocolHandler.data(), &eventLoop, &replyData, command, &si, reply, AppContext::getAppSettings()->getNetworkConfiguration()->remoteRequestTimeout() * 1000);
-
-    connect(&networkManager, SIGNAL(finished(QNetworkReply*)), &handler, SLOT(sl_onReplyFinished(QNetworkReply*)));
-    connect(&networkManager, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)), &handler, SLOT(onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
-    connect(reply, SIGNAL(uploadProgress(qint64, qint64)), &handler, SLOT(sl_onUploadProgress(qint64, qint64)));
-    connect(reply, SIGNAL(downloadProgress(qint64, qint64)), &handler, SLOT(sl_onDownloadProgress(qint64, qint64)));
-    connect(&timer, SIGNAL(timeout()), &handler, SLOT(sl_onTimer()));
-
-#ifndef QT_NO_OPENSSL
-    // QNetworkAccessManager bug workaround:
-    // If the network reply and the manager are created in different threads
-    // blocked connection is required for ssl errors signal
-    qlonglong threadId = (qlonglong) QThread::currentThreadId();
-    Qt::ConnectionType connectionType = threadId == parentThreadId ? Qt::AutoConnection : Qt::BlockingQueuedConnection;
-    connect(&networkManager, SIGNAL(sslErrors( QNetworkReply *, const QList<QSslError> & )), SLOT(sl_onSslErrors( QNetworkReply*, const QList<QSslError>& )), connectionType );
-#endif
-
-    timer.start(1000);
-
-    eventLoop.exec();
-
-    timer.stop();
-
-    return replyData;
-}
-
-void RemoteServiceMachine::initSession(TaskStateInfo& si) {
-    if (!settings->getUserCredentials().valid) {
-        si.setError(tr("User authentication info is not available"));
-        return;
-    }
-
-    if (!session.isNull()) {
-        return;
-    }
-    QByteArray userName = settings->getUserName().toLatin1();
-    QByteArray pass = settings->getPasswd().toLatin1();
-
-    if (userName == RemoteServiceMachineSettings::GUEST_ACCOUNT) {
-        // in this case we set the password
-        pass = RemoteServiceMachineSettings::GUEST_ACCOUNT.toLatin1();
-    }
-
-    InitSessionRequest request(userName, pass);
-
-    QMap<QString,UctpElementData> replyData =  sendRequest(si, request);
-    if (si.hasError()) {
-        return;
-    }
-    UctpElementData elData = replyData.value(UctpElements::SESSION);
-    QByteArray id = elData.attributesMap.value(UctpAttributes::SESSION_ID);
-    session.reset(new UctpSession(id));
-    updateGlobalSettings();
-
-    const UserCredentials& credentials = settings->getUserCredentials();
-    if (credentials.valid && !credentials.permanent) {
-        settings->flushCredentials();
-    }
-}
-
-
-void RemoteServiceMachine::saveResult( const QByteArray& result, const QString& path ) {
-    QFile resultFile(path);
-    if ( !resultFile.open(QIODevice::WriteOnly) ) {
-        throw UctpError("Can not open file to write results");
-    }
-
-    qint64 bytesWrittern = resultFile.write(result);
-    if (bytesWrittern != result.size()) {
-        throw UctpError("Error writing results");
-    }
-}
-
-void RemoteServiceMachine::updateGlobalSettings() {
-    settings->setSessionId(session->getUid());
-}
-
-#ifndef QT_NO_OPENSSL
-void RemoteServiceMachine::sl_onSslErrors(QNetworkReply * reply, const QList<QSslError> & errors ) {
-    QSslError error;
-    foreach(const QSslError& e, errors) {
-        rsLog.trace(tr("SSL connection errors: %1").arg(e.errorString()));
-    }
-    reply->ignoreSslErrors();
-}
-#endif //QT_NO_OPENSSL
-
-
-
-void RemoteServiceMachine::getTaskProperties( TaskStateInfo& si, qint64 taskId, QMap<QString,QString>& properties) {
-    GetRemoteTaskPropertyRequest request( session.data(), taskId, properties.keys());
-
-    QMap<QString,UctpElementData> replyData = sendRequest(si, request);
-    if (si.hasError()) {
-        return;
-    }
-    QList<UctpElementData> propertyList = replyData.values(UctpElements::PROPERTY);
-    foreach (const QString& propertyName, properties.keys()) {
-        QString propertyValue = getElementValueByNameAttr(propertyName, propertyList);
-        properties.insert(propertyName, propertyValue);
-    }
-}
-
-
-QList<qint64> RemoteServiceMachine::getActiveTasks(TaskStateInfo& si) {
-    return getTasksList(si, BaseGlobalProperties::TASKS_LIST_ACTIVE);
-}
-
-QList<qint64> RemoteServiceMachine::getFinishedTasks(TaskStateInfo& si) {
-    return getTasksList(si, BaseGlobalProperties::TASKS_LIST_FINISHED);
-}
-
-
-QList<qint64> RemoteServiceMachine::getTasksList( TaskStateInfo& si, const QByteArray& taskState) {
-    QList<qint64> res;
-    initSession(si);
-    if (si.hasError()) {
-        return res;
-    }
-
-    GetGlobalPropertyRequest request( session.data(), taskState);
-
-    QMap<QString,UctpElementData> replyData = sendRequest(si, request);
-    if (si.hasError()) {
-        return res;
-    }
-    QList<UctpElementData> propertyList = replyData.values(UctpElements::PROPERTY);
-    QStringList ids = getElementValueByNameAttr(taskState, propertyList).split(",", QString::SkipEmptyParts);
-    foreach(const QString& idStr, ids ) {
-        bool ok = false;
-        qint64 taskId = idStr.toLongLong(&ok);
-        if (ok) {
-            res.append(taskId);
-        }
-    }
-    return res;
-}
-
-void RemoteServiceMachine::deleteRemoteTask(TaskStateInfo& si,  qint64 taskId) {
-    UpdateRemoteTaskRequest request(UctpCommands::DELETE_TASK, session.data(), taskId);
-    sendRequest( si, request );
-}
-
-RemoteMachineSettingsPtr RemoteServiceMachine::getSettings()
-{
-    return qSharedPointerCast<RemoteMachineSettings>(settings);
-}
-
-
-// RemoteServiceMachineSettings
-
-RemoteServiceMachineSettings::RemoteServiceMachineSettings(const QString &host):
-RemoteMachineSettings(AppContext::getProtocolInfoRegistry()->getProtocolInfo( RemoteServiceCommon::WEB_TRANSPORT_PROTOCOL_ID ), RemoteMachineType_RemoteService ),
-url(host)
-{
-    rsLog.trace(QString("Created remote service configuration %1").arg(host));
-}
-
-#define URL_ATTR "url"
-#define NAME_ATTR "login"
-#define PASSWD_ATTR "passwd"
-
-
-
-bool RemoteServiceMachineSettings::operator ==( const RemoteMachineSettings & m ) const {
-    const RemoteMachineSettings * machine = &m;
-    // TODO: this crap to be removed
-    const RemoteServiceMachineSettings* cfg = dynamic_cast< const RemoteServiceMachineSettings* >( machine );
-    if( NULL == cfg ) {
-        return false;
-    }
-
-    return url == cfg->getUrl();
-}
-
-QString RemoteServiceMachineSettings::serialize() const {
-    QStringList cfg;
-    cfg.append(QString("%1=%2").arg(URL_ATTR).arg(url));
-    if (credentials.valid) {
-        cfg.append(QString("%1=%2").arg(NAME_ATTR).arg(credentials.name));
-        cfg.append(QString("%1=%2").arg(PASSWD_ATTR).arg(credentials.passwd));
-    }
-
-    return cfg.join("\n");
-}
-
-bool RemoteServiceMachineSettings::deserialize( const QString & data ) {
-    QStringList lines = data.split("\n", QString::SkipEmptyParts);
-
-    QString name, passwd;
-    foreach (const QString cfgLine, lines) {
-        if (cfgLine.startsWith("#")) {
-            continue;
-        } else if (cfgLine.startsWith(URL_ATTR)) {
-             url = cfgLine.split("=").at(1).trimmed();
-        } else if (cfgLine.startsWith(NAME_ATTR)) {
-            name =cfgLine.split("=").at(1).trimmed();
-        } else if (cfgLine.startsWith(PASSWD_ATTR)) {
-            passwd = cfgLine.split("=").at(1).trimmed();
-        }
-    }
-
-    if (url.isEmpty()) {
-        return false;
-    }
-
-    if (!name.isEmpty()) {
-        if (name == GUEST_ACCOUNT || !passwd.isEmpty()){
-            setupCredentials(name, passwd, true);
-        }
-    }
-
-    return true;
-}
-
-
-QString RemoteServiceMachineSettings::getUserName() const {
-    assert(credentials.valid);
-    return credentials.name;
-}
-
-QString RemoteServiceMachineSettings::getPasswd() const {
-    assert(credentials.valid);
-    return credentials.passwd;
-}
-
-bool RemoteServiceMachineSettings::usesGuestAccount() const {
-    if (!credentials.valid) {
-        return false;
-    }
-
-    if (credentials.name == GUEST_ACCOUNT) {
-        return true;
-    } else {
-        return false;
-    }
-}
-
-RemoteServiceMachineSettings::~RemoteServiceMachineSettings()
-{
-    rsLog.trace(QString("Deleting configuration for %1").arg(url));
-}
-
-// RemoteServiceMachineFactory
-
-RemoteServiceMachineFactory::RemoteServiceMachineFactory() {
-}
-
-RemoteServiceMachineFactory::~RemoteServiceMachineFactory() {
-}
-
-RemoteMachine * RemoteServiceMachineFactory::createInstance( const QString & serializedSettings ) const {
-    RemoteServiceSettingsPtr settings(new RemoteServiceMachineSettings);
-    if(settings->deserialize(serializedSettings))
-    {
-        return createInstance(settings);
-    }
-    return NULL;
-}
-
-RemoteMachine * RemoteServiceMachineFactory::createInstance( const RemoteMachineSettingsPtr& settings ) const {
-    RemoteServiceSettingsPtr castedSettings = qSharedPointerDynamicCast<RemoteServiceMachineSettings>(settings);
-    // TODO: this crap to be removed
-    if(NULL != castedSettings) {
-        return new RemoteServiceMachine(castedSettings);
-    }
-    return NULL;
-}
-
-RemoteMachineSettingsPtr RemoteServiceMachineFactory::createSettings( const QString & serializedSettings ) const {
-    RemoteMachineSettingsPtr ret( new RemoteServiceMachineSettings );
-    if( ret->deserialize( serializedSettings ) ) {
-        return ret;
-    }
-    return RemoteMachineSettingsPtr();
-}
-
-} // namespace U2
diff --git a/src/plugins/remote_service/src/RemoteServiceMachine.h b/src/plugins/remote_service/src/RemoteServiceMachine.h
deleted file mode 100644
index 5ad0b6e..0000000
--- a/src/plugins/remote_service/src/RemoteServiceMachine.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * 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 _REMOTE_SERVICE_MACHINE_H_
-#define _REMOTE_SERVICE_MACHINE_H_
-
-#include <QtCore/QEventLoop>
-#include <QtCore/QPointer>
-#include <QtNetwork/QNetworkAccessManager>
-#include <QtNetwork/QNetworkProxy>
-#include <QtNetwork/QAuthenticator>
-
-#ifndef QT_NO_OPENSSL
-#include <QtNetwork/QSslError>
-#endif
-
-#include <U2Remote/RemoteMachine.h>
-#include "WebTransportProtocol.h"
-
-namespace U2 {
-
-class RemoteServiceMachineSettings : public RemoteMachineSettings {
-public:
-    RemoteServiceMachineSettings(const QString &url = QString());
-    ~RemoteServiceMachineSettings();
-
-    virtual bool operator==( const RemoteMachineSettings& machine ) const;
-
-    QString getUrl()const {return url; }
-    QString getUserName() const;
-    QString getPasswd() const;
-    QString getSessionId() const { return sessionId; }
-    void setSessionId(const QString& id) { sessionId = id; }
-    bool usesGuestAccount() const;
-
-    virtual QString getName() const { return url; }
-    virtual QString serialize() const;
-
-    bool deserialize( const QString & data );
-    static const QString GUEST_ACCOUNT;
-private:
-    QString url;
-    QString sessionId;
-};
-
-class UctpSession;
-
-typedef QSharedPointer<RemoteServiceMachineSettings> RemoteServiceSettingsPtr;
-
-class RemoteServiceMachine : public QObject, public RemoteMachine {
-    Q_OBJECT
-public:
-    RemoteServiceMachine(const RemoteServiceSettingsPtr& s);
-    virtual ~RemoteServiceMachine();
-
-    // Runs task on remote machine. Returns remote taskId
-    virtual qint64 runTask( TaskStateInfo& si, const QString & taskFactoryId, const QVariant & settings);
-
-    // Cancels remote task
-    virtual void cancelTask(TaskStateInfo& si, qint64 taskId );
-
-    // Retrieves remote task state
-    virtual Task::State getTaskState(TaskStateInfo& si, qint64 taskId) ;
-
-    // Retrieves remote task progress [0..100%]
-    virtual int getTaskProgress(TaskStateInfo& si, qint64 taskId);
-
-    // Retrieves remote task result
-    virtual void getTaskResult(TaskStateInfo& si, qint64 taskId, const QStringList& resultUrls, const QString& urlPrefix );
-
-    // Retrieves remote task error message
-    virtual QString getTaskErrorMessage(TaskStateInfo& si, qint64 taskId);
-
-    // Returns remote machine server name. TODO: refactor
-    virtual QString getServerName(TaskStateInfo& si);
-
-    // Lists active tasks ids on remote machine
-    virtual QList<qint64> getActiveTasks(TaskStateInfo& si);
-
-    // Pings remote machine
-    virtual void ping(TaskStateInfo& si);
-
-    virtual RemoteMachineSettingsPtr getSettings();
-
-    //non-virtual methods -> TODO: refactor or add to the base interface
-    void initSession(TaskStateInfo& si);
-
-    // for the given task property names fills values
-    void getTaskProperties(TaskStateInfo& si, qint64 taskId, QMap<QString,QString>& properties);
-
-    // returns list of finished tasks
-    QList<qint64> getFinishedTasks(TaskStateInfo& si);
-
-    // removes remote task and all its data
-    void deleteRemoteTask(TaskStateInfo& si, qint64 taskId);
-
-#ifndef QT_NO_OPENSSL
-private slots:
-    void sl_onSslErrors( QNetworkReply* reply, const QList<QSslError> & errors );
-#endif
-
-private:
-    QMap<QString,UctpElementData> sendRequest(TaskStateInfo& si, UctpRequestBuilder& requestBuilder);
-    void saveResult(const QByteArray& result, const QString& path);
-    void updateGlobalSettings();
-    bool replyContainsData(const QString& dataName);
-
-    QList<qint64> getTasksList(TaskStateInfo& si, const QByteArray& taskState);
-
-    RemoteServiceSettingsPtr settings;
-
-#ifndef QT_NO_OPENSSL
-    QSsl::SslProtocol                   sslProtocol;
-#endif
-    QNetworkProxy                       proxy;
-    QScopedPointer<Uctp>                 protocolHandler;
-    QScopedPointer<UctpSession>          session;
-    QString                             remoteServiceUrl;
-    qlonglong                           parentThreadId;
-};
-
-// helper class to handle request/reply io
-class RemoteServiceMachineReplyHandler : public QObject {
-    Q_OBJECT
-public:
-    RemoteServiceMachineReplyHandler(Uctp* _ph, QEventLoop* _el, QMap<QString,UctpElementData>* _rd,
-                                    const QByteArray& _ac, TaskStateInfo* _si, QNetworkReply* _reply, const int _requestTimeout)
-    : requestTimeout(_requestTimeout), protocolHandler(_ph), eventLoop(_el), replyData(_rd), command(_ac), si(_si), reply(_reply),
-    inactiveCount(0) {}
-private slots:
-    void sl_onReplyFinished(QNetworkReply* reply);
-    void sl_onUploadProgress(qint64 bytesSent, qint64 bytesTotal);
-    void sl_onDownloadProgress(qint64 bytesSent, qint64 bytesTotal);
-    void sl_onTimer();
-    void onProxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*);
-private:
-    const int                       requestTimeout;
-    Uctp*                           protocolHandler;
-    QEventLoop*                     eventLoop;
-    QMap<QString,UctpElementData>*  replyData;
-    QByteArray                      command;
-    TaskStateInfo*                  si;
-    QNetworkReply*                  reply;
-    int                             inactiveCount;
-};
-
-class RemoteServiceMachineFactory : public RemoteMachineFactory {
-public:
-    RemoteServiceMachineFactory();
-    virtual ~RemoteServiceMachineFactory();
-
-    virtual RemoteMachine * createInstance( const QString& serializedSettings ) const;
-    virtual RemoteMachine * createInstance( const RemoteMachineSettingsPtr& settings ) const;
-    virtual RemoteMachineSettingsPtr createSettings( const QString & serializedSettings ) const;
-};
-
-
-} // namespace U2
-
-#endif // _REMOTE_SERVICE_MACHINE_H_
diff --git a/src/plugins/remote_service/src/RemoteServicePingTask.cpp b/src/plugins/remote_service/src/RemoteServicePingTask.cpp
deleted file mode 100644
index f57fadf..0000000
--- a/src/plugins/remote_service/src/RemoteServicePingTask.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * 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 "RemoteServicePingTask.h"
-
-#include <U2Remote/SerializeUtils.h>
-#include <U2Core/Log.h>
-
-namespace U2 {
-
-#define PING_REMOTE_SERVICE_LOG "ping-remote-server"
-
-RemoteServicePingTask::RemoteServicePingTask( const QString& url )
-:Task( tr( "RemoteServicePingTask" ), TaskFlags( TaskFlags_FOSCOE ) ),
-machinePath(url), machine(NULL),  machineFactory(new RemoteServiceMachineFactory())
-{
-
-}
-
-void RemoteServicePingTask::prepare() {
-
-    if( machinePath.isEmpty() ) {
-        setError("Path to remote server settings file is not set");
-        return;
-    }
-
-    RemoteMachineSettingsPtr machineSettings = RemoteMachineSettingsPtr();
-    if (QFile::exists(machinePath)) {
-        machineSettings = SerializeUtils::deserializeRemoteMachineSettingsFromFile(machinePath);
-    } else {
-        machineSettings = SerializeUtils::deserializeRemoteMachineSettings(machinePath);
-    }
-    if( machineSettings == NULL ) {
-        setError( tr("Can not parse remote server settings file %1").arg(machinePath) );
-        return;
-    }
-
-    RemoteMachine* m = machineFactory->createInstance(machineSettings);
-    machine.reset( static_cast<RemoteServiceMachine*> (m) );
-
-}
-
-void RemoteServicePingTask::run()
-{
-    SAFE_POINT(!machine.isNull(), "Invalid remote machine detected!", );
-    if (isCanceled() || hasError()) {
-        return;
-    }
-
-    machine->initSession(stateInfo);
-    if (hasError()) {
-        return;
-    }
-
-    QString hostName = machine->getServerName(stateInfo);
-}
-
-} // namespace U2
-
-
diff --git a/src/plugins/remote_service/src/RemoteServicePingTask.h b/src/plugins/remote_service/src/RemoteServicePingTask.h
deleted file mode 100644
index 205861e..0000000
--- a/src/plugins/remote_service/src/RemoteServicePingTask.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 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 _REMOTE_SERVICE_PING_TASK_H_
-#define _REMOTE_SERVICE_PING_TASK_H_
-
-#include "RemoteServiceMachine.h"
-
-#include <U2Core/Task.h>
-
-namespace U2 {
-
-class RemoteServicePingTask : public Task {
-    Q_OBJECT
-public:
-    RemoteServicePingTask(const QString& url);
-    virtual void prepare();
-    virtual void run();
-private:
-    QString machinePath;
-    QScopedPointer<RemoteServiceMachine> machine;
-    QScopedPointer<RemoteServiceMachineFactory> machineFactory;
-};
-
-
-} // namespace U2
-
-#endif // _REMOTE_SERVICE_PING_TASK_H_
diff --git a/src/plugins/remote_service/src/RemoteServicePlugin.cpp b/src/plugins/remote_service/src/RemoteServicePlugin.cpp
deleted file mode 100644
index 436b0a4..0000000
--- a/src/plugins/remote_service/src/RemoteServicePlugin.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * 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/AppContext.h>
-#include <U2Core/Settings.h>
-#include <U2Core/TaskStarter.h>
-#include <U2Core/CMDLineRegistry.h>
-#include <U2Remote/RemoteMachineMonitor.h>
-
-#include "RemoteServiceCommon.h"
-#include "RemoteServicePlugin.h"
-#include "RemoteServiceSettingsUI.h"
-#include "RemoteServicePingTask.h"
-
-namespace U2 {
-
-
-#define EC2_URL     "http://184.73.180.209:80/rservice/engine"
-#define EC2_PASS    "rulezzz"
-#define PING_REMOTE_SERVICE  "ping-remote-service"
-
-extern "C" Q_DECL_EXPORT U2::Plugin* U2_PLUGIN_INIT_FUNC()
-{
-    RemoteServicePlugin* plug = new RemoteServicePlugin();
-    return plug;
-}
-
-const QString RemoteServiceCommon::WEB_TRANSPORT_PROTOCOL_ID = "Web transport protocol";
-
-static void cleanupRemoteMachineMonitor() {
-    RemoteMachineMonitor* rmm = AppContext::getRemoteMachineMonitor();
-    QList<RemoteMachineSettingsPtr> items = rmm->getRemoteMachineMonitorItems();
-
-    foreach (const RemoteMachineSettingsPtr& item, items) {
-        rmm->removeMachineConfiguration(item);
-    }
-}
-
-
-RemoteServicePlugin::RemoteServicePlugin():
-    Plugin(tr("UGENE Remote Service Support"),
-        tr("Launching remote tasks via UGENE Remote Service")),
-    protocolUI((NULL == AppContext::getMainWindow())? NULL:(new RemoteServiceSettingsUI())),
-    protocolInfo( RemoteServiceCommon::WEB_TRANSPORT_PROTOCOL_ID , protocolUI.data(),
-                  &remoteMachineFactory )
-{
-    AppContext::getProtocolInfoRegistry()->registerProtocolInfo(&protocolInfo);
-
-    if (thisIsFirstLaunch()) {
-        cleanupRemoteMachineMonitor();
-        RemoteServiceSettingsPtr settings( new RemoteServiceMachineSettings(EC2_URL) );
-        settings->setupCredentials(RemoteServiceMachineSettings::GUEST_ACCOUNT, EC2_PASS, true);
-        AppContext::getRemoteMachineMonitor()->addMachineConfiguration(settings);
-    }
-    registerCMDLineHelp();
-    processCMDLineOptions();
-}
-
-RemoteServicePlugin::~RemoteServicePlugin()
-{
-
-}
-
-void RemoteServicePlugin::registerCMDLineHelp()
-{
-
-}
-
-void RemoteServicePlugin::processCMDLineOptions()
-{
-    CMDLineRegistry * cmdlineReg = AppContext::getCMDLineRegistry();
-    assert(cmdlineReg != NULL);
-
-    if( cmdlineReg->hasParameter( PING_REMOTE_SERVICE ) )
-    {
-        QString machinePath = cmdlineReg->getParameterValue(PING_REMOTE_SERVICE);
-        Task * t = new RemoteServicePingTask(machinePath);
-        connect(AppContext::getPluginSupport(), SIGNAL(si_allStartUpPluginsLoaded()), new TaskStarter(t), SLOT(registerTask()));
-    }
-}
-
-#define NOT_FIRST_LAUNCH "remote_service/not_first_launch"
-
-bool RemoteServicePlugin::thisIsFirstLaunch()
-{
-    Settings* settings = AppContext::getSettings();
-    QString key = settings->toVersionKey(NOT_FIRST_LAUNCH);
-    if (settings->contains(key)) {
-        return false;
-    } else {
-        settings->setValue(key, QVariant(true));
-        return true;
-    }
-}
-
-
-
-
-} // namespace U2
diff --git a/src/plugins/remote_service/src/RemoteServicePlugin.h b/src/plugins/remote_service/src/RemoteServicePlugin.h
deleted file mode 100644
index 3901749..0000000
--- a/src/plugins/remote_service/src/RemoteServicePlugin.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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 _REMOTE_SERVICE_PLUGIN_H_
-#define _REMOTE_SERVICE_PLUGIN_H_
-
-#include <U2Core/PluginModel.h>
-#include <U2Remote/ProtocolInfo.h>
-
-#include "RemoteServiceMachine.h"
-
-namespace U2 {
-
-class RemoteServiceSettingsUI;
-
-class RemoteServicePlugin : public Plugin {
-    Q_OBJECT
-
-public:
-    RemoteServicePlugin();
-    virtual ~RemoteServicePlugin();
-
-private:
-    QScopedPointer<RemoteServiceSettingsUI> protocolUI;
-    RemoteServiceMachineFactory remoteMachineFactory;
-    ProtocolInfo protocolInfo;
-private:
-    bool thisIsFirstLaunch();
-    void registerCMDLineHelp();
-    void processCMDLineOptions();
-};
-
-} // namespace U2
-
-#endif // _REMOTE_SERVICE_PLUGIN_H_
diff --git a/src/plugins/remote_service/src/RemoteServiceSettingsUI.cpp b/src/plugins/remote_service/src/RemoteServiceSettingsUI.cpp
deleted file mode 100644
index fedea36..0000000
--- a/src/plugins/remote_service/src/RemoteServiceSettingsUI.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * 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/AppContext.h>
-
-#include "RemoteServiceMachine.h"
-#include "RemoteServiceSettingsUI.h"
-#include "RemoteTasksDialog.h"
-
-namespace U2 {
-
-
-RemoteServiceSettingsUI::RemoteServiceSettingsUI()
-{
-    setupUi(this);
-}
-
-RemoteServiceSettingsUI::~RemoteServiceSettingsUI() {
-}
-
-RemoteMachineSettingsPtr RemoteServiceSettingsUI::createMachine() const {
-    if( !validate().isEmpty()) {
-        return RemoteMachineSettingsPtr();
-    }
-
-    QString url = urlLineEdit->text().trimmed();
-
-    RemoteServiceSettingsPtr s( new RemoteServiceMachineSettings(url) );
-
-    if (guestRB->isChecked()) {
-        s->setupCredentials(RemoteServiceMachineSettings::GUEST_ACCOUNT, QString(), true);
-    } else {
-        bool permanent = rememberEdit->isChecked();
-        s->setupCredentials(userNameEdit->text().trimmed(), passwdEdit->text(), permanent);
-    }
-
-    return s;
-
-}
-
-void RemoteServiceSettingsUI::initializeWidget(const RemoteMachineSettingsPtr& settings) {
-    //TODO: remove this crap
-    const RemoteServiceSettingsPtr castedSettings = qSharedPointerDynamicCast<RemoteServiceMachineSettings>(settings);
-    if (NULL != castedSettings) {
-        urlLineEdit->setText(castedSettings->getUrl());
-
-        if (castedSettings->usesGuestAccount()) {
-            guestRB->setChecked(true);
-        } else {
-            existingRB->setChecked(true);
-            const UserCredentials& credentials = settings->getUserCredentials();
-            if (credentials.valid) {
-                userNameEdit->setText(credentials.name);
-                passwdEdit->setText(credentials.passwd);
-                rememberEdit->setChecked(credentials.permanent);
-            }
-        }
-    }
-}
-
-QString RemoteServiceSettingsUI::validate() const {
-
-    QString url = urlLineEdit->text();
-    if( url.isEmpty() ) {
-        return tr( "Url is empty!" );
-    } else if (!url.startsWith("http://") && !(url.startsWith("https://"))) {
-        return tr("Unknown URL schema. The url must start from http(s)://");
-    }
-
-    if (existingRB->isChecked()) {
-        if( userNameEdit->text().isEmpty()) {
-            return tr( "User name is not valid!" );
-        }
-        if( passwdEdit->text().isEmpty())  {
-            return tr( "Password is empty!" );
-        }
-    }
-
-    return QString();
-}
-
-void RemoteServiceSettingsUI::clearWidget() {
-
-
-}
-
-QDialog* RemoteServiceSettingsUI::createUserTasksDialog( const RemoteMachineSettingsPtr& s, QWidget* parent ) {
-    //TODO: remove this crap
-    const RemoteServiceSettingsPtr settings = qSharedPointerDynamicCast< RemoteServiceMachineSettings >(s);
-
-    if (settings == NULL) {
-        return NULL;
-    }
-
-    return new RemoteTasksDialog(settings, parent);
-}
-
-
-
-} // namespace U2
diff --git a/src/plugins/remote_service/src/RemoteServiceSettingsUI.h b/src/plugins/remote_service/src/RemoteServiceSettingsUI.h
deleted file mode 100644
index 9c1e52a..0000000
--- a/src/plugins/remote_service/src/RemoteServiceSettingsUI.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 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 _REMOTE_SERVICE_SETTINGS_UI_H_
-#define _REMOTE_SERVICE_SETTINGS_UI_H_
-
-#include <U2Remote/ProtocolUI.h>
-#include "ui/ui_RemoteServiceSupportUI.h"
-
-namespace U2 {
-
-class RemoteServiceMachineSettings;
-
-class RemoteServiceSettingsUI : public ProtocolUI, public Ui::RemoteServiceSupportUI
-{
-    Q_OBJECT
-public:
-    RemoteServiceSettingsUI();
-    virtual ~RemoteServiceSettingsUI();
-
-    virtual RemoteMachineSettingsPtr createMachine() const;
-    virtual void initializeWidget(const RemoteMachineSettingsPtr& settings);
-    virtual void clearWidget();
-    virtual QDialog* createUserTasksDialog(const RemoteMachineSettingsPtr& settings, QWidget* parent);
-    virtual QString validate() const;
-
-};
-
-} // namespace U2
-
-#endif // _REMOTE_SERVICE_SETTINGS_UI_H_
diff --git a/src/plugins/remote_service/src/RemoteServiceUtilTasks.cpp b/src/plugins/remote_service/src/RemoteServiceUtilTasks.cpp
deleted file mode 100644
index 8fa2649..0000000
--- a/src/plugins/remote_service/src/RemoteServiceUtilTasks.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * 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/Log.h>
-#include <U2Core/Counter.h>
-
-#include "RemoteServiceMachine.h"
-#include "WebTransportProtocol.h"
-#include "RemoteServiceUtilTasks.h"
-
-#define REMOTE_SERVICE_TASKS_LOG "remote-service-tasks"
-
-
-namespace U2 {
-
-GetUserTasksInfoTask::GetUserTasksInfoTask( RemoteServiceMachine* m )
- : Task( tr( "GetUserTasksInfo" ), TaskFlags( TaskFlags_FOSCOE ) ), machine(m)
-{
-
-    GCOUNTER(cvar,tvar,"GetUserTasksInfo");
-    properties.insert(UctpElements::TASK_STATE, QString());
-    properties.insert(UctpElements::DATE_SUBMITTED, QString());
-    properties.insert(UctpElements::TASK_RESULTS, QString());
-}
-
-
-void GetUserTasksInfoTask::run() {
-    assert(machine != NULL);
-    if (isCanceled() || hasError()) {
-        return;
-    }
-
-    rsLog.details(tr("Retrieving remote tasks list for: %1").arg(machine->getSettings()->getName()));
-
-    machine->initSession(stateInfo);
-    if (hasError()) {
-        return;
-    }
-
-    QList<qint64> runningTaskIds;
-    runningTaskIds = machine->getActiveTasks(stateInfo);
-    if (hasError()) {
-        return;
-    }
-    rsLog.details(tr("Found %1 active remote tasks").arg(runningTaskIds.size()));
-
-    QList<qint64> finishedTaskIds;
-    finishedTaskIds = machine->getFinishedTasks(stateInfo);
-    if (hasError()) {
-        return;
-    }
-
-    rsLog.details(tr("Found %1 finished remote tasks").arg(finishedTaskIds.size()));
-    QList<qint64> taskIds;
-    taskIds << runningTaskIds << finishedTaskIds;
-
-    foreach(qint64 taskId, taskIds) {
-        machine->getTaskProperties(stateInfo, taskId, properties);
-        if (hasError()) {
-            break;
-        }
-
-        RemoteTaskInfo info;
-        info.taskId = QString("%1").arg(taskId);
-        info.date = properties.value(UctpElements::DATE_SUBMITTED);
-        info.taskState = properties.value(UctpElements::TASK_STATE);
-        info.result = properties.value(UctpElements::TASK_RESULTS);
-        infoList.append(info);
-    }
-}
-
-
-FetchRemoteTaskResultTask::FetchRemoteTaskResultTask( RemoteServiceMachine* m, const QStringList& urls, qint64 id )
-: Task( tr( "FetchRemoteTaskResult" ), TaskFlags( TaskFlags_FOSCOE ) ), machine(m), resultUrls(urls), taskId(id)
-{
-}
-
-void FetchRemoteTaskResultTask::run() {
-    assert(machine != NULL);
-    if (isCanceled() || hasError()) {
-        return;
-    }
-
-    machine->getTaskResult(stateInfo, taskId, resultUrls, "out/");
-}
-
-
-DeleteRemoteDataTask::DeleteRemoteDataTask( RemoteServiceMachine* m, qint64 id )
-: Task("DeleteRemoteDataTask", TaskFlags_FOSCOE), machine(m), taskId(id)
-{
-
-}
-
-void DeleteRemoteDataTask::run() {
-    assert(machine != NULL);
-    if (isCanceled() || hasError()) {
-        return;
-    }
-
-    machine->deleteRemoteTask(stateInfo, taskId);
-}
-
-
-} // namespace U2
-
diff --git a/src/plugins/remote_service/src/RemoteServiceUtilTasks.h b/src/plugins/remote_service/src/RemoteServiceUtilTasks.h
deleted file mode 100644
index f411679..0000000
--- a/src/plugins/remote_service/src/RemoteServiceUtilTasks.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * 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 _REMOTE_SERVICE_UTIL_TASKS_H_
-#define _REMOTE_SERVICE_UTIL_TASKS_H_
-
-#include <U2Core/Task.h>
-
-namespace U2 {
-
-class RemoteServiceMachine;
-
-struct RemoteTaskInfo {
-    QString taskId;
-    QString date;
-    QString taskState;
-    QString result;
-};
-
-
-class GetUserTasksInfoTask: public Task {
-    Q_OBJECT
-public:
-    GetUserTasksInfoTask(RemoteServiceMachine* machine);
-    virtual void run();
-    QList<RemoteTaskInfo>& getUserTasksInfo() { return infoList; }
-private:
-    RemoteServiceMachine* machine;
-    QMap<QString,QString> properties;
-    QList<RemoteTaskInfo> infoList;
-};
-
-class FetchRemoteTaskResultTask : public Task {
-    Q_OBJECT
-public:
-    FetchRemoteTaskResultTask(RemoteServiceMachine* machine, const QStringList& resultUrls, qint64 taskId);
-    virtual void run();
-private:
-    RemoteServiceMachine* machine;
-    QStringList resultUrls;
-    qint64 taskId;
-};
-
-
-class DeleteRemoteDataTask : public Task {
-public:
-    DeleteRemoteDataTask(RemoteServiceMachine* machine, qint64 taskId);
-    virtual void run();
-private:
-    RemoteServiceMachine* machine;
-    qint64 taskId;
-};
-
-
-} // namespace U2
-
-#endif // _REMOTE_SERVICE_UTIL_TASKS_H_
diff --git a/src/plugins/remote_service/src/RemoteTasksDialog.cpp b/src/plugins/remote_service/src/RemoteTasksDialog.cpp
deleted file mode 100644
index 5010d08..0000000
--- a/src/plugins/remote_service/src/RemoteTasksDialog.cpp
+++ /dev/null
@@ -1,232 +0,0 @@
-/**
- * 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 <QtCore/qglobal.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
-
-#include <U2Core/AppContext.h>
-
-#include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/U2FileDialog.h>
-
-#include "RemoteServiceMachine.h"
-#include "RemoteServiceUtilTasks.h"
-#include "RemoteTasksDialog.h"
-
-namespace U2 {
-
-RemoteTasksDialog::RemoteTasksDialog(const RemoteServiceSettingsPtr& settings,QWidget* parent )
-: QDialog(parent), getInfoTask(NULL), fetchResultTask(NULL), deleteRemoteDataTask(NULL), machine(NULL)
-{
-    setupUi(this);
-
-
-    machine.reset(new RemoteServiceMachine(settings));
-    urlLabel->setText(settings->getName());
-
-    connect(this, SIGNAL(finished(int)), SLOT(sl_onDialogClosed()));
-    connect(tasksTreeWidget, SIGNAL(itemSelectionChanged()),SLOT(sl_onSelectionChanged()) );
-    connect(refreshPushButton, SIGNAL(clicked()), SLOT(sl_onRefreshButtonClicked()));
-    connect(fetchPushButton, SIGNAL(clicked()), SLOT(sl_onFetchButtonClicked()));
-    connect(removePushButton, SIGNAL(clicked()), SLOT(sl_onRemoveButtonClicked()));
-
-    refresh();
-
-    updateState();
-    new HelpButton(this, buttonBox, "17467472");
-
-}
-
-void RemoteTasksDialog::updateState() {
-    bool enable = getInfoTask == NULL && !machine.isNull() && fetchResultTask == NULL;
-    bool itemSelected = tasksTreeWidget->selectedItems().size() > 0;
-
-    refreshPushButton->setEnabled(enable);
-    removePushButton->setEnabled(enable && itemSelected);
-    fetchPushButton->setEnabled(enable && itemSelected);
-}
-
-void RemoteTasksDialog::refresh() {
-    tasksTreeWidget->clear();
-    getInfoTask = new GetUserTasksInfoTask(machine.data());
-    getInfoTask->setErrorNotificationSuppression(true);
-    connect(getInfoTask, SIGNAL(si_stateChanged()), SLOT(sl_onRefreshFinished()));
-    AppContext::getTaskScheduler()->registerTopLevelTask(getInfoTask);
-
-}
-
-void RemoteTasksDialog::sl_onRefreshFinished() {
-
-    if (getInfoTask->getState() != Task::State_Finished) {
-        return;
-    }
-
-    QList<RemoteTaskInfo> infoItems = getInfoTask->getUserTasksInfo();
-
-    foreach(const RemoteTaskInfo& info, infoItems) {
-        addItemToView(info);
-    }
-
-    QHeaderView * header = tasksTreeWidget->header();
-    header->resizeSections( QHeaderView::ResizeToContents );
-
-    getInfoTask = NULL;
-
-    updateState();
-}
-
-void RemoteTasksDialog::addItemToView( const RemoteTaskInfo& info ) {
-    QStringList strings;
-    strings.append(info.taskId);
-    strings.append(info.date);
-    strings.append(info.taskState);
-    strings.append(info.result);
-    tasksTreeWidget->addTopLevelItem(new QTreeWidgetItem(strings));
-}
-
-void RemoteTasksDialog::sl_onRefreshButtonClicked() {
-    refresh();
-    updateState();
-}
-
-#define STATE_FINISHED "FINISHED"
-
-void RemoteTasksDialog::sl_onFetchButtonClicked() {
-
-    QTreeWidgetItem* current = tasksTreeWidget->currentItem();
-
-    QString state = current->text(2);
-    if (state != STATE_FINISHED) {
-        QMessageBox::warning(this, tr("Fetch data error"), tr("The task is not finished yet."));
-        return;
-    }
-
-
-    QString result = current->text(3);
-    if (result.isEmpty()) {
-        QMessageBox::warning(this, tr("Fetch data error"), tr("No result available for task."));
-        return;
-    }
-
-
-    bool ok = false;
-    qint64 taskId = current->text(0).toLongLong(&ok);
-    if (!ok) {
-        QMessageBox::warning(this, tr("Fetch data error"), tr("Failed to parse task id."));
-        return;
-    }
-
-    LastUsedDirHelper h;
-    QString folder = U2FileDialog::getExistingDirectory(this, tr("Select directory to save results: "), h.dir);
-
-    if (folder.isEmpty()) {
-        return;
-    }
-
-    QList<QString> urls = result.split(";");
-    for (int i = 0; i < urls.size(); ++i) {
-        QString& str = urls[i];
-        str.prepend(folder + "/");
-    }
-
-    fetchResultTask = new FetchRemoteTaskResultTask(machine.data(), urls, taskId);
-    fetchResultTask->setErrorNotificationSuppression(true);
-    connect(fetchResultTask, SIGNAL(si_stateChanged()), SLOT(sl_onFetchFinished()));
-    AppContext::getTaskScheduler()->registerTopLevelTask(fetchResultTask);
-}
-
-void RemoteTasksDialog::sl_onFetchFinished() {
-    if (fetchResultTask->getState() != Task::State_Finished) {
-        return;
-    }
-
-    if (!fetchResultTask->hasError()) {
-        QMessageBox::information(this, tr("Fetch data"), tr("Download finished successfully."));
-    } else {
-        QMessageBox::critical(this, tr("Fetch data error"), tr("Failed to download task result. %1").arg(fetchResultTask->getError()));
-    }
-
-    fetchResultTask = NULL;
-    updateState();
-}
-
-void RemoteTasksDialog::sl_onSelectionChanged() {
-    updateState();
-}
-
-void RemoteTasksDialog::sl_onRemoveButtonClicked() {
-    QTreeWidgetItem* current = tasksTreeWidget->currentItem();
-
-    bool ok = false;
-    qint64 taskId = current->text(0).toLongLong(&ok);
-    if (!ok) {
-        QMessageBox::critical(this, "Error!", "Failed to parse task id.");
-        return;
-    }
-
-    deleteRemoteDataTask = new DeleteRemoteDataTask(machine.data(), taskId);
-    deleteRemoteDataTask->setErrorNotificationSuppression(true);
-    connect(deleteRemoteDataTask, SIGNAL(si_stateChanged()), SLOT(sl_onRemoveTaskFinished()));
-    AppContext::getTaskScheduler()->registerTopLevelTask(deleteRemoteDataTask);
-}
-
-void RemoteTasksDialog::sl_onRemoveTaskFinished() {
-    if (deleteRemoteDataTask->getState() != Task::State_Finished) {
-        return;
-    }
-
-    if (deleteRemoteDataTask->hasError()) {
-        QMessageBox::critical(this, tr("Error"), tr("Failed to download task result. %1").arg(deleteRemoteDataTask->getError()));
-    }
-
-    deleteRemoteDataTask = NULL;
-    refresh();
-    updateState();
-}
-
-void RemoteTasksDialog::sl_onDialogClosed() {
-    //cleanup resources
-
-    if (fetchResultTask != NULL) {
-      fetchResultTask->disconnect(this);
-    }
-
-    if (getInfoTask != NULL) {
-        getInfoTask->disconnect(this);
-    }
-    if (deleteRemoteDataTask != NULL) {
-        deleteRemoteDataTask->disconnect(this);
-    }
-
-
-
-
-}
-
-
-
-}
diff --git a/src/plugins/remote_service/src/RemoteTasksDialog.h b/src/plugins/remote_service/src/RemoteTasksDialog.h
deleted file mode 100644
index a294eed..0000000
--- a/src/plugins/remote_service/src/RemoteTasksDialog.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * 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 _REMOTE_TASKS_DIALOG_H_
-#define _REMOTE_TASKS_DIALOG_H_
-
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-#include "ui/ui_TaskStatisticsDialog.h"
-#include "RemoteServiceMachine.h"
-
-namespace U2 {
-
-class GetUserTasksInfoTask;
-class FetchRemoteTaskResultTask;
-class DeleteRemoteDataTask;
-struct RemoteTaskInfo;
-
-class RemoteTasksDialog : public QDialog, public Ui::RemoteTasksDialog
-{
-    Q_OBJECT
-public:
-    RemoteTasksDialog(const RemoteServiceSettingsPtr& s,QWidget* parent = NULL);
-
-private slots:
-    void sl_onRefreshFinished();
-    void sl_onRefreshButtonClicked();
-    void sl_onFetchButtonClicked();
-    void sl_onRemoveButtonClicked();
-    void sl_onRemoveTaskFinished();
-    void sl_onFetchFinished();
-    void sl_onSelectionChanged();
-    void sl_onDialogClosed();
-
-
-private:
-    void addItemToView(const RemoteTaskInfo& info);
-    void refresh();
-    void updateState();
-    void clearTreeWidget();
-    GetUserTasksInfoTask* getInfoTask;
-    FetchRemoteTaskResultTask* fetchResultTask;
-    DeleteRemoteDataTask* deleteRemoteDataTask;
-    QScopedPointer<RemoteServiceMachine> machine;
-
-};
-
-} // namespace U2
-
-#endif // _REMOTE_TASKS_DIALOG_H_
diff --git a/src/plugins/remote_service/src/UctpRequestBuilders.cpp b/src/plugins/remote_service/src/UctpRequestBuilders.cpp
deleted file mode 100644
index 3fbcff6..0000000
--- a/src/plugins/remote_service/src/UctpRequestBuilders.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * 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 <QtCore/QFile>
-#include <QtCore/QFileInfo>
-
-#include <U2Core/Version.h>
-#include <U2Core/GUrl.h>
-
-#include "UctpRequestBuilders.h"
-#include "Base64File.h"
-
-namespace U2 {
-
-
-
-InitSessionRequest::InitSessionRequest( const QString& username, const QString& passwd )
-: UctpRequestBuilder(UctpCommands::AUTH), name(username), pass(passwd)
-{
-
-}
-
-void InitSessionRequest::formContents( QXmlStreamWriter& stream )
-{
-    stream.writeStartElement(UctpElements::SESSION);
-    stream.writeAttribute(UctpElements::USER_NAME, name);
-    stream.writeAttribute(UctpElements::PASSWD, pass);
-    stream.writeEndElement();
-}
-
-//////////////////////////////////////////////////////////////////////////
-
-
-
-#define TRANSITION_MARKER "0000_1111____TRANSITION____MARKER____1111____0000"
-
-
-static qint64 getFileSize(const QString& url) {
-    QFileInfo info(url);
-    return info.size();
-}
-
-
-RunRemoteTaskRequest::RunRemoteTaskRequest( UctpSession* s, const QByteArray& ts, const QStringList& input )
- : UctpRequestBuilder(UctpCommands::RUN_TASK), session(s), taskSchema(ts), inputUrls(input)
-{
-    QByteArray requestTemplate = prepareRequestTemplate();
-    reader = new BufferedDataReader(input, requestTemplate, TRANSITION_MARKER);
-}
-
-
-void RunRemoteTaskRequest::formContents( QXmlStreamWriter& stream )
-{
-    
-    stream.writeStartDocument();
-    stream.writeStartElement(UctpElements::REQUEST);
-    stream.writeAttribute(UctpAttributes::COMMAND_TYPE, UctpCommands::RUN_TASK);
-    stream.writeAttribute(UctpElements::APP_VERSION, Version::appVersion().text );
-    stream.writeAttribute(UctpAttributes::SESSION_ID, session->getUid());
-
-    // save schema
-    stream.writeStartElement(UctpElements::TASK);
-    stream.writeAttribute(UctpAttributes::ENCODING, UctpValues::BASE64);
-    stream.writeCharacters(taskSchema.toBase64());
-    stream.writeEndElement(); 
-
-    // save data
-    foreach(const QString url, inputUrls) {
-        stream.writeStartElement(UctpElements::DATA);
-        stream.writeAttribute(UctpAttributes::IS_GZIPPED, UctpValues::UCTP_FALSE);
-        stream.writeAttribute(UctpAttributes::ENCODING, UctpValues::BASE64);
-        stream.writeAttribute(UctpAttributes::NAME, GUrl(url).fileName());
-        stream.writeAttribute(UctpAttributes::SIZE, QString("%1").arg(getFileSize(url)));
-        stream.writeCharacters(TRANSITION_MARKER);
-        stream.writeEndElement();
-    }
-
-    stream.writeEndElement();
-    stream.writeEndDocument();
-
-}
-
-QByteArray RunRemoteTaskRequest::prepareRequestTemplate()
-{
-    QByteArray requestTemplate;
-    QXmlStreamWriter stream(&requestTemplate);
-    
-    formContents(stream);
-
-    return requestTemplate;
-}
-
-RunRemoteTaskRequest::~RunRemoteTaskRequest()
-{
-    delete reader;
-    reader = NULL;
-}
-
-QIODevice* RunRemoteTaskRequest::getDataSource()
-{
-    reader->open(QIODevice::ReadOnly);
-    return reader;
-}
-
- 
-
-//////////////////////////////////////////////////////////////////////////
-
-
-void GetRemoteTaskPropertyRequest::formContents( QXmlStreamWriter& stream )
-{
-    stream.writeAttribute(UctpAttributes::SESSION_ID, session->getUid()); 
-    
-    QString id = QString("%1").arg(taskId);
-    //this is task property
-    stream.writeStartElement(UctpElements::PROPERTY);
-    stream.writeAttribute(UctpAttributes::TASK_ID, id);
-    QString propRequest = properties.join(",");
-    stream.writeAttribute(UctpAttributes::NAME, propRequest);
-    stream.writeEndElement();
-}
-
-//////////////////////////////////////////////////////////////////////////
-
-
-void UpdateRemoteTaskRequest::formContents( QXmlStreamWriter& stream )
-{
-    stream.writeAttribute(UctpAttributes::SESSION_ID, session->getUid()); 
-    QString id = QString("%1").arg(taskId);
-    stream.writeStartElement(UctpElements::TASK);
-    stream.writeAttribute(UctpAttributes::TASK_ID, id);
-    stream.writeEndElement();
-}
-
-//////////////////////////////////////////////////////////////////////////
-
-void GetGlobalPropertyRequest::formContents( QXmlStreamWriter& stream )
-{
-    stream.writeAttribute(UctpAttributes::SESSION_ID, session->getUid()); 
-    stream.writeStartElement(UctpElements::PROPERTY);
-    stream.writeAttribute(UctpAttributes::NAME, propName);
-    stream.writeEndElement();
-}
-
-
-void GetRemoteTaskResultRequst::formContents( QXmlStreamWriter& stream )
-{
-    stream.writeAttribute(UctpAttributes::SESSION_ID, session->getUid());
-    stream.writeStartElement(UctpElements::TASK);
-    stream.writeAttribute(UctpAttributes::TASK_ID, QString("%1").arg(taskId));
-    stream.writeEndElement();
-}
-
-} // ~namespace
diff --git a/src/plugins/remote_service/src/UctpRequestBuilders.h b/src/plugins/remote_service/src/UctpRequestBuilders.h
deleted file mode 100644
index c2da85b..0000000
--- a/src/plugins/remote_service/src/UctpRequestBuilders.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * 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 _UCTP_REQUEST_BUILDERS_H_
-#define _UCTP_REQUEST_BUILDERS_H_
-
-#include "WebTransportProtocol.h"
-#include "BufferedDataReader.h"
-
-namespace U2 {
-
-class InitSessionRequest : public UctpRequestBuilder 
-{
-    QString name;
-    QString pass;
-public:
-    InitSessionRequest(const QString& username, const QString& passwd);
-protected:
-    virtual void formContents(QXmlStreamWriter& stream);
-};
-
-class PingRequest : public UctpRequestBuilder {
-public:
-    PingRequest() : UctpRequestBuilder(UctpCommands::PING) {}
-protected:
-    virtual void formContents(QXmlStreamWriter& ) {}
-};
-
-class GetGlobalPropertyRequest : public UctpRequestBuilder {
-    UctpSession* session;
-    QByteArray propName;
-public:
-    GetGlobalPropertyRequest(UctpSession* s, const QByteArray& propertyName)
-        : UctpRequestBuilder(UctpCommands::GET_PROPERTY), session(s), propName(propertyName) {}
-protected:
-    virtual void formContents(QXmlStreamWriter& writer);
-};
-
-class GetRemoteTaskPropertyRequest : public UctpRequestBuilder {
-    UctpSession* session;
-    qint64 taskId;
-    QStringList properties;
-public:
-    GetRemoteTaskPropertyRequest(UctpSession* s,  qint64 id, const QStringList& props) 
-        : UctpRequestBuilder(UctpCommands::GET_PROPERTY), session(s), taskId(id), properties(props) {}
-protected:
-    virtual void formContents(QXmlStreamWriter& writer); 
-};
-
-class GetRemoteTaskResultRequst : public UctpRequestBuilder {
-    UctpSession* session;
-    qint64 taskId;
-public:
-    GetRemoteTaskResultRequst(UctpSession* s, qint64 id) 
-        : UctpRequestBuilder(UctpCommands::GET_TASK_RESULT), session(s), taskId(id) {}
-protected:
-    virtual void formContents(QXmlStreamWriter& writer); 
-};
-
-
-class RunRemoteTaskRequest : public UctpRequestBuilder {
-    UctpSession* session;
-    const QByteArray& taskSchema;
-    const QStringList& inputUrls;
-    BufferedDataReader* reader;
-    QByteArray prepareRequestTemplate();
-public:
-    RunRemoteTaskRequest(UctpSession* session, const QByteArray& task, 
-           const QStringList& input);
-    ~RunRemoteTaskRequest();
-    virtual QIODevice* getDataSource();
-protected:
-    virtual void formContents(QXmlStreamWriter& writer);
-};
-
-
-class UpdateRemoteTaskRequest : public UctpRequestBuilder {
-    UctpSession* session;
-    qint64 taskId;
-public:
-    UpdateRemoteTaskRequest(const UctpCommand& cmd, UctpSession* s, qint64 id) 
-        : UctpRequestBuilder(cmd), session(s), taskId(id) {}
-protected:
-    virtual void formContents(QXmlStreamWriter& stream); 
-};
-
-
-
-} // namespace
-
-
-#endif // _UCTP_REQUEST_BUILDERS_H_
diff --git a/src/plugins/remote_service/src/WebTransportProtocol.cpp b/src/plugins/remote_service/src/WebTransportProtocol.cpp
deleted file mode 100644
index 24ecbb8..0000000
--- a/src/plugins/remote_service/src/WebTransportProtocol.cpp
+++ /dev/null
@@ -1,230 +0,0 @@
-/**
- * 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 "WebTransportProtocol.h"
-
-#include <U2Core/Log.h>
-#include <U2Core/Version.h>
-
-namespace U2 {
-
-const QByteArray UctpElements::REQUEST("request");
-const QByteArray UctpElements::RESPONSE("response");
-const QByteArray UctpElements::STATUS("status");
-const QByteArray UctpElements::APP_VERSION("app-version");
-const QByteArray UctpElements::MESSAGE("message");
-const QByteArray UctpElements::USER_NAME("username");
-const QByteArray UctpElements::PASSWD("passwd");
-const QByteArray UctpElements::PROPERTY("property");
-const QByteArray UctpElements::TASK("task");
-const QByteArray UctpElements::TASK_STATE("state");
-const QByteArray UctpElements::TASK_ERROR("error");
-const QByteArray UctpElements::TASK_PROGRESS("progress");
-const QByteArray UctpElements::TASK_RESULTS("task-results");
-const QByteArray UctpElements::DATA("data");
-const QByteArray UctpElements::DATE_SUBMITTED("state.NEW");
-const QByteArray UctpElements::SESSION("session");
-
-const QByteArray UctpAttributes::TASK_ID("task-id");
-const QByteArray UctpAttributes::SESSION_ID("session-id");
-const QByteArray UctpAttributes::COMMAND_TYPE("type");
-const QByteArray UctpAttributes::IS_GZIPPED("gzipped");
-const QByteArray UctpAttributes::ENCODING("encoding");
-const QByteArray UctpAttributes::NAME("name");
-const QByteArray UctpAttributes::SIZE("size");
-
-const UctpCommand UctpCommands::AUTH("AUTH");
-const UctpCommand UctpCommands::RUN_TASK("RUN_TASK");
-const UctpCommand UctpCommands::DELETE_TASK("DELETE_TASK");
-const UctpCommand UctpCommands::PING("PING");
-const UctpCommand UctpCommands::GET_TASK_RESULT("GET_TASK_RESULT");
-const UctpCommand UctpCommands::GET_PROPERTY("GET_PROPERTY");
-const UctpCommand UctpCommands::CANCEL_TASK("CANCEL_TASK");
-
-const QByteArray UctpValues::BASE64("BASE64");
-const QByteArray UctpValues::UCTP_TRUE("true");
-const QByteArray UctpValues::UCTP_FALSE("false");
-const QByteArray UctpValues::UCTP_STATE_FINISHED("FINISHED");
-const QByteArray UctpValues::STATUS_ERROR("ERROR");
-const QByteArray UctpValues::STATUS_OK("OK");
-
-const QByteArray BaseGlobalProperties::HOST_NAME("server-name");
-const QByteArray BaseGlobalProperties::TASKS_LIST_ACTIVE("tasks-list-active");
-const QByteArray BaseGlobalProperties::TASKS_LIST_FINISHED("tasks-list-finished");
-
-//////////////////////////////////////////////////////////////////////////
-
-void UctpSession::buildQUuid( QUuid* uuid ) const {
-    assert(uuid != NULL);
-
-    // construct uuid from MD5 representation of session-id
-
-    QByteArray digest = QByteArray::fromHex(uid);
-    memcpy((unsigned char*)(uuid), digest.constData(), sizeof(QUuid));
-
-    assert(!uuid->isNull());
-}
-
-QIODevice* UctpRequestBuilder::getDataSource()
-{
-    QByteArray request;
-    QXmlStreamWriter stream(&request);
-
-    stream.writeStartDocument();
-    stream.writeStartElement(UctpElements::REQUEST);
-    stream.writeAttribute(UctpAttributes::COMMAND_TYPE, getCommand());
-    stream.writeAttribute(UctpElements::APP_VERSION, Version::appVersion().text );
-
-    // Contents section
-    formContents(stream);
-
-    stream.writeEndElement();
-    stream.writeEndDocument();
-
-    requestBuf.setData(request);
-
-    return &requestBuf;
-}
-
-
-bool Uctp::parseReply( QIODevice* reply, const UctpCommand& command, QMap<QString,UctpElementData>& data) {
-    QXmlInputSource source(reply);
-
-    QList<QString> expectedElements; // = getExpectedElements(command);
-    UctpReplyContext context(command, expectedElements);
-    UctpReplyHandler* handler = new UctpReplyHandler(context,data);
-    xmlReader.setContentHandler(handler);
-    xmlReader.setErrorHandler(handler);
-    bool ok = xmlReader.parse(source);
-    errorString = handler->errorString();
-
-    return ok;
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-
-UctpReplyHandler::UctpReplyHandler(const UctpReplyContext& ctx, QMap<QString,UctpElementData>& data)
- : replyResultOk(false), context(ctx), replyData(data), envelope(false)
-{
-
-}
-
-bool UctpReplyHandler::startElement( const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &attributes )
-{
-    Q_UNUSED(namespaceURI);
-    Q_UNUSED(localName);
-
-    if (qName == UctpElements::RESPONSE) {
-        envelope = true;
-    }
-    xmlAttrMap.insert(qName, attributes);
-    ioLog.trace(QString("Parsing element %1").arg(qName));
-    curText.clear();
-    return true;
-
-}
-
-bool UctpReplyHandler::endElement(const QString &namespaceURI, const QString &localName, const QString &qName) {
-    Q_UNUSED(namespaceURI);
-    Q_UNUSED(localName);
-
-    const QXmlAttributes& currentAttributes = xmlAttrMap.value(qName);
-
-    if (qName == UctpElements::RESPONSE) {
-        QString status = currentAttributes.value(QString(UctpElements::STATUS));
-        if (status == UctpValues::STATUS_OK) {
-            replyResultOk = true;
-            coreLog.trace("Uctp request succeed");
-        }
-    }
-
-    UctpElementData data;
-    data.textData = curText;
-    for (int i = 0; i < currentAttributes.length(); ++i) {
-        QString aName = currentAttributes.qName(i);
-        QString aValue = currentAttributes.value(i);
-        data.attributesMap.insert(aName.toLatin1(),aValue.toLatin1());
-    }
-    replyData.insertMulti(qName, data);
-
-    return true;
-}
-
-bool UctpReplyHandler::endDocument() {
-    bool structureValid  = envelope;
-    if (!structureValid) {
-        errorMessage = QString(QObject::tr("Invalid response structure"));
-        return false;
-    }
-    if (!validateContext()) {
-        errorMessage = QString(QObject::tr("Invalid response: missing elements"));
-        return false;
-    }
-
-    if (!replyResultOk) {
-        QString reason;
-        if (replyData.contains(UctpElements::MESSAGE)) {
-            reason = replyData.value(UctpElements::MESSAGE).textData;
-        } else {
-            reason = QString("status is not available");
-        }
-        errorMessage = QString("RService request failed: %1.").arg(reason);
-        return false;
-    }
-    return true;
-}
-
-
-
-bool UctpReplyHandler::characters(const QString &str) {
-    curText += str;
-    return true;
-}
-
-bool UctpReplyHandler::validateContext() {
-    foreach (const QString& elemName, context.getExpectedElements()) {
-        if(!replyData.contains(elemName)) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-QString UctpReplyHandler::errorString() const {
-    if (errorMessage.isEmpty()) {
-        return QString("Error processing XML response");
-    } else {
-        return errorMessage;
-    }
-}
-
-
-UctpError::~UctpError() throw()
-{
-
-}
-
-
-
-
-} // namespace U2
diff --git a/src/plugins/remote_service/src/WebTransportProtocol.h b/src/plugins/remote_service/src/WebTransportProtocol.h
deleted file mode 100644
index 4127557..0000000
--- a/src/plugins/remote_service/src/WebTransportProtocol.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/**
- * 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 _WEB_TRANSPORT_PROTOCOL_H_
-#define _WEB_TRANSPORT_PROTOCOL_H_
-
-#include <stdexcept>
-
-#include <QtCore/QByteArray>
-#include <QtCore/QVariantMap>
-#include <QtCore/QIODevice>
-#include <QtCore/QUuid>
-#include <QtCore/QBuffer>
-
-#include <QtXml/QXmlDefaultHandler>
-#include <QtXml/QXmlSimpleReader>
-#include <QtCore/QXmlStreamWriter>
-
-
-
-namespace U2 {
-
-// UGENE Common Transport Protocol (UCTP) definitions
-
-typedef QByteArray UctpCommand;
-
-class UctpElements {
-public:
-    static const QByteArray REQUEST;
-    static const QByteArray RESPONSE;
-    static const QByteArray APP_VERSION;
-    static const QByteArray STATUS;
-    static const QByteArray TASK_RESULTS;
-    static const QByteArray MESSAGE;
-    static const QByteArray SESSION;
-    static const QByteArray USER_NAME;
-    static const QByteArray PASSWD;
-    static const QByteArray DATA;
-    static const QByteArray PROPERTY;
-    static const QByteArray TASK;
-    static const QByteArray TASK_STATE;
-    static const QByteArray TASK_PROGRESS;
-    static const QByteArray TASK_ERROR;
-    static const QByteArray DATE_SUBMITTED;
-};
-
-class UctpAttributes {
-public:
-    static const QByteArray TASK_ID;
-    static const QByteArray SESSION_ID;
-    static const QByteArray COMMAND_TYPE;
-    static const QByteArray IS_GZIPPED;
-    static const QByteArray ENCODING;
-    static const QByteArray NAME;
-    static const QByteArray SIZE;
-};
-
-class UctpValues {
-public:
-    static const QByteArray BASE64;
-    static const QByteArray STATUS_OK;
-    static const QByteArray UCTP_TRUE;
-    static const QByteArray UCTP_FALSE;
-    static const QByteArray UCTP_STATE_FINISHED;
-    static const QByteArray UCTP_STATE_ENQUED;
-    static const QByteArray UCTP_STATE_RUNNING;
-    static const QByteArray STATUS_ERROR;
-};
-
-class UctpCommands {
-public:
-    static const UctpCommand AUTH;
-    static const UctpCommand RUN_TASK;
-    static const UctpCommand CANCEL_TASK;
-    static const UctpCommand DELETE_TASK;
-    static const UctpCommand GET_TASK_RESULT;
-    static const UctpCommand GET_PROPERTY;
-    static const UctpCommand PING;
-};
-
-class BaseGlobalProperties {
-public:
-    static const QByteArray TASKS_LIST_ACTIVE;
-    static const QByteArray TASKS_LIST_FINISHED;
-    static const QByteArray HOST_NAME;
-
-};
-
-struct UctpAttribute {
-    UctpAttribute() {}
-    UctpAttribute(const QString& n, const QString& v) : name(n), value(v) {}
-    QString name;
-    QString value;
-};
-
-struct UctpElementData {
-    QString textData;
-    QMap<QByteArray,QByteArray> attributesMap;
-};
-
-class UctpReplyContext {
-public:
-    UctpReplyContext(const UctpCommand& cmd, const QList<QString>& elements )
-        : command(cmd), expectedElements(elements) {}
-    bool hasElement(const QString& name) { return expectedElements.contains(name); }
-    const UctpCommand& getCommand() const {return command;}
-    const QList<QString>& getExpectedElements() const {return expectedElements;}
-private:
-    UctpCommand command;
-    QList<QString> expectedElements;
-};
-
-class UctpReplyHandler : public QXmlDefaultHandler {
-    QString curText;
-    QString errorMessage;
-    QString dataEntryName;
-    bool replyResultOk;
-    const UctpReplyContext context;
-    QMap<QString,UctpElementData>& replyData;
-    QMap<QString,QXmlAttributes> xmlAttrMap;
-    // validation flags present
-    bool envelope;
-public:
-    UctpReplyHandler(const UctpReplyContext& ctx, QMap<QString,UctpElementData>& replyData);
-    bool startElement(const QString &namespaceURI, const QString &localName,
-        const QString &qName, const QXmlAttributes &attributes);
-    bool endElement(const QString &namespaceURI, const QString &localName,
-          const QString &qName);
-    bool endDocument();
-    bool characters(const QString &str);
-    QString errorString() const;
-private:
-    bool validateContext();
-};
-
-class UctpRequestBuilder {
-    UctpCommand command;
-private:
-    QBuffer requestBuf;
-protected:
-    virtual void formContents(QXmlStreamWriter& writer) = 0;
-public:
-    virtual ~UctpRequestBuilder() {}
-    UctpRequestBuilder(const UctpCommand& cmd) : command(cmd) {}
-    const UctpCommand& getCommand() const { return command; }
-    virtual QIODevice* getDataSource();
-};
-
-class UctpSession {
-public:
-    UctpSession(const QByteArray& id) : uid(id) {}
-    const QByteArray& getUid() const { return uid; }
-    void buildQUuid(QUuid* uuid) const;
-private:
-    QByteArray uid;
-};
-
-class UctpError : public std::runtime_error
-{
-public:
-    UctpError(QString message) : std::runtime_error(message.toLatin1().constData()) {}
-    const QString getErrorMessage() {return QString( what() ); }
-    ~UctpError() throw();
-private:
-    QString errorMessage;
-};
-
-class Uctp {
-    QXmlSimpleReader xmlReader;
-    QString errorString;
-public:
-    bool parseReply(QIODevice* reply, const UctpCommand& command, QMap<QString,UctpElementData>& replyData);
-    const QString& getErrorText() const { return errorString; }
-};
-
-
-
-
-
-} // namespace U2
-
-#endif // _WEB_TRANSPORT_PROTOCOL_H_
diff --git a/src/plugins/remote_service/src/base64/cdecode.c b/src/plugins/remote_service/src/base64/cdecode.c
deleted file mode 100644
index 73cf7fc..0000000
--- a/src/plugins/remote_service/src/base64/cdecode.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * 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.
- */
-
-/*
-cdecoder.c - c source to a base64 decoding algorithm implementation
-
-This is part of the libb64 project, and has been placed in the public domain.
-For details, see http://sourceforge.net/projects/libb64
-*/
-
-#include "cdecode.h"
-
-int base64_decode_value(char value_in)
-{
-    static const char decoding[] = {62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-2,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51};
-    static const char decoding_size = sizeof(decoding);
-    value_in -= 43;
-    if (value_in < 0 || value_in > decoding_size) return -1;
-    return decoding[(int)value_in];
-}
-
-void base64_init_decodestate(base64_decodestate* state_in)
-{
-    state_in->step = step_a;
-    state_in->plainchar = 0;
-}
-
-int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in)
-{
-    const char* codechar = code_in;
-    char* plainchar = plaintext_out;
-    char fragment;
-
-    *plainchar = state_in->plainchar;
-
-    switch (state_in->step)
-    {
-        while (1)
-        {
-    case step_a:
-            do {
-                if (codechar == code_in+length_in)
-                {
-                    state_in->step = step_a;
-                    state_in->plainchar = *plainchar;
-                    return plainchar - plaintext_out;
-                }
-                fragment = (char)base64_decode_value(*codechar++);
-            } while (fragment < 0);
-            *plainchar    = (fragment & 0x03f) << 2;
-    case step_b:
-            do {
-                if (codechar == code_in+length_in)
-                {
-                    state_in->step = step_b;
-                    state_in->plainchar = *plainchar;
-                    return plainchar - plaintext_out;
-                }
-                fragment = (char)base64_decode_value(*codechar++);
-            } while (fragment < 0);
-            *plainchar++ |= (fragment & 0x030) >> 4;
-            *plainchar    = (fragment & 0x00f) << 4;
-    case step_c:
-            do {
-                if (codechar == code_in+length_in)
-                {
-                    state_in->step = step_c;
-                    state_in->plainchar = *plainchar;
-                    return plainchar - plaintext_out;
-                }
-                fragment = (char)base64_decode_value(*codechar++);
-            } while (fragment < 0);
-            *plainchar++ |= (fragment & 0x03c) >> 2;
-            *plainchar    = (fragment & 0x003) << 6;
-    case step_d:
-            do {
-                if (codechar == code_in+length_in)
-                {
-                    state_in->step = step_d;
-                    state_in->plainchar = *plainchar;
-                    return plainchar - plaintext_out;
-                }
-                fragment = (char)base64_decode_value(*codechar++);
-            } while (fragment < 0);
-            *plainchar++   |= (fragment & 0x03f);
-        }
-    }
-    /* control should not reach here */
-    return plainchar - plaintext_out;
-}
-
diff --git a/src/plugins/remote_service/src/base64/cdecode.h b/src/plugins/remote_service/src/base64/cdecode.h
deleted file mode 100644
index 53bb31c..0000000
--- a/src/plugins/remote_service/src/base64/cdecode.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-cdecode.h - c header for a base64 decoding algorithm
-
-This is part of the libb64 project, and has been placed in the public domain.
-For details, see http://sourceforge.net/projects/libb64
-*/
-
-#ifndef BASE64_CDECODE_H
-#define BASE64_CDECODE_H
-
-typedef enum
-{
-    step_a, step_b, step_c, step_d
-} base64_decodestep;
-
-typedef struct
-{
-    base64_decodestep step;
-    char plainchar;
-} base64_decodestate;
-
-void base64_init_decodestate(base64_decodestate* state_in);
-
-int base64_decode_value(char value_in);
-
-int base64_decode_block(const char* code_in, const int length_in, char* plaintext_out, base64_decodestate* state_in);
-
-#endif /* BASE64_CDECODE_H */
diff --git a/src/plugins/remote_service/src/base64/cencode.c b/src/plugins/remote_service/src/base64/cencode.c
deleted file mode 100644
index 0b3a58d..0000000
--- a/src/plugins/remote_service/src/base64/cencode.c
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- * 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.
- */
-
-/*
-cencoder.c - c source to a base64 encoding algorithm implementation
-
-This is part of the libb64 project, and has been placed in the public domain.
-For details, see http://sourceforge.net/projects/libb64
-*/
-
-#include "cencode.h"
-
-const int CHARS_PER_LINE = 72;
-
-void base64_init_encodestate(base64_encodestate* state_in)
-{
-    state_in->step = step_A;
-    state_in->result = 0;
-    state_in->stepcount = 0;
-}
-
-char base64_encode_value(char value_in)
-{
-    static const char* encoding = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-    if (value_in > 63) return '=';
-    return encoding[(int)value_in];
-}
-
-int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in)
-{
-    const char* plainchar = plaintext_in;
-    const char* const plaintextend = plaintext_in + length_in;
-    char* codechar = code_out;
-    char result;
-    char fragment;
-
-    result = state_in->result;
-
-    switch (state_in->step)
-    {
-        while (1)
-        {
-    case step_A:
-            if (plainchar == plaintextend)
-            {
-                state_in->result = result;
-                state_in->step = step_A;
-                return codechar - code_out;
-            }
-            fragment = *plainchar++;
-            result = (fragment & 0x0fc) >> 2;
-            *codechar++ = base64_encode_value(result);
-            result = (fragment & 0x003) << 4;
-    case step_B:
-            if (plainchar == plaintextend)
-            {
-                state_in->result = result;
-                state_in->step = step_B;
-                return codechar - code_out;
-            }
-            fragment = *plainchar++;
-            result |= (fragment & 0x0f0) >> 4;
-            *codechar++ = base64_encode_value(result);
-            result = (fragment & 0x00f) << 2;
-    case step_C:
-            if (plainchar == plaintextend)
-            {
-                state_in->result = result;
-                state_in->step = step_C;
-                return codechar - code_out;
-            }
-            fragment = *plainchar++;
-            result |= (fragment & 0x0c0) >> 6;
-            *codechar++ = base64_encode_value(result);
-            result  = (fragment & 0x03f) >> 0;
-            *codechar++ = base64_encode_value(result);
-
-            ++(state_in->stepcount);
-            if (state_in->stepcount == CHARS_PER_LINE/4)
-            {
-                *codechar++ = '\n';
-                state_in->stepcount = 0;
-            }
-        }
-    }
-    /* control should not reach here */
-    return codechar - code_out;
-}
-
-int base64_encode_blockend(char* code_out, base64_encodestate* state_in)
-{
-    char* codechar = code_out;
-
-    switch (state_in->step)
-    {
-    case step_B:
-        *codechar++ = base64_encode_value(state_in->result);
-        *codechar++ = '=';
-        *codechar++ = '=';
-        break;
-    case step_C:
-        *codechar++ = base64_encode_value(state_in->result);
-        *codechar++ = '=';
-        break;
-    case step_A:
-        break;
-    }
-    *codechar++ = '\n';
-
-    return codechar - code_out;
-}
-
diff --git a/src/plugins/remote_service/src/base64/cencode.h b/src/plugins/remote_service/src/base64/cencode.h
deleted file mode 100644
index 584bf06..0000000
--- a/src/plugins/remote_service/src/base64/cencode.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-cencode.h - c header for a base64 encoding algorithm
-
-This is part of the libb64 project, and has been placed in the public domain.
-For details, see http://sourceforge.net/projects/libb64
-*/
-
-#ifndef BASE64_CENCODE_H
-#define BASE64_CENCODE_H
-
-typedef enum
-{
-    step_A, step_B, step_C
-} base64_encodestep;
-
-typedef struct
-{
-    base64_encodestep step;
-    char result;
-    int stepcount;
-} base64_encodestate;
-
-void base64_init_encodestate(base64_encodestate* state_in);
-
-char base64_encode_value(char value_in);
-
-int base64_encode_block(const char* plaintext_in, int length_in, char* code_out, base64_encodestate* state_in);
-
-int base64_encode_blockend(char* code_out, base64_encodestate* state_in);
-
-#endif /* BASE64_CENCODE_H */
diff --git a/src/plugins/remote_service/src/ui/RemoteServiceSupportUI.ui b/src/plugins/remote_service/src/ui/RemoteServiceSupportUI.ui
deleted file mode 100644
index 6100158..0000000
--- a/src/plugins/remote_service/src/ui/RemoteServiceSupportUI.ui
+++ /dev/null
@@ -1,262 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>RemoteServiceSupportUI</class>
- <widget class="QWidget" name="RemoteServiceSupportUI">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>500</width>
-    <height>196</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout_3">
-   <item row="0" column="0">
-    <widget class="QLabel" name="label">
-     <property name="text">
-      <string>URL:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="1">
-    <widget class="QLineEdit" name="urlLineEdit"/>
-   </item>
-   <item row="1" column="0" colspan="2">
-    <widget class="QGroupBox" name="groupBox">
-     <property name="title">
-      <string>Account information</string>
-     </property>
-     <layout class="QGridLayout" name="gridLayout_2">
-      <item row="0" column="0" colspan="2">
-       <widget class="QRadioButton" name="existingRB">
-        <property name="text">
-         <string>Existing account</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <spacer name="horizontalSpacer">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Preferred</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>45</width>
-          <height>45</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="1" column="1" colspan="2">
-       <layout class="QGridLayout" name="gridLayout">
-        <item row="0" column="0">
-         <widget class="QLabel" name="userNameLabel">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="text">
-           <string>User name:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1">
-         <widget class="QLineEdit" name="userNameEdit">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="minimumSize">
-           <size>
-            <width>120</width>
-            <height>0</height>
-           </size>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="0">
-         <widget class="QLabel" name="passwordLabel">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="text">
-           <string>Password</string>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="1">
-         <widget class="QLineEdit" name="passwdEdit">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="minimumSize">
-           <size>
-            <width>120</width>
-            <height>0</height>
-           </size>
-          </property>
-          <property name="echoMode">
-           <enum>QLineEdit::Password</enum>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="2">
-         <widget class="QCheckBox" name="rememberEdit">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="text">
-           <string>Remember me</string>
-          </property>
-          <property name="checked">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item row="1" column="3">
-       <spacer name="horizontalSpacer_2">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>106</width>
-          <height>45</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="2" column="2">
-       <spacer name="verticalSpacer_2">
-        <property name="orientation">
-         <enum>Qt::Vertical</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Preferred</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>140</width>
-          <height>2</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="3" column="0" colspan="2">
-       <widget class="QRadioButton" name="guestRB">
-        <property name="text">
-         <string>Guest account</string>
-        </property>
-        <property name="checked">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item row="2" column="1">
-    <spacer name="verticalSpacer_3">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>10</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>existingRB</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>userNameEdit</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>117</x>
-     <y>66</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>201</x>
-     <y>91</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>existingRB</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>passwdEdit</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>117</x>
-     <y>66</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>201</x>
-     <y>117</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>existingRB</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>passwordLabel</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>117</x>
-     <y>66</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>101</x>
-     <y>117</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>existingRB</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>userNameLabel</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>117</x>
-     <y>66</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>101</x>
-     <y>91</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>existingRB</sender>
-   <signal>toggled(bool)</signal>
-   <receiver>rememberEdit</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>117</x>
-     <y>66</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>319</x>
-     <y>117</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/remote_service/src/ui/TaskStatisticsDialog.ui b/src/plugins/remote_service/src/ui/TaskStatisticsDialog.ui
deleted file mode 100644
index 120ac30..0000000
--- a/src/plugins/remote_service/src/ui/TaskStatisticsDialog.ui
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>RemoteTasksDialog</class>
- <widget class="QDialog" name="RemoteTasksDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>612</width>
-    <height>544</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>User Remote Tasks</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <item row="0" column="0">
-    <layout class="QHBoxLayout" name="horizontalLayout_2">
-     <item>
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>Remote service URL:</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLabel" name="urlLabel">
-       <property name="text">
-        <string><unknown></string>
-       </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 row="1" column="0">
-    <widget class="QTreeWidget" name="tasksTreeWidget">
-     <column>
-      <property name="text">
-       <string>Task ID</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Submitted</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>State</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Result</string>
-      </property>
-     </column>
-    </widget>
-   </item>
-   <item row="1" column="1">
-    <layout class="QVBoxLayout" name="verticalLayout">
-     <item>
-      <widget class="QPushButton" name="refreshPushButton">
-       <property name="text">
-        <string>Refresh</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="fetchPushButton">
-       <property name="text">
-        <string>Fetch data</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="removePushButton">
-       <property name="enabled">
-        <bool>true</bool>
-       </property>
-       <property name="text">
-        <string>Remove task data</string>
-       </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>
-   </item>
-   <item row="2" column="0" colspan="2">
-    <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>accepted()</signal>
-   <receiver>RemoteTasksDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>305</x>
-     <y>523</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>305</x>
-     <y>271</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>RemoteTasksDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>305</x>
-     <y>523</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>305</x>
-     <y>271</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/remote_service/transl/english.ts b/src/plugins/remote_service/transl/english.ts
deleted file mode 100644
index 4aa2811..0000000
--- a/src/plugins/remote_service/transl/english.ts
+++ /dev/null
@@ -1,316 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="en_US" sourcelanguage="en">
-<context>
-    <name>QObject</name>
-    <message>
-        <location filename="../src/WebTransportProtocol.cpp" line="175"/>
-        <source>Invalid response structure</source>
-        <translation>Invalid response structure</translation>
-    </message>
-    <message>
-        <location filename="../src/WebTransportProtocol.cpp" line="179"/>
-        <source>Invalid response: missing elements</source>
-        <translation>Invalid response: missing elements</translation>
-    </message>
-</context>
-<context>
-    <name>RemoteServiceSupportUI</name>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="14"/>
-        <source>Form</source>
-        <translation>Form</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="20"/>
-        <source>URL:</source>
-        <translation>URL:</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="30"/>
-        <source>Account information</source>
-        <translation>Account information</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="36"/>
-        <source>Existing account</source>
-        <translation>Existing account</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="64"/>
-        <source>User name:</source>
-        <translation>User name:</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="87"/>
-        <source>Password</source>
-        <translation>Password</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="113"/>
-        <source>Remember me</source>
-        <translation>Remember me</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="154"/>
-        <source>Guest account</source>
-        <translation>Guest account</translation>
-    </message>
-</context>
-<context>
-    <name>RemoteTasksDialog</name>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="14"/>
-        <source>User Remote Tasks</source>
-        <translation>User Remote Tasks</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="22"/>
-        <source>Remote service URL:</source>
-        <translation>Remote service URL:</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="29"/>
-        <source><unknown></source>
-        <translation><unknown></translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="52"/>
-        <source>Task ID</source>
-        <translation>Task ID</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="57"/>
-        <source>Submitted</source>
-        <translation>Submitted</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="62"/>
-        <source>State</source>
-        <translation>State</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="67"/>
-        <source>Result</source>
-        <translation>Result</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="77"/>
-        <source>Refresh</source>
-        <translation>Refresh</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="84"/>
-        <source>Fetch data</source>
-        <translation>Fetch data</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="94"/>
-        <source>Remove task data</source>
-        <translation>Remove task data</translation>
-    </message>
-</context>
-<context>
-    <name>U2::FetchRemoteTaskResultTask</name>
-    <message>
-        <location filename="../src/RemoteServiceUtilTasks.cpp" line="92"/>
-        <source>FetchRemoteTaskResult</source>
-        <translation>FetchRemoteTaskResult</translation>
-    </message>
-</context>
-<context>
-    <name>U2::GetUserTasksInfoTask</name>
-    <message>
-        <location filename="../src/RemoteServiceUtilTasks.cpp" line="35"/>
-        <source>GetUserTasksInfo</source>
-        <translation>GetUserTasksInfo</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceUtilTasks.cpp" line="51"/>
-        <source>Retrieving remote tasks list for: %1</source>
-        <translation>Retrieving remote tasks list for: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceUtilTasks.cpp" line="63"/>
-        <source>Found %1 active remote tasks</source>
-        <translation>Found %1 active remote tasks</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceUtilTasks.cpp" line="71"/>
-        <source>Found %1 finished remote tasks</source>
-        <translation>Found %1 finished remote tasks</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteServiceMachine</name>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="95"/>
-        <source>Unsupported task type</source>
-        <translation>Unsupported task type</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="120"/>
-        <source>Illegal task id format: %1</source>
-        <translation>Illegal task id format: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="166"/>
-        <source>Empty task state property</source>
-        <translation>Empty task state property</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="188"/>
-        <source>Failed to parse task progress: %1</source>
-        <translation>Failed to parse task progress: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="196"/>
-        <source>No files specified</source>
-        <translation>No files specified</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="213"/>
-        <source>Result {%1} is not found.</source>
-        <translation>Result {%1} is not found.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="329"/>
-        <source>Send request failed: empty message data</source>
-        <translation>Send request failed: empty message data</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="378"/>
-        <source>User authentication info is not available</source>
-        <translation>User authentication info is not available</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="431"/>
-        <source>SSL connection errors: %1</source>
-        <translation>SSL connection errors: %1</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteServiceMachineReplyHandler</name>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="276"/>
-        <source>Failed to parse server response. %1</source>
-        <translation>Failed to parse server response. %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="289"/>
-        <source>Uploading %1%</source>
-        <translation>Uploading %1%</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="296"/>
-        <source>Downloading %1%</source>
-        <translation>Downloading %1%</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="306"/>
-        <source>Request inactivity time is up</source>
-        <translation>Request inactivity time is up</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteServicePingTask</name>
-    <message>
-        <location filename="../src/RemoteServicePingTask.cpp" line="32"/>
-        <source>RemoteServicePingTask</source>
-        <translation>RemoteServicePingTask</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServicePingTask.cpp" line="52"/>
-        <source>Can not parse remote server settings file %1</source>
-        <translation>Can not parse remote server settings file %1</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteServicePlugin</name>
-    <message>
-        <location filename="../src/RemoteServicePlugin.cpp" line="59"/>
-        <source>UGENE Remote Service Support</source>
-        <translation>UGENE Remote Service Support</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServicePlugin.cpp" line="60"/>
-        <source>Launching remote tasks via UGENE Remote Service</source>
-        <translation>Launching remote tasks via UGENE Remote Service</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteServiceSettingsUI</name>
-    <message>
-        <location filename="../src/RemoteServiceSettingsUI.cpp" line="83"/>
-        <source>Url is empty!</source>
-        <translation>Url is empty!</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceSettingsUI.cpp" line="85"/>
-        <source>Unknown URL schema. The url must start from http(s)://</source>
-        <translation>Unknown URL schema. The url must start from http(s)://</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceSettingsUI.cpp" line="90"/>
-        <source>User name is not valid!</source>
-        <translation>User name is not valid!</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceSettingsUI.cpp" line="93"/>
-        <source>Password is empty!</source>
-        <translation>Password is empty!</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteTasksDialog</name>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="124"/>
-        <location filename="../src/RemoteTasksDialog.cpp" line="131"/>
-        <location filename="../src/RemoteTasksDialog.cpp" line="139"/>
-        <location filename="../src/RemoteTasksDialog.cpp" line="170"/>
-        <source>Fetch data error</source>
-        <translation>Fetch data error</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="124"/>
-        <source>The task is not finished yet.</source>
-        <translation>The task is not finished yet.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="131"/>
-        <source>No result available for task.</source>
-        <translation>No result available for task.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="139"/>
-        <source>Failed to parse task id.</source>
-        <translation>Failed to parse task id.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="144"/>
-        <source>Select directory to save results: </source>
-        <translation>Select directory to save results: </translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="168"/>
-        <source>Fetch data</source>
-        <translation>Fetch data</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="168"/>
-        <source>Download finished successfully.</source>
-        <translation>Download finished successfully.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="170"/>
-        <location filename="../src/RemoteTasksDialog.cpp" line="203"/>
-        <source>Failed to download task result. %1</source>
-        <translation>Failed to download task result. %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="203"/>
-        <source>Error</source>
-        <translation>Error</translation>
-    </message>
-</context>
-</TS>
diff --git a/src/plugins/remote_service/transl/russian.ts b/src/plugins/remote_service/transl/russian.ts
deleted file mode 100644
index 3c8fb7b..0000000
--- a/src/plugins/remote_service/transl/russian.ts
+++ /dev/null
@@ -1,316 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="ru" sourcelanguage="en">
-<context>
-    <name>QObject</name>
-    <message>
-        <location filename="../src/WebTransportProtocol.cpp" line="175"/>
-        <source>Invalid response structure</source>
-        <translation>Неверный ответ структуры</translation>
-    </message>
-    <message>
-        <location filename="../src/WebTransportProtocol.cpp" line="179"/>
-        <source>Invalid response: missing elements</source>
-        <translation>Неверный ответ: пропущены элементы</translation>
-    </message>
-</context>
-<context>
-    <name>RemoteServiceSupportUI</name>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="14"/>
-        <source>Form</source>
-        <translation>Форма</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="20"/>
-        <source>URL:</source>
-        <translation>Путь:</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="30"/>
-        <source>Account information</source>
-        <translation>Аккаунт</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="36"/>
-        <source>Existing account</source>
-        <translation>Существующий аккаунт</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="64"/>
-        <source>User name:</source>
-        <translation>Имя пользователя:</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="87"/>
-        <source>Password</source>
-        <translation>Пароль</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="113"/>
-        <source>Remember me</source>
-        <translation>Запомнить меня</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/RemoteServiceSupportUI.ui" line="154"/>
-        <source>Guest account</source>
-        <translation>Гостевой аккаунт</translation>
-    </message>
-</context>
-<context>
-    <name>RemoteTasksDialog</name>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="14"/>
-        <source>User Remote Tasks</source>
-        <translation>User Remote Tasks</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="22"/>
-        <source>Remote service URL:</source>
-        <translation>Путь до удаленного сервиса:</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="29"/>
-        <source><unknown></source>
-        <translation><отсутствует></translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="52"/>
-        <source>Task ID</source>
-        <translation>Задача</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="57"/>
-        <source>Submitted</source>
-        <translation>Добавлена</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="62"/>
-        <source>State</source>
-        <translation>Состояние</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="67"/>
-        <source>Result</source>
-        <translation>Результат</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="77"/>
-        <source>Refresh</source>
-        <translation>Обновить</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="84"/>
-        <source>Fetch data</source>
-        <translation>Получить данные</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/TaskStatisticsDialog.ui" line="94"/>
-        <source>Remove task data</source>
-        <translation>Удалить данные задачи</translation>
-    </message>
-</context>
-<context>
-    <name>U2::FetchRemoteTaskResultTask</name>
-    <message>
-        <location filename="../src/RemoteServiceUtilTasks.cpp" line="92"/>
-        <source>FetchRemoteTaskResult</source>
-        <translation>FetchRemoteTaskResult</translation>
-    </message>
-</context>
-<context>
-    <name>U2::GetUserTasksInfoTask</name>
-    <message>
-        <location filename="../src/RemoteServiceUtilTasks.cpp" line="35"/>
-        <source>GetUserTasksInfo</source>
-        <translation>GetUserTasksInfo</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceUtilTasks.cpp" line="51"/>
-        <source>Retrieving remote tasks list for: %1</source>
-        <translation>Retrieving remote tasks list for: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceUtilTasks.cpp" line="63"/>
-        <source>Found %1 active remote tasks</source>
-        <translation>Found %1 active remote tasks</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceUtilTasks.cpp" line="71"/>
-        <source>Found %1 finished remote tasks</source>
-        <translation>Found %1 finished remote tasks</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteServiceMachine</name>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="95"/>
-        <source>Unsupported task type</source>
-        <translation>Unsupported task type</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="120"/>
-        <source>Illegal task id format: %1</source>
-        <translation>Illegal task id format: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="166"/>
-        <source>Empty task state property</source>
-        <translation>Empty task state property</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="188"/>
-        <source>Failed to parse task progress: %1</source>
-        <translation>Failed to parse task progress: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="196"/>
-        <source>No files specified</source>
-        <translation>No files specified</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="213"/>
-        <source>Result {%1} is not found.</source>
-        <translation>Result {%1} is not found.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="329"/>
-        <source>Send request failed: empty message data</source>
-        <translation>Send request failed: empty message data</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="378"/>
-        <source>User authentication info is not available</source>
-        <translation>User authentication info is not available</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="431"/>
-        <source>SSL connection errors: %1</source>
-        <translation>SSL connection errors: %1</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteServiceMachineReplyHandler</name>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="276"/>
-        <source>Failed to parse server response. %1</source>
-        <translation>Failed to parse server response. %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="289"/>
-        <source>Uploading %1%</source>
-        <translation>Загрузка %1%</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="296"/>
-        <source>Downloading %1%</source>
-        <translation>Скачивание %1%</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceMachine.cpp" line="306"/>
-        <source>Request inactivity time is up</source>
-        <translation>Request inactivity time is up</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteServicePingTask</name>
-    <message>
-        <location filename="../src/RemoteServicePingTask.cpp" line="32"/>
-        <source>RemoteServicePingTask</source>
-        <translation>RemoteServicePingTask</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServicePingTask.cpp" line="52"/>
-        <source>Can not parse remote server settings file %1</source>
-        <translation>Can not parse remote server settings file %1</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteServicePlugin</name>
-    <message>
-        <location filename="../src/RemoteServicePlugin.cpp" line="59"/>
-        <source>UGENE Remote Service Support</source>
-        <translation>UGENE Remote Service Support</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServicePlugin.cpp" line="60"/>
-        <source>Launching remote tasks via UGENE Remote Service</source>
-        <translation>Запускает удаленные задачи при помощи UGENE Remote Service</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteServiceSettingsUI</name>
-    <message>
-        <location filename="../src/RemoteServiceSettingsUI.cpp" line="83"/>
-        <source>Url is empty!</source>
-        <translation>Путь пуст!</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceSettingsUI.cpp" line="85"/>
-        <source>Unknown URL schema. The url must start from http(s)://</source>
-        <translation>Unknown URL schema. The url must start from http(s)://</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceSettingsUI.cpp" line="90"/>
-        <source>User name is not valid!</source>
-        <translation>Имя пользователя неверно!</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteServiceSettingsUI.cpp" line="93"/>
-        <source>Password is empty!</source>
-        <translation>Пароль пуст!</translation>
-    </message>
-</context>
-<context>
-    <name>U2::RemoteTasksDialog</name>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="124"/>
-        <location filename="../src/RemoteTasksDialog.cpp" line="131"/>
-        <location filename="../src/RemoteTasksDialog.cpp" line="139"/>
-        <location filename="../src/RemoteTasksDialog.cpp" line="170"/>
-        <source>Fetch data error</source>
-        <translation>Fetch data error</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="124"/>
-        <source>The task is not finished yet.</source>
-        <translation>The task is not finished yet.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="131"/>
-        <source>No result available for task.</source>
-        <translation>No result available for task.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="139"/>
-        <source>Failed to parse task id.</source>
-        <translation>Failed to parse task id.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="144"/>
-        <source>Select directory to save results: </source>
-        <translation>Select directory to save results: </translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="168"/>
-        <source>Fetch data</source>
-        <translation>Fetch data</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="168"/>
-        <source>Download finished successfully.</source>
-        <translation>Download finished successfully.</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="170"/>
-        <location filename="../src/RemoteTasksDialog.cpp" line="203"/>
-        <source>Failed to download task result. %1</source>
-        <translation>Failed to download task result. %1</translation>
-    </message>
-    <message>
-        <location filename="../src/RemoteTasksDialog.cpp" line="203"/>
-        <source>Error</source>
-        <translation>Error</translation>
-    </message>
-</context>
-</TS>
diff --git a/src/plugins/repeat_finder/CMakeLists.txt b/src/plugins/repeat_finder/CMakeLists.txt
new file mode 100644
index 0000000..16bd35b
--- /dev/null
+++ b/src/plugins/repeat_finder/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME repeat_finder)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/repeat_finder/repeat_finder.pri b/src/plugins/repeat_finder/repeat_finder.pri
index 83e0f4f..ae08303 100644
--- a/src/plugins/repeat_finder/repeat_finder.pri
+++ b/src/plugins/repeat_finder/repeat_finder.pri
@@ -4,16 +4,3 @@ PLUGIN_ID=repeat_finder
 PLUGIN_NAME=Repeat finder
 PLUGIN_VENDOR=Unipro
 include( ../../ugene_plugin_common.pri )
-
-#DEFINES+=GTEST_LINKED_AS_SHARED_LIBRARY=1
-#LIBS += -lgtest
-
-#!debug_and_release|build_pass {
-#
-#    CONFIG(debug, debug|release) {
-#        LIBS -= -lgtest
-#        LIBS += -lgtestd
-#    }
-#}
-
-#INCLUDEPATH += ../../libs_3rdparty/gtest/src
\ No newline at end of file
diff --git a/src/plugins/repeat_finder/repeat_finder.pro b/src/plugins/repeat_finder/repeat_finder.pro
index a0e7f1c..53fc594 100644
--- a/src/plugins/repeat_finder/repeat_finder.pro
+++ b/src/plugins/repeat_finder/repeat_finder.pro
@@ -17,9 +17,8 @@ HEADERS += src/FindRepeatsDialog.h \
            src/RFSArrayWK.h \
            src/RFTaskFactory.h \
            src/RepeatQuery.h \
-           src/RepeatTest.h \
            src/TandemQuery.h
-FORMS += src/ui/FindRepeatsDialog.ui src/ui/FindTandemsDialog.ui
+FORMS += src/FindRepeatsDialog.ui src/FindTandemsDialog.ui
 SOURCES += src/FindRepeatsDialog.cpp \
            src/FindRepeatsTask.cpp \
            src/FindTandemsDialog.cpp \
@@ -34,7 +33,6 @@ SOURCES += src/FindRepeatsDialog.cpp \
            src/RFSArrayWK.cpp \
            src/RFTaskFactory.cpp \
            src/RepeatQuery.cpp \
-           src/RepeatTest.cpp \
            src/TandemQuery.cpp
 RESOURCES += repeat_finder.qrc
 TRANSLATIONS += transl/english.ts transl/russian.ts
diff --git a/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp b/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp
index 7b7b684..44e7515 100644
--- a/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp
+++ b/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp
@@ -78,7 +78,7 @@ FindRepeatsDialog::FindRepeatsDialog(ADVSequenceObjectContext* _sc)
 {
     sc = _sc;
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467730");
+    new HelpButton(this, buttonBox, "17470663");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/plugins/repeat_finder/src/FindRepeatsDialog.h b/src/plugins/repeat_finder/src/FindRepeatsDialog.h
index b73fbd8..f48da36 100644
--- a/src/plugins/repeat_finder/src/FindRepeatsDialog.h
+++ b/src/plugins/repeat_finder/src/FindRepeatsDialog.h
@@ -22,7 +22,7 @@
 #ifndef _U2_FIND_REPEATS_DIALOG_H_
 #define _U2_FIND_REPEATS_DIALOG_H_
 
-#include <ui/ui_FindRepeatsDialog.h>
+#include <ui_FindRepeatsDialog.h>
 
 #include <U2Core/U2Region.h>
 
diff --git a/src/plugins/repeat_finder/src/ui/FindRepeatsDialog.ui b/src/plugins/repeat_finder/src/FindRepeatsDialog.ui
similarity index 100%
rename from src/plugins/repeat_finder/src/ui/FindRepeatsDialog.ui
rename to src/plugins/repeat_finder/src/FindRepeatsDialog.ui
diff --git a/src/plugins/repeat_finder/src/FindTandemsDialog.cpp b/src/plugins/repeat_finder/src/FindTandemsDialog.cpp
index 8a80463..e5fab6f 100644
--- a/src/plugins/repeat_finder/src/FindTandemsDialog.cpp
+++ b/src/plugins/repeat_finder/src/FindTandemsDialog.cpp
@@ -64,7 +64,7 @@ FindTandemsDialog::FindTandemsDialog(ADVSequenceObjectContext* _sc)
 {
     sc = _sc;
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467731");
+    new HelpButton(this, buttonBox, "17470664");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/repeat_finder/src/FindTandemsDialog.h b/src/plugins/repeat_finder/src/FindTandemsDialog.h
index e14472e..2dd237d 100644
--- a/src/plugins/repeat_finder/src/FindTandemsDialog.h
+++ b/src/plugins/repeat_finder/src/FindTandemsDialog.h
@@ -26,7 +26,7 @@
 
 #include "RF_SArray_TandemFinder.h"
 
-#include "ui/ui_FindTandemsDialog.h"
+#include "ui_FindTandemsDialog.h"
 
 class QToolButton;
 
diff --git a/src/plugins/repeat_finder/src/ui/FindTandemsDialog.ui b/src/plugins/repeat_finder/src/FindTandemsDialog.ui
similarity index 100%
rename from src/plugins/repeat_finder/src/ui/FindTandemsDialog.ui
rename to src/plugins/repeat_finder/src/FindTandemsDialog.ui
diff --git a/src/plugins/repeat_finder/src/RepeatTest.cpp b/src/plugins/repeat_finder/src/RepeatTest.cpp
deleted file mode 100644
index a0f632f..0000000
--- a/src/plugins/repeat_finder/src/RepeatTest.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifdef _U2_REPTEST_H_
-#include "RepeatTest.h"
-
-#include <U2Core/AppContext.h>
-#include <U2Algorithm/RepeatFinderTaskFactoryRegistry.h>
-
-
-namespace U2 {
-
-static TestData createData() {
-    TestData d;
-    d.factoryId = "";
-    return d;
-}
-
-TEST_P(RepeatTest, t01) {
-    RepeatFinderTaskFactoryRegistry* r = AppContext::getRepeatFinderTaskFactoryRegistry();
-    ASSERT_NE(r, (RepeatFinderTaskFactoryRegistry*)NULL);
-    RepeatFinderTaskFactory* t = AppContext::getRepeatFinderTaskFactoryRegistry()->getFactory(testData.factoryId);
-    ASSERT_NE(t, (RepeatFinderTaskFactory*)NULL);
-}
-
-INSTANTIATE_TEST_CASE_P(
-                        RepeatTestInstance,
-                        RepeatTest,
-                        ::testing::Values(createData()));
-
-} //namespace
-#endif
diff --git a/src/plugins/repeat_finder/src/RepeatTest.h b/src/plugins/repeat_finder/src/RepeatTest.h
deleted file mode 100644
index 18f32e4..0000000
--- a/src/plugins/repeat_finder/src/RepeatTest.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifdef _U2_REPTEST_H_
-
-#include <gtest/gtest.h>
-
-#include <QtCore/QString>
-
-
-namespace U2 {
-
-class TestData {
-public:
-    QString factoryId;
-};
-
-class RepeatTest : public ::testing::TestWithParam<TestData> {
-protected:
-    virtual void SetUp() { testData = GetParam(); }
-    virtual void TearDown() {}
-protected:
-    TestData testData;
-};
-
-} // namespace
-
-#endif
diff --git a/src/plugins/repeat_finder/transl/english.ts b/src/plugins/repeat_finder/transl/english.ts
index 350bf46..ef931db 100644
--- a/src/plugins/repeat_finder/transl/english.ts
+++ b/src/plugins/repeat_finder/transl/english.ts
@@ -4,136 +4,136 @@
 <context>
     <name>FindRepeatsDialog</name>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="17"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="17"/>
         <source>Find Repeats</source>
         <translation>Find Repeats</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="87"/>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="239"/>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="299"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="87"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="239"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="299"/>
         <source>bp</source>
         <translation>bp</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="115"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="115"/>
         <source>Heuristic based selection of repeat length so the number of repeats in the sequence will not exceed 1000</source>
         <translation>Heuristic based selection of repeat length so the number of repeats in the sequence will not exceed 1000</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="118"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="118"/>
         <source>1k</source>
         <translation>1k</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="163"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="163"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="185"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="185"/>
         <source>Resets repeats identity to 100%</source>
         <translation>Resets repeats identity to 100%</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="188"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="188"/>
         <source>100</source>
         <translation>100</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="211"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="211"/>
         <source>Minimum distance between repeats</source>
         <translation>Minimum distance between repeats</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="258"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="258"/>
         <source>Maximum distance between repeats</source>
         <translation>Maximum distance between repeats</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="350"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="350"/>
         <source>Advanced</source>
         <translation>Advanced</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="356"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="356"/>
         <source>Advanced parameters</source>
         <translation>Advanced parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="362"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="362"/>
         <source>Custom algorithm</source>
         <translation>Custom algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="389"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="389"/>
         <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/ui/FindRepeatsDialog.ui" line="431"/>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="480"/>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="529"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="431"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="480"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="529"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="438"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="438"/>
         <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/ui/FindRepeatsDialog.ui" line="487"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="487"/>
         <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/ui/FindRepeatsDialog.ui" line="536"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="536"/>
         <source>Search for inverted repeats</source>
         <translation>Search for inverted repeats</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="321"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="321"/>
         <source>Region to process</source>
         <translation>Region to process</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="31"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="31"/>
         <source>Base</source>
         <translation>Base</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="37"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="37"/>
         <source>Repeat finder parameters</source>
         <translation>Repeat finder parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="49"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="49"/>
         <source>Number of bases in a sliding window that is moved along the sequence</source>
         <translation>Number of bases in a sliding window that is moved along the sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="52"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="52"/>
         <source>Window size</source>
         <translation>Window size</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="125"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="125"/>
         <source>How similar the two windows of the sequence</source>
         <translation>How similar the two windows of the sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="128"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="128"/>
         <source>Minimum indentity per window</source>
         <translation>Minimum indentity per window</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="596"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="596"/>
         <source>Nested repeats filter algorithm</source>
         <translation>Nested repeats filter algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="556"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="556"/>
         <source>Exclude tandems areas</source>
         <translation>Exclude tandems areas</translation>
     </message>
@@ -141,78 +141,78 @@
 <context>
     <name>FindTandemsDialog</name>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="49"/>
+        <location filename="../src/FindTandemsDialog.ui" line="49"/>
         <source>Tandem preset</source>
         <translation>Tandem preset</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="94"/>
+        <location filename="../src/FindTandemsDialog.ui" line="94"/>
         <source>Min period</source>
         <translation>Min period</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="114"/>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="147"/>
+        <location filename="../src/FindTandemsDialog.ui" line="114"/>
+        <location filename="../src/FindTandemsDialog.ui" line="147"/>
         <source> n</source>
         <translation> n</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="127"/>
+        <location filename="../src/FindTandemsDialog.ui" line="127"/>
         <source>Max period</source>
         <translation>Max period</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="195"/>
+        <location filename="../src/FindTandemsDialog.ui" line="195"/>
         <source>Advanced</source>
         <translation>Advanced</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="201"/>
+        <location filename="../src/FindTandemsDialog.ui" line="201"/>
         <source>Advanced parameters</source>
         <translation>Advanced parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="283"/>
+        <location filename="../src/FindTandemsDialog.ui" line="283"/>
         <source>Algorithm</source>
         <translation>Algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="240"/>
+        <location filename="../src/FindTandemsDialog.ui" line="240"/>
         <source>Minimum tandem size</source>
         <translation>Minimum tandem size</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="303"/>
+        <location filename="../src/FindTandemsDialog.ui" line="303"/>
         <source>Minimum repeat count</source>
         <translation>Minimum repeat count</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="220"/>
+        <location filename="../src/FindTandemsDialog.ui" line="220"/>
         <source>x</source>
         <translation>x</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="233"/>
+        <location filename="../src/FindTandemsDialog.ui" line="233"/>
         <source>Show overlapped tandems</source>
         <translation>Show overlapped tandems</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="166"/>
+        <location filename="../src/FindTandemsDialog.ui" line="166"/>
         <source>Region to process</source>
         <translation>Region to process</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="17"/>
+        <location filename="../src/FindTandemsDialog.ui" line="17"/>
         <source>Find Tandems</source>
         <translation>Find Tandems</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="31"/>
+        <location filename="../src/FindTandemsDialog.ui" line="31"/>
         <source>Base</source>
         <translation>Base</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="37"/>
+        <location filename="../src/FindTandemsDialog.ui" line="37"/>
         <source>Tandem finder parameters</source>
         <translation>Tandem finder parameters</translation>
     </message>
diff --git a/src/plugins/repeat_finder/transl/russian.ts b/src/plugins/repeat_finder/transl/russian.ts
index 029ec37..e541eae 100644
--- a/src/plugins/repeat_finder/transl/russian.ts
+++ b/src/plugins/repeat_finder/transl/russian.ts
@@ -4,136 +4,136 @@
 <context>
     <name>FindRepeatsDialog</name>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="17"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="17"/>
         <source>Find Repeats</source>
         <translation>Поиск повторов</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="87"/>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="239"/>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="299"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="87"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="239"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="299"/>
         <source>bp</source>
         <translation>нк</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="115"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="115"/>
         <source>Heuristic based selection of repeat length so the number of repeats in the sequence will not exceed 1000</source>
         <translation>Эвристический подбор длины повторов, с тем чтобы кол-во повторов в последовательности не превысило 1000</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="118"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="118"/>
         <source>1k</source>
         <translation>1к</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="49"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="49"/>
         <source>Number of bases in a sliding window that is moved along the sequence</source>
         <translation>Число символов в окне, которое будет перемещаться вдоль последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="52"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="52"/>
         <source>Window size</source>
         <translation>Размер окна</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="125"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="125"/>
         <source>How similar the two windows of the sequence</source>
         <translation>Схожесть двух окон в последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="128"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="128"/>
         <source>Minimum indentity per window</source>
         <translation>Минимальное совпадение для окна</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="163"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="163"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="185"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="185"/>
         <source>Resets repeats identity to 100%</source>
         <translation>Сбросить к 100%</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="188"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="188"/>
         <source>100</source>
         <translation>100</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="211"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="211"/>
         <source>Minimum distance between repeats</source>
         <translation>Мин дистанция между повторами</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="258"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="258"/>
         <source>Maximum distance between repeats</source>
         <translation>Макс дистанция между повторами</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="350"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="350"/>
         <source>Advanced</source>
         <translation>Дополнительные настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="356"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="356"/>
         <source>Advanced parameters</source>
         <translation>Дополнительные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="362"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="362"/>
         <source>Custom algorithm</source>
         <translation>Выбранный алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="389"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="389"/>
         <source>Search only for repeats that lie inside of an annotated region</source>
         <translation>Искать только те повторы, что лежат внутри аннотированного региона</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="438"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="438"/>
         <source>Search only for repeats that have an annotated region inside</source>
         <translation>Искать только те повторы, что содержат аннотированный регион</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="487"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="487"/>
         <source>Filter repeats that have an annotated region inside</source>
         <translation>Исключить из поиска повторы, содержащие аннотированный регион</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="596"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="596"/>
         <source>Nested repeats filter algorithm</source>
         <translation>Алгоритм исключения вложенных повторов</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="556"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="556"/>
         <source>Exclude tandems areas</source>
         <translation>Исключить тандемные области</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="431"/>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="480"/>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="529"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="431"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="480"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="529"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="536"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="536"/>
         <source>Search for inverted repeats</source>
         <translation>Искать инвертированные повторы</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="321"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="321"/>
         <source>Region to process</source>
         <translation>Регион поиска</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="31"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="31"/>
         <source>Base</source>
         <translation>Основные настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindRepeatsDialog.ui" line="37"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="37"/>
         <source>Repeat finder parameters</source>
         <translation>Параметры поиска повторов</translation>
     </message>
@@ -141,78 +141,78 @@
 <context>
     <name>FindTandemsDialog</name>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="49"/>
+        <location filename="../src/FindTandemsDialog.ui" line="49"/>
         <source>Tandem preset</source>
         <translation>Предустановки тандемов</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="94"/>
+        <location filename="../src/FindTandemsDialog.ui" line="94"/>
         <source>Min period</source>
         <translation>Мин период</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="114"/>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="147"/>
+        <location filename="../src/FindTandemsDialog.ui" line="114"/>
+        <location filename="../src/FindTandemsDialog.ui" line="147"/>
         <source> n</source>
         <translation> н</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="127"/>
+        <location filename="../src/FindTandemsDialog.ui" line="127"/>
         <source>Max period</source>
         <translation>Макс период</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="195"/>
+        <location filename="../src/FindTandemsDialog.ui" line="195"/>
         <source>Advanced</source>
         <translation>Дополнительные настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="201"/>
+        <location filename="../src/FindTandemsDialog.ui" line="201"/>
         <source>Advanced parameters</source>
         <translation>Дополнительные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="283"/>
+        <location filename="../src/FindTandemsDialog.ui" line="283"/>
         <source>Algorithm</source>
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="240"/>
+        <location filename="../src/FindTandemsDialog.ui" line="240"/>
         <source>Minimum tandem size</source>
         <translation>Минимальный размер тандема</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="17"/>
+        <location filename="../src/FindTandemsDialog.ui" line="17"/>
         <source>Find Tandems</source>
         <translation>Поиск тандемов</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="303"/>
+        <location filename="../src/FindTandemsDialog.ui" line="303"/>
         <source>Minimum repeat count</source>
         <translation>Минимальное число повторений</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="220"/>
+        <location filename="../src/FindTandemsDialog.ui" line="220"/>
         <source>x</source>
         <translation>x</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="233"/>
+        <location filename="../src/FindTandemsDialog.ui" line="233"/>
         <source>Show overlapped tandems</source>
         <translation>Показать перекрывающиеся тандемы</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="166"/>
+        <location filename="../src/FindTandemsDialog.ui" line="166"/>
         <source>Region to process</source>
         <translation>Регион поиска</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="31"/>
+        <location filename="../src/FindTandemsDialog.ui" line="31"/>
         <source>Base</source>
         <translation>Основные настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/FindTandemsDialog.ui" line="37"/>
+        <location filename="../src/FindTandemsDialog.ui" line="37"/>
         <source>Tandem finder parameters</source>
         <translation>Параметры поиска тандемов</translation>
     </message>
diff --git a/src/plugins/smith_waterman/CMakeLists.txt b/src/plugins/smith_waterman/CMakeLists.txt
new file mode 100644
index 0000000..d905784
--- /dev/null
+++ b/src/plugins/smith_waterman/CMakeLists.txt
@@ -0,0 +1,5 @@
+set(UGENE_PLUGIN_NAME smith_waterman)
+
+add_definitions(-DSW2_BUILD_WITH_SSE2)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/smith_waterman/smith_waterman.pro b/src/plugins/smith_waterman/smith_waterman.pro
index 5dbd37c..740f105 100644
--- a/src/plugins/smith_waterman/smith_waterman.pro
+++ b/src/plugins/smith_waterman/smith_waterman.pro
@@ -34,7 +34,7 @@ RESOURCES += smith_waterman.qrc
 TRANSLATIONS += transl/english.ts transl/russian.ts
 
 FORMS += \
-    src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui
+    src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui
 
 
 
diff --git a/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.h b/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.h
index e2db2a2..9d73133 100644
--- a/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.h
+++ b/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.h
@@ -23,7 +23,7 @@
 #define _U2_PAIRWISE_ALIGNMENT_SMITH_WATERMAN_GUI_EXTENSION_H_
 
 #include "SWAlgorithmTask.h"
-#include "ui/ui_PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.h"
+#include "ui_PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.h"
 
 #include <U2View/AlignmentAlgorithmGUIExtension.h>
 
diff --git a/src/plugins/smith_waterman/src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui b/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui
similarity index 100%
rename from src/plugins/smith_waterman/src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui
rename to src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui
diff --git a/src/plugins/smith_waterman/src/SWAlgorithmTask.cpp b/src/plugins/smith_waterman/src/SWAlgorithmTask.cpp
index 8a4b0fc..72f58e5 100644
--- a/src/plugins/smith_waterman/src/SWAlgorithmTask.cpp
+++ b/src/plugins/smith_waterman/src/SWAlgorithmTask.cpp
@@ -200,12 +200,11 @@ void SWAlgorithmTask::setupTask(int maxScore) {
 }
 
 void SWAlgorithmTask::prepare() {
-    const SequenceWalkerConfig & config = t->getConfig();
-
     if( SW_cuda == algType ) {
         cudaGpu = AppContext::getCudaGpuRegistry()->acquireAnyReadyGpu();
         assert( cudaGpu );
 #ifdef SW2_BUILD_WITH_CUDA
+        const SequenceWalkerConfig & config = t->getConfig();
         quint64 needMemBytes = SmithWatermanAlgorithmCUDA::estimateNeededGpuMemory(
                 sWatermanConfig.pSm, sWatermanConfig.ptrn, sWatermanConfig.sqnc.left(config.chunkSize * config.nThreads), sWatermanConfig.resultView);
         quint64 gpuMemBytes = cudaGpu->getGlobalMemorySizeBytes();
@@ -228,9 +227,10 @@ void SWAlgorithmTask::prepare() {
 #endif
     }
     else if(SW_opencl == algType) {
+#ifdef SW2_BUILD_WITH_OPENCL
         openClGpu = AppContext::getOpenCLGpuRegistry()->acquireAnyReadyGpu();
         assert(openClGpu);
-#ifdef SW2_BUILD_WITH_OPENCL
+        const SequenceWalkerConfig & config = t->getConfig();
         const quint64 needMemBytes = SmithWatermanAlgorithmOPENCL::estimateNeededGpuMemory(
             sWatermanConfig.pSm, sWatermanConfig.ptrn, sWatermanConfig.sqnc.left(config.chunkSize * config.nThreads));
         const quint64 gpuMemBytes = openClGpu->getGlobalMemorySizeBytes();
@@ -412,7 +412,9 @@ Task::ReportResult SWAlgorithmTask::report() {
     if( SW_cuda == algType ) {
         cudaGpu->setAcquired(false);
     } else if(SW_opencl == algType) {
+#ifdef SW2_BUILD_WITH_OPENCL
         openClGpu->setAcquired(false);
+#endif
     }
 
     SmithWatermanResultListener* rl = sWatermanConfig.resultListener;
@@ -487,8 +489,13 @@ void SWResultsPostprocessingTask::run(){
 }
 
 PairwiseAlignmentSmithWatermanTaskSettings::PairwiseAlignmentSmithWatermanTaskSettings(const PairwiseAlignmentTaskSettings &s) :
-    PairwiseAlignmentTaskSettings(s) {
-}
+    PairwiseAlignmentTaskSettings(s), 
+    reportCallback(NULL),
+    resultListener(NULL),
+    resultFilter(NULL), 
+    gapOpen(0),
+    gapExtd(0),
+    percentOfScore(0) {}
 
 PairwiseAlignmentSmithWatermanTaskSettings::~PairwiseAlignmentSmithWatermanTaskSettings() {
     //all dynamic objects in the world will be destroyed by the task
@@ -784,12 +791,11 @@ int PairwiseAlignmentSmithWatermanTask::calculateMatrixLength(const QByteArray &
 }
 
 void PairwiseAlignmentSmithWatermanTask::prepare() {
-    const SequenceWalkerConfig & config = t->getConfig();
-
     if( SW_cuda == algType ) {
         cudaGpu = AppContext::getCudaGpuRegistry()->acquireAnyReadyGpu();
         assert( cudaGpu );
 #ifdef SW2_BUILD_WITH_CUDA
+        const SequenceWalkerConfig & config = t->getConfig();
         quint64 needMemBytes = SmithWatermanAlgorithmCUDA::estimateNeededGpuMemory(
                 settings->sMatrix, *ptrn, sqnc->left(config.chunkSize * config.nThreads), SmithWatermanSettings::MULTIPLE_ALIGNMENT);
         quint64 gpuMemBytes = cudaGpu->getGlobalMemorySizeBytes();
@@ -812,9 +818,10 @@ void PairwiseAlignmentSmithWatermanTask::prepare() {
 #endif
     }
     else if(SW_opencl == algType) {
+#ifdef SW2_BUILD_WITH_OPENCL
         openClGpu = AppContext::getOpenCLGpuRegistry()->acquireAnyReadyGpu();
         assert(openClGpu);
-#ifdef SW2_BUILD_WITH_OPENCL
+        const SequenceWalkerConfig & config = t->getConfig();
         const quint64 needMemBytes = SmithWatermanAlgorithmOPENCL::estimateNeededGpuMemory(
             settings->sMatrix, *ptrn, sqnc->left(config.chunkSize * config.nThreads));
         const quint64 gpuMemBytes = openClGpu->getGlobalMemorySizeBytes();
@@ -847,7 +854,9 @@ Task::ReportResult PairwiseAlignmentSmithWatermanTask::report() {
     if( SW_cuda == algType ) {
         cudaGpu->setAcquired(false);
     } else if(SW_opencl == algType) {
+#ifdef SW2_BUILD_WITH_OPENCL
         openClGpu->setAcquired(false);
+#endif
     }
 
     assert(settings->resultListener != NULL);
diff --git a/src/plugins/smith_waterman/src/SmithWatermanTests.cpp b/src/plugins/smith_waterman/src/SmithWatermanTests.cpp
index 87fc917..60b610e 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanTests.cpp
+++ b/src/plugins/smith_waterman/src/SmithWatermanTests.cpp
@@ -41,7 +41,6 @@
 #define PERCENT_OF_SCORE_ATTR "percent_of_score"
 #define EXPECTED_RESULT_ATTR "expected_res"
 #define ENV_IMPL_ATTR "IMPL"
-#define REMOTE_MACHINE "MACHINE"
 #define IMPL_ATTR "impl"
 
 using namespace std;
@@ -140,11 +139,6 @@ void GTest_SmithWatermnan::init(XMLTestFormat *, const QDomElement& el) {
         failMissingValue(ENV_IMPL_ATTR);
         return;
     }
-
-    machinePath = env->getVar( REMOTE_MACHINE );
-    if( !machinePath.isEmpty() ) {
-        machinePath = env->getVar( "COMMON_DATA_DIR" ) + "/" + machinePath;
-    }
 }
 
 
diff --git a/src/plugins/smith_waterman/transl/english.ts b/src/plugins/smith_waterman/transl/english.ts
index 07e189e..df7f73f 100644
--- a/src/plugins/smith_waterman/transl/english.ts
+++ b/src/plugins/smith_waterman/transl/english.ts
@@ -4,32 +4,32 @@
 <context>
     <name>PairwiseAlignmentSmithWatermanOptionsPanelMainWidget</name>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="14"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="29"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="29"/>
         <source>Algorithm version:</source>
         <translation>Algorithm version:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="39"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="39"/>
         <source>Scoring matrix:</source>
         <translation>Scoring matrix:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="62"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="62"/>
         <source>Gap penalty</source>
         <translation>Gap penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="77"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="77"/>
         <source>Open:</source>
         <translation>Open:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="84"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="84"/>
         <source>Extension:</source>
         <translation>Extension:</translation>
     </message>
@@ -96,17 +96,17 @@
 <context>
     <name>U2::GTest_SmithWatermnan</name>
     <message>
-        <location filename="../src/SmithWatermanTests.cpp" line="229"/>
+        <location filename="../src/SmithWatermanTests.cpp" line="223"/>
         <source>**</source>
         <translation>**</translation>
     </message>
     <message>
-        <location filename="../src/SmithWatermanTests.cpp" line="232"/>
+        <location filename="../src/SmithWatermanTests.cpp" line="226"/>
         <source>,</source>
         <translation>,</translation>
     </message>
     <message>
-        <location filename="../src/SmithWatermanTests.cpp" line="239"/>
+        <location filename="../src/SmithWatermanTests.cpp" line="233"/>
         <source>..</source>
         <translation>..</translation>
     </message>
@@ -383,27 +383,27 @@
 <context>
     <name>U2::PairwiseAlignmentSmithWatermanTask</name>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="554"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="561"/>
         <source>Substitution matrix is empty</source>
         <translation>Substitution matrix is empty</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="767"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="774"/>
         <source>Smith Waterman2 SequenceWalker</source>
         <translation>Smith Waterman2 SequenceWalker</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="797"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="803"/>
         <source>Not enough memory on CUDA-enabled device. The space required is %1 bytes, but only %2 bytes are available. Device id: %3, device name: %4</source>
         <translation>Not enough memory on CUDA-enabled device. The space required is %1 bytes, but only %2 bytes are available. Device id: %3, device name: %4</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="803"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="809"/>
         <source>The Smith-Waterman search allocates ~%1 bytes (%2 Mb) on CUDA device</source>
         <translation>The Smith-Waterman search allocates ~%1 bytes (%2 Mb) on CUDA device</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="857"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="866"/>
         <source>%1 results found</source>
         <translation>%1 results found</translation>
     </message>
@@ -595,17 +595,17 @@
         <translation>Smith Waterman2 SequenceWalker</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="213"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="212"/>
         <source>Not enough memory on CUDA-enabled device. The space required is %1 bytes, but only %2 bytes are available. Device id: %3, device name: %4</source>
         <translation>Not enough memory on CUDA-enabled device. The space required is %1 bytes, but only %2 bytes are available. Device id: %3, device name: %4</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="219"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="218"/>
         <source>The Smith-Waterman search allocates ~%1 bytes (%2 Mb) on CUDA device</source>
         <translation>The Smith-Waterman search allocates ~%1 bytes (%2 Mb) on CUDA device</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="422"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="424"/>
         <source>%1 results found</source>
         <translation>%1 results found</translation>
     </message>
diff --git a/src/plugins/smith_waterman/transl/russian.ts b/src/plugins/smith_waterman/transl/russian.ts
index 339488d..614e49c 100644
--- a/src/plugins/smith_waterman/transl/russian.ts
+++ b/src/plugins/smith_waterman/transl/russian.ts
@@ -4,32 +4,32 @@
 <context>
     <name>PairwiseAlignmentSmithWatermanOptionsPanelMainWidget</name>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="14"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="29"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="29"/>
         <source>Algorithm version:</source>
         <translation>Версия алгоритма:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="39"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="39"/>
         <source>Scoring matrix:</source>
         <translation>Матрица:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="62"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="62"/>
         <source>Gap penalty</source>
         <translation>Штраф за пробел</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="77"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="77"/>
         <source>Open:</source>
         <translation>Открыть:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="84"/>
+        <location filename="../src/PairwiseAlignmentSmithWatermanOptionsPanelMainWidget.ui" line="84"/>
         <source>Extension:</source>
         <translation>Расширение:</translation>
     </message>
@@ -96,17 +96,17 @@
 <context>
     <name>U2::GTest_SmithWatermnan</name>
     <message>
-        <location filename="../src/SmithWatermanTests.cpp" line="229"/>
+        <location filename="../src/SmithWatermanTests.cpp" line="223"/>
         <source>**</source>
         <translation>**</translation>
     </message>
     <message>
-        <location filename="../src/SmithWatermanTests.cpp" line="232"/>
+        <location filename="../src/SmithWatermanTests.cpp" line="226"/>
         <source>,</source>
         <translation>,</translation>
     </message>
     <message>
-        <location filename="../src/SmithWatermanTests.cpp" line="239"/>
+        <location filename="../src/SmithWatermanTests.cpp" line="233"/>
         <source>..</source>
         <translation>..</translation>
     </message>
@@ -383,27 +383,27 @@
 <context>
     <name>U2::PairwiseAlignmentSmithWatermanTask</name>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="554"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="561"/>
         <source>Substitution matrix is empty</source>
         <translation>Substitution matrix is empty</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="767"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="774"/>
         <source>Smith Waterman2 SequenceWalker</source>
         <translation>Smith Waterman2 SequenceWalker</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="797"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="803"/>
         <source>Not enough memory on CUDA-enabled device. The space required is %1 bytes, but only %2 bytes are available. Device id: %3, device name: %4</source>
         <translation>Not enough memory on CUDA-enabled device. The space required is %1 bytes, but only %2 bytes are available. Device id: %3, device name: %4</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="803"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="809"/>
         <source>The Smith-Waterman search allocates ~%1 bytes (%2 Mb) on CUDA device</source>
         <translation>The Smith-Waterman search allocates ~%1 bytes (%2 Mb) on CUDA device</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="857"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="866"/>
         <source>%1 results found</source>
         <translation>%1 results found</translation>
     </message>
@@ -595,17 +595,17 @@
         <translation>Smith Waterman2 SequenceWalker</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="213"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="212"/>
         <source>Not enough memory on CUDA-enabled device. The space required is %1 bytes, but only %2 bytes are available. Device id: %3, device name: %4</source>
         <translation>Not enough memory on CUDA-enabled device. The space required is %1 bytes, but only %2 bytes are available. Device id: %3, device name: %4</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="219"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="218"/>
         <source>The Smith-Waterman search allocates ~%1 bytes (%2 Mb) on CUDA device</source>
         <translation>The Smith-Waterman search allocates ~%1 bytes (%2 Mb) on CUDA device</translation>
     </message>
     <message>
-        <location filename="../src/SWAlgorithmTask.cpp" line="422"/>
+        <location filename="../src/SWAlgorithmTask.cpp" line="424"/>
         <source>%1 results found</source>
         <translation>%1 results found</translation>
     </message>
diff --git a/src/plugins/test_runner/CMakeLists.txt b/src/plugins/test_runner/CMakeLists.txt
new file mode 100644
index 0000000..ad5d032
--- /dev/null
+++ b/src/plugins/test_runner/CMakeLists.txt
@@ -0,0 +1,5 @@
+set(UGENE_PLUGIN_NAME test_runner)
+
+find_package(Qt5 REQUIRED Test)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/test_runner/src/ExcludeReasonDialog.cpp b/src/plugins/test_runner/src/ExcludeReasonDialog.cpp
index 56da41c..4491871 100644
--- a/src/plugins/test_runner/src/ExcludeReasonDialog.cpp
+++ b/src/plugins/test_runner/src/ExcludeReasonDialog.cpp
@@ -5,7 +5,7 @@ namespace U2{
 
 ExcludeReasonDialog::ExcludeReasonDialog(QWidget *parent) :
     QDialog(parent),
-    ui(new Ui::ExcludeReasonDialog)
+    ui(new Ui_ExcludeReasonDialog)
 {
     ui->setupUi(this);
 }
diff --git a/src/plugins/test_runner/src/ExcludeReasonDialog.h b/src/plugins/test_runner/src/ExcludeReasonDialog.h
index 157282c..731ce15 100644
--- a/src/plugins/test_runner/src/ExcludeReasonDialog.h
+++ b/src/plugins/test_runner/src/ExcludeReasonDialog.h
@@ -1,11 +1,10 @@
 #ifndef EXCLUDERESAONDIALOG_H
 #define EXCLUDERESAONDIALOG_H
 
-#include <QDialog>
+#include <QtWidgets/QDialog>
+
+class Ui_ExcludeReasonDialog;
 
-namespace Ui {
-class ExcludeReasonDialog;
-}
 namespace U2{
 
 class ExcludeReasonDialog : public QDialog
@@ -17,7 +16,7 @@ public:
     ~ExcludeReasonDialog();
     QString getReason();
 private:
-    Ui::ExcludeReasonDialog *ui;
+    Ui_ExcludeReasonDialog *ui;
 };
 
 }
diff --git a/src/plugins/test_runner/src/ui/ExcludeReasonDialog.ui b/src/plugins/test_runner/src/ExcludeReasonDialog.ui
similarity index 100%
rename from src/plugins/test_runner/src/ui/ExcludeReasonDialog.ui
rename to src/plugins/test_runner/src/ExcludeReasonDialog.ui
diff --git a/src/plugins/test_runner/src/ui/ExcludeResaonDialog.ui b/src/plugins/test_runner/src/ExcludeResaonDialog.ui
similarity index 100%
rename from src/plugins/test_runner/src/ui/ExcludeResaonDialog.ui
rename to src/plugins/test_runner/src/ExcludeResaonDialog.ui
diff --git a/src/plugins/test_runner/src/ui/Reporter.ui b/src/plugins/test_runner/src/Reporter.ui
similarity index 100%
rename from src/plugins/test_runner/src/ui/Reporter.ui
rename to src/plugins/test_runner/src/Reporter.ui
diff --git a/src/plugins/test_runner/src/ui/TestView.ui b/src/plugins/test_runner/src/TestView.ui
similarity index 100%
rename from src/plugins/test_runner/src/ui/TestView.ui
rename to src/plugins/test_runner/src/TestView.ui
diff --git a/src/plugins/test_runner/src/TestViewController.h b/src/plugins/test_runner/src/TestViewController.h
index f6fe1fe..d35ce79 100644
--- a/src/plugins/test_runner/src/TestViewController.h
+++ b/src/plugins/test_runner/src/TestViewController.h
@@ -23,7 +23,7 @@
 #define _U2_TEST_VIEW_CONTROLLER_H_
 
 #include <U2Gui/MainWindow.h>
-#include <ui/ui_TestView.h>
+#include <ui_TestView.h>
 #include <U2Core/CMDLineRegistry.h>
 
 #include <QtCore/QTime>
@@ -47,7 +47,7 @@ class TestRunnerService;
 class TestRunnerTask;
 class TestViewReporter;
 
-class TestViewController : public MWMDIWindow, Ui::TestView {
+class TestViewController : public MWMDIWindow, Ui_TestView {
     Q_OBJECT
 public:
     TestViewController(TestRunnerService* s, bool cmd = false);
diff --git a/src/plugins/test_runner/src/TestViewReporter.h b/src/plugins/test_runner/src/TestViewReporter.h
index b07fe54..bfced85 100644
--- a/src/plugins/test_runner/src/TestViewReporter.h
+++ b/src/plugins/test_runner/src/TestViewReporter.h
@@ -25,7 +25,7 @@
 #include "TestViewController.h"
 
 #include <U2Gui/MainWindow.h>
-#include <ui/ui_Reporter.h>
+#include <ui_Reporter.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QTreeWidgetItem>
@@ -40,7 +40,7 @@ namespace U2 {
     class TVTestItem;
 
 
-    class TestViewReporter : public  MWMDIWindow, Ui::Reporter {
+    class TestViewReporter : public  MWMDIWindow, Ui_Reporter {
      Q_OBJECT
 
  protected:
diff --git a/src/plugins/test_runner/test_runner.pro b/src/plugins/test_runner/test_runner.pro
index 5cd6044..ff098d8 100644
--- a/src/plugins/test_runner/test_runner.pro
+++ b/src/plugins/test_runner/test_runner.pro
@@ -7,9 +7,9 @@ HEADERS += resource.h \
            src/TestViewController.h \
            src/TestViewReporter.h \
            src/ExcludeReasonDialog.h
-FORMS += src/ui/Reporter.ui \
-         src/ui/TestView.ui \
-         src/ui/ExcludeReasonDialog.ui
+FORMS += src/Reporter.ui \
+         src/TestView.ui \
+         src/ExcludeReasonDialog.ui
 SOURCES += src/GTestScriptWrapper.cpp \
            src/TestRunnerPlugin.cpp \
            src/TestViewController.cpp \
diff --git a/src/plugins/test_runner/transl/english.ts b/src/plugins/test_runner/transl/english.ts
index e1334a1..ad07d78 100644
--- a/src/plugins/test_runner/transl/english.ts
+++ b/src/plugins/test_runner/transl/english.ts
@@ -4,12 +4,12 @@
 <context>
     <name>ExcludeReasonDialog</name>
     <message>
-        <location filename="../src/ui/ExcludeReasonDialog.ui" line="20"/>
+        <location filename="../src/ExcludeReasonDialog.ui" line="20"/>
         <source>exclude reason</source>
         <translation>Exclude reason</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExcludeReasonDialog.ui" line="35"/>
+        <location filename="../src/ExcludeReasonDialog.ui" line="35"/>
         <source>Set exclude reason</source>
         <translation>Set exclude reason</translation>
     </message>
@@ -28,12 +28,12 @@
 <context>
     <name>Reporter</name>
     <message>
-        <location filename="../src/ui/Reporter.ui" line="13"/>
+        <location filename="../src/Reporter.ui" line="13"/>
         <source>utf_reporter_title</source>
         <translation>Reports</translation>
     </message>
     <message>
-        <location filename="../src/ui/Reporter.ui" line="27"/>
+        <location filename="../src/Reporter.ui" line="27"/>
         <source>about:blank</source>
         <translation>about:blank</translation>
     </message>
@@ -41,27 +41,27 @@
 <context>
     <name>TestView</name>
     <message>
-        <location filename="../src/ui/TestView.ui" line="14"/>
+        <location filename="../src/TestView.ui" line="14"/>
         <source>utf_view_title</source>
         <translation>Test runner</translation>
     </message>
     <message>
-        <location filename="../src/ui/TestView.ui" line="28"/>
+        <location filename="../src/TestView.ui" line="28"/>
         <source>testColumn</source>
         <translation>Tests</translation>
     </message>
     <message>
-        <location filename="../src/ui/TestView.ui" line="33"/>
+        <location filename="../src/TestView.ui" line="33"/>
         <source>stateColumn</source>
         <translation>State</translation>
     </message>
     <message>
-        <location filename="../src/ui/TestView.ui" line="56"/>
+        <location filename="../src/TestView.ui" line="56"/>
         <source>info_label</source>
         <translation>Info</translation>
     </message>
     <message>
-        <location filename="../src/ui/TestView.ui" line="94"/>
+        <location filename="../src/TestView.ui" line="94"/>
         <source>Save test</source>
         <translation>Save test</translation>
     </message>
diff --git a/src/plugins/test_runner/transl/russian.ts b/src/plugins/test_runner/transl/russian.ts
index 9a33864..8ffc9bc 100644
--- a/src/plugins/test_runner/transl/russian.ts
+++ b/src/plugins/test_runner/transl/russian.ts
@@ -4,12 +4,12 @@
 <context>
     <name>ExcludeReasonDialog</name>
     <message>
-        <location filename="../src/ui/ExcludeReasonDialog.ui" line="20"/>
+        <location filename="../src/ExcludeReasonDialog.ui" line="20"/>
         <source>exclude reason</source>
         <translation>Exclude reason</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExcludeReasonDialog.ui" line="35"/>
+        <location filename="../src/ExcludeReasonDialog.ui" line="35"/>
         <source>Set exclude reason</source>
         <translation>Set exclude reason</translation>
     </message>
@@ -28,12 +28,12 @@
 <context>
     <name>Reporter</name>
     <message>
-        <location filename="../src/ui/Reporter.ui" line="13"/>
+        <location filename="../src/Reporter.ui" line="13"/>
         <source>utf_reporter_title</source>
         <translation>Reports</translation>
     </message>
     <message>
-        <location filename="../src/ui/Reporter.ui" line="27"/>
+        <location filename="../src/Reporter.ui" line="27"/>
         <source>about:blank</source>
         <translation>about:blank</translation>
     </message>
@@ -41,27 +41,27 @@
 <context>
     <name>TestView</name>
     <message>
-        <location filename="../src/ui/TestView.ui" line="14"/>
+        <location filename="../src/TestView.ui" line="14"/>
         <source>utf_view_title</source>
         <translation>Test runner</translation>
     </message>
     <message>
-        <location filename="../src/ui/TestView.ui" line="28"/>
+        <location filename="../src/TestView.ui" line="28"/>
         <source>testColumn</source>
         <translation>Tests</translation>
     </message>
     <message>
-        <location filename="../src/ui/TestView.ui" line="33"/>
+        <location filename="../src/TestView.ui" line="33"/>
         <source>stateColumn</source>
         <translation>State</translation>
     </message>
     <message>
-        <location filename="../src/ui/TestView.ui" line="56"/>
+        <location filename="../src/TestView.ui" line="56"/>
         <source>info_label</source>
         <translation>Info</translation>
     </message>
     <message>
-        <location filename="../src/ui/TestView.ui" line="94"/>
+        <location filename="../src/TestView.ui" line="94"/>
         <source>Save test</source>
         <translation>Save test</translation>
     </message>
diff --git a/src/plugins/weight_matrix/CMakeLists.txt b/src/plugins/weight_matrix/CMakeLists.txt
new file mode 100644
index 0000000..09a0143
--- /dev/null
+++ b/src/plugins/weight_matrix/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME weight_matrix)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/weight_matrix/src/ui/MatrixAndLogoWidget.ui b/src/plugins/weight_matrix/src/MatrixAndLogoWidget.ui
similarity index 100%
rename from src/plugins/weight_matrix/src/ui/MatrixAndLogoWidget.ui
rename to src/plugins/weight_matrix/src/MatrixAndLogoWidget.ui
diff --git a/src/plugins/weight_matrix/src/ui/PWMBuildDialog.ui b/src/plugins/weight_matrix/src/PWMBuildDialog.ui
similarity index 100%
rename from src/plugins/weight_matrix/src/ui/PWMBuildDialog.ui
rename to src/plugins/weight_matrix/src/PWMBuildDialog.ui
diff --git a/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp b/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp
index af88bef..9ecc13c 100644
--- a/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp
+++ b/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp
@@ -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 <U2Algorithm/PWMConversionAlgorithm.h>
 #include <U2Algorithm/PWMConversionAlgorithmRegistry.h>
@@ -53,6 +47,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "PWMBuildDialogController.h"
@@ -64,11 +59,12 @@
 namespace U2 {
 
 PWMBuildDialogController::PWMBuildDialogController(QWidget* w)
-: QDialog(w), logoArea(NULL)
-{
+    : QDialog(w),
+      saveController(NULL),
+      logoArea(NULL) {
     task = NULL;
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467786");
+    new HelpButton(this, buttonBox, "17470719");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -77,13 +73,13 @@ PWMBuildDialogController::PWMBuildDialogController(QWidget* w)
 
     this->resize(this->width(), this->minimumHeight());
 
+    initFrequencySaveController();
+
     okButton = buttonBox->button(QDialogButtonBox::Ok);
     cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
     connect(inputButton, SIGNAL(clicked()), SLOT(sl_inFileButtonClicked()));
-    connect(outputButton, SIGNAL(clicked()), SLOT(sl_outFileButtonClicked()));
     connect(okButton, SIGNAL(clicked()), SLOT(sl_okButtonClicked()));
     connect(weightButton, SIGNAL(toggled(bool)), SLOT(sl_matrixTypeChanged(bool)));
-
 }
 
 
@@ -161,6 +157,14 @@ void PWMBuildDialogController::sl_inFileButtonClicked() {
     }
 }
 
+void PWMBuildDialogController::sl_formatChanged(const QString &newFormatId) {
+    if (WeightMatrixIO::FREQUENCY_MATRIX_ID == newFormatId) {
+        frequencyButton->setChecked(true);
+    } else {
+        weightButton->setChecked(true);
+    }
+}
+
 void PWMBuildDialogController::reportError(const QString &message) {
     QMessageBox::warning(this, L10N::errorTitle(), message);
 }
@@ -182,45 +186,13 @@ void PWMBuildDialogController::replaceLogo(const MAlignment& ma) {
     }
 }
 
-void PWMBuildDialogController::sl_outFileButtonClicked() {
-    LastUsedDirHelper lod(WeightMatrixIO::WEIGHT_MATRIX_ID);
-    if (frequencyButton->isChecked()) {
-        lod.url = U2FileDialog::getSaveFileName(this, tr("Select file to save frequency matrix to..."), lod, WeightMatrixIO::getPFMFileFilter(false));
-    } else {
-        lod.url = U2FileDialog::getSaveFileName(this, tr("Select file to save weight matrix to..."), lod, WeightMatrixIO::getPWMFileFilter(false));
-    }
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    outputEdit->setText(QFileInfo(lod.url).absoluteFilePath());
-}
-
 void PWMBuildDialogController::sl_matrixTypeChanged(bool matrixType) {
-    QStringList nameParts = outputEdit->text().split(".");
+    delete saveController;
     if (matrixType) {
-        for (int i = nameParts.length() - 1; i >= 0; --i) {
-            if (nameParts[i] == WeightMatrixIO::FREQUENCY_MATRIX_EXT) {
-                nameParts[i] = WeightMatrixIO::WEIGHT_MATRIX_EXT;
-                break;
-            }
-        }
+        initWeightSaveController();
     } else {
-        for (int i = nameParts.length() - 1; i >= 0; --i) {
-            if (nameParts[i] == WeightMatrixIO::WEIGHT_MATRIX_EXT) {
-                nameParts[i] = WeightMatrixIO::FREQUENCY_MATRIX_EXT;
-                break;
-            }
-        }
+        initFrequencySaveController();
     }
-    QString name = nameParts.join(".");
-    if (QFile::exists(name)) {
-        if (QMessageBox::No == QMessageBox::question(this, tr("Overwrite existing file"),
-            tr("File with this name already exists.\nDo you want to write over this file?"), QMessageBox::Yes | QMessageBox::No)) {
-            emit sl_outFileButtonClicked();
-            return;
-        }
-    }
-    outputEdit->setText(name);
 }
 
 void PWMBuildDialogController::sl_okButtonClicked() {
@@ -233,8 +205,6 @@ void PWMBuildDialogController::sl_okButtonClicked() {
 
     PMBuildSettings s;
 
-    QString errMsg;
-
     QString inFile = inputEdit->text();
     if (inFile.isEmpty() || !QFile::exists(inFile)) {
         statusLabel->setText(tr("Illegal input file name"));
@@ -242,7 +212,7 @@ void PWMBuildDialogController::sl_okButtonClicked() {
         return;
     }
 
-    QString outFile = outputEdit->text();
+    QString outFile = saveController->getSaveFileName();
     if (outFile.isEmpty()) {
         statusLabel->setText(tr("Illegal output file name"));
         outputEdit->setFocus();
@@ -281,7 +251,6 @@ void PWMBuildDialogController::sl_okButtonClicked() {
     cancelButton->setText(tr("Cancel"));
 }
 
-
 void PWMBuildDialogController::sl_onStateChanged() {
     Task* t = qobject_cast<Task*>(sender());
     assert(task!=NULL);
@@ -298,7 +267,7 @@ void PWMBuildDialogController::sl_onStateChanged() {
         lastURL = "";
     } else {
         statusLabel->setText(tr("Build finished successfuly"));
-        lastURL = outputEdit->text();
+        lastURL = saveController->getSaveFileName();
     }
     okButton->setText(tr("Start"));
     cancelButton->setText(tr("Close"));
@@ -310,6 +279,42 @@ void PWMBuildDialogController::sl_onProgressChanged() {
     statusLabel->setText(tr("Running state %1 progress %2%").arg(task->getStateInfo().getDescription()).arg(task->getProgress()));
 }
 
+void PWMBuildDialogController::initFrequencySaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = SETTINGS_ROOT + WeightMatrixIO::FREQUENCY_MATRIX_ID;
+    config.defaultFormatId = WeightMatrixIO::FREQUENCY_MATRIX_ID;
+    config.fileDialogButton = outputButton;
+    config.fileNameEdit = outputEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file to save frequency matrix to...");
+
+    SaveDocumentController::SimpleFormatsInfo formats;
+    formats.addFormat(WeightMatrixIO::FREQUENCY_MATRIX_ID, tr("Frequency matrices"), QStringList() << WeightMatrixIO::FREQUENCY_MATRIX_EXT);
+    formats.addFormat(WeightMatrixIO::WEIGHT_MATRIX_ID, tr("Weight matrices"), QStringList() << WeightMatrixIO::WEIGHT_MATRIX_EXT);
+
+    saveController = new SaveDocumentController(config, formats, this);
+    connect(saveController, SIGNAL(si_formatChanged(const QString &)), SLOT(sl_formatChanged(const QString &)));
+    saveController->setFormat(WeightMatrixIO::FREQUENCY_MATRIX_ID);
+}
+
+void PWMBuildDialogController::initWeightSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = SETTINGS_ROOT + WeightMatrixIO::WEIGHT_MATRIX_ID;
+    config.defaultFormatId = WeightMatrixIO::WEIGHT_MATRIX_ID;
+    config.fileDialogButton = outputButton;
+    config.fileNameEdit = outputEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file to save weight matrix to...");
+
+    SaveDocumentController::SimpleFormatsInfo formats;
+    formats.addFormat(WeightMatrixIO::FREQUENCY_MATRIX_ID, tr("Frequency matrices"), QStringList() << WeightMatrixIO::FREQUENCY_MATRIX_EXT);
+    formats.addFormat(WeightMatrixIO::WEIGHT_MATRIX_ID, tr("Weight matrices"), QStringList() << WeightMatrixIO::WEIGHT_MATRIX_EXT);
+
+    saveController = new SaveDocumentController(config, formats, this);
+    connect(saveController, SIGNAL(si_formatChanged(const QString &)), SLOT(sl_formatChanged(const QString &)));
+    saveController->setFormat(WeightMatrixIO::WEIGHT_MATRIX_ID);
+}
+
 void PWMBuildDialogController::reject() {
     if (task!=NULL) {
         task->cancel();
diff --git a/src/plugins/weight_matrix/src/PWMBuildDialogController.h b/src/plugins/weight_matrix/src/PWMBuildDialogController.h
index 251dcea..ac5399b 100644
--- a/src/plugins/weight_matrix/src/PWMBuildDialogController.h
+++ b/src/plugins/weight_matrix/src/PWMBuildDialogController.h
@@ -22,28 +22,28 @@
 #ifndef _U2_WEIGHT_MATRIX_BUILD_DIALOG_CONTROLLER_H_
 #define _U2_WEIGHT_MATRIX_BUILD_DIALOG_CONTROLLER_H_
 
-#include <ui/ui_PWMBuildDialog.h>
+#include <QDialog>
+
+#include <U2Algorithm/PWMConversionAlgorithm.h>
 
-#include "WeightMatrixPlugin.h"
-#include "WeightMatrixAlgorithm.h"
-#include <U2Core/Task.h>
-#include <U2Core/MAlignment.h>
 #include <U2Core/DNASequence.h>
+#include <U2Core/MAlignment.h>
 #include <U2Core/PFMatrix.h>
 #include <U2Core/PWMatrix.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-#include <U2Algorithm/PWMConversionAlgorithm.h>
+#include <U2Core/Task.h>
+
 #include <U2View/AlignmentLogo.h>
 
+#include "WeightMatrixAlgorithm.h"
+#include "WeightMatrixPlugin.h"
+#include "ui_PWMBuildDialog.h"
+
 namespace U2 {
 
 class LoadDocumentTask;
 class PWMBuildSettings;
 class PWMModel;
+class SaveDocumentController;
 
 class PWMBuildDialogController : public QDialog, public Ui_PWMBuildDialog {
     Q_OBJECT
@@ -57,7 +57,7 @@ public slots:
 
 private slots:
     void sl_inFileButtonClicked();
-    void sl_outFileButtonClicked();
+    void sl_formatChanged(const QString &newFormatId);
     void sl_okButtonClicked();
     void sl_matrixTypeChanged(bool);
 
@@ -65,10 +65,12 @@ private slots:
     void sl_onProgressChanged();
 
 private:
+    void initFrequencySaveController();
+    void initWeightSaveController();
     void reportError(const QString &message);
 
-private:
     Task* task;
+    SaveDocumentController *saveController;
     AlignmentLogoRenderArea* logoArea;
     QPushButton* okButton;
     QPushButton* cancelButton;
diff --git a/src/plugins/weight_matrix/src/PWMJASPARDialogController.cpp b/src/plugins/weight_matrix/src/PWMJASPARDialogController.cpp
index 1a6b7e8..c3ff50c 100644
--- a/src/plugins/weight_matrix/src/PWMJASPARDialogController.cpp
+++ b/src/plugins/weight_matrix/src/PWMJASPARDialogController.cpp
@@ -38,7 +38,7 @@ namespace U2 {
 PWMJASPARDialogController::PWMJASPARDialogController(QWidget *w)
 : QDialog(w) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467785");
+    new HelpButton(this, buttonBox, "17470718");
     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 b162cee..87a550b 100644
--- a/src/plugins/weight_matrix/src/PWMJASPARDialogController.h
+++ b/src/plugins/weight_matrix/src/PWMJASPARDialogController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_WEIGHT_MATRIX_JASPAR_DIALOG_CONTROLLER_H_
 #define _U2_WEIGHT_MATRIX_JASPAR_DIALOG_CONTROLLER_H_
 
-#include <ui/ui_SearchJASPARDatabase.h>
+#include <ui_SearchJASPARDatabase.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QDialog>
diff --git a/src/plugins/weight_matrix/src/ui/PWMSearchDialog.ui b/src/plugins/weight_matrix/src/PWMSearchDialog.ui
similarity index 100%
rename from src/plugins/weight_matrix/src/ui/PWMSearchDialog.ui
rename to src/plugins/weight_matrix/src/PWMSearchDialog.ui
diff --git a/src/plugins/weight_matrix/src/PWMSearchDialogController.cpp b/src/plugins/weight_matrix/src/PWMSearchDialogController.cpp
index f2dc919..4fdbac5 100644
--- a/src/plugins/weight_matrix/src/PWMSearchDialogController.cpp
+++ b/src/plugins/weight_matrix/src/PWMSearchDialogController.cpp
@@ -108,7 +108,7 @@ public:
 
 PWMSearchDialogController::PWMSearchDialogController(ADVSequenceObjectContext* _ctx, QWidget *p):QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467784");
+    new HelpButton(this, buttonBox, "17470717");
     buttonBox->button(QDialogButtonBox::Yes)->setText(tr("Add to queue"));
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/plugins/weight_matrix/src/PWMSearchDialogController.h b/src/plugins/weight_matrix/src/PWMSearchDialogController.h
index 325e3ba..855230c 100644
--- a/src/plugins/weight_matrix/src/PWMSearchDialogController.h
+++ b/src/plugins/weight_matrix/src/PWMSearchDialogController.h
@@ -25,7 +25,7 @@
 #include <U2Core/global.h>
 #include <U2Core/U2Region.h>
 
-#include <ui/ui_PWMSearchDialog.h>
+#include <ui_PWMSearchDialog.h>
 
 #include <QtCore/QList>
 #if (QT_VERSION < 0x050000) //Qt 5
diff --git a/src/plugins/weight_matrix/src/ui/SearchJASPARDatabase.ui b/src/plugins/weight_matrix/src/SearchJASPARDatabase.ui
similarity index 100%
rename from src/plugins/weight_matrix/src/ui/SearchJASPARDatabase.ui
rename to src/plugins/weight_matrix/src/SearchJASPARDatabase.ui
diff --git a/src/plugins/weight_matrix/src/ui/SetDefaultParametersDialog.ui b/src/plugins/weight_matrix/src/SetDefaultParametersDialog.ui
similarity index 100%
rename from src/plugins/weight_matrix/src/ui/SetDefaultParametersDialog.ui
rename to src/plugins/weight_matrix/src/SetDefaultParametersDialog.ui
diff --git a/src/plugins/weight_matrix/src/SetParametersDialogController.cpp b/src/plugins/weight_matrix/src/SetParametersDialogController.cpp
index 3e87cdf..c1a5a2b 100644
--- a/src/plugins/weight_matrix/src/SetParametersDialogController.cpp
+++ b/src/plugins/weight_matrix/src/SetParametersDialogController.cpp
@@ -37,7 +37,7 @@ SetParametersDialogController::SetParametersDialogController(QWidget *w)
     : QDialog(w) {
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467784");
+    new HelpButton(this, buttonBox, "17470717");
 
     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 bbca5f9..dd79f7e 100644
--- a/src/plugins/weight_matrix/src/SetParametersDialogController.h
+++ b/src/plugins/weight_matrix/src/SetParametersDialogController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_WEIGHT_MATRIX_SET_PARAMETERS_DIALOG_CONTROLLER_H_
 #define _U2_WEIGHT_MATRIX_SET_PARAMETERS_DIALOG_CONTROLLER_H_
 
-#include <ui/ui_SetDefaultParametersDialog.h>
+#include <ui_SetDefaultParametersDialog.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QDialog>
diff --git a/src/plugins/weight_matrix/src/ui/ViewMatrixDialog.ui b/src/plugins/weight_matrix/src/ViewMatrixDialog.ui
similarity index 100%
rename from src/plugins/weight_matrix/src/ui/ViewMatrixDialog.ui
rename to src/plugins/weight_matrix/src/ViewMatrixDialog.ui
diff --git a/src/plugins/weight_matrix/src/ViewMatrixDialogController.cpp b/src/plugins/weight_matrix/src/ViewMatrixDialogController.cpp
index 0b4f5a3..7cfd32a 100644
--- a/src/plugins/weight_matrix/src/ViewMatrixDialogController.cpp
+++ b/src/plugins/weight_matrix/src/ViewMatrixDialogController.cpp
@@ -183,7 +183,7 @@ ViewMatrixDialogController::ViewMatrixDialogController(PFMatrix matrix, QWidget
 
 ViewMatrixDialogController::ViewMatrixDialogController(PWMatrix matrix, QWidget *w): QDialog(w){
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467786");
+    new HelpButton(this, buttonBox, "17470719");
     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 16e1d82..2fe998b 100644
--- a/src/plugins/weight_matrix/src/ViewMatrixDialogController.h
+++ b/src/plugins/weight_matrix/src/ViewMatrixDialogController.h
@@ -22,8 +22,8 @@
 #ifndef _U2_WEIGHT_MATRIX_VIEW_MATRIX_DIALOG_CONTROLLER_H_
 #define _U2_WEIGHT_MATRIX_VIEW_MATRIX_DIALOG_CONTROLLER_H_
 
-#include <ui/ui_ViewMatrixDialog.h>
-#include <ui/ui_MatrixAndLogoWidget.h>
+#include <ui_ViewMatrixDialog.h>
+#include <ui_MatrixAndLogoWidget.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QDialog>
diff --git a/src/plugins/weight_matrix/transl/english.ts b/src/plugins/weight_matrix/transl/english.ts
index 40f2568..a2e164e 100644
--- a/src/plugins/weight_matrix/transl/english.ts
+++ b/src/plugins/weight_matrix/transl/english.ts
@@ -4,7 +4,7 @@
 <context>
     <name>MatrixAndLogoWidget</name>
     <message>
-        <location filename="../src/ui/MatrixAndLogoWidget.ui" line="20"/>
+        <location filename="../src/MatrixAndLogoWidget.ui" line="20"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
@@ -12,68 +12,68 @@
 <context>
     <name>PWMBuildDialog</name>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="14"/>
+        <location filename="../src/PWMBuildDialog.ui" line="14"/>
         <source>Build Weight or Frequency Matrix</source>
         <translation>Build Weight or Frequency Matrix</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="22"/>
+        <location filename="../src/PWMBuildDialog.ui" line="22"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="32"/>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="49"/>
+        <location filename="../src/PWMBuildDialog.ui" line="32"/>
+        <location filename="../src/PWMBuildDialog.ui" line="49"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="39"/>
+        <location filename="../src/PWMBuildDialog.ui" line="39"/>
         <source>Output file</source>
         <translation>Output file</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="58"/>
+        <location filename="../src/PWMBuildDialog.ui" line="58"/>
         <source>Statistic options</source>
         <translation>Statistic options</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="64"/>
+        <location filename="../src/PWMBuildDialog.ui" line="64"/>
         <source>Statistic type:</source>
         <translation>Statistic type:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="71"/>
+        <location filename="../src/PWMBuildDialog.ui" line="71"/>
         <source>Mononucleic</source>
         <translation>Mononucleic</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="81"/>
+        <location filename="../src/PWMBuildDialog.ui" line="81"/>
         <source>Dinucleic</source>
         <translation>Dinucleic</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="91"/>
+        <location filename="../src/PWMBuildDialog.ui" line="91"/>
         <source>Matrix options</source>
         <translation>Matrix options</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="99"/>
+        <location filename="../src/PWMBuildDialog.ui" line="99"/>
         <source>Matrix type:</source>
         <translation>Matrix type:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="106"/>
+        <location filename="../src/PWMBuildDialog.ui" line="106"/>
         <source>Frequency matrix</source>
         <translation>Frequency matrix</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="116"/>
+        <location filename="../src/PWMBuildDialog.ui" line="116"/>
         <source>Weight matrix</source>
         <translation>Weight matrix</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="130"/>
+        <location filename="../src/PWMBuildDialog.ui" line="130"/>
         <source>Weight algorithm</source>
         <translation>Weight algorithm</translation>
     </message>
@@ -86,136 +86,136 @@
 <context>
     <name>PWMSearchDialog</name>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="20"/>
+        <location filename="../src/PWMSearchDialog.ui" line="20"/>
         <source>Weight Matrix Search</source>
         <translation>Weight Matrix Search</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="31"/>
+        <location filename="../src/PWMSearchDialog.ui" line="31"/>
         <source>Matrix:</source>
         <translation>Matrix:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="45"/>
+        <location filename="../src/PWMSearchDialog.ui" line="45"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="52"/>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="246"/>
+        <location filename="../src/PWMSearchDialog.ui" line="52"/>
+        <location filename="../src/PWMSearchDialog.ui" line="246"/>
         <source>Minimal score</source>
         <translation>Minimal score</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="55"/>
+        <location filename="../src/PWMSearchDialog.ui" line="55"/>
         <source>Score:</source>
         <translation>Score:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="87"/>
+        <location filename="../src/PWMSearchDialog.ui" line="87"/>
         <source>85%</source>
         <translation>85%</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="264"/>
+        <location filename="../src/PWMSearchDialog.ui" line="264"/>
         <source>Load list</source>
         <translation>Load list</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="271"/>
+        <location filename="../src/PWMSearchDialog.ui" line="271"/>
         <source>Save list</source>
         <translation>Save list</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="278"/>
+        <location filename="../src/PWMSearchDialog.ui" line="278"/>
         <source>Load folder</source>
         <translation>Load folder</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="105"/>
+        <location filename="../src/PWMSearchDialog.ui" line="105"/>
         <source>Build new matrix</source>
         <translation>Build new matrix</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="139"/>
+        <location filename="../src/PWMSearchDialog.ui" line="139"/>
         <source>Weight algorithm</source>
         <translation>Weight algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="165"/>
+        <location filename="../src/PWMSearchDialog.ui" line="165"/>
         <source>Strands</source>
         <translation>Strands</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="171"/>
+        <location filename="../src/PWMSearchDialog.ui" line="171"/>
         <source>Both strands</source>
         <translation>Both strands</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="184"/>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="187"/>
+        <location filename="../src/PWMSearchDialog.ui" line="184"/>
+        <location filename="../src/PWMSearchDialog.ui" line="187"/>
         <source>Direct strand</source>
         <translation>Direct strand</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="306"/>
+        <location filename="../src/PWMSearchDialog.ui" line="306"/>
         <source>Range</source>
         <translation>Range</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="241"/>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="311"/>
+        <location filename="../src/PWMSearchDialog.ui" line="241"/>
+        <location filename="../src/PWMSearchDialog.ui" line="311"/>
         <source>Matrix</source>
         <translation>Matrix</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="98"/>
+        <location filename="../src/PWMSearchDialog.ui" line="98"/>
         <source>Search JASPAR Database</source>
         <translation>Search JASPAR Database</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="125"/>
+        <location filename="../src/PWMSearchDialog.ui" line="125"/>
         <source>View matrix</source>
         <translation>View matrix</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="203"/>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="206"/>
+        <location filename="../src/PWMSearchDialog.ui" line="203"/>
+        <location filename="../src/PWMSearchDialog.ui" line="206"/>
         <source>Reverse complement strand</source>
         <translation>Reverse complement strand</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="251"/>
+        <location filename="../src/PWMSearchDialog.ui" line="251"/>
         <source>Algorithm</source>
         <translation>Algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="285"/>
+        <location filename="../src/PWMSearchDialog.ui" line="285"/>
         <source>Clear list</source>
         <translation>Clear list</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="316"/>
+        <location filename="../src/PWMSearchDialog.ui" line="316"/>
         <source>Strand</source>
         <translation>Strand</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="321"/>
+        <location filename="../src/PWMSearchDialog.ui" line="321"/>
         <source>Score</source>
         <translation>Score</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="331"/>
+        <location filename="../src/PWMSearchDialog.ui" line="331"/>
         <source>Clear results</source>
         <translation>Clear results</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="338"/>
+        <location filename="../src/PWMSearchDialog.ui" line="338"/>
         <source>Save as annotations</source>
         <translation>Save as annotations</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="362"/>
+        <location filename="../src/PWMSearchDialog.ui" line="362"/>
         <source>Status</source>
         <translation>Status</translation>
     </message>
@@ -267,27 +267,27 @@
 <context>
     <name>SearchJASPARDatabase</name>
     <message>
-        <location filename="../src/ui/SearchJASPARDatabase.ui" line="14"/>
+        <location filename="../src/SearchJASPARDatabase.ui" line="14"/>
         <source>Search JASPAR Database</source>
         <translation>Search JASPAR Database</translation>
     </message>
     <message>
-        <location filename="../src/ui/SearchJASPARDatabase.ui" line="24"/>
+        <location filename="../src/SearchJASPARDatabase.ui" line="24"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/ui/SearchJASPARDatabase.ui" line="29"/>
+        <location filename="../src/SearchJASPARDatabase.ui" line="29"/>
         <source>ID</source>
         <translation>ID</translation>
     </message>
     <message>
-        <location filename="../src/ui/SearchJASPARDatabase.ui" line="34"/>
+        <location filename="../src/SearchJASPARDatabase.ui" line="34"/>
         <source>Class</source>
         <translation>Class</translation>
     </message>
     <message>
-        <location filename="../src/ui/SearchJASPARDatabase.ui" line="39"/>
+        <location filename="../src/SearchJASPARDatabase.ui" line="39"/>
         <source>Family</source>
         <translation>Family</translation>
     </message>
@@ -295,22 +295,22 @@
 <context>
     <name>SetDefaultParametersDialog</name>
     <message>
-        <location filename="../src/ui/SetDefaultParametersDialog.ui" line="14"/>
+        <location filename="../src/SetDefaultParametersDialog.ui" line="14"/>
         <source>Set default parameters</source>
         <translation>Set default parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/SetDefaultParametersDialog.ui" line="25"/>
+        <location filename="../src/SetDefaultParametersDialog.ui" line="25"/>
         <source>Weight algorithm</source>
         <translation>Weight algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ui/SetDefaultParametersDialog.ui" line="35"/>
+        <location filename="../src/SetDefaultParametersDialog.ui" line="35"/>
         <source>Score:</source>
         <translation>Score:</translation>
     </message>
     <message>
-        <location filename="../src/ui/SetDefaultParametersDialog.ui" line="66"/>
+        <location filename="../src/SetDefaultParametersDialog.ui" line="66"/>
         <source>85%</source>
         <translation>85%</translation>
     </message>
@@ -690,27 +690,27 @@
 <context>
     <name>U2::PFMatrixBuildTask</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="329"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="334"/>
         <source>Build Frequency Matrix</source>
         <translation>Build Frequency Matrix</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="337"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="342"/>
         <source>Sequences in alignment have various lengths</source>
         <translation>Sequences in alignment have various lengths</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="341"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="346"/>
         <source>Alignment is empty</source>
         <translation>Alignment is empty</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="345"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="350"/>
         <source>Alignment is not nucleic</source>
         <translation>Alignment is not nucleic</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="348"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="353"/>
         <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="362"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="367"/>
         <source>Build Weight Matrix</source>
         <translation>Build Weight Matrix</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="373"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="378"/>
         <source>Input format error</source>
         <translation>Input format error</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="398"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="403"/>
         <source>Loading alignment</source>
         <translation>Loading alignment</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="431"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="436"/>
         <source>Wrong sequence alphabet</source>
         <translation>Wrong sequence alphabet</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="441"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="446"/>
         <source>No alignments or sequences found</source>
         <translation>No alignments or sequences found</translation>
     </message>
@@ -800,101 +800,111 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>U2::PWMBuildDialogController</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="92"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="88"/>
         <source>Select file with alignment</source>
         <translation>Select file with alignment</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="152"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="148"/>
         <source>Wrong sequence alphabet</source>
         <translation>Wrong sequence alphabet</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="188"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="289"/>
         <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="190"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="292"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="310"/>
+        <source>Frequency matrices</source>
+        <translation type="unfinished">Frequency matrices</translation>
+    </message>
+    <message>
+        <location filename="../src/PWMBuildDialogController.cpp" line="293"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="311"/>
+        <source>Weight matrices</source>
+        <translation type="unfinished">Weight matrices</translation>
+    </message>
+    <message>
+        <location filename="../src/PWMBuildDialogController.cpp" line="307"/>
         <source>Select file to save weight matrix to...</source>
         <translation>Select file to save weight matrix to...</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="217"/>
         <source>Overwrite existing file</source>
-        <translation>Overwrite existing file</translation>
+        <translation type="vanished">Overwrite existing file</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="218"/>
         <source>File with this name already exists.
 Do you want to write over this file?</source>
-        <translation>File with this name already exists.
+        <translation type="vanished">File with this name already exists.
 Do you want to write over this file?</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="240"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="210"/>
         <source>Illegal input file name</source>
         <translation>Illegal input file name</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="247"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="217"/>
         <source>Illegal output file name</source>
         <translation>Illegal output file name</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="277"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="247"/>
         <source>Counting frequency statistics</source>
         <translation>Counting frequency statistics</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="280"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="250"/>
         <source>Hide</source>
         <translation>Hide</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="73"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="281"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="69"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="251"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="125"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="121"/>
         <source>Could not detect the format of the file. Files must be in supported multiple alignment or sequence formats.</source>
         <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="144"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="140"/>
         <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="294"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="263"/>
         <source>Build finished with errors: %1</source>
         <translation>Build finished with errors: %1</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="297"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="266"/>
         <source>Build canceled</source>
         <translation>Build canceled</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="300"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="269"/>
         <source>Build finished successfuly</source>
         <translation>Build finished successfuly</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="72"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="303"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="68"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="272"/>
         <source>Start</source>
         <translation>Start</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="304"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="273"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="310"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="279"/>
         <source>Running state %1 progress %2%</source>
         <translation>Running state %1 progress %2%</translation>
     </message>
@@ -1014,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="453"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="460"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="458"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="465"/>
         <source>Build Weight Matrix</source>
         <translation>Build Weight Matrix</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="469"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="474"/>
         <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="481"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="486"/>
         <source>Sequences in alignment have various lengths</source>
         <translation>Sequences in alignment have various lengths</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="485"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="490"/>
         <source>Alignment is empty</source>
         <translation>Alignment is empty</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="489"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="494"/>
         <source>Alignment is not nucleic</source>
         <translation>Alignment is not nucleic</translation>
     </message>
@@ -1043,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="512"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="517"/>
         <source>Build Weight Matrix</source>
         <translation>Build Weight Matrix</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="523"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="528"/>
         <source>Input format error</source>
         <translation>Input format error</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="531"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="536"/>
         <source>Loading alignment</source>
         <translation>Loading alignment</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="563"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="568"/>
         <source>Wrong sequence alphabet</source>
         <translation>Wrong sequence alphabet</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="574"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="579"/>
         <source>No alignments or sequences found</source>
         <translation>No alignments or sequences found</translation>
     </message>
@@ -1347,7 +1357,7 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>ViewMatrixDialog</name>
     <message>
-        <location filename="../src/ui/ViewMatrixDialog.ui" line="20"/>
+        <location filename="../src/ViewMatrixDialog.ui" line="20"/>
         <source>View Matrix</source>
         <translation>View Matrix</translation>
     </message>
diff --git a/src/plugins/weight_matrix/transl/russian.ts b/src/plugins/weight_matrix/transl/russian.ts
index aec78f6..5cdc625 100644
--- a/src/plugins/weight_matrix/transl/russian.ts
+++ b/src/plugins/weight_matrix/transl/russian.ts
@@ -4,7 +4,7 @@
 <context>
     <name>MatrixAndLogoWidget</name>
     <message>
-        <location filename="../src/ui/MatrixAndLogoWidget.ui" line="20"/>
+        <location filename="../src/MatrixAndLogoWidget.ui" line="20"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
@@ -12,68 +12,68 @@
 <context>
     <name>PWMBuildDialog</name>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="14"/>
+        <location filename="../src/PWMBuildDialog.ui" line="14"/>
         <source>Build Weight or Frequency Matrix</source>
         <translation>Построить весовую или частотную матрицу</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="22"/>
+        <location filename="../src/PWMBuildDialog.ui" line="22"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="32"/>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="49"/>
+        <location filename="../src/PWMBuildDialog.ui" line="32"/>
+        <location filename="../src/PWMBuildDialog.ui" line="49"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="39"/>
+        <location filename="../src/PWMBuildDialog.ui" line="39"/>
         <source>Output file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="58"/>
+        <location filename="../src/PWMBuildDialog.ui" line="58"/>
         <source>Statistic options</source>
         <translation>Настройки статистики</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="64"/>
+        <location filename="../src/PWMBuildDialog.ui" line="64"/>
         <source>Statistic type:</source>
         <translation>Тип статистики:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="71"/>
+        <location filename="../src/PWMBuildDialog.ui" line="71"/>
         <source>Mononucleic</source>
         <translation>Мононуклеотидная</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="81"/>
+        <location filename="../src/PWMBuildDialog.ui" line="81"/>
         <source>Dinucleic</source>
         <translation>Динуклеотидная</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="91"/>
+        <location filename="../src/PWMBuildDialog.ui" line="91"/>
         <source>Matrix options</source>
         <translation>Настройки матрицы</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="99"/>
+        <location filename="../src/PWMBuildDialog.ui" line="99"/>
         <source>Matrix type:</source>
         <translation>Тип матрицы:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="106"/>
+        <location filename="../src/PWMBuildDialog.ui" line="106"/>
         <source>Frequency matrix</source>
         <translation>Частотная матрица</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="116"/>
+        <location filename="../src/PWMBuildDialog.ui" line="116"/>
         <source>Weight matrix</source>
         <translation>Весовая матрица</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMBuildDialog.ui" line="130"/>
+        <location filename="../src/PWMBuildDialog.ui" line="130"/>
         <source>Weight algorithm</source>
         <translation>Весовой алгоритм</translation>
     </message>
@@ -86,136 +86,136 @@
 <context>
     <name>PWMSearchDialog</name>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="20"/>
+        <location filename="../src/PWMSearchDialog.ui" line="20"/>
         <source>Weight Matrix Search</source>
         <translation>Поиск с весовыми матрицами</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="31"/>
+        <location filename="../src/PWMSearchDialog.ui" line="31"/>
         <source>Matrix:</source>
         <translation>Матрица:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="45"/>
+        <location filename="../src/PWMSearchDialog.ui" line="45"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="52"/>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="246"/>
+        <location filename="../src/PWMSearchDialog.ui" line="52"/>
+        <location filename="../src/PWMSearchDialog.ui" line="246"/>
         <source>Minimal score</source>
         <translation>Минимальный скор</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="55"/>
+        <location filename="../src/PWMSearchDialog.ui" line="55"/>
         <source>Score:</source>
         <translation>Скор:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="87"/>
+        <location filename="../src/PWMSearchDialog.ui" line="87"/>
         <source>85%</source>
         <translation>85%</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="98"/>
+        <location filename="../src/PWMSearchDialog.ui" line="98"/>
         <source>Search JASPAR Database</source>
         <translation>Поиск по базе JASPAR</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="125"/>
+        <location filename="../src/PWMSearchDialog.ui" line="125"/>
         <source>View matrix</source>
         <translation>Просмотр матрицы</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="203"/>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="206"/>
+        <location filename="../src/PWMSearchDialog.ui" line="203"/>
+        <location filename="../src/PWMSearchDialog.ui" line="206"/>
         <source>Reverse complement strand</source>
         <translation>Только обратно комплементарные</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="264"/>
+        <location filename="../src/PWMSearchDialog.ui" line="264"/>
         <source>Load list</source>
         <translation>Загрузить список</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="271"/>
+        <location filename="../src/PWMSearchDialog.ui" line="271"/>
         <source>Save list</source>
         <translation>Сохранить список</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="278"/>
+        <location filename="../src/PWMSearchDialog.ui" line="278"/>
         <source>Load folder</source>
         <translation>Загрузить папку</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="105"/>
+        <location filename="../src/PWMSearchDialog.ui" line="105"/>
         <source>Build new matrix</source>
         <translation>Построить новую матрицу</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="139"/>
+        <location filename="../src/PWMSearchDialog.ui" line="139"/>
         <source>Weight algorithm</source>
         <translation>Весовой алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="165"/>
+        <location filename="../src/PWMSearchDialog.ui" line="165"/>
         <source>Strands</source>
         <translation>Направление</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="171"/>
+        <location filename="../src/PWMSearchDialog.ui" line="171"/>
         <source>Both strands</source>
         <translation>Все</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="184"/>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="187"/>
+        <location filename="../src/PWMSearchDialog.ui" line="184"/>
+        <location filename="../src/PWMSearchDialog.ui" line="187"/>
         <source>Direct strand</source>
         <translation>Только прямые</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="306"/>
+        <location filename="../src/PWMSearchDialog.ui" line="306"/>
         <source>Range</source>
         <translation>Регион</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="241"/>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="311"/>
+        <location filename="../src/PWMSearchDialog.ui" line="241"/>
+        <location filename="../src/PWMSearchDialog.ui" line="311"/>
         <source>Matrix</source>
         <translation>Матрица</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="251"/>
+        <location filename="../src/PWMSearchDialog.ui" line="251"/>
         <source>Algorithm</source>
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="285"/>
+        <location filename="../src/PWMSearchDialog.ui" line="285"/>
         <source>Clear list</source>
         <translation>Очистить очередь</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="316"/>
+        <location filename="../src/PWMSearchDialog.ui" line="316"/>
         <source>Strand</source>
         <translation>Стренд</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="321"/>
+        <location filename="../src/PWMSearchDialog.ui" line="321"/>
         <source>Score</source>
         <translation>Скор</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="331"/>
+        <location filename="../src/PWMSearchDialog.ui" line="331"/>
         <source>Clear results</source>
         <translation>Сбросить результаты</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="338"/>
+        <location filename="../src/PWMSearchDialog.ui" line="338"/>
         <source>Save as annotations</source>
         <translation>Сохранить результаты</translation>
     </message>
     <message>
-        <location filename="../src/ui/PWMSearchDialog.ui" line="362"/>
+        <location filename="../src/PWMSearchDialog.ui" line="362"/>
         <source>Status</source>
         <translation>Статус</translation>
     </message>
@@ -267,27 +267,27 @@
 <context>
     <name>SearchJASPARDatabase</name>
     <message>
-        <location filename="../src/ui/SearchJASPARDatabase.ui" line="14"/>
+        <location filename="../src/SearchJASPARDatabase.ui" line="14"/>
         <source>Search JASPAR Database</source>
         <translation>Поиск по базе JASPAR</translation>
     </message>
     <message>
-        <location filename="../src/ui/SearchJASPARDatabase.ui" line="24"/>
+        <location filename="../src/SearchJASPARDatabase.ui" line="24"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/ui/SearchJASPARDatabase.ui" line="29"/>
+        <location filename="../src/SearchJASPARDatabase.ui" line="29"/>
         <source>ID</source>
         <translation>ID</translation>
     </message>
     <message>
-        <location filename="../src/ui/SearchJASPARDatabase.ui" line="34"/>
+        <location filename="../src/SearchJASPARDatabase.ui" line="34"/>
         <source>Class</source>
         <translation>Класс</translation>
     </message>
     <message>
-        <location filename="../src/ui/SearchJASPARDatabase.ui" line="39"/>
+        <location filename="../src/SearchJASPARDatabase.ui" line="39"/>
         <source>Family</source>
         <translation>Семейство</translation>
     </message>
@@ -295,22 +295,22 @@
 <context>
     <name>SetDefaultParametersDialog</name>
     <message>
-        <location filename="../src/ui/SetDefaultParametersDialog.ui" line="14"/>
+        <location filename="../src/SetDefaultParametersDialog.ui" line="14"/>
         <source>Set default parameters</source>
         <translation>Установить параметры по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/ui/SetDefaultParametersDialog.ui" line="25"/>
+        <location filename="../src/SetDefaultParametersDialog.ui" line="25"/>
         <source>Weight algorithm</source>
         <translation>Весовой алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/ui/SetDefaultParametersDialog.ui" line="35"/>
+        <location filename="../src/SetDefaultParametersDialog.ui" line="35"/>
         <source>Score:</source>
         <translation>Скор:</translation>
     </message>
     <message>
-        <location filename="../src/ui/SetDefaultParametersDialog.ui" line="66"/>
+        <location filename="../src/SetDefaultParametersDialog.ui" line="66"/>
         <source>85%</source>
         <translation>85%</translation>
     </message>
@@ -690,27 +690,27 @@
 <context>
     <name>U2::PFMatrixBuildTask</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="329"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="334"/>
         <source>Build Frequency Matrix</source>
         <translation>Построить частотную матрицу</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="337"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="342"/>
         <source>Sequences in alignment have various lengths</source>
         <translation>Последовательности в выравнивании имеют разную длину</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="341"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="346"/>
         <source>Alignment is empty</source>
         <translation>Выравнивание пусто</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="345"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="350"/>
         <source>Alignment is not nucleic</source>
         <translation>Неправильный алфавит выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="348"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="353"/>
         <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="362"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="367"/>
         <source>Build Weight Matrix</source>
         <translation>Построить весовую матрицу</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="373"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="378"/>
         <source>Input format error</source>
         <translation>Неверный входной формат</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="398"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="403"/>
         <source>Loading alignment</source>
         <translation>Загрузка выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="431"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="436"/>
         <source>Wrong sequence alphabet</source>
         <translation>Неверный алфавит последовательности</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="441"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="446"/>
         <source>No alignments or sequences found</source>
         <translation>Не выбрано ни одного выравнивания или последовательности</translation>
     </message>
@@ -800,101 +800,111 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>U2::PWMBuildDialogController</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="92"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="88"/>
         <source>Select file with alignment</source>
         <translation>Выберите файл с выравниванием</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="152"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="148"/>
         <source>Wrong sequence alphabet</source>
         <translation>Неверный алфавит последовательности</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="188"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="289"/>
         <source>Select file to save frequency matrix to...</source>
         <translation>Выберите файл для сохранения частотной матрицы...</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="190"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="292"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="310"/>
+        <source>Frequency matrices</source>
+        <translation type="unfinished">Частотные матрицы</translation>
+    </message>
+    <message>
+        <location filename="../src/PWMBuildDialogController.cpp" line="293"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="311"/>
+        <source>Weight matrices</source>
+        <translation type="unfinished">Весовые матрицы</translation>
+    </message>
+    <message>
+        <location filename="../src/PWMBuildDialogController.cpp" line="307"/>
         <source>Select file to save weight matrix to...</source>
         <translation>Выберите файл для сохранения весовой матрицы...</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="217"/>
         <source>Overwrite existing file</source>
-        <translation>Переписать существующий файл</translation>
+        <translation type="vanished">Переписать существующий файл</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="218"/>
         <source>File with this name already exists.
 Do you want to write over this file?</source>
-        <translation>Файл с таким именем уже существует.
+        <translation type="vanished">Файл с таким именем уже существует.
 Вы хотите переписать его?</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="240"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="210"/>
         <source>Illegal input file name</source>
         <translation>Неправильное имя входного файла</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="247"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="217"/>
         <source>Illegal output file name</source>
         <translation>Неправильное имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="277"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="247"/>
         <source>Counting frequency statistics</source>
         <translation>Подсчёт частотной статистики</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="280"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="250"/>
         <source>Hide</source>
         <translation>Скрыть</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="73"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="281"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="69"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="251"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="125"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="121"/>
         <source>Could not detect the format of the file. Files must be in supported multiple alignment or sequence formats.</source>
         <translation>Невозможно распознать формат файла. Фалы должны быть в одном из поддерживаемых форматов: в виде множественного выравнивания или в формате последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="144"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="140"/>
         <source>There are no sequences in the file.</source>
         <translation>В файле нет последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="294"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="263"/>
         <source>Build finished with errors: %1</source>
         <translation>Построение завершено с ошибками: %1</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="297"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="266"/>
         <source>Build canceled</source>
         <translation>Построение отменено</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="300"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="269"/>
         <source>Build finished successfuly</source>
         <translation>Построение завершено успешно</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="72"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="303"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="68"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="272"/>
         <source>Start</source>
         <translation>Старт</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="304"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="273"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="310"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="279"/>
         <source>Running state %1 progress %2%</source>
         <translation>Состояние выполнения %1 прогресс %2%</translation>
     </message>
@@ -1014,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="453"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="460"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="458"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="465"/>
         <source>Build Weight Matrix</source>
         <translation>Построить весовую матрицу</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="469"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="474"/>
         <source>Can't convert mononucleotide matrix to dinucleotide one</source>
         <translation>Невозможно преобразовать мононуклеотидную матрицу в динуклеотидную</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="481"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="486"/>
         <source>Sequences in alignment have various lengths</source>
         <translation>Последовательности в выравнивании имеют разную длину</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="485"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="490"/>
         <source>Alignment is empty</source>
         <translation>Выравнивание пусто</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="489"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="494"/>
         <source>Alignment is not nucleic</source>
         <translation>Неправильный алфавит выравнивания</translation>
     </message>
@@ -1043,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="512"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="517"/>
         <source>Build Weight Matrix</source>
         <translation>Построить весовую матрицу</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="523"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="528"/>
         <source>Input format error</source>
         <translation>Неверный входной формат</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="531"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="536"/>
         <source>Loading alignment</source>
         <translation>Загрузка выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="563"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="568"/>
         <source>Wrong sequence alphabet</source>
         <translation>Неверный алфавит последовательности</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="574"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="579"/>
         <source>No alignments or sequences found</source>
         <translation>Не выбрано ни одного выравнивания или последовательности</translation>
     </message>
@@ -1347,7 +1357,7 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>ViewMatrixDialog</name>
     <message>
-        <location filename="../src/ui/ViewMatrixDialog.ui" line="20"/>
+        <location filename="../src/ViewMatrixDialog.ui" line="20"/>
         <source>View Matrix</source>
         <translation>Просмотр матрицы</translation>
     </message>
diff --git a/src/plugins/weight_matrix/weight_matrix.pro b/src/plugins/weight_matrix/weight_matrix.pro
index abf6b17..223b08b 100644
--- a/src/plugins/weight_matrix/weight_matrix.pro
+++ b/src/plugins/weight_matrix/weight_matrix.pro
@@ -15,12 +15,12 @@ HEADERS += src/WeightMatrixPlugin.h \
            src/WeightMatrixWorkers.h \
            src/WMQuery.h
 
-FORMS += src/ui/PWMBuildDialog.ui \
-         src/ui/PWMSearchDialog.ui \
-         src/ui/SearchJASPARDatabase.ui \
-         src/ui/ViewMatrixDialog.ui \
-		 src/ui/MatrixAndLogoWidget.ui \
-         src/ui/SetDefaultParametersDialog.ui
+FORMS += src/PWMBuildDialog.ui \
+         src/PWMSearchDialog.ui \
+         src/SearchJASPARDatabase.ui \
+         src/ViewMatrixDialog.ui \
+		 src/MatrixAndLogoWidget.ui \
+         src/SetDefaultParametersDialog.ui
 
 SOURCES += src/WeightMatrixPlugin.cpp \
            src/PWMBuildDialogController.cpp \
diff --git a/src/plugins/workflow_designer/CMakeLists.txt b/src/plugins/workflow_designer/CMakeLists.txt
new file mode 100644
index 0000000..961e409
--- /dev/null
+++ b/src/plugins/workflow_designer/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME workflow_designer)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins/workflow_designer/src/ChooseItemDialog.h b/src/plugins/workflow_designer/src/ChooseItemDialog.h
index 7ac419e..216236d 100644
--- a/src/plugins/workflow_designer/src/ChooseItemDialog.h
+++ b/src/plugins/workflow_designer/src/ChooseItemDialog.h
@@ -24,7 +24,7 @@
 
 #include <U2Core/global.h>
 
-#include <ui/ui_ChooseItemDialog.h>
+#include <ui_ChooseItemDialog.h>
 #include <U2Lang/ActorModel.h>
 
 namespace U2 {
diff --git a/src/plugins/workflow_designer/src/ui/ChooseItemDialog.ui b/src/plugins/workflow_designer/src/ChooseItemDialog.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/ChooseItemDialog.ui
rename to src/plugins/workflow_designer/src/ChooseItemDialog.ui
diff --git a/src/plugins/workflow_designer/src/ui/CreateScriptBlockDialog.ui b/src/plugins/workflow_designer/src/CreateScriptBlockDialog.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/CreateScriptBlockDialog.ui
rename to src/plugins/workflow_designer/src/CreateScriptBlockDialog.ui
diff --git a/src/plugins/workflow_designer/src/CreateScriptWorker.cpp b/src/plugins/workflow_designer/src/CreateScriptWorker.cpp
index fde143d..d6cf5c5 100644
--- a/src/plugins/workflow_designer/src/CreateScriptWorker.cpp
+++ b/src/plugins/workflow_designer/src/CreateScriptWorker.cpp
@@ -358,7 +358,7 @@ private:
 
 CreateScriptElementDialog::CreateScriptElementDialog(QWidget *p, ActorPrototype* proto): QDialog(p), editing(false) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467915");
+    new HelpButton(this, buttonBox, "17470841");
 
     inputList->setModel(new CfgListModel());
     inputList->setItemDelegate(new ProxyDelegate());
diff --git a/src/plugins/workflow_designer/src/CreateScriptWorker.h b/src/plugins/workflow_designer/src/CreateScriptWorker.h
index 29d0a7b..8475f14 100644
--- a/src/plugins/workflow_designer/src/CreateScriptWorker.h
+++ b/src/plugins/workflow_designer/src/CreateScriptWorker.h
@@ -22,7 +22,7 @@
 #ifndef _U2_CREATE_SCRIPT_WORKER_DIALOG_H_
 #define _U2_CREATE_SCRIPT_WORKER_DIALOG_H_
 
-#include "ui/ui_CreateScriptBlockDialog.h"
+#include "ui_CreateScriptBlockDialog.h"
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Designer/DelegateEditors.h>
diff --git a/src/plugins/workflow_designer/src/DashboardsManagerDialog.cpp b/src/plugins/workflow_designer/src/DashboardsManagerDialog.cpp
index 9b18ed2..04bfa8d 100644
--- a/src/plugins/workflow_designer/src/DashboardsManagerDialog.cpp
+++ b/src/plugins/workflow_designer/src/DashboardsManagerDialog.cpp
@@ -45,7 +45,7 @@ DashboardsManagerDialog::DashboardsManagerDialog(ScanDashboardsDirTask *_task, Q
 : QDialog(parent), task(_task)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467913");
+    new HelpButton(this, buttonBox, "17470839");
 
     setupList();
 
diff --git a/src/plugins/workflow_designer/src/DashboardsManagerDialog.h b/src/plugins/workflow_designer/src/DashboardsManagerDialog.h
index d8fe56b..a6e737f 100644
--- a/src/plugins/workflow_designer/src/DashboardsManagerDialog.h
+++ b/src/plugins/workflow_designer/src/DashboardsManagerDialog.h
@@ -30,7 +30,7 @@ namespace U2 {
 
 class ScanDashboardsDirTask;
 
-class DashboardsManagerDialog : public QDialog, public Ui::DashboardsManagerDialog {
+class DashboardsManagerDialog : public QDialog, public Ui_DashboardsManagerDialog {
     Q_OBJECT
 public:
     DashboardsManagerDialog(ScanDashboardsDirTask *task, QWidget *parent);
diff --git a/src/plugins/workflow_designer/src/ui/DashboardsManagerDialog.ui b/src/plugins/workflow_designer/src/DashboardsManagerDialog.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/DashboardsManagerDialog.ui
rename to src/plugins/workflow_designer/src/DashboardsManagerDialog.ui
diff --git a/src/plugins/workflow_designer/src/ui/GalaxyConfigConfigurationDialog.ui b/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialog.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/GalaxyConfigConfigurationDialog.ui
rename to src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialog.ui
diff --git a/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.h b/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.h
index e945e95..2b99323 100644
--- a/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.h
+++ b/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.h
@@ -23,7 +23,7 @@
 #define _U2_GALAXY_CONFIG_CONFIGURATION_DIALOG_H_
 
 #include <U2Lang/Schema.h>
-#include <ui/ui_GalaxyConfigConfigurationDialog.h>
+#include <ui_GalaxyConfigConfigurationDialog.h>
 
 namespace U2 {
 namespace Workflow {
diff --git a/src/plugins/workflow_designer/src/ImportSchemaDialog.cpp b/src/plugins/workflow_designer/src/ImportSchemaDialog.cpp
index fdf96c2..944d896 100644
--- a/src/plugins/workflow_designer/src/ImportSchemaDialog.cpp
+++ b/src/plugins/workflow_designer/src/ImportSchemaDialog.cpp
@@ -31,7 +31,7 @@ namespace U2 {
 
 ImportSchemaDialog::ImportSchemaDialog(QWidget* p) : QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467927");
+    new HelpButton(this, buttonBox, "17470853");
 }
 
 void ImportSchemaDialog::accept() {
diff --git a/src/plugins/workflow_designer/src/ImportSchemaDialog.h b/src/plugins/workflow_designer/src/ImportSchemaDialog.h
index 63567dc..53b2838 100644
--- a/src/plugins/workflow_designer/src/ImportSchemaDialog.h
+++ b/src/plugins/workflow_designer/src/ImportSchemaDialog.h
@@ -24,7 +24,7 @@
 
 #include <U2Core/global.h>
 
-#include <ui/ui_ImportSchemaDialog.h>
+#include <ui_ImportSchemaDialog.h>
 
 namespace U2 {
 
diff --git a/src/plugins/workflow_designer/src/ui/ImportSchemaDialog.ui b/src/plugins/workflow_designer/src/ImportSchemaDialog.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/ImportSchemaDialog.ui
rename to src/plugins/workflow_designer/src/ImportSchemaDialog.ui
diff --git a/src/plugins/workflow_designer/src/ui/PaletteWidget.ui b/src/plugins/workflow_designer/src/PaletteWidget.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/PaletteWidget.ui
rename to src/plugins/workflow_designer/src/PaletteWidget.ui
diff --git a/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.cpp b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.cpp
index b839823..661c663 100644
--- a/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.cpp
+++ b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.cpp
@@ -39,7 +39,7 @@ namespace Workflow {
 PortAliasesConfigurationDialog::PortAliasesConfigurationDialog( const Schema & schema, QWidget * p )
 : QDialog(p), portNameMaxSz(0), currentRow(-1) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467927");
+    new HelpButton(this, buttonBox, "17470853");
 
     QPushButton* cancelPushButton = buttonBox->button(QDialogButtonBox::Cancel);
     QPushButton* okPushButton = buttonBox->button(QDialogButtonBox::Ok);
diff --git a/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.h b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.h
index d2cf70f..e3b0b8e 100644
--- a/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.h
+++ b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.h
@@ -24,7 +24,7 @@
 
 #include <U2Lang/Aliasing.h>
 #include <U2Lang/Schema.h>
-#include <ui/ui_PortAliasesConfigurationDialog.h>
+#include <ui_PortAliasesConfigurationDialog.h>
 
 namespace U2 {
 namespace Workflow {
diff --git a/src/plugins/workflow_designer/src/ui/PortAliasesConfigurationDialog.ui b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/PortAliasesConfigurationDialog.ui
rename to src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.ui
diff --git a/src/plugins/workflow_designer/src/ui/SchemaAliasesConfigurationDialog.ui b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialog.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/SchemaAliasesConfigurationDialog.ui
rename to src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialog.ui
diff --git a/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.cpp b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.cpp
index 5e202d8..33d6bf8 100644
--- a/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.cpp
+++ b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.cpp
@@ -37,7 +37,7 @@ namespace Workflow {
 SchemaAliasesConfigurationDialogImpl::SchemaAliasesConfigurationDialogImpl( const Schema & schema, QWidget * p )
 : QDialog(p), procNameMaxSz(0) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467927");
+    new HelpButton(this, buttonBox, "17470853");
 
     QPushButton* cancelPushButton = buttonBox->button(QDialogButtonBox::Cancel);
     QPushButton* okPushButton = buttonBox->button(QDialogButtonBox::Ok);
diff --git a/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.h b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.h
index 3985db4..3ad7edb 100644
--- a/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.h
+++ b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.h
@@ -23,7 +23,7 @@
 #define _U2_WCFG_SCHEMA_ALIASES_DIALOG_CONTROLLER_H_
 
 #include <U2Lang/Schema.h>
-#include <ui/ui_SchemaAliasesConfigurationDialog.h>
+#include <ui_SchemaAliasesConfigurationDialog.h>
 
 namespace U2 {
 namespace Workflow {
diff --git a/src/plugins/workflow_designer/src/StartupDialog.cpp b/src/plugins/workflow_designer/src/StartupDialog.cpp
index 12c86bc..1fef5f3 100644
--- a/src/plugins/workflow_designer/src/StartupDialog.cpp
+++ b/src/plugins/workflow_designer/src/StartupDialog.cpp
@@ -36,7 +36,7 @@ StartupDialog::StartupDialog(QWidget *parent)
 : QDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467884");
+    new HelpButton(this, buttonBox, "17470810");
 
     label->setStyleSheet(L10N::infoHintStyleSheet());
 
diff --git a/src/plugins/workflow_designer/src/StartupDialog.h b/src/plugins/workflow_designer/src/StartupDialog.h
index 3686fdc..701d672 100644
--- a/src/plugins/workflow_designer/src/StartupDialog.h
+++ b/src/plugins/workflow_designer/src/StartupDialog.h
@@ -24,7 +24,7 @@
 
 #include <U2Designer/OutputDirectoryWidget.h>
 
-#include <ui/ui_StartupDialog.h>
+#include <ui_StartupDialog.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QDialog>
@@ -35,7 +35,7 @@
 
 namespace U2 {
 
-class StartupDialog : public QDialog, public Ui::StartupDialog {
+class StartupDialog : public QDialog, public Ui_StartupDialog {
     Q_OBJECT
 public:
     StartupDialog(QWidget *parent);
diff --git a/src/plugins/workflow_designer/src/ui/StartupDialog.ui b/src/plugins/workflow_designer/src/StartupDialog.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/StartupDialog.ui
rename to src/plugins/workflow_designer/src/StartupDialog.ui
diff --git a/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp b/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp
index e4e358e..896b418 100644
--- a/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp
@@ -120,12 +120,7 @@ void WorkflowDesignerPlugin::processCMDLineOptions() {
 
     bool consoleMode = !AppContext::isGUIMode(); // only in console mode we run workflows by default. Otherwise we show them
     if (cmdlineReg->hasParameter( RUN_WORKFLOW ) || (consoleMode && !CMDLineRegistryUtils::getPureValues().isEmpty()) ) {
-        Task * t = NULL;
-        if( cmdlineReg->hasParameter(REMOTE_MACHINE) ) {
-            t = new WorkflowRemoteRunFromCMDLineTask();
-        } else {
-            t = new WorkflowRunFromCMDLineTask();
-        }
+        Task * t = new WorkflowRunFromCMDLineTask();
         connect(AppContext::getPluginSupport(), SIGNAL(si_allStartUpPluginsLoaded()), new TaskStarter(t), SLOT(registerTask()));
     }
     else{
diff --git a/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.h b/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.h
index 52f023f..8c96284 100644
--- a/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.h
+++ b/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.h
@@ -28,8 +28,6 @@
 
 #include <U2Gui/WelcomePageAction.h>
 
-#include <U2Remote/RemoteWorkflowRunTask.h>
-
 #include "SampleActionsManager.h"
 
 class QAction;
diff --git a/src/plugins/workflow_designer/src/WorkflowEditor.h b/src/plugins/workflow_designer/src/WorkflowEditor.h
index 71a8367..626d36a 100644
--- a/src/plugins/workflow_designer/src/WorkflowEditor.h
+++ b/src/plugins/workflow_designer/src/WorkflowEditor.h
@@ -26,7 +26,7 @@
 #include <U2Lang/Dataset.h>
 #include <U2Lang/Schema.h>
 #include <U2Lang/WorkflowDebugStatus.h>
-#include <ui/ui_WorkflowEditorWidget.h>
+#include <ui_WorkflowEditorWidget.h>
 
 #include <QtGui/QShortcutEvent>
 
diff --git a/src/plugins/workflow_designer/src/ui/WorkflowEditorWidget.ui b/src/plugins/workflow_designer/src/WorkflowEditorWidget.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/WorkflowEditorWidget.ui
rename to src/plugins/workflow_designer/src/WorkflowEditorWidget.ui
diff --git a/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp b/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp
index 4ca8924..bbe193e 100644
--- a/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp
@@ -25,28 +25,35 @@
 #include <U2Designer/DesignerUtils.h>
 
 #include <U2Gui/HelpButton.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include <U2Lang/WorkflowUtils.h>
 
+#include "WorkflowDocument.h"
 #include "WorkflowMetaDialog.h"
 
 namespace U2 {
 
-WorkflowMetaDialog::WorkflowMetaDialog(QWidget * p, const Metadata& meta): QDialog(p), meta(meta) {
+#define LAST_DIR QString("workflowview/lastdir")
+
+WorkflowMetaDialog::WorkflowMetaDialog(QWidget * p, const Metadata& meta)
+    : QDialog(p),
+      meta(meta),
+      saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467906");
+    new HelpButton(this, buttonBox, "17470832");
 
     cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
     okButton = buttonBox->button(QDialogButtonBox::Ok);
 
-    connect(browseButton, SIGNAL(clicked()), SLOT(sl_onBrowse()));
+    initSaveController();
+
     connect(cancelButton, SIGNAL(clicked()), SLOT(reject()));
     connect(okButton, SIGNAL(clicked()), SLOT(sl_onSave()));
     connect(urlEdit, SIGNAL(textChanged(const QString & )), SLOT(sl_onURLChanged(const QString& )));
     connect(urlEdit, SIGNAL(textEdited (const QString & )), SLOT(sl_onURLChanged(const QString& )));
 
-    urlEdit->setText(meta.url);
     okButton->setDisabled(meta.url.isEmpty());
     nameEdit->setText(meta.name);
     commentEdit->setText(meta.comment);
@@ -54,7 +61,7 @@ WorkflowMetaDialog::WorkflowMetaDialog(QWidget * p, const Metadata& meta): QDial
 
 void WorkflowMetaDialog::sl_onSave() {
     assert(!WorkflowUtils::WD_FILE_EXTENSIONS.isEmpty());
-    QString url = urlEdit->text();
+    QString url = saveController->getSaveFileName();
     bool endsWithWDExt = false;
     foreach( const QString & ext, WorkflowUtils::WD_FILE_EXTENSIONS ) {
         assert(!ext.isEmpty());
@@ -75,20 +82,20 @@ void WorkflowMetaDialog::sl_onURLChanged(const QString & text) {
     okButton->setDisabled(text.isEmpty());
 }
 
-#define LAST_DIR QString("workflowview/lastdir")
+void WorkflowMetaDialog::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = LAST_DIR;
+    config.defaultFileName = meta.url;
+    config.defaultFormatId = WorkflowDocFormat::FORMAT_ID;
+    config.fileDialogButton = browseButton;
+    config.fileNameEdit = urlEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save workflow to file");
+    config.rollFileName = false;
 
-void WorkflowMetaDialog::sl_onBrowse() {
-    QString url = urlEdit->text();
-    if (url.isEmpty()) {
-        url = AppContext::getSettings()->getValue(LAST_DIR, QString("")).toString();
-    }
-    QString filter = DesignerUtils::getSchemaFileFilter(false);
-    url = U2FileDialog::getSaveFileName(0, tr("Save workflow to file"), url, filter);
-    if (!url.isEmpty()) {
-        AppContext::getSettings()->setValue(LAST_DIR, QFileInfo(url).absoluteDir().absolutePath());
-        urlEdit->setText(url);
-    }
-}
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << WorkflowDocFormat::FORMAT_ID;
 
+    saveController = new SaveDocumentController(config, formats, this);
+}
 
 }//namespace
diff --git a/src/plugins/workflow_designer/src/WorkflowMetaDialog.h b/src/plugins/workflow_designer/src/WorkflowMetaDialog.h
index db6660e..661252a 100644
--- a/src/plugins/workflow_designer/src/WorkflowMetaDialog.h
+++ b/src/plugins/workflow_designer/src/WorkflowMetaDialog.h
@@ -22,13 +22,18 @@
 #ifndef _U2_WMETADIALOG_H_
 #define _U2_WMETADIALOG_H_
 
-#include "ui/ui_WorkflowMetaDialog.h"
+#include "ui_WorkflowMetaDialog.h"
 
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/Schema.h>
 
+
 namespace U2 {
+
+class SaveDocumentController;
+
 using namespace Workflow;
+
 class WorkflowMetaDialog : public QDialog, public Ui_WorkflowMetaDialog {
     Q_OBJECT
 
@@ -39,12 +44,13 @@ public:
     Workflow::Metadata meta;
 
 private slots:
-
-    void sl_onBrowse();
     void sl_onSave();
     void sl_onURLChanged(const QString & text);
 
 private:
+    void initSaveController();
+
+    SaveDocumentController *saveController;
     QPushButton* cancelButton;
     QPushButton* okButton;
 };
diff --git a/src/plugins/workflow_designer/src/ui/WorkflowMetaDialog.ui b/src/plugins/workflow_designer/src/WorkflowMetaDialog.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/WorkflowMetaDialog.ui
rename to src/plugins/workflow_designer/src/WorkflowMetaDialog.ui
diff --git a/src/plugins/workflow_designer/src/WorkflowPalette.cpp b/src/plugins/workflow_designer/src/WorkflowPalette.cpp
index 8a1ca58..a319214 100644
--- a/src/plugins/workflow_designer/src/WorkflowPalette.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowPalette.cpp
@@ -25,6 +25,7 @@
 #include <QButtonGroup>
 #include <QContextMenuEvent>
 #include <QDir>
+#include <QDrag>
 #include <QHeaderView>
 #include <QItemDelegate>
 #include <QMenu>
@@ -37,9 +38,8 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Log.h>
-#include <U2Core/Settings.h>
-
 #include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/Settings.h>
 
 #include <U2Lang/ActorPrototypeRegistry.h>
 #include <U2Lang/BaseActorCategories.h>
diff --git a/src/plugins/workflow_designer/src/WorkflowPalette.h b/src/plugins/workflow_designer/src/WorkflowPalette.h
index 914fb12..c3fb64b 100644
--- a/src/plugins/workflow_designer/src/WorkflowPalette.h
+++ b/src/plugins/workflow_designer/src/WorkflowPalette.h
@@ -25,7 +25,7 @@
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/ActorPrototypeRegistry.h>
 
-#include <ui/ui_PaletteWidget.h>
+#include <ui_PaletteWidget.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QAction>
diff --git a/src/plugins/workflow_designer/src/WorkflowSettingsController.cpp b/src/plugins/workflow_designer/src/WorkflowSettingsController.cpp
index 0cf4712..5c89896 100644
--- a/src/plugins/workflow_designer/src/WorkflowSettingsController.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowSettingsController.cpp
@@ -75,7 +75,7 @@ AppSettingsGUIPageWidget* WorkflowSettingsPageController::createWidget(AppSettin
     return r;
 }
 
-const QString WorkflowSettingsPageController::helpPageId = QString("17467524");
+const QString WorkflowSettingsPageController::helpPageId = QString("17470451");
 
 WorkflowSettingsPageWidget::WorkflowSettingsPageWidget(WorkflowSettingsPageController* ) {
     setupUi(this);
diff --git a/src/plugins/workflow_designer/src/WorkflowSettingsController.h b/src/plugins/workflow_designer/src/WorkflowSettingsController.h
index fce410f..3380734 100644
--- a/src/plugins/workflow_designer/src/WorkflowSettingsController.h
+++ b/src/plugins/workflow_designer/src/WorkflowSettingsController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_W_SETTINGS_GUI_CONTROLLER_H_
 #define _U2_W_SETTINGS_GUI_CONTROLLER_H_
 
-#include <ui/ui_WorkflowSettingsWidget.h>
+#include <ui_WorkflowSettingsWidget.h>
 
 #include <U2Gui/AppSettingsGUI.h>
 
diff --git a/src/plugins/workflow_designer/src/ui/WorkflowSettingsWidget.ui b/src/plugins/workflow_designer/src/WorkflowSettingsWidget.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/WorkflowSettingsWidget.ui
rename to src/plugins/workflow_designer/src/WorkflowSettingsWidget.ui
diff --git a/src/plugins/workflow_designer/src/WorkflowViewController.cpp b/src/plugins/workflow_designer/src/WorkflowViewController.cpp
index 209a9e4..5a61fa9 100644
--- a/src/plugins/workflow_designer/src/WorkflowViewController.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowViewController.cpp
@@ -91,11 +91,6 @@
 #include <U2Lang/WorkflowSettings.h>
 #include <U2Lang/WorkflowUtils.h>
 
-#include <U2Remote/DistributedComputingUtil.h>
-#include <U2Remote/RemoteMachine.h>
-#include <U2Remote/RemoteMachineMonitorDialogController.h>
-#include <U2Remote/RemoteWorkflowRunTask.h>
-
 #include "BreakpointManagerView.h"
 #include "ChooseItemDialog.h"
 #include "CreateScriptWorker.h"
@@ -1524,25 +1519,6 @@ void WorkflowView::localHostLaunch() {
     }
 }
 
-void WorkflowView::remoteLaunch() {
-    if( !sl_validate(false) ) {
-        return;
-    }
-    if (schema->getDomain().isEmpty() ) {
-        schema->setDomain(WorkflowEnv::getDomainRegistry()->getAllIds().value(0));
-    }
-
-    RemoteMachineMonitor * rmm = AppContext::getRemoteMachineMonitor();
-    assert( NULL != rmm );
-    RemoteMachineSettingsPtr settings = RemoteMachineMonitorDialogController::selectRemoteMachine(rmm, true);
-    if (settings == NULL) {
-        return;
-    }
-    assert(settings->getMachineType() == RemoteMachineType_RemoteService);
-    const Schema *s = getSchema();
-    AppContext::getTaskScheduler()->registerTopLevelTask(new RemoteWorkflowRunTask(settings, *s));
-}
-
 void WorkflowView::sl_launch() {
     if(!debugInfo->isPaused()) {
         localHostLaunch();
@@ -2248,7 +2224,7 @@ void WorkflowView::sl_loadScene() {
     QString filter = DesignerUtils::getSchemaFileFilter(true, true);
     QString url;
 #ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         url = U2FileDialog::getOpenFileName(0, tr("Open workflow file"), dir, filter, 0, QFileDialog::DontUseNativeDialog);
     }else
 #endif
diff --git a/src/plugins/workflow_designer/src/WorkflowViewController.h b/src/plugins/workflow_designer/src/WorkflowViewController.h
index 8d17c9b..54cacd9 100644
--- a/src/plugins/workflow_designer/src/WorkflowViewController.h
+++ b/src/plugins/workflow_designer/src/WorkflowViewController.h
@@ -260,7 +260,6 @@ private:
     void saveState();
     void recreateScene();
     void localHostLaunch();
-    void remoteLaunch();
     void rescale(bool updateGui = true);
 
     void toggleDebugActionsState(bool enable);
diff --git a/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.cpp b/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.cpp
index 927e261..5dcdf45 100644
--- a/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.cpp
+++ b/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.cpp
@@ -28,7 +28,6 @@
 #include <U2Core/CMDLineRegistry.h>
 #include <U2Core/CMDLineUtils.h>
 #include <U2Core/CMDLineCoreOptions.h>
-#include <U2Remote/SerializeUtils.h>
 
 #include <U2Lang/URLAttribute.h>
 #include <U2Lang/WorkflowEnv.h>
@@ -186,34 +185,4 @@ Task * WorkflowRunFromCMDLineTask::getWorkflowRunTask() const {
     return new WorkflowRunTask(*schema, remapping);
 }
 
-/*******************************************
-* WorkflowRemoteRunFromCMDLineTask
-*******************************************/
-WorkflowRemoteRunFromCMDLineTask::WorkflowRemoteRunFromCMDLineTask() {
-}
-
-Task * WorkflowRemoteRunFromCMDLineTask::getWorkflowRunTask() const {
-    assert(settings != NULL);
-    return new RemoteWorkflowRunTask( settings, *schema );
-}
-
-void WorkflowRemoteRunFromCMDLineTask::prepare()
-{
-    CMDLineRegistry * cmdlineReg = AppContext::getCMDLineRegistry();
-    assert(cmdlineReg != NULL);
-    QString filePath = cmdlineReg->getParameterValue(WorkflowDesignerPlugin::REMOTE_MACHINE);
-    if( filePath.isEmpty() ) {
-        stateInfo.setError(tr("%1 parameter expected, but not set").arg(WorkflowDesignerPlugin::REMOTE_MACHINE));
-        return;
-    }
-
-    settings = SerializeUtils::deserializeRemoteMachineSettingsFromFile(filePath);
-    if( settings == NULL ) {
-        stateInfo.setError(tr("Cannot read remote machine settings from %2").arg(filePath));
-        return;
-    }
-    assert(settings != NULL);
-
-}
-
 } // U2
diff --git a/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.h b/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.h
index 0e2346e..00ca863 100644
--- a/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.h
+++ b/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.h
@@ -23,7 +23,6 @@
 #define _U2_WORKFLOW_CMDLINE_TASKS_H_
 
 #include <U2Core/Task.h>
-#include <U2Remote/RemoteMachine.h>
 #include <U2Lang/WorkflowIOTasks.h>
 
 namespace U2 {
@@ -57,18 +56,6 @@ public:
     virtual Task * getWorkflowRunTask() const;
 }; // WorkflowRunFromCMDLineTask
 
-class WorkflowRemoteRunFromCMDLineTask : public WorkflowRunFromCMDLineBase {
-    Q_OBJECT
-public:
-    WorkflowRemoteRunFromCMDLineTask();
-    virtual void prepare();
-    virtual Task * getWorkflowRunTask() const;
-
-private:
-    RemoteMachineSettingsPtr settings;
-
-}; // WorkflowRemoteRunFromCMDLineTask
-
 } // U2
 
 #endif // _U2_WORKFLOW_CMDLINE_TASKS_H_
diff --git a/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.cpp b/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.cpp
index 9dbfea7..a61d304 100644
--- a/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.cpp
+++ b/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.cpp
@@ -1,23 +1,23 @@
 /**
-* 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.
-*/
+ * 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 <QMessageBox>
 #include <QWizardPage>
@@ -60,7 +60,7 @@ public:
 };
 
 CreateExternalProcessDialog::CreateExternalProcessDialog(QWidget *p, ExternalProcessConfig *cfg, bool lastPage)
-    : QWizard(p), initialCfg(NULL), lastPage(lastPage) {
+: QWizard(p), initialCfg(NULL), lastPage(lastPage) {
     ui.setupUi(this);
 
     new U2::HelpButton(this, button(QWizard::HelpButton), "2097199");
@@ -104,9 +104,9 @@ CreateExternalProcessDialog::CreateExternalProcessDialog(QWidget *p, ExternalPro
     editing = true;
     connect(ui.nameLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(sl_validateName(const QString &)));
     connect(ui.templateLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(sl_validateCmdLine(const QString &)));
-    connect(ui.inputTableView->model(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), SLOT(validateDataModel(const QModelIndex &, const QModelIndex &)));
-    connect(ui.outputTableView->model(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), SLOT(validateDataModel(const QModelIndex &, const QModelIndex &)));
-    connect(ui.attributesTableView->model(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), SLOT(validateAttributeModel(const QModelIndex &, const QModelIndex &)));
+    connect(ui.inputTableView->model(), SIGNAL(dataChanged ( const QModelIndex &, const QModelIndex &)), SLOT(validateDataModel(const QModelIndex &, const QModelIndex &)));
+    connect(ui.outputTableView->model(), SIGNAL(dataChanged ( const QModelIndex &, const QModelIndex &)), SLOT(validateDataModel(const QModelIndex &, const QModelIndex &)));
+    connect(ui.attributesTableView->model(), SIGNAL(dataChanged ( const QModelIndex &, const QModelIndex &)), SLOT(validateAttributeModel(const QModelIndex &, const QModelIndex &)));
     descr1 = ui.descr1TextEdit->toHtml();
     //validateNextPage();
 
@@ -126,13 +126,13 @@ void CreateExternalProcessDialog::init(ExternalProcessConfig *cfg) {
     clearModel(ui.inputTableView->model());
     foreach(const DataConfig &dataCfg, cfg->inputs) {
         ui.inputTableView->model()->insertRow(0, QModelIndex());
-        QModelIndex index = ui.inputTableView->model()->index(ind, 0);
+        QModelIndex index = ui.inputTableView->model()->index(ind,0);
         ui.inputTableView->model()->setData(index, dataCfg.attrName);
-        index = ui.inputTableView->model()->index(ind, 1);
+        index = ui.inputTableView->model()->index(ind,1);
         ui.inputTableView->model()->setData(index, dataCfg.type);
-        index = ui.inputTableView->model()->index(ind, 2);
+        index = ui.inputTableView->model()->index(ind,2);
         ui.inputTableView->model()->setData(index, dataCfg.format);
-        index = ui.inputTableView->model()->index(ind, 3);
+        index = ui.inputTableView->model()->index(ind,3);
         ui.inputTableView->model()->setData(index, dataCfg.description);
         ind++;
     }
@@ -141,13 +141,13 @@ void CreateExternalProcessDialog::init(ExternalProcessConfig *cfg) {
     clearModel(ui.outputTableView->model());
     foreach(const DataConfig &dataCfg, cfg->outputs) {
         ui.outputTableView->model()->insertRow(0, QModelIndex());
-        QModelIndex index = ui.outputTableView->model()->index(ind, 0);
+        QModelIndex index = ui.outputTableView->model()->index(ind,0);
         ui.outputTableView->model()->setData(index, dataCfg.attrName);
-        index = ui.outputTableView->model()->index(ind, 1);
+        index = ui.outputTableView->model()->index(ind,1);
         ui.outputTableView->model()->setData(index, dataCfg.type);
-        index = ui.outputTableView->model()->index(ind, 2);
+        index = ui.outputTableView->model()->index(ind,2);
         ui.outputTableView->model()->setData(index, dataCfg.format);
-        index = ui.outputTableView->model()->index(ind, 3);
+        index = ui.outputTableView->model()->index(ind,3);
         ui.outputTableView->model()->setData(index, dataCfg.description);
         ind++;
     }
@@ -156,11 +156,11 @@ void CreateExternalProcessDialog::init(ExternalProcessConfig *cfg) {
     clearModel(ui.attributesTableView->model());
     foreach(const AttributeConfig &attrCfg, cfg->attrs) {
         ui.attributesTableView->model()->insertRow(0, QModelIndex());
-        QModelIndex index = ui.attributesTableView->model()->index(ind, 0);
+        QModelIndex index = ui.attributesTableView->model()->index(ind,0);
         ui.attributesTableView->model()->setData(index, attrCfg.attrName);
-        index = ui.attributesTableView->model()->index(ind, 1);
+        index = ui.attributesTableView->model()->index(ind,1);
         ui.attributesTableView->model()->setData(index, attrCfg.type);
-        index = ui.attributesTableView->model()->index(ind, 2);
+        index = ui.attributesTableView->model()->index(ind,2);
         ui.attributesTableView->model()->setData(index, attrCfg.description);
         ind++;
     }
@@ -204,8 +204,8 @@ void CreateExternalProcessDialog::sl_deleteAttribute() {
     validateAttributeModel();
 }
 
-CreateExternalProcessDialog::CreateExternalProcessDialog(QWidget *p /* = NULL*/)
-    : QWizard(p), initialCfg(NULL), lastPage(false) {
+CreateExternalProcessDialog::CreateExternalProcessDialog( QWidget *p /* = NULL*/ )
+: QWizard(p), initialCfg(NULL), lastPage(false) {
     ui.setupUi(this);
 
     new U2::HelpButton(this, button(QWizard::HelpButton), "2097199");
@@ -228,9 +228,9 @@ CreateExternalProcessDialog::CreateExternalProcessDialog(QWidget *p /* = NULL*/)
     ui.outputTableView->setModel(new CfgExternalToolModel(false));
     ui.attributesTableView->setModel(new CfgExternalToolModelAttributes());
 
-    connect(ui.inputTableView->model(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), SLOT(validateDataModel(const QModelIndex &, const QModelIndex &)));
-    connect(ui.outputTableView->model(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), SLOT(validateDataModel(const QModelIndex &, const QModelIndex &)));
-    connect(ui.attributesTableView->model(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), SLOT(validateAttributeModel(const QModelIndex &, const QModelIndex &)));
+    connect(ui.inputTableView->model(), SIGNAL(dataChanged ( const QModelIndex &, const QModelIndex &)), SLOT(validateDataModel(const QModelIndex &, const QModelIndex &)));
+    connect(ui.outputTableView->model(), SIGNAL(dataChanged ( const QModelIndex &, const QModelIndex &)), SLOT(validateDataModel(const QModelIndex &, const QModelIndex &)));
+    connect(ui.attributesTableView->model(), SIGNAL(dataChanged ( const QModelIndex &, const QModelIndex &)), SLOT(validateAttributeModel(const QModelIndex &, const QModelIndex &)));
 
     ui.inputTableView->setItemDelegate(new ProxyDelegate());
     ui.outputTableView->setItemDelegate(new ProxyDelegate());
@@ -270,7 +270,7 @@ CreateExternalProcessDialog::~CreateExternalProcessDialog() {
 void CreateExternalProcessDialog::showEvent(QShowEvent *event) {
     QDialog::showEvent(event);
     if (lastPage) {
-        for (int i = 0; i<(pageIds().size() - 1); i++) {
+        for (int i=0; i<(pageIds().size()-1); i++) {
             next();
         }
     }
@@ -314,7 +314,7 @@ void CreateExternalProcessDialog::accept() {
 
     cfg->cmdLine = ui.templateLineEdit->text();
 
-    if (!validate()) {
+    if(!validate()) {
         return;
     }
 
@@ -337,7 +337,7 @@ void CreateExternalProcessDialog::accept() {
     QString str = HRSchemaSerializer::actor2String(cfg);
     QString dir = WorkflowSettings::getExternalToolDirectory();
     QDir d(dir);
-    if (!d.exists()) {
+    if(!d.exists()) {
         d.mkdir(dir);
     }
     cfg->filePath = dir + cfg->name + ".etc";
@@ -351,28 +351,28 @@ void CreateExternalProcessDialog::accept() {
 
 bool CreateExternalProcessDialog::validate() {
     QString title = tr("Create Element");
-    if (cfg->inputs.isEmpty() && cfg->outputs.isEmpty()) {
+    if(cfg->inputs.isEmpty() && cfg->outputs.isEmpty())  {
         QMessageBox::critical(this, title, tr("Please set the input/output data."));
         return false;
     }
 
-    if (cfg->cmdLine.isEmpty()) {
+    if(cfg->cmdLine.isEmpty()) {
         QMessageBox::critical(this, title, tr("Please set the command line to run external tool."));
         return false;
     }
 
-    if (cfg->name.isEmpty()) {
+    if(cfg->name.isEmpty()) {
         QMessageBox::critical(this, title, tr("Please set the name for the new element."));
         return false;
     }
 
     QRegExp invalidSymbols("[\\.,:;\\?]");
-    if (cfg->name.contains(invalidSymbols)) {
+    if(cfg->name.contains(invalidSymbols)) {
         QMessageBox::critical(this, title, tr("Invalid symbols in the element name."));
         return false;
     }
 
-    if (WorkflowEnv::getProtoRegistry()->getProto(cfg->name) && !editing) {
+    if(WorkflowEnv::getProtoRegistry()->getProto(cfg->name) && !editing) {
         QMessageBox::critical(this, title, tr("Element with this name already exists."));
         return false;
     }
@@ -380,46 +380,46 @@ bool CreateExternalProcessDialog::validate() {
     invalidSymbols = QRegExp("\\W");
     QStringList nameList;
     foreach(const DataConfig & dc, cfg->inputs) {
-        if (dc.attrName.isEmpty()) {
+        if(dc.attrName.isEmpty()) {
             QMessageBox::critical(this, title, tr("For one or more parameter name was not set."));
             return false;
         }
-        if (dc.attrName.contains(invalidSymbols)) {
+        if(dc.attrName.contains(invalidSymbols)) {
             QMessageBox::critical(this, title, tr("Invalid symbols in a name.").arg(dc.attrName));
             return false;
         }
         nameList << dc.attrName;
     }
     foreach(const DataConfig & dc, cfg->outputs) {
-        if (dc.attrName.isEmpty()) {
+        if(dc.attrName.isEmpty()) {
             QMessageBox::critical(this, title, tr("For one or more parameter name was not set."));
             return false;
         }
-        if (dc.attrName.contains(invalidSymbols)) {
+        if(dc.attrName.contains(invalidSymbols)) {
             QMessageBox::critical(this, title, tr("Invalid symbols in a name.").arg(dc.attrName));
             return false;
         }
         nameList << dc.attrName;
     }
     foreach(const AttributeConfig & ac, cfg->attrs) {
-        if (ac.attrName.isEmpty()) {
+        if(ac.attrName.isEmpty()) {
             QMessageBox::critical(this, title, tr("For one or more parameter name was not set."));
             return false;
         }
-        if (ac.attrName.contains(invalidSymbols)) {
+        if(ac.attrName.contains(invalidSymbols)) {
             QMessageBox::critical(this, title, tr("Invalid symbols in a name.").arg(ac.attrName));
             return false;
         }
         nameList << ac.attrName;
     }
 
-    if (nameList.removeDuplicates() > 0) {
+    if(nameList.removeDuplicates() > 0) {
         QMessageBox::critical(this, title, tr("The same name of element parameters was found"));
         return false;
     }
 
     foreach(const QString &str, nameList) {
-        if (!cfg->cmdLine.contains("$" + str)) {
+        if(!cfg->cmdLine.contains("$" + str)) {
             QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox(this);
             msgBox->setWindowTitle(title);
             msgBox->setText(tr("You don't use parameter %1 in template string. Continue?").arg(str));
@@ -427,7 +427,7 @@ bool CreateExternalProcessDialog::validate() {
             QPushButton *cancel = msgBox->addButton(tr("Abort"), QMessageBox::ActionRole);
             msgBox->exec();
             CHECK(!msgBox.isNull(), false);
-            if (msgBox->clickedButton() == cancel) {
+            if(msgBox->clickedButton() == cancel) {
                 return false;
             }
         }
@@ -453,31 +453,31 @@ void CreateExternalProcessDialog::sl_generateTemplateString() {
     int i = 0;
     foreach(AttributeItem *item, aModel->getItems()) {
         i++;
-        cmd += " -p" + QString::number(i) + " $" + item->getName();
+        cmd +=  " -p" + QString::number(i) + " $" + item->getName();
     }
 
     ui.templateLineEdit->setText(cmd);
 }
 
 bool CreateExternalProcessDialog::validateProcessName(const QString &name, QString &error) {
-    if (name.isEmpty()) {
+    if(name.isEmpty()) {
         error = tr("Please set the name for the new element.");
         return false;
     }
 
     QRegExp spaces("\\s");
-    if (name.contains(spaces)) {
+    if(name.contains(spaces)) {
         error = tr("Spaces in the element name.");
         return false;
     }
 
     QRegExp invalidSymbols("\\W");
-    if (name.contains(invalidSymbols)) {
+    if(name.contains(invalidSymbols)) {
         error = tr("Invalid symbols in the element name.");
         return false;
     }
 
-    if (WorkflowEnv::getProtoRegistry()->getProto(name) && !editing) {
+    if(WorkflowEnv::getProtoRegistry()->getProto(name) && !editing) {
         error = tr("Element with this name already exists.");
         return false;
     }
@@ -486,7 +486,7 @@ bool CreateExternalProcessDialog::validateProcessName(const QString &name, QStri
 }
 
 static QString statusTemplate = QString("<font color=\"%1\">%2</font>");
-void CreateExternalProcessDialog::sl_validateName(const QString &text) {
+void CreateExternalProcessDialog::sl_validateName( const QString &text) {
     QString error;
     bool res = validateProcessName(text, error);
 
@@ -500,15 +500,15 @@ void CreateExternalProcessDialog::sl_validateName(const QString &text) {
     ui.descr1TextEdit->setText(descr1.arg(statusStr));
 }
 
-void CreateExternalProcessDialog::sl_validateCmdLine(const QString & text) {
-    if (text.isEmpty()) {
+void CreateExternalProcessDialog::sl_validateCmdLine( const QString & text) {
+    if(text.isEmpty()) {
         button(QWizard::FinishButton)->setEnabled(false);
     } else {
         button(QWizard::FinishButton)->setEnabled(true);
     }
 }
 
-void CreateExternalProcessDialog::validateDataModel(const QModelIndex &, const QModelIndex &) {
+void CreateExternalProcessDialog::validateDataModel(const QModelIndex &, const QModelIndex & ) {
     bool res = true;
     CfgExternalToolModel *model;
 
@@ -516,11 +516,11 @@ void CreateExternalProcessDialog::validateDataModel(const QModelIndex &, const Q
     QStringList nameList;
     model = static_cast<CfgExternalToolModel*>(ui.inputTableView->model());
     foreach(CfgExternalToolItem *item, model->getItems()) {
-        if (item->itemData.attrName.isEmpty()) {
+        if(item->itemData.attrName.isEmpty()) {
             //QMessageBox::critical(this, title, tr("For one or more parameter name was not set."));
             res = false;
         }
-        if (item->itemData.attrName.contains(invalidSymbols)) {
+        if(item->itemData.attrName.contains(invalidSymbols)) {
             //QMessageBox::critical(this, title, tr("Invalid symbols in a name.").arg(dc.attrName));
             res = false;
         }
@@ -529,11 +529,11 @@ void CreateExternalProcessDialog::validateDataModel(const QModelIndex &, const Q
 
     model = static_cast<CfgExternalToolModel*>(ui.outputTableView->model());
     foreach(CfgExternalToolItem *item, model->getItems()) {
-        if (item->itemData.attrName.isEmpty()) {
+        if(item->itemData.attrName.isEmpty()) {
             //QMessageBox::critical(this, title, tr("For one or more parameter name was not set."));
             res = false;
         }
-        if (item->itemData.attrName.contains(invalidSymbols)) {
+        if(item->itemData.attrName.contains(invalidSymbols)) {
             //QMessageBox::critical(this, title, tr("Invalid symbols in a name.").arg(dc.attrName));
             res = false;
         }
@@ -542,18 +542,18 @@ void CreateExternalProcessDialog::validateDataModel(const QModelIndex &, const Q
 
 
 
-    if (nameList.removeDuplicates() > 0) {
+    if(nameList.removeDuplicates() > 0) {
         //QMessageBox::critical(this, title, tr("The same name of element parameters was found"));
         res = false;
     }
 
-    if (nameList.isEmpty()) {
+    if(nameList.isEmpty()) {
         res = false;
     }
     button(QWizard::NextButton)->setEnabled(res);
 }
 
-void CreateExternalProcessDialog::validateAttributeModel(const QModelIndex &, const QModelIndex &) {
+void CreateExternalProcessDialog::validateAttributeModel(const QModelIndex &, const QModelIndex & ) {
     bool res = true;
     CfgExternalToolModel *model;
 
@@ -561,11 +561,11 @@ void CreateExternalProcessDialog::validateAttributeModel(const QModelIndex &, co
     QStringList nameList;
     model = static_cast<CfgExternalToolModel*>(ui.inputTableView->model());
     foreach(CfgExternalToolItem *item, model->getItems()) {
-        if (item->itemData.attrName.isEmpty()) {
+        if(item->itemData.attrName.isEmpty()) {
             //QMessageBox::critical(this, title, tr("For one or more parameter name was not set."));
             res = false;
         }
-        if (item->itemData.attrName.contains(invalidSymbols)) {
+        if(item->itemData.attrName.contains(invalidSymbols)) {
             //QMessageBox::critical(this, title, tr("Invalid symbols in a name.").arg(dc.attrName));
             res = false;
         }
@@ -574,11 +574,11 @@ void CreateExternalProcessDialog::validateAttributeModel(const QModelIndex &, co
 
     model = static_cast<CfgExternalToolModel*>(ui.outputTableView->model());
     foreach(CfgExternalToolItem *item, model->getItems()) {
-        if (item->itemData.attrName.isEmpty()) {
+        if(item->itemData.attrName.isEmpty()) {
             //QMessageBox::critical(this, title, tr("For one or more parameter name was not set."));
             res = false;
         }
-        if (item->itemData.attrName.contains(invalidSymbols)) {
+        if(item->itemData.attrName.contains(invalidSymbols)) {
             //QMessageBox::critical(this, title, tr("Invalid symbols in a name.").arg(dc.attrName));
             res = false;
         }
@@ -587,11 +587,11 @@ void CreateExternalProcessDialog::validateAttributeModel(const QModelIndex &, co
 
     CfgExternalToolModelAttributes *aModel = static_cast<CfgExternalToolModelAttributes*>(ui.attributesTableView->model());
     foreach(AttributeItem *item, aModel->getItems()) {
-        if (item->getName().isEmpty()) {
+        if(item->getName().isEmpty()) {
             //QMessageBox::critical(this, title, tr("For one or more parameter name was not set."));
             res = false;
         }
-        if (item->getName().contains(invalidSymbols)) {
+        if(item->getName().contains(invalidSymbols)) {
             //QMessageBox::critical(this, title, tr("Invalid symbols in a name.").arg(ac.attrName));
             res = false;
         }
@@ -599,7 +599,7 @@ void CreateExternalProcessDialog::validateAttributeModel(const QModelIndex &, co
     }
 
 
-    if (nameList.removeDuplicates() > 0) {
+    if(nameList.removeDuplicates() > 0) {
         //QMessageBox::critical(this, title, tr("The same name of element parameters was found"));
         res = false;
     }
@@ -608,32 +608,32 @@ void CreateExternalProcessDialog::validateAttributeModel(const QModelIndex &, co
 
 void CreateExternalProcessDialog::validateNextPage() {
     int id = currentId();
-    switch (id) {
-    case 0:
-        sl_validateName(ui.nameLineEdit->text());
-        break;
-    case 1:
-        validateDataModel();
-        break;
-    case 2:
-        validateAttributeModel();
-    case 3:
-        sl_validateCmdLine(ui.templateLineEdit->text());
+    switch(id) {
+        case 0:
+            sl_validateName(ui.nameLineEdit->text());
+            break;
+        case 1:
+            validateDataModel();
+            break;
+        case 2:
+            validateAttributeModel();
+        case 3:
+            sl_validateCmdLine(ui.templateLineEdit->text());
     }
 }
 
 void CreateExternalProcessDialog::sl_validatePage(int id) {
-    switch (id) {
-    case 0:
-        sl_validateName(ui.nameLineEdit->text());
-        break;
-    case 1:
-        validateDataModel();
-        break;
-    case 2:
-        validateAttributeModel();
-    case 3:
-        sl_validateCmdLine(ui.templateLineEdit->text());
+    switch(id) {
+        case 0:
+            sl_validateName(ui.nameLineEdit->text());
+            break;
+        case 1:
+            validateDataModel();
+            break;
+        case 2:
+            validateAttributeModel();
+        case 3:
+            sl_validateCmdLine(ui.templateLineEdit->text());
     }
 }
 
diff --git a/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.h b/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.h
index c54162c..d57499b 100644
--- a/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.h
+++ b/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.h
@@ -22,7 +22,7 @@
 #ifndef CreateExternalProcessDialog_h__
 #define CreateExternalProcessDialog_h__
 
-#include "ui/ui_ExternalProcessWorkerDialog.h"
+#include "ui_ExternalProcessWorkerDialog.h"
 #include <U2Lang/Datatype.h>
 #include <U2Lang/Attribute.h>
 #include <U2Lang/ConfigurationEditor.h>
@@ -67,7 +67,7 @@ protected:
     virtual void showEvent(QShowEvent *event);
 
 private:
-    Ui::CreateExternalProcessWorkerDialog ui;
+    Ui_CreateExternalProcessWorkerDialog ui;
     ExternalProcessConfig *initialCfg;
     ExternalProcessConfig *cfg;
     bool editing;
diff --git a/src/plugins/workflow_designer/src/ui/ExternalProcessWorkerDialog.ui b/src/plugins/workflow_designer/src/library/ExternalProcessWorkerDialog.ui
similarity index 100%
rename from src/plugins/workflow_designer/src/ui/ExternalProcessWorkerDialog.ui
rename to src/plugins/workflow_designer/src/library/ExternalProcessWorkerDialog.ui
diff --git a/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.cpp b/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.cpp
index 53ddece..92c27f0 100644
--- a/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.cpp
@@ -184,7 +184,7 @@ void ExtractAssemblyCoverageWorkerFactory::init() {
         const Descriptor thresholdDesc(THRESHOLD_ATTR_ID,
                                        ExtractAssemblyCoverageWorker::tr("Threshold"),
                                        ExtractAssemblyCoverageWorker::tr("The minimum coverage value to export."));
-        attrs << new Attribute(BaseAttributes::URL_OUT_ATTRIBUTE(), BaseTypes::STRING_TYPE(), true, "assembly_coverage" + ExportCoverageSettings::BEDGRAPH_EXTENSION);
+        attrs << new Attribute(BaseAttributes::URL_OUT_ATTRIBUTE(), BaseTypes::STRING_TYPE(), true, "assembly_coverage." + ExportCoverageSettings::BEDGRAPH_EXTENSION);
 
         Attribute *formatAttribute = new Attribute(formatDesc, BaseTypes::NUM_TYPE(), false, ExportCoverageSettings::Bedgraph);
         formatAttribute->addRelation(new ExtractAssemblyCoverageFileExtensionRelation(BaseAttributes::URL_OUT_ATTRIBUTE().getId()));
@@ -199,10 +199,10 @@ void ExtractAssemblyCoverageWorkerFactory::init() {
 
     QMap<QString, PropertyDelegate*> delegates;
     {
-        const QString filter = FormatUtils::prepareFileFilter(ExportCoverageSettings::BEDGRAPH, QStringList() << ExportCoverageSettings::BEDGRAPH_EXTENSION.mid(1), true);
+        const QString filter = FormatUtils::prepareFileFilter(ExportCoverageSettings::BEDGRAPH, QStringList() << ExportCoverageSettings::BEDGRAPH_EXTENSION, true);
         DelegateTags tags;
         tags.set("filter", filter);
-        tags.set("extensions", QStringList() << ExportCoverageSettings::BEDGRAPH_EXTENSION.mid(1) << ExportCoverageSettings::BEDGRAPH_EXTENSION.mid(1) + ExportCoverageSettings::COMPRESSED_EXTENSION);
+        tags.set("extensions", QStringList() << ExportCoverageSettings::BEDGRAPH_EXTENSION << ExportCoverageSettings::BEDGRAPH_EXTENSION + ExportCoverageSettings::COMPRESSED_EXTENSION);
         delegates[BaseAttributes::URL_OUT_ATTRIBUTE().getId()] = new URLDelegate(tags, "", false, false, true, NULL);
 
         QVariantMap formats;
@@ -291,7 +291,7 @@ QVariant ExtractAssemblyCoverageFileExtensionRelation::getAffectResult(const QVa
         urlStr.chop(ExportCoverageSettings::COMPRESSED_EXTENSION.size());
     }
 
-    const QString currentExtension = urlStr.mid(urlStr.lastIndexOf('.'));
+    const QString currentExtension = urlStr.mid(urlStr.lastIndexOf('.') + 1);
     if (currentExtension == ExportCoverageSettings::HISTOGRAM_EXTENSION ||
             currentExtension == ExportCoverageSettings::PER_BASE_EXTENSION ||
             currentExtension == ExportCoverageSettings::BEDGRAPH_EXTENSION) {
@@ -305,8 +305,8 @@ QVariant ExtractAssemblyCoverageFileExtensionRelation::getAffectResult(const QVa
 void ExtractAssemblyCoverageFileExtensionRelation::updateDelegateTags(const QVariant &influencingValue, DelegateTags *dependentTags) const {
     const ExportCoverageSettings::Format newFormat = static_cast<ExportCoverageSettings::Format>(influencingValue.toInt());
     if (NULL != dependentTags) {
-        dependentTags->set("extensions", QStringList() << ExportCoverageSettings::getFormatExtension(newFormat).mid(1) << ExportCoverageSettings::getFormatExtension(newFormat).mid(1) + ExportCoverageSettings::COMPRESSED_EXTENSION);
-        const QString filter = FormatUtils::prepareFileFilter(ExportCoverageSettings::getFormat(newFormat) + " coverage files", QStringList() << ExportCoverageSettings::getFormatExtension(newFormat).mid(1));
+        dependentTags->set("extensions", QStringList() << ExportCoverageSettings::getFormatExtension(newFormat) << ExportCoverageSettings::getFormatExtension(newFormat) + ExportCoverageSettings::COMPRESSED_EXTENSION);
+        const QString filter = FormatUtils::prepareFileFilter(ExportCoverageSettings::getFormat(newFormat) + " coverage files", QStringList() << ExportCoverageSettings::getFormatExtension(newFormat));
         dependentTags->set("filter", filter);
     }
 }
diff --git a/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.cpp b/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.cpp
index 4e6d808..8c8deaf 100644
--- a/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.cpp
+++ b/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.cpp
@@ -159,7 +159,7 @@ static bool isConvertingFormat(const DocumentFormatId &formatId) {
 void ReadAssemblyTask::prepare() {
     QFileInfo fi(url);
     if(!fi.exists()){
-        stateInfo.setError(tr("File '%1' not exists").arg(url));
+        stateInfo.setError(tr("File '%1' does not exist").arg(url));
         return;
     }
 
diff --git a/src/plugins/workflow_designer/transl/english.ts b/src/plugins/workflow_designer/transl/english.ts
index 4520efc..27725be 100644
--- a/src/plugins/workflow_designer/transl/english.ts
+++ b/src/plugins/workflow_designer/transl/english.ts
@@ -4,12 +4,12 @@
 <context>
     <name>ChooseItemDialog</name>
     <message>
-        <location filename="../src/ui/ChooseItemDialog.ui" line="14"/>
+        <location filename="../src/ChooseItemDialog.ui" line="14"/>
         <source>Choose task type</source>
         <translation>Choose task type</translation>
     </message>
     <message>
-        <location filename="../src/ui/ChooseItemDialog.ui" line="20"/>
+        <location filename="../src/ChooseItemDialog.ui" line="20"/>
         <source>Add a task of the following type:</source>
         <translation>Add a task of the following type:</translation>
     </message>
@@ -17,36 +17,26 @@
 <context>
     <name>CreateExternalProcessWorkerDialog</name>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="14"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="14"/>
         <source>Create Element with Command Line Tool</source>
         <translation>Create Element with Command Line Tool</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="49"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="49"/>
         <source>Element description</source>
         <translation>Element description</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="65"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="65"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="77"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="77"/>
         <source>Description</source>
         <translation>Description</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="84"/>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="349"/>
-        <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></source>
-        <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; }
@@ -75,7 +65,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-family:'MS Shell Dlg 2'; font-size:12pt;">Input and output data for external tool. Name is  a command line parameter for input/output data in external tool. Set data type and format in which external tool reads/writes input/output data. You also can set description for workflow designer. Each input data will be [...]
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="36"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="36"/>
         <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; }
@@ -86,7 +76,17 @@ p, li { white-space: pre-wrap; }
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="105"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="84"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="349"/>
+        <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="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="105"/>
         <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; }
@@ -95,34 +95,34 @@ p, li { white-space: pre-wrap; }
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="116"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="116"/>
         <source>Input data</source>
         <translation>Input data</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="151"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="151"/>
         <source>Add input</source>
         <translation>Add input</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="158"/>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="209"/>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="281"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="158"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="209"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="281"/>
         <source>Delete</source>
         <translation>Delete</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="167"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="167"/>
         <source>Output data</source>
         <translation>Output data</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="202"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="202"/>
         <source>Add output</source>
         <translation>Add output</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="228"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="228"/>
         <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; }
@@ -131,15 +131,6 @@ p, li { white-space: pre-wrap; }
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="300"/>
-        <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Execution string and element's description. To substitute input, output data or parameter, use it's name with prefix $ in execution string. You can set parameterized description for new element(description that appears not in property editor but on element itself). In parameterized description you  [...]
-        <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; }
@@ -164,27 +155,36 @@ 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:12pt;">Execution string and element's description. To substitute input, output data or parameter, use it's name with prefix $ in execution string. You can set parameterized description for new element(description that appears not in property editor but on element its [...]
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="239"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="239"/>
         <source>Parameters</source>
         <translation>Parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="274"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="274"/>
         <source>Add attribute</source>
         <translation>Add attribute</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="311"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="300"/>
+        <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Execution string and element's description. To substitute input, output data or parameter, use it's name with prefix $ in execution string. You can set parameterized description for new element(description that appears not in property editor but on element itself). In parameterized description you  [...]
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="311"/>
         <source>Command line template</source>
         <translation>Command line template</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="330"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="330"/>
         <source>Execution string</source>
         <translation>Execution string</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="342"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="342"/>
         <source>Parameterized description</source>
         <translation>Parameterized description</translation>
     </message>
@@ -192,27 +192,27 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>CreateScriptBlockDialog</name>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="14"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="14"/>
         <source>Create Element with Script</source>
         <translation>Create Element with Script</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="22"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="22"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="29"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="29"/>
         <source>ScriptBlock</source>
         <translation>ScriptBlock</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="38"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="38"/>
         <source>Description</source>
         <translation>Description</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="45"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="45"/>
         <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; }
@@ -225,62 +225,62 @@ 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;">Evaluates user's script</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="58"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="58"/>
         <source>Input Port</source>
         <translation>Input Port</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="65"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="65"/>
         <source>Add input slot</source>
         <translation>Add input slot</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="72"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="72"/>
         <source>Delete input slot</source>
         <translation>Delete input slot</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="79"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="79"/>
         <source>Output Port</source>
         <translation>Output Port</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="86"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="86"/>
         <source>Add output slot</source>
         <translation>Add output slot</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="93"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="93"/>
         <source>Delete output slot</source>
         <translation>Delete output slot</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="110"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="110"/>
         <source>Attributes</source>
         <translation>Attributes</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="117"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="117"/>
         <source>Add Attribute</source>
         <translation>Add Attribute</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="124"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="124"/>
         <source>Delete Attribute</source>
         <translation>Delete Attribute</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="149"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="149"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="164"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="182"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="182"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -288,32 +288,32 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>DashboardsManagerDialog</name>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="14"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="14"/>
         <source>Dashboards Manager</source>
         <translation>Dashboards Manager</translation>
     </message>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="20"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="20"/>
         <source>Check dashboards to show:</source>
         <translation>Check dashboards to show:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="60"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="60"/>
         <source>Check selected</source>
         <translation>Check selected</translation>
     </message>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="67"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="67"/>
         <source>Uncheck selected</source>
         <translation>Uncheck selected</translation>
     </message>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="74"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="74"/>
         <source>Remove selected</source>
         <translation>Remove selected</translation>
     </message>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="81"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="81"/>
         <source>Select all</source>
         <translation>Select all</translation>
     </message>
@@ -321,39 +321,39 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>GalaxyConfigConfigurationDialog</name>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="14"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="14"/>
         <source>Create Galaxy config</source>
         <translation>Create Galaxy config</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="54"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="54"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="67"/>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="164"/>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="177"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="67"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="164"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="177"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="80"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="80"/>
         <source>UGENE directory</source>
         <translation>UGENE directory</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="93"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="93"/>
         <source>Destination directory</source>
         <translation>Destination directory</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="106"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="106"/>
         <source>Galaxy directory</source>
         <translation>Galaxy directory</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="119"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="119"/>
         <source>Create</source>
         <translation>Create</translation>
     </message>
@@ -361,12 +361,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ImportSchemaDialog</name>
     <message>
-        <location filename="../src/ui/ImportSchemaDialog.ui" line="14"/>
+        <location filename="../src/ImportSchemaDialog.ui" line="14"/>
         <source>Import Workflow to Element</source>
         <translation>Import Workflow to Element</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportSchemaDialog.ui" line="22"/>
+        <location filename="../src/ImportSchemaDialog.ui" line="22"/>
         <source>Input new element name:</source>
         <translation>Input new element name:</translation>
     </message>
@@ -374,7 +374,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PaletteWidget</name>
     <message>
-        <location filename="../src/ui/PaletteWidget.ui" line="14"/>
+        <location filename="../src/PaletteWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
@@ -382,42 +382,42 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PortAliasesConfigurationDialog</name>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="17"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="17"/>
         <source>Configure Port and Slot Aliases</source>
         <translation>Configure Port and Slot Aliases</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="37"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="37"/>
         <source>Workflow ports</source>
         <translation>Workflow ports</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="72"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="72"/>
         <source>Available slot</source>
         <translation>Available slot</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="77"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="77"/>
         <source>Slot alias</source>
         <translation>Slot alias</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="86"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="86"/>
         <source>Port alias</source>
         <translation>Port alias</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="95"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="95"/>
         <source>Port type:</source>
         <translation>Port type:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="109"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="109"/>
         <source>Port alias:</source>
         <translation>Port alias:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="119"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="119"/>
         <source>Port description:</source>
         <translation>Port description:</translation>
     </message>
@@ -532,52 +532,52 @@ p, li { white-space: pre-wrap; }
         <translation>The format %1 does not support annotations</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="141"/>
+        <location filename="../src/WorkflowViewController.cpp" line="136"/>
         <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="144"/>
+        <location filename="../src/WorkflowViewController.cpp" line="139"/>
         <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="146"/>
+        <location filename="../src/WorkflowViewController.cpp" line="141"/>
         <source>Breakpoints</source>
         <translation>Breakpoints</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="152"/>
+        <location filename="../src/WorkflowViewController.cpp" line="147"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="204"/>
+        <location filename="../src/WorkflowViewController.cpp" line="199"/>
         <source>Element style</source>
         <translation>Element style</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="215"/>
+        <location filename="../src/WorkflowViewController.cpp" line="210"/>
         <source>Scripting mode</source>
         <translation>Scripting mode</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="913"/>
+        <location filename="../src/WorkflowViewController.cpp" line="908"/>
         <source>Can not create the directory: </source>
         <translation>Can not create the directory: </translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="919"/>
+        <location filename="../src/WorkflowViewController.cpp" line="914"/>
         <source>The file '%1' already exists</source>
         <translation>The file '%1' already exists</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="924"/>
+        <location filename="../src/WorkflowViewController.cpp" line="919"/>
         <source>Can not copy the file here: </source>
         <translation>Can not copy the file here: </translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1482"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1477"/>
         <source>Run workflow</source>
         <translation>Run workflow</translation>
     </message>
@@ -648,27 +648,27 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>SchemaAliasesConfigurationDialog</name>
     <message>
-        <location filename="../src/ui/SchemaAliasesConfigurationDialog.ui" line="34"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="34"/>
         <source>Workflow elements</source>
         <translation>Workflow elements</translation>
     </message>
     <message>
-        <location filename="../src/ui/SchemaAliasesConfigurationDialog.ui" line="17"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="17"/>
         <source>Configure Parameter Aliases</source>
         <translation>Configure Parameter Aliases</translation>
     </message>
     <message>
-        <location filename="../src/ui/SchemaAliasesConfigurationDialog.ui" line="69"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="69"/>
         <source>Schema parameter</source>
         <translation>Schema parameter</translation>
     </message>
     <message>
-        <location filename="../src/ui/SchemaAliasesConfigurationDialog.ui" line="74"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="74"/>
         <source>Parameter alias</source>
         <translation>Parameter alias</translation>
     </message>
     <message>
-        <location filename="../src/ui/SchemaAliasesConfigurationDialog.ui" line="79"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="79"/>
         <source>Help message</source>
         <translation>Help message</translation>
     </message>
@@ -676,17 +676,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>StartupDialog</name>
     <message>
-        <location filename="../src/ui/StartupDialog.ui" line="14"/>
+        <location filename="../src/StartupDialog.ui" line="14"/>
         <source>Choose Output Directory</source>
         <translation>Choose Output Directory</translation>
     </message>
     <message>
-        <location filename="../src/ui/StartupDialog.ui" line="20"/>
+        <location filename="../src/StartupDialog.ui" line="20"/>
         <source>Output Directory</source>
         <translation>Output Directory</translation>
     </message>
     <message>
-        <location filename="../src/ui/StartupDialog.ui" line="33"/>
+        <location filename="../src/StartupDialog.ui" line="33"/>
         <source>Note: you can change this option in the UGENE Application Settings
 (Settings > Preferences > Workflow Designer)</source>
         <translation>Note: you can change this option in the UGENE Application Settings
@@ -813,91 +813,91 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CreateExternalProcessDialog</name>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="313"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="323"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="314"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="324"/>
         <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="343"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="353"/>
         <source>Create Element</source>
         <translation>Create Element</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="345"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="355"/>
         <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="350"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="360"/>
         <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="355"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="454"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="365"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="464"/>
         <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="361"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="466"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="371"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="476"/>
         <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="366"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="471"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="376"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="481"/>
         <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="374"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="385"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="396"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="384"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="395"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="406"/>
         <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="378"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="389"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="400"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="388"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="399"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="410"/>
         <source>Invalid symbols in a name.</source>
         <translation>Invalid symbols in a name.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="407"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="417"/>
         <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="415"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="425"/>
         <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="416"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="426"/>
         <source>Continue</source>
         <translation>Continue</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="417"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="427"/>
         <source>Abort</source>
         <translation>Abort</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="460"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="470"/>
         <source>Spaces in the element name.</source>
         <translation>Spaces in the element name.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="486"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="496"/>
         <source>It is the correct name</source>
         <translation>It is the correct name</translation>
     </message>
@@ -984,12 +984,12 @@ You could also reset the dialog to the initial state.</translation>
 <context>
     <name>U2::DashboardManagerHelper</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="244"/>
+        <location filename="../src/WorkflowViewController.cpp" line="239"/>
         <source>No Dashboards Found</source>
         <translation>No Dashboards Found</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="245"/>
+        <location filename="../src/WorkflowViewController.cpp" line="240"/>
         <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>
@@ -5500,9 +5500,13 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
         <translation>Read assembly from %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ReadAssemblyTask.cpp" line="162"/>
         <source>File '%1' not exists</source>
-        <translation>File '%1' not exists</translation>
+        <translation type="vanished">File '%1' not exists</translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/ReadAssemblyTask.cpp" line="162"/>
+        <source>File '%1' does not exist</source>
+        <translation type="unfinished">File '%1' does not exist</translation>
     </message>
     <message>
         <location filename="../src/tasks/ReadAssemblyTask.cpp" line="198"/>
@@ -5664,57 +5668,57 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
         <translation>Workflow Designer allows to create complex computational workflows.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="171"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="166"/>
         <source>Runs the specified task.</source>
         <translation>Runs the specified task.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="172"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="167"/>
         <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="174"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="169"/>
         <source><task_name> [<task_parameter>=value ...]</source>
         <translation><task_name> [<task_parameter>=value ...]</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="180"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="175"/>
         <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="181"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="176"/>
         <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="183"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="178"/>
         <source><actor_name>.<port_name>.<slot_name></source>
         <translation><actor_name>.<port_name>.<slot_name></translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="188"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="183"/>
         <source>Creates new Galaxy tool config.</source>
         <translation>Creates new Galaxy tool config.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="189"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="184"/>
         <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="191"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="186"/>
         <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="211"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="206"/>
         <source>Close Designer</source>
         <translation>Close Designer</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="220"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="215"/>
         <source>Close Designer canceled</source>
         <translation>Close Designer canceled</translation>
     </message>
@@ -5722,7 +5726,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowDesignerService</name>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="229"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="224"/>
         <source>Workflow Designer</source>
         <translation>Workflow Designer</translation>
     </message>
@@ -5731,87 +5735,87 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
         <translation type="vanished">New workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="269"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="264"/>
         <source>Workflow Designer...</source>
         <translation>Workflow Designer...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="279"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="274"/>
         <source>New workflow...</source>
         <translation>New workflow...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="310"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="305"/>
         <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="343"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="338"/>
         <source>Reads quality control and alignment</source>
         <translation>Reads quality control and alignment</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="345"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="340"/>
         <source>Reads quality control...</source>
         <translation>Reads quality control...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="347"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="342"/>
         <source>Raw DNA-Seq data processing</source>
         <translation>Raw DNA-Seq data processing</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="349"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="344"/>
         <source>Variant calling</source>
         <translation>Variant calling</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="351"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="346"/>
         <source>Annotate variants and predict effects</source>
         <translation>Annotate variants and predict effects</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="353"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="348"/>
         <source>Raw RNA-Seq data processing</source>
         <translation>Raw RNA-Seq data processing</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="355"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="350"/>
         <source>RNA-Seq data analysis</source>
         <translation>RNA-Seq data analysis</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="357"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="352"/>
         <source>Extract transcript sequences</source>
         <translation>Extract transcript sequences</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="359"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="354"/>
         <source>Raw ChIP-Seq data processing</source>
         <translation>Raw ChIP-Seq data processing</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="361"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="356"/>
         <source>ChIP-Seq data analysis</source>
         <translation>ChIP-Seq data analysis</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="363"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="358"/>
         <source>ChIP-Seq coverage</source>
         <translation>ChIP-Seq coverage</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="365"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="360"/>
         <source>Extract coverage from assemblies</source>
         <translation>Extract coverage from assemblies</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="367"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="362"/>
         <source>Extract consensus from assemblies</source>
         <translation>Extract consensus from assemblies</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="370"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="365"/>
         <source>Remote NCBI BLAST</source>
         <translation>Remote NCBI BLAST</translation>
     </message>
@@ -5926,7 +5930,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowMetaDialog</name>
     <message>
-        <location filename="../src/WorkflowMetaDialog.cpp" line="86"/>
+        <location filename="../src/WorkflowMetaDialog.cpp" line="93"/>
         <source>Save workflow to file</source>
         <translation>Save workflow to file</translation>
     </message>
@@ -5962,50 +5966,48 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowRemoteRunFromCMDLineTask</name>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="206"/>
         <source>%1 parameter expected, but not set</source>
-        <translation>%1 parameter expected, but not set</translation>
+        <translation type="vanished">%1 parameter expected, but not set</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="212"/>
         <source>Cannot read remote machine settings from %2</source>
-        <translation>Cannot read remote machine settings from %2</translation>
+        <translation type="vanished">Cannot read remote machine settings from %2</translation>
     </message>
 </context>
 <context>
     <name>U2::WorkflowRunFromCMDLineBase</name>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="50"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="49"/>
         <source>Workflow run from cmdline</source>
         <translation>Workflow run from cmdline</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="72"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="71"/>
         <source>no task to run</source>
         <translation>no task to run</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="89"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="88"/>
         <source>Cannot find workflow: %1</source>
         <translation>Cannot find workflow: %1</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="118"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="117"/>
         <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="124"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="123"/>
         <source>actor parameter '%1' not found</source>
         <translation>actor parameter '%1' not found</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="131"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="130"/>
         <source>cannot parse value from '%1'</source>
         <translation>cannot parse value from '%1'</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="139"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="138"/>
         <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>
@@ -6013,22 +6015,22 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowScene</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2559"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2535"/>
         <source>Open document(s)</source>
         <translation>Open document(s)</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2719"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2695"/>
         <source>Workflow Designer</source>
         <translation>Workflow Designer</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2719"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2695"/>
         <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="2801"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2777"/>
         <source>Drop an element from the palette here</source>
         <translation>Drop an element from the palette here</translation>
     </message>
@@ -6072,7 +6074,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowUtils</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="932"/>
+        <location filename="../src/WorkflowViewController.cpp" line="927"/>
         <source>UGENE workflow element</source>
         <translation type="unfinished">UGENE workflow element</translation>
     </message>
@@ -6091,361 +6093,361 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/WorkflowSettingsController.cpp" line="82"/>
-        <location filename="../src/WorkflowViewController.cpp" line="786"/>
+        <location filename="../src/WorkflowViewController.cpp" line="781"/>
         <source>Minimal</source>
         <translation>Minimal</translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsController.cpp" line="83"/>
-        <location filename="../src/WorkflowViewController.cpp" line="792"/>
+        <location filename="../src/WorkflowViewController.cpp" line="787"/>
         <source>Extended</source>
         <translation>Extended</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="330"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2356"/>
+        <location filename="../src/WorkflowViewController.cpp" line="325"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2332"/>
         <source>Workflow Designer</source>
         <translation>Workflow Designer</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="399"/>
+        <location filename="../src/WorkflowViewController.cpp" line="394"/>
         <source>Elements</source>
         <translation>Elements</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="402"/>
+        <location filename="../src/WorkflowViewController.cpp" line="397"/>
         <source>Samples</source>
         <translation>Samples</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="418"/>
-        <location filename="../src/WorkflowViewController.cpp" line="554"/>
+        <location filename="../src/WorkflowViewController.cpp" line="413"/>
+        <location filename="../src/WorkflowViewController.cpp" line="549"/>
         <source>Error list</source>
         <translation>Error list</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="446"/>
-        <location filename="../src/WorkflowViewController.cpp" line="448"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2279"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2281"/>
+        <location filename="../src/WorkflowViewController.cpp" line="441"/>
+        <location filename="../src/WorkflowViewController.cpp" line="443"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2255"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2257"/>
         <source>Warning!</source>
         <translation>Warning!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="451"/>
+        <location filename="../src/WorkflowViewController.cpp" line="446"/>
         <source>Undefined workflow format for %1</source>
         <translation>Undefined workflow format for %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="451"/>
+        <location filename="../src/WorkflowViewController.cpp" line="446"/>
         <source>file</source>
         <translation>file</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="616"/>
+        <location filename="../src/WorkflowViewController.cpp" line="611"/>
         <source>&Run workflow</source>
         <translation>&Run workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="623"/>
+        <location filename="../src/WorkflowViewController.cpp" line="618"/>
         <source>S&top workflow</source>
         <translation>S&top workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="630"/>
+        <location filename="../src/WorkflowViewController.cpp" line="625"/>
         <source>&Validate workflow</source>
         <translation>&Validate workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="636"/>
+        <location filename="../src/WorkflowViewController.cpp" line="631"/>
         <source>&Estimate workflow</source>
         <translation>&Estimate workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="642"/>
+        <location filename="../src/WorkflowViewController.cpp" line="637"/>
         <source>&Pause workflow</source>
         <translation>&Pause workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="650"/>
+        <location filename="../src/WorkflowViewController.cpp" line="645"/>
         <source>&Next step</source>
         <translation>&Next step</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="660"/>
+        <location filename="../src/WorkflowViewController.cpp" line="655"/>
         <source>Process one &message</source>
         <translation>Process one &message</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="670"/>
+        <location filename="../src/WorkflowViewController.cpp" line="665"/>
         <source>&New workflow...</source>
         <translation>&New workflow...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="676"/>
+        <location filename="../src/WorkflowViewController.cpp" line="671"/>
         <source>&Save workflow</source>
         <translation>&Save workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="683"/>
+        <location filename="../src/WorkflowViewController.cpp" line="678"/>
         <source>&Save workflow as...</source>
         <translation>&Save workflow as...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="688"/>
+        <location filename="../src/WorkflowViewController.cpp" line="683"/>
         <source>Show wizard</source>
         <translation>Show wizard</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="706"/>
+        <location filename="../src/WorkflowViewController.cpp" line="701"/>
         <source>&Load workflow</source>
         <translation>&Load workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="717"/>
+        <location filename="../src/WorkflowViewController.cpp" line="712"/>
         <source>Delete</source>
         <translation>Delete</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="742"/>
+        <location filename="../src/WorkflowViewController.cpp" line="737"/>
         <source>Set parameter aliases...</source>
         <translation>Set parameter aliases...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="747"/>
+        <location filename="../src/WorkflowViewController.cpp" line="742"/>
         <source>Set port and slot aliases...</source>
         <translation>Set port and slot aliases...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="820"/>
+        <location filename="../src/WorkflowViewController.cpp" line="815"/>
         <source>Create element with script...</source>
         <translation>Create element with script...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="825"/>
+        <location filename="../src/WorkflowViewController.cpp" line="820"/>
         <source>Edit script of the element...</source>
         <translation>Edit script of the element...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="831"/>
+        <location filename="../src/WorkflowViewController.cpp" line="826"/>
         <source>Create element with command line tool...</source>
         <translation>Create element with command line tool...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="842"/>
+        <location filename="../src/WorkflowViewController.cpp" line="837"/>
         <source>Add element with command line tool...</source>
         <translation>Add element with command line tool...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="937"/>
-        <location filename="../src/WorkflowViewController.cpp" line="962"/>
+        <location filename="../src/WorkflowViewController.cpp" line="932"/>
+        <location filename="../src/WorkflowViewController.cpp" line="957"/>
         <source>Can't load element.</source>
         <translation>Can't load element.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1318"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1379"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1313"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1374"/>
         <source>Element style</source>
         <translation>Element style</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1372"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1367"/>
         <source>Element properties</source>
         <translation>Element properties</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2293"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2269"/>
         <source>New workflow</source>
         <translation type="unfinished">New workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="760"/>
+        <location filename="../src/WorkflowViewController.cpp" line="755"/>
         <source>Select all elements</source>
         <translation>Select all elements</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="712"/>
+        <location filename="../src/WorkflowViewController.cpp" line="707"/>
         <source>&Export workflow as image</source>
         <translation>&Export workflow as image</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="721"/>
+        <location filename="../src/WorkflowViewController.cpp" line="716"/>
         <source>Dashboards manager</source>
         <translation>Dashboards manager</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="755"/>
+        <location filename="../src/WorkflowViewController.cpp" line="750"/>
         <source>Create Galaxy tool config...</source>
         <translation>Create Galaxy tool config...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="763"/>
+        <location filename="../src/WorkflowViewController.cpp" line="758"/>
         <source>&Copy</source>
         <translation>&Copy</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="771"/>
+        <location filename="../src/WorkflowViewController.cpp" line="766"/>
         <source>Cu&t</source>
         <translation>Cu&t</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="778"/>
+        <location filename="../src/WorkflowViewController.cpp" line="773"/>
         <source>&Paste</source>
         <translation>&Paste</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="800"/>
+        <location filename="../src/WorkflowViewController.cpp" line="795"/>
         <source>Hide scripting options</source>
         <translation>Hide scripting options</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="807"/>
+        <location filename="../src/WorkflowViewController.cpp" line="802"/>
         <source>Show scripting options</source>
         <translation>Show scripting options</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="815"/>
+        <location filename="../src/WorkflowViewController.cpp" line="810"/>
         <source>Unlock Scene</source>
         <translation>Unlock Scene</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1324"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1319"/>
         <source>Scripting mode</source>
         <translation>Scripting mode</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="933"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1285"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1389"/>
+        <location filename="../src/WorkflowViewController.cpp" line="928"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1280"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1384"/>
         <source>Add element</source>
         <translation>Add element</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="751"/>
+        <location filename="../src/WorkflowViewController.cpp" line="746"/>
         <source>Import workflow to element...</source>
         <translation>Import workflow to element...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="836"/>
+        <location filename="../src/WorkflowViewController.cpp" line="831"/>
         <source>Edit configuration...</source>
         <translation>Edit configuration...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1002"/>
+        <location filename="../src/WorkflowViewController.cpp" line="997"/>
         <source>Can't remove element %1</source>
         <translation>Can't remove element %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1424"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1419"/>
         <source>Empty workflow!</source>
         <translation>Empty workflow!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1424"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1419"/>
         <source>Nothing to run: empty workflow</source>
         <translation>Nothing to run: empty workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1449"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1444"/>
         <source>Workflow cannot be executed</source>
         <translation>Workflow cannot be executed</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1450"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1445"/>
         <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="1453"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1448"/>
         <source>Workflow is valid.
 </source>
         <translation>Workflow is valid.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1455"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1450"/>
         <source>Well done!</source>
         <translation>Well done!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1457"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1452"/>
         <source>There are non-critical warnings.</source>
         <translation>There are non-critical warnings.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1459"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1454"/>
         <source>Workflow is valid</source>
         <translation>Workflow is valid</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1720"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1753"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1696"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1729"/>
         <source>Bad input!</source>
         <translation>Bad input!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1720"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1696"/>
         <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="1823"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1799"/>
         <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="1825"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1853"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1801"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1829"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1753"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1729"/>
         <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="1767"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1743"/>
         <source>Internal error!</source>
         <translation>Internal error!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1767"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1743"/>
         <source>Can not create Galaxy config</source>
         <translation>Can not create Galaxy config</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1869"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1845"/>
         <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="2159"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2135"/>
         <source>File is not found: %1</source>
         <translation>File is not found: %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2197"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2173"/>
         <source>Show dashboard</source>
         <translation>Show dashboard</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2206"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2182"/>
         <source>Show workflow</source>
         <translation>Show workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2252"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2255"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2228"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2231"/>
         <source>Open workflow file</source>
         <translation>Open workflow file</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2325"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2301"/>
         <source>Workflow Designer - %1</source>
         <translation>Workflow Designer - %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2357"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2333"/>
         <source>The workflow has been modified.
 Do you want to save changes?</source>
         <translation>The workflow has been modified.
@@ -6468,32 +6470,32 @@ Do you want to save changes?</translation>
 <context>
     <name>WorkflowEditorWidget</name>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="14"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="65"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="65"/>
         <source>Property Editor</source>
         <translation>Property Editor</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="97"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="97"/>
         <source>TextLabel</source>
         <translation>TextLabel</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="179"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="179"/>
         <source>Parameters</source>
         <translation>Parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="273"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="273"/>
         <source>Input data</source>
         <translation>Input data</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="320"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="320"/>
         <source>Output data</source>
         <translation>Output data</translation>
     </message>
@@ -6501,27 +6503,27 @@ Do you want to save changes?</translation>
 <context>
     <name>WorkflowMetaDialog</name>
     <message>
-        <location filename="../src/ui/WorkflowMetaDialog.ui" line="20"/>
+        <location filename="../src/WorkflowMetaDialog.ui" line="20"/>
         <source>Workflow Properties</source>
         <translation>Workflow Properties</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowMetaDialog.ui" line="28"/>
+        <location filename="../src/WorkflowMetaDialog.ui" line="28"/>
         <source>Location</source>
         <translation>Location</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowMetaDialog.ui" line="38"/>
+        <location filename="../src/WorkflowMetaDialog.ui" line="38"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowMetaDialog.ui" line="45"/>
+        <location filename="../src/WorkflowMetaDialog.ui" line="45"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowMetaDialog.ui" line="55"/>
+        <location filename="../src/WorkflowMetaDialog.ui" line="55"/>
         <source>Comment</source>
         <translation>Comment</translation>
     </message>
@@ -6529,77 +6531,77 @@ Do you want to save changes?</translation>
 <context>
     <name>WorkflowSettingsWidget</name>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="14"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="14"/>
         <source>Resource settings</source>
         <translation>Resource settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="20"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="20"/>
         <source>Scene appearance</source>
         <translation>Scene appearance</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="42"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="42"/>
         <source>Element style</source>
         <translation>Element style</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="56"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="56"/>
         <source>Element font</source>
         <translation>Element font</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="70"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="70"/>
         <source>Element background color</source>
         <translation>Element background color</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="105"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="105"/>
         <source>Enable debugger</source>
         <translation>Enable debugger</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="124"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="124"/>
         <source>Use directory for output files</source>
         <translation>Use directory for output files</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="145"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="145"/>
         <source>Directory for custom elements with scripts</source>
         <translation>Directory for custom elements with scripts</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="166"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="187"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="187"/>
         <source>Directory for included schema elements</source>
         <translation>Directory for included schema elements</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="33"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="33"/>
         <source>Snap to grid</source>
         <translation>Snap to grid</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="26"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="26"/>
         <source>Show grid</source>
         <translation>Show grid</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="92"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="92"/>
         <source>Runtime settings</source>
         <translation>Runtime settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="98"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="98"/>
         <source>Track running progress</source>
         <translation>Track running progress</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="118"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="118"/>
         <source>Directories</source>
         <translation>Directories</translation>
     </message>
diff --git a/src/plugins/workflow_designer/transl/russian.ts b/src/plugins/workflow_designer/transl/russian.ts
index 154c1d8..c0a765e 100644
--- a/src/plugins/workflow_designer/transl/russian.ts
+++ b/src/plugins/workflow_designer/transl/russian.ts
@@ -4,12 +4,12 @@
 <context>
     <name>ChooseItemDialog</name>
     <message>
-        <location filename="../src/ui/ChooseItemDialog.ui" line="14"/>
+        <location filename="../src/ChooseItemDialog.ui" line="14"/>
         <source>Choose task type</source>
         <translation>Выбор типа задачи</translation>
     </message>
     <message>
-        <location filename="../src/ui/ChooseItemDialog.ui" line="20"/>
+        <location filename="../src/ChooseItemDialog.ui" line="20"/>
         <source>Add a task of the following type:</source>
         <translation>Возможно создать объект для следующих задач:</translation>
     </message>
@@ -17,78 +17,48 @@
 <context>
     <name>CreateExternalProcessWorkerDialog</name>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="14"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="14"/>
         <source>Create Element with Command Line Tool</source>
         <translation>Создать элемент при помощи инструмента командной строки</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="49"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="49"/>
         <source>Element description</source>
         <translation>Описание элемента</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="65"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="65"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="77"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="77"/>
         <source>Description</source>
         <translation>Описание</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="84"/>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="349"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="36"/>
         <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></source>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Name and description for new workflow element.</span></p>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">Status:</span></p>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">%1</span></p></body></html></source>
         <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:'Lucida Grande'; font-size:13pt; 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:12pt;">Name and description for new workflow element.</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:12pt; font-weight:600;">Status:</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:12pt; font-weight:600;">%1</span></p></body></html></source>
-        <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></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; font-weight:600;">Status:</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; font-weight:600;">%1</span></p></body></html></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:'Lucida Grande'; font-size:13pt; 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:12pt;">Input and output data for external tool. Name is  a command line parameter for input/output data in external tool. Set data type and format in which external tool reads/writes input/output data. You also can set description for workflow designer. Each input data will be [...]
-        <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;">Входные и выходные данные для внешнего инструмента. Имя это параметр командной строки для входных/выходных данных во внешнем инструменте. Установите тип и формат данных в которых внешний инструмент будет читать/писать входные/выходные данные. Вы также можете задать описание для дизайнера вычислительн [...]
-    </message>
-    <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="36"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="84"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="349"/>
         <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Name and description for new workflow element.</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">Status:</span></p>
-<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt; font-weight:600;">%1</span></p></body></html></source>
+<p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="105"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="105"/>
         <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; }
@@ -97,34 +67,34 @@ p, li { white-space: pre-wrap; }
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="116"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="116"/>
         <source>Input data</source>
         <translation>Входные данные</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="151"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="151"/>
         <source>Add input</source>
         <translation>Добавить входные данные</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="158"/>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="209"/>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="281"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="158"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="209"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="281"/>
         <source>Delete</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="167"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="167"/>
         <source>Output data</source>
         <translation>Выходные данные</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="202"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="202"/>
         <source>Add output</source>
         <translation>Добавить выходные данные</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="228"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="228"/>
         <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; }
@@ -133,63 +103,36 @@ p, li { white-space: pre-wrap; }
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="300"/>
-        <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:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Execution string and element's description. To substitute input, output data or parameter, use it's name with prefix $ in execution string. You can set parameterized description for new element(description that appears not in property editor but on element itself). In parameterized description you  [...]
-        <translation type="unfinished"></translation>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="239"/>
+        <source>Parameters</source>
+        <translation>Параметры</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:'Lucida Grande'; font-size:13pt; 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:12pt;">Another parameters for external tool. You must set name for parameter and its type. You also can set description for workflow designer. Each parameter will be represented as  parameter of workflow element.</span></p></body></html></source>
-        <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></p></body></html>
-</translation>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="274"/>
+        <source>Add attribute</source>
+        <translation>Добавить атрибут</translation>
     </message>
     <message>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="300"/>
         <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=" 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:12pt;">Execution string and element's description. To substitute input, output data or parameter, use it's name with prefix $ in execution string. You can set parameterized description for new element(description that appears not in property editor but on element its [...]
-        <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;">Строка выполнения и описание элемента. Чтобы заменить входные, выходные данные или параметр используйте его имя с префиксом $ в строке выполнения. Вы можете установить параметризованное описание для нового элемента (описание которое появляется на элементе). В параметризованном описании вы также может [...]
-    </message>
-    <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="239"/>
-        <source>Parameters</source>
-        <translation>Параметры</translation>
-    </message>
-    <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="274"/>
-        <source>Add attribute</source>
-        <translation>Добавить атрибут</translation>
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Execution string and element's description. To substitute input, output data or parameter, use it's name with prefix $ in execution string. You can set parameterized description for new element(description that appears not in property editor but on element itself). In parameterized description you  [...]
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="311"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="311"/>
         <source>Command line template</source>
         <translation>Заготовка для командной строки</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="330"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="330"/>
         <source>Execution string</source>
         <translation>Строка выполнения</translation>
     </message>
     <message>
-        <location filename="../src/ui/ExternalProcessWorkerDialog.ui" line="342"/>
+        <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="342"/>
         <source>Parameterized description</source>
         <translation>Описание</translation>
     </message>
@@ -197,27 +140,27 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>CreateScriptBlockDialog</name>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="14"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="14"/>
         <source>Create Element with Script</source>
         <translation>Создать элемент используя скрипт</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="22"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="22"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="29"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="29"/>
         <source>ScriptBlock</source>
         <translation>Скриптовый блок</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="38"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="38"/>
         <source>Description</source>
         <translation>Описание</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="45"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="45"/>
         <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; }
@@ -232,62 +175,62 @@ p, li { white-space: pre-wrap; }
         </translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="58"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="58"/>
         <source>Input Port</source>
         <translation>Входной порт</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="65"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="65"/>
         <source>Add input slot</source>
         <translation>Добавить входной слот</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="72"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="72"/>
         <source>Delete input slot</source>
         <translation>Удалить входной слот</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="79"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="79"/>
         <source>Output Port</source>
         <translation>Выходной порт</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="86"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="86"/>
         <source>Add output slot</source>
         <translation>Добавить выходной слот</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="93"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="93"/>
         <source>Delete output slot</source>
         <translation>Удалить выходной слот</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="110"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="110"/>
         <source>Attributes</source>
         <translation>Атрибуты</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="117"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="117"/>
         <source>Add Attribute</source>
         <translation>Добавить атрибут</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="124"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="124"/>
         <source>Delete Attribute</source>
         <translation>Удалить атрибут</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="149"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="149"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="164"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ui/CreateScriptBlockDialog.ui" line="182"/>
+        <location filename="../src/CreateScriptBlockDialog.ui" line="182"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -295,32 +238,32 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>DashboardsManagerDialog</name>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="14"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="14"/>
         <source>Dashboards Manager</source>
         <translation>Управление панелями</translation>
     </message>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="20"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="20"/>
         <source>Check dashboards to show:</source>
         <translation>Выбрать панели для отображения:</translation>
     </message>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="60"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="60"/>
         <source>Check selected</source>
         <translation>Отметить выделенные</translation>
     </message>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="67"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="67"/>
         <source>Uncheck selected</source>
         <translation>Снять метки с выделенных</translation>
     </message>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="74"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="74"/>
         <source>Remove selected</source>
         <translation>Удалить выделенные</translation>
     </message>
     <message>
-        <location filename="../src/ui/DashboardsManagerDialog.ui" line="81"/>
+        <location filename="../src/DashboardsManagerDialog.ui" line="81"/>
         <source>Select all</source>
         <translation>Выделить все</translation>
     </message>
@@ -328,39 +271,39 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>GalaxyConfigConfigurationDialog</name>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="14"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="14"/>
         <source>Create Galaxy config</source>
         <translation>Создать конфигурацию с Galaxy</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="54"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="54"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="67"/>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="164"/>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="177"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="67"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="164"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="177"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="80"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="80"/>
         <source>UGENE directory</source>
         <translation>Каталог UGENE</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="93"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="93"/>
         <source>Destination directory</source>
         <translation>Расположение каталога</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="106"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="106"/>
         <source>Galaxy directory</source>
         <translation>Каталог Galaxy</translation>
     </message>
     <message>
-        <location filename="../src/ui/GalaxyConfigConfigurationDialog.ui" line="119"/>
+        <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="119"/>
         <source>Create</source>
         <translation>Создать</translation>
     </message>
@@ -368,12 +311,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ImportSchemaDialog</name>
     <message>
-        <location filename="../src/ui/ImportSchemaDialog.ui" line="14"/>
+        <location filename="../src/ImportSchemaDialog.ui" line="14"/>
         <source>Import Workflow to Element</source>
         <translation>Импортировать схему в элемент</translation>
     </message>
     <message>
-        <location filename="../src/ui/ImportSchemaDialog.ui" line="22"/>
+        <location filename="../src/ImportSchemaDialog.ui" line="22"/>
         <source>Input new element name:</source>
         <translation>Имя нового элемента:</translation>
     </message>
@@ -381,7 +324,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PaletteWidget</name>
     <message>
-        <location filename="../src/ui/PaletteWidget.ui" line="14"/>
+        <location filename="../src/PaletteWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
@@ -389,42 +332,42 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PortAliasesConfigurationDialog</name>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="17"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="17"/>
         <source>Configure Port and Slot Aliases</source>
         <translation> Конфигурация интерфейса командной строки для портов и слотов</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="37"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="37"/>
         <source>Workflow ports</source>
         <translation>Порты схемы</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="72"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="72"/>
         <source>Available slot</source>
         <translation>Доступный слот</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="77"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="77"/>
         <source>Slot alias</source>
         <translation>Алиас слота</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="86"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="86"/>
         <source>Port alias</source>
         <translation>Алиас порта</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="95"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="95"/>
         <source>Port type:</source>
         <translation>Тип порта:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="109"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="109"/>
         <source>Port alias:</source>
         <translation>Алиас порта:</translation>
     </message>
     <message>
-        <location filename="../src/ui/PortAliasesConfigurationDialog.ui" line="119"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="119"/>
         <source>Port description:</source>
         <translation>Описание порта:</translation>
     </message>
@@ -539,52 +482,52 @@ p, li { white-space: pre-wrap; }
         <translation>Формат %1 не поддерживает аннотации</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="146"/>
+        <location filename="../src/WorkflowViewController.cpp" line="141"/>
         <source>Breakpoints</source>
         <translation>Точки остановки</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="204"/>
+        <location filename="../src/WorkflowViewController.cpp" line="199"/>
         <source>Element style</source>
         <translation>Стиль</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="152"/>
+        <location filename="../src/WorkflowViewController.cpp" line="147"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="141"/>
+        <location filename="../src/WorkflowViewController.cpp" line="136"/>
         <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="144"/>
+        <location filename="../src/WorkflowViewController.cpp" line="139"/>
         <source>Sorry! This workflow is obsolete and cannot be opened.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="215"/>
+        <location filename="../src/WorkflowViewController.cpp" line="210"/>
         <source>Scripting mode</source>
         <translation>Скриптинг</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="913"/>
+        <location filename="../src/WorkflowViewController.cpp" line="908"/>
         <source>Can not create the directory: </source>
         <translation>Невозможно создать директорию:</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="919"/>
+        <location filename="../src/WorkflowViewController.cpp" line="914"/>
         <source>The file '%1' already exists</source>
         <translation>Файл '%1' уже существует</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="924"/>
+        <location filename="../src/WorkflowViewController.cpp" line="919"/>
         <source>Can not copy the file here: </source>
         <translation>Невозможно скопировать файл:</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1482"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1477"/>
         <source>Run workflow</source>
         <translation>Запустить схему</translation>
     </message>
@@ -655,27 +598,27 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>SchemaAliasesConfigurationDialog</name>
     <message>
-        <location filename="../src/ui/SchemaAliasesConfigurationDialog.ui" line="17"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="17"/>
         <source>Configure Parameter Aliases</source>
         <translation>Конфигурация алиасов параметров</translation>
     </message>
     <message>
-        <location filename="../src/ui/SchemaAliasesConfigurationDialog.ui" line="34"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="34"/>
         <source>Workflow elements</source>
         <translation>Элементы</translation>
     </message>
     <message>
-        <location filename="../src/ui/SchemaAliasesConfigurationDialog.ui" line="69"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="69"/>
         <source>Schema parameter</source>
         <translation>Параметр схемы</translation>
     </message>
     <message>
-        <location filename="../src/ui/SchemaAliasesConfigurationDialog.ui" line="74"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="74"/>
         <source>Parameter alias</source>
         <translation>Алиас параметра</translation>
     </message>
     <message>
-        <location filename="../src/ui/SchemaAliasesConfigurationDialog.ui" line="79"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="79"/>
         <source>Help message</source>
         <translation>Вспомогательное сообщение</translation>
     </message>
@@ -683,17 +626,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>StartupDialog</name>
     <message>
-        <location filename="../src/ui/StartupDialog.ui" line="14"/>
+        <location filename="../src/StartupDialog.ui" line="14"/>
         <source>Choose Output Directory</source>
         <translation>Выбор директории для сохранения выходных данных</translation>
     </message>
     <message>
-        <location filename="../src/ui/StartupDialog.ui" line="20"/>
+        <location filename="../src/StartupDialog.ui" line="20"/>
         <source>Output Directory</source>
         <translation>Выходная директория</translation>
     </message>
     <message>
-        <location filename="../src/ui/StartupDialog.ui" line="33"/>
+        <location filename="../src/StartupDialog.ui" line="33"/>
         <source>Note: you can change this option in the UGENE Application Settings
 (Settings > Preferences > Workflow Designer)</source>
         <translation>Замечание: вы можете изменить эти настройки в общих настройках UGENE
@@ -821,90 +764,90 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CreateExternalProcessDialog</name>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="313"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="323"/>
         <source>Warning</source>
         <translation>Предупреждение</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="314"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="324"/>
         <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="343"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="353"/>
         <source>Create Element</source>
         <translation>Создание элемента</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="345"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="355"/>
         <source>Please set the input/output data.</source>
         <translation>Установите входные и выходные данные.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="350"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="360"/>
         <source>Please set the command line to run external tool.</source>
         <translation>Установите параметры командной строки чтобы запустить внутренний инструмент.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="355"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="454"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="365"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="464"/>
         <source>Please set the name for the new element.</source>
         <translation>Установите имя для нового элемента.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="361"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="466"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="371"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="476"/>
         <source>Invalid symbols in the element name.</source>
         <translation>Некорректные символы в имени элемента.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="366"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="471"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="376"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="481"/>
         <source>Element with this name already exists.</source>
         <translation>Элемент с таким именем уже существует.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="374"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="385"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="396"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="384"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="395"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="406"/>
         <source>For one or more parameter name was not set.</source>
         <translation>Для одного или более парваметров не задано имя.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="378"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="389"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="400"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="388"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="399"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="410"/>
         <source>Invalid symbols in a name.</source>
         <translation>Некорректные символы в имени.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="407"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="417"/>
         <source>The same name of element parameters was found</source>
         <translation>Параметр с таким именем уже существует</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="415"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="425"/>
         <source>You don't use parameter %1 in template string. Continue?</source>
         <translation>Вы не можете использовать параметр %1 в шаблонной строке. Продолжить?</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="416"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="426"/>
         <source>Continue</source>
         <translation>Продолжить</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="417"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="427"/>
         <source>Abort</source>
         <translation>Вернуться</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="460"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="470"/>
         <source>Spaces in the element name.</source>
         <translation>Пробелы в имени элемента.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="486"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="496"/>
         <source>It is the correct name</source>
         <translation>Это корректное имя</translation>
     </message>
@@ -991,12 +934,12 @@ You could also reset the dialog to the initial state.</source>
 <context>
     <name>U2::DashboardManagerHelper</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="244"/>
+        <location filename="../src/WorkflowViewController.cpp" line="239"/>
         <source>No Dashboards Found</source>
         <translation>Не найдено панелей</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="245"/>
+        <location filename="../src/WorkflowViewController.cpp" line="240"/>
         <source>You do not have any dashboards yet. You need to run some workflow to use Dashboards Manager.</source>
         <translation>У вас еще нет ни одной панели. Вам необходимо запустить какую-нибудь схему, чтобы использовать менеджер панелей.</translation>
     </message>
@@ -1824,238 +1767,6 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
 </context>
 <context>
-    <name>U2::LocalWorkflow::DASAnnotationPrompter</name>
-    <message>
-        <source>unset</source>
-        <translation type="vanished">не указан</translation>
-    </message>
-    <message>
-        <source> from <u>%1</u></source>
-        <translation type="vanished">из <u>%1</u></translation>
-    </message>
-    <message>
-        <source>For each protein sequence %1, finds IDs of similar sequences using remote BLAST.<br>Loads annotations for DAS sources using the first %2 ID(s).</source>
-        <translation type="vanished">Для каждой протеиновой последовательности %1, ищутся идентификаторы похожих последовательносетй используя удаленный BLAST.<br>Загружает аннотации для DAS используя первые %2 идентификаторы.</translation>
-    </message>
-</context>
-<context>
-    <name>U2::LocalWorkflow::DASAnnotationWorker</name>
-    <message>
-        <source>Input sequences</source>
-        <translation type="vanished">Входные последовательности</translation>
-    </message>
-    <message>
-        <source>Protein sequences for annotation. Nucleotide sequences are skipped.</source>
-        <translation type="vanished">Протеиновые последовательности для аннотации. Нуклеотидные последовательности будут проигнорированы.</translation>
-    </message>
-    <message>
-        <source>DAS annotations</source>
-        <translation type="vanished">DAS аннотации</translation>
-    </message>
-    <message>
-        <source>A set of annotations loaded from DAS sources using IDs of similar sequences.</source>
-        <translation type="vanished">Набор аннотаций загружаемый из DAS источников используя идентификаторы похожих последовательностей.</translation>
-    </message>
-    <message>
-        <source>Max result IDs</source>
-        <translation type="vanished">Максимальное количество идентификаторов</translation>
-    </message>
-    <message>
-        <source>Use first IDs of similar sequences to load annotations.</source>
-        <translation type="vanished">Использовать первый идентификатор похожей последовательности для загрузки аннотаций.</translation>
-    </message>
-    <message>
-        <source>Database</source>
-        <translation type="vanished">База данных</translation>
-    </message>
-    <message>
-        <source>Database against which the search is performed: UniProtKB or clusters of sequences with 100%, 90% or 50% identity.</source>
-        <translation type="vanished">База данных, по которым выполняется поиск: UniProtKB или кластеры последовательностей с 100%, 90% или 50% идентичностью.</translation>
-    </message>
-    <message>
-        <source>Min identity</source>
-        <translation type="vanished">Минимальная идентификация</translation>
-    </message>
-    <message>
-        <source>Minimum identity of a BLAST result and an input sequence.</source>
-        <translation type="vanished">Минимальная идентификация результатов BLAST и входная последовательность.</translation>
-    </message>
-    <message>
-        <source>Feature sources</source>
-        <translation type="vanished">Тематические источники</translation>
-    </message>
-    <message>
-        <source>The DAS sources to read features from.</source>
-        <translation type="vanished">DAS источники для чтения тем.</translation>
-    </message>
-    <message>
-        <source>Threshold</source>
-        <translation type="vanished">Порог</translation>
-    </message>
-    <message>
-        <source>The expectation value (E) threshold is a statistical measure of the number of expected matches in a random database. The lower the e-value, the more likely the match is to be significant.</source>
-        <translation type="vanished">Среднее значение (E) порога является статистической мерой из числа ожидаемых соответствий в случайной базе данных. Чем ниже это значение, тем больше вероятность того, что соответствие должно быть значимым.</translation>
-    </message>
-    <message>
-        <source>Matrix</source>
-        <translation type="vanished">Матрица</translation>
-    </message>
-    <message>
-        <source>The matrix assigns a probability score for each position in an alignment.</source>
-        <translation type="vanished">Матрица определяет счет вероятности для каждой позиции в выравнивании. </translation>
-    </message>
-    <message>
-        <source>Filtering</source>
-        <translation type="vanished">Фильтрация</translation>
-    </message>
-    <message>
-        <source>Low-complexity regions (e.g. stretches of cysteine in Q03751, or hydrophobic regions in membrane proteins) tend to producespurious, insignificant matches with sequences in the database which have the same kind of low-complexity regions, but are unrelated biologically. If 'Filter low complexity regions' is selected, the query sequence will be run through the program SEG, and all amino acids in low-complexity regions will be replaced by X's.</source>
-        <translation type="vanished">Регионы простой сложности (т.е. участки цистеина в Q03751, или гидрофобные регионы в мембранах белков) как правило производят ложные, незначительные по поиску с последовательностями в базе данных, которые имеют тот же самый вид с простыми регионами, но не имеют биологического смысла. Если 'Фильтр простых регионов' выбран, поиск последовательности будет работать в рамках программы SEG, и все аминокислоты в простых регионах будут заменены на X [...]
-    </message>
-    <message>
-        <source>Gapped</source>
-        <translation type="vanished">Пробелы</translation>
-    </message>
-    <message>
-        <source>This will allow gaps to be introduced in the sequences when the comparison is done.</source>
-        <translation type="vanished">Это позволит ввести пробелы в последовательность, когда сравнение будет завершено.</translation>
-    </message>
-    <message>
-        <source>Hits</source>
-        <translation type="vanished">Попадания</translation>
-    </message>
-    <message>
-        <source>Limits the number of returned alignments.</source>
-        <translation type="vanished">Ограничивает число возвращенных выравниваний.</translation>
-    </message>
-    <message>
-        <source>Annotate with DAS</source>
-        <translation type="vanished">Аннотирование с помощью DAS</translation>
-    </message>
-    <message>
-        <source>Finds similar protein sequence using remote BLAST.<p>Using IDs of sequences found loads annotation for DAS sources.<p>Nucleotide sequences are skipped if any supplied to input.</p></source>
-        <translation type="vanished">Ищет схожие протеиновые последовательности используя удаленный remote BLAST.<p>Используя идентификаторы последовательностей находятся аннотации для источников DAS.<p>Нуклеотидные последовательности игнориурются если есть другие входные последовательности.</p></translation>
-    </message>
-    <message>
-        <source>No DAS registry</source>
-        <translation type="vanished">Нет DAS реестра</translation>
-    </message>
-    <message>
-        <source>No DAS feature sources</source>
-        <translation type="vanished">Нет источников DAS тем</translation>
-    </message>
-    <message>
-        <source>Internal error: no DAS Registry.</source>
-        <translation type="vanished">Внутренняя ошибка: нет DAS реестра.</translation>
-    </message>
-    <message>
-        <source>Sequence %1 is %2 amino acids long. Only sequences from %3 to %4 amino acids are processed.</source>
-        <translation type="vanished">Последовательность %1 это %2 длинная аминокслотная. Только последовательности из %3 в %4 аминокислоты обрабатываются.</translation>
-    </message>
-    <message>
-        <source>Bad sequence supplied to DASAnnotationWorker: %1</source>
-        <translation type="vanished">Плохая последовательность прилагаемая в DAS елементе: %1</translation>
-    </message>
-    <message>
-        <source>Number of similar sequences: %1.</source>
-        <translation type="vanished">Число схожих последовательностей: %1.</translation>
-    </message>
-    <message>
-        <source> IDs: </source>
-        <translation type="vanished">Идентификаторы:</translation>
-    </message>
-</context>
-<context>
-    <name>U2::LocalWorkflow::DASFetcherPrompter</name>
-    <message>
-        <source>unset</source>
-        <translation type="vanished">не указан</translation>
-    </message>
-</context>
-<context>
-    <name>U2::LocalWorkflow::DASFetcherWorker</name>
-    <message>
-        <source>sequences identified with</source>
-        <translation type="vanished">последовательности с идентификаторами</translation>
-    </message>
-    <message>
-        <source>sequence identified with</source>
-        <translation type="vanished">последовательность с идентификатором</translation>
-    </message>
-    <message>
-        <source>Save result to <u>%1</u> directory.</source>
-        <translation type="vanished">Сохранить результат в директорию <u>%1</u>.</translation>
-    </message>
-    <message>
-        <source>Reads %1 %2 from <u>%3</u> DAS source. %4</source>
-        <translation type="vanished">Риды %1 %2 из <u>%3</u> DAS источник. %4</translation>
-    </message>
-    <message>
-        <source>Cannot create directory '%1'</source>
-        <translation type="vanished">Не удается создать директорию '%1'</translation>
-    </message>
-    <message>
-        <source>failed to load item from DAS source : %3</source>
-        <translation type="vanished">ошибка при загрузке элемента из DAS источника: %3</translation>
-    </message>
-    <message>
-        <source>Read from DAS</source>
-        <translation type="vanished">Чтение аннотаций из DAS</translation>
-    </message>
-    <message>
-        <source>Reads sequences and annotations if any from the Distributed Annotation System.</source>
-        <translation type="vanished">Читает последовательности и аннотации из распределенной системы аннотаций.</translation>
-    </message>
-    <message>
-        <source>Sequence</source>
-        <translation type="vanished">Последовательность</translation>
-    </message>
-    <message>
-        <source>No DAS registry</source>
-        <translation type="vanished">Нет DAS реестра</translation>
-    </message>
-    <message>
-        <source>No DAS sources</source>
-        <translation type="vanished">Нет DAS источника</translation>
-    </message>
-    <message>
-        <source>No DAS feature sources</source>
-        <translation type="vanished">Нет источника тем DAS</translation>
-    </message>
-    <message>
-        <source>Feature Sources</source>
-        <translation type="vanished">Источники тем</translation>
-    </message>
-    <message>
-        <source>The DAS sources to read features from.</source>
-        <translation type="vanished">Источники DAS для чтения тем.</translation>
-    </message>
-    <message>
-        <source>Reference Source</source>
-        <translation type="vanished">Референсный источник</translation>
-    </message>
-    <message>
-        <source>The DAS source to read reference from.</source>
-        <translation type="vanished">DAS источник для чтения референса.</translation>
-    </message>
-    <message>
-        <source>Resource ID(s)</source>
-        <translation type="vanished">Идентификаторы</translation>
-    </message>
-    <message>
-        <source>Semicolon-separated list of resource ID`s in the source.</source>
-        <translation type="vanished">источник - список идентификаторов через точку с запятой.</translation>
-    </message>
-    <message>
-        <source>Save file to directory</source>
-        <translation type="vanished">Сохранить в директорию</translation>
-    </message>
-    <message>
-        <source>The directory to store sequence files loaded from the source.</source>
-        <translation type="vanished">папка для сохранения файлов последовательностей из источника.</translation>
-    </message>
-</context>
-<context>
     <name>U2::LocalWorkflow::DNAStatWorker</name>
     <message>
         <location filename="../src/library/StatisticWorkers.cpp" line="62"/>
@@ -5503,9 +5214,13 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
         <translation>Прочитать сборку из %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ReadAssemblyTask.cpp" line="162"/>
         <source>File '%1' not exists</source>
-        <translation>Файл '%1' не существует</translation>
+        <translation type="vanished">Файл '%1' не существует</translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/ReadAssemblyTask.cpp" line="162"/>
+        <source>File '%1' does not exist</source>
+        <translation type="unfinished">Файл '%1' не существует</translation>
     </message>
     <message>
         <location filename="../src/tasks/ReadAssemblyTask.cpp" line="198"/>
@@ -5566,10 +5281,6 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Reports only sequences containing the specified regular expression.<p><i>Leave it empty to switch off this filter. Use <b>*</b> to mask many symbols and <b>?</b> to mask one symbol.</i></p></source>
-        <translation type="vanished">выбирает только те последовательности, названия которых содержат указанное регулярное выражение. <p><i>Оставьте его пустым, чтобы отключить этот фильтр. Используйте <b>*</b> чтобы заменить несколько символов и <b>?</b> чтобы заменить один символ.</i></p></translation>
-    </message>
-    <message>
         <location filename="../src/library/GenericReadActor.cpp" line="113"/>
         <source>Sequence count limit</source>
         <translation>Ограничение количества последовательностей</translation>
@@ -5668,57 +5379,57 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 Алгоритмы создаются в виде визуальных диаграмм потоков данных, не требуя навыков программирования или знания языков программирования.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="171"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="166"/>
         <source>Runs the specified task.</source>
         <translation>Выполняет указанную задачу.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="172"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="167"/>
         <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="174"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="169"/>
         <source><task_name> [<task_parameter>=value ...]</source>
         <translation><task_name> [<task_parameter>=value ...]</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="180"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="175"/>
         <source>Prints the content of the specified slot.</source>
         <translation>Печатает содержимое указанного слота.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="181"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="176"/>
         <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="183"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="178"/>
         <source><actor_name>.<port_name>.<slot_name></source>
         <translation><actor_name>.<port_name>.<slot_name></translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="188"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="183"/>
         <source>Creates new Galaxy tool config.</source>
         <translation>Создает новую конфигурацию Galaxy-инструмента.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="189"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="184"/>
         <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="191"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="186"/>
         <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="211"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="206"/>
         <source>Close Designer</source>
         <translation>Закрытие дизайнера схем</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="220"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="215"/>
         <source>Close Designer canceled</source>
         <translation>Закрытие дизайнера схем отменено</translation>
     </message>
@@ -5726,92 +5437,92 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowDesignerService</name>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="229"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="224"/>
         <source>Workflow Designer</source>
         <translation>Дизайнер вычислительных схем</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="269"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="264"/>
         <source>Workflow Designer...</source>
         <translation>Дизайнер вычислительных схем...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="279"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="274"/>
         <source>New workflow...</source>
         <translation>Новая схема...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="310"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="305"/>
         <source>Can not open Workflow Designer. Please, try to reload UGENE.</source>
         <translation>Невозможно открыть дизайнер вычислительных схем. Попробуйте перезагрузить UGENE.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="343"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="338"/>
         <source>Reads quality control and alignment</source>
         <translation>Контроль качества коротких прочтений и выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="345"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="340"/>
         <source>Reads quality control...</source>
         <translation>Контроль качества коротких прочтений...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="347"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="342"/>
         <source>Raw DNA-Seq data processing</source>
         <translation>Обработка сырых данных секвенирования ДНК</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="349"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="344"/>
         <source>Variant calling</source>
         <translation>Поиск вариаций</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="351"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="346"/>
         <source>Annotate variants and predict effects</source>
         <translation>Аннотация вариаций и предсказание эффекта</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="353"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="348"/>
         <source>Raw RNA-Seq data processing</source>
         <translation>Обработка сырых данных секвенирования РНК</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="355"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="350"/>
         <source>RNA-Seq data analysis</source>
         <translation>Анализ данных секвенирования РНК</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="357"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="352"/>
         <source>Extract transcript sequences</source>
         <translation>Извлечение последовательности транскриптов</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="359"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="354"/>
         <source>Raw ChIP-Seq data processing</source>
         <translation>Обработка сырых данных ChIP-Seq</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="361"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="356"/>
         <source>ChIP-Seq data analysis</source>
         <translation>Анализ данных ChIP-Seq</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="363"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="358"/>
         <source>ChIP-Seq coverage</source>
         <translation>Покрытие ChIP-Seq</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="365"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="360"/>
         <source>Extract coverage from assemblies</source>
         <translation>Расчет покрытия по сборке</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="367"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="362"/>
         <source>Extract consensus from assemblies</source>
         <translation>Извлечение консенсуса из сборки</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="370"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="365"/>
         <source>Remote NCBI BLAST</source>
         <translation>Удаленный поиск с помощью NCBI BLAST</translation>
     </message>
@@ -5927,7 +5638,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowMetaDialog</name>
     <message>
-        <location filename="../src/WorkflowMetaDialog.cpp" line="86"/>
+        <location filename="../src/WorkflowMetaDialog.cpp" line="93"/>
         <source>Save workflow to file</source>
         <translation>Сохранить схему в файл</translation>
     </message>
@@ -5963,50 +5674,48 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowRemoteRunFromCMDLineTask</name>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="206"/>
         <source>%1 parameter expected, but not set</source>
-        <translation>Не установлен параметр %1</translation>
+        <translation type="vanished">Не установлен параметр %1</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="212"/>
         <source>Cannot read remote machine settings from %2</source>
-        <translation>Не удается прочитать настройки удаленной машины из %2</translation>
+        <translation type="vanished">Не удается прочитать настройки удаленной машины из %2</translation>
     </message>
 </context>
 <context>
     <name>U2::WorkflowRunFromCMDLineBase</name>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="50"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="49"/>
         <source>Workflow run from cmdline</source>
         <translation>Запуск схемы из командной строки</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="72"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="71"/>
         <source>no task to run</source>
         <translation>нет задач для выполнения</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="89"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="88"/>
         <source>Cannot find workflow: %1</source>
         <translation>Невозможно найти схему: %1</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="118"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="117"/>
         <source>alias '%1' not set in workflow</source>
         <translation>алиас '%1' не установлен в схеме</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="139"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="138"/>
         <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="124"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="123"/>
         <source>actor parameter '%1' not found</source>
         <translation>текущий параметр '%1' не найден</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="131"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="130"/>
         <source>cannot parse value from '%1'</source>
         <translation>невозможно разобрать значение из '%1'</translation>
     </message>
@@ -6014,22 +5723,22 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowScene</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2559"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2535"/>
         <source>Open document(s)</source>
         <translation>Открыть документы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2719"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2695"/>
         <source>Workflow Designer</source>
         <translation>Дизайнер вычислительных схем</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2719"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2695"/>
         <source>Unable to open specified documents. Watch log for details.</source>
         <translation>Невозможно открыть указанные документы. Посмотрите лог для выяснения деталей.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2801"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2777"/>
         <source>Drop an element from the palette here</source>
         <translation>Перенесите сюда элемент из палитры</translation>
     </message>
@@ -6073,7 +5782,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowUtils</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="932"/>
+        <location filename="../src/WorkflowViewController.cpp" line="927"/>
         <source>UGENE workflow element</source>
         <translation type="unfinished">UGENE элемент </translation>
     </message>
@@ -6081,363 +5790,363 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowView</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="330"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2356"/>
+        <location filename="../src/WorkflowViewController.cpp" line="325"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2332"/>
         <source>Workflow Designer</source>
         <translation>Дизайнер схем</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="418"/>
-        <location filename="../src/WorkflowViewController.cpp" line="554"/>
+        <location filename="../src/WorkflowViewController.cpp" line="413"/>
+        <location filename="../src/WorkflowViewController.cpp" line="549"/>
         <source>Error list</source>
         <translation>Проблемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="446"/>
-        <location filename="../src/WorkflowViewController.cpp" line="448"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2279"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2281"/>
+        <location filename="../src/WorkflowViewController.cpp" line="441"/>
+        <location filename="../src/WorkflowViewController.cpp" line="443"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2255"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2257"/>
         <source>Warning!</source>
         <translation>Предупреждение!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="451"/>
+        <location filename="../src/WorkflowViewController.cpp" line="446"/>
         <source>Undefined workflow format for %1</source>
         <translation>Неизвестный workflow формат в %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="451"/>
+        <location filename="../src/WorkflowViewController.cpp" line="446"/>
         <source>file</source>
         <translation>файл</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="683"/>
+        <location filename="../src/WorkflowViewController.cpp" line="678"/>
         <source>&Save workflow as...</source>
         <translation>&Сохранить схему как...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="688"/>
+        <location filename="../src/WorkflowViewController.cpp" line="683"/>
         <source>Show wizard</source>
         <translation>Показать визард</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="717"/>
+        <location filename="../src/WorkflowViewController.cpp" line="712"/>
         <source>Delete</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="937"/>
-        <location filename="../src/WorkflowViewController.cpp" line="962"/>
+        <location filename="../src/WorkflowViewController.cpp" line="932"/>
+        <location filename="../src/WorkflowViewController.cpp" line="957"/>
         <source>Can't load element.</source>
         <translation>Невозможно загрузить элемент.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1002"/>
+        <location filename="../src/WorkflowViewController.cpp" line="997"/>
         <source>Can't remove element %1</source>
         <translation>Не могу удалить элемент %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1318"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1379"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1313"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1374"/>
         <source>Element style</source>
         <translation>Стиль</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1825"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1853"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1801"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1829"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="760"/>
+        <location filename="../src/WorkflowViewController.cpp" line="755"/>
         <source>Select all elements</source>
         <translation>Выбрать все элементы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="751"/>
+        <location filename="../src/WorkflowViewController.cpp" line="746"/>
         <source>Import workflow to element...</source>
         <translation>Импортировать схему в элемент...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="755"/>
+        <location filename="../src/WorkflowViewController.cpp" line="750"/>
         <source>Create Galaxy tool config...</source>
         <translation>Создать конфигурацию Galaxy инструмента...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="763"/>
+        <location filename="../src/WorkflowViewController.cpp" line="758"/>
         <source>&Copy</source>
         <translation>&Копировать</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="771"/>
+        <location filename="../src/WorkflowViewController.cpp" line="766"/>
         <source>Cu&t</source>
         <translation>&Вырезать</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="778"/>
+        <location filename="../src/WorkflowViewController.cpp" line="773"/>
         <source>&Paste</source>
         <translation>&Вставить</translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsController.cpp" line="82"/>
-        <location filename="../src/WorkflowViewController.cpp" line="786"/>
+        <location filename="../src/WorkflowViewController.cpp" line="781"/>
         <source>Minimal</source>
         <translation>Упрощённый</translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsController.cpp" line="83"/>
-        <location filename="../src/WorkflowViewController.cpp" line="792"/>
+        <location filename="../src/WorkflowViewController.cpp" line="787"/>
         <source>Extended</source>
         <translation>Развёрнутый</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="933"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1285"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1389"/>
+        <location filename="../src/WorkflowViewController.cpp" line="928"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1280"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1384"/>
         <source>Add element</source>
         <translation>Добавить элемент</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="616"/>
+        <location filename="../src/WorkflowViewController.cpp" line="611"/>
         <source>&Run workflow</source>
         <translation>&Запустить схему</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="623"/>
+        <location filename="../src/WorkflowViewController.cpp" line="618"/>
         <source>S&top workflow</source>
         <translation>О&тменить выполнение схемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="630"/>
+        <location filename="../src/WorkflowViewController.cpp" line="625"/>
         <source>&Validate workflow</source>
         <translation>&Проверить валидность схемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="636"/>
+        <location filename="../src/WorkflowViewController.cpp" line="631"/>
         <source>&Estimate workflow</source>
         <translation>&Оценить время на выполнение схемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="642"/>
+        <location filename="../src/WorkflowViewController.cpp" line="637"/>
         <source>&Pause workflow</source>
         <translation>&Остановить схему</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="650"/>
+        <location filename="../src/WorkflowViewController.cpp" line="645"/>
         <source>&Next step</source>
         <translation>&Следующий шаг</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="660"/>
+        <location filename="../src/WorkflowViewController.cpp" line="655"/>
         <source>Process one &message</source>
         <translation>По одному &сообщению</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="670"/>
+        <location filename="../src/WorkflowViewController.cpp" line="665"/>
         <source>&New workflow...</source>
         <translation>&Новая схема...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="676"/>
+        <location filename="../src/WorkflowViewController.cpp" line="671"/>
         <source>&Save workflow</source>
         <translation>&Сохранить схему</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="706"/>
+        <location filename="../src/WorkflowViewController.cpp" line="701"/>
         <source>&Load workflow</source>
         <translation>&Загрузка схемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="712"/>
+        <location filename="../src/WorkflowViewController.cpp" line="707"/>
         <source>&Export workflow as image</source>
         <translation>&Экспорт схемы в изображение</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="721"/>
+        <location filename="../src/WorkflowViewController.cpp" line="716"/>
         <source>Dashboards manager</source>
         <translation>Менеджер панелей</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="742"/>
+        <location filename="../src/WorkflowViewController.cpp" line="737"/>
         <source>Set parameter aliases...</source>
         <translation>Выбрать алиасы параметров...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="747"/>
+        <location filename="../src/WorkflowViewController.cpp" line="742"/>
         <source>Set port and slot aliases...</source>
         <translation>Выбрать алиасы портов и слотов...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="800"/>
+        <location filename="../src/WorkflowViewController.cpp" line="795"/>
         <source>Hide scripting options</source>
         <translation>Не показывать опции скриптинга</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="807"/>
+        <location filename="../src/WorkflowViewController.cpp" line="802"/>
         <source>Show scripting options</source>
         <translation>Показывать опции скриптинга</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="820"/>
+        <location filename="../src/WorkflowViewController.cpp" line="815"/>
         <source>Create element with script...</source>
         <translation>Создать элемент при помощи скрипта...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="825"/>
+        <location filename="../src/WorkflowViewController.cpp" line="820"/>
         <source>Edit script of the element...</source>
         <translation>Изменить скрипт элемента...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="831"/>
+        <location filename="../src/WorkflowViewController.cpp" line="826"/>
         <source>Create element with command line tool...</source>
         <translation>Создать элемент при помощи инструмента командной строки...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="836"/>
+        <location filename="../src/WorkflowViewController.cpp" line="831"/>
         <source>Edit configuration...</source>
         <translation>Изменить конфигурацию...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="842"/>
+        <location filename="../src/WorkflowViewController.cpp" line="837"/>
         <source>Add element with command line tool...</source>
         <translation>Добавить элемент при помощи инструмента командной строки...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1424"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1419"/>
         <source>Empty workflow!</source>
         <translation>Пустая схема!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1424"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1419"/>
         <source>Nothing to run: empty workflow</source>
         <translation>Выполнять нечего: схема пуста</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1449"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1444"/>
         <source>Workflow cannot be executed</source>
         <translation>Схема не может быть выполнена</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1450"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1445"/>
         <source>Please fix issues listed in the error list (located under workflow).</source>
         <translation>Исправьте ошибки представленные в списке ошибок (располодженный под схемой).</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1455"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1450"/>
         <source>Well done!</source>
         <translation>Готово!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1457"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1452"/>
         <source>There are non-critical warnings.</source>
         <translation>Нет критических ошибок.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1459"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1454"/>
         <source>Workflow is valid</source>
         <translation>Схема валидна</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1720"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1696"/>
         <source>Aliases for workflow parameters should be different!</source>
         <translation>Алиасы для параметров схемы должны бть разными!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1753"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1729"/>
         <source>Workflow does not contain any parameter aliases</source>
         <translation>Схема не содержит алиасов параметров</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1767"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1743"/>
         <source>Internal error!</source>
         <translation>Веутренняя ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1767"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1743"/>
         <source>Can not create Galaxy config</source>
         <translation>Невозможно создать конфигурацию Galaxy</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1823"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1799"/>
         <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="2159"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2135"/>
         <source>File is not found: %1</source>
         <translation>Файл не найден: %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2197"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2173"/>
         <source>Show dashboard</source>
         <translation>Показать панель</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2206"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2182"/>
         <source>Show workflow</source>
         <translation>Показать схему</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2252"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2255"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2228"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2231"/>
         <source>Open workflow file</source>
         <translation>Открыть файл схемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2293"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2269"/>
         <source>New workflow</source>
         <translation>Новая схема</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2357"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2333"/>
         <source>The workflow has been modified.
 Do you want to save changes?</source>
         <translation>Схема была изменена. Вы хотите сохранить изменения?</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1324"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1319"/>
         <source>Scripting mode</source>
         <translation>Скриптинг</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1372"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1367"/>
         <source>Element properties</source>
         <translation>Свойства элемента</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1453"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1448"/>
         <source>Workflow is valid.
 </source>
         <translation>Схема валидна.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1720"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1753"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1696"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1729"/>
         <source>Bad input!</source>
         <translation>Неверные входные данные!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2325"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2301"/>
         <source>Workflow Designer - %1</source>
         <translation>Дизайнер схем - %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1869"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1845"/>
         <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="399"/>
+        <location filename="../src/WorkflowViewController.cpp" line="394"/>
         <source>Elements</source>
         <translation>Элементы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="402"/>
+        <location filename="../src/WorkflowViewController.cpp" line="397"/>
         <source>Samples</source>
         <translation>Примеры</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="815"/>
+        <location filename="../src/WorkflowViewController.cpp" line="810"/>
         <source>Unlock Scene</source>
         <translation>Разблокировать схему</translation>
     </message>
@@ -6468,32 +6177,32 @@ Do you want to save changes?</source>
 <context>
     <name>WorkflowEditorWidget</name>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="14"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="65"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="65"/>
         <source>Property Editor</source>
         <translation>Редактор объектов</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="97"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="97"/>
         <source>TextLabel</source>
         <translation>Название</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="179"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="179"/>
         <source>Parameters</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="273"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="273"/>
         <source>Input data</source>
         <translation>Входные данные</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowEditorWidget.ui" line="320"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="320"/>
         <source>Output data</source>
         <translation>Выходные данные</translation>
     </message>
@@ -6501,27 +6210,27 @@ Do you want to save changes?</source>
 <context>
     <name>WorkflowMetaDialog</name>
     <message>
-        <location filename="../src/ui/WorkflowMetaDialog.ui" line="20"/>
+        <location filename="../src/WorkflowMetaDialog.ui" line="20"/>
         <source>Workflow Properties</source>
         <translation>Описание схемы</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowMetaDialog.ui" line="28"/>
+        <location filename="../src/WorkflowMetaDialog.ui" line="28"/>
         <source>Location</source>
         <translation>Путь</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowMetaDialog.ui" line="38"/>
+        <location filename="../src/WorkflowMetaDialog.ui" line="38"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowMetaDialog.ui" line="45"/>
+        <location filename="../src/WorkflowMetaDialog.ui" line="45"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowMetaDialog.ui" line="55"/>
+        <location filename="../src/WorkflowMetaDialog.ui" line="55"/>
         <source>Comment</source>
         <translation>Комментарий</translation>
     </message>
@@ -6529,89 +6238,82 @@ Do you want to save changes?</source>
 <context>
     <name>WorkflowSettingsWidget</name>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="14"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="14"/>
         <source>Resource settings</source>
         <translation>Источник настроек</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="20"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="20"/>
         <source>Scene appearance</source>
         <translation>Сцена</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="42"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="42"/>
         <source>Element style</source>
         <translation>Стиль</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="56"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="56"/>
         <source>Element font</source>
         <translation>Шрифт</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="70"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="70"/>
         <source>Element background color</source>
         <translation>Цвет фона</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="105"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="105"/>
         <source>Enable debugger</source>
         <translation>Включить отладку</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="124"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="124"/>
         <source>Use directory for output files</source>
         <translation>Использовать директорию для выходных файлов</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="145"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="145"/>
         <source>Directory for custom elements with scripts</source>
         <translation>Директория для элементов пользователя со скриптами</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="166"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="166"/>
         <source>Directory for custom elements with command line tools</source>
         <translation>Директория для элементов пользователя с внешними утилитами</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="187"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="187"/>
         <source>Directory for included schema elements</source>
         <translation>Директория для включенных элементов схемы</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="26"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="26"/>
         <source>Show grid</source>
         <translation>Показывать сетку</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="98"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="98"/>
         <source>Track running progress</source>
         <translation>Отображать прогресс выполнения схемы</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="118"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="118"/>
         <source>Directories</source>
         <translation>Директории</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="33"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="33"/>
         <source>Snap to grid</source>
         <translation>Привязываться к сетке</translation>
     </message>
     <message>
-        <location filename="../src/ui/WorkflowSettingsWidget.ui" line="92"/>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="92"/>
         <source>Runtime settings</source>
         <translation>Исполнение схем</translation>
     </message>
 </context>
 <context>
-    <name>WorkflowUtils</name>
-    <message>
-        <source>UGENE workflow element</source>
-        <translation type="vanished">UGENE элемент </translation>
-    </message>
-</context>
-<context>
     <name>WriteDocPrompter</name>
     <message>
         <location filename="../src/library/DocActors.cpp" line="188"/>
diff --git a/src/plugins/workflow_designer/workflow_designer.pro b/src/plugins/workflow_designer/workflow_designer.pro
index 4f9de8b..b590940 100644
--- a/src/plugins/workflow_designer/workflow_designer.pro
+++ b/src/plugins/workflow_designer/workflow_designer.pro
@@ -97,19 +97,19 @@ HEADERS += src/ActorCfgFilterProxyModel.h \
            src/util/SaveSchemaImageUtils.h \
            src/util/WorkerNameValidator.h \
            src/util/WriteSequenceValidator.h
-FORMS += src/ui/ChooseItemDialog.ui \
-           src/ui/CreateScriptBlockDialog.ui \
-           src/ui/DashboardsManagerDialog.ui \
-           src/ui/ExternalProcessWorkerDialog.ui \
-           src/ui/GalaxyConfigConfigurationDialog.ui \
-           src/ui/ImportSchemaDialog.ui \
-           src/ui/PaletteWidget.ui \
-           src/ui/PortAliasesConfigurationDialog.ui \
-           src/ui/SchemaAliasesConfigurationDialog.ui \
-           src/ui/StartupDialog.ui \
-           src/ui/WorkflowEditorWidget.ui \
-           src/ui/WorkflowMetaDialog.ui \
-           src/ui/WorkflowSettingsWidget.ui
+FORMS += src/ChooseItemDialog.ui \
+           src/CreateScriptBlockDialog.ui \
+           src/DashboardsManagerDialog.ui \
+           src/library/ExternalProcessWorkerDialog.ui \
+           src/GalaxyConfigConfigurationDialog.ui \
+           src/ImportSchemaDialog.ui \
+           src/PaletteWidget.ui \
+           src/PortAliasesConfigurationDialog.ui \
+           src/SchemaAliasesConfigurationDialog.ui \
+           src/StartupDialog.ui \
+           src/WorkflowEditorWidget.ui \
+           src/WorkflowMetaDialog.ui \
+           src/WorkflowSettingsWidget.ui
 SOURCES += src/ActorCfgFilterProxyModel.cpp \
            src/ActorCfgModel.cpp \
            src/BreakpointManagerView.cpp \
diff --git a/src/plugins_3rdparty/ball/CMakeLists.txt b/src/plugins_3rdparty/ball/CMakeLists.txt
new file mode 100644
index 0000000..426d123
--- /dev/null
+++ b/src/plugins_3rdparty/ball/CMakeLists.txt
@@ -0,0 +1,6 @@
+set(UGENE_PLUGIN_NAME ball)
+
+include_directories(src/include)
+include_directories(src/source)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/ball/src/source/COMMON/exception.cpp b/src/plugins_3rdparty/ball/src/source/COMMON/exception.cpp
index 3b2bde5..7c13c45 100644
--- a/src/plugins_3rdparty/ball/src/source/COMMON/exception.cpp
+++ b/src/plugins_3rdparty/ball/src/source/COMMON/exception.cpp
@@ -329,9 +329,9 @@ namespace BALL
 		
 			GlobalExceptionHandler::GlobalExceptionHandler()
 			{
-				std::set_terminate(terminate);
-				std::set_unexpected(terminate);
-				std::set_new_handler(newHandler);
+//				std::set_terminate(terminate);
+//				std::set_unexpected(terminate);
+//				std::set_new_handler(newHandler);
 			}
 
 			void GlobalExceptionHandler::newHandler()
diff --git a/src/plugins_3rdparty/gor4/CMakeLists.txt b/src/plugins_3rdparty/gor4/CMakeLists.txt
new file mode 100644
index 0000000..11b110e
--- /dev/null
+++ b/src/plugins_3rdparty/gor4/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME gor4)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/hmm2/CMakeLists.txt b/src/plugins_3rdparty/hmm2/CMakeLists.txt
new file mode 100644
index 0000000..33b085d
--- /dev/null
+++ b/src/plugins_3rdparty/hmm2/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME hmm2)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/hmm2/hmm2.pro b/src/plugins_3rdparty/hmm2/hmm2.pro
index 3e0a13c..57b0e2a 100644
--- a/src/plugins_3rdparty/hmm2/hmm2.pro
+++ b/src/plugins_3rdparty/hmm2/hmm2.pro
@@ -25,9 +25,9 @@ HEADERS += src/HMMIO.h \
            src/u_search/uhmmsearch_sse.h \
            src/u_spu/hmmer_spu.h \
            src/u_tests/uhmmerTests.h
-FORMS += src/u_build/ui/HMMBuildDialog.ui \
-         src/u_calibrate/ui/HMMCalibrateDialog.ui \
-         src/u_search/ui/HMMSearchDialog.ui
+FORMS += src/u_build/HMMBuildDialog.ui \
+         src/u_calibrate/HMMCalibrateDialog.ui \
+         src/u_search/HMMSearchDialog.ui
 SOURCES += src/HMMIO.cpp \
            src/HMMIOWorker.cpp \
            src/TaskLocalStorage.cpp \
diff --git a/src/plugins_3rdparty/hmm2/src/u_build/ui/HMMBuildDialog.ui b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialog.ui
similarity index 100%
rename from src/plugins_3rdparty/hmm2/src/u_build/ui/HMMBuildDialog.ui
rename to src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialog.ui
diff --git a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp
index 43cf0ce..a1dcd62 100644
--- a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp
@@ -19,14 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <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/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
@@ -42,6 +36,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "HMMBuildDialogController.h"
@@ -51,10 +46,12 @@
 
 namespace U2 {
 HMMBuildDialogController::HMMBuildDialogController(const QString& _pn, const MAlignment& _ma, QWidget* p) 
-:QDialog(p), ma(_ma), profileName(_pn)
-{
+    : QDialog(p),
+      ma(_ma),
+      profileName(_pn),
+      saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467762");
+    new HelpButton(this, buttonBox, "17470695");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
 
@@ -64,15 +61,15 @@ HMMBuildDialogController::HMMBuildDialogController(const QString& _pn, const MAl
         msaFileLabel->setHidden(true);
     }
 
+    initSaveController();
+
     okButton = buttonBox->button(QDialogButtonBox::Ok);
     cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
 
     connect(msaFileButton, SIGNAL(clicked()), SLOT(sl_msaFileClicked()));
-    connect(resultFileButton, SIGNAL(clicked()), SLOT(sl_resultFileClicked()));
     connect(okButton, SIGNAL(clicked()), SLOT(sl_okClicked()));
     
     task = NULL;
-
 }
 
 void HMMBuildDialogController::sl_msaFileClicked() {
@@ -87,15 +84,6 @@ void HMMBuildDialogController::sl_msaFileClicked() {
     msaFileEdit->setText(QFileInfo(lod.url).absoluteFilePath());
 }
 
-void HMMBuildDialogController::sl_resultFileClicked() {
-    LastUsedDirHelper lod(HMMIO::HMM_ID);
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Select file with HMM profile"), lod, HMMIO::getHMMFileFilter());
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    resultFileEdit->setText(QFileInfo(lod.url).absoluteFilePath());
-}
-
 void HMMBuildDialogController::sl_okClicked() {
     if (task != NULL) {
         accept(); //go to background
@@ -112,7 +100,7 @@ void HMMBuildDialogController::sl_okClicked() {
         errMsg = tr("Incorrect alignment file!");
         msaFileEdit->setFocus();
     }
-    QString outFile = resultFileEdit->text();
+    QString outFile = saveController->getSaveFileName();
     if (outFile.isEmpty() && errMsg.isEmpty()) {
         errMsg = tr("Incorrect HMM file!");
         resultFileEdit->setFocus();
@@ -185,6 +173,20 @@ void HMMBuildDialogController::sl_onProgressChanged() {
     statusLabel->setText(tr("Progress: %1%").arg(task->getProgress()));
 }
 
+void HMMBuildDialogController::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = HMMIO::HMM_ID;
+    config.defaultFormatId = HMMIO::HMM_ID;
+    config.fileDialogButton = resultFileButton;
+    config.fileNameEdit = resultFileEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file with HMM profile");
+
+    SaveDocumentController::SimpleFormatsInfo formats;
+    formats.addFormat(HMMIO::HMM_ID, tr("HMM models"), QStringList(HMMIO::HMM_EXT));
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
 
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.h b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.h
index 0c68cb9..54627a5 100644
--- a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.h
+++ b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.h
@@ -22,25 +22,21 @@
 #ifndef _U2_HMMBUILD_DIALOG_CONTROLLER_H_
 #define _U2_HMMBUILD_DIALOG_CONTROLLER_H_
 
-#include "uhmmbuild.h"
+#include <QDialog>
 
-#include <ui/ui_HMMBuildDialog.h>
+#include <ui_HMMBuildDialog.h>
 
 #include <U2Core/MAlignment.h>
 #include <U2Core/Task.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include "uhmmbuild.h"
 
 struct plan7_s;
 
 namespace U2 {
 
 class LoadDocumentTask;
-
+class SaveDocumentController;
 
 class HMMBuildDialogController : public QDialog, public Ui_HMMBuildDialog {
     Q_OBJECT
@@ -52,20 +48,20 @@ public slots:
 
 private slots:
     void sl_msaFileClicked();
-    void sl_resultFileClicked();
     void sl_okClicked();
 
     void sl_onStateChanged();
     void sl_onProgressChanged();
 
-
 private:
+    void initSaveController();
+
     MAlignment  ma;
     QString     profileName;
     Task*       task;
     QPushButton* okButton;
     QPushButton* cancelButton;
-
+    SaveDocumentController *saveController;
 };
 
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_calibrate/ui/HMMCalibrateDialog.ui b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialog.ui
similarity index 100%
rename from src/plugins_3rdparty/hmm2/src/u_calibrate/ui/HMMCalibrateDialog.ui
rename to src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialog.ui
diff --git a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp
index 84e26d3..4d6ead6 100644
--- a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp
@@ -19,14 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <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/AppContext.h>
 #include <U2Core/AppResources.h>
@@ -34,6 +28,7 @@
 
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "HMMCalibrateDialogController.h"
@@ -43,23 +38,22 @@
 namespace U2 {
 
 HMMCalibrateDialogController::HMMCalibrateDialogController(QWidget* w) 
-: QDialog(w)
-{
+    : QDialog(w),
+      saveController(NULL) {
     task = NULL;
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467763");
+    new HelpButton(this, buttonBox, "17470696");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Calibrate"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
 
     okButton = buttonBox->button(QDialogButtonBox::Ok);
     cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
     connect(hmmFileButton, SIGNAL(clicked()), SLOT(sl_hmmFileButtonClicked()));
-    connect(outFileButton, SIGNAL(clicked()), SLOT(sl_outFileButtonClicked()));
     connect(okButton, SIGNAL(clicked()), SLOT(sl_okButtonClicked()));
 
+    initSaveController();
 }
 
-
 void HMMCalibrateDialogController::sl_hmmFileButtonClicked() {
     LastUsedDirHelper lod(HMMIO::HMM_ID);
     lod.url = U2FileDialog::getOpenFileName(this, tr("Select file with HMM model"), lod, HMMIO::getHMMFileFilter());
@@ -69,15 +63,6 @@ void HMMCalibrateDialogController::sl_hmmFileButtonClicked() {
     hmmFileEdit->setText(QFileInfo(lod.url).absoluteFilePath());
 }
 
-void HMMCalibrateDialogController::sl_outFileButtonClicked() {
-    LastUsedDirHelper lod(HMMIO::HMM_ID);
-    lod.url= U2FileDialog::getSaveFileName(this, tr("Select file with HMM model"), lod, HMMIO::getHMMFileFilter());
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    outFileEdit->setText(QFileInfo(lod.url).absoluteFilePath());
-}
-
 void HMMCalibrateDialogController::sl_okButtonClicked() {
     if (task != NULL) {
         accept(); //go to background
@@ -113,7 +98,7 @@ void HMMCalibrateDialogController::sl_okButtonClicked() {
    }
 
    if (outputGroupBox->isChecked() && errMsg.isEmpty()) {
-        outFile = outFileEdit->text();        
+        outFile = saveController->getSaveFileName();
         if (outFile.isEmpty()) {
             errMsg = tr("Invalid output file name");
             outFileEdit->setFocus();
@@ -168,6 +153,21 @@ void HMMCalibrateDialogController::sl_onProgressChanged() {
     statusLabel->setText(tr("Progress: %1%").arg(task->getProgress()));
 }
 
+void HMMCalibrateDialogController::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = HMMIO::HMM_ID;
+    config.defaultFormatId = HMMIO::HMM_ID;
+    config.fileDialogButton = outFileButton;
+    config.fileNameEdit = outFileEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file with HMM model");
+
+    SaveDocumentController::SimpleFormatsInfo formats;
+    formats.addFormat(HMMIO::HMM_ID, tr("HMM models"), QStringList(HMMIO::HMM_EXT));
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
 void HMMCalibrateDialogController::reject() {
     if (task!=NULL) {
         task->cancel();
@@ -175,6 +175,4 @@ void HMMCalibrateDialogController::reject() {
     QDialog::reject();
 }
 
-
-
 }//namespace
diff --git a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.h b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.h
index fb82383..6d08786 100644
--- a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.h
+++ b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.h
@@ -22,18 +22,16 @@
 #ifndef _U2_HMMCALIBRATE_DIALOG_CONTROLLER_H_
 #define _U2_HMMCALIBRATE_DIALOG_CONTROLLER_H_
 
-#include "uhmmcalibrate.h"
-
-#include <ui/ui_HMMCalibrateDialog.h>
+#include <QDialog>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include "uhmmcalibrate.h"
+#include "ui_HMMCalibrateDialog.h"
 
 namespace U2 {
+
+class SaveDocumentController;
 class Task;
+
 class HMMCalibrateDialogController : public QDialog, public Ui_HMMCalibrateDialog {
     Q_OBJECT
 
@@ -45,16 +43,18 @@ public slots:
 
 private slots:
     void sl_hmmFileButtonClicked();
-    void sl_outFileButtonClicked();
     void sl_okButtonClicked();
 
     void sl_onStateChanged();
     void sl_onProgressChanged();
 
 private:
+    void initSaveController();
+
     Task* task;
     QPushButton* okButton;
     QPushButton* cancelButton;
+    SaveDocumentController *saveController;
 };
 
 } //namespace
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/ui/HMMSearchDialog.ui b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialog.ui
similarity index 100%
rename from src/plugins_3rdparty/hmm2/src/u_search/ui/HMMSearchDialog.ui
rename to src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialog.ui
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp
index c71a6c8..aa633cc 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp
@@ -57,7 +57,7 @@ HMMSearchDialogController::HMMSearchDialogController(const DNASequence& sequence
 
     searchTask = NULL;
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467764");
+    new HelpButton(this, buttonBox, "17470697");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.h b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.h
index 6773a0c..7586991 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.h
+++ b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.h
@@ -24,7 +24,7 @@
 
 #include "uhmmsearch.h"
 
-#include <ui/ui_HMMSearchDialog.h>
+#include <ui_HMMSearchDialog.h>
 
 #include <U2Core/Task.h>
 #include <U2Core/DocumentModel.h>
diff --git a/src/plugins_3rdparty/hmm2/transl/english.ts b/src/plugins_3rdparty/hmm2/transl/english.ts
index 44575d3..16ca0fd 100644
--- a/src/plugins_3rdparty/hmm2/transl/english.ts
+++ b/src/plugins_3rdparty/hmm2/transl/english.ts
@@ -4,43 +4,43 @@
 <context>
     <name>HMMBuildDialog</name>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="32"/>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="49"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="32"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="49"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="14"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="14"/>
         <source>HMM Build</source>
         <translation>HMM Build</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="22"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="22"/>
         <source>Multiple alignment file:</source>
         <translation>Multiple alignment file:</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="39"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="39"/>
         <source>File to save HMM profile:</source>
         <translation>File to save HMM profile:</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="58"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="58"/>
         <source>Expert options</source>
         <translation>Expert options</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="70"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="70"/>
         <source>Name can be any string of non-whitespace characters (e.g. one ”word”).</source>
         <translation>Name can be any string of non-whitespace characters (e.g. one ”word”).</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="73"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="73"/>
         <source>Name this HMM:</source>
         <translation>Name this HMM:</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="84"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="84"/>
         <source>
              By default, the model is configured to find one or more nonoverlapping alignments to the complete model:
              multiple global alignments with respect to the model, and local with respect to the sequence
@@ -49,12 +49,12 @@
 multiple global alignments with respect to the model, and local with respect to the sequence</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="90"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="90"/>
         <source>Default (hmmls) behaviour:</source>
         <translation>Default (hmmls) behaviour:</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="120"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="120"/>
         <source>
              Configure the model for finding multiple domains per sequence, where each domain can be a local (fragmentary) alignment.
              This is analogous to the old hmmfs program of HMMER 1.
@@ -64,12 +64,12 @@ This is analogous to the old hmmfs program of HMMER 1.
 </translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="126"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="126"/>
         <source>Emulate hmmfs behaviour:</source>
         <translation>Emulate hmmfs behaviour:</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="153"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="153"/>
         <source>
              Configure the model for finding a single global alignment to a target sequence,
              analogous to the old hmms program of HMMER 1.
@@ -79,12 +79,12 @@ analogous to the old hmms program of HMMER 1.
 </translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="159"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="159"/>
         <source>Emulate hmms behaviour:</source>
         <translation>Emulate hmms behaviour:</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="186"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="186"/>
         <source>
              Configure the model for finding a single local alignment per target sequence.
              This is analogous to the standard Smith/Waterman algorithm or the hmmsw program of HMMER 1.
@@ -94,7 +94,7 @@ This is analogous to the standard Smith/Waterman algorithm or the hmmsw program
 </translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="192"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="192"/>
         <source>Emulate hmmsw behaviour:</source>
         <translation>Emulate hmmsw behaviour:</translation>
     </message>
@@ -135,23 +135,23 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>HMMCalibrateDialog</name>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="22"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="22"/>
         <source>HMM file: </source>
         <translation>HMM file: </translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="32"/>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="297"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="32"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="297"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="41"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="41"/>
         <source>Expert options</source>
         <translation>Expert options</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="53"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="53"/>
         <source>
              Fix the length of the random sequences to n
                  , where n is a positive (and reasonably sized) integer. 
@@ -160,17 +160,17 @@ The default is instead to generate sequences with a variety of different lengths
 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_calibrate/ui/HMMCalibrateDialog.ui" line="59"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="59"/>
         <source>Fix the length of the random sequences to:</source>
         <translation>Fix the length of the random sequences to:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="104"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="104"/>
         <source>Mean length of the synthetic sequences:</source>
         <translation>Mean length of the synthetic sequences:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="146"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="146"/>
         <source>
              Number of synthetic sequences.
              If n is less than about 1000, the fit to the EVD may fail
@@ -182,12 +182,12 @@ 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_calibrate/ui/HMMCalibrateDialog.ui" line="153"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="153"/>
         <source>Number of synthetic sequences:</source>
         <translation>Number of synthetic sequences:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="195"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="195"/>
         <source>
              Standard deviation of the synthetic sequence length.
              A positive number. The default is 200.
@@ -199,12 +199,12 @@ Note that the Gaussian is left-truncated so that no sequences have lengths less
 </translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="202"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="202"/>
         <source>Standard deviation:</source>
         <translation>Standard deviation:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="238"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="238"/>
         <source>
              The random seed, where n is a positive integer. 
              The default is to use time() to generate a different seed for each run, 
@@ -216,27 +216,27 @@ which means that two different runs of hmmcalibrate on the same HMM will give sl
 You can use this option to generate reproducible results for different hmmcalibrate runs on the same HMM.</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="245"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="245"/>
         <source>Random seed:</source>
         <translation>Random seed:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="278"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="278"/>
         <source>Save calibrated profile to file</source>
         <translation>Save calibrated profile to file</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="290"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="290"/>
         <source>Save calibrated profile to file:</source>
         <translation>Save calibrated profile to file:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="14"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="14"/>
         <source>HMM Calibrate</source>
         <translation>HMM Calibrate</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="101"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="101"/>
         <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>
@@ -244,86 +244,86 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>HMMSearchDialog</name>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="23"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="23"/>
         <source>HMM Search</source>
         <translation>HMM Search</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="37"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="37"/>
         <source>File with HMM profile:</source>
         <translation>File with HMM profile:</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="47"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="47"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="62"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="62"/>
         <source>Expert options</source>
         <translation>Expert options</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="77"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="80"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="83"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="226"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="229"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="232"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="77"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="80"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="83"/>
+        <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"/>
         <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>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="86"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="86"/>
         <source>Filter results with E-value greater then:</source>
         <translation>Filter results with E-value greater then:</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="119"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="122"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="125"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="135"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="138"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="141"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="119"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="122"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="125"/>
+        <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"/>
         <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>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="128"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="128"/>
         <source>Filter results with Score lower than:</source>
         <translation>Filter results with Score lower than:</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="188"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="191"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="194"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="210"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="213"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="216"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="188"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="191"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="194"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="210"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="213"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="216"/>
         <source>Calculate the E-value scores as if we had seen a sequence database of <n> sequences.</source>
         <translation>Calculate the E-value scores as if we had seen a sequence database of <n> sequences.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="219"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="219"/>
         <source>Number of sequences in dababase:</source>
         <translation>Number of sequences in dababase:</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="277"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="280"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="283"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="277"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="280"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="283"/>
         <source>Variants of algorithm</source>
         <translation>Variants of algorithm</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="241"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="241"/>
         <source>1E</source>
         <translation>1e</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="257"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="257"/>
         <source>Algorithm</source>
         <translation></translation>
     </message>
@@ -458,102 +458,107 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::HMMBuildDialogController</name>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="58"/>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="175"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="55"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="163"/>
         <source>Build</source>
         <translation>Build</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="59"/>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="176"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="56"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="164"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="80"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="77"/>
         <source>Select file with alignment</source>
         <translation>Select file with alignment</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="92"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="183"/>
         <source>Select file with HMM profile</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="112"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="100"/>
         <source>Incorrect alignment file!</source>
         <translation>Incorrect alignment file!</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="117"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="105"/>
         <source>Incorrect HMM file!</source>
         <translation>Incorrect HMM file!</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="133"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="121"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="142"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="130"/>
         <source>Starting build process</source>
         <translation>Starting build process</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="145"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="133"/>
         <source>Hide</source>
         <translation>Hide</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="146"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="134"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="169"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="157"/>
         <source>HMM build finished with errors: %1</source>
         <translation>HMM build finished with errors: %1</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="171"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="159"/>
         <source>HMM build canceled</source>
         <translation>HMM build canceled</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="173"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="161"/>
         <source>HMM build finished successfuly!</source>
         <translation>HMM build finished successfuly!</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="185"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="173"/>
         <source>Progress: %1%</source>
         <translation>Progress: %1%</translation>
     </message>
+    <message>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="186"/>
+        <source>HMM models</source>
+        <translation type="unfinished">HMM models</translation>
+    </message>
 </context>
 <context>
     <name>U2::HMMBuildTask</name>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="325"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="327"/>
         <source>Build HMM profile '%1'</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="342"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="344"/>
         <source>Multiple alignment is empty</source>
         <translation>Multiple alignment is empty</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="346"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="348"/>
         <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="351"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="353"/>
         <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="359"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="361"/>
         <source>Error creating MSA structure</source>
         <translation>Error creating MSA structure</translation>
     </message>
@@ -561,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="310"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="312"/>
         <source>none</source>
         <translation>none</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="196"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="198"/>
         <source>Build HMM profile '%1' -> '%2'</source>
         <translation>Build HMM profile '%1' -> '%2'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="209"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="211"/>
         <source>Error reading alignment file</source>
         <translation>Error reading alignment file</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="226"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="228"/>
         <source>Build HMM profile to '%1'</source>
         <translation>Build HMM profile to '%1'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="251"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="253"/>
         <source>Incorrect input file</source>
         <translation>Incorrect input file</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="256"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="258"/>
         <source>Alignment object not found!</source>
         <translation>Alignment object not found!</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="298"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="300"/>
         <source>Source alignment</source>
         <translation>Source alignment</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="299"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="301"/>
         <source>Profile name</source>
         <translation>Profile name</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="301"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="303"/>
         <source>Task was not finished</source>
         <translation>Task was not finished</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="306"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="308"/>
         <source>Profile file</source>
         <translation>Profile file</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="307"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="309"/>
         <source>Expert options</source>
         <translation>Expert options</translation>
     </message>
@@ -619,78 +624,83 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::HMMCalibrateDialogController</name>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="51"/>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="160"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="46"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="145"/>
         <source>Calibrate</source>
         <translation>Calibrate</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="52"/>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="161"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="47"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="146"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="65"/>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="74"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="59"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="163"/>
         <source>Select file with HMM model</source>
         <translation>Select file with HMM model</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="95"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="80"/>
         <source>Incorrect HMM file!</source>
         <translation>Incorrect HMM file!</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="101"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="86"/>
         <source>Illegal fixed length value!</source>
         <translation>Illegal fixed length value!</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="118"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="103"/>
         <source>Invalid output file name</source>
         <translation>Invalid output file name</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="124"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="109"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="134"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="119"/>
         <source>Starting calibration process</source>
         <translation>Starting calibration process</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="137"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="122"/>
         <source>Hide</source>
         <translation>Hide</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="138"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="123"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="154"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="139"/>
         <source>Calibration finished with errors: %1</source>
         <translation>Calibration finished with errors: %1</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="156"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="141"/>
         <source>Calibration was cancelled</source>
         <translation>Calibration was cancelled</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="158"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="143"/>
         <source>Calibration finished successfuly!</source>
         <translation>Calibration finished successfuly!</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="168"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="153"/>
         <source>Progress: %1%</source>
         <translation>Progress: %1%</translation>
     </message>
+    <message>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="166"/>
+        <source>HMM models</source>
+        <translation type="unfinished">HMM models</translation>
+    </message>
 </context>
 <context>
     <name>U2::HMMCalibrateParallelSubTask</name>
diff --git a/src/plugins_3rdparty/hmm2/transl/russian.ts b/src/plugins_3rdparty/hmm2/transl/russian.ts
index f29991b..7554a56 100644
--- a/src/plugins_3rdparty/hmm2/transl/russian.ts
+++ b/src/plugins_3rdparty/hmm2/transl/russian.ts
@@ -4,43 +4,43 @@
 <context>
     <name>HMMBuildDialog</name>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="32"/>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="49"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="32"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="49"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="14"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="14"/>
         <source>HMM Build</source>
         <translation>Построение HMM профайла</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="22"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="22"/>
         <source>Multiple alignment file:</source>
         <translation>Файл множественного выравнивания:</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="39"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="39"/>
         <source>File to save HMM profile:</source>
         <translation>Файл HMM профайла:</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="58"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="58"/>
         <source>Expert options</source>
         <translation>Дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="70"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="70"/>
         <source>Name can be any string of non-whitespace characters (e.g. one ”word”).</source>
         <translation>Удобное для человека имя профайла, не должно содержать пропусков.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="73"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="73"/>
         <source>Name this HMM:</source>
         <translation>Имя HMM профайла:</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="84"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="84"/>
         <source>
              By default, the model is configured to find one or more nonoverlapping alignments to the complete model:
              multiple global alignments with respect to the model, and local with respect to the sequence
@@ -49,12 +49,12 @@
 множественные выравнивания глобальные относительно профайла, локальные относительно последовательности</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="90"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="90"/>
         <source>Default (hmmls) behaviour:</source>
         <translation>Стандартное поведение (hmmls):</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="120"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="120"/>
         <source>
              Configure the model for finding multiple domains per sequence, where each domain can be a local (fragmentary) alignment.
              This is analogous to the old hmmfs program of HMMER 1.
@@ -63,12 +63,12 @@
 Это аналог программы hmmfs пакета HMMER 1.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="126"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="126"/>
         <source>Emulate hmmfs behaviour:</source>
         <translation>Эмуляция hmmfs:</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="153"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="153"/>
         <source>
              Configure the model for finding a single global alignment to a target sequence,
              analogous to the old hmms program of HMMER 1.
@@ -77,12 +77,12 @@
 Это аналог программы hmms пакета HMMER 1.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="159"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="159"/>
         <source>Emulate hmms behaviour:</source>
         <translation>Эмуляция hmms:</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="186"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="186"/>
         <source>
              Configure the model for finding a single local alignment per target sequence.
              This is analogous to the standard Smith/Waterman algorithm or the hmmsw program of HMMER 1.
@@ -91,7 +91,7 @@
 Это аналог стандартного алгоритма Смита-Ватермана или программы hmmsw пакета HMMER 1.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/ui/HMMBuildDialog.ui" line="192"/>
+        <location filename="../src/u_build/HMMBuildDialog.ui" line="192"/>
         <source>Emulate hmmsw behaviour:</source>
         <translation>Эмуляция hmmsw:</translation>
     </message>
@@ -133,23 +133,23 @@
 <context>
     <name>HMMCalibrateDialog</name>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="22"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="22"/>
         <source>HMM file: </source>
         <translation>Файл c HMM профайлом:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="32"/>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="297"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="32"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="297"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="41"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="41"/>
         <source>Expert options</source>
         <translation>Дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="53"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="53"/>
         <source>
              Fix the length of the random sequences to n
                  , where n is a positive (and reasonably sized) integer. 
@@ -158,17 +158,17 @@ The default is instead to generate sequences with a variety of different lengths
 По умолчанию, генерируются последовательности с нормальным (Гауссовым) распределением по длине.</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="59"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="59"/>
         <source>Fix the length of the random sequences to:</source>
         <translation>Фиксированная длина случайных последовательностей:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="104"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="104"/>
         <source>Mean length of the synthetic sequences:</source>
         <translation>Средняя длина последовательностей:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="146"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="146"/>
         <source>
              Number of synthetic sequences.
              If n is less than about 1000, the fit to the EVD may fail
@@ -178,12 +178,12 @@ The default is instead to generate sequences with a variety of different lengths
 Значение по умолчанию (5000) было эмпирически определено как компромисс между точностью и временем вычисления.</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="153"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="153"/>
         <source>Number of synthetic sequences:</source>
         <translation>Количество последовательностей:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="195"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="195"/>
         <source>
              Standard deviation of the synthetic sequence length.
              A positive number. The default is 200.
@@ -193,12 +193,12 @@ The default is instead to generate sequences with a variety of different lengths
 Должно быть больше нуля, по умолчанию 200.</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="202"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="202"/>
         <source>Standard deviation:</source>
         <translation>Стандартное отклонение:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="238"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="238"/>
         <source>
              The random seed, where n is a positive integer. 
              The default is to use time() to generate a different seed for each run, 
@@ -209,27 +209,27 @@ The default is instead to generate sequences with a variety of different lengths
 Вы можете использовать эту опцию для получения воспроизводимых результатов калибровки.</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="245"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="245"/>
         <source>Random seed:</source>
         <translation>Случайная затравка:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="278"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="278"/>
         <source>Save calibrated profile to file</source>
         <translation>Сохранить откалиброванный HMM профайл</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="290"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="290"/>
         <source>Save calibrated profile to file:</source>
         <translation>Сохранить откалиброванный HMM профайл:</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="14"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="14"/>
         <source>HMM Calibrate</source>
         <translation>Калибровать HMM профайл</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/ui/HMMCalibrateDialog.ui" line="101"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialog.ui" line="101"/>
         <source>Mean length of the synthetic sequences, positive real number. The default value is 325.</source>
         <translation>Средняя длина синтетических последовательностей.
 Положительное число, 325 по умолчанию.</translation>
@@ -238,86 +238,86 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>HMMSearchDialog</name>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="23"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="23"/>
         <source>HMM Search</source>
         <translation>Поиск HMM сигналов в последовательности</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="37"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="37"/>
         <source>File with HMM profile:</source>
         <translation>Файл HMM профайла:</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="47"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="47"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="62"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="62"/>
         <source>Expert options</source>
         <translation>Дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="77"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="80"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="83"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="226"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="229"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="232"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="77"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="80"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="83"/>
+        <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"/>
         <source>E-value filtering can be used to exclude low-probability hits from result.</source>
         <translation>Отбрасывание результатов по Е-величине помогает исключить мало-вероятные сигналы.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="86"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="86"/>
         <source>Filter results with E-value greater then:</source>
         <translation>Отбрасывать результаты с Е-величиной более:</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="119"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="122"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="125"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="135"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="138"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="141"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="119"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="122"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="125"/>
+        <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"/>
         <source>Score based filtering is an alternative to E-value filtering to exclude low-probability hits from result.</source>
         <translation>Помогает исключить мало-вероятные сигналы.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="128"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="128"/>
         <source>Filter results with Score lower than:</source>
         <translation>Отбрасывать результаты с итоговой суммой меньше:</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="188"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="191"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="194"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="210"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="213"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="216"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="188"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="191"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="194"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="210"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="213"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="216"/>
         <source>Calculate the E-value scores as if we had seen a sequence database of <n> sequences.</source>
         <translation>Считать Е-величину как если бы имелась база из <n> последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="219"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="219"/>
         <source>Number of sequences in dababase:</source>
         <translation>Количество последовательностей в базе:</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="277"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="280"/>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="283"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="277"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="280"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="283"/>
         <source>Variants of algorithm</source>
         <translation>Версии алгоритма</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="241"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="241"/>
         <source>1E</source>
         <translation>1e</translation>
     </message>
     <message>
-        <location filename="../src/u_search/ui/HMMSearchDialog.ui" line="257"/>
+        <location filename="../src/u_search/HMMSearchDialog.ui" line="257"/>
         <source>Algorithm</source>
         <translation>Алгоритм</translation>
     </message>
@@ -448,102 +448,107 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::HMMBuildDialogController</name>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="58"/>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="175"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="55"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="163"/>
         <source>Build</source>
         <translation>Построить</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="59"/>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="176"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="56"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="164"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="80"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="77"/>
         <source>Select file with alignment</source>
         <translation>Выберете файл с выравниванием</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="92"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="183"/>
         <source>Select file with HMM profile</source>
         <translation>Выберете файл с HMM профайлом</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="112"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="100"/>
         <source>Incorrect alignment file!</source>
         <translation>Некорректный файл выравнивания!</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="117"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="105"/>
         <source>Incorrect HMM file!</source>
         <translation>Укажите файл с HMM профайлом!</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="133"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="121"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="142"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="130"/>
         <source>Starting build process</source>
         <translation>Начинается построение</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="145"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="133"/>
         <source>Hide</source>
         <translation>Скрыть</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="146"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="134"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="169"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="157"/>
         <source>HMM build finished with errors: %1</source>
         <translation>Построение HMM профайла завершилось с ошибкой: %1</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="171"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="159"/>
         <source>HMM build canceled</source>
         <translation>Построение HMM профайла отменено</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="173"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="161"/>
         <source>HMM build finished successfuly!</source>
         <translation>HMM профайл успешно построен!</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="185"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="173"/>
         <source>Progress: %1%</source>
         <translation>Прогресс: %1%</translation>
     </message>
+    <message>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="186"/>
+        <source>HMM models</source>
+        <translation type="unfinished">Профайлы HMM</translation>
+    </message>
 </context>
 <context>
     <name>U2::HMMBuildTask</name>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="325"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="327"/>
         <source>Build HMM profile '%1'</source>
         <translation>Построение HMM профала '%1'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="342"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="344"/>
         <source>Multiple alignment is empty</source>
         <translation>Выравнивание не содержит данных</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="346"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="348"/>
         <source>Multiple alignment is of 0 length</source>
         <translation>Выравнивание длины 0</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="351"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="353"/>
         <source>Invalid alphabet! Only amino and nucleic alphabets are supported</source>
         <translation>Неподдерживаемый тип алфавита</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="359"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="361"/>
         <source>Error creating MSA structure</source>
         <translation>Недостаточно памяти для построения выравнивания</translation>
     </message>
@@ -551,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="310"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="312"/>
         <source>none</source>
         <translation>нет</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="196"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="198"/>
         <source>Build HMM profile '%1' -> '%2'</source>
         <translation>Построение HMM профайла '%1'->'%2'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="209"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="211"/>
         <source>Error reading alignment file</source>
         <translation>Ошибка чтения файла</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="226"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="228"/>
         <source>Build HMM profile to '%1'</source>
         <translation>Построение HMM профайла '%1'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="251"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="253"/>
         <source>Incorrect input file</source>
         <translation>Неправильный входной файл</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="256"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="258"/>
         <source>Alignment object not found!</source>
         <translation>Объект выравнивания не найден!</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="298"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="300"/>
         <source>Source alignment</source>
         <translation>Исходное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="299"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="301"/>
         <source>Profile name</source>
         <translation>Имя профайла</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="301"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="303"/>
         <source>Task was not finished</source>
         <translation>Задача была не завершена</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="306"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="308"/>
         <source>Profile file</source>
         <translation>Файл</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="307"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="309"/>
         <source>Expert options</source>
         <translation>Дополнительные опции</translation>
     </message>
@@ -609,78 +614,83 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::HMMCalibrateDialogController</name>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="51"/>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="160"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="46"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="145"/>
         <source>Calibrate</source>
         <translation>Калибровать</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="52"/>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="161"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="47"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="146"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="65"/>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="74"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="59"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="163"/>
         <source>Select file with HMM model</source>
         <translation>Выбор HMM профайла для калибровки</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="95"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="80"/>
         <source>Incorrect HMM file!</source>
         <translation>Не указан файл c исходным HMM профайлом!</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="101"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="86"/>
         <source>Illegal fixed length value!</source>
         <translation>Некорректное значение фиксированной длины последовательностей!</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="118"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="103"/>
         <source>Invalid output file name</source>
         <translation>Не указан файл для сохранения результата</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="124"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="109"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="134"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="119"/>
         <source>Starting calibration process</source>
         <translation>Начинается калибровка</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="137"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="122"/>
         <source>Hide</source>
         <translation>Скрыть</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="138"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="123"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="154"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="139"/>
         <source>Calibration finished with errors: %1</source>
         <translation>Калибровка завершена с ошибкой: %1</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="156"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="141"/>
         <source>Calibration was cancelled</source>
         <translation>Калибровка отменена</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="158"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="143"/>
         <source>Calibration finished successfuly!</source>
         <translation>Калибровка успешно завершена!</translation>
     </message>
     <message>
-        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="168"/>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="153"/>
         <source>Progress: %1%</source>
         <translation>Прогресс: %1%</translation>
     </message>
+    <message>
+        <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="166"/>
+        <source>HMM models</source>
+        <translation type="unfinished">Профайлы HMM</translation>
+    </message>
 </context>
 <context>
     <name>U2::HMMCalibrateParallelSubTask</name>
diff --git a/src/plugins_3rdparty/hmm3/CMakeLists.txt b/src/plugins_3rdparty/hmm3/CMakeLists.txt
new file mode 100644
index 0000000..cfceb75
--- /dev/null
+++ b/src/plugins_3rdparty/hmm3/CMakeLists.txt
@@ -0,0 +1,5 @@
+set(UGENE_PLUGIN_NAME hmm3)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-write-strings -Wno-format")
+
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/hmm3/hmm3.pro b/src/plugins_3rdparty/hmm3/hmm3.pro
index 663e0b6..0352b94 100644
--- a/src/plugins_3rdparty/hmm3/hmm3.pro
+++ b/src/plugins_3rdparty/hmm3/hmm3.pro
@@ -14,6 +14,7 @@ HEADERS += src/uHMM3Plugin.h \
            src/phmmer/uhmm3phmmer.h \
            src/phmmer/uHMM3PhmmerDialogImpl.h \
            src/phmmer/uhmm3PhmmerTask.h \
+           src/search/Hmmer3SearchWorkflowTask.h \
            src/search/uhmm3search.h \
            src/search/uHMM3SearchDialogImpl.h \
            src/search/uhmm3SearchResult.h \
@@ -58,9 +59,9 @@ HEADERS += src/uHMM3Plugin.h \
            src/workers/HMM3IOWorker.h \
            src/workers/HMM3BuildWorker.h \
            src/workers/HMM3SearchWorker.h
-FORMS += src/build/ui/UHMM3BuildDialog.ui \
-         src/phmmer/ui/UHMM3PhmmerDialog.ui \
-         src/search/ui/UHMM3SearchDialog.ui
+FORMS += src/build/UHMM3BuildDialog.ui \
+         src/phmmer/UHMM3PhmmerDialog.ui \
+         src/search/UHMM3SearchDialog.ui
 SOURCES += src/uHMM3Plugin.cpp \
            src/build/uhmm3build.cpp \
            src/build/uHMM3BuildDialogImpl.cpp \
@@ -95,6 +96,7 @@ SOURCES += src/uHMM3Plugin.cpp \
            src/phmmer/uhmm3phmmer.cpp \
            src/phmmer/uHMM3PhmmerDialogImpl.cpp \
            src/phmmer/uhmm3PhmmerTask.cpp \
+           src/search/Hmmer3SearchWorkflowTask.cpp \
            src/search/uhmm3search.cpp \
            src/search/uHMM3SearchDialogImpl.cpp \
            src/search/uhmm3SearchResult.cpp \
diff --git a/src/plugins_3rdparty/hmm3/src/build/UHMM3BuildDialog.ui b/src/plugins_3rdparty/hmm3/src/build/UHMM3BuildDialog.ui
new file mode 100644
index 0000000..0188fa4
--- /dev/null
+++ b/src/plugins_3rdparty/hmm3/src/build/UHMM3BuildDialog.ui
@@ -0,0 +1,898 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>UHMM3BuildDialog</class>
+ <widget class="QDialog" name="UHMM3BuildDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>816</width>
+    <height>392</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>691</width>
+    <height>309</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>HMM3 Build</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_11">
+   <property name="sizeConstraint">
+    <enum>QLayout::SetMinAndMaxSize</enum>
+   </property>
+   <item>
+    <widget class="QTabWidget" name="dlgMainTabWidget">
+     <property name="cursor">
+      <cursorShape>ArrowCursor</cursorShape>
+     </property>
+     <property name="tabPosition">
+      <enum>QTabWidget::North</enum>
+     </property>
+     <property name="tabShape">
+      <enum>QTabWidget::Rounded</enum>
+     </property>
+     <property name="currentIndex">
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="inputAndOutputTab">
+      <attribute name="title">
+       <string>Input and output</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_2">
+       <item row="0" column="0">
+        <layout class="QVBoxLayout" name="verticalLayout_7">
+         <item>
+          <layout class="QGridLayout" name="gridLayout">
+           <item row="0" column="0">
+            <widget class="QLabel" name="maLoadFromFileLabel">
+             <property name="text">
+              <string>Input alignment file</string>
+             </property>
+            </widget>
+           </item>
+           <item row="0" column="1">
+            <widget class="QLineEdit" name="maLoadFromFileEdit"/>
+           </item>
+           <item row="0" column="2">
+            <widget class="QToolButton" name="maOpenFileButton">
+             <property name="text">
+              <string>...</string>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="0">
+            <widget class="QLabel" name="outHmmfileLabel">
+             <property name="text">
+              <string>Build to profile</string>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="1">
+            <widget class="QLineEdit" name="outHmmfileEdit"/>
+           </item>
+           <item row="1" column="2">
+            <widget class="QToolButton" name="outHmmfileToolButton">
+             <property name="text">
+              <string>...</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+       <item row="1" column="1">
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>77</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="mcTab">
+      <attribute name="title">
+       <string>Construction strategies</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout">
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_2">
+           <item>
+            <widget class="QRadioButton" name="mcFastRadioButton">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="minimumSize">
+              <size>
+               <width>100</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="toolTip">
+              <string>assign cols w/ >= symfrac residues as consensus</string>
+             </property>
+             <property name="text">
+              <string>fast</string>
+             </property>
+             <property name="checked">
+              <bool>true</bool>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="mcFastSymfracLabel">
+             <property name="toolTip">
+              <string/>
+             </property>
+             <property name="text">
+              <string>Sym fraction</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QDoubleSpinBox" name="symfracDoubleSpinBox">
+             <property name="maximum">
+              <double>1.000000000000000</double>
+             </property>
+             <property name="singleStep">
+              <double>0.050000000000000</double>
+             </property>
+             <property name="value">
+              <double>0.500000000000000</double>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <widget class="QRadioButton" name="mcHandRadioButton">
+           <property name="toolTip">
+            <string>Manual construction</string>
+           </property>
+           <property name="text">
+            <string>Hand (requires reference annotation)</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_7">
+           <item>
+            <widget class="QLabel" name="fragthreshLabel">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Tag sequence as a fragment, if L < x*<L>, where x is:</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QDoubleSpinBox" name="fragThreshDoubleSpinBox">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="maximum">
+              <double>1.000000000000000</double>
+             </property>
+             <property name="singleStep">
+              <double>0.100000000000000</double>
+             </property>
+             <property name="value">
+              <double>0.500000000000000</double>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <spacer name="verticalSpacer_2">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>110</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="rswTab">
+      <attribute name="title">
+       <string>Relative weighting</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_4">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_3">
+         <item>
+          <widget class="QRadioButton" name="wpbRSWRadioButton">
+           <property name="text">
+            <string>Henikoff position-based weights</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QRadioButton" name="wgscRSWRadioButton">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="text">
+            <string>Gerstein/Sonnhammer/Chothia tree weights</string>
+           </property>
+           <property name="checked">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_3">
+           <item>
+            <widget class="QRadioButton" name="wblosumRSWRadioButton">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="minimumSize">
+              <size>
+               <width>230</width>
+               <height>0</height>
+              </size>
+             </property>
+             <property name="text">
+              <string>Henikoff simple filter weights</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="widRSWLabel">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="text">
+              <string>Identity cutoff</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QDoubleSpinBox" name="widRSWDoubleSpinBox">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="maximum">
+              <double>1.000000000000000</double>
+             </property>
+             <property name="singleStep">
+              <double>0.050000000000000</double>
+             </property>
+             <property name="value">
+              <double>0.620000000000000</double>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <widget class="QRadioButton" name="wnoneRSWRadioButton">
+           <property name="text">
+            <string>Skip relative weighting; set all to 1</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QRadioButton" name="wgivenRSWRadioButton">
+           <property name="text">
+            <string>Use weights given in alignment file</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </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 class="QWidget" name="eswTab">
+      <attribute name="title">
+       <string>Effective weighting</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_9">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_8">
+         <item>
+          <widget class="QRadioButton" name="eentESWRadioButton">
+           <property name="text">
+            <string>Adjust effective sequence number to achieve relative entropy target</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_4">
+           <item>
+            <spacer name="horizontalSpacer_8">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeType">
+              <enum>QSizePolicy::Fixed</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>18</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QLabel" name="ereLabel">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Minimum relative entropy/position</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QDoubleSpinBox" name="ereESWDoubleSpinBox">
+             <property name="enabled">
+              <bool>true</bool>
+             </property>
+             <property name="minimum">
+              <double>0.000000000000000</double>
+             </property>
+             <property name="maximum">
+              <double>999999999.000000000000000</double>
+             </property>
+             <property name="value">
+              <double>0.000000000000000</double>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_6">
+           <item>
+            <spacer name="horizontalSpacer_9">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeType">
+              <enum>QSizePolicy::Fixed</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>18</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QLabel" name="esigmaLabel">
+             <property name="enabled">
+              <bool>true</bool>
+             </property>
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Sigma parameter</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QDoubleSpinBox" name="esigmaDoubleSpinBox">
+             <property name="enabled">
+              <bool>true</bool>
+             </property>
+             <property name="minimum">
+              <double>0.010000000000000</double>
+             </property>
+             <property name="maximum">
+              <double>999999999.000000000000000</double>
+             </property>
+             <property name="value">
+              <double>45.000000000000000</double>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_8">
+           <item>
+            <widget class="QRadioButton" name="eclustESWRadioButton">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Use number of single linkage clusters as effective</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QLabel" name="eidESWLabel">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="text">
+              <string>Fractional identity cutoff</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QDoubleSpinBox" name="eidESWDoubleSpinBox">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="maximum">
+              <double>1.000000000000000</double>
+             </property>
+             <property name="singleStep">
+              <double>0.050000000000000</double>
+             </property>
+             <property name="value">
+              <double>0.620000000000000</double>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <widget class="QRadioButton" name="enoneESWRadioButton">
+           <property name="text">
+            <string>Use number of sequences as effective</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_5">
+           <item>
+            <widget class="QRadioButton" name="esetESWRadioButton">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Effective sequence number for all models to</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QDoubleSpinBox" name="esetESWDoubleSpinBox">
+             <property name="enabled">
+              <bool>false</bool>
+             </property>
+             <property name="minimum">
+              <double>0.010000000000000</double>
+             </property>
+             <property name="maximum">
+              <double>999999999.000000000000000</double>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <spacer name="verticalSpacer_4">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>650</width>
+           <height>0</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="evalCalibratonTab">
+      <attribute name="title">
+       <string>E-value calibration</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_10">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_5">
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_17">
+           <item>
+            <widget class="QLabel" name="emlLabel">
+             <property name="enabled">
+              <bool>true</bool>
+             </property>
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Length of sequences for MSV Gumbel mu fit</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QSpinBox" name="emlSpinBox">
+             <property name="enabled">
+              <bool>true</bool>
+             </property>
+             <property name="minimum">
+              <number>1</number>
+             </property>
+             <property name="maximum">
+              <number>999999999</number>
+             </property>
+             <property name="value">
+              <number>200</number>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_18">
+           <item>
+            <widget class="QLabel" name="emnLabel">
+             <property name="enabled">
+              <bool>true</bool>
+             </property>
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Number of sequences for MSV Gumbel mu fit</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QSpinBox" name="emnSpinBox">
+             <property name="enabled">
+              <bool>true</bool>
+             </property>
+             <property name="minimum">
+              <number>1</number>
+             </property>
+             <property name="maximum">
+              <number>999999999</number>
+             </property>
+             <property name="value">
+              <number>200</number>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_10">
+           <item>
+            <widget class="QLabel" name="evlLabel">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Length of sequences for Viterbi Gumbel mu fit</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QSpinBox" name="evlSpinBox">
+             <property name="minimum">
+              <number>1</number>
+             </property>
+             <property name="maximum">
+              <number>999999999</number>
+             </property>
+             <property name="value">
+              <number>200</number>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_11">
+           <item>
+            <widget class="QLabel" name="evnLabel">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Number of sequences for Viterbi Gumbel mu fit</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QSpinBox" name="evnSpinBox">
+             <property name="minimum">
+              <number>1</number>
+             </property>
+             <property name="maximum">
+              <number>999999999</number>
+             </property>
+             <property name="value">
+              <number>200</number>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_12">
+           <item>
+            <widget class="QLabel" name="eflLabel">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Length of sequences for Forward exp tail mu fit</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QSpinBox" name="eflSpinBox">
+             <property name="minimum">
+              <number>1</number>
+             </property>
+             <property name="maximum">
+              <number>999999999</number>
+             </property>
+             <property name="value">
+              <number>100</number>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_13">
+           <item>
+            <widget class="QLabel" name="efnLabel">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Number of sequences for Forward exp tail mu fit</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QSpinBox" name="efnSpinBox">
+             <property name="minimum">
+              <number>1</number>
+             </property>
+             <property name="maximum">
+              <number>999999999</number>
+             </property>
+             <property name="value">
+              <number>200</number>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_14">
+           <item>
+            <widget class="QLabel" name="label">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Tail mass for Forward exponential tail mu fit</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QDoubleSpinBox" name="eftDoubleSpinBox">
+             <property name="minimum">
+              <double>0.010000000000000</double>
+             </property>
+             <property name="maximum">
+              <double>0.990000000000000</double>
+             </property>
+             <property name="singleStep">
+              <double>0.010000000000000</double>
+             </property>
+             <property name="value">
+              <double>0.040000000000000</double>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <spacer name="verticalSpacer_5">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>23</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="otherTab">
+      <attribute name="title">
+       <string>Other</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_12">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_6">
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_15">
+           <item>
+            <widget class="QLabel" name="seedLabel">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>Random generator seed</string>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QSpinBox" name="seedSpinBox">
+             <property name="maximum">
+              <number>999999999</number>
+             </property>
+             <property name="value">
+              <number>42</number>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_16">
+           <item>
+            <spacer name="horizontalSpacer">
+             <property name="orientation">
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeType">
+              <enum>QSizePolicy::Fixed</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>10</width>
+               <height>20</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QLabel" name="seedAddLabel">
+             <property name="sizePolicy">
+              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="text">
+              <string>* 0 means that one-time arbitrary seed will be used</string>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <spacer name="verticalSpacer_6">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>107</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.cpp b/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.cpp
index 6a40213..93fb009 100644
--- a/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.cpp
+++ b/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.cpp
@@ -19,20 +19,15 @@
  * 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/AppContext.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "uHMM3BuildDialogImpl.h"
@@ -49,7 +44,6 @@ void UHMM3BuildDialogImpl::setSignalsAndSlots() {
     QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
 
     connect( maOpenFileButton, SIGNAL( clicked() ), SLOT( sl_maOpenFileButtonClicked() ) );
-    connect( outHmmfileToolButton, SIGNAL( clicked() ), SLOT( sl_outHmmFileButtonClicked() ) );
     connect( okButton, SIGNAL( clicked() ), SLOT( sl_buildButtonClicked() ) );
     connect( cancelButton, SIGNAL( clicked() ), SLOT( sl_cancelButtonClicked() ) );
     connect( mcFastRadioButton, SIGNAL( toggled( bool ) ), SLOT( sl_fastMCRadioButtonChanged( bool ) ) );
@@ -65,15 +59,32 @@ void UHMM3BuildDialogImpl::setSignalsAndSlots() {
 
 void UHMM3BuildDialogImpl::initialize() {
     setupUi( this );
-    new HelpButton(this, buttonBox, "17467766");
+    new HelpButton(this, buttonBox, "17470699");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
+    initSaveController();
     setModelValues(); // build settings are default here
     setSignalsAndSlots();
 }
 
-UHMM3BuildDialogImpl::UHMM3BuildDialogImpl( const MAlignment & ma, QWidget * p ) : QDialog( p ) {
+void UHMM3BuildDialogImpl::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = HMM_FILES_DIR_ID;
+    config.defaultFormatId = UHMMFormat::UHHMER_FORMAT_ID;
+    config.fileDialogButton = outHmmfileToolButton;
+    config.fileNameEdit = outHmmfileEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select hmm file to create");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << UHMMFormat::UHHMER_FORMAT_ID;
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
+UHMM3BuildDialogImpl::UHMM3BuildDialogImpl( const MAlignment & ma, QWidget * p )
+    : QDialog(p),
+      saveController(NULL) {
     initialize();
     model.alignment = ma;
     model.alignmentUsing = !model.alignment.isEmpty();
@@ -83,7 +94,6 @@ UHMM3BuildDialogImpl::UHMM3BuildDialogImpl( const MAlignment & ma, QWidget * p )
         maLoadFromFileLabel->hide();
         maOpenFileButton->hide();
     }
-
 }
 
 void UHMM3BuildDialogImpl::setModelValues() {
@@ -113,15 +123,6 @@ void UHMM3BuildDialogImpl::sl_maOpenFileButtonClicked() {
     }
 }
 
-void UHMM3BuildDialogImpl::sl_outHmmFileButtonClicked() {
-    LastUsedDirHelper helper( HMM_FILES_DIR_ID );
-    helper.url = U2FileDialog::getSaveFileName( this, tr( "Select hmm file to create" ),
-        helper, DialogUtils::prepareDocumentsFileFilterByObjType( UHMMObject::UHMM_OT, true) );
-    if( !helper.url.isEmpty() ) {
-        outHmmfileEdit->setText( helper.url );
-    }
-}
-
 void UHMM3BuildDialogImpl::getModelValues() {
     UHMM3BuildSettings & bldSettings = model.buildSettings.inner;
     bldSettings.symfrac     = symfracDoubleSpinBox->value();
@@ -174,7 +175,7 @@ void UHMM3BuildDialogImpl::getModelValues() {
         assert( false );
     }
     
-    model.buildSettings.outFile = outHmmfileEdit->text();
+    model.buildSettings.outFile = saveController->getSaveFileName();
     model.inputFile = maLoadFromFileEdit->text();
 }
 
diff --git a/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.h b/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.h
index daf70df..7826257 100644
--- a/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.h
+++ b/src/plugins_3rdparty/hmm3/src/build/uHMM3BuildDialogImpl.h
@@ -22,17 +22,14 @@
 #ifndef _GB2_UHMM3_BUILD_DLG_IMPL_H_
 #define _GB2_UHMM3_BUILD_DLG_IMPL_H_
 
+#include <QDialog>
 #include "uHMM3BuildTask.h"
-#include <ui/ui_UHMM3BuildDialog.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <ui_UHMM3BuildDialog.h>
 
 namespace U2 {
 
+class SaveDocumentController;
+
 struct UHMM3BuildDialogModel {
     UHMM3BuildTaskSettings  buildSettings;
     
@@ -58,10 +55,10 @@ private:
     QString checkModel(); /* return error or empty string */
     void setSignalsAndSlots();
     void initialize();
+    void initSaveController();
     
 private slots:
     void sl_maOpenFileButtonClicked();
-    void sl_outHmmFileButtonClicked();
     void sl_buildButtonClicked();
     void sl_cancelButtonClicked();
     void sl_fastMCRadioButtonChanged( bool checked );
@@ -72,6 +69,7 @@ private slots:
     
 private:
     UHMM3BuildDialogModel   model;
+    SaveDocumentController *saveController;
     
 }; // UHMM3BuildDialogImpl
 
diff --git a/src/plugins_3rdparty/hmm3/src/build/ui/UHMM3BuildDialog.ui b/src/plugins_3rdparty/hmm3/src/build/ui/UHMM3BuildDialog.ui
deleted file mode 100644
index 56c73a3..0000000
--- a/src/plugins_3rdparty/hmm3/src/build/ui/UHMM3BuildDialog.ui
+++ /dev/null
@@ -1,895 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>UHMM3BuildDialog</class>
- <widget class="QDialog" name="UHMM3BuildDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>691</width>
-    <height>309</height>
-   </rect>
-  </property>
-  <property name="minimumSize">
-   <size>
-    <width>691</width>
-    <height>309</height>
-   </size>
-  </property>
-  <property name="windowTitle">
-   <string>HMM3 Build</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_11">
-   <item>
-    <widget class="QTabWidget" name="dlgMainTabWidget">
-     <property name="cursor">
-      <cursorShape>ArrowCursor</cursorShape>
-     </property>
-     <property name="tabPosition">
-      <enum>QTabWidget::North</enum>
-     </property>
-     <property name="tabShape">
-      <enum>QTabWidget::Rounded</enum>
-     </property>
-     <property name="currentIndex">
-      <number>0</number>
-     </property>
-     <widget class="QWidget" name="inputAndOutputTab">
-      <attribute name="title">
-       <string>Input and output</string>
-      </attribute>
-      <layout class="QGridLayout" name="gridLayout_2">
-       <item row="0" column="0">
-        <layout class="QVBoxLayout" name="verticalLayout_7">
-         <item>
-          <layout class="QGridLayout" name="gridLayout">
-           <item row="0" column="0">
-            <widget class="QLabel" name="maLoadFromFileLabel">
-             <property name="text">
-              <string>Input alignment file</string>
-             </property>
-            </widget>
-           </item>
-           <item row="0" column="1">
-            <widget class="QLineEdit" name="maLoadFromFileEdit"/>
-           </item>
-           <item row="0" column="2">
-            <widget class="QToolButton" name="maOpenFileButton">
-             <property name="text">
-              <string>...</string>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="0">
-            <widget class="QLabel" name="outHmmfileLabel">
-             <property name="text">
-              <string>Build to profile</string>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="1">
-            <widget class="QLineEdit" name="outHmmfileEdit"/>
-           </item>
-           <item row="1" column="2">
-            <widget class="QToolButton" name="outHmmfileToolButton">
-             <property name="text">
-              <string>...</string>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-        </layout>
-       </item>
-       <item row="1" column="1">
-        <spacer name="verticalSpacer">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>77</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="mcTab">
-      <attribute name="title">
-       <string>Construction strategies</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_2">
-       <item>
-        <layout class="QVBoxLayout" name="verticalLayout">
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_2">
-           <item>
-            <widget class="QRadioButton" name="mcFastRadioButton">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="minimumSize">
-              <size>
-               <width>100</width>
-               <height>0</height>
-              </size>
-             </property>
-             <property name="toolTip">
-              <string>assign cols w/ >= symfrac residues as consensus</string>
-             </property>
-             <property name="text">
-              <string>fast</string>
-             </property>
-             <property name="checked">
-              <bool>true</bool>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QLabel" name="mcFastSymfracLabel">
-             <property name="toolTip">
-              <string/>
-             </property>
-             <property name="text">
-              <string>Sym fraction</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QDoubleSpinBox" name="symfracDoubleSpinBox">
-             <property name="maximum">
-              <double>1.000000000000000</double>
-             </property>
-             <property name="singleStep">
-              <double>0.050000000000000</double>
-             </property>
-             <property name="value">
-              <double>0.500000000000000</double>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="mcHandRadioButton">
-           <property name="toolTip">
-            <string>Manual construction</string>
-           </property>
-           <property name="text">
-            <string>Hand (requires reference annotation)</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_7">
-           <item>
-            <widget class="QLabel" name="fragthreshLabel">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Tag sequence as a fragment, if L < x*<L>, where x is:</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QDoubleSpinBox" name="fragThreshDoubleSpinBox">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="maximum">
-              <double>1.000000000000000</double>
-             </property>
-             <property name="singleStep">
-              <double>0.100000000000000</double>
-             </property>
-             <property name="value">
-              <double>0.500000000000000</double>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer_2">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>110</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="rswTab">
-      <attribute name="title">
-       <string>Relative weighting</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_4">
-       <item>
-        <layout class="QVBoxLayout" name="verticalLayout_3">
-         <item>
-          <widget class="QRadioButton" name="wpbRSWRadioButton">
-           <property name="text">
-            <string>Henikoff position-based weights</string>
-           </property>
-           <property name="checked">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="wgscRSWRadioButton">
-           <property name="sizePolicy">
-            <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="text">
-            <string>Gerstein/Sonnhammer/Chothia tree weights</string>
-           </property>
-           <property name="checked">
-            <bool>false</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_3">
-           <item>
-            <widget class="QRadioButton" name="wblosumRSWRadioButton">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="minimumSize">
-              <size>
-               <width>230</width>
-               <height>0</height>
-              </size>
-             </property>
-             <property name="text">
-              <string>Henikoff simple filter weights</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QLabel" name="widRSWLabel">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="text">
-              <string>Identity cutoff</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QDoubleSpinBox" name="widRSWDoubleSpinBox">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="maximum">
-              <double>1.000000000000000</double>
-             </property>
-             <property name="singleStep">
-              <double>0.050000000000000</double>
-             </property>
-             <property name="value">
-              <double>0.620000000000000</double>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="wnoneRSWRadioButton">
-           <property name="text">
-            <string>Skip relative weighting; set all to 1</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="wgivenRSWRadioButton">
-           <property name="text">
-            <string>Use weights given in alignment file</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </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 class="QWidget" name="eswTab">
-      <attribute name="title">
-       <string>Effective weighting</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_9">
-       <item>
-        <layout class="QVBoxLayout" name="verticalLayout_8">
-         <item>
-          <widget class="QRadioButton" name="eentESWRadioButton">
-           <property name="text">
-            <string>Adjust effective sequence number to achieve relative entropy target</string>
-           </property>
-           <property name="checked">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_4">
-           <item>
-            <spacer name="horizontalSpacer_8">
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeType">
-              <enum>QSizePolicy::Fixed</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>18</width>
-               <height>20</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-           <item>
-            <widget class="QLabel" name="ereLabel">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Minimum relative entropy/position</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QDoubleSpinBox" name="ereESWDoubleSpinBox">
-             <property name="enabled">
-              <bool>true</bool>
-             </property>
-             <property name="minimum">
-              <double>0.000000000000000</double>
-             </property>
-             <property name="maximum">
-              <double>999999999.000000000000000</double>
-             </property>
-             <property name="value">
-              <double>0.000000000000000</double>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_6">
-           <item>
-            <spacer name="horizontalSpacer_9">
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeType">
-              <enum>QSizePolicy::Fixed</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>18</width>
-               <height>20</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-           <item>
-            <widget class="QLabel" name="esigmaLabel">
-             <property name="enabled">
-              <bool>true</bool>
-             </property>
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Sigma parameter</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QDoubleSpinBox" name="esigmaDoubleSpinBox">
-             <property name="enabled">
-              <bool>true</bool>
-             </property>
-             <property name="minimum">
-              <double>0.010000000000000</double>
-             </property>
-             <property name="maximum">
-              <double>999999999.000000000000000</double>
-             </property>
-             <property name="value">
-              <double>45.000000000000000</double>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_8">
-           <item>
-            <widget class="QRadioButton" name="eclustESWRadioButton">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Use number of single linkage clusters as effective</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QLabel" name="eidESWLabel">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="text">
-              <string>Fractional identity cutoff</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QDoubleSpinBox" name="eidESWDoubleSpinBox">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="maximum">
-              <double>1.000000000000000</double>
-             </property>
-             <property name="singleStep">
-              <double>0.050000000000000</double>
-             </property>
-             <property name="value">
-              <double>0.620000000000000</double>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="enoneESWRadioButton">
-           <property name="text">
-            <string>Use number of sequences as effective</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_5">
-           <item>
-            <widget class="QRadioButton" name="esetESWRadioButton">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Effective sequence number for all models to</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QDoubleSpinBox" name="esetESWDoubleSpinBox">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="minimum">
-              <double>0.010000000000000</double>
-             </property>
-             <property name="maximum">
-              <double>999999999.000000000000000</double>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer_4">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>650</width>
-           <height>0</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="evalCalibratonTab">
-      <attribute name="title">
-       <string>E-value calibration</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_10">
-       <item>
-        <layout class="QVBoxLayout" name="verticalLayout_5">
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_17">
-           <item>
-            <widget class="QLabel" name="emlLabel">
-             <property name="enabled">
-              <bool>true</bool>
-             </property>
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Length of sequences for MSV Gumbel mu fit</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QSpinBox" name="emlSpinBox">
-             <property name="enabled">
-              <bool>true</bool>
-             </property>
-             <property name="minimum">
-              <number>1</number>
-             </property>
-             <property name="maximum">
-              <number>999999999</number>
-             </property>
-             <property name="value">
-              <number>200</number>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_18">
-           <item>
-            <widget class="QLabel" name="emnLabel">
-             <property name="enabled">
-              <bool>true</bool>
-             </property>
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Number of sequences for MSV Gumbel mu fit</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QSpinBox" name="emnSpinBox">
-             <property name="enabled">
-              <bool>true</bool>
-             </property>
-             <property name="minimum">
-              <number>1</number>
-             </property>
-             <property name="maximum">
-              <number>999999999</number>
-             </property>
-             <property name="value">
-              <number>200</number>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_10">
-           <item>
-            <widget class="QLabel" name="evlLabel">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Length of sequences for Viterbi Gumbel mu fit</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QSpinBox" name="evlSpinBox">
-             <property name="minimum">
-              <number>1</number>
-             </property>
-             <property name="maximum">
-              <number>999999999</number>
-             </property>
-             <property name="value">
-              <number>200</number>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_11">
-           <item>
-            <widget class="QLabel" name="evnLabel">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Number of sequences for Viterbi Gumbel mu fit</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QSpinBox" name="evnSpinBox">
-             <property name="minimum">
-              <number>1</number>
-             </property>
-             <property name="maximum">
-              <number>999999999</number>
-             </property>
-             <property name="value">
-              <number>200</number>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_12">
-           <item>
-            <widget class="QLabel" name="eflLabel">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Length of sequences for Forward exp tail mu fit</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QSpinBox" name="eflSpinBox">
-             <property name="minimum">
-              <number>1</number>
-             </property>
-             <property name="maximum">
-              <number>999999999</number>
-             </property>
-             <property name="value">
-              <number>100</number>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_13">
-           <item>
-            <widget class="QLabel" name="efnLabel">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Number of sequences for Forward exp tail mu fit</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QSpinBox" name="efnSpinBox">
-             <property name="minimum">
-              <number>1</number>
-             </property>
-             <property name="maximum">
-              <number>999999999</number>
-             </property>
-             <property name="value">
-              <number>200</number>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_14">
-           <item>
-            <widget class="QLabel" name="label">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Tail mass for Forward exponential tail mu fit</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QDoubleSpinBox" name="eftDoubleSpinBox">
-             <property name="minimum">
-              <double>0.010000000000000</double>
-             </property>
-             <property name="maximum">
-              <double>0.990000000000000</double>
-             </property>
-             <property name="singleStep">
-              <double>0.010000000000000</double>
-             </property>
-             <property name="value">
-              <double>0.040000000000000</double>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer_5">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>23</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="otherTab">
-      <attribute name="title">
-       <string>Other</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_12">
-       <item>
-        <layout class="QVBoxLayout" name="verticalLayout_6">
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_15">
-           <item>
-            <widget class="QLabel" name="seedLabel">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>Random generator seed</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QSpinBox" name="seedSpinBox">
-             <property name="maximum">
-              <number>999999999</number>
-             </property>
-             <property name="value">
-              <number>42</number>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="horizontalLayout_16">
-           <item>
-            <spacer name="horizontalSpacer">
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeType">
-              <enum>QSizePolicy::Fixed</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>10</width>
-               <height>20</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-           <item>
-            <widget class="QLabel" name="seedAddLabel">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="text">
-              <string>* 0 means that one-time arbitrary seed will be used</string>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <spacer name="verticalSpacer_6">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>107</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/plugins_3rdparty/hmm3/src/hmmer3/easel/easel.cpp b/src/plugins_3rdparty/hmm3/src/hmmer3/easel/easel.cpp
index 869cb74..23faf87 100644
--- a/src/plugins_3rdparty/hmm3/src/hmmer3/easel/easel.cpp
+++ b/src/plugins_3rdparty/hmm3/src/hmmer3/easel/easel.cpp
@@ -1275,8 +1275,8 @@ esl_strdealign(char *s, const char *aseq, const char *gapchars, int64_t *opt_rle
 int
 esl_DCompare(double a, double b, double tol)
 {
-    if (isinf(a) && isinf(b))                 return eslOK;
-    if (isnan(a) && isnan(b))                 return eslOK;
+    if (std::isinf(a) && std::isinf(b))                 return eslOK;
+    if (std::isnan(a) && std::isnan(b))                 return eslOK;
     if (!isfin( a ) || !isfin( b ) )          return eslFAIL;
     if (a == b)                               return eslOK;
     if (fabs(a) == 0. && fabs(b) <= tol)      return eslOK;
@@ -1287,8 +1287,8 @@ esl_DCompare(double a, double b, double tol)
 int
 esl_FCompare(float a, float b, float tol)
 { 
-    if (isinf(a) && isinf(b))                 return eslOK;
-    if (isnan(a) && isnan(b))                 return eslOK;
+    if (std::isinf(a) && std::isinf(b))                 return eslOK;
+    if (std::isnan(a) && std::isnan(b))                 return eslOK;
     if (!isfin( a ) || !isfin( b ) )          return eslFAIL;
     if (a == b)                               return eslOK;
     if (fabs(a) == 0. && fabs(b) <= tol)      return eslOK;
diff --git a/src/plugins_3rdparty/hmm3/src/hmmer3/easel/esl_dirichlet.cpp b/src/plugins_3rdparty/hmm3/src/hmmer3/easel/esl_dirichlet.cpp
index 59f2365..2cc8e9f 100644
--- a/src/plugins_3rdparty/hmm3/src/hmmer3/easel/esl_dirichlet.cpp
+++ b/src/plugins_3rdparty/hmm3/src/hmmer3/easel/esl_dirichlet.cpp
@@ -629,7 +629,7 @@ mixdchlet_complete_func(double *p, int np, void *dptr)
         logP += logPsample;
     }
 
-    if (isnan(logP)) esl_fatal("logP is NaN");
+    if (std::isnan(logP)) esl_fatal("logP is NaN");
     return -logP;
 }
 
@@ -706,12 +706,12 @@ mixdchlet_complete_gradient(double *p, int np, void *dptr, double *dp)
    /* Return the negative, because we're minimizing the NLP, not maximizing.
     */
    for (q = 0; q < nq; q++) {
-        if (isnan(dp[q])) esl_fatal("dp for pq[%d] is NaN", q);
+        if (std::isnan(dp[q])) esl_fatal("dp for pq[%d] is NaN", q);
      dp[q] *= -1.;
    }
    for (q = 0; q < d->N; q++)
      for (x = 0; x < d->K; x++) {
-       if(isnan(dp[nq + q*d->K + x])) esl_fatal("dp for alpha[%d][%d] is NaN", q, x);
+       if(std::isnan(dp[nq + q*d->K + x])) esl_fatal("dp for alpha[%d][%d] is NaN", q, x);
        dp[nq + q*d->K + x] *= -1.0;
     }
 
diff --git a/src/plugins_3rdparty/hmm3/src/hmmer3/hmmer3_funcs.cpp b/src/plugins_3rdparty/hmm3/src/hmmer3/hmmer3_funcs.cpp
index b458c12..23fa49b 100644
--- a/src/plugins_3rdparty/hmm3/src/hmmer3/hmmer3_funcs.cpp
+++ b/src/plugins_3rdparty/hmm3/src/hmmer3/hmmer3_funcs.cpp
@@ -33,7 +33,7 @@ float infinity() {
 }
 
 bool isfin( float x ) {
-    return !isnan( x ) && !isinf( x );
+    return !std::isnan( x ) && !std::isinf( x );
 }
 
 const char TERM_SYM = '\0';
diff --git a/src/plugins_3rdparty/hmm3/src/hmmer3/hmmer3_funcs.h b/src/plugins_3rdparty/hmm3/src/hmmer3/hmmer3_funcs.h
index 844c1cb..bfff9bc 100644
--- a/src/plugins_3rdparty/hmm3/src/hmmer3/hmmer3_funcs.h
+++ b/src/plugins_3rdparty/hmm3/src/hmmer3/hmmer3_funcs.h
@@ -15,6 +15,7 @@ extern float    roundf( float x );
 #else // if not Windows -> we have all functions and defines in math.h
 #include <math.h>
 #endif // _WINDOWS
+#include <cmath>
 
 extern float infinity();
 extern bool isfin( float x ); // sure that number is finite
diff --git a/src/plugins_3rdparty/hmm3/src/hmmer3/impl_sse/decoding.cpp b/src/plugins_3rdparty/hmm3/src/hmmer3/impl_sse/decoding.cpp
index 9050f1c..6032970 100644
--- a/src/plugins_3rdparty/hmm3/src/hmmer3/impl_sse/decoding.cpp
+++ b/src/plugins_3rdparty/hmm3/src/hmmer3/impl_sse/decoding.cpp
@@ -134,7 +134,7 @@ p7_Decoding(const P7_OPROFILE *om, const P7_OMX *oxf, P7_OMX *oxb, P7_OMX *pp)
         if (oxb->has_own_scales) scaleproduct *= oxf->xmx[i*p7X_NXCELLS+p7X_SCALE] /  oxb->xmx[i*p7X_NXCELLS+p7X_SCALE];
     }
 
-    if (isinf(scaleproduct)) return eslERANGE;
+    if (std::isinf(scaleproduct)) return eslERANGE;
     else                     return eslOK;
 }
 
@@ -188,7 +188,7 @@ p7_DomainDecoding(const P7_OPROFILE *om, const P7_OMX *oxf, const P7_OMX *oxb, P
     }
     ddef->L = oxf->L;
 
-    if (isinf(scaleproduct)) return eslERANGE;
+    if (std::isinf(scaleproduct)) return eslERANGE;
     else                     return eslOK;
 }
 /*------------------ end, posterior decoding --------------------*/
diff --git a/src/plugins_3rdparty/hmm3/src/hmmer3/impl_sse/fwdback.cpp b/src/plugins_3rdparty/hmm3/src/hmmer3/impl_sse/fwdback.cpp
index 5bafaa4..413a6fe 100644
--- a/src/plugins_3rdparty/hmm3/src/hmmer3/impl_sse/fwdback.cpp
+++ b/src/plugins_3rdparty/hmm3/src/hmmer3/impl_sse/fwdback.cpp
@@ -465,9 +465,9 @@ forward_engine(int do_full, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, P7
     /* On an underflow (which shouldn't happen), we counterintuitively return infinity:
     * the effect of this is to force the caller to rescore us with full range.
     */
-    if       (isnan(xC))      ESL_EXCEPTION(eslERANGE, "forward score is NaN");
+    if       (std::isnan(xC))      ESL_EXCEPTION(eslERANGE, "forward score is NaN");
     else if  (L>0 && xC == 0.0)      ESL_EXCEPTION(eslERANGE, "forward score underflow (is 0.0)");
-    else if  (isinf(xC) == 1) ESL_EXCEPTION(eslERANGE, "forward score overflow (is infinity)");
+    else if  (std::isinf(xC) == 1) ESL_EXCEPTION(eslERANGE, "forward score overflow (is infinity)");
 
     if (opt_sc != NULL) *opt_sc = ox->totscale + log((double)(xC * om->xf[p7O_C][p7O_MOVE]));
     return eslOK;
@@ -742,9 +742,9 @@ backward_engine(int do_full, const ESL_DSQ *dsq, int L, const P7_OPROFILE *om, c
     if (bck->debugging) p7_omx_DumpFBRow(bck, TRUE, 0, 9, 4, bck->xmx[p7X_E], bck->xmx[p7X_N],  bck->xmx[p7X_J], bck->xmx[p7X_B],  bck->xmx[p7X_C]);	/* logify=TRUE, <rowi>=0, width=9, precision=4*/
 #endif
 
-    if       (isnan(xN))      ESL_EXCEPTION(eslERANGE, "backward score is NaN");
+    if       (std::isnan(xN))      ESL_EXCEPTION(eslERANGE, "backward score is NaN");
     else if  (L>0 && xN == 0.0)      ESL_EXCEPTION(eslERANGE, "backward score underflow (is 0.0)");
-    else if  (isinf(xN) == 1) ESL_EXCEPTION(eslERANGE, "backward score overflow (is infinity)");
+    else if  (std::isinf(xN) == 1) ESL_EXCEPTION(eslERANGE, "backward score overflow (is infinity)");
 
     if (opt_sc != NULL) *opt_sc = bck->totscale + log((double)xN);
     return eslOK;
diff --git a/src/plugins_3rdparty/hmm3/src/phmmer/ui/UHMM3PhmmerDialog.ui b/src/plugins_3rdparty/hmm3/src/phmmer/UHMM3PhmmerDialog.ui
similarity index 100%
rename from src/plugins_3rdparty/hmm3/src/phmmer/ui/UHMM3PhmmerDialog.ui
rename to src/plugins_3rdparty/hmm3/src/phmmer/UHMM3PhmmerDialog.ui
diff --git a/src/plugins_3rdparty/hmm3/src/phmmer/uHMM3PhmmerDialogImpl.cpp b/src/plugins_3rdparty/hmm3/src/phmmer/uHMM3PhmmerDialogImpl.cpp
index e605498..ae1995a 100644
--- a/src/plugins_3rdparty/hmm3/src/phmmer/uHMM3PhmmerDialogImpl.cpp
+++ b/src/plugins_3rdparty/hmm3/src/phmmer/uHMM3PhmmerDialogImpl.cpp
@@ -54,7 +54,7 @@ const QString UHMM3PhmmerDialogImpl::ANNOTATIONS_DEFAULT_NAME   = "signal";
 UHMM3PhmmerDialogImpl::UHMM3PhmmerDialogImpl(const U2SequenceObject * seqObj, QWidget * p) : QDialog(p) {
     assert(NULL != seqObj);
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467768");
+    new HelpButton(this, buttonBox, "17470701");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins_3rdparty/hmm3/src/phmmer/uHMM3PhmmerDialogImpl.h b/src/plugins_3rdparty/hmm3/src/phmmer/uHMM3PhmmerDialogImpl.h
index 40f6c70..7950ff9 100644
--- a/src/plugins_3rdparty/hmm3/src/phmmer/uHMM3PhmmerDialogImpl.h
+++ b/src/plugins_3rdparty/hmm3/src/phmmer/uHMM3PhmmerDialogImpl.h
@@ -27,7 +27,7 @@
 #include <U2Gui/CreateAnnotationWidgetController.h>
 
 #include <phmmer/uhmm3phmmer.h>
-#include <ui/ui_UHMM3PhmmerDialog.h>
+#include <ui_UHMM3PhmmerDialog.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QDialog>
diff --git a/src/plugins_3rdparty/hmm3/src/search/Hmmer3SearchWorkflowTask.cpp b/src/plugins_3rdparty/hmm3/src/search/Hmmer3SearchWorkflowTask.cpp
new file mode 100644
index 0000000..3e6afea
--- /dev/null
+++ b/src/plugins_3rdparty/hmm3/src/search/Hmmer3SearchWorkflowTask.cpp
@@ -0,0 +1,134 @@
+/**
+* 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/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/U1AnnotationUtils.h>
+#include <workers/HMM3SearchWorker.h>
+
+#include "Hmmer3SearchWorkflowTask.h"
+
+namespace U2 {
+
+using namespace LocalWorkflow;
+
+Hmmer3SearchWorfklowTask::Hmmer3SearchWorfklowTask(const QString &profileUrl, U2SequenceObject *sequenceObject, AnnotationTableObject *annotationsObject,
+    const QString &group, const QString &description, U2FeatureType type, const QString &name, const UHMM3SearchTaskSettings &settings)
+: Task("HMMER 3 search workflow task", TaskFlags_NR_FOSE_COSC | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled),
+profileUrl(profileUrl), sequenceObject(sequenceObject), annotationsObject(annotationsObject),
+group(group), description(description), type(type), name(name), settings(settings), workflowTask(NULL), resultCount(0)
+{
+
+}
+
+void Hmmer3SearchWorfklowTask::prepare() {
+    SimpleInOutWorkflowTaskConfig config = getConfig();
+    CHECK_OP(stateInfo, );
+
+    workflowTask = new SimpleInOutWorkflowTask(config);
+    addSubTask(workflowTask);
+}
+
+Task::ReportResult Hmmer3SearchWorfklowTask::report() {
+    CHECK_OP(stateInfo, ReportResult_Finished);
+    Document *doc = workflowTask->getDocument();
+    CHECK(NULL != doc, ReportResult_Finished);
+    QList<GObject*> objects = doc->findGObjectByType(GObjectTypes::ANNOTATION_TABLE);
+    if (objects.isEmpty()) {
+        setError(tr("No annotations objects found"));
+        return ReportResult_Finished;
+    }
+    AnnotationTableObject *hmmerObject = qobject_cast<AnnotationTableObject*>(objects.first());
+    QList<SharedAnnotationData> data;
+    foreach (Annotation *annotation, hmmerObject->getAnnotations()) {
+        SharedAnnotationData annData = annotation->getData();
+        annData->name = name;
+        annData->type = type;
+        data << annData;
+    }
+    U1AnnotationUtils::addDescriptionQualifier(data, description);
+    resultCount += data.size();
+    annotationsObject->addAnnotations(data, group);
+    return ReportResult_Finished;
+}
+
+QString Hmmer3SearchWorfklowTask::generateReport() const {
+    QString res;
+    res += "<table>";
+    res += "<tr><td width=200><b>" + tr("HMM profile used") + "</b></td><td>" + QFileInfo(profileUrl).absoluteFilePath() + "</td></tr>";
+
+    if (hasError() || isCanceled()) {
+        res += "<tr><td width=200><b>" + tr("Task was not finished") + "</b></td><td></td></tr>";
+        res += "</table>";
+        return res;
+    }
+
+    res += "<tr><td><b>" + tr("Result annotation table") + "</b></td><td>" + annotationsObject->getDocument()->getName() + "</td></tr>";
+    res += "<tr><td><b>" + tr("Result annotation group") + "</b></td><td>" + group + "</td></tr>";
+    res += "<tr><td><b>" + tr("Result annotation name") + "</b></td><td>" + name + "</td></tr>";
+
+    res += "<tr><td><b>" + tr("Results count") + "</b></td><td>" + QString::number(resultCount) + "</td></tr>";
+    res += "</table>";
+    return res;
+}
+
+SimpleInOutWorkflowTaskConfig Hmmer3SearchWorfklowTask::getConfig() {
+    SimpleInOutWorkflowTaskConfig config;
+    U2DbiRef dbiRef = AppContext::getDbiRegistry()->getSessionTmpDbiRef(stateInfo);
+    CHECK_OP(stateInfo, config);
+    config.objects << sequenceObject->clone(dbiRef, stateInfo);
+    CHECK_OP(stateInfo, config);
+    config.inFormat = BaseDocumentFormats::PLAIN_GENBANK;
+    config.outFormat = BaseDocumentFormats::PLAIN_GENBANK;
+    config.schemaName = "hmm3-search";
+    config.emptyResultPossible = true;
+
+    config.extraArgs << "--hmm=" + profileUrl;
+    config.extraArgs << "--seed=" + QString::number(settings.inner.seed);
+
+    if (p7H_GA == settings.inner.useBitCutoffs) {
+        config.extraArgs << "--threshold-type=" + HMM3SearchWorker::CUT_GA_THRESHOLD;
+    } else if (p7H_NC == settings.inner.useBitCutoffs) {
+        config.extraArgs << "--threshold-type=" + HMM3SearchWorker::CUT_NC_THRESHOLD;
+    } else if (p7H_TC == settings.inner.useBitCutoffs) {
+        config.extraArgs << "--threshold-type=" + HMM3SearchWorker::CUT_TC_THRESHOLD;
+    } else if (OPTION_NOT_SET == settings.inner.domT) {
+        config.extraArgs << "--domE=" + QString::number(log10(settings.inner.domE));
+    } else {
+        config.extraArgs << "--domT=" + QString::number(settings.inner.domT);
+    }
+    if (settings.inner.domZ > 0) {
+        config.extraArgs << "--domZ=" + QString::number(settings.inner.domZ);
+    }
+
+    config.extraArgs << "--nobias=" + QString::number(settings.inner.noBiasFilter);
+    config.extraArgs << "--nonull2=" + QString::number(settings.inner.noNull2);
+    config.extraArgs << "--max=" + QString::number(settings.inner.doMax);
+
+    if (!settings.inner.doMax) {
+        config.extraArgs << "--F1=" + QString::number(settings.inner.f1);
+        config.extraArgs << "--F2=" + QString::number(settings.inner.f2);
+        config.extraArgs << "--F3=" + QString::number(settings.inner.f3);
+    }
+    return config;
+}
+
+} // U2
diff --git a/src/plugins_3rdparty/hmm3/src/search/Hmmer3SearchWorkflowTask.h b/src/plugins_3rdparty/hmm3/src/search/Hmmer3SearchWorkflowTask.h
new file mode 100644
index 0000000..9c47cc1
--- /dev/null
+++ b/src/plugins_3rdparty/hmm3/src/search/Hmmer3SearchWorkflowTask.h
@@ -0,0 +1,63 @@
+/**
+* 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_HMMER3_SEARCH_WORKFLOW_TASK_H_
+#define _U2_HMMER3_SEARCH_WORKFLOW_TASK_H_
+
+#include <U2Core/U2FeatureType.h>
+#include <U2Lang/SimpleWorkflowTask.h>
+#include <search/uHMM3SearchTask.h>
+
+namespace U2 {
+
+class AnnotationTableObject;
+class SimpleInOutWorkflowTask;
+class U2SequenceObject;
+
+class Hmmer3SearchWorfklowTask : public Task {
+    Q_OBJECT
+public:
+    Hmmer3SearchWorfklowTask(const QString &profileUrl, U2SequenceObject *sequenceObject, AnnotationTableObject *annotationsObject,
+        const QString &group, const QString &description, U2FeatureType type, const QString &name, const UHMM3SearchTaskSettings &settings);
+
+    void prepare();
+    ReportResult report();
+    QString generateReport() const;
+
+private:
+    SimpleInOutWorkflowTaskConfig getConfig();
+
+private:
+    QString profileUrl;
+    U2SequenceObject *sequenceObject;
+    AnnotationTableObject *annotationsObject;
+    QString group;
+    QString description;
+    U2FeatureType type;
+    QString name;
+    UHMM3SearchTaskSettings settings;
+    SimpleInOutWorkflowTask *workflowTask;
+    int resultCount;
+};
+
+} // U2
+
+#endif // _U2_HMMER3_SEARCH_WORKFLOW_TASK_H_
diff --git a/src/plugins_3rdparty/hmm3/src/search/ui/UHMM3SearchDialog.ui b/src/plugins_3rdparty/hmm3/src/search/UHMM3SearchDialog.ui
similarity index 100%
rename from src/plugins_3rdparty/hmm3/src/search/ui/UHMM3SearchDialog.ui
rename to src/plugins_3rdparty/hmm3/src/search/UHMM3SearchDialog.ui
diff --git a/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.cpp b/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.cpp
index c0c7af8..c8b7a30 100644
--- a/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.cpp
+++ b/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.cpp
@@ -36,7 +36,7 @@
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/U2FileDialog.h>
 
-#include <U2Remote/DistributedComputingUtil.h>
+#include <search/Hmmer3SearchWorkflowTask.h>
 
 #include "uHMM3SearchDialogImpl.h"
 #include "gobject/uHMMObject.h"
@@ -54,7 +54,7 @@ UHMM3SearchDialogImpl::UHMM3SearchDialogImpl(U2SequenceObject *seqObj, QWidget *
     assert(NULL != seqObj);
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467767");
+    new HelpButton(this, buttonBox, "17470700");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -177,9 +177,6 @@ void UHMM3SearchDialogImpl::sl_okButtonClicked() {
     }
 
     SAFE_POINT(!model.sequence.isNull(), L10N::nullPointerError("sequence object"), );
-    U2OpStatusImpl os;
-    const DNASequence sequence = model.sequence->getWholeSequence(os);
-    CHECK_OP_EXT(os, QMessageBox::warning(this, tr("Error"), os.getError()), );
 
     bool objectPrepared = annotationsWidgetController->prepareAnnotationObject();
     if (!objectPrepared) {
@@ -188,7 +185,7 @@ void UHMM3SearchDialogImpl::sl_okButtonClicked() {
     }
 
     const CreateAnnotationModel &annModel = annotationsWidgetController->getModel();
-    UHMM3SWSearchToAnnotationsTask *searchTask = new UHMM3SWSearchToAnnotationsTask(model.hmmfile, sequence, annModel.getAnnotationObject(),
+    Hmmer3SearchWorfklowTask *searchTask = new Hmmer3SearchWorfklowTask(model.hmmfile, model.sequence, annModel.getAnnotationObject(),
         annModel.groupName, annModel.description, annModel.data->type, annModel.data->name, model.searchSettings);
     AppContext::getTaskScheduler()->registerTopLevelTask(searchTask);
 
diff --git a/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.h b/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.h
index e0bfceb..b5506c3 100644
--- a/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.h
+++ b/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchDialogImpl.h
@@ -35,7 +35,7 @@
 #include <U2Gui/CreateAnnotationWidgetController.h>
 #include <U2Core/DNASequenceObject.h>
 
-#include <ui/ui_UHMM3SearchDialog.h>
+#include <ui_UHMM3SearchDialog.h>
 #include <search/uHMM3SearchTask.h>
 
 namespace U2 {
diff --git a/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchTask.cpp b/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchTask.cpp
index 4beaf54..a9b6b4a 100644
--- a/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchTask.cpp
+++ b/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchTask.cpp
@@ -547,167 +547,4 @@ QList<Task*> UHMM3LoadProfileAndSearchTask::onSubTaskFinished(Task* subTask) {
     return subTasks;
 }
 
-
-/*****************************************************
-* UHMM3SWSearchToAnnotationsTask
-*****************************************************/
-
-void UHMM3SWSearchToAnnotationsTask::checkArgs() {
-    if(hmmfile.isEmpty()) {
-        stateInfo.setError(L10N::badArgument(tr("hmm profile filename")));
-        return;
-    }
-    if(NULL == annotationObj.data()) {
-        stateInfo.setError(L10N::badArgument(tr("annotation object")));
-        return;
-    }
-    if(agroup.isEmpty()) {
-        stateInfo.setError(L10N::badArgument(tr("annotations group name")));
-        return;
-    }
-    if(aname.isEmpty()) {
-        stateInfo.setError(L10N::badArgument(tr("annotations name")));
-        return;
-    }
-}
-
-UHMM3SWSearchToAnnotationsTask::UHMM3SWSearchToAnnotationsTask(const QString & hmmf,
-                                                               const DNASequence & s,
-                                                               AnnotationTableObject *o,
-                                                               const QString & gr,
-                                                               const QString &annDescription,
-                                                               U2FeatureType aType,
-                                                               const QString & name,
-                                                               const UHMM3SearchTaskSettings & set)
-: Task("", TaskFlags_NR_FOSCOE | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled),
-hmmfile(hmmf), sequence(s), annotationObj(o), agroup(gr), annDescription(annDescription), aType(aType), aname(name), searchSettings(set),
-loadSequenceTask(NULL), searchTask(NULL), createAnnotationsTask(NULL) {
-
-    setTaskName(tr("HMMER3 search task"));
-    checkArgs();
-    if(sequence.isNull()) {
-        stateInfo.setError(L10N::badArgument(tr("dna sequence")));
-    }
-    if(stateInfo.hasError()) {
-        return;
-    }
-    setTaskName(tr("HMMER3 search task with '%1' profile").arg(hmmfile));
-
-    searchTask = new UHMM3SWSearchTask(hmmfile, sequence, searchSettings);
-    addSubTask(searchTask);
-}
-
-UHMM3SWSearchToAnnotationsTask::UHMM3SWSearchToAnnotationsTask(const QString & hmmf,
-                                                               const QString & seqFile,
-                                                               AnnotationTableObject *obj,
-                                                               const QString & gr,
-                                                               const QString &annDescription,
-                                                               U2FeatureType aType,
-                                                               const QString & name,
-                                                               const UHMM3SearchTaskSettings & set)
-: Task("", TaskFlags_NR_FOSCOE | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled),
-hmmfile(hmmf), annotationObj(obj), agroup(gr), annDescription(annDescription), aType(aType), aname(name), searchSettings(set),
-loadSequenceTask(NULL), searchTask(NULL), createAnnotationsTask(NULL) {
-
-    setTaskName(tr("HMMER3 search task"));
-    checkArgs();
-    if(seqFile.isEmpty()) {
-        stateInfo.setError(L10N::badArgument(tr("Sequence file")));
-    }
-    if(stateInfo.hasError()) {
-        return;
-    }
-    setTaskName(tr("HMMER3 search task with '%1' profile").arg(hmmfile));
-
-    loadSequenceTask = LoadDocumentTask::getDefaultLoadDocTask(seqFile);
-    if(NULL == loadSequenceTask) {
-        stateInfo.setError(L10N::errorOpeningFileRead(seqFile));
-        return;
-    } else {
-        addSubTask(loadSequenceTask);
-    }
-}
-
-QString UHMM3SWSearchToAnnotationsTask::generateReport() const {
-    QString res;
-    res += "<table>";
-    res+="<tr><td width=200><b>" + tr("HMM profile used") + "</b></td><td>" + QFileInfo(hmmfile).absoluteFilePath() + "</td></tr>";
-
-    if(hasError() || isCanceled()) {
-        res += "<tr><td width=200><b>" + tr("Task was not finished") + "</b></td><td></td></tr>";
-        res += "</table>";
-        return res;
-    }
-
-    res += "<tr><td><b>" + tr("Result annotation table") + "</b></td><td>" + annotationObj->getDocument()->getName() + "</td></tr>";
-    res += "<tr><td><b>" + tr("Result annotation group") + "</b></td><td>" + agroup + "</td></tr>";
-    res += "<tr><td><b>" + tr("Result annotation name") +  "</b></td><td>" + aname + "</td></tr>";
-
-    int nResults = createAnnotationsTask == NULL ? 0 : createAnnotationsTask->getAnnotationCount();
-    res += "<tr><td><b>" + tr("Results count") +  "</b></td><td>" + QString::number(nResults)+ "</td></tr>";
-    res += "</table>";
-    return res;
-}
-
-void UHMM3SWSearchToAnnotationsTask::setSequence() {
-    assert(NULL != loadSequenceTask);
-
-    Document * seqDoc = loadSequenceTask->getDocument();
-    if(NULL == seqDoc) {
-        stateInfo.setError(tr("Cannot load sequence document"));
-        return;
-    }
-    QList< GObject* > objs = seqDoc->findGObjectByType(GObjectTypes::SEQUENCE);
-    if(objs.isEmpty()) {
-        stateInfo.setError(tr("No sequence objects loaded"));
-        return;
-    }
-    U2SequenceObject * seqObj = qobject_cast< U2SequenceObject* >(objs.first());
-    CHECK_EXT(seqObj != NULL, setError(tr("Unknown sequence type loaded")),)
-
-    sequence = seqObj->getWholeSequence(stateInfo);
-    CHECK_OP(stateInfo, );
-    CHECK_EXT(sequence.length() > 0, setError(tr("Empty sequence loaded")), );
-}
-
-QList< Task* > UHMM3SWSearchToAnnotationsTask::onSubTaskFinished(Task * subTask) {
-    QMutexLocker locker(&mtx);
-    QList< Task* > res;
-    if(hasError()) {
-        return res;
-    }
-    assert(NULL != subTask);
-    if(subTask->hasError()) {
-        stateInfo.setError(subTask->getError());
-        return res;
-    }
-
-    if(annotationObj.isNull()) {
-        stateInfo.setError(tr("Annotation object removed"));
-        return res;
-    }
-
-    if(loadSequenceTask == subTask) {
-        setSequence();
-        if(hasError()) {
-            return res;
-        }
-        searchTask = new UHMM3SWSearchTask(hmmfile, sequence, searchSettings);
-        res << searchTask;
-    } else if(searchTask == subTask) {
-        QList<SharedAnnotationData> annotations = searchTask->getResultsAsAnnotations(aType, aname);
-        U1AnnotationUtils::addDescriptionQualifier(annotations, annDescription);
-        if(annotations.isEmpty()) {
-            return res;
-        }
-
-        createAnnotationsTask = new CreateAnnotationsTask(annotationObj, annotations, agroup);
-        res << createAnnotationsTask;
-    } else if(createAnnotationsTask != subTask) {
-        assert(false && "undefined task finished");
-    }
-
-    return res;
-}
-
 } // U2
diff --git a/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchTask.h b/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchTask.h
index 0ca3571..17b7672 100644
--- a/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchTask.h
+++ b/src/plugins_3rdparty/hmm3/src/search/uHMM3SearchTask.h
@@ -166,42 +166,6 @@ private:
     
 }; // UHMM3SWSearchTask
 
-/*********************************************************************
-* HMMER3 search to annotations task. Sequence walker version used here
-**********************************************************************/
-class UHMM3SWSearchToAnnotationsTask : public Task {
-    Q_OBJECT
-public:
-    UHMM3SWSearchToAnnotationsTask(const QString & hmmfile, const DNASequence & seq, AnnotationTableObject *obj,
-        const QString & group, const QString &annDescription, U2FeatureType aType, const QString & aname, const UHMM3SearchTaskSettings & settings);
-    
-    UHMM3SWSearchToAnnotationsTask(const QString & hmmfile, const QString & seqFile, AnnotationTableObject *obj,
-        const QString & group, const QString &annDescription, U2FeatureType aType, const QString & aname, const UHMM3SearchTaskSettings & settings);
-    
-    QList< Task* > onSubTaskFinished(Task * subTask);
-    
-    QString generateReport() const;
-    
-private:
-    void checkArgs();
-    void setSequence();
-    
-private:
-    QString                             hmmfile;
-    DNASequence                         sequence;
-    QString                             agroup;
-    const QString                       annDescription;
-    U2FeatureType                       aType;
-    QString                             aname;
-    UHMM3SearchTaskSettings             searchSettings;
-    QPointer<AnnotationTableObject>     annotationObj;
-    LoadDocumentTask *                  loadSequenceTask;
-    UHMM3SWSearchTask *                 searchTask;
-    CreateAnnotationsTask *             createAnnotationsTask;
-    QMutex                              mtx;
-    
-}; // UHMM3SWSearchToAnnotationsTask
-
 } // U2
 
 #endif // _GB2_UHMM3_SEARCH_TASK_H_
diff --git a/src/plugins_3rdparty/hmm3/src/workers/HMM3SearchWorker.cpp b/src/plugins_3rdparty/hmm3/src/workers/HMM3SearchWorker.cpp
index 6282afc..300a5f9 100644
--- a/src/plugins_3rdparty/hmm3/src/workers/HMM3SearchWorker.cpp
+++ b/src/plugins_3rdparty/hmm3/src/workers/HMM3SearchWorker.cpp
@@ -58,9 +58,23 @@ namespace LocalWorkflow {
 static const QString HMM3_PORT("in-hmm3");
 
 static const QString NAME_ATTR("result-name");
+static const QString THRESHOLD_ATTR("threshold-type");
 static const QString DOM_E_ATTR("e-val");
 static const QString DOM_T_ATTR("score");
+static const QString DOM_Z_ATTR("domZ");
 static const QString SEED_ATTR("seed");
+static const QString BIAS_FILTER_ATTR("nobias");
+static const QString SCORE_CORRECTION_ATTR("nonull2");
+static const QString HEURISTIC_FILTER_ATTR("max");
+static const QString F1_ATTR("F1");
+static const QString F2_ATTR("F2");
+static const QString F3_ATTR("F3");
+
+const QString HMM3SearchWorker::E_THRESHOLD = "domE";
+const QString HMM3SearchWorker::T_THRESHOLD = "domT";
+const QString HMM3SearchWorker::CUT_GA_THRESHOLD = "cut_ga";
+const QString HMM3SearchWorker::CUT_NC_THRESHOLD = "cut_nc";
+const QString HMM3SearchWorker::CUT_TC_THRESHOLD = "cut_tc";
 
 const QString HMM3SearchWorkerFactory::ACTOR("hmm3-search");
 
@@ -88,13 +102,40 @@ void HMM3SearchWorkerFactory::init() {
     {
         Descriptor nd(NAME_ATTR, HMM3SearchWorker::tr("Result annotation"), HMM3SearchWorker::tr("A name of the result annotations."));
         Descriptor nsd(SEED_ATTR, HMM3SearchWorker::tr("Seed"), HMM3SearchWorker::tr("Random generator seed. 0 - means that one-time arbitrary seed will be used."));
+        Descriptor td(THRESHOLD_ATTR, HMM3SearchWorker::tr("Threshold type"), HMM3SearchWorker::tr("Controlling reporting and  model-specific thresholds."));
         Descriptor ded(DOM_E_ATTR, HMM3SearchWorker::tr("Filter by high E-value"), HMM3SearchWorker::tr("Report domains with e-value less than."));
         Descriptor dtd(DOM_T_ATTR, HMM3SearchWorker::tr("Filter by low score"), HMM3SearchWorker::tr("Report domains with score greater than."));
-
-         a << new Attribute(nd, BaseTypes::STRING_TYPE(), true, QVariant("hmm_signal"));
-         a << new Attribute(nsd, BaseTypes::NUM_TYPE(), false, QVariant(0));
-         a << new Attribute(ded, BaseTypes::NUM_TYPE(), false, QVariant(-1));
-         a << new Attribute(dtd, BaseTypes::NUM_TYPE(), false, QVariant((double)0.0));
+        Descriptor dzd(DOM_Z_ATTR, HMM3SearchWorker::tr("Significant sequences"), HMM3SearchWorker::tr("Number of significant sequences, for domain E-value calculation."));
+        Descriptor bfd(BIAS_FILTER_ATTR, HMM3SearchWorker::tr("No bias"), HMM3SearchWorker::tr("Turn off composition bias filter."));
+        Descriptor scd(SCORE_CORRECTION_ATTR, HMM3SearchWorker::tr("No score corrections"), HMM3SearchWorker::tr("Turn off biased composition score corrections."));
+        Descriptor hfd(HEURISTIC_FILTER_ATTR, HMM3SearchWorker::tr("No heuristic filters"), HMM3SearchWorker::tr("Turn all heuristic filters off (less speed, more power)."));
+        Descriptor f1d(F1_ATTR, HMM3SearchWorker::tr("MSV threshold"), HMM3SearchWorker::tr("Stage 1 (MSV) threshold: promote hits w/ P <= F1."));
+        Descriptor f2d(F2_ATTR, HMM3SearchWorker::tr("Vit threshold"), HMM3SearchWorker::tr("Stage 2 (Vit) threshold: promote hits w/ P <= F2."));
+        Descriptor f3d(F3_ATTR, HMM3SearchWorker::tr("Fwd threshold"), HMM3SearchWorker::tr("Stage 3 (Fwd) threshold: promote hits w/ P <= F3."));
+
+        a << new Attribute(nd, BaseTypes::STRING_TYPE(), true, "hmm_signal");
+        a << new Attribute(nsd, BaseTypes::NUM_TYPE(), false, 0.0);
+        a << new Attribute(td, BaseTypes::STRING_TYPE(), true, HMM3SearchWorker::E_THRESHOLD);
+        Attribute *domEAttr = new Attribute(ded, BaseTypes::NUM_TYPE(), false, 1);
+        Attribute *domTAttr = new Attribute(dtd, BaseTypes::NUM_TYPE(), false, 0.0);
+        a << domEAttr;
+        a << domTAttr;
+        a << new Attribute(dzd, BaseTypes::NUM_TYPE(), false, 0);
+        a << new Attribute(bfd, BaseTypes::BOOL_TYPE(), false, false);
+        a << new Attribute(scd, BaseTypes::BOOL_TYPE(), false, false);
+        a << new Attribute(hfd, BaseTypes::BOOL_TYPE(), false, false);
+        Attribute *f1Attr = new Attribute(f1d, BaseTypes::NUM_TYPE(), false, 0.02);
+        Attribute *f2Attr = new Attribute(f2d, BaseTypes::NUM_TYPE(), false, 0.001);
+        Attribute *f3Attr = new Attribute(f3d, BaseTypes::NUM_TYPE(), false, 0.00001);
+        a << f1Attr;
+        a << f2Attr;
+        a << f3Attr;
+
+        domEAttr->addRelation(new VisibilityRelation(THRESHOLD_ATTR, HMM3SearchWorker::E_THRESHOLD));
+        domTAttr->addRelation(new VisibilityRelation(THRESHOLD_ATTR, HMM3SearchWorker::T_THRESHOLD));
+        f1Attr->addRelation(new VisibilityRelation(HEURISTIC_FILTER_ATTR, false));
+        f2Attr->addRelation(new VisibilityRelation(HEURISTIC_FILTER_ATTR, false));
+        f3Attr->addRelation(new VisibilityRelation(HEURISTIC_FILTER_ATTR, false));
     }
 
     Descriptor desc(HMM3SearchWorkerFactory::ACTOR, HMM3SearchWorker::tr("HMM3 Search"),
@@ -102,7 +143,15 @@ void HMM3SearchWorkerFactory::init() {
         " In case several profiles were supplied, searches with all profiles one by one and outputs united set of annotations for each sequence."));
     ActorPrototype* proto = new IntegralBusActorPrototype(desc, p, a);
     QMap<QString, PropertyDelegate*> delegates;
-
+    {
+        QVariantMap map;
+        map[HMM3SearchWorker::tr("<= E-value")] = HMM3SearchWorker::E_THRESHOLD;
+        map[HMM3SearchWorker::tr(">= score")] = HMM3SearchWorker::T_THRESHOLD;
+        map[HMM3SearchWorker::tr("Use profile's GA gathering cutoffs")] = HMM3SearchWorker::CUT_GA_THRESHOLD;
+        map[HMM3SearchWorker::tr("Use profile's NC noise cutoffs")] = HMM3SearchWorker::CUT_NC_THRESHOLD;
+        map[HMM3SearchWorker::tr("Use profile's TC trusted cutoffs")] = HMM3SearchWorker::CUT_TC_THRESHOLD;
+        delegates[THRESHOLD_ATTR] = new ComboBoxDelegate(map);
+    }
     {
         QVariantMap eMap; eMap["prefix"]= ("1e"); eMap["minimum"] = (-99); eMap["maximum"] = (0);
         delegates[DOM_E_ATTR] = new SpinBoxDelegate(eMap);
@@ -116,6 +165,16 @@ void HMM3SearchWorkerFactory::init() {
         tMap["singleStep"] = (0.1);
         delegates[DOM_T_ATTR] = new DoubleSpinBoxDelegate(tMap);
     }
+    {
+        QVariantMap map; map["decimals"] = 2; map["minimum"] = 0.0; map["maximum"] = 1000000000.0;
+        delegates[DOM_Z_ATTR] = new DoubleSpinBoxDelegate(map);
+    }
+    {
+        QVariantMap map; map["decimals"] = 5; map["minimum"] = -1000000000.0; map["maximum"] = 1000000000.0;
+        delegates[F1_ATTR] = new DoubleSpinBoxDelegate(map);
+        delegates[F2_ATTR] = new DoubleSpinBoxDelegate(map);
+        delegates[F3_ATTR] = new DoubleSpinBoxDelegate(map);
+    }
 
     proto->setEditor(new DelegateEditor(delegates));
     proto->setIconPath(":/hmm3/images/hmmer_16.png");
@@ -162,20 +221,7 @@ void HMM3SearchWorker::init() {
     seqPort->addComplement(output);
     output->addComplement(seqPort);
 
-
-    float domENum = actor->getParameter(DOM_E_ATTR)->getAttributeValue<int>(context);
-    if(domENum > 0) {
-        algoLog.details(tr("Power of e-value must be less or equal to zero. Using default value: 1e-1"));
-        domENum = -1;
-    }
-    cfg.domE = pow(10, domENum);
-
-    cfg.domT = (float)actor->getParameter(DOM_T_ATTR)->getAttributeValue<double>(context);
-    if(cfg.domT <= 0) {
-        algoLog.details(tr("Score must be greater than zero. Using default value: 0.01"));
-        cfg.domT = 0.01;
-    }
-    cfg.seed = actor->getParameter(SEED_ATTR)->getAttributeValue<int>(context);
+    initConfig();
     resultName = actor->getParameter(NAME_ATTR)->getAttributeValue<QString>(context);
     if(resultName.isEmpty()){
         algoLog.details(tr("Value for attribute name is empty, default name used"));
@@ -264,5 +310,46 @@ void HMM3SearchWorker::sl_taskFinished(Task *t) {
 void HMM3SearchWorker::cleanup() {
 }
 
+void HMM3SearchWorker::initConfig() {
+    const QString thresholdType = getValue<QString>(THRESHOLD_ATTR);
+    if (E_THRESHOLD == thresholdType) {
+        int domENum = actor->getParameter(DOM_E_ATTR)->getAttributeValue<int>(context);
+        if (domENum > 1) {
+            algoLog.details(tr("Power of e-value must be less or equal to zero. Using default value: 1e+1"));
+            domENum = 1;
+        }
+        cfg.domE = pow(10, domENum);
+    } else if (T_THRESHOLD == thresholdType) {
+        cfg.domT = (float)actor->getParameter(DOM_T_ATTR)->getAttributeValue<double>(context);
+        if (cfg.domT <= 0) {
+            algoLog.details(tr("Score must be greater than zero. Using default value: 0.01"));
+            cfg.domT = 0.01;
+        }
+    } else if (CUT_GA_THRESHOLD == thresholdType) {
+        cfg.useBitCutoffs = p7H_GA;
+    } else if (CUT_NC_THRESHOLD == thresholdType) {
+        cfg.useBitCutoffs = p7H_NC;
+    } else if (CUT_TC_THRESHOLD == thresholdType) {
+        cfg.useBitCutoffs = p7H_TC;
+    }
+
+    double domZValue = getValue<double>(DOM_Z_ATTR);
+    if (domZValue > 0) {
+        cfg.domZ = domZValue;
+    }
+
+    cfg.noBiasFilter = getValue<bool>(BIAS_FILTER_ATTR);
+    cfg.noNull2 = getValue<bool>(SCORE_CORRECTION_ATTR);
+    cfg.doMax = getValue<bool>(HEURISTIC_FILTER_ATTR);
+
+    if (!cfg.doMax) {
+        cfg.f1 = getValue<double>(F1_ATTR);
+        cfg.f2 = getValue<double>(F1_ATTR);
+        cfg.f3 = getValue<double>(F1_ATTR);
+    }
+
+    cfg.seed = actor->getParameter(SEED_ATTR)->getAttributeValue<int>(context);
+}
+
 } //namespace LocalWorkflow
 } //namespace U2
diff --git a/src/plugins_3rdparty/hmm3/src/workers/HMM3SearchWorker.h b/src/plugins_3rdparty/hmm3/src/workers/HMM3SearchWorker.h
index 36c64ad..f02f46d 100644
--- a/src/plugins_3rdparty/hmm3/src/workers/HMM3SearchWorker.h
+++ b/src/plugins_3rdparty/hmm3/src/workers/HMM3SearchWorker.h
@@ -47,10 +47,19 @@ public:
     virtual bool isReady() const;
     virtual Task* tick();
     virtual void cleanup();
-    
+
+    static const QString E_THRESHOLD;
+    static const QString T_THRESHOLD;
+    static const QString CUT_GA_THRESHOLD;
+    static const QString CUT_NC_THRESHOLD;
+    static const QString CUT_TC_THRESHOLD;;
+
 private slots:
     void sl_taskFinished(Task*);
 
+private:
+    void initConfig();
+
 protected:
     IntegralBus *hmmPort, *seqPort, *output;
     QString resultName;
diff --git a/src/plugins_3rdparty/hmm3/transl/english.ts b/src/plugins_3rdparty/hmm3/transl/english.ts
index aa1db26..49dd9c1 100644
--- a/src/plugins_3rdparty/hmm3/transl/english.ts
+++ b/src/plugins_3rdparty/hmm3/transl/english.ts
@@ -117,6 +117,44 @@
     </message>
 </context>
 <context>
+    <name>U2::Hmmer3SearchWorfklowTask</name>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="56"/>
+        <source>No annotations objects found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="76"/>
+        <source>HMM profile used</source>
+        <translation type="unfinished">HMM profile used</translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="79"/>
+        <source>Task was not finished</source>
+        <translation type="unfinished">Task was not finished</translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="84"/>
+        <source>Result annotation table</source>
+        <translation type="unfinished">Result annotation table</translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="85"/>
+        <source>Result annotation group</source>
+        <translation type="unfinished">Result annotation group</translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="86"/>
+        <source>Result annotation name</source>
+        <translation type="unfinished">Result annotation name</translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="88"/>
+        <source>Results count</source>
+        <translation type="unfinished">Results count</translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::HMM3BuildPrompter</name>
     <message>
         <location filename="../src/workers/HMM3BuildWorker.cpp" line="109"/>
@@ -255,17 +293,17 @@
 <context>
     <name>U2::LocalWorkflow::HMM3SearchPrompter</name>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="136"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="195"/>
         <source>For each sequence from <u>%1</u>,</source>
         <translation>For each sequence from <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="137"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="196"/>
         <source>using all profiles provided by <u>%1</u>,</source>
         <translation>using all profiles provided by <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="141"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="200"/>
         <source>%1 search HMM3 signals %2. <br>Output the list of found regions annotated as <u>%4</u>.</source>
         <translation>%1 search HMM3 signals %2. <br>Output the list of found regions annotated as <u>%4</u>.</translation>
     </message>
@@ -273,112 +311,221 @@
 <context>
     <name>U2::LocalWorkflow::HMM3SearchWorker</name>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="71"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="85"/>
         <source>HMM3 profile</source>
         <translation>HMM3 profile</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="71"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="85"/>
         <source>HMM3 profile(s) to search with.</source>
         <translation>HMM3 profile(s) to search with.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="72"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="86"/>
         <source>Input sequence</source>
         <translation>Input sequence</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="73"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="87"/>
         <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/workers/HMM3SearchWorker.cpp" line="74"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="88"/>
         <source>HMM3 annotations</source>
         <translation>HMM3 annotations</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="75"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="89"/>
         <source>Annotations marking found similar sequence regions.</source>
         <translation>Annotations marking found similar sequence regions.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="89"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="103"/>
         <source>Result annotation</source>
         <translation>Result annotation</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="89"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="103"/>
         <source>A name of the result annotations.</source>
         <translation>A name of the result annotations.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="90"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="104"/>
         <source>Seed</source>
         <translation>Seed</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="90"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="104"/>
         <source>Random generator seed. 0 - means that one-time arbitrary seed will be used.</source>
         <translation>Random generator seed. 0 - means that one-time arbitrary seed will be used.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="91"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="105"/>
+        <source>Threshold type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="105"/>
+        <source>Controlling reporting and  model-specific thresholds.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="106"/>
         <source>Filter by high E-value</source>
         <translation>Filter by high E-value</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="91"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="106"/>
         <source>Report domains with e-value less than.</source>
         <translation>Report domains with e-value less than.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="92"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="107"/>
         <source>Filter by low score</source>
         <translation>Filter by low score</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="92"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="107"/>
         <source>Report domains with score greater than.</source>
         <translation>Report domains with score greater than.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="100"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="108"/>
+        <source>Significant sequences</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="108"/>
+        <source>Number of significant sequences, for domain E-value calculation.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="109"/>
+        <source>No bias</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="109"/>
+        <source>Turn off composition bias filter.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="110"/>
+        <source>No score corrections</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="110"/>
+        <source>Turn off biased composition score corrections.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="111"/>
+        <source>No heuristic filters</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="111"/>
+        <source>Turn all heuristic filters off (less speed, more power).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="112"/>
+        <source>MSV threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="112"/>
+        <source>Stage 1 (MSV) threshold: promote hits w/ P <= F1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="113"/>
+        <source>Vit threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="113"/>
+        <source>Stage 2 (Vit) threshold: promote hits w/ P <= F2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="114"/>
+        <source>Fwd threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="114"/>
+        <source>Stage 3 (Fwd) threshold: promote hits w/ P <= F3.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="141"/>
         <source>HMM3 Search</source>
         <translation>HMM3 Search</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="101"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="142"/>
         <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>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="168"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="318"/>
+        <source>Power of e-value must be less or equal to zero. Using default value: 1e+1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <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>
+        <translation type="vanished">Power of e-value must be less or equal to zero. Using default value: 1e-1</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="175"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="325"/>
         <source>Score must be greater than zero. Using default value: 0.01</source>
         <translation>Score must be greater than zero. Using default value: 0.01</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="181"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="227"/>
         <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/workers/HMM3SearchWorker.cpp" line="227"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="148"/>
+        <source><= E-value</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="149"/>
+        <source>>= score</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="150"/>
+        <source>Use profile's GA gathering cutoffs</source>
+        <translation type="unfinished">Use profile's GA gathering cutoffs</translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="151"/>
+        <source>Use profile's NC noise cutoffs</source>
+        <translation type="unfinished">Use profile's NC noise cutoffs</translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="152"/>
+        <source>Use profile's TC trusted cutoffs</source>
+        <translation type="unfinished">Use profile's TC trusted cutoffs</translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="273"/>
         <source>Find HMM3 signals in %1</source>
         <translation>Find HMM3 signals in %1</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="231"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="277"/>
         <source>Bad sequence supplied to input: %1</source>
         <translation>Bad sequence supplied to input: %1</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="260"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="306"/>
         <source>Found %1 HMM3 signals</source>
         <translation>Found %1 HMM3 signals</translation>
     </message>
@@ -473,37 +620,37 @@
 <context>
     <name>U2::UHMM3BuildDialogImpl</name>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="69"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="63"/>
         <source>Build</source>
         <translation>Build</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="70"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="64"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="109"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="119"/>
         <source>Select multiple alignment file</source>
         <translation>Select multiple alignment file</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="118"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="78"/>
         <source>Select hmm file to create</source>
         <translation>Select HMM file to create</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="184"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="185"/>
         <source>input file is empty</source>
         <translation>Input file is empty</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="187"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="188"/>
         <source>output hmm file is empty</source>
         <translation>Output HMM profile file is empty</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="196"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="197"/>
         <source>Error: bad arguments!</source>
         <translation>Error: bad arguments!</translation>
     </message>
@@ -1189,101 +1336,80 @@
 <context>
     <name>U2::UHMM3SWSearchToAnnotationsTask</name>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="557"/>
         <source>hmm profile filename</source>
-        <translation>Profile HMM file path</translation>
+        <translation type="vanished">Profile HMM file path</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="561"/>
         <source>annotation object</source>
-        <translation>Annotation object</translation>
+        <translation type="vanished">Annotation object</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="565"/>
         <source>annotations group name</source>
-        <translation>Annotations group name</translation>
+        <translation type="vanished">Annotations group name</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="569"/>
         <source>annotations name</source>
-        <translation>Annotations name</translation>
+        <translation type="vanished">Annotations name</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="586"/>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="612"/>
         <source>HMMER3 search task</source>
-        <translation>HMM3 search task</translation>
+        <translation type="vanished">HMM3 search task</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="589"/>
         <source>dna sequence</source>
-        <translation>Sequence to search in</translation>
+        <translation type="vanished">Sequence to search in</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="594"/>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="620"/>
         <source>HMMER3 search task with '%1' profile</source>
-        <translation>HMMER3 search task with '%1' profile</translation>
+        <translation type="vanished">HMMER3 search task with '%1' profile</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="615"/>
         <source>Sequence file</source>
-        <translation>Sequence file path</translation>
+        <translation type="vanished">Sequence file path</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="634"/>
         <source>HMM profile used</source>
-        <translation>HMM profile used</translation>
+        <translation type="vanished">HMM profile used</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="637"/>
         <source>Task was not finished</source>
-        <translation>Task was not finished</translation>
+        <translation type="vanished">Task was not finished</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="642"/>
         <source>Result annotation table</source>
-        <translation>Result annotation table</translation>
+        <translation type="vanished">Result annotation table</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="643"/>
         <source>Result annotation group</source>
-        <translation>Result annotation group</translation>
+        <translation type="vanished">Result annotation group</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="644"/>
         <source>Result annotation name</source>
-        <translation>Result annotation name</translation>
+        <translation type="vanished">Result annotation name</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="647"/>
         <source>Results count</source>
-        <translation>Results count</translation>
+        <translation type="vanished">Results count</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="657"/>
         <source>Cannot load sequence document</source>
-        <translation>Cannot load sequence document</translation>
+        <translation type="vanished">Cannot load sequence document</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="662"/>
         <source>No sequence objects loaded</source>
-        <translation>No sequence objects found in document</translation>
+        <translation type="vanished">No sequence objects found in document</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="666"/>
         <source>Unknown sequence type loaded</source>
-        <translation>No sequence objects found in document</translation>
+        <translation type="vanished">No sequence objects found in document</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="670"/>
         <source>Empty sequence loaded</source>
-        <translation>Empty sequence loaded</translation>
+        <translation type="vanished">Empty sequence loaded</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="686"/>
         <source>Annotation object removed</source>
-        <translation>Choosed annotation object removed</translation>
+        <translation type="vanished">Choosed annotation object removed</translation>
     </message>
 </context>
 <context>
@@ -1363,18 +1489,17 @@
         <translation>Error: bad arguments!</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="182"/>
-        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="186"/>
+        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="183"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="186"/>
+        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="183"/>
         <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/search/uHMM3SearchDialogImpl.cpp" line="236"/>
+        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="233"/>
         <source>Select query HMM profile</source>
         <translation>Select query HMM profile</translation>
     </message>
@@ -1615,18 +1740,18 @@
 <context>
     <name>UHMM3BuildDialog</name>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="59"/>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="76"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="62"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="79"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="123"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="126"/>
         <source>assign cols w/ >= symfrac residues as consensus</source>
         <translation>assign cols w/ >= symfrac residues as consensus</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="126"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="129"/>
         <source>fast</source>
         <translation>Fast</translation>
     </message>
@@ -1635,177 +1760,177 @@
         <translation type="vanished">Hmm3 Build</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="20"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="20"/>
         <source>HMM3 Build</source>
         <translation type="unfinished">HMM3 Build</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="39"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="42"/>
         <source>Input and output</source>
         <translation>Input and output</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="49"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="52"/>
         <source>Input alignment file</source>
         <translation>Input alignment file</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="66"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="69"/>
         <source>Build to profile</source>
         <translation>Build to profile</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="101"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="104"/>
         <source>Construction strategies</source>
         <translation>Construction strategies</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="139"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="142"/>
         <source>Sym fraction</source>
         <translation>Sym fraction</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="161"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="164"/>
         <source>Manual construction</source>
         <translation>Manual construction</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="164"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="167"/>
         <source>Hand (requires reference annotation)</source>
         <translation>Hand (requires reference annotation)</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="182"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="185"/>
         <source>Tag sequence as a fragment, if L < x*<L>, where x is:</source>
         <translation>Tag sequence as a fragment, if L < x*<L>, where x is:</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="223"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="226"/>
         <source>Relative weighting</source>
         <translation>Relative weighting</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="231"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="234"/>
         <source>Henikoff position-based weights</source>
         <translation>Henikoff position-based weights</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="247"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="250"/>
         <source>Gerstein/Sonnhammer/Chothia tree weights</source>
         <translation>Gerstein/Sonnhammer/Chothia tree weights</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="271"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="274"/>
         <source>Henikoff simple filter weights</source>
         <translation>Henikoff simple filter weights</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="281"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="284"/>
         <source>Identity cutoff</source>
         <translation>Identity cutoff</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="306"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="309"/>
         <source>Skip relative weighting; set all to 1</source>
         <translation>Skip relative weighting; set all to 1</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="313"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="316"/>
         <source>Use weights given in alignment file</source>
         <translation>Use weights given in alignment file</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="336"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="339"/>
         <source>Effective weighting</source>
         <translation>Effective weighting</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="344"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="347"/>
         <source>Adjust effective sequence number to achieve relative entropy target</source>
         <translation>Adjust effective sequence number to achieve relative entropy target</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="378"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="381"/>
         <source>Minimum relative entropy/position</source>
         <translation>Minimum relative entropy/position</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="430"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="433"/>
         <source>Sigma parameter</source>
         <translation>Sigma parameter</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="463"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="466"/>
         <source>Use number of single linkage clusters as effective</source>
         <translation>Use number of single linkage clusters as effective</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="473"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="476"/>
         <source>Fractional identity cutoff</source>
         <translation>Fractional identity cutoff</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="498"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="501"/>
         <source>Use number of sequences as effective</source>
         <translation>Use number of sequences as effective</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="513"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="516"/>
         <source>Effective sequence number for all models to</source>
         <translation>Effective sequence number for all models to</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="551"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="554"/>
         <source>E-value calibration</source>
         <translation>E-value calibration</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="570"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="573"/>
         <source>Length of sequences for MSV Gumbel mu fit</source>
         <translation>Length of sequences for MSV Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="606"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="609"/>
         <source>Number of sequences for MSV Gumbel mu fit</source>
         <translation>Number of sequences for MSV Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="639"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="642"/>
         <source>Length of sequences for Viterbi Gumbel mu fit</source>
         <translation>Length of sequences for Viterbi Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="669"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="672"/>
         <source>Number of sequences for Viterbi Gumbel mu fit</source>
         <translation>Number of sequences for Viterbi Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="699"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="702"/>
         <source>Length of sequences for Forward exp tail mu fit</source>
         <translation>Length of sequences for Forward exp tail mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="729"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="732"/>
         <source>Number of sequences for Forward exp tail mu fit</source>
         <translation>Number of sequences for Forward exp tail mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="759"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="762"/>
         <source>Tail mass for Forward exponential tail mu fit</source>
         <translation>Tail mass for Forward exponential tail mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="800"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="803"/>
         <source>Other</source>
         <translation>Other</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="816"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="819"/>
         <source>Random generator seed</source>
         <translation>Random generator seed</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="859"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="862"/>
         <source>* 0 means that one-time arbitrary seed will be used</source>
         <translation>* 0 means that one-time arbitrary seed will be used</translation>
     </message>
@@ -1813,152 +1938,152 @@
 <context>
     <name>UHMM3PhmmerDialog</name>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="20"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="20"/>
         <source>Phmmer Search</source>
         <translation>Phmmer Search</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="36"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="36"/>
         <source>Input and output</source>
         <translation>Input and output</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="50"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="50"/>
         <source>Query sequence file:</source>
         <translation>Query sequence file:</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="60"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="60"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="87"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="87"/>
         <source>Reporting tresholds</source>
         <translation>Reporting tresholds</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="103"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="103"/>
         <source>Report domains with E-value less than</source>
         <translation>Report domains with E-value less than</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="142"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="142"/>
         <source>Report domains with score greater than</source>
         <translation>Report domains with score greater than</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="166"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="166"/>
         <source>Number of significant sequences for domain E-value calculation</source>
         <translation>Number of significant sequences for domain E-value calculation</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="201"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="201"/>
         <source>Scoring system</source>
         <translation>Scoring system</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="217"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="217"/>
         <source>Gap open probability</source>
         <translation>Gap open probability</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="247"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="247"/>
         <source>Gap extend probability</source>
         <translation>Gap extend probability</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="285"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="285"/>
         <source>Acceleration</source>
         <translation>Acceleration</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="297"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="297"/>
         <source>Turn off composition bias filter</source>
         <translation>Turn off composition bias filter</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="310"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="310"/>
         <source>Turn off biased composition score corrections</source>
         <translation>Turn off biased composition score corrections</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="338"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="338"/>
         <source>Viterbi filter treshold</source>
         <translation>Viterbi filter treshold</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="368"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="368"/>
         <source>MSV filter treshold</source>
         <translation>MSV filter treshold</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="401"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="401"/>
         <source>Forward filter treshold</source>
         <translation>Forward filter treshold</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="437"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="437"/>
         <source>E-value calibration</source>
         <translation>E-value calibration</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="456"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="456"/>
         <source>Length of sequences for MSV Gumbel mu fit</source>
         <translation>Length of sequences for MSV Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="492"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="492"/>
         <source>Number of sequences for MSV Gumbel mu fit</source>
         <translation>Number of sequences for MSV Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="525"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="525"/>
         <source>Length of sequences for Viterbi Gumbel mu fit</source>
         <translation>Length of sequences for Viterbi Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="555"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="555"/>
         <source>Number of sequences for Viterbi Gumbel mu fit</source>
         <translation>Number of sequences for Viterbi Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="585"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="585"/>
         <source>Length of sequences for Forward exp tail mu fit</source>
         <translation>Length of sequences for Forward exp tail mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="615"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="615"/>
         <source>Number of sequences for Forward exp tail mu fit</source>
         <translation>Number of sequences for Forward exp tail mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="645"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="645"/>
         <source>Tail mass for Forward exponential tail mu fit</source>
         <translation>Tail mass for Forward exponential tail mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="686"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="686"/>
         <source>Other</source>
         <translation>Other</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="702"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="702"/>
         <source>Random generator seed</source>
         <translation>Random generator seed</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="745"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="745"/>
         <source>* 0 means that one-time arbitrary seed will be used</source>
         <translation>* 0 means that one-time arbitrary seed will be used</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="113"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="113"/>
         <source>1E+</source>
         <translation>1E+</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="323"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="323"/>
         <source>Turn all heuristic filters off (less speed, more power)</source>
         <translation>Turn all heuristic filters off (less speed, more power)</translation>
     </message>
@@ -1966,117 +2091,117 @@
 <context>
     <name>UHMM3SearchDialog</name>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="65"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="65"/>
         <source>Query HMM file:</source>
         <translation>Query profile HMM file:</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="75"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="75"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="119"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="119"/>
         <source>1E+</source>
         <translation>1E+</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="54"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="54"/>
         <source>Input and output</source>
         <translation>Input and output</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="92"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="92"/>
         <source>Reporting thresholds</source>
         <translation>Reporting thresholds</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="109"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="109"/>
         <source>Report domains with E-value less than</source>
         <translation>Report domains with E-value less than</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="146"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="146"/>
         <source>Report domains with score greater than</source>
         <translation>Report domains with score greater than</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="20"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="20"/>
         <source>HMM3 Search</source>
         <translation>HMM3 Search</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="180"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="180"/>
         <source>Score threshold:</source>
         <translation>Score threshold:</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="229"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="229"/>
         <source>Use profile's GA gathering cutoffs</source>
         <translation>Use profile's GA gathering cutoffs</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="265"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="265"/>
         <source>Use profile's NC noise cutoffs</source>
         <translation>Use profile's NC noise cutoffs</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="295"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="295"/>
         <source>Use profile's TC trusted cutoffs</source>
         <translation>Use profile's TC trusted cutoffs</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="312"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="312"/>
         <source>Number of significant sequences for domain E-value calculation</source>
         <translation>Number of significant sequences for domain E-value calculation</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="345"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="345"/>
         <source>Acceleration heuristics</source>
         <translation>Acceleration heuristics</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="360"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="360"/>
         <source>Turn off composition bias filter</source>
         <translation>Turn off composition bias filter</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="373"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="373"/>
         <source>Turn off biased composition score corrections</source>
         <translation>Turn off biased composition score corrections</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="401"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="401"/>
         <source>MSV filter threshold:</source>
         <translation>MSV filter threshold:</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="434"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="434"/>
         <source>Viterbi filter threshold:</source>
         <translation>Viterbi filter threshold:</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="464"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="464"/>
         <source>Forward filter threshold:</source>
         <translation>Forward filter threshold:</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="500"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="500"/>
         <source>Other</source>
         <translation>Other</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="522"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="522"/>
         <source>Random generator seed</source>
         <translation>Random generator seed</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="565"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="565"/>
         <source>* 0 means that one-time arbitrary seed will be used</source>
         <translation>* 0 means that one-time arbitrary seed will be used</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="386"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="386"/>
         <source>Turn all heuristic filters off (less speed, more power)</source>
         <translation>Turn all heuristic filters off (less speed, more power)</translation>
     </message>
diff --git a/src/plugins_3rdparty/hmm3/transl/russian.ts b/src/plugins_3rdparty/hmm3/transl/russian.ts
index fd60b25..98dacdd 100644
--- a/src/plugins_3rdparty/hmm3/transl/russian.ts
+++ b/src/plugins_3rdparty/hmm3/transl/russian.ts
@@ -117,6 +117,44 @@
     </message>
 </context>
 <context>
+    <name>U2::Hmmer3SearchWorfklowTask</name>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="56"/>
+        <source>No annotations objects found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="76"/>
+        <source>HMM profile used</source>
+        <translation type="unfinished">HMM профайл</translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="79"/>
+        <source>Task was not finished</source>
+        <translation type="unfinished">Задание завершено с ошибкой</translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="84"/>
+        <source>Result annotation table</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="85"/>
+        <source>Result annotation group</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="86"/>
+        <source>Result annotation name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/search/Hmmer3SearchWorkflowTask.cpp" line="88"/>
+        <source>Results count</source>
+        <translation type="unfinished">Количество результатов</translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::HMM3BuildPrompter</name>
     <message>
         <location filename="../src/workers/HMM3BuildWorker.cpp" line="109"/>
@@ -255,17 +293,17 @@
 <context>
     <name>U2::LocalWorkflow::HMM3SearchPrompter</name>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="136"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="195"/>
         <source>For each sequence from <u>%1</u>,</source>
         <translation>Для каждой последовательности из <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="137"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="196"/>
         <source>using all profiles provided by <u>%1</u>,</source>
         <translation>используя все профили произведенные <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="141"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="200"/>
         <source>%1 search HMM3 signals %2. <br>Output the list of found regions annotated as <u>%4</u>.</source>
         <translation>%1 искать сигналы HMM3 %2. <br>Аннотировать найденные регионы как <u>%4</u>.</translation>
     </message>
@@ -273,112 +311,221 @@
 <context>
     <name>U2::LocalWorkflow::HMM3SearchWorker</name>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="71"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="85"/>
         <source>HMM3 profile</source>
         <translation>Профиль HММ3</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="71"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="85"/>
         <source>HMM3 profile(s) to search with.</source>
         <translation>HMM3 профили для поиска.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="72"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="86"/>
         <source>Input sequence</source>
         <translation>Входная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="73"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="87"/>
         <source>An input sequence (nucleotide or protein) to search in.</source>
         <translation>Входная последовательность (нуклеотидная или белковая) для поиска.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="74"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="88"/>
         <source>HMM3 annotations</source>
         <translation>Аннотации HMM3</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="75"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="89"/>
         <source>Annotations marking found similar sequence regions.</source>
         <translation>Маркировка аннотаций обнаружила схожие зоны последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="89"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="103"/>
         <source>Result annotation</source>
         <translation>Результирующая аннотация</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="89"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="103"/>
         <source>A name of the result annotations.</source>
         <translation>Имя результирующих аннотаций.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="90"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="104"/>
         <source>Seed</source>
         <translation>Затравка</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="90"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="104"/>
         <source>Random generator seed. 0 - means that one-time arbitrary seed will be used.</source>
         <translation>Генератор случайной затравки. 0 - означает, что один раз будет использована случайная затравка.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="91"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="105"/>
+        <source>Threshold type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="105"/>
+        <source>Controlling reporting and  model-specific thresholds.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="106"/>
         <source>Filter by high E-value</source>
         <translation>Фильтрация по E-value</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="91"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="106"/>
         <source>Report domains with e-value less than.</source>
         <translation>Сохранять результаты c величиной E-value менее чем.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="92"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="107"/>
         <source>Filter by low score</source>
         <translation>Фильтрация по низким показателям</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="92"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="107"/>
         <source>Report domains with score greater than.</source>
         <translation>Сохранять результаты с итоговой суммой более чем.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="100"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="108"/>
+        <source>Significant sequences</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="108"/>
+        <source>Number of significant sequences, for domain E-value calculation.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="109"/>
+        <source>No bias</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="109"/>
+        <source>Turn off composition bias filter.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="110"/>
+        <source>No score corrections</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="110"/>
+        <source>Turn off biased composition score corrections.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="111"/>
+        <source>No heuristic filters</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="111"/>
+        <source>Turn all heuristic filters off (less speed, more power).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="112"/>
+        <source>MSV threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="112"/>
+        <source>Stage 1 (MSV) threshold: promote hits w/ P <= F1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="113"/>
+        <source>Vit threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="113"/>
+        <source>Stage 2 (Vit) threshold: promote hits w/ P <= F2.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="114"/>
+        <source>Fwd threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="114"/>
+        <source>Stage 3 (Fwd) threshold: promote hits w/ P <= F3.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="141"/>
         <source>HMM3 Search</source>
         <translation>Поиск с помощью HMMER3</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="101"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="142"/>
         <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>Ищет все входные последовательности для аналогичной последовательности соответствующей всем указанным профилям HММ. В случае, если профилей несколько, ищутся все профили по порядку и на выходе получается набор аннотаций для каждой последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="168"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="318"/>
+        <source>Power of e-value must be less or equal to zero. Using default value: 1e+1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Power of e-value must be less or equal to zero. Using default value: 1e-1</source>
-        <translation>Значение e-value должно быть меньше или равно нулю. Используется значение по умолчанию: 1e-1</translation>
+        <translation type="vanished">Значение e-value должно быть меньше или равно нулю. Используется значение по умолчанию: 1e-1</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="175"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="325"/>
         <source>Score must be greater than zero. Using default value: 0.01</source>
         <translation>Оценка должна быть больше нуля. Значение по умолчанию: 0,01</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="181"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="227"/>
         <source>Value for attribute name is empty, default name used</source>
         <translation>Имя пусто, использовано значение по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="227"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="148"/>
+        <source><= E-value</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="149"/>
+        <source>>= score</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="150"/>
+        <source>Use profile's GA gathering cutoffs</source>
+        <translation type="unfinished">Использовать отсечения GA</translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="151"/>
+        <source>Use profile's NC noise cutoffs</source>
+        <translation type="unfinished">Использовать отсечения NC</translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="152"/>
+        <source>Use profile's TC trusted cutoffs</source>
+        <translation type="unfinished">Использовать отсечения TC</translation>
+    </message>
+    <message>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="273"/>
         <source>Find HMM3 signals in %1</source>
         <translation>Искать сигналы HMM3 в %1</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="231"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="277"/>
         <source>Bad sequence supplied to input: %1</source>
         <translation>Неправильная последовательность подана на вход: %1</translation>
     </message>
     <message>
-        <location filename="../src/workers/HMM3SearchWorker.cpp" line="260"/>
+        <location filename="../src/workers/HMM3SearchWorker.cpp" line="306"/>
         <source>Found %1 HMM3 signals</source>
         <translation>Найденные %1 сигналы HMM3</translation>
     </message>
@@ -473,37 +620,37 @@
 <context>
     <name>U2::UHMM3BuildDialogImpl</name>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="69"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="63"/>
         <source>Build</source>
         <translation>Построить</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="70"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="64"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="109"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="119"/>
         <source>Select multiple alignment file</source>
         <translation>Выберите файл множественного выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="118"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="78"/>
         <source>Select hmm file to create</source>
         <translation>Выберите файл HMM профайла</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="184"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="185"/>
         <source>input file is empty</source>
         <translation>Входной файл не выбран</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="187"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="188"/>
         <source>output hmm file is empty</source>
         <translation>Выходной HMM файл не выбран</translation>
     </message>
     <message>
-        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="196"/>
+        <location filename="../src/build/uHMM3BuildDialogImpl.cpp" line="197"/>
         <source>Error: bad arguments!</source>
         <translation>Ошибка: неверные входные параметры!</translation>
     </message>
@@ -1189,101 +1336,80 @@
 <context>
     <name>U2::UHMM3SWSearchToAnnotationsTask</name>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="557"/>
         <source>hmm profile filename</source>
-        <translation>Путь до HMM профайла</translation>
+        <translation type="vanished">Путь до HMM профайла</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="561"/>
         <source>annotation object</source>
-        <translation>Объект аннотации</translation>
+        <translation type="vanished">Объект аннотации</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="565"/>
         <source>annotations group name</source>
-        <translation>Имя группы аннотаций</translation>
+        <translation type="vanished">Имя группы аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="569"/>
         <source>annotations name</source>
-        <translation>Имя аннотаций</translation>
+        <translation type="vanished">Имя аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="586"/>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="612"/>
         <source>HMMER3 search task</source>
-        <translation>Поиск HMM сигналов</translation>
+        <translation type="vanished">Поиск HMM сигналов</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="589"/>
         <source>dna sequence</source>
-        <translation>Последовательность для поиска</translation>
+        <translation type="vanished">Последовательность для поиска</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="594"/>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="620"/>
         <source>HMMER3 search task with '%1' profile</source>
-        <translation>Поиск сигналов HMM профайла '%1'</translation>
+        <translation type="vanished">Поиск сигналов HMM профайла '%1'</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="615"/>
         <source>Sequence file</source>
-        <translation>Путь до файла последовательности для поиска</translation>
+        <translation type="vanished">Путь до файла последовательности для поиска</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="634"/>
         <source>HMM profile used</source>
-        <translation>HMM профайл</translation>
+        <translation type="vanished">HMM профайл</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="637"/>
         <source>Task was not finished</source>
-        <translation>Задание завершено с ошибкой</translation>
+        <translation type="vanished">Задание завершено с ошибкой</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="642"/>
         <source>Result annotation table</source>
-        <translation>Таблица результатов</translation>
+        <translation type="vanished">Таблица результатов</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="643"/>
         <source>Result annotation group</source>
-        <translation>Группа аннотаций</translation>
+        <translation type="vanished">Группа аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="644"/>
         <source>Result annotation name</source>
-        <translation>Имя аннотаций</translation>
+        <translation type="vanished">Имя аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="647"/>
         <source>Results count</source>
-        <translation>Количество результатов</translation>
+        <translation type="vanished">Количество результатов</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="657"/>
         <source>Cannot load sequence document</source>
-        <translation>Не удалось загрузить документ последовательности</translation>
+        <translation type="vanished">Не удалось загрузить документ последовательности</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="662"/>
         <source>No sequence objects loaded</source>
-        <translation>Не загружен объект последовательности</translation>
+        <translation type="vanished">Не загружен объект последовательности</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="666"/>
         <source>Unknown sequence type loaded</source>
-        <translation>Загружена последовательность неизвестного типа</translation>
+        <translation type="vanished">Загружена последовательность неизвестного типа</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="670"/>
         <source>Empty sequence loaded</source>
-        <translation>Загружена пустая последовательность</translation>
+        <translation type="vanished">Загружена пустая последовательность</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchTask.cpp" line="686"/>
         <source>Annotation object removed</source>
-        <translation>Выбранный объект аннотаций удалён</translation>
+        <translation type="vanished">Выбранный объект аннотаций удалён</translation>
     </message>
 </context>
 <context>
@@ -1363,18 +1489,17 @@
         <translation>Ошибка: неверные входные параметры!</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="182"/>
-        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="186"/>
+        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="183"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="186"/>
+        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="183"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
     <message>
-        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="236"/>
+        <location filename="../src/search/uHMM3SearchDialogImpl.cpp" line="233"/>
         <source>Select query HMM profile</source>
         <translation>Выберите HMM профайл</translation>
     </message>
@@ -1616,193 +1741,193 @@
 <context>
     <name>UHMM3BuildDialog</name>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="59"/>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="76"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="62"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="79"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="123"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="126"/>
         <source>assign cols w/ >= symfrac residues as consensus</source>
         <translation>assign cols w/ >= symfrac residues as consensus</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="126"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="129"/>
         <source>fast</source>
         <translation>Быстрая</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="39"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="42"/>
         <source>Input and output</source>
         <translation>Ввод и вывод</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="20"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="20"/>
         <source>HMM3 Build</source>
         <translation>Построить профиль с помощью HMMER3</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="49"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="52"/>
         <source>Input alignment file</source>
         <translation>Файл выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="66"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="69"/>
         <source>Build to profile</source>
         <translation>HMM профайл</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="101"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="104"/>
         <source>Construction strategies</source>
         <translation>Стратегии построения</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="139"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="142"/>
         <source>Sym fraction</source>
         <translation>Доля</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="161"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="164"/>
         <source>Manual construction</source>
         <translation>Ручное построение</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="164"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="167"/>
         <source>Hand (requires reference annotation)</source>
         <translation>Ручная</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="182"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="185"/>
         <source>Tag sequence as a fragment, if L < x*<L>, where x is:</source>
         <translation>Tag sequence as a fragment, if L < x*<L>, where x is:</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="223"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="226"/>
         <source>Relative weighting</source>
         <translation>Относительные веса</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="231"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="234"/>
         <source>Henikoff position-based weights</source>
         <translation>Веса Henikoff основанные на позициях</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="247"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="250"/>
         <source>Gerstein/Sonnhammer/Chothia tree weights</source>
         <translation>Gerstein/Sonnhammer/Chothia веса</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="271"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="274"/>
         <source>Henikoff simple filter weights</source>
         <translation>Простой фильтр весов Henikoff</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="281"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="284"/>
         <source>Identity cutoff</source>
         <translation>Отсечки идентичности</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="306"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="309"/>
         <source>Skip relative weighting; set all to 1</source>
         <translation>Не использовать относительные веса</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="313"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="316"/>
         <source>Use weights given in alignment file</source>
         <translation>Использовать веса из файла выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="336"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="339"/>
         <source>Effective weighting</source>
         <translation>Эффективные веса</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="344"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="347"/>
         <source>Adjust effective sequence number to achieve relative entropy target</source>
         <translation>Отрегулируйте эффективный порядковый номер, чтобы достичь цель энтропии</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="378"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="381"/>
         <source>Minimum relative entropy/position</source>
         <translation>Минимальнеая относительная энтрпия</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="430"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="433"/>
         <source>Sigma parameter</source>
         <translation>Сигма-параметр</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="463"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="466"/>
         <source>Use number of single linkage clusters as effective</source>
         <translation>Использовать число единичных кластеров как эффективное</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="473"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="476"/>
         <source>Fractional identity cutoff</source>
         <translation>Долевая отсечка идентичности</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="498"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="501"/>
         <source>Use number of sequences as effective</source>
         <translation>Использовать число последовательностей как эффективное</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="513"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="516"/>
         <source>Effective sequence number for all models to</source>
         <translation>Установить эффективное число последовательностей для всех моделей</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="551"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="554"/>
         <source>E-value calibration</source>
         <translation>Калибрация E-value</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="570"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="573"/>
         <source>Length of sequences for MSV Gumbel mu fit</source>
         <translation>Длина последовательностей для MSV Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="606"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="609"/>
         <source>Number of sequences for MSV Gumbel mu fit</source>
         <translation>Число последовательностей для MSV Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="639"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="642"/>
         <source>Length of sequences for Viterbi Gumbel mu fit</source>
         <translation>Длина последовательностей для Viterbi Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="669"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="672"/>
         <source>Number of sequences for Viterbi Gumbel mu fit</source>
         <translation>Число последовательностей для MSV Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="699"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="702"/>
         <source>Length of sequences for Forward exp tail mu fit</source>
         <translation>Длина последовательностей для Forward exp tail mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="729"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="732"/>
         <source>Number of sequences for Forward exp tail mu fit</source>
         <translation>Число последовательностей для Forward exp tail mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="759"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="762"/>
         <source>Tail mass for Forward exponential tail mu fit</source>
         <translation>Масса для прямого экспоненциального хвоста mu fit</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="800"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="803"/>
         <source>Other</source>
         <translation>Разное</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="816"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="819"/>
         <source>Random generator seed</source>
         <translation>Затравка генератора случайных чисел</translation>
     </message>
     <message>
-        <location filename="../src/build/ui/UHMM3BuildDialog.ui" line="859"/>
+        <location filename="../src/build/UHMM3BuildDialog.ui" line="862"/>
         <source>* 0 means that one-time arbitrary seed will be used</source>
         <translation>* 0 - означает, что один раз будет использована случайная затравка</translation>
     </message>
@@ -1810,152 +1935,152 @@
 <context>
     <name>UHMM3PhmmerDialog</name>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="20"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="20"/>
         <source>Phmmer Search</source>
         <translation>Поиск phmmer</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="36"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="36"/>
         <source>Input and output</source>
         <translation>Ввод и вывод</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="50"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="50"/>
         <source>Query sequence file:</source>
         <translation>Файл последовательности:</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="60"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="60"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="87"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="87"/>
         <source>Reporting tresholds</source>
         <translation>Допустимые результаты</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="103"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="103"/>
         <source>Report domains with E-value less than</source>
         <translation>Сохранять результаты c величиной E-value менее</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="142"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="142"/>
         <source>Report domains with score greater than</source>
         <translation>Отсечение по итоговой сумме</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="166"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="166"/>
         <source>Number of significant sequences for domain E-value calculation</source>
         <translation>Число значимых последовательностей для подсчета E-value домена</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="201"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="201"/>
         <source>Scoring system</source>
         <translation>Оценка пропусков</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="217"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="217"/>
         <source>Gap open probability</source>
         <translation>Вероятность открытия пробела</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="247"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="247"/>
         <source>Gap extend probability</source>
         <translation>Вероятность продления пробела</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="285"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="285"/>
         <source>Acceleration</source>
         <translation>Производительность</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="297"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="297"/>
         <source>Turn off composition bias filter</source>
         <translation>Выключить composition bias фильтр</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="310"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="310"/>
         <source>Turn off biased composition score corrections</source>
         <translation>Выключить diased composition коррекию итоговой суммы</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="338"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="338"/>
         <source>Viterbi filter treshold</source>
         <translation>Порог фильтрации Viterbi</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="368"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="368"/>
         <source>MSV filter treshold</source>
         <translation>Порог фильтрации MSV</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="401"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="401"/>
         <source>Forward filter treshold</source>
         <translation>Порог фильтрации Forward</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="437"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="437"/>
         <source>E-value calibration</source>
         <translation>Калибрация E-value</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="456"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="456"/>
         <source>Length of sequences for MSV Gumbel mu fit</source>
         <translation>Длина последовательностей для MSV Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="492"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="492"/>
         <source>Number of sequences for MSV Gumbel mu fit</source>
         <translation>Число последовательностей для MSV Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="525"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="525"/>
         <source>Length of sequences for Viterbi Gumbel mu fit</source>
         <translation>Длина последовательностей для Viterbi Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="555"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="555"/>
         <source>Number of sequences for Viterbi Gumbel mu fit</source>
         <translation>Число последовательностей для Viterbi Gumbel mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="585"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="585"/>
         <source>Length of sequences for Forward exp tail mu fit</source>
         <translation>Длина последовательностей для Forward exp tail mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="615"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="615"/>
         <source>Number of sequences for Forward exp tail mu fit</source>
         <translation>Число последовательностей для Forward exp tail mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="645"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="645"/>
         <source>Tail mass for Forward exponential tail mu fit</source>
         <translation>Масса для прямого экспоненциального хвоста mu fit</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="686"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="686"/>
         <source>Other</source>
         <translation>Разное</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="702"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="702"/>
         <source>Random generator seed</source>
         <translation>Затравка генератора случайных чисел</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="745"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="745"/>
         <source>* 0 means that one-time arbitrary seed will be used</source>
         <translation>* 0 - означает, что один раз будет использована случайная затравка</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="113"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="113"/>
         <source>1E+</source>
         <translation>1E+</translation>
     </message>
     <message>
-        <location filename="../src/phmmer/ui/UHMM3PhmmerDialog.ui" line="323"/>
+        <location filename="../src/phmmer/UHMM3PhmmerDialog.ui" line="323"/>
         <source>Turn all heuristic filters off (less speed, more power)</source>
         <translation>Отключить все эвристические фильтры (более точно, менее производительно)</translation>
     </message>
@@ -1963,117 +2088,117 @@
 <context>
     <name>UHMM3SearchDialog</name>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="65"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="65"/>
         <source>Query HMM file:</source>
         <translation>HMM профайл:</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="54"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="54"/>
         <source>Input and output</source>
         <translation>Ввод и вывод</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="75"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="75"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="92"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="92"/>
         <source>Reporting thresholds</source>
         <translation>Допустимые результаты</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="109"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="109"/>
         <source>Report domains with E-value less than</source>
         <translation>Сохранять результаты c величиной E-value менее</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="119"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="119"/>
         <source>1E+</source>
         <translation>1E+</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="146"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="146"/>
         <source>Report domains with score greater than</source>
         <translation>Отсечение по итоговой сумме</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="20"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="20"/>
         <source>HMM3 Search</source>
         <translation>Поиск с помощью HMMER3</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="180"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="180"/>
         <source>Score threshold:</source>
         <translation>Порог итоговой суммы:</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="229"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="229"/>
         <source>Use profile's GA gathering cutoffs</source>
         <translation>Использовать отсечения GA</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="265"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="265"/>
         <source>Use profile's NC noise cutoffs</source>
         <translation>Использовать отсечения NC</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="295"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="295"/>
         <source>Use profile's TC trusted cutoffs</source>
         <translation>Использовать отсечения TC</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="312"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="312"/>
         <source>Number of significant sequences for domain E-value calculation</source>
         <translation>Число значимых последовательностей для подсчета E-value домена</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="345"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="345"/>
         <source>Acceleration heuristics</source>
         <translation>Производительность</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="360"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="360"/>
         <source>Turn off composition bias filter</source>
         <translation>Выключить composition bias фильтр</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="373"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="373"/>
         <source>Turn off biased composition score corrections</source>
         <translation>Выключить diased composition коррекию итоговой суммы</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="401"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="401"/>
         <source>MSV filter threshold:</source>
         <translation>Порог фильтрации MSV:</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="434"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="434"/>
         <source>Viterbi filter threshold:</source>
         <translation>Порог фильтрации Viterbi:</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="464"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="464"/>
         <source>Forward filter threshold:</source>
         <translation>Порог фильтрации Forward:</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="500"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="500"/>
         <source>Other</source>
         <translation>Разное</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="522"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="522"/>
         <source>Random generator seed</source>
         <translation>Затравка генератора случайных чисел</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="565"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="565"/>
         <source>* 0 means that one-time arbitrary seed will be used</source>
         <translation>* 0 - означает, что один раз будет использована случайная затравка</translation>
     </message>
     <message>
-        <location filename="../src/search/ui/UHMM3SearchDialog.ui" line="386"/>
+        <location filename="../src/search/UHMM3SearchDialog.ui" line="386"/>
         <source>Turn all heuristic filters off (less speed, more power)</source>
         <translation>Отключить все эвристические фильтры (более точно, менее производительно)</translation>
     </message>
diff --git a/src/plugins_3rdparty/kalign/CMakeLists.txt b/src/plugins_3rdparty/kalign/CMakeLists.txt
new file mode 100644
index 0000000..d56abbc
--- /dev/null
+++ b/src/plugins_3rdparty/kalign/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME kalign)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/kalign/kalign.pro b/src/plugins_3rdparty/kalign/kalign.pro
index 086be2b..1af2530 100644
--- a/src/plugins_3rdparty/kalign/kalign.pro
+++ b/src/plugins_3rdparty/kalign/kalign.pro
@@ -17,7 +17,6 @@ HEADERS += src/KalignAdapter.h \
            src/kalign2/kalign2_feature.h \
            src/kalign2/kalign2_hirschberg.h \
            src/kalign2/kalign2_hirschberg_dna.h \
-           src/kalign2/kalign2_hirschberg_large.h \
            src/kalign2/kalign2_input.h \
            src/kalign2/kalign2_output.h \
            src/kalign2/kalign2_profile_alignment.h \ 
@@ -25,8 +24,8 @@ HEADERS += src/KalignAdapter.h \
     src/PairwiseAlignmentHirschbergGUIExtensionFactory.h \
     src/PairwiseAlignmentHirschbergTask.h
 
-FORMS += src/ui/KalignDialog.ui \
-    src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui
+FORMS += src/KalignDialog.ui \
+    src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui
 
 SOURCES += src/KalignAdapter.cpp \
            src/KalignDialogController.cpp \
diff --git a/src/plugins_3rdparty/kalign/src/ui/KalignDialog.ui b/src/plugins_3rdparty/kalign/src/KalignDialog.ui
similarity index 100%
rename from src/plugins_3rdparty/kalign/src/ui/KalignDialog.ui
rename to src/plugins_3rdparty/kalign/src/KalignDialog.ui
diff --git a/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp b/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp
index 35d3803..dda0bb3 100644
--- a/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp
+++ b/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp
@@ -19,18 +19,12 @@
  * 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/BaseDocumentFormats.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNATranslation.h>
 #include <U2Core/DocumentUtils.h>
@@ -39,12 +33,11 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "KalignDialogController.h"
 
-/* TRANSLATOR U2::KalignDialogController */    
-
 namespace U2 {
 
 class QClearableDoubleSpinBox : public QDoubleSpinBox {
@@ -66,7 +59,7 @@ KalignDialogController::KalignDialogController(QWidget* w, const MAlignment& _ma
 : QDialog(w), ma(_ma), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467808");
+    new HelpButton(this, buttonBox, "17470741");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -125,17 +118,19 @@ void KalignDialogController::accept() {
 
 //KalignAlignWithExtFileSpecifyDialogController
 KalignAlignWithExtFileSpecifyDialogController::KalignAlignWithExtFileSpecifyDialogController(QWidget* w, KalignTaskSettings& _settings)
-: QDialog(w), settings(_settings)
-    {
+    : QDialog(w),
+      settings(_settings),
+      saveController(NULL)
+{
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467841");
+    new HelpButton(this, buttonBox, "17470767");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    //this->adjustSize();
+    initSaveController();
+
     connect(inputFilePathButton, SIGNAL(clicked()), SLOT(sl_inputPathButtonClicked()));
-    connect(outputFilePathButton, SIGNAL(clicked()), SLOT(sl_outputPathButtonClicked()));
 
     const DNAAlphabet* al = AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
     DNATranslationRegistry* tr = AppContext::getDNATranslationRegistry();
@@ -143,8 +138,9 @@ KalignAlignWithExtFileSpecifyDialogController::KalignAlignWithExtFileSpecifyDial
     assert(!aminoTs.empty());
     foreach(DNATranslation* t, aminoTs) {
         translationTableBox->addItem(t->getTranslationName());
-        }
+    }
 }
+
 void KalignAlignWithExtFileSpecifyDialogController::sl_inputPathButtonClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Open an alignment file"), lod.dir,
@@ -155,24 +151,21 @@ void KalignAlignWithExtFileSpecifyDialogController::sl_inputPathButtonClicked()
     inputFileLineEdit->setText(lod.url);
 }
 
-void KalignAlignWithExtFileSpecifyDialogController::sl_outputPathButtonClicked() {
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Save an multiple alignment file"), lod.dir);
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    outputFileLineEdit->setText(lod.url);
-    buildMultipleAlignmentUrl(lod.url);
+void KalignAlignWithExtFileSpecifyDialogController::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
+    config.fileDialogButton = outputFilePathButton;
+    config.fileNameEdit = outputFileLineEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save an multiple alignment file");
+    config.rollOutProjectUrls = true;
 
-}
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::CLUSTAL_ALN;
 
-void KalignAlignWithExtFileSpecifyDialogController::buildMultipleAlignmentUrl(const GUrl &alnUrl) {
-    GUrl url = GUrlUtils::rollFileName(alnUrl.dirPath() + "/" + alnUrl.baseFileName()+ ".aln", DocumentUtils::getNewDocFileNameExcludesHint());
-    outputFileLineEdit->setText(url.getURLString());
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
-bool KalignDialogController::translateToAmino()
-{
+bool KalignDialogController::translateToAmino() {
     return translateCheckBox->isChecked();
 }
 
@@ -198,17 +191,17 @@ void KalignAlignWithExtFileSpecifyDialogController::accept() {
     }
     if(inputFileLineEdit->text().isEmpty()){
         QMessageBox::information(this, tr("Kalign with Align"),
-            tr("Input file is not set!") );
-        }else if(outputFileLineEdit->text().isEmpty()){
-            QMessageBox::information(this, tr("Kalign with Align"),
-                tr("Output file is not set!") );
-        }
-        else{
-        settings.outputFilePath=outputFileLineEdit->text();
-        settings.inputFilePath=inputFileLineEdit->text();
+                                 tr("Input file is not set!") );
+    }else if(saveController->getSaveFileName().isEmpty()){
+        QMessageBox::information(this, tr("Kalign with Align"),
+                                 tr("Output file is not set!") );
+    }
+    else{
+        settings.outputFilePath = saveController->getSaveFileName();
+        settings.inputFilePath = inputFileLineEdit->text();
         QDialog::accept();
-            }
-        
+    }
+
 }
 
 }//namespace
diff --git a/src/plugins_3rdparty/kalign/src/KalignDialogController.h b/src/plugins_3rdparty/kalign/src/KalignDialogController.h
index 7b92895..485a3bd 100644
--- a/src/plugins_3rdparty/kalign/src/KalignDialogController.h
+++ b/src/plugins_3rdparty/kalign/src/KalignDialogController.h
@@ -22,20 +22,19 @@
 #ifndef _U2_KALIGN_ALIGN_DIALOG_CONTROLLER_H_
 #define _U2_KALIGN_ALIGN_DIALOG_CONTROLLER_H_
 
+#include <QDialog>
+
 #include <U2Core/GAutoDeleteList.h>
+
 #include <U2Gui/DialogUtils.h>
 
-#include <ui/ui_KalignDialog.h>
+#include <ui_KalignDialog.h>
 #include "KalignTask.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-
 namespace U2 {
 
+class SaveDocumentController;
+
 class KalignDialogController : public QDialog, public Ui_KalignDialog {
     Q_OBJECT
 
@@ -43,6 +42,7 @@ public:
     KalignDialogController(QWidget* w, const MAlignment& ma, KalignTaskSettings& settings);
     bool translateToAmino();
     QString getTranslationId();
+
 public slots:
     void accept();
 
@@ -50,8 +50,6 @@ private:
     void setupUiExt(); 
     MAlignment                          ma;
     KalignTaskSettings&                 settings;
-//    Ui_KalignDialog* ui;
-
 };
 
 class KalignAlignWithExtFileSpecifyDialogController : public QDialog, public Ui_KalignDialog {
@@ -65,12 +63,13 @@ public slots:
 
 private slots:
     void sl_inputPathButtonClicked();
-    void sl_outputPathButtonClicked();
 
 private:
+    void initSaveController();
+
     KalignTaskSettings&                 settings;
-    void buildMultipleAlignmentUrl(const GUrl &alnUrl);
-    };
+    SaveDocumentController *            saveController;
+};
 
 
 }//namespace
diff --git a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.h b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.h
index 1bab83a..3c0f600 100644
--- a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.h
+++ b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.h
@@ -22,7 +22,7 @@
 #ifndef _U2_PAIRWISE_ALIGNMENT_HIRSCHBERG_GUI_EXTENSION_FACTORY_H_
 #define _U2_PAIRWISE_ALIGNMENT_HIRSCHBERG_GUI_EXTENSION_FACTORY_H_
 
-#include "ui/ui_PairwiseAlignmentHirschbergOptionsPanelMainWidget.h"
+#include "ui_PairwiseAlignmentHirschbergOptionsPanelMainWidget.h"
 
 #include <U2View/AlignmentAlgorithmGUIExtension.h>
 
diff --git a/src/plugins_3rdparty/kalign/src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui
similarity index 100%
rename from src/plugins_3rdparty/kalign/src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui
rename to src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui
diff --git a/src/plugins_3rdparty/kalign/src/kalign2/kalign2_hirschberg_large.c b/src/plugins_3rdparty/kalign/src/kalign2/kalign2_hirschberg_large.c
deleted file mode 100644
index 54aa20e..0000000
--- a/src/plugins_3rdparty/kalign/src/kalign2/kalign2_hirschberg_large.c
+++ /dev/null
@@ -1,2508 +0,0 @@
-/*
-	kalign2_hirschberg_large.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-#include "kalign2_hirschberg_large.h"
-#define MAX(a, b) (a > b ? a : b)
-#define MAX3(a,b,c) MAX(MAX(a,b),c)
-//#include <emmintrin.h>
-
-float local_gpo;
-float local_gpe;
-float local_tgpe;
-
-int** hirschberg_large_alignment(struct alignment* aln,int* tree,float**submatrix, int** map,int window,float strength)
-{
-	struct hirsch_large_mem* hm = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	
-
-	
-	float** profile = 0;
-	
-	float** subm = 0;
-	subm = malloc(sizeof(float*)*32);
-	for(i = 0; i < 32;i++){
-		subm[i] = malloc(sizeof(float)*32);
-		for (j = 0; j < 32;j++){
-			subm[i][j] = (float)submatrix[i][j];
-		}
-	}
-	local_gpo = (float)gpo;
-	local_gpe = (float)gpe;
-	local_tgpe = (float)tgpe;
-	
-
-	profile = malloc(sizeof(float*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	hm = hirsch_large_mem_alloc(hm,1024);
-
-	fprintf(stderr,"\nAlignment:\n");
-
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"\r%8.0f percent done",(float)(i) /(float)numseq * 100);
-		//fprintf(stderr,"Aligning:%d %d->%d	done:%f\n",a,b,c,((float)(i+1)/(float)numseq)*100);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-
-		
-		g = (len_a > len_b)? len_a:len_b;
-		map[c] = malloc(sizeof(int) * (g+2));
-		if(g > hm->size){
-			hm = hirsch_large_mem_realloc(hm,g);
-		}
-
-		for (j = 0; j < (g+2);j++){
-			map[c][j] = -1;
-		}
-
-		if (a < numseq){
-			profile[a] = make_large_profile(profile[a],aln->s[a],len_a,subm);
-		}else{
-			set_large_gap_penalties(profile[a],len_a,aln->nsip[b]);
-		}
-		if (b < numseq){
-			profile[b] = make_large_profile(profile[b],aln->s[b],len_b,subm);
-		}else{		
-			set_large_gap_penalties(profile[b],len_b,aln->nsip[a]);
-		}
-		
-		hm->starta = 0;
-		hm->startb = 0;
-		hm->enda = len_a;
-		hm->endb = len_b;
-		hm->len_a = len_a;
-		hm->len_b = len_b;
-		
-		hm->f[0].a = 0.0;
-		hm->f[0].ga =  -FLOATINFTY;
-		hm->f[0].gb = -FLOATINFTY;
-		hm->b[0].a = 0.0;
-		hm->b[0].ga =  -FLOATINFTY;
-		hm->b[0].gb =  -FLOATINFTY;
-	//	fprintf(stderr,"LENA:%d	LENB:%d	numseq:%d\n",len_a,len_b,numseq);
-		if(a < numseq){
-			if(b < numseq){
-				map[c] = hirsch_large_ss_dyn(subm,aln->s[a],aln->s[b],hm,map[c]);
-			}else{
-				hm->enda = len_b;
-				hm->endb = len_a;
-				hm->len_a = len_b;
-				hm->len_b = len_a;
-				map[c] = hirsch_large_ps_dyn(profile[b],aln->s[a],hm,map[c],aln->nsip[b]);
-				map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-			}
-		}else{
-			if(b < numseq){
-				map[c] = hirsch_large_ps_dyn(profile[a],aln->s[b],hm,map[c],aln->nsip[a]);
-			}else{
-				if(len_a < len_b){
-					map[c] = hirsch_large_pp_dyn(profile[a],profile[b],hm,map[c]);
-				}else{
-					hm->enda = len_b;
-					hm->endb = len_a;
-					hm->len_a = len_b;
-					hm->len_b = len_a;
-					map[c] = hirsch_large_pp_dyn(profile[b],profile[a],hm,map[c]);
-					map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-				}
-			}
-		}
-		
-		map[c] = add_gap_info_to_hirsch_path(map[c],len_a,len_b);
-
-		if(i != numseq-2){
-			profile[c] = malloc(sizeof(float)*64*(map[c][0]+2));
-			profile[c] = large_update(profile[a],profile[b],profile[c],map[c],aln->nsip[a],aln->nsip[b]);
-		}
-			
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-
-		free(profile[a]);
-		free(profile[b]);
-	}
-	fprintf(stderr,"\r%8.0f percent done\n",100.0);
-	free(profile);
-	hirsch_large_mem_free(hm);
-	for (i = 32;i--;){
-		free(subm[i]);
-		free(submatrix[i]);
-	}
-	free(subm);
-	free(submatrix);
-	return map;
-}
-
-
-int* hirsch_large_ss_dyn(float**subm, const int* seq1,const int* seq2,struct hirsch_large_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-
-	hm->enda = mid;
-
-	//fprintf(stderr,"Forward:%d-%d	%d-%d\n",hm->starta,hm->enda,hm->startb,hm->endb);
-	hm->f = foward_large_hirsch_ss_dyn(subm,seq1,seq2,hm);
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	//fprintf(stderr,"Backward:%d-%d	%d-%d\n",hm->starta,hm->enda,hm->startb,hm->endb);
-	hm->b = backward_large_hirsch_ss_dyn(subm,seq1,seq2,hm);
-
-
-	hirsch_path = hirsch_large_align_two_ss_vector(subm,seq1,seq2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-int* hirsch_large_align_two_ss_vector(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[])
-{
-	struct large_states* f = hm->f;
- 	struct large_states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -FLOATINFTY;
-	float max = -FLOATINFTY;	
-	//float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float middle =  (old_cor[3] - old_cor[2])/2 + old_cor[2];
-	float sub = 0.0;
-	
-	//i = hm->startb;
-	i = old_cor[2];
-	c = -1;
-	//for(i = hm->startb; i < hm->endb;i++){
-	for(i = old_cor[2]; i < old_cor[3];i++){
-	
-		sub = abs(middle -i);
-		sub /= 1000; 
-	//	fprintf(stderr,"%d-%d	%f\n",hm->startb,hm->endb,sub);
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga-local_gpo-sub > max){
-			max = f[i].a+b[i].ga-local_gpo-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb -local_gpo -sub > max){
-			max = f[i].a+b[i].gb - local_gpo-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a - local_gpo-sub > max){
-			max = f[i].ga+b[i].a - local_gpo-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb - local_tgpe-sub > max){
-				max = f[i].gb+b[i].gb -local_tgpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb - local_gpe -sub> max){
-				max = f[i].gb+b[i].gb - local_gpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a - local_gpo-sub > max){
-			max = f[i].gb+b[i].a - local_gpo-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	//i = hm->endb;
-	i = old_cor[3];
-	sub = abs(middle -i);
-	sub /= 1000; 
-	
-	if(f[i].a+b[i].gb-local_gpo-sub > max){
-		max = f[i].a+b[i].gb - local_gpo-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb -local_tgpe-sub > max){
-			max = f[i].gb+b[i].gb - local_tgpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb - gpe-sub > max){
-			max = f[i].gb+b[i].gb - gpe-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(local_gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ss_dyn(subm,seq1,seq2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-
-
-struct large_states* foward_large_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm)
-{
-	struct large_states* s = hm->f;
-	float *subp = 0;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-
-	s[startb].a = s[0].a;
-	s[startb].ga = s[0].ga;
-	s[startb].gb = s[0].gb;
-	if(startb == 0){
-		for (j = startb+1; j < endb;j++){
-
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j-1].a-local_tgpe;
-			//if (s[j-1].ga-local_tgpe > s[j].ga){
-			//	s[j].ga = s[j-1].ga-local_tgpe;
-			//}
-			//if(s[j-1].ga > s[j-1].a){
-			//	s[j].ga = s[j-1].ga-local_tgpe;
-			//}else{
-			//	s[j].ga = s[j-1].a-local_tgpe;
-			//}
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a)-local_tgpe;
-			
-			s[j].gb = -FLOATINFTY;
-		}		
-	}else{
-
-		for (j = startb+1; j < endb;j++){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j-1].a-local_gpo;
-			//if (s[j-1].ga - gpe > s[j].ga){
-			//	s[j].ga = s[j-1].ga-gpe;
-			//}
-			//if(s[j-1].ga - gpe >s[j-1].a-local_gpo){
-			//	s[j].ga = s[j-1].ga-gpe;
-			//}else{
-			//	s[j].ga = s[j-1].a-local_gpo;
-			//}
-			s[j].ga = MAX(s[j-1].ga - local_gpe,s[j-1].a-local_gpo);
-			
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-	s[endb].a = -FLOATINFTY;
-	s[endb].ga = -FLOATINFTY;
-	s[endb].gb = -FLOATINFTY;
-
-	seq2--;
-	for (i = starta;i < enda;i++){
-		subp = subm[seq1[i]];
-
-		pa = s[startb].a;
-		pga = s[startb].ga;
-		pgb = s[startb].gb;
-		if(startb == 0){
-			s[startb].a = -FLOATINFTY;
-			s[startb].ga = -FLOATINFTY;
-		
-			//s[startb].gb = pa-local_tgpe;
-			//if(pgb - local_tgpe > s[startb].gb){
-			//	s[startb].gb = pgb-local_tgpe;
-			//}
-			//if(pgb > pa){
-			//	s[startb].gb = pgb-local_tgpe;
-			//}else{
-			//	s[startb].gb = pa-local_tgpe;
-			//}
-			s[startb].gb = MAX(pgb,pa) - local_tgpe;
-		}else{
-			s[startb].a = -FLOATINFTY;
-			s[startb].ga = -FLOATINFTY;
-		
-			//s[startb].gb = pa-local_gpo;
-			//if(pgb -gpe > s[startb].gb){
-			//	s[startb].gb = pgb -gpe;
-			//}
-			//if(pgb - gpe > pa - local_gpo){
-			//	s[startb].gb = pgb - gpe;
-			//}else{
-			//	s[startb].gb = pa - local_gpo;
-			//}
-			s[startb].gb = MAX(pgb - local_gpe,pa - local_gpo);
-			
-		}
-		for (j = startb+1; j <= endb;j++){
-			ca = s[j].a;
-			//if((pga -= local_gpo) > pa){
-			//	pa = pga;
-			//}
-			//if((pgb -= local_gpo) > pa){
-			//	pa = pgb;
-			//}
-			pa = MAX3(pa,pga-local_gpo,pgb-local_gpo);
-			
-			pa += subp[seq2[j]];
-			
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//s[j].ga = s[j-1].a-local_gpo;
-			//if (s[j-1].ga-gpe > s[j].ga){
-			//	s[j].ga = s[j-1].ga-gpe;
-			//}
-			
-			//if(s[j-1].ga-gpe >s[j-1].a-local_gpo){
-			//	s[j].ga = s[j-1].ga-gpe;
-			//}else{
-			//	s[j].ga = s[j-1].a-local_gpo;
-			//}
-			s[j].ga = MAX(s[j-1].ga-local_gpe,s[j-1].a-local_gpo);
-			
-			pgb = s[j].gb;
-			
-			//s[j].gb = ca-local_gpo;
-			//if(pgb-gpe > s[j].gb){
-			//	s[j].gb = pgb-gpe;
-			//}
-			
-			//if(pgb-gpe >  ca-local_gpo){
-			//	s[j].gb = pgb-gpe;
-			//}else{
-			//	s[j].gb = ca-local_gpo;
-			//}
-			s[j].gb = MAX(pgb-local_gpe ,ca-local_gpo);
-			
-			pa = ca;
-		}
-	}
-	return s;
-}
-
-struct large_states* backward_large_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm)
-{
-
-	struct large_states* s = hm->b;
-	float *subp = 0;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-
-	s[endb].a = s[0].a ;
-	s[endb].ga = s[0].ga;
-	s[endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	
-	//j = endb-startb;
-	if(endb == hm->len_b){
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j+1].a-local_tgpe;
-			//if (s[j+1].ga-local_tgpe > s[j].ga){
-			//	s[j].ga = s[j+1].ga-local_tgpe;
-			//}
-			//if(s[j+1].ga > s[j+1].a){
-			//	s[j].ga = s[j+1].ga-local_tgpe;
-			//}else{
-			//	s[j].ga = s[j+1].a-local_tgpe;
-			//}
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)-local_tgpe;
-			
-			s[j].gb = -FLOATINFTY;
-		}
-	}else{
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j+1].a-local_gpo;
-			//if (s[j+1].ga-gpe > s[j].ga){
-			//	s[j].ga = s[j+1].ga-gpe;
-			//}
-			//if(s[j+1].ga-gpe > s[j+1].a-local_gpo){
-			//	s[j].ga = s[j+1].ga-gpe;
-			//}else{
-			//	s[j].ga = s[j+1].a-local_gpo;
-			//}
-			s[j].ga = MAX(s[j+1].ga-local_gpe,s[j+1].a-local_gpo);
-			
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-
-	
-	s[startb].a = -FLOATINFTY;
-	s[startb].ga = -FLOATINFTY;
-	s[startb].gb = -FLOATINFTY;
-
-	i = enda-starta;
-	seq1+= starta;
-	while(i--){
-		subp = subm[seq1[i]];
-		pa = s[endb].a;
-		pga = s[endb].ga;
-		pgb = s[endb].gb;
-		s[endb].a = -FLOATINFTY;
-		s[endb].ga = -FLOATINFTY;
-
-		if(endb == hm->len_b){
-			//s[endb].gb = pa-local_tgpe;
-			//if(pgb-local_tgpe > s[endb].gb){
-			//	s[endb].gb = pgb-local_tgpe;
-			//}
-			//if(pgb > pa){
-			//	s[endb].gb = pgb-local_tgpe;
-			//}else{
-			//	s[endb].gb = pa-local_tgpe;
-			//}
-			s[endb].gb = MAX(pgb,pa)-local_tgpe;
-			
-			
-		}else{
-			//s[endb].gb = pa-local_gpo;
-			//if(pgb-gpe > s[endb].gb){
-			//	s[endb].gb = pgb-gpe;
-			//}
-			//if(pgb-gpe  > pa-local_gpo){
-			//	s[endb].gb = pgb-gpe;
-			//}else{
-			//	s[endb].gb = pa-local_gpo;
-			//}
-			s[endb].gb = MAX(pgb-local_gpe,pa-local_gpo);
-			
-		}
-
-		for(j = endb-1;j >= startb;j--){
-
-			ca = s[j].a;
-			//if((pga -= local_gpo) > pa){
-			//	pa = pga;
-			//}
-			//if((pgb -= local_gpo) > pa){
-			//	pa = pgb;
-			//}
-			pa = MAX3(pa,pga - local_gpo,pgb-local_gpo);
-			
-			pa += subp[seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//s[j].ga = s[j+1].a-local_gpo;
-			//if (s[j+1].ga-gpe > s[j].ga){
-			//	s[j].ga = s[j+1].ga-gpe;
-			//}
-			
-			
-			//if(s[j+1].ga-gpe >s[j+1].a-local_gpo){
-			//	s[j].ga = s[j+1].ga-gpe;
-			//}else{
-			//	s[j].ga = s[j+1].a-local_gpo;
-			//}
-			s[j].ga = MAX(s[j+1].ga-local_gpe,s[j+1].a-local_gpo);
-			
-			pgb = s[j].gb;
-			
-			//s[j].gb = ca-local_gpo;
-			//if(pgb-gpe > s[j].gb){
-			//	s[j].gb = pgb-gpe;
-			//}
-			//if(pgb-gpe >  ca-local_gpo){
-			//	s[j].gb = pgb-gpe;
-			//}else{
-			//	s[j].gb = ca-local_gpo;
-			//}
-			s[j].gb = MAX(pgb-local_gpe,ca-local_gpo);
-			
-			pa = ca;
-		}
-	}		
-	return s;
-}
-
-
-int* hirsch_large_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm, int* hirsch_path,int sip)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = foward_large_hirsch_ps_dyn(prof1,seq2,hm,sip);
-	
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = backward_large_hirsch_ps_dyn(prof1,seq2,hm,sip);
-	
-	/*fprintf(stderr,"BaCKWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = hirsch_large_align_two_ps_vector(prof1,seq2,hm,hirsch_path,input_states,old_cor,sip);
-	return hirsch_path;
-}
-
-
-
-int* hirsch_large_align_two_ps_vector(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[],int sip)
-{
-	struct large_states* f = hm->f;
- 	struct large_states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	const float open = local_gpo * sip;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -FLOATINFTY;
-	float max = -FLOATINFTY;	
-	//float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float middle =  (old_cor[3] - old_cor[2])/2 + old_cor[2];
-	float sub = 0.0;
-	
-	
-	prof1+= ((old_cor[4]+1)<<6);
-	
-	//i = hm->startb;
-	i = old_cor[2];
-	c = -1;
-	//for(i = hm->startb; i < hm->endb;i++){
-	for(i = old_cor[2]; i < old_cor[3];i++){
-		sub = abs(middle -i);
-		sub /= 1000;		
-		if(f[i].a+b[i].a-sub> max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga-open-sub > max){
-			max = f[i].a+b[i].ga-open-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[27]-sub > max){
-			max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a-open-sub > max){
-			max = f[i].ga+b[i].a-open-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[27]-sub > max){
-			max = f[i].gb+b[i].a+prof1[27]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	//i = hm->endb;
-	i = old_cor[3];
-	
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[27]-sub > max){
-		max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= ((old_cor[4]+1)<<6);
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);			
-
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_ps_dyn(prof1,seq2,hm,hirsch_path,sip);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-struct large_states* foward_large_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int sip)
-{
-//	unsigned int freq[26];
-	struct large_states* s = hm->f;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-	const float open = local_gpo * sip;
-	const float ext = local_gpe *sip; 
-	const float text = local_tgpe * sip;
-	
-	
-	
-	prof1 += (starta)<< 6;
-	s[startb].a = s[0].a;
-	s[startb].ga = s[0].ga;
-	s[startb].gb = s[0].gb;
-	if(startb == 0){
-		for (j = startb+1; j < endb;j++){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j-1].a-text;
-			//if (s[j-1].ga-text > s[j].ga){
-			//	s[j].ga = s[j-1].ga-text;
-			//}
-			//if(s[j-1].ga > s[j-1].a){
-			//	s[j].ga = s[j-1].ga-text;
-			//}else{
-			//	s[j].ga = s[j-1].a-text;
-			//}
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a) - text;
-			s[j].gb = -FLOATINFTY;
-		}	
-	}else{
-
-		for (j = startb+1; j < endb;j++){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j-1].a-open;
-			//if (s[j-1].ga-ext > s[j].ga){
-			//	s[j].ga = s[j-1].ga-ext;
-			//}
-			//if(s[j-1].ga-ext > s[j-1].a-open){
-			//	s[j].ga = s[j-1].ga-ext;
-			//}else{
-			//	s[j].ga = s[j-1].a-open;
-			//}	
-			s[j].ga = MAX(s[j-1].ga-ext,s[j-1].a-open);
-			
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-	
-	
-	s[endb].a = -FLOATINFTY;
-	s[endb].ga = -FLOATINFTY;
-	s[endb].gb = -FLOATINFTY;
-	seq2--;
-
-	for (i = starta;i < enda;i++){
-		prof1 += 64;
-		//pa = 1;
-		//for (j = 26; j--;){
-		//	if(prof1[j]){
-		//		freq[pa] = j;
-		//		pa++;	
-		//	}
-		//}
-		//freq[0] = pa;
-		pa = s[startb].a;
-		pga = s[startb].ga;
-		pgb = s[startb].gb;
-		if(startb == 0){
-			s[startb].a = -FLOATINFTY;
-			s[startb].ga = -FLOATINFTY;
-		
-			//s[startb].gb = pa+prof1[29];
-			//if(pgb+prof1[29] > s[startb].gb){
-			//	s[startb].gb = pgb+prof1[29];
-			//}
-			//if(pgb > pa){
-			//	s[startb].gb = pgb+prof1[29];
-			//}else{
-			//	s[startb].gb = pa+prof1[29];
-			//}
-			s[startb].gb = MAX(pgb,pa)+prof1[29];
-		}else{
-			s[startb].a = -FLOATINFTY;
-			s[startb].ga = -FLOATINFTY;
-		
-			//s[startb].gb = pa+prof1[27];
-			//if(pgb+prof1[28] > s[startb].gb){
-			//	s[startb].gb = pgb+prof1[28];
-			//}
-			//if(pgb+prof1[28] > pa+prof1[27]){
-			//	s[startb].gb = pgb+prof1[28];
-			//}else{
-			//	s[startb].gb = pa+prof1[27];
-			//}
-			s[startb].gb = MAX(pgb+prof1[28],pa+prof1[27]);
-		}
-		for (j = startb+1; j <= endb;j++){
-			ca = s[j].a;
-			
-			//if((pga -= open) > pa){
-			//	pa = pga;
-			//}
-
-			//if((pgb += prof1[-37]) > pa){
-			//	pa = pgb;
-			//}
-			pa = MAX3(pa,pga -open,pgb + prof1[-37]);
-			
-			pa += prof1[32 + seq2[j]];
-
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//s[j].ga = s[j-1].a-open;
-			//if (s[j-1].ga-ext > s[j].ga){
-			//	s[j].ga = s[j-1].ga-ext;
-			//}
-			
-			//if (s[j-1].ga-ext  > s[j-1].a-open){
-			//	s[j].ga = s[j-1].ga-ext;
-			//}else{
-			//	s[j].ga = s[j-1].a-open;
-			//}
-			s[j].ga = MAX(s[j-1].ga-ext,s[j-1].a-open);
-			
-			
-			pgb = s[j].gb;
-			
-			//s[j].gb = ca+prof1[27];
-			//if(pgb+prof1[28] > s[j].gb){
-			//	s[j].gb = pgb+prof1[28];
-			//}
-			//if(pgb+prof1[28] > ca+prof1[27]){
-			//	s[j].gb = pgb+prof1[28];
-			//}else{
-			//	s[j].gb = ca+prof1[27];
-			//}
-			s[j].gb = MAX(pgb+prof1[28],ca+prof1[27]);
-			
-			
-			pa = ca;
-		}	
-	}
-	prof1 -= enda << 6;
-	return s;
-}
-
-struct large_states* backward_large_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int sip)
-{
-	//unsigned int freq[26];
-	struct large_states* s = hm->b;
-	const int starta = hm->starta;
-	const int enda = hm->enda;
-	const int startb = hm->startb;
-	const int endb = hm->endb;
-	
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-	const float open = local_gpo * sip;
-	const float ext = local_gpe *sip; 
-	const float text = local_tgpe * sip;
-	
-
-	prof1 += (enda+1) << 6;
-
-	s[endb].a = s[0].a;
-	s[endb].ga = s[0].ga;
-	s[endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	//j = endb-startb;
-	if(endb == hm->len_b){
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			//s[j].ga = s[j+1].a-text;
-			//if (s[j+1].ga-text > s[j].ga){
-			//	s[j].ga = s[j+1].ga-text;
-			//}
-			//if(s[j+1].ga > s[j+1].a){
-			//	s[j].ga = s[j+1].ga-text;
-			//}else{
-			//	s[j].ga = s[j+1].a-text;
-			//}
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)-text;
-			
-			s[j].gb = -FLOATINFTY;
-		}
-	}else{
-		for(j = endb-1;j > startb;j--){
-			s[j].a = -FLOATINFTY;
-			
-			//s[j].ga = s[j+1].a-open;
-			//if (s[j+1].ga-ext > s[j].ga){
-			//	s[j].ga = s[j+1].ga-ext;
-			//}
-			//if(s[j+1].ga-ext > s[j+1].a-open){
-			//	s[j].ga = s[j+1].ga-ext;
-			//}else{
-			//	s[j].ga = s[j+1].a-open;
-			//}
-			s[j].ga = MAX(s[j+1].ga-ext,s[j+1].a-open);
-			s[j].gb = -FLOATINFTY;
-		}
-	}
-	
-	s[startb].a = -FLOATINFTY;
-	s[startb].ga = -FLOATINFTY;
-	s[startb].gb = -FLOATINFTY;
-
-	i = enda-starta;
-	while(i--){
-		prof1 -= 64;
-
-		//pa = 1;
-		//for (j = 26; j--;){
-		//	if(prof1[j]){
-		//		freq[pa] = j;
-		//		pa++;	
-		//	}
-		//}
-		//freq[0] = pa;
-		
-		pa = s[endb].a;
-		pga = s[endb].ga;
-		pgb = s[endb].gb;
-		s[endb].a = -FLOATINFTY;
-		s[endb].ga = -FLOATINFTY;
-
-		if(endb == hm->len_b){
-			//s[endb].gb = pa+prof1[29];
-			//if(pgb+prof1[29] > s[endb].gb){
-			//	s[endb].gb = pgb+prof1[29];
-			//}
-			//if(pgb > pa){
-			//	s[endb].gb = pgb+prof1[29];
-			//}else{
-			//	s[endb].gb = pa+prof1[29];
-			//}
-			s[endb].gb = MAX(pgb,pa) +prof1[29];
-		}else{
-			//s[endb].gb = pa+prof1[27];
-			//if(pgb+prof1[28] > s[endb].gb){
-			//	s[endb].gb = pgb+prof1[28];
-			//}
-			//if(pgb+prof1[28] > pa+prof1[27]){
-			//	s[endb].gb = pgb+prof1[28];
-			//}else{
-			//	s[endb].gb = pa+prof1[27];
-			//}
-			s[endb].gb = MAX(pgb+prof1[28],pa+prof1[27]);
-			
-			
-		}
-
-		for(j = endb-1;j >= startb;j--){
-			ca = s[j].a;
-			//if((pga -= open) > pa){
-			//	pa = pga;
-			//}
-			//if((pgb += prof1[91]) > pa){
-			//	pa = pgb;
-			//}
-
-			pa = MAX3(pa,pga - open,pgb +prof1[91]);
-			pa += prof1[32 + seq2[j]];
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//s[j].ga = s[j+1].a-open;
-			//if (s[j+1].ga-ext > s[j].ga){
-			//	s[j].ga = s[j+1].ga-ext;
-			//}
-			//if (s[j+1].ga-ext  > s[j+1].a-open){
-			//	s[j].ga = s[j+1].ga-ext;
-			//}else{
-			//	s[j].ga = s[j+1].a-open;
-			//}
-			s[j].ga = MAX(s[j+1].ga-ext,s[j+1].a-open);
-			
-			
-			pgb = s[j].gb;
-			
-			//s[j].gb = ca+prof1[27];
-			//if(pgb+prof1[28] > s[j].gb){
-			//	s[j].gb = pgb+prof1[28];
-			//}
-			//if(pgb+prof1[28] > ca+prof1[27]){
-			//	s[j].gb = pgb+prof1[28];
-			//}else{
-			//	s[j].gb = ca+prof1[27];
-			//}
-			s[j].gb = MAX(pgb+prof1[28],ca+prof1[27]);
-			
-			pa = ca;
-		}
-	}		
-	return s;
-}
-
-
-
-
-int* hirsch_large_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	float input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	
-	//fprintf(stderr,"starta:%d enda:%d startb:%d endb:%d mid:%d\n",hm->starta,hm->enda,hm->startb,hm->endb,mid);
-	
-	
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = foward_large_hirsch_pp_dyn(prof1,prof2,hm);
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = backward_large_hirsch_pp_dyn(prof1,prof2,hm);
-	/*fprintf(stderr,"BaCKWARD\n");
-
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = hirsch_large_align_two_pp_vector(prof1,prof2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-
-
-int* hirsch_large_align_two_pp_vector(const float* prof1,const float* prof2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[])
-{
-	struct large_states* f = hm->f;
- 	struct large_states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -FLOATINFTY;
-	float max = -FLOATINFTY;	
-	//float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float middle =  (old_cor[3] - old_cor[2])/2 + old_cor[2];
-	float sub = 0.0;
-	
-
-	prof1+= ((old_cor[4]+1) << 6);
-	//prof2 += 64 * (hm->startb);
-	//i = hm->startb;
-	prof2 += old_cor[2] << 6;
-	i = old_cor[2];
-	c = -1;
-	//for(i = hm->startb; i < hm->endb;i++){
-	for(i = old_cor[2]; i < old_cor[3];i++){
-		sub = abs(middle -i);
-		sub /= 1000; 
-		prof2 += 64;
-		//fprintf(stderr,"%d	%d	%d \n",f[i].a,b[i].a,max);
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga+prof2[27]-sub > max){
-			max = f[i].a+b[i].ga+prof2[27]-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[27] -sub> max){
-			max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a+prof2[27]-sub > max){
-			max = f[i].ga+b[i].a+prof2[27]-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-				max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[27]-sub > max){
-			max = f[i].gb+b[i].a+prof1[27]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(local_gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	//i = hm->endb;
-	i = old_cor[3];
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[27]-sub > max){
-		max = f[i].a+b[i].gb+prof1[27]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb+prof1[29]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[29]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb+prof1[28]-sub > max){
-			max = f[i].gb+b[i].gb+prof1[28]-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= (old_cor[4]+1)<<6;
-	//prof2 -= hm->endb << 6;
-	prof2 -= old_cor[3] << 6;
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	//if(transition == -1){
-	//	exit(0);
-	//}
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			//fprintf(stderr,"Using this for start:%ld	%ld	%ld\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = 0;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = 0;
-			hm->b[0].gb = -FLOATINFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -FLOATINFTY;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -FLOATINFTY;
-			hm->b[0].ga = -FLOATINFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -FLOATINFTY;
-			hm->f[0].gb = -FLOATINFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = hirsch_large_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-struct large_states* foward_large_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm)
-{
-	int freq[26];
-
-	/*union print{
-		__m128i m;
-		int tmp[4];
-	} output;
-	
-	__m128i xmm1;
-	__m128i xmm2;*/
-
-	
-	struct large_states* s = hm->f;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	
-	prof1 += (hm->starta) << 6;
-	prof2 +=  (hm->startb) << 6;
-	s[hm->startb].a = s[0].a;
-	s[hm->startb].ga = s[0].ga;
-	s[hm->startb].gb = s[0].gb;
-	/*if(s[hm->startb].ga == -FLOATINFTY && s[hm->startb].a == -FLOATINFTY){
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = -FLOATINFTY;
-			s[j].gb = -FLOATINFTY;
-		}	
-		prof2+=64;	
-	}else{
-	*/
-	if(hm->startb == 0){
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -FLOATINFTY;
-			//if (s[j-1].ga > s[j-1].a){
-			//	s[j].ga = s[j-1].ga+prof2[29];
-			//}else{
-			//	s[j].ga = s[j-1].a+prof2[29];
-			//}
-			s[j].ga = MAX(s[j-1].ga,s[j-1].a)+prof2[29];
-			s[j].gb = -FLOATINFTY;
-		}	
-		prof2+=64;	
-	}else{
-
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -FLOATINFTY;
-			//if(s[j-1].ga+prof2[28] > s[j-1].a+prof2[27]){
-			//	s[j].ga = s[j-1].ga+prof2[28];
-			//}else{
-			//	s[j].ga = s[j-1].a+prof2[27];
-			//}
-			s[j].ga = MAX(s[j-1].ga+prof2[28],s[j-1].a+prof2[27]);
-			
-			
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2+=64;
-	}
-	//}
-	
-	prof2 -= (hm->endb-hm->startb) << 6;
-	
-	s[hm->endb].a = -FLOATINFTY;
-	s[hm->endb].ga = -FLOATINFTY;
-	s[hm->endb].gb = -FLOATINFTY;
-
-
-	for (i = hm->starta;i < hm->enda;i++){
-		prof1 += 64;
-		c = 1;
-		for (j = 0;j < 26; j++){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;	
-			}
-		}
-		freq[0] = c;
-			
-		pa = s[hm->startb].a;
-		pga = s[hm->startb].ga;
-		pgb = s[hm->startb].gb;
-		s[hm->startb].a = -FLOATINFTY;
-		s[hm->startb].ga = -FLOATINFTY;
-		
-		//if(pgb == -FLOATINFTY && pa == -FLOATINFTY){
-		//	s[hm->startb].gb = -FLOATINFTY;
-		//}else{
-		if(hm->startb == 0){
-			//if(pgb > pa ){
-			//	s[hm->startb].gb = pgb+prof1[29];
-			//}else{
-			//	s[hm->startb].gb = pa+prof1[29];
-			//}
-			s[hm->startb].gb = MAX(pgb,pa)+ prof1[29];
-		}else{
-			//if(pgb+prof1[28] >  pa+prof1[27]){
-			//	s[hm->startb].gb = pgb+prof1[28];
-			//}else{
-			//	s[hm->startb].gb = pa+prof1[27];
-			//}
-			s[hm->startb].gb = MAX(pgb+prof1[28],pa+prof1[27]);
-		}
-		//}
-		for (j = hm->startb+1; j <= hm->endb;j++){
-			prof2 += 64;
-			ca = s[j].a;
-			
-
-			//if((pga += prof2[-37]) > pa){
-			//	pa = pga;
-			//}
-		
-
-			//if((pgb += prof1[-37]) > pa){
-			//	pa = pgb;
-			//}
-			//pa = MAX(pgb + prof1[-37],pa);
-			//pa = MAX(pga + prof2[-37],pa);
-
-			pa = MAX3(pa,pga + prof2[-37],pgb + prof1[-37]);
-			
-			
-			prof2 += 32;
-			for (c = 1;c < freq[0];c++){
-				pa += prof1[freq[c]]*prof2[freq[c]];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			//if (s[j-1].ga+prof2[28] > s[j-1].a+prof2[27]){
-			//	s[j].ga = s[j-1].ga+prof2[28];
-			//}else{
-			//	s[j].ga = s[j-1].a+prof2[27];
-			//}
-			
-			
-			/*xmm1 =  _mm_set_epi32 (ca,s[j-1].a,pgb,s[j-1].ga);
-			xmm2 = _mm_set_epi32 (prof1[27],prof2[27],prof1[28],prof2[28]);
-			xmm1 = _mm_add_epi32 (xmm1,xmm2);
-			xmm2 =  _mm_srli_si128(xmm1, 8);
-			output.m = _mm_cmpgt_epi32(xmm1,xmm2);
-			output.m = _mm_or_si128( _mm_andnot_si128(output.m,xmm2),_mm_and_si128(output.m,xmm1));
-			
-			s[j].ga =output.tmp[0];
-			s[j].gb = output.tmp[1];*/
-			//output.m = _mm_add_epi32 (xmm1,xmm2);
-			//_mm_store_si128(dst_ptr, xmm3);
-			//fprintf(stderr,"%d	%d	%d	%d	%d	%d	%d	%d\n",output.tmp[0],output.tmp[1],output.tmp[2],output.tmp[3],s[j-1].ga+prof2[28],s[j-1].a+prof2[27],pgb+prof1[28] ,ca+prof1[27]);
-			
-			
-			s[j].ga = MAX(s[j-1].ga+prof2[28],s[j-1].a+prof2[27]);
-			
-			
-			
-			pgb = s[j].gb;
-			
-
-			//if(pgb+prof1[28] > ca+prof1[27]){
-			//	s[j].gb = pgb+prof1[28];
-			//}else{
-			//	s[j].gb = ca+prof1[27];
-			//}
-			s[j].gb = MAX(pgb+prof1[28] ,ca+prof1[27]);
-			//fprintf(stderr,"%d	%d	%d	%d\n",output.tmp[0],output.tmp[1],s[j].ga,s[j].gb );
-			pa = ca;
-		}
-		prof2 -= (hm->endb-hm->startb) << 6;
-		
-	}
-	prof1 -=  (hm->enda) << 6;
-	return s;
-}
-
-struct large_states* backward_large_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm)
-{
-	int freq[26];
-	struct large_states* s = hm->b;
-	register float pa = 0;
-	register float pga = 0;
-	register float pgb = 0;
-	register float ca = 0;
-	register int i = 0;
-	register int j = 0;
-	register int c = 0;
-	
-	prof1 += (hm->enda+1) << 6;
-	prof2 += (hm->endb+1) << 6;
-	s[hm->endb].a = s[0].a;
-	s[hm->endb].ga = s[0].ga;
-	s[hm->endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	//j = endb-startb;
-
-	/*if(s[hm->endb].ga == -FLOATINFTY && s[hm->endb].a == -FLOATINFTY){
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -FLOATINFTY;
-			s[j].ga = -FLOATINFTY;
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= 64;
-	}else{*/
-	
-	if(hm->endb == hm->len_b){
-		
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -FLOATINFTY;
-			//if(s[j+1].ga > s[j+1].a){
-			//	s[j].ga = s[j+1].ga+prof2[29];
-			//}else{
-			//	s[j].ga = s[j+1].a+prof2[29];
-			//}
-			s[j].ga = MAX(s[j+1].ga,s[j+1].a)+prof2[29];
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= 64;
-	}else{
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -FLOATINFTY;
-			//if(s[j+1].ga+prof2[28] > s[j+1].a+prof2[27]){
-			//	s[j].ga = s[j+1].ga+prof2[28];
-			//}else{
-			//	s[j].ga = s[j+1].a+prof2[27];
-			//}
-			s[j].ga = MAX(s[j+1].ga+prof2[28],s[j+1].a+prof2[27]);
-			s[j].gb = -FLOATINFTY;
-		}
-		prof2 -= 64;
-	}
-	//}
-	
-	s[hm->startb].a = -FLOATINFTY;
-	s[hm->startb].ga = -FLOATINFTY;
-	s[hm->startb].gb = -FLOATINFTY;
-	
-	i = hm->enda-hm->starta;
-	while(i--){
-		prof1 -= 64;
-
-		c = 1;
-		for (j = 0;j < 26; j++){
-			if(prof1[j]){
-				freq[c] = j;
-				c++;	
-			}
-		}
-		freq[0] = c;
-		
-		pa = s[hm->endb].a;
-		pga = s[hm->endb].ga;
-		pgb = s[hm->endb].gb;
-		s[hm->endb].a = -FLOATINFTY;
-		s[hm->endb].ga = -FLOATINFTY;
-		//if(pgb == -FLOATINFTY && pa == -FLOATINFTY){
-		//	s[hm->endb].gb = -FLOATINFTY;
-		//}else{
-		if(hm->endb == hm->len_b){
-			//if(pgb > pa){
-			//	s[hm->endb].gb = pgb+prof1[29];
-			//}else{
-			//	s[hm->endb].gb = pa+prof1[29];
-			//}	
-			s[hm->endb].gb = MAX(pgb,pa)+prof1[29];
-		}else{
-			//if(pgb+prof1[28] > pa+prof1[27]){
-			//	s[hm->endb].gb = pgb+prof1[28];
-			//}else{
-			//	s[hm->endb].gb = pa+prof1[27];
-			//}
-			s[hm->endb].gb = MAX(pgb+prof1[28] ,pa+prof1[27]);
-		}
-		//}
-		//j = endb-startb;
-		prof2 += (hm->endb-hm->startb) << 6;
-		//while(j--){
-		for(j = hm->endb-1;j >= hm->startb;j--){
-			prof2 -= 64;
-			ca = s[j].a;
-			
-			//pa = MAX(pga + prof2[91],pa);
-			//pa = MAX(pgb + prof1[91],pa);
-			pa = MAX3(pa,pga + prof2[91],pgb + prof1[91]);
-			
-			//if((pga += prof2[91]) > pa){
-			//	pa = pga;
-			//}
-			//if((pgb += prof1[91]) > pa){
-			//	pa = pgb;
-			//}
-
-			prof2 += 32;
-			for (c = 1;c < freq[0];c++){
-				pa += prof1[freq[c]]*prof2[freq[c]];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-
-			//if (s[j+1].ga+prof2[28] > s[j+1].a+prof2[27]){
-			//	s[j].ga = s[j+1].ga+prof2[28];
-			//}else{
-			//	s[j].ga = s[j+1].a+prof2[27];
-			//}
-			s[j].ga = MAX(s[j+1].ga+prof2[28], s[j+1].a+prof2[27]);
-
-			pgb = s[j].gb;
-
-			s[j].gb = MAX(pgb+prof1[28], ca+prof1[27]);
-			//if(pgb+prof1[28] > ca+prof1[27]){
-			//	s[j].gb = pgb+prof1[28];
-			//}else{
-			//	s[j].gb = ca+prof1[27];
-			//}
-
-			pa = ca;
-		}
-	}		
-	return s;
-}
-
-float* make_large_profile(float* prof, int* seq,int len,float** subm)
-{
-	int i,j,c;	
-	prof = malloc(sizeof(float)*(len+2)*64);
-	prof +=  (64 *(len+1));
-
-	for (i = 0;i < 64;i++){
-		prof[i] = 0.0;
-	}
-	prof[23+32] = -local_gpo;
-	prof[24+32] = -local_gpe;
-	prof[25+32] = -local_tgpe;
-
-	
-	i = len;
-	while(i--){
-		prof -= 64;
-
-		for (j = 0;j < 64;j++){
-			prof[j] = 0.0;
-		}
-		c = seq[i];
-		
-		prof[c] += 1.0;
-		
-		prof += 32;
-		
-		for(j = 23;j--;){
-			prof[j] = subm[c][j];
-		}
-		prof[23] = -local_gpo;
-		prof[24] = -local_gpe;
-		prof[25] = -local_tgpe;
-		
-		prof -= 32;
-	}
-	prof -= 64;
-	for (i = 0;i < 64;i++){
-		prof[i] = 0.0;
-	}
-	prof[23+32] = -local_gpo;
-	prof[24+32] = -local_gpe;
-	prof[25+32] = -local_tgpe;	
-	return prof;
-}
-
-void set_large_gap_penalties(float* prof,int len,int nsip)
-{
-	int i;
-	
-	prof +=  (64 *(len+1));
-	prof[27] = prof[55]*nsip;//gap open or close
-	prof[28] = prof[56]*nsip;//gap extention
-		
-	prof[29] = prof[57]*nsip;//gap open or close
-	i = len+1;
-	while(i--){
-		prof -= 64;
-		prof[27] = prof[55]*nsip;//gap open or close
-		prof[28] = prof[56]*nsip;//gap extention
-		
-		prof[29] = prof[57]*nsip;//gap open or close
-	}
-}
-
-
-float* large_update(float* profa,float* profb,float* newp,int* path,int sipa,int sipb)
-{
-	int i,j,c;
-	for (i = 64; i--;){
-		newp[i] = profa[i] + profb[i];
-	}
-	
-	profa += 64;
-	profb += 64;
-	newp += 64;
-
-	c = 1;
-	
-	while(path[c] != 3){
-		//Idea: limit the 'virtual' number of residues of one type to x.
-		// i.e. only allow a maximum of 10 alanines to be registered in each column
-		// the penalty for aligning a 'G' to this column will stay stable even when many (>10) alanines are present.
-		// the difference in score between the 'correct' (all alanine) and incorrect (alanines + glycine) will not increase 
-		// with the number of sequences. -> see Durbin pp 140
-		
-		if (!path[c]){
-			//fprintf(stderr,"Align	%d\n",c);
-			for (i = 64; i--;){
-				newp[i] = profa[i] + profb[i];
-			}
-				
-			
-			profa += 64;
-			profb += 64;
-		}
-		
-		if (path[c] & 1){
-			//fprintf(stderr,"Gap_A:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[a] * local_gpo,si->nsip[a] * gpe,si->nsip[a] * profb[41],si->nsip[a] * profb[46]);
-			for (i = 64; i--;){
-				newp[i] = profb[i];
-			}
-			profb += 64;
-			if(!(path[c] & 20)){
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = local_tgpe*sipa;
-				}else{
-					newp[24] += sipa;//1;
-					i = local_gpe*sipa;
-				}
-				
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){ 
-	//			fprintf(stderr,"close_open");
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = local_tgpe*sipa;
-					newp[23] += sipa;//1;
-					i += local_gpo*sipa;
-				}else{
-					newp[23] += sipa;//1;
-					i = local_gpo*sipa;
-				}
-								
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){ 
-	//			fprintf(stderr,"Gap_open");
-				if(path[c] & 32){
-					newp[25] += sipa;//1;
-					i = local_tgpe*sipa;
-					newp[23] += sipa;//1;
-					i += local_gpo*sipa;
-				}else{
-					newp[23] += sipa;//1;
-					i = local_gpo*sipa;
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			}	
-		}
-		if (path[c] & 2){
-			//fprintf(stderr,"Gap_B:%d\n",c);
-			//printf("open:%d	ext:%d	%d	%d\n",si->nsip[b] * local_gpo,si->nsip[b] * gpe,profa[26],profa[27]);
-			for (i = 64; i--;){
-				newp[i] = profa[i];
-			}
-			profa+=64;
-			if(!(path[c] & 20)){
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i = local_tgpe*sipb;
-				}else{
-					newp[24] += sipb;//1;
-					i = local_gpe*sipb;
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}else{
-			if (path[c] & 16){
-	//			fprintf(stderr,"close_open");
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i =  local_tgpe*sipb;
-					newp[23] += sipb;//1;
-					i +=  local_gpo*sipb;
-				}else{
-					newp[23] += sipb;//1;
-					i =  local_gpo*sipb;
-				}
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			if (path[c] & 4){
-	//			fprintf(stderr,"Gap_open");
-				if(path[c] & 32){
-					newp[25] += sipb;//1;
-					i = local_tgpe*sipb;
-					newp[23] += sipb;//1;
-					i += local_gpo*sipb;
-				}else{
-					newp[23] += sipb;//1;
-					i = local_gpo*sipb;
-				}
-				
-				for (j = 32; j < 55;j++){
-					newp[j] -=i;
-				}
-			}
-			}		
-		}
-		newp += 64;
-		c++;
-	}
-	for (i = 64; i--;){
-		newp[i] =  profa[i] + profb[i];
-	}	
-	newp -= (path[0]+1) *64;
-	return newp;
-}
-
-
-struct hirsch_large_mem* hirsch_large_mem_alloc(struct hirsch_large_mem* hm,int x)
-{
-
-	// a=((typeof(a))(((int)(((void *)malloc(c+15))+15))&-16)). 
-	hm = (struct hirsch_large_mem *) malloc(sizeof(struct hirsch_large_mem));
-	hm->starta = 0;
-	hm->startb = 0;
-	hm->enda = 0;
-	hm->endb = 0;
-	hm->size = x;
-	hm->len_a = 0;
-	hm->len_b = 0;
-	hm->f = malloc(sizeof(struct large_states)* (x+1));
-	hm->b = malloc(sizeof(struct large_states)* (x+1));
-	return hm;
-}
-
-struct hirsch_large_mem* hirsch_large_mem_realloc(struct hirsch_large_mem* hm,int x)
-{
-	hm->starta = 0;
-	hm->startb = 0;
-	hm->enda = 0;
-	hm->endb = 0;
-	hm->len_a = 0;
-	hm->len_b = 0;
-	hm->size = x;
-	hm->f = realloc(hm->f,sizeof(struct large_states)* (x+1));
-	hm->b = realloc(hm->b,sizeof(struct large_states)* (x+1));
-	return hm;
-}
-
-void hirsch_large_mem_free(struct hirsch_large_mem* hm)
-{
-	free(hm->f);
-	free(hm->b);
-	free(hm);
-}
-
-
diff --git a/src/plugins_3rdparty/kalign/src/kalign2/kalign2_hirschberg_large.h b/src/plugins_3rdparty/kalign/src/kalign2/kalign2_hirschberg_large.h
deleted file mode 100644
index f2b756e..0000000
--- a/src/plugins_3rdparty/kalign/src/kalign2/kalign2_hirschberg_large.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-	kalign2_hirschberg_large.h
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-struct large_states{
-	float a;
-	float ga;
-	float gb;
-	float x;
-};
-
-
-
-struct hirsch_large_mem{
-	struct large_states* f;
-	struct large_states* b;
-	int starta;
-	int startb;
-	int enda;
-	int endb;
-	int size;
-	int len_a;
-	int len_b;
-};
-
-int* hirsch_large_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm, int* hirsch_path);
-struct large_states* foward_large_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm);
-struct large_states* backward_large_hirsch_pp_dyn(const float* prof1,const float* prof2,struct hirsch_large_mem* hm);
-int* hirsch_large_align_two_pp_vector(const float* prof1,const float* prof2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[]);
-
-int* hirsch_large_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm, int* hirsch_path,int sip);
-struct large_states* foward_large_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int sip);
-struct large_states* backward_large_hirsch_ps_dyn(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int sip);
-int* hirsch_large_align_two_ps_vector(const float* prof1,const int* seq2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[],int sip);
-
-
-int* hirsch_large_ss_dyn(float**subm, const int* seq1,const int* seq2,struct hirsch_large_mem* hm, int* hirsch_path);
-struct large_states* foward_large_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm);
-struct large_states* backward_large_hirsch_ss_dyn(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm);
-int* hirsch_large_align_two_ss_vector(float**subm,const int* seq1,const int* seq2,struct hirsch_large_mem* hm,int* hirsch_path,float input_states[],int old_cor[]);
-
-float* make_large_profile(float* prof, int* seq,int len,float** subm);
-void set_large_gap_penalties(float* prof,int len,int nsip);
-float* large_update(float* profa,float* profb,float* newp,int* path,int sipa,int sipb);
-
-struct hirsch_large_mem* hirsch_large_mem_alloc(struct hirsch_large_mem* hm,int x);
-struct hirsch_large_mem* hirsch_large_mem_realloc(struct hirsch_large_mem* hm,int x);
-void hirsch_large_mem_free(struct hirsch_large_mem* hm);
-
-
diff --git a/src/plugins_3rdparty/kalign/src/kalign2/kalign2_simple_gaps.c b/src/plugins_3rdparty/kalign/src/kalign2/kalign2_simple_gaps.c
deleted file mode 100644
index e709f71..0000000
--- a/src/plugins_3rdparty/kalign/src/kalign2/kalign2_simple_gaps.c
+++ /dev/null
@@ -1,869 +0,0 @@
-/*
-	kalign2_simple_gaps.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-
-int** simple_hirschberg_alignment(struct alignment* aln,int* tree,int**submatrix, int** map)
-{
-	struct hirsch_mem* hm = 0;
-	int i,j,g,a,b,c;
-	int len_a;
-	int len_b;
-	int** profile = 0;
-
-	profile = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i< numprofiles;i++){
-		profile[i] = 0;
-	}
-
-	map = malloc(sizeof(int*)*numprofiles);
-	for ( i = 0;i < numprofiles;i++){
-		map[i] = 0;
-	}
-	
-	hm = hirsch_mem_alloc(hm,1024);
-
-	fprintf(stderr,"\nAlignment:\n");
-
-	for (i = 0; i < (numseq-1);i++){
-		a = tree[i*3];
-		b = tree[i*3+1];
-		c = tree[i*3+2];
-		fprintf(stderr,"\r%8.0f percent done",(float)(i) /(float)numseq * 100);
-	//	fprintf(stderr,"Aligning:%d %d->%d	done:%f\n",a,b,c,((float)(i+1)/(float)numseq)*100);
-		len_a = aln->sl[a];
-		len_b = aln->sl[b];
-
-		
-		g = (len_a > len_b)? len_a:len_b;
-		map[c] = malloc(sizeof(int) * (g+2));
-		if(g > hm->size){
-			hm = hirsch_mem_realloc(hm,g);
-		}
-
-		for (j = 0; j < (g+2);j++){
-		//	hirsch_path[j] = -1;
-			map[c][j] = -1;
-		//	map[c][j] = 0;
-		}
-	//	map[c][0] = len_a;
-		//map[c][len_a+len_b+1] = 3;
-
-		if (a < numseq){
-			profile[a] = simple_make_profile(profile[a],aln->s[a],len_a,submatrix);
-		}
-		if (b < numseq){
-			profile[b] = simple_make_profile(profile[b],aln->s[b],len_b,submatrix);
-		}
-
-		hm->starta = 0;
-		hm->startb = 0;
-		hm->enda = len_a;
-		hm->endb = len_b;
-		hm->len_a = len_a;
-		hm->len_b = len_b;
-		
-		hm->f[0].a = 0;
-		hm->f[0].ga =  -INFTY;
-		hm->f[0].gb = -INFTY;
-		hm->b[0].a = 0;
-		hm->b[0].ga =  -INFTY;
-		hm->b[0].gb =  -INFTY;
-	//	fprintf(stderr,"LENA:%d	LENB:%d	numseq:%d\n",len_a,len_b,numseq);
-		if(len_a < len_b){
-			map[c] = simple_hirsch_pp_dyn(profile[a],profile[b],hm,map[c]);
-		}else{
-			hm->enda = len_b;
-			hm->endb = len_a;
-			hm->len_a = len_b;
-			hm->len_b = len_a;
-			map[c] = simple_hirsch_pp_dyn(profile[b],profile[a],hm,map[c]);
-			map[c] = mirror_hirsch_path(map[c],len_a,len_b);
-		}
-					
-		map[c] = add_gap_info_to_hirsch_path(map[c],len_a,len_b);
-
-		if(i != numseq-2){
-			profile[c] = malloc(sizeof(int)*64*(map[c][0]+2));
-			profile[c] = simple_update(profile[a],profile[b],profile[c],map[c]);
-		}
-			
-		aln->sl[c] = map[c][0];
-	
-		aln->nsip[c] = aln->nsip[a] + aln->nsip[b];
-		aln->sip[c] = malloc(sizeof(int)*(aln->nsip[a] + aln->nsip[b]));
-		g =0;
-		for (j = aln->nsip[a];j--;){
-			aln->sip[c][g] = aln->sip[a][j];
-			g++;
-		}
-		for (j = aln->nsip[b];j--;){
-			aln->sip[c][g] = aln->sip[b][j];
-			g++;
-		}
-
-		free(profile[a]);
-		free(profile[b]);
-	}
-	fprintf(stderr,"\r%8.0f percent done\n",100.0);
-	free(profile);
-	hirsch_mem_free(hm);
-	for (i = 32;i--;){
-		free(submatrix[i]);
-	}
-	free(submatrix);
-	return map;
-}
-
-
-int* simple_make_profile(int* prof, int* seq,int len,int** subm)
-{
-	int i,j,c;	
-	prof = malloc(sizeof(int)*(len+2)*64);
-	prof +=  (64 *(len+1));
-
-	for (i = 0;i < 64;i++){
-		prof[i] = 0;
-	}
-	prof[23+32] = -gpo;
-	prof[26] = 1;
-
-	
-	i = len;
-	while(i--){
-		prof -= 64;
-
-		for (j = 0;j < 64;j++){
-			prof[j] = 0;
-		}
-		prof[26] = 1;//number of residues // both additive
-		c = seq[i];
-		
-		prof[c] += 1;
-		
-		prof += 32;
-		
-		for(j = 23;j--;){
-			prof[j] = subm[c][j];
-		}
-		prof[23] = -gpo;
-		
-		prof -= 32;
-	}
-	prof -= 64;
-	for (i = 0;i < 64;i++){
-		prof[i] = 0;
-	}
-
-	prof[23+32] = -gpo;
-	prof[26] = 1;
-	return prof;
-}
-
-
-
-
-int* simple_update(int* profa,int* profb,int* newp,int* path)
-{
-	int i,c;
-	for (i = 64; i--;){
-		newp[i] = profa[i] + profb[i];
-	}
-	
-	profa += 64;
-	profb += 64;
-	newp += 64;
-
-	c = 1;
-	
-	while(path[c] != 3){
-		//Idea: limit the 'virtual' number of residues of one type to x.
-		// i.e. only allow a maximum of 10 alanines to be registered in each column
-		// the penalty for aligning a 'G' to this column will stay stable even when many (>10) alanines are present.
-		// the difference in score between the 'correct' (all alanine) and incorrect (alanines + glycine) will not increase 
-		// with the number of sequences. -> see Durbin pp 140
-		
-		if (!path[c]){
-			for (i = 64; i--;){
-				newp[i] = profa[i] + profb[i];
-			}
-				
-			
-			profa += 64;
-			profb += 64;
-		}
-		if (path[c] & 1){
-			for (i = 64; i--;){
-				newp[i] = profb[i];
-			}
-			profb += 64;			
-		}
-		if (path[c] & 2){
-			for (i = 64; i--;){
-				newp[i] = profa[i];
-			}
-			profa+=64;			
-		}
-		newp += 64;
-		c++;
-	}
-	for (i = 64; i--;){
-		newp[i] =  profa[i] + profb[i];
-	}	
-	newp -= (path[0]+1) *64;
-	return newp;
-}
-
-
-
-int* simple_hirsch_pp_dyn(const int* prof1,const int* prof2,struct hirsch_mem* hm, int* hirsch_path)
-{
-	int mid = ((hm->enda - hm->starta) / 2)+ hm->starta;
-	int input_states[6] = {hm->f[0].a,hm->f[0].ga,hm->f[0].gb,hm->b[0].a,hm->b[0].ga,hm->b[0].gb};
-	int old_cor[5] = {hm->starta,hm->enda,hm->startb,hm->endb,mid};
-
-	
-	//fprintf(stderr,"starta:%d enda:%d startb:%d endb:%d mid:%d\n",hm->starta,hm->enda,hm->startb,hm->endb,mid);
-	
-	
-	if(hm->starta  >= hm->enda){
-		return hirsch_path;
-	}
-	if(hm->startb  >= hm->endb){
-		return hirsch_path;
-	}
-
-	hm->enda = mid;
-	hm->f = simple_foward_hirsch_pp_dyn(prof1,prof2,hm);
-	/*int i;
-	fprintf(stderr,"FOWARD\n");
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->f[i].a,hm->f[i].ga,hm->f[i].gb);
-	}*/
-
-	hm->starta = mid;
-	hm->enda = old_cor[1];
-	hm->b = simple_backward_hirsch_pp_dyn(prof1,prof2,hm);
-	/*fprintf(stderr,"BaCKWARD\n");
-
-	for (i = hm->startb; i <= hm->endb;i++){
-		fprintf(stderr,"%d	%d	%d\n",hm->b[i].a,hm->b[i].ga,hm->b[i].gb);
-	}*/
-
-	hirsch_path = simple_hirsch_align_two_pp_vector(prof1,prof2,hm,hirsch_path,input_states,old_cor);
-	return hirsch_path;
-}
-
-
-
-int* simple_hirsch_align_two_pp_vector(const int* prof1,const int* prof2,struct hirsch_mem* hm,int* hirsch_path,int input_states[],int old_cor[])
-{
-	struct states* f = hm->f;
- 	struct states* b = hm->b;
-	int i,j,c;
-	int transition = -1;
-	
-	
-	//code:
-	// a -> a = 1
-	// a -> ga = 2
-	// a -> gb = 3
-	// ga ->ga = 4
-	// ga -> a = 5
-	//gb->gb = 6;
-	//gb->a = 7;
-	
-	//int max = -INFTY;
-	float max = -INFTY;	
-	float middle =  (hm->endb - hm->startb)/2 + hm->startb;
-	float sub = 0.0;
-	
-
-	prof1+= (64 * (old_cor[4]+1));
-	prof2 += 64 * (hm->startb);
-	i = hm->startb;
-	c = -1;
-	for(i = hm->startb; i < hm->endb;i++){
-		sub = abs(middle -i);
-		sub /= 1000; 
-		prof2 += 64;
-		//fprintf(stderr,"%d	%d	%d \n",f[i].a,b[i].a,max);
-		if(f[i].a+b[i].a-sub > max){
-			max = f[i].a+b[i].a-sub;
-	//		fprintf(stderr,"aligned->aligned:%d + %d = %d\n",f[i].a,b[i].a,f[i].a+b[i].a);
-			transition = 1;
-			c = i;
-		}
-		if(f[i].a+b[i].ga+prof2[23]*prof1[26]-sub > max){
-			max = f[i].a+b[i].ga+prof2[23]*prof1[26]-sub;
-	//		fprintf(stderr,"aligned->gap_a:%d + %d +%d = %d\n",f[i].a,b[i].ga,prof1[27],f[i].a+b[i].ga+prof2[27]);
-			transition = 2;
-			c = i;
-		}
-		if(f[i].a+b[i].gb+prof1[23]*prof2[26] -sub> max){
-			max = f[i].a+b[i].gb+prof1[23]*prof2[26]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-			transition = 3;
-			c = i;
-		}
-		if(f[i].ga+b[i].a+prof2[23]*prof1[26]-sub > max){
-			max = f[i].ga+b[i].a+prof2[23]*prof1[26]-sub;
-	//		fprintf(stderr,"gap_a->aligned:%d + %d + %d(gpo) = %d\n",f[i].ga,b[i].a,prof2[27],f[i].ga+b[i].a+prof2[27]);
-			transition = 5;
-			c = i;
-		}
-
-
-		if(hm->startb == 0){
-			if(f[i].gb+b[i].gb-sub > max){
-				max = f[i].gb+b[i].gb-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}else{
-			if(f[i].gb+b[i].gb-sub > max){
-				max = f[i].gb+b[i].gb-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-				transition = 6;
-				c = i;
-			}
-		}
-		if(f[i].gb+b[i].a+prof1[23]*prof2[26]-sub > max){
-			max = f[i].gb+b[i].a+prof1[23]*prof2[26]-sub;
-	//		fprintf(stderr,"gap_b->aligned:%d + %d + %d(gpo) = %d\n",f[i].gb,b[i].a,prof1[27],f[i].gb+b[i].a+prof1[27]);
-			transition = 7;
-			c = i;
-		}
-	}
-	i = hm->endb;
-	sub = abs(middle -i);
-	sub /= 1000; 
-	if(f[i].a+b[i].gb+prof1[23]*prof2[26]-sub > max){
-		max = f[i].a+b[i].gb+prof1[23]*prof2[26]-sub;
-	//		fprintf(stderr,"aligned->gap_b:%d + %d +%d = %d\n",f[i].a,b[i].gb,prof1[27],f[i].a+b[i].gb+prof1[27]);
-		transition = 3;
-		c = i;
-	}
-	if(hm->endb == hm->len_b){
-		if(f[i].gb+b[i].gb-sub > max){
-			max = f[i].gb+b[i].gb-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}	
-	}else{
-		if(f[i].gb+b[i].gb-sub > max){
-			max = f[i].gb+b[i].gb-sub;
-	//			fprintf(stderr,"gap_b->gap_b:%d + %d +%d(gpe) =%d \n",f[i].gb, b[i].gb, prof1[28],f[i].gb+b[i].gb+prof1[28]);
-			transition = 6;
-			c = i;
-		}
-	}
-	
-	
-	
-	prof1-= (64 * (old_cor[4]+1));
-	prof2 -= hm->endb << 6;
-	
-	//fprintf(stderr,"Transition:%d	at:%d\n",transition,c);
-	//if(transition == -1){
-	//	exit(0);
-	//}
-	
-	j = hirsch_path[0];
-	switch(transition){
-		case 1: //a -> a = 1
-			
-			hirsch_path[old_cor[4]] = c;
-			hirsch_path[old_cor[4]+1] = c+1;
-			
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -INFTY;
-			hm->b[0].gb = -INFTY;
-	//		fprintf(stderr,"Using this for start:%d	%d	%d\n",hm->f[0].a,hm->f[0].ga,hm->f[0].gb);
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -INFTY;
-			hm->f[0].gb = -INFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 2:// a -> ga = 2
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -INFTY;
-			hm->b[0].gb = -INFTY;
-			
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4];
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -INFTY;
-			hm->f[0].ga = 0;
-			hm->f[0].gb = -INFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d  what:%d-%d	%d-%d\n",c+1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 3:// a -> gb = 3
-			
-			hirsch_path[old_cor[4]] = c;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4],c);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = 0;
-			hm->b[0].ga = -INFTY;
-			hm->b[0].gb = -INFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -INFTY;
-			hm->f[0].ga = -INFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 5://ga -> a = 5
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -INFTY;
-			hm->b[0].ga = 0;
-			hm->b[0].gb = -INFTY;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4];
-			
-			hm->startb = old_cor[2];
-			hm->endb = c-1;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -INFTY;
-			hm->f[0].gb = -INFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 6://gb->gb = 6;
-			
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -INFTY;
-			hm->b[0].ga = -INFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c;
-			hm->endb = old_cor[3];
-			hm->f[0].a = -INFTY;
-			hm->f[0].ga = -INFTY;
-			hm->f[0].gb = 0;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-		case 7://gb->a = 7;
-			
-			hirsch_path[old_cor[4]+1] = c+1;
-	//		fprintf(stderr,"Aligning:%d-%d\n",old_cor[4]+1,c+1);
-			//foward:
-			hm->f[0].a = input_states[0];
-			hm->f[0].ga = input_states[1];
-			hm->f[0].gb = input_states[2];
-			hm->b[0].a = -INFTY;
-			hm->b[0].ga = -INFTY;
-			hm->b[0].gb = 0;
-			
-			hm->starta = old_cor[0];
-			hm->enda = old_cor[4]-1;
-			hm->startb = old_cor[2];
-			hm->endb = c;
-			//fprintf(stderr,"Following first: %d  what:%d-%d	%d-%d\n",c-1,hm->starta,hm->enda,hm->startb,hm->endb);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-
-			//backward:
-			hm->starta = old_cor[4]+1;
-			hm->enda = old_cor[1];
-			hm->startb = c+1;
-			hm->endb = old_cor[3];
-			hm->f[0].a = 0;
-			hm->f[0].ga = -INFTY;
-			hm->f[0].gb = -INFTY;
-			hm->b[0].a = input_states[3];
-			hm->b[0].ga = input_states[4];
-			hm->b[0].gb = input_states[5];
-	
-			//fprintf(stderr,"Following last: %d\n",c+1);
-			hirsch_path = simple_hirsch_pp_dyn(prof1,prof2,hm,hirsch_path);
-			break;
-	}
-		
-	return hirsch_path;
-}
-
-
-
-struct states* simple_foward_hirsch_pp_dyn(const int* prof1,const int* prof2,struct hirsch_mem* hm)
-{
-	unsigned int freq[23];
-	struct states* s = hm->f;
-
-	register int pa = 0;
-	register int pga = 0;
-	register int pgb = 0;
-	register int ca = 0;
-	register int i = 0;
-	register int j = 0;
-	
-	
-	
-	prof1 += (hm->starta) << 6;
-	prof2 +=  (hm->startb) << 6;
-	s[hm->startb].a = s[0].a;
-	s[hm->startb].ga = s[0].ga;
-	s[hm->startb].gb = s[0].gb;
-	if(hm->startb == 0){
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -INFTY;
-			
-			s[j].ga = s[j-1].a;
-			if (s[j-1].ga > s[j].ga){
-				s[j].ga = s[j-1].ga;
-			}
-			s[j].gb = -INFTY;
-		}	
-		prof2+=64;	
-	}else{
-
-		for (j = hm->startb+1; j < hm->endb;j++){
-			prof2+=64;
-			s[j].a = -INFTY;
-			
-			s[j].ga = s[j-1].a+prof2[23]*prof1[26];
-			if (s[j-1].ga > s[j].ga){
-				s[j].ga = s[j-1].ga;
-			}
-			s[j].gb = -INFTY;
-		//	prof2+=64;
-		}
-		prof2+=64;
-	}
-	
-	prof2 -= (hm->endb-hm->startb) << 6;
-	
-	s[hm->endb].a = -INFTY;
-	s[hm->endb].ga = -INFTY;
-	s[hm->endb].gb = -INFTY;
-
-
-	for (i = hm->starta;i < hm->enda;i++){
-		prof1 += 64;
-		pa = 1;
- 		for (j = 23; j--;){
-			if(prof1[j]){
-				freq[pa] = j;
-				pa++;	
-			}
-		}
-		freq[0] = pa;
-			
-		pa = s[hm->startb].a;
-		pga = s[hm->startb].ga;
-		pgb = s[hm->startb].gb;
-		if(hm->startb == 0){
-			s[hm->startb].a = -INFTY;
-			s[hm->startb].ga = -INFTY;
-		
-			s[hm->startb].gb = pa;
-				if(pgb> s[hm->startb].gb){
-				s[hm->startb].gb = pgb;
-			}
-		}else{
-			s[hm->startb].a = -INFTY;
-			s[hm->startb].ga = -INFTY;
-		
-			s[hm->startb].gb = pa+prof1[23]*prof2[26];
-			if(pgb > s[hm->startb].gb){
-				s[hm->startb].gb = pgb;
-			}
-		}
-		for (j = hm->startb+1; j <= hm->endb;j++){
-			prof2 += 64;
-			ca = s[j].a;
-			
-			if((pga += prof2[23-64]*prof1[26-64]) > pa){ 
-				pa = pga;
-			}
-
-			if((pgb += prof1[23-64]*prof2[26-64]) > pa){
-				pa = pgb;
-			}
-			
-			prof2 += 32;
-			for (pga = freq[0];--pga;){
-				pgb = freq[pga];
-				pa += prof1[pgb]*prof2[pgb];
-			}
-			prof2 -= 32;	
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j-1].a+prof2[23]*prof1[26];
-			if (s[j-1].ga> s[j].ga){
-				s[j].ga = s[j-1].ga;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[23]*prof2[26];
-			if(pgb > s[j].gb){
-				s[j].gb = pgb;
-			}
-			pa = ca;
-		}
-		prof2 -= (hm->endb-hm->startb) << 6;
-		
-	}
-	prof1 -= 64 * (hm->enda);
-	return s;
-}
-
-struct states* simple_backward_hirsch_pp_dyn(const int* prof1,const int* prof2,struct hirsch_mem* hm)
-{
-	unsigned int freq[23];
-	struct states* s = hm->b;
-	
-	register int pa = 0;
-	register int pga = 0;
-	register int pgb = 0;
-	register int ca = 0;
-	register int i = 0;
-	register int j = 0;
-
-	prof1 += (hm->enda+1) << 6;
-	prof2 += (hm->endb+1) << 6;
-	s[hm->endb].a = s[0].a;
-	s[hm->endb].ga = s[0].ga;
-	s[hm->endb].gb = s[0].gb;
-	
-	
-	//init of first row;
-	//j = endb-startb;
-	if(hm->endb == hm->len_b){
-		
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -INFTY;
-			
-			s[j].ga = s[j+1].a;
-			if (s[j+1].ga> s[j].ga){
-				s[j].ga = s[j+1].ga;
-			}
-			s[j].gb = -INFTY;
-		}
-		prof2 -= 64;
-	}else{
-		for(j = hm->endb-1;j > hm->startb;j--){
-			prof2 -= 64;
-			s[j].a = -INFTY;
-			
-			s[j].ga = s[j+1].a+prof2[23]*prof1[26];
-			if (s[j+1].ga > s[j].ga){
-				s[j].ga = s[j+1].ga;
-			}
-			s[j].gb = -INFTY;
-		//	prof2 -= 64;
-		}
-		prof2 -= 64;
-	}
-	
-	s[hm->startb].a = -INFTY;
-	s[hm->startb].ga = -INFTY;
-	s[hm->startb].gb = -INFTY;
-//	prof2 -= (endb -startb) << 6;
-
-	i = hm->enda-hm->starta;
-	while(i--){
-		prof1 -= 64;
-
-		pa = 1;
-		for (j = 23; j--;){
-			if(prof1[j]){
-				freq[pa] = j;
-				pa++;	
-			}
-		}
-		freq[0] = pa;
-		
-		pa = s[hm->endb].a;
-		pga = s[hm->endb].ga;
-		pgb = s[hm->endb].gb;
-		s[hm->endb].a = -INFTY;
-		s[hm->endb].ga = -INFTY;
-
-		if(hm->endb == hm->len_b){
-			s[hm->endb].gb = pa;
-			if(pgb > s[hm->endb].gb){
-				s[hm->endb].gb = pgb;
-			}
-		}else{
-			s[hm->endb].gb = pa+prof1[23]*prof2[26];
-			if(pgb> s[hm->endb].gb){
-				s[hm->endb].gb = pgb;
-			}
-		}
-		//j = endb-startb;
-		prof2 += (hm->endb-hm->startb) << 6;
-		//while(j--){
-		for(j = hm->endb-1;j >= hm->startb;j--){
-			prof2 -= 64;
-			ca = s[j].a;
-			if((pga += prof2[64+23]*prof1[26]) > pa){
-				pa = pga;
-			}
-			if((pgb += prof1[64+23]*prof2[26]) > pa){
-				pa = pgb;
-			}
-			
-			prof2 += 32;
-			for (pga = freq[0];--pga;){
-				pgb = freq[pga];
-				pa += prof1[pgb]*prof2[pgb];
-			}
-			prof2 -= 32;
-
-			s[j].a = pa;
-			
-			pga = s[j].ga;
-			
-			s[j].ga = s[j+1].a+prof2[23]*prof1[26];
-			if (s[j+1].ga > s[j].ga){
-				s[j].ga = s[j+1].ga;
-			}
-			
-			pgb = s[j].gb;
-			
-			s[j].gb = ca+prof1[23]*prof2[26];
-			if(pgb > s[j].gb){
-				s[j].gb = pgb;
-			}
-			pa = ca;
-		}
-	}		
-	return s;
-}
-
-
diff --git a/src/plugins_3rdparty/kalign/src/kalign2/kalign2_upgma.c b/src/plugins_3rdparty/kalign/src/kalign2/kalign2_upgma.c
deleted file mode 100644
index 114dc3b..0000000
--- a/src/plugins_3rdparty/kalign/src/kalign2/kalign2_upgma.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
-	kalign2_upgma.c
-	
-	Released under GPL - see the 'COPYING' file   
-	
-	Copyright (C) 2006 Timo Lassmann <timolassmann at gmail.com>
-	
-	This program is free software; you can redistribute it and/or modify
-	it under the terms of the GNU General Public License as published by
-	the Free Software Foundation; either version 2 of the License, or
-	any later version.
-
-	This program is distributed in the hope that it will be useful,
-	but WITHOUT ANY WARRANTY; without even the implied warranty of
-	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	GNU General Public License for more details.
-
-	You should have received a copy of the GNU General Public License
-	along with this program; if not, write to the Free Software
-	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-    
-	Please send bug reports, comments etc. to:
-	timolassmann at gmail.com
-*/
-
-#include "kalign2.h"
-
-struct aln_tree_node* real_upgma(float **dm)
-{
-	int i,j;
-	int *as = 0;
-	float max;
-	int node_a = 0;
-	int node_b = 0;
-	int cnode = numseq;
-	
-	struct aln_tree_node** tree = 0;
-	struct aln_tree_node* tmp = 0;
-	
-	as = malloc(sizeof(int)*numseq);
-	for (i = numseq; i--;){
-		as[i] = i+1;
-	}
-	
-	tree = malloc(sizeof(struct aln_tree_node*)*numseq);
-	for (i=0;i < numseq;i++){
-		tree[i] = malloc(sizeof(struct aln_tree_node));
-		tree[i]->done = 1;
-		tree[i]->num = i;
-		tree[i]->path = 0;
-		tree[i]->profile = 0;
-		tree[i]->seq = 0;//seq[i];
-		tree[i]->len = 0;//len[i]; 
-		/*
-		Needs to be +2 because:
-		at n = 3 is is possible to get a perfectly balanced binary tree with 4 sequences at intermediate nodes
-		*/
-		tree[i]->links = malloc(sizeof(struct aln_tree_node*)*3);
-		
-		for ( j =0;j < 3;j++){
-			tree[i]->links[j] = 0;
-		}
-	}
-	
-	while (cnode != numprofiles){
-		max = -INFTY;
-		for (i = 0;i < numseq-1; i++){
-			if (as[i]){
-			for ( j = i + 1;j < numseq;j++){
-				if (as[j]){
-				if (dm[i][j] > max){
-					max = dm[i][j];
-					node_a = i;
-					node_b = j;
-				}
-				}
-			}
-			}
-		}
-		tmp = malloc(sizeof(struct aln_tree_node));
-		tmp->done = 0;
-		tmp->path = 0;
-		tmp->profile = 0;
-		tmp->num = cnode;
-		tmp->seq = 0;
-		tmp->len = 0;
-		tmp->links = malloc(sizeof(struct aln_tree_node*)*(3));
-		tmp->links[0] = tree[node_a];
-		tmp->links[1] = tree[node_b];
-		tmp->links[2] =0;
-
-		tree[node_a] = tmp;
-		tree[node_b] = 0;
-				
-		/*deactivate  sequences to be joined*/
-		as[node_a] = cnode+1;
-		as[node_b] = 0;
-		cnode++;    
-		
-		/*calculate new distances*/
-		for (j = numseq;j--;){
-			if (j != node_b){
-				dm[node_a][j] = (dm[node_a][j] + dm[node_b][j])/2;
-			}
-		}
-		dm[node_a][node_a] = 0.0f;
-		for (j = numseq;j--;){
-			dm[j][node_a] = dm[node_a][j];
-			dm[j][node_b] = 0.0f;
-			dm[node_b][j] = 0.0f;
-		}		
-	}
-	tmp = tree[node_a];
-	
-	for (i = numprofiles;i--;){
-		free(dm[i]);
-	}
-	free(dm);
-	
-	
-	free(tree);
-	free(as);
-	return tmp;
-}
-
-int* nj(float **dm,int* tree)
-{
-	int i,j;
-	//float **dm = 0;
-	float *r = 0;
-	float *r_div = 0;
-	int *active = 0;
-	int node = 0;
-	float min = 0;
-	int join_a = 0;
-	int join_b = 0;
-	int leaves = 0;
-	int c =0;
-
-	leaves = numseq;
-	
-	r = malloc ((numseq*2-1) *sizeof(float));
-	r_div = malloc ((numseq*2-1) *sizeof(float));
-	active = malloc((numseq*2-1)*sizeof(int));
-	for ( i = 0;i < numseq*2-1;i++){
-		active[i] = 0;
-	}
-	for ( i = 0;i < numseq;i++){
-		active[i] = 1;
-	}
-	
-	node = numseq;
-	while (node != numseq*2 -1){
-		for (i = 0;i<numseq*2-1;i++){
-			if (active[i]){
-				r[i] = 0;
-				for (j = 0;j < numseq*2-1;j++){
-					if (active[j]){
-						r[i] += (i<j) ?dm[i][j]:dm[j][i];
-					}
-				}
-				r_div[i] = r[i] / (leaves-2);
-			}
-		}
-		for ( j = 0;j < numseq*2-1;j++){
-			if (active[j]){
-			for ( i = j+1;i < numseq*2-1;i++){
-				if (active[i]){
-				dm[i][j] = dm[j][i] - (r[i] + r[j])/2;
-				}
-			}
-			}
-		}
-		min = -INFTY;
-		for ( j = 0;j < numseq*2-1;j++){
-			if (active[j]){
-			for ( i = j+1;i < numseq*2-1;i++){
-				if (active[i]){
-					if (dm[i][j] > min){
-						min = dm[i][j];
-						join_a = j;
-						join_b = i;
-					}
-				}
-			}
-			}
-		}
-		//join_a always smaller than join_b && both smaller than node
-		dm[join_a][node] =  dm[join_a][join_b]/2 + (r_div[join_a] - r_div[join_b])/2;
-		dm[join_b][node] =  dm[join_a][join_b] - dm[join_a][node];
-
-		active[join_a] = 0;
-		active[join_b] = 0;
-		tree[c] = join_a;
-		tree[c+1] = join_b;
-		tree[c+2] = node;
-
-		for (i = 0;i<numseq*2-1;i++){
-			if (active[i]){
-				dm[i][node] = (i>join_a) ? dm[join_a][i]: dm[i][join_a];
-				dm[i][node] -= dm[join_a][node];
-				dm[i][node] += (i > join_b) ? dm[join_b][i] : dm[i][join_b] ;
-				dm[i][node] -= dm[join_b][node];
-				dm[i][node] /= 2;
-			}
-		}
-		active[node] = 1;
-		c += 3;
-		node++;
-
-	}
-
-
-	for (i = numprofiles;i--;){
-		free(dm[i]);
-	}
-	free(dm);
-
-	free(r);
-	free(r_div);
-	free(active);
-
-	return tree;
-}
-
-int* upgma(float **dm,int* tree)
-{
-	int i,j,t;
-	int *as = 0;
-	float max;
-	int node_a = 0;
-	int node_b = 0;
-	int cnode = numseq;
-
-	as = malloc(sizeof(int)*numseq);
-	for (i = numseq; i--;){
-		as[i] = i+1;
-	}
-
-	
-	t = 0;
-	while (cnode != numprofiles){
-		max = -INFTY;
-		for (i = 0;i < numseq-1; i++){
-			if (as[i]){
-			for ( j = i + 1;j < numseq;j++){
-				if (as[j]){
-				if (dm[i][j] > max){
-					max = dm[i][j];
-					node_a = i;
-					node_b = j;
-				}
-				}
-			}
-			}
-		}
-		
-		tree[t] = as[node_a]-1;
-		tree[t+1] = as[node_b]-1;
-		tree[t+2] = cnode;
-		t += 3;	
-		
-		/*deactivate  sequences to be joined*/
-		as[node_a] = cnode+1;
-		as[node_b] = 0;
-		cnode++;    
-		
-		/*calculate new distances*/
-		for (j = numseq;j--;){
-			if (j != node_b){
-				dm[node_a][j] = (dm[node_a][j] + dm[node_b][j])/2;
-			}
-		}
-		dm[node_a][node_a] = 0.0f;
-		for (j = numseq;j--;){
-			dm[j][node_a] = dm[node_a][j];
-			dm[j][node_b] = 0.0f;
-			dm[node_b][j] = 0.0f;
-		}		
-	}
-	free(as);
-	return tree;
-}
diff --git a/src/plugins_3rdparty/kalign/transl/english.ts b/src/plugins_3rdparty/kalign/transl/english.ts
index de6dd66..fdde279 100644
--- a/src/plugins_3rdparty/kalign/transl/english.ts
+++ b/src/plugins_3rdparty/kalign/transl/english.ts
@@ -4,54 +4,54 @@
 <context>
     <name>KalignDialog</name>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="32"/>
+        <location filename="../src/KalignDialog.ui" line="32"/>
         <source>Align with Kalign</source>
         <translation>Align with Kalign</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="54"/>
+        <location filename="../src/KalignDialog.ui" line="54"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="64"/>
-        <location filename="../src/ui/KalignDialog.ui" line="81"/>
+        <location filename="../src/KalignDialog.ui" line="64"/>
+        <location filename="../src/KalignDialog.ui" line="81"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="71"/>
-        <location filename="../src/ui/KalignDialog.ui" line="307"/>
+        <location filename="../src/KalignDialog.ui" line="71"/>
+        <location filename="../src/KalignDialog.ui" line="307"/>
         <source>Output file</source>
         <translation>Output file</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="99"/>
+        <location filename="../src/KalignDialog.ui" line="99"/>
         <source>Advanced options</source>
         <translation>Advanced options</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="114"/>
+        <location filename="../src/KalignDialog.ui" line="114"/>
         <source>Gap open penalty</source>
         <translation>Gap open penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="160"/>
+        <location filename="../src/KalignDialog.ui" line="160"/>
         <source>Gap extension penalty</source>
         <translation>Gap extension penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="206"/>
+        <location filename="../src/KalignDialog.ui" line="206"/>
         <source>Terminal gap penalty</source>
         <translation>Terminal gap penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="252"/>
+        <location filename="../src/KalignDialog.ui" line="252"/>
         <source>Bonus score</source>
         <translation>Bonus score</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="295"/>
+        <location filename="../src/KalignDialog.ui" line="295"/>
         <source>Translate to amino when aligning</source>
         <translation>Translate to amino when aligning</translation>
     </message>
@@ -59,27 +59,27 @@
 <context>
     <name>PairwiseAlignmentHirschbergOptionsPanelMainWidget</name>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="14"/>
+        <location filename="../src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="37"/>
+        <location filename="../src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="37"/>
         <source>Gap open penalty</source>
         <translation>Gap open penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="57"/>
+        <location filename="../src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="57"/>
         <source>Gap extension penalty</source>
         <translation>Gap extension penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="77"/>
+        <location filename="../src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="77"/>
         <source>Terminate gap penalty</source>
         <translation>Terminate gap penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="97"/>
+        <location filename="../src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="97"/>
         <source>Bonus score</source>
         <translation>Bonus score</translation>
     </message>
@@ -95,17 +95,17 @@
 <context>
     <name>U2::KalignAlignWithExtFileSpecifyDialogController</name>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="133"/>
+        <location filename="../src/KalignDialogController.cpp" line="128"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="134"/>
+        <location filename="../src/KalignDialogController.cpp" line="129"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="150"/>
+        <location filename="../src/KalignDialogController.cpp" line="146"/>
         <source>Open an alignment file</source>
         <translation>Open an alignment file</translation>
     </message>
@@ -115,18 +115,18 @@
         <translation>Save an multiple alignment file</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="200"/>
-        <location filename="../src/KalignDialogController.cpp" line="203"/>
+        <location filename="../src/KalignDialogController.cpp" line="193"/>
+        <location filename="../src/KalignDialogController.cpp" line="196"/>
         <source>Kalign with Align</source>
         <translation>Align with Kalign</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="201"/>
+        <location filename="../src/KalignDialogController.cpp" line="194"/>
         <source>Input file is not set!</source>
         <translation>Input file is not set!</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="204"/>
+        <location filename="../src/KalignDialogController.cpp" line="197"/>
         <source>Output file is not set!</source>
         <translation>Output file is not set!</translation>
     </message>
@@ -134,12 +134,12 @@
 <context>
     <name>U2::KalignDialogController</name>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="70"/>
+        <location filename="../src/KalignDialogController.cpp" line="63"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="71"/>
+        <location filename="../src/KalignDialogController.cpp" line="64"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
diff --git a/src/plugins_3rdparty/kalign/transl/russian.ts b/src/plugins_3rdparty/kalign/transl/russian.ts
index b074cc2..f771c55 100644
--- a/src/plugins_3rdparty/kalign/transl/russian.ts
+++ b/src/plugins_3rdparty/kalign/transl/russian.ts
@@ -4,54 +4,54 @@
 <context>
     <name>KalignDialog</name>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="32"/>
+        <location filename="../src/KalignDialog.ui" line="32"/>
         <source>Align with Kalign</source>
         <translation>Выравнивание с помощью Kalign</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="54"/>
+        <location filename="../src/KalignDialog.ui" line="54"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="64"/>
-        <location filename="../src/ui/KalignDialog.ui" line="81"/>
+        <location filename="../src/KalignDialog.ui" line="64"/>
+        <location filename="../src/KalignDialog.ui" line="81"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="71"/>
-        <location filename="../src/ui/KalignDialog.ui" line="307"/>
+        <location filename="../src/KalignDialog.ui" line="71"/>
+        <location filename="../src/KalignDialog.ui" line="307"/>
         <source>Output file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="99"/>
+        <location filename="../src/KalignDialog.ui" line="99"/>
         <source>Advanced options</source>
         <translation>Дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="114"/>
+        <location filename="../src/KalignDialog.ui" line="114"/>
         <source>Gap open penalty</source>
         <translation>Штраф за открытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="160"/>
+        <location filename="../src/KalignDialog.ui" line="160"/>
         <source>Gap extension penalty</source>
         <translation>Штраф за промежуточный пробел</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="206"/>
+        <location filename="../src/KalignDialog.ui" line="206"/>
         <source>Terminal gap penalty</source>
         <translation>Штраф за закрытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="252"/>
+        <location filename="../src/KalignDialog.ui" line="252"/>
         <source>Bonus score</source>
         <translation>Бонусные очки</translation>
     </message>
     <message>
-        <location filename="../src/ui/KalignDialog.ui" line="295"/>
+        <location filename="../src/KalignDialog.ui" line="295"/>
         <source>Translate to amino when aligning</source>
         <translation>Транслировать в амины в процессе выравнивания</translation>
     </message>
@@ -59,27 +59,27 @@
 <context>
     <name>PairwiseAlignmentHirschbergOptionsPanelMainWidget</name>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="14"/>
+        <location filename="../src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="37"/>
+        <location filename="../src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="37"/>
         <source>Gap open penalty</source>
         <translation>Штраф за открытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="57"/>
+        <location filename="../src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="57"/>
         <source>Gap extension penalty</source>
         <translation>Штраф за промежуточный пробел</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="77"/>
+        <location filename="../src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="77"/>
         <source>Terminate gap penalty</source>
         <translation>Штраф за закрытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/ui/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="97"/>
+        <location filename="../src/PairwiseAlignmentHirschbergOptionsPanelMainWidget.ui" line="97"/>
         <source>Bonus score</source>
         <translation>Бонусные очки</translation>
     </message>
@@ -95,17 +95,17 @@
 <context>
     <name>U2::KalignAlignWithExtFileSpecifyDialogController</name>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="133"/>
+        <location filename="../src/KalignDialogController.cpp" line="128"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="134"/>
+        <location filename="../src/KalignDialogController.cpp" line="129"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="150"/>
+        <location filename="../src/KalignDialogController.cpp" line="146"/>
         <source>Open an alignment file</source>
         <translation>Открыть выравнивание</translation>
     </message>
@@ -115,18 +115,18 @@
         <translation>Сохранить выранивание</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="200"/>
-        <location filename="../src/KalignDialogController.cpp" line="203"/>
+        <location filename="../src/KalignDialogController.cpp" line="193"/>
+        <location filename="../src/KalignDialogController.cpp" line="196"/>
         <source>Kalign with Align</source>
         <translation>Выравнивание с помощью Kalign</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="201"/>
+        <location filename="../src/KalignDialogController.cpp" line="194"/>
         <source>Input file is not set!</source>
         <translation>Входной файл не выбран!</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="204"/>
+        <location filename="../src/KalignDialogController.cpp" line="197"/>
         <source>Output file is not set!</source>
         <translation>Выходной файл не указан!</translation>
     </message>
@@ -134,12 +134,12 @@
 <context>
     <name>U2::KalignDialogController</name>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="70"/>
+        <location filename="../src/KalignDialogController.cpp" line="63"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/KalignDialogController.cpp" line="71"/>
+        <location filename="../src/KalignDialogController.cpp" line="64"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
diff --git a/src/plugins_3rdparty/phylip/CMakeLists.txt b/src/plugins_3rdparty/phylip/CMakeLists.txt
new file mode 100644
index 0000000..4d89e49
--- /dev/null
+++ b/src/plugins_3rdparty/phylip/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME phylip)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/phylip/phylip.pro b/src/plugins_3rdparty/phylip/phylip.pro
index e8c467e..8890b6b 100644
--- a/src/plugins_3rdparty/phylip/phylip.pro
+++ b/src/plugins_3rdparty/phylip/phylip.pro
@@ -7,23 +7,27 @@ HEADERS += src/SeqBootAdapter.h \
            src/DistanceMatrix.h \
            src/NeighborJoinAdapter.h \
            src/NeighborJoinWidget.h \
+           src/PhylipCmdlineTask.h \
            src/PhylipPlugin.h \
            src/PhylipPluginTests.h \
+           src/PhylipTask.h \
            src/dist.h \
            src/dnadist.h \
            src/neighbor.h \
            src/phylip.h \
            src/protdist.h \
            src/seq.h
-FORMS += src/ui/NeighborJoinWidget.ui
+FORMS += src/NeighborJoinWidget.ui
 SOURCES += src/SeqBootAdapter.cpp \
            src/cons.cpp \
            src/seqboot.cpp \
            src/DistanceMatrix.cpp \
            src/NeighborJoinAdapter.cpp \
            src/NeighborJoinWidget.cpp \
+           src/PhylipCmdlineTask.cpp \
            src/PhylipPlugin.cpp \
            src/PhylipPluginTests.cpp \
+           src/PhylipTask.cpp \
            src/dist.cpp \
            src/dnadist.cpp \
            src/neighbor.cpp \
diff --git a/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.cpp b/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.cpp
index cc9e3aa..38276c5 100644
--- a/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.cpp
+++ b/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.cpp
@@ -30,6 +30,7 @@
 #include "DistanceMatrix.h"
 #include "NeighborJoinAdapter.h"
 #include "NeighborJoinWidget.h"
+#include "PhylipCmdlineTask.h"
 #include "SeqBootAdapter.h"
 
 #include "dnadist.h"
@@ -97,7 +98,7 @@ void replacePhylipRestrictedSymbols(QByteArray& name) {
 }
 
 Task* NeighborJoinAdapter::createCalculatePhyTreeTask(const MAlignment& ma, const CreatePhyTreeSettings& s){
-    return new NeighborJoinCalculateTreeTask(ma, s);
+    return new PhylipCmdlineTask(ma, s);
 }
 
 CreatePhyTreeWidget * NeighborJoinAdapter::createPhyTreeSettingsWidget(const MAlignment &ma, QWidget *parent) {
diff --git a/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.h b/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.h
index ac90b25..2be601f 100644
--- a/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.h
+++ b/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.h
@@ -24,7 +24,7 @@
 
 #include <U2View/CreatePhyTreeWidget.h>
 
-#include "ui/ui_NeighborJoinWidget.h"
+#include "ui_NeighborJoinWidget.h"
 
 namespace U2 {
 
@@ -39,7 +39,7 @@ public:
     static QList<QString> getConsensusModelTypes();
 };
 
-class NeighborJoinWidget : public CreatePhyTreeWidget, public Ui::NeighborJoinWidget {
+class NeighborJoinWidget : public CreatePhyTreeWidget, public Ui_NeighborJoinWidget {
     Q_OBJECT
 public:
     NeighborJoinWidget(const MAlignment &ma, QWidget *parent = NULL);
diff --git a/src/plugins_3rdparty/phylip/src/ui/NeighborJoinWidget.ui b/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.ui
similarity index 100%
rename from src/plugins_3rdparty/phylip/src/ui/NeighborJoinWidget.ui
rename to src/plugins_3rdparty/phylip/src/NeighborJoinWidget.ui
diff --git a/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.cpp b/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.cpp
new file mode 100644
index 0000000..731df7c
--- /dev/null
+++ b/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.cpp
@@ -0,0 +1,120 @@
+/**
+* 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 <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/PhyTreeObject.h>
+#include <U2Core/U2DbiRegistry.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include "PhylipCmdlineTask.h"
+
+namespace U2 {
+
+const QString PhylipCmdlineTask::PHYLIP_CMDLINE = "phylip";
+const QString PhylipCmdlineTask::MATRIX_ARG = "matrix";
+const QString PhylipCmdlineTask::GAMMA_ARG = "gamma";
+const QString PhylipCmdlineTask::ALPHA_ARG = "alpha-factor";
+const QString PhylipCmdlineTask::TT_RATIO_ARG = "tt-ratio";
+const QString PhylipCmdlineTask::BOOTSTRAP_ARG = "bootstrap";
+const QString PhylipCmdlineTask::REPLICATES_ARG = "replicates";
+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)
+: PhyTreeGeneratorTask(msa, settings), cmdlineTask(NULL), msaObject(NULL), treeObject(NULL)
+{
+    setTaskName(tr("PHYLIP command line wrapper task"));
+    tpm = Progress_SubTasksBased;
+}
+
+PhylipCmdlineTask::~PhylipCmdlineTask() {
+    if (!dbiPath.isEmpty()) {
+        QFile::remove(dbiPath);
+    }
+}
+
+void PhylipCmdlineTask::prepare() {
+    prepareTempDbi();
+    CHECK_OP(stateInfo, );
+    createCmdlineTask();
+    CHECK_OP(stateInfo, );
+    addSubTask(cmdlineTask);
+}
+
+Task::ReportResult PhylipCmdlineTask::report() {
+    CHECK_OP(stateInfo, ReportResult_Finished);
+    QList<U2DataId> objects = cmdlineTask->getOutputObjects();
+    if (objects.isEmpty()) {
+        setError(tr("No tree objects found."));
+        return ReportResult_Finished;
+    }
+    CHECK_OP(stateInfo, ReportResult_Finished);
+    treeObject = new PhyTreeObject("tree", U2EntityRef(dbiRef, objects.first()));
+    treeObject->setParent(this);
+    result = treeObject->getTree();
+    return ReportResult_Finished;
+}
+
+void PhylipCmdlineTask::createCmdlineTask() {
+    CmdlineInOutTaskConfig config;
+    CHECK_OP(stateInfo, );
+    msaObject = MAlignmentImporter::createAlignment(dbiRef, const_cast<MAlignment&>(inputMA), stateInfo);
+    CHECK_OP(stateInfo, );
+    msaObject->setParent(this);
+    config.inputObjects << msaObject;
+    config.outDbiRef = dbiRef;
+    config.withPluginList = true;
+    config.pluginList << PLUGIN_ID;
+    config.command = "--" + PHYLIP_CMDLINE;
+    QString argString = "--%1=\"%2\"";
+    config.arguments << argString.arg(MATRIX_ARG).arg(settings.matrixId);
+    config.arguments << argString.arg(GAMMA_ARG).arg(settings.useGammaDistributionRates);
+    config.arguments << argString.arg(ALPHA_ARG).arg(settings.alphaFactor);
+    config.arguments << argString.arg(TT_RATIO_ARG).arg(settings.ttRatio);
+    config.arguments << argString.arg(BOOTSTRAP_ARG).arg(settings.bootstrap);
+    config.arguments << argString.arg(REPLICATES_ARG).arg(settings.replicates);
+    config.arguments << argString.arg(SEED_ARG).arg(settings.seed);
+    config.arguments << argString.arg(FRACTION_ARG).arg(settings.fraction);
+    config.arguments << argString.arg(CONSENSUS_ARG).arg(settings.consensusID);
+
+    cmdlineTask = new CmdlineInOutTaskRunner(config);
+}
+
+void PhylipCmdlineTask::prepareTempDbi() {
+    QString tmpDirPath = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath();
+    dbiPath = GUrlUtils::prepareTmpFileLocation(tmpDirPath, "phylip", "ugenedb", stateInfo);
+    CHECK_OP(stateInfo, );
+
+    dbiRef = U2DbiRef(DEFAULT_DBI_ID, dbiPath);
+    QHash<QString, QString> properties;
+    properties[U2DbiOptions::U2_DBI_LOCKING_MODE] = "normal";
+    DbiConnection(dbiRef, true, stateInfo, properties);
+}
+
+} // U2
diff --git a/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.h b/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.h
new file mode 100644
index 0000000..a4e98af
--- /dev/null
+++ b/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.h
@@ -0,0 +1,68 @@
+/**
+* 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_PHYLIP_CMDLINE_TASK_H_
+#define _U2_PHYLIP_CMDLINE_TASK_H_
+
+#include <U2Algorithm/PhyTreeGeneratorTask.h>
+
+namespace U2 {
+
+class CmdlineInOutTaskRunner;
+class MAlignmentObject;
+class PhyTreeObject;
+class TmpDbiHandle;
+
+class PhylipCmdlineTask : public PhyTreeGeneratorTask {
+    Q_OBJECT
+public:
+    PhylipCmdlineTask(const MAlignment &msa, const CreatePhyTreeSettings &settings);
+    ~PhylipCmdlineTask();
+
+    void prepare();
+    ReportResult report();
+
+    static const QString PHYLIP_CMDLINE;
+    static const QString MATRIX_ARG;
+    static const QString GAMMA_ARG;
+    static const QString ALPHA_ARG;
+    static const QString TT_RATIO_ARG;
+    static const QString BOOTSTRAP_ARG;
+    static const QString REPLICATES_ARG;
+    static const QString SEED_ARG;
+    static const QString FRACTION_ARG;
+    static const QString CONSENSUS_ARG;
+
+private:
+    void createCmdlineTask();
+    void prepareTempDbi();
+
+private:
+    CmdlineInOutTaskRunner *cmdlineTask;
+    MAlignmentObject *msaObject;
+    PhyTreeObject *treeObject;
+    QString dbiPath;
+    U2DbiRef dbiRef;
+};
+
+} // U2
+
+#endif // _U2_PHYLIP_CMDLINE_TASK_H_
diff --git a/src/plugins_3rdparty/phylip/src/PhylipPlugin.cpp b/src/plugins_3rdparty/phylip/src/PhylipPlugin.cpp
index cd62147..8724409 100644
--- a/src/plugins_3rdparty/phylip/src/PhylipPlugin.cpp
+++ b/src/plugins_3rdparty/phylip/src/PhylipPlugin.cpp
@@ -19,38 +19,29 @@
  * MA 02110-1301, USA.
  */
 
-#include "PhylipPlugin.h"
-
+#include <QDialog>
+#include <QMenu>
+#include <U2Algorithm/PhyTreeGeneratorRegistry.h>
 #include <U2Core/AppContext.h>
-#include <U2Core/Task.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/GObjectTypes.h>
-
+#include <U2Core/CMDLineRegistry.h>
+#include <U2Core/CmdlineInOutTaskRunner.h>
 #include <U2Core/GAutoDeleteList.h>
-#include <U2Gui/GUIUtils.h>
-#include <U2Gui/DialogUtils.h>
-
+#include <U2Core/TaskStarter.h>
+#include <U2Core/U2OpStatusUtils.h>
 #include <U2Test/XMLTestFormat.h>
-#include <U2Test/GTest.h>
 #include <U2Test/GTestFrameworkComponents.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QMenu>
-#endif
-
 #include "PhylipPluginTests.h"
+#include "PhylipCmdlineTask.h"
+#include "PhylipTask.h"
 #include "NeighborJoinAdapter.h"
-#include <U2Algorithm/PhyTreeGeneratorRegistry.h>
+
+#include "PhylipPlugin.h"
 
 namespace U2 {
 
 extern "C" Q_DECL_EXPORT Plugin* U2_PLUGIN_INIT_FUNC() {
-	PhylipPlugin * plug = new PhylipPlugin();
-	return plug;
+    PhylipPlugin *plug = new PhylipPlugin();
+    return plug;
 }
 
 const QString PhylipPlugin::PHYLIP_NEIGHBOUR_JOIN("PHYLIP Neighbor Joining");
@@ -75,11 +66,67 @@ PhylipPlugin::PhylipPlugin()
         Q_UNUSED(res);
         assert(res);
     }
+
+    processCmdlineOptions();
 }
 
-PhylipPlugin::~PhylipPlugin() {
-    //nothing to do
+namespace {
+    CreatePhyTreeSettings fetchSettings() {
+        CreatePhyTreeSettings settings;
+        CMDLineRegistry *cmdLineRegistry = AppContext::getCMDLineRegistry();
+        if (cmdLineRegistry->hasParameter(PhylipCmdlineTask::MATRIX_ARG)) {
+            settings.matrixId = cmdLineRegistry->getParameterValue(PhylipCmdlineTask::MATRIX_ARG);
+        }
+        if (cmdLineRegistry->hasParameter(PhylipCmdlineTask::GAMMA_ARG)) {
+            settings.useGammaDistributionRates = cmdLineRegistry->getParameterValue(PhylipCmdlineTask::GAMMA_ARG).toInt();
+        }
+        if (cmdLineRegistry->hasParameter(PhylipCmdlineTask::ALPHA_ARG)) {
+            settings.alphaFactor = cmdLineRegistry->getParameterValue(PhylipCmdlineTask::ALPHA_ARG).toDouble();
+        }
+        if (cmdLineRegistry->hasParameter(PhylipCmdlineTask::TT_RATIO_ARG)) {
+            settings.ttRatio = cmdLineRegistry->getParameterValue(PhylipCmdlineTask::TT_RATIO_ARG).toDouble();
+        }
+        if (cmdLineRegistry->hasParameter(PhylipCmdlineTask::BOOTSTRAP_ARG)) {
+            settings.bootstrap = cmdLineRegistry->getParameterValue(PhylipCmdlineTask::BOOTSTRAP_ARG).toInt();
+        }
+        if (cmdLineRegistry->hasParameter(PhylipCmdlineTask::REPLICATES_ARG)) {
+            settings.replicates = cmdLineRegistry->getParameterValue(PhylipCmdlineTask::REPLICATES_ARG).toInt();
+        }
+        if (cmdLineRegistry->hasParameter(PhylipCmdlineTask::SEED_ARG)) {
+            settings.seed = cmdLineRegistry->getParameterValue(PhylipCmdlineTask::SEED_ARG).toInt();
+        }
+        if (cmdLineRegistry->hasParameter(PhylipCmdlineTask::FRACTION_ARG)) {
+            settings.fraction = cmdLineRegistry->getParameterValue(PhylipCmdlineTask::FRACTION_ARG).toDouble();
+        }
+        if (cmdLineRegistry->hasParameter(PhylipCmdlineTask::CONSENSUS_ARG)) {
+            settings.consensusID = cmdLineRegistry->getParameterValue(PhylipCmdlineTask::CONSENSUS_ARG);
+        }
+        return settings;
+    }
 }
 
+void PhylipPlugin::processCmdlineOptions() {
+    CMDLineRegistry *cmdLineRegistry = AppContext::getCMDLineRegistry();
+    CHECK(cmdLineRegistry->hasParameter(PhylipCmdlineTask::PHYLIP_CMDLINE), );
+    CHECK(cmdLineRegistry->hasParameter(CmdlineInOutTaskRunner::OUT_DB_ARG), );
+    CHECK(cmdLineRegistry->hasParameter(CmdlineInOutTaskRunner::IN_DB_ARG), );
+    CHECK(cmdLineRegistry->hasParameter(CmdlineInOutTaskRunner::IN_ID_ARG), );
+
+    CreatePhyTreeSettings settings = fetchSettings();
+    QString outDbString = cmdLineRegistry->getParameterValue(CmdlineInOutTaskRunner::OUT_DB_ARG);
+    QString inDbString = cmdLineRegistry->getParameterValue(CmdlineInOutTaskRunner::IN_DB_ARG);
+    QString idString = cmdLineRegistry->getParameterValue(CmdlineInOutTaskRunner::IN_ID_ARG);
+
+    U2OpStatus2Log os;
+    U2DbiRef outDbiRef = CmdlineInOutTaskRunner::parseDbiRef(outDbString, os);
+    CHECK_OP(os, );
+    U2DbiRef inDbiRef = CmdlineInOutTaskRunner::parseDbiRef(inDbString, os);
+    CHECK_OP(os, );
+    U2DataId dataId = CmdlineInOutTaskRunner::parseDataId(idString, inDbiRef, os);
+    CHECK_OP(os, );
+
+    Task *t = new PhylipTask(U2EntityRef(inDbiRef, dataId), outDbiRef, settings);
+    connect(AppContext::getPluginSupport(), SIGNAL(si_allStartUpPluginsLoaded()), new TaskStarter(t), SLOT(registerTask()));
+}
 
 }//namespace
diff --git a/src/plugins_3rdparty/phylip/src/PhylipPlugin.h b/src/plugins_3rdparty/phylip/src/PhylipPlugin.h
index a8284a0..b3c34c9 100644
--- a/src/plugins_3rdparty/phylip/src/PhylipPlugin.h
+++ b/src/plugins_3rdparty/phylip/src/PhylipPlugin.h
@@ -34,7 +34,8 @@ class PhylipPlugin : public Plugin {
 public:
     static const QString PHYLIP_NEIGHBOUR_JOIN;
     PhylipPlugin();
-	~PhylipPlugin();
+private:
+    void processCmdlineOptions();
 };
 
 
diff --git a/src/plugins_3rdparty/phylip/src/PhylipPluginTests.cpp b/src/plugins_3rdparty/phylip/src/PhylipPluginTests.cpp
index fa552fe..535770a 100644
--- a/src/plugins_3rdparty/phylip/src/PhylipPluginTests.cpp
+++ b/src/plugins_3rdparty/phylip/src/PhylipPluginTests.cpp
@@ -140,6 +140,10 @@ void GTest_NeighborJoin::prepare() {
 Task::ReportResult GTest_NeighborJoin::report() {
     if (!task->hasError()) {
         const PhyTree computedTree = task->getResult();
+        if (NULL == computedTree) {
+            stateInfo.setError("Result tree is NULL");
+            return ReportResult_Finished;
+        }
         const PhyTree& treeFromDoc = treeObjFromDoc->getTree(); 
         bool same = PhyTreeObject::treesAreAlike(computedTree, treeFromDoc);
         if(!same){
diff --git a/src/plugins_3rdparty/phylip/src/PhylipTask.cpp b/src/plugins_3rdparty/phylip/src/PhylipTask.cpp
new file mode 100644
index 0000000..5ddfecc
--- /dev/null
+++ b/src/plugins_3rdparty/phylip/src/PhylipTask.cpp
@@ -0,0 +1,62 @@
+/**
+* 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/CmdlineInOutTaskRunner.h>
+#include <U2Core/MAlignmentObject.h>
+#include <U2Core/PhyTreeObject.h>
+#include <U2Core/U2SafePoints.h>
+#include "NeighborJoinAdapter.h"
+
+#include "PhylipTask.h"
+
+namespace U2 {
+
+PhylipTask::PhylipTask(const U2EntityRef &msaRef, const U2DbiRef &outDbiRef, const CreatePhyTreeSettings &settings)
+: CmdlineTask(tr("PHYLIP task"), TaskFlags_NR_FOSE_COSC), msaRef(msaRef), outDbiRef(outDbiRef), settings(settings), treeTask(NULL)
+{
+}
+
+void PhylipTask::prepare() {
+    MAlignmentObject *msaObject = new MAlignmentObject("msa", msaRef);
+    msaObject->setParent(this);
+
+    treeTask = new NeighborJoinCalculateTreeTask(msaObject->getMAlignment(), settings);
+    addSubTask(treeTask);
+}
+
+Task::ReportResult PhylipTask::report() {
+    CmdlineTask::report();
+    CHECK_OP(stateInfo, ReportResult_Finished);
+
+    CmdlineInOutTaskRunner::logOutputObject(saveTree());
+    return ReportResult_Finished;
+}
+
+U2DataId PhylipTask::saveTree() {
+    PhyTreeObject *treeObject = PhyTreeObject::createInstance(treeTask->getResult(), "Tree", outDbiRef, stateInfo);
+    CHECK_OP(stateInfo, U2DataId());
+
+    U2DataId treeId = treeObject->getEntityRef().entityId;
+    delete treeObject;
+    return treeId;
+}
+
+} // U2
diff --git a/src/plugins_3rdparty/phylip/src/PhylipTask.h b/src/plugins_3rdparty/phylip/src/PhylipTask.h
new file mode 100644
index 0000000..1ef5b20
--- /dev/null
+++ b/src/plugins_3rdparty/phylip/src/PhylipTask.h
@@ -0,0 +1,54 @@
+/**
+* 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_PHYLIP_TASK_H_
+#define _U2_PHYLIP_TASK_H_
+
+#include <U2Algorithm/CreatePhyTreeSettings.h>
+#include <U2Core/CmdlineTaskRunner.h>
+#include <U2Core/U2Type.h>
+
+namespace U2 {
+
+class NeighborJoinCalculateTreeTask;
+
+class PhylipTask : public CmdlineTask {
+    Q_OBJECT
+public:
+    PhylipTask(const U2EntityRef &msaRef, const U2DbiRef &outDbiRef, const CreatePhyTreeSettings &settings);
+
+    void prepare();
+    ReportResult report();
+
+private:
+    U2DataId saveTree();
+
+private:
+    U2EntityRef msaRef;
+    U2DbiRef outDbiRef;
+    CreatePhyTreeSettings settings;
+
+    NeighborJoinCalculateTreeTask *treeTask;
+};
+
+} // U2
+
+#endif // _U2_PHYLIP_TASK_H_
diff --git a/src/plugins_3rdparty/phylip/transl/english.ts b/src/plugins_3rdparty/phylip/transl/english.ts
index 6a2f0e5..1a4be2c 100644
--- a/src/plugins_3rdparty/phylip/transl/english.ts
+++ b/src/plugins_3rdparty/phylip/transl/english.ts
@@ -27,62 +27,62 @@
 <context>
     <name>NeighborJoinWidget</name>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="51"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="51"/>
         <source>Distance Matrix</source>
         <translation type="unfinished">Distance Matrix</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="68"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="68"/>
         <source>Distance matrix model</source>
         <translation type="unfinished">Distance matrix model</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="88"/>
+        <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>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="117"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="117"/>
         <source>Gamma distributed rates across sites</source>
         <translation type="unfinished">Gamma distributed rates across sites</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="131"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="131"/>
         <source>Transition/transversion ratio</source>
         <translation type="unfinished">Transition/transversion ratio</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="176"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="176"/>
         <source>Bootstrapping and Consensus Tree</source>
         <translation type="unfinished">Bootstrapping and Consensus Tree</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="185"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="185"/>
         <source>Enable bootstrapping</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="218"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="218"/>
         <source>Number of replicates</source>
         <translation type="unfinished">Number of replicates</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="245"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="245"/>
         <source>Seed (must be odd)</source>
         <translation type="unfinished">Seed (must be odd)</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="272"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="272"/>
         <source>Consensus type</source>
         <translation type="unfinished">Consensus type</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="289"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="289"/>
         <source>Fraction</source>
         <translation type="unfinished">Fraction</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="331"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="331"/>
         <source>Display Options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -135,19 +135,40 @@ It could cause an error. Do you want to continue?</translation>
     </message>
 </context>
 <context>
+    <name>U2::PhylipCmdlineTask</name>
+    <message>
+        <location filename="../src/PhylipCmdlineTask.cpp" line="52"/>
+        <source>PHYLIP command line wrapper task</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/PhylipCmdlineTask.cpp" line="74"/>
+        <source>No tree objects found.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::PhylipPlugin</name>
     <message>
-        <location filename="../src/PhylipPlugin.cpp" line="59"/>
+        <location filename="../src/PhylipPlugin.cpp" line="50"/>
         <source>PHYLIP</source>
         <translation>PHYLIP</translation>
     </message>
     <message>
-        <location filename="../src/PhylipPlugin.cpp" line="59"/>
+        <location filename="../src/PhylipPlugin.cpp" line="50"/>
         <source>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</source>
         <translation>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</translation>
     </message>
 </context>
 <context>
+    <name>U2::PhylipTask</name>
+    <message>
+        <location filename="../src/PhylipTask.cpp" line="33"/>
+        <source>PHYLIP task</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::SeqBootModelWidget</name>
     <message>
         <source>Seed must be odd</source>
diff --git a/src/plugins_3rdparty/phylip/transl/russian.ts b/src/plugins_3rdparty/phylip/transl/russian.ts
index 5edf3e7..c1d37bb 100644
--- a/src/plugins_3rdparty/phylip/transl/russian.ts
+++ b/src/plugins_3rdparty/phylip/transl/russian.ts
@@ -27,62 +27,62 @@
 <context>
     <name>NeighborJoinWidget</name>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="51"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="51"/>
         <source>Distance Matrix</source>
         <translation type="unfinished">Матрица расстояний</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="68"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="68"/>
         <source>Distance matrix model</source>
         <translation type="unfinished">Модель для подсчета матрицы</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="88"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="88"/>
         <source>Coefficient of variation of substitution rate among sites</source>
         <translation type="unfinished">Коэффициент вариации скорости замен</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="117"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="117"/>
         <source>Gamma distributed rates across sites</source>
         <translation type="unfinished">Гамма-распределение скорости замен</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="131"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="131"/>
         <source>Transition/transversion ratio</source>
         <translation type="unfinished">Отношение транзиций к трансверсиям</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="176"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="176"/>
         <source>Bootstrapping and Consensus Tree</source>
         <translation type="unfinished">Бутстреп-анализ и консенсусное дерево</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="185"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="185"/>
         <source>Enable bootstrapping</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="218"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="218"/>
         <source>Number of replicates</source>
         <translation type="unfinished">Количество репликаций</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="245"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="245"/>
         <source>Seed (must be odd)</source>
         <translation type="unfinished">Затравка (должна быть нечетной)</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="272"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="272"/>
         <source>Consensus type</source>
         <translation type="unfinished">Тип консенсуса</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="289"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="289"/>
         <source>Fraction</source>
         <translation type="unfinished">Доля</translation>
     </message>
     <message>
-        <location filename="../src/ui/NeighborJoinWidget.ui" line="331"/>
+        <location filename="../src/NeighborJoinWidget.ui" line="331"/>
         <source>Display Options</source>
         <translation type="unfinished"></translation>
     </message>
@@ -135,19 +135,40 @@ It could cause an error. Do you want to continue?</source>
     </message>
 </context>
 <context>
+    <name>U2::PhylipCmdlineTask</name>
+    <message>
+        <location filename="../src/PhylipCmdlineTask.cpp" line="52"/>
+        <source>PHYLIP command line wrapper task</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/PhylipCmdlineTask.cpp" line="74"/>
+        <source>No tree objects found.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::PhylipPlugin</name>
     <message>
-        <location filename="../src/PhylipPlugin.cpp" line="59"/>
+        <location filename="../src/PhylipPlugin.cpp" line="50"/>
         <source>PHYLIP</source>
         <translation>PHYLIP</translation>
     </message>
     <message>
-        <location filename="../src/PhylipPlugin.cpp" line="59"/>
+        <location filename="../src/PhylipPlugin.cpp" line="50"/>
         <source>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</source>
         <translation>PHYLIP (the PHYLogeny Inference Package) - пакет программ для построения филогенетических деревьев. Оригинальная версия находится по адресу: http://evolution.genetics.washington.edu/phylip.html</translation>
     </message>
 </context>
 <context>
+    <name>U2::PhylipTask</name>
+    <message>
+        <location filename="../src/PhylipTask.cpp" line="33"/>
+        <source>PHYLIP task</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::SeqBootModelWidget</name>
     <message>
         <source>Seed must be odd</source>
diff --git a/src/plugins_3rdparty/primer3/CMakeLists.txt b/src/plugins_3rdparty/primer3/CMakeLists.txt
new file mode 100644
index 0000000..885f5f9
--- /dev/null
+++ b/src/plugins_3rdparty/primer3/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME primer3)
+set(CMAKE_C_FLAGS  "${CMAKE_C_FLAGS} -Wno-implicit-int -Wno-implicit-function-declaration")
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/primer3/primer3.pro b/src/plugins_3rdparty/primer3/primer3.pro
index b0754ee..16d149e 100644
--- a/src/plugins_3rdparty/primer3/primer3.pro
+++ b/src/plugins_3rdparty/primer3/primer3.pro
@@ -13,7 +13,7 @@ HEADERS += src/Primer3Dialog.h \
            src/primer3_core/primer3.h \
            src/primer3_core/primer3_main.h \
     src/FindExonRegionsTask.h
-FORMS += src/ui/Primer3Dialog.ui
+FORMS += src/Primer3Dialog.ui
 SOURCES += src/Primer3Dialog.cpp \
            src/Primer3Plugin.cpp \
            src/Primer3TaskSettings.cpp \
diff --git a/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.cpp b/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.cpp
index 8275bdd..89a9d63 100644
--- a/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.cpp
+++ b/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.cpp
@@ -33,7 +33,7 @@
 
 namespace U2 {
 
-extern Logger log("Span Exon/Intron Regions");
+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/Primer3Dialog.cpp b/src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp
index c92b9ce..1f621a5 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp
@@ -46,7 +46,7 @@ Primer3Dialog::Primer3Dialog(const Primer3TaskSettings &defaultSettings, ADVSequ
         defaultSettings(defaultSettings)
 {
     ui.setupUi(this);
-    new HelpButton(this, ui.helpButton, "17467787");
+    new HelpButton(this, ui.helpButton, "17470720");
 
     QPushButton* pbPick = ui.pickPrimersButton;
     QPushButton* pbReset = ui.resetButton;
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Dialog.h b/src/plugins_3rdparty/primer3/src/Primer3Dialog.h
index e56d239..af5262e 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Dialog.h
+++ b/src/plugins_3rdparty/primer3/src/Primer3Dialog.h
@@ -64,7 +64,7 @@ private:
 
     void showInvalidInputMessage(QWidget *field, QString fieldLabel);
 private:
-    Ui::Primer3Dialog ui;
+    Ui_Primer3Dialog ui;
 
     CreateAnnotationWidgetController *createAnnotationWidgetController;
     U2Region selection;
diff --git a/src/plugins_3rdparty/primer3/src/ui/Primer3Dialog.ui b/src/plugins_3rdparty/primer3/src/Primer3Dialog.ui
similarity index 100%
rename from src/plugins_3rdparty/primer3/src/ui/Primer3Dialog.ui
rename to src/plugins_3rdparty/primer3/src/Primer3Dialog.ui
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Task.cpp b/src/plugins_3rdparty/primer3/src/Primer3Task.cpp
index 1269015..043ac17 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Task.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3Task.cpp
@@ -30,8 +30,8 @@
 #include <U2Core/U1AnnotationUtils.h>
 
 #include "Primer3Task.h"
-#include "boulder_input.h"
-#include "primer3_main.h"
+#include "primer3_core/boulder_input.h"
+#include "primer3_core/primer3_main.h"
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Task.h b/src/plugins_3rdparty/primer3/src/Primer3Task.h
index aead302..72e82c0 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Task.h
+++ b/src/plugins_3rdparty/primer3/src/Primer3Task.h
@@ -30,7 +30,7 @@
 #include "Primer3TaskSettings.h"
 #include "FindExonRegionsTask.h"
 
-#include "primer3.h"
+#include "primer3_core/primer3.h"
 
 struct primers_t;
 
diff --git a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp
index 128fa17..c1fc03f 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp
@@ -21,7 +21,7 @@
 
 #include <cstring>
 #include <cstdlib>
-#include "boulder_input.h"
+#include "primer3_core/boulder_input.h"
 #include "Primer3TaskSettings.h"
 
 namespace U2 {
diff --git a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h
index 6569023..e72f1b5 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h
+++ b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h
@@ -30,7 +30,7 @@
 #include <QtCore/QPair>
 #include <U2Core/U2Region.h>
 #include <U2Core/U2Range.h>
-#include "primer3.h"
+#include "primer3_core/primer3.h"
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Tests.cpp b/src/plugins_3rdparty/primer3/src/Primer3Tests.cpp
index e9b9cdb..453908c 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Tests.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3Tests.cpp
@@ -20,7 +20,7 @@
  */
 
 #include "Primer3Tests.h"
-#include "primer3.h"
+#include "primer3_core/primer3.h"
 
 namespace U2{
 
diff --git a/src/plugins_3rdparty/primer3/transl/english.ts b/src/plugins_3rdparty/primer3/transl/english.ts
index 1e3de6f..ab7285b 100644
--- a/src/plugins_3rdparty/primer3/transl/english.ts
+++ b/src/plugins_3rdparty/primer3/transl/english.ts
@@ -67,260 +67,260 @@
 <context>
     <name>Primer3Dialog</name>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="33"/>
+        <location filename="../src/Primer3Dialog.ui" line="33"/>
         <source>Main</source>
         <translation>Main</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="41"/>
+        <location filename="../src/Primer3Dialog.ui" line="41"/>
         <source>Excluded regions</source>
         <translation>Excluded regions</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="48"/>
+        <location filename="../src/Primer3Dialog.ui" line="48"/>
         <source>Targets</source>
         <translation>Targets</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="55"/>
+        <location filename="../src/Primer3Dialog.ui" line="55"/>
         <source><html><head/><body><p>Primer oligos may not overlap any region specified in this tag. The associated value must be a space-separated list of</p><p><span style=" font-weight:600;">start,length</span></p><p>pairs where start is the index of the first base of the excluded region, and length is its length. This tag is useful for tasks such as excluding regions of low sequence quality or for excluding region [...]
         <translation><html><head/><body><p>Primer oligos may not overlap any region specified in this tag. The associated value must be a space-separated list of</p><p><span style=" font-weight:600;">start,length</span></p><p>pairs where start is the index of the first base of the excluded region, and length is its length. This tag is useful for tasks such as excluding regions of low sequence quality or for excluding r [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="62"/>
+        <location filename="../src/Primer3Dialog.ui" line="62"/>
         <source><html><head/><body><p>If one or more Targets is specified then a legal primer pair must flank at least one of them. A Target might be a simple sequence repeat site (for example a CA repeat) or a single-base-pair polymorphism. The value should be a space-separated list of </p><p><span style=" font-weight:600;">start,length</span></p><p>pairs where start is the index of the first base of a Target, and len [...]
         <translation><html><head/><body><p>If one or more Targets is specified then a legal primer pair must flank at least one of them. A Target might be a simple sequence repeat site (for example a CA repeat) or a single-base-pair polymorphism. The value should be a space-separated list of </p><p><span style=" font-weight:600;">start,length</span></p><p>pairs where start is the index of the first base of a Target, an [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="106"/>
+        <location filename="../src/Primer3Dialog.ui" line="106"/>
         <source>Product size ranges</source>
         <translation>Product size ranges</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="113"/>
+        <location filename="../src/Primer3Dialog.ui" line="113"/>
         <source><html><head/><body><p>A list of product size ranges, for example:</p><p><span style="font-weight:600;"> 150-250 100-300 301-400 </span></p><p>Primer3 first tries to pick primers in the first range. If that is not possible, it goes to the next range and tries again. It continues in this way until it has either picked all necessary primers or until there are no more ranges. For technical reasons this opti [...]
         <translation><html><head/><body><p>A list of product size ranges, for example:</p><p><span style="font-weight:600;"> 150-250 100-300 301-400 </span></p><p>Primer3 first tries to pick primers in the first range. If that is not possible, it goes to the next range and tries again. It continues in this way until it has either picked all necessary primers or until there are no more ranges. For technical reasons this [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="120"/>
+        <location filename="../src/Primer3Dialog.ui" line="120"/>
         <source>Mispriming/Repeat library</source>
         <translation>Mispriming/Repeat library</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="130"/>
+        <location filename="../src/Primer3Dialog.ui" line="130"/>
         <source><html><head/><body><p>This selection indicates what mispriming library (if any) Primer3 should use to screen for interspersed repeats or for other sequence to avoid as a location for primers.</p></body></html></source>
         <translation><html><head/><body><p>This selection indicates what mispriming library (if any) Primer3 should use to screen for interspersed repeats or for other sequence to avoid as a location for primers.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="148"/>
+        <location filename="../src/Primer3Dialog.ui" line="148"/>
         <source>Number to return</source>
         <translation>Number to return</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="155"/>
+        <location filename="../src/Primer3Dialog.ui" line="155"/>
         <source>Max repeat mispriming</source>
         <translation>Max repeat mispriming</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="162"/>
+        <location filename="../src/Primer3Dialog.ui" line="162"/>
         <source>Max template mispriming</source>
         <translation>Max template mispriming</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="169"/>
+        <location filename="../src/Primer3Dialog.ui" line="169"/>
         <source>Max 3' stability</source>
         <translation>Max 3' stability</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="176"/>
+        <location filename="../src/Primer3Dialog.ui" line="176"/>
         <source>Pair max repeat mispriming</source>
         <translation>Pair max repeat mispriming</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="183"/>
+        <location filename="../src/Primer3Dialog.ui" line="183"/>
         <source>Pair max template mispriming</source>
         <translation>Pair max template mispriming</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="235"/>
+        <location filename="../src/Primer3Dialog.ui" line="235"/>
         <source><html><head/><body><p>The maximum number of primer pairs to return.</p><p>Primer pairs returned are sorted by their &quot;quality&quot;, in other words by the value of the objective function (where a lower number indicates a better primer pair).</p><p>Caution: setting this parameter to a large value will increase running time.</p></body></html></source>
         <translation><html><head/><body><p>The maximum number of primer pairs to return.</p><p>Primer pairs returned are sorted by their &quot;quality&quot;, in other words by the value of the objective function (where a lower number indicates a better primer pair).</p><p>Caution: setting this parameter to a large value will increase running time.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="254"/>
+        <location filename="../src/Primer3Dialog.ui" line="254"/>
         <source><html><head/><body><p>The maximum stability for the last five 3' bases of a left or right primer.</p><p>Bigger numbers mean more stable 3' ends. The value is the maximum delta G (kcal/mol) for duplex disruption for the five 3' bases as calculated using the Nearest-Neighbor parameter values specified by the option of 'Table of thermodynamic parameters'.</p></body></html></source>
         <translation><html><head/><body><p>The maximum stability for the last five 3' bases of a left or right primer.</p><p>Bigger numbers mean more stable 3' ends. The value is the maximum delta G (kcal/mol) for duplex disruption for the five 3' bases as calculated using the Nearest-Neighbor parameter values specified by the option of 'Table of thermodynamic parameters'.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="270"/>
+        <location filename="../src/Primer3Dialog.ui" line="270"/>
         <source><html><head/><body><p>The maximum allowed weighted similarity with any sequence in Mispriming Library.</p></body></html></source>
         <translation><html><head/><body><p>The maximum allowed weighted similarity with any sequence in Mispriming Library.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="286"/>
+        <location filename="../src/Primer3Dialog.ui" line="286"/>
         <source><html><head/><body><p>The maximum allowed sum of similarities of a primer pair (one similarity for each primer) with any single sequence in Mispriming Library. </p><p>Library sequence weights are not used in computing the sum of similarities.</p></body></html></source>
         <translation><html><head/><body><p>The maximum allowed sum of similarities of a primer pair (one similarity for each primer) with any single sequence in Mispriming Library. </p><p>Library sequence weights are not used in computing the sum of similarities.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="302"/>
+        <location filename="../src/Primer3Dialog.ui" line="302"/>
         <source><html><head/><body><p>The maximum allowed similarity to ectopic sites in the sequence from which you are designing the primers.</p><p>The scoring system is the same as used for Max Mispriming, except that an ambiguity code is never treated as a consensus.</p></body></html></source>
         <translation><html><head/><body><p>The maximum allowed similarity to ectopic sites in the sequence from which you are designing the primers.</p><p>The scoring system is the same as used for Max Mispriming, except that an ambiguity code is never treated as a consensus.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="318"/>
+        <location filename="../src/Primer3Dialog.ui" line="318"/>
         <source><html><head/><body><p>The maximum allowed summed similarity of both primers to ectopic sites in the sequence from which you are designing the primers.</p><p>The scoring system is the same as used for Max Mispriming, except that an ambiguity code is never treated as a consensus.</p></body></html></source>
         <translation><html><head/><body><p>The maximum allowed summed similarity of both primers to ectopic sites in the sequence from which you are designing the primers.</p><p>The scoring system is the same as used for Max Mispriming, except that an ambiguity code is never treated as a consensus.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="328"/>
+        <location filename="../src/Primer3Dialog.ui" line="328"/>
         <source>Start codon position</source>
         <translation>Start codon position</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="335"/>
+        <location filename="../src/Primer3Dialog.ui" line="335"/>
         <source><html><head/><body><p>Index of the first base of a start codon.</p><p>This parameter allows Primer3 to select primer pairs to create in-frame amplicons e.g. to create a template for a fusion protein. Primer3 will attempt to select an in-frame left primer, ideally starting at or to the left of the start codon, or to the right if necessary. Negative values of this parameter are legal if the actual start codon is to the left of available s [...]
         <translation><html><head/><body><p>Index of the first base of a start codon.</p><p>This parameter allows Primer3 to select primer pairs to create in-frame amplicons e.g. to create a template for a fusion protein. Primer3 will attempt to select an in-frame left primer, ideally starting at or to the left of the start codon, or to the right if necessary. Negative values of this parameter are legal if the actual start codon is to the left of availa [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="395"/>
+        <location filename="../src/Primer3Dialog.ui" line="395"/>
         <source>Pick left primer</source>
         <translation>Pick left primer</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="408"/>
+        <location filename="../src/Primer3Dialog.ui" line="408"/>
         <source>or use left primer below</source>
         <translation>or use left primer below</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="425"/>
+        <location filename="../src/Primer3Dialog.ui" line="425"/>
         <source>Pick hybridization probe (internal oligo)</source>
         <translation>Pick hybridization probe (internal oligo)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="438"/>
+        <location filename="../src/Primer3Dialog.ui" line="438"/>
         <source>or use oligo below</source>
         <translation>or use oligo below</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="458"/>
+        <location filename="../src/Primer3Dialog.ui" line="458"/>
         <source>Pick right primer</source>
         <translation>Pick right primer</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="471"/>
+        <location filename="../src/Primer3Dialog.ui" line="471"/>
         <source>or use right primer below (5' to 3' on opposite strand)</source>
         <translation>or use right primer below (5' to 3' on opposite strand)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="501"/>
+        <location filename="../src/Primer3Dialog.ui" line="501"/>
         <source>General Settings</source>
         <translation>General Settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="504"/>
+        <location filename="../src/Primer3Dialog.ui" line="504"/>
         <source><html><head/><body><p>This section covers such settings as primer size, temperature, GC and other general settings.</p></body></html></source>
         <translation><html><head/><body><p>This section covers such settings as primer size, temperature, GC and other general settings.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="512"/>
+        <location filename="../src/Primer3Dialog.ui" line="512"/>
         <source>Primer size</source>
         <translation>Primer size</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="519"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="547"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="575"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="603"/>
+        <location filename="../src/Primer3Dialog.ui" line="519"/>
+        <location filename="../src/Primer3Dialog.ui" line="547"/>
+        <location filename="../src/Primer3Dialog.ui" line="575"/>
+        <location filename="../src/Primer3Dialog.ui" line="603"/>
         <source>Min</source>
         <translation>Min</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="526"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="554"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="582"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="610"/>
+        <location filename="../src/Primer3Dialog.ui" line="526"/>
+        <location filename="../src/Primer3Dialog.ui" line="554"/>
+        <location filename="../src/Primer3Dialog.ui" line="582"/>
+        <location filename="../src/Primer3Dialog.ui" line="610"/>
         <source>Opt</source>
         <translation>Opt</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="533"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="561"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="589"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="617"/>
+        <location filename="../src/Primer3Dialog.ui" line="533"/>
+        <location filename="../src/Primer3Dialog.ui" line="561"/>
+        <location filename="../src/Primer3Dialog.ui" line="589"/>
+        <location filename="../src/Primer3Dialog.ui" line="617"/>
         <source>Max</source>
         <translation>Max</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="540"/>
+        <location filename="../src/Primer3Dialog.ui" line="540"/>
         <source>Primer Tm</source>
         <translation>Primer Tm</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="734"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="747"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="760"/>
+        <location filename="../src/Primer3Dialog.ui" line="734"/>
+        <location filename="../src/Primer3Dialog.ui" line="747"/>
+        <location filename="../src/Primer3Dialog.ui" line="760"/>
         <source><html><head/><body><p>Minimum, Optimum, and Maximum lengths (in bases) of a primer oligo.</p><p>Primer3 will not pick primers shorter than Min or longer than Max, and with default arguments will attempt to pick primers close with size close to Opt.</p><p>Min cannot be smaller than 1. Max cannot be larger than 36. (This limit is governed by maximum oligo size for which melting-temperature calculations are valid.)</p>&lt [...]
         <translation><html><head/><body><p>Minimum, Optimum, and Maximum lengths (in bases) of a primer oligo.</p><p>Primer3 will not pick primers shorter than Min or longer than Max, and with default arguments will attempt to pick primers close with size close to Opt.</p><p>Min cannot be smaller than 1. Max cannot be larger than 36. (This limit is governed by maximum oligo size for which melting-temperature calculations are valid.)</p&g [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="773"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="789"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="805"/>
+        <location filename="../src/Primer3Dialog.ui" line="773"/>
+        <location filename="../src/Primer3Dialog.ui" line="789"/>
+        <location filename="../src/Primer3Dialog.ui" line="805"/>
         <source><html><head/><body><p>Minimum, Optimum, and Maximum melting temperatures (Celsius) for a primer oligo.</p><p>Primer3 will not pick oligos with temperatures smaller than Min or larger than Max, and with default conditions will try to pick primers with melting temperatures close to Opt.</p></body></html></source>
         <translation><html><head/><body><p>Minimum, Optimum, and Maximum melting temperatures (Celsius) for a primer oligo.</p><p>Primer3 will not pick oligos with temperatures smaller than Min or larger than Max, and with default conditions will try to pick primers with melting temperatures close to Opt.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="821"/>
+        <location filename="../src/Primer3Dialog.ui" line="821"/>
         <source><html><head/><body><p>Minimum, Optimum, and Maximum percentage of Gs and Cs in any primer or oligo.</p></body></html>
 </source>
         <translation><html><head/><body><p>Minimum, Optimum, and Maximum percentage of Gs and Cs in any primer or oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="838"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="869"/>
+        <location filename="../src/Primer3Dialog.ui" line="838"/>
+        <location filename="../src/Primer3Dialog.ui" line="869"/>
         <source><html><head/><body><p>Minimum, Optimum, and Maximum percentage of Gs and Cs in any primer or oligo.</p></body></html></source>
         <translation><html><head/><body><p>Minimum, Optimum, and Maximum percentage of Gs and Cs in any primer or oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="848"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="855"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="862"/>
+        <location filename="../src/Primer3Dialog.ui" line="848"/>
+        <location filename="../src/Primer3Dialog.ui" line="855"/>
+        <location filename="../src/Primer3Dialog.ui" line="862"/>
         <source><html><head/><body><p>The minimum, optimum, and maximum melting temperature of the amplicon.</p><p>Primer3 will not pick a product with melting temperature less than min or greater than max. If Opt is supplied and the Penalty Weights for Product Size are non-0 Primer3 will attempt to pick an amplicon with melting temperature close to Opt.</p></body></html></source>
         <translation><html><head/><body><p>The minimum, optimum, and maximum melting temperature of the amplicon.</p><p>Primer3 will not pick a product with melting temperature less than min or greater than max. If Opt is supplied and the Penalty Weights for Product Size are non-0 Primer3 will attempt to pick an amplicon with melting temperature close to Opt.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="954"/>
+        <location filename="../src/Primer3Dialog.ui" line="954"/>
         <source>Max Tm difference</source>
         <translation>Max Tm difference</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="967"/>
+        <location filename="../src/Primer3Dialog.ui" line="967"/>
         <source><html><head/><body><p>Maximum acceptable (unsigned) difference between the melting temperatures of the left and right primers.</p></body></html></source>
         <translation><html><head/><body><p>Maximum acceptable (unsigned) difference between the melting temperatures of the left and right primers.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="977"/>
+        <location filename="../src/Primer3Dialog.ui" line="977"/>
         <source>Table of thermodynamic parameters</source>
         <translation>Table of thermodynamic parameters</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="987"/>
+        <location filename="../src/Primer3Dialog.ui" line="987"/>
         <source><html><head/><body><p>Specifies details of melting temperature calculation.</p><p>First method uses the table of thermodynamic parameters from the paper [Breslauer KJ, et. al (1986), Proc Natl Acad Sci 83:4746-50 http://dx.doi.org/10.1073/pnas.83.11.3746]</p><p>Second method (recommended) was suggested in the paper [SantaLucia JR (1998), Proc Natl Acad Sci 95:1460-65 http://dx.doi.org/10.1073/pnas.95.4.1460].</p></b [...]
         <translation><html><head/><body><p>Specifies details of melting temperature calculation.</p><p>First method uses the table of thermodynamic parameters from the paper [Breslauer KJ, et. al (1986), Proc Natl Acad Sci 83:4746-50 http://dx.doi.org/10.1073/pnas.83.11.3746]</p><p>Second method (recommended) was suggested in the paper [SantaLucia JR (1998), Proc Natl Acad Sci 95:1460-65 http://dx.doi.org/10.1073/pnas.95.4.1460].</p>& [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="996"/>
+        <location filename="../src/Primer3Dialog.ui" line="996"/>
         <source>Breslauer et. al 1986</source>
         <translation>Breslauer et. al 1986</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="991"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1099"/>
+        <location filename="../src/Primer3Dialog.ui" line="991"/>
+        <location filename="../src/Primer3Dialog.ui" line="1099"/>
         <source>SantaLucia 1998</source>
         <translation>SantaLucia 1998</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="20"/>
+        <location filename="../src/Primer3Dialog.ui" line="20"/>
         <source>Primer Designer</source>
         <translation>Primer Designer</translation>
     </message>
@@ -539,13 +539,13 @@ p, li { white-space: pre-wrap; }
 <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></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="568"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2443"/>
+        <location filename="../src/Primer3Dialog.ui" line="568"/>
+        <location filename="../src/Primer3Dialog.ui" line="2443"/>
         <source>Product Tm</source>
         <translation>Product Tm</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="596"/>
+        <location filename="../src/Primer3Dialog.ui" line="596"/>
         <source>Primer GC%</source>
         <translation>Primer GC%</translation>
     </message>
@@ -636,57 +636,57 @@ 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;">, Proc Natl Acad Sci 95:1460-65 http://dx.doi.org/10.1073/pnas.95.4.1460].</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1015"/>
+        <location filename="../src/Primer3Dialog.ui" line="1015"/>
         <source>Max self complementarity</source>
         <translation>Max self complementarity</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1022"/>
+        <location filename="../src/Primer3Dialog.ui" line="1022"/>
         <source>Max 3' self complementarity</source>
         <translation>Max 3' self complementarity</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1029"/>
+        <location filename="../src/Primer3Dialog.ui" line="1029"/>
         <source>Inside target penalty</source>
         <translation>Inside target penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1036"/>
+        <location filename="../src/Primer3Dialog.ui" line="1036"/>
         <source>Outside target penalty</source>
         <translation>Outside target penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1043"/>
+        <location filename="../src/Primer3Dialog.ui" line="1043"/>
         <source>Concentration of monovalent cations</source>
         <translation>Concentration of monovalent cations</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1050"/>
+        <location filename="../src/Primer3Dialog.ui" line="1050"/>
         <source>Max #N's</source>
         <translation>Max #N's</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1057"/>
+        <location filename="../src/Primer3Dialog.ui" line="1057"/>
         <source>Max poly-X</source>
         <translation>Max poly-X</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1064"/>
+        <location filename="../src/Primer3Dialog.ui" line="1064"/>
         <source>First base index</source>
         <translation>First base index</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1071"/>
+        <location filename="../src/Primer3Dialog.ui" line="1071"/>
         <source>CG clamp</source>
         <translation>CG clamp</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1078"/>
+        <location filename="../src/Primer3Dialog.ui" line="1078"/>
         <source>Concentration of divalent cations</source>
         <translation>Concentration of divalent cations</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1085"/>
+        <location filename="../src/Primer3Dialog.ui" line="1085"/>
         <source>Salt correction formula</source>
         <translation>Salt correction formula</translation>
     </message>
@@ -705,22 +705,22 @@ p, li { white-space: pre-wrap; }
 <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></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1104"/>
+        <location filename="../src/Primer3Dialog.ui" line="1104"/>
         <source>Schildkraut and Lifson 1965</source>
         <translation>Schildkraut and Lifson 1965</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1109"/>
+        <location filename="../src/Primer3Dialog.ui" line="1109"/>
         <source>Owczarzy et. 2004</source>
         <translation>Owczarzy et. 2004</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1117"/>
+        <location filename="../src/Primer3Dialog.ui" line="1117"/>
         <source>Concentration of dNTPs</source>
         <translation>Concentration of dNTPs</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1124"/>
+        <location filename="../src/Primer3Dialog.ui" line="1124"/>
         <source>Annealing oligo concentration</source>
         <translation>Annealing oligo concentration</translation>
     </message>
@@ -915,27 +915,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;">The effect of this parameter is to allow Primer3 to include overlap with the target as a term in the objective function.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1433"/>
+        <location filename="../src/Primer3Dialog.ui" line="1433"/>
         <source> Liberal base</source>
         <translation> Liberal base</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1446"/>
+        <location filename="../src/Primer3Dialog.ui" line="1446"/>
         <source>Show debuging info</source>
         <translation>Show debuging info</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1453"/>
+        <location filename="../src/Primer3Dialog.ui" line="1453"/>
         <source>Do not treat ambiguity codes in libraries as consensus</source>
         <translation>Do not treat ambiguity codes in libraries as consensus</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1463"/>
+        <location filename="../src/Primer3Dialog.ui" line="1463"/>
         <source>Lowercase masking</source>
         <translation>Lowercase masking</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1473"/>
+        <location filename="../src/Primer3Dialog.ui" line="1473"/>
         <source>Internal Oligo</source>
         <translation>Internal Oligo</translation>
     </message>
@@ -952,7 +952,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;">Parameters governing choice of internal oligos are analogous to the parameters governing choice of primer pairs. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1484"/>
+        <location filename="../src/Primer3Dialog.ui" line="1484"/>
         <source>Hyb oligo excluded region</source>
         <translation>Hyb oligo excluded region</translation>
     </message>
@@ -977,27 +977,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;">pairs, where &lt;start&gt; is the index of the first base of an excluded region, and &lt;length&gt; is its length. Often one would make Target regions excluded regions for internal oligos.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1509"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2760"/>
+        <location filename="../src/Primer3Dialog.ui" line="1509"/>
+        <location filename="../src/Primer3Dialog.ui" line="2760"/>
         <source>Hyb oligo size</source>
         <translation>Hyb oligo size</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1516"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2753"/>
+        <location filename="../src/Primer3Dialog.ui" line="1516"/>
+        <location filename="../src/Primer3Dialog.ui" line="2753"/>
         <source>Hyb oligo Tm</source>
         <translation>Hyb oligo Tm</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1523"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2767"/>
+        <location filename="../src/Primer3Dialog.ui" line="1523"/>
+        <location filename="../src/Primer3Dialog.ui" line="2767"/>
         <source>Hyb oligo GC%</source>
         <translation>Hyb oligo GC%</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1530"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1537"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1544"/>
+        <location filename="../src/Primer3Dialog.ui" line="1530"/>
+        <location filename="../src/Primer3Dialog.ui" line="1537"/>
+        <location filename="../src/Primer3Dialog.ui" line="1544"/>
         <source>Min:</source>
         <translation>Min:</translation>
     </message>
@@ -1038,9 +1038,9 @@ 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 GC% for the internal oligo. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1599"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1606"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1613"/>
+        <location filename="../src/Primer3Dialog.ui" line="1599"/>
+        <location filename="../src/Primer3Dialog.ui" line="1606"/>
+        <location filename="../src/Primer3Dialog.ui" line="1613"/>
         <source>Opt:</source>
         <translation>Opt:</translation>
     </message>
@@ -1057,40 +1057,40 @@ 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 GC% for the internal oligo. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1659"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1666"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1673"/>
+        <location filename="../src/Primer3Dialog.ui" line="1659"/>
+        <location filename="../src/Primer3Dialog.ui" line="1666"/>
+        <location filename="../src/Primer3Dialog.ui" line="1673"/>
         <source>Max:</source>
         <translation>Max:</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1730"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2923"/>
+        <location filename="../src/Primer3Dialog.ui" line="1730"/>
+        <location filename="../src/Primer3Dialog.ui" line="2923"/>
         <source>Hyb oligo self complementarity</source>
         <translation>Hyb oligo self complementarity</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1737"/>
+        <location filename="../src/Primer3Dialog.ui" line="1737"/>
         <source>Max #Ns</source>
         <translation>Max #Ns</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1744"/>
+        <location filename="../src/Primer3Dialog.ui" line="1744"/>
         <source>Hyb oligo mishyb library</source>
         <translation>Hyb oligo mishyb library</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1751"/>
+        <location filename="../src/Primer3Dialog.ui" line="1751"/>
         <source>Hyb oligo min sequence quality</source>
         <translation>Hyb oligo min sequence quality</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1758"/>
+        <location filename="../src/Primer3Dialog.ui" line="1758"/>
         <source>Hyb oligo conc of monovalent cations</source>
         <translation>Hyb oligo conc of monovalent cations</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1765"/>
+        <location filename="../src/Primer3Dialog.ui" line="1765"/>
         <source>Hyb oligo conc of divalent cations</source>
         <translation>Hyb oligo conc of divalent cations</translation>
     </message>
@@ -1167,17 +1167,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 concentration of divalent cations for the internal oligo. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1865"/>
+        <location filename="../src/Primer3Dialog.ui" line="1865"/>
         <source>Hyb oligo max 3' self complementarity</source>
         <translation>Hyb oligo max 3' self complementarity</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1872"/>
+        <location filename="../src/Primer3Dialog.ui" line="1872"/>
         <source>Hyb oligo max poly-X</source>
         <translation>Hyb oligo max poly-X</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1879"/>
+        <location filename="../src/Primer3Dialog.ui" line="1879"/>
         <source>Hyb oligo max mishyb</source>
         <translation>Hyb oligo max mishyb</translation>
     </message>
@@ -1218,12 +1218,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;">Similar to primer max library mispriming. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1934"/>
+        <location filename="../src/Primer3Dialog.ui" line="1934"/>
         <source>Hyb oligo [dNTP]</source>
         <translation>Hyb oligo [dNTP]</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1941"/>
+        <location filename="../src/Primer3Dialog.ui" line="1941"/>
         <source>Hyb oligo DNA concentration</source>
         <translation>Hyb oligo DNA concentration</translation>
     </message>
@@ -1252,7 +1252,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/ui/Primer3Dialog.ui" line="1996"/>
+        <location filename="../src/Primer3Dialog.ui" line="1996"/>
         <source>Penalty Weights</source>
         <translation>Penalty Weights</translation>
     </message>
@@ -1275,7 +1275,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;">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/ui/Primer3Dialog.ui" line="2007"/>
+        <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; }
@@ -1288,29 +1288,29 @@ 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:14pt; font-weight:600;">For Primers</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2020"/>
+        <location filename="../src/Primer3Dialog.ui" line="2020"/>
         <source>Tm</source>
         <translation>Tm</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2027"/>
+        <location filename="../src/Primer3Dialog.ui" line="2027"/>
         <source>Size  </source>
         <translation>Size  </translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2034"/>
+        <location filename="../src/Primer3Dialog.ui" line="2034"/>
         <source>GC%</source>
         <translation>GC%</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2041"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2048"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2055"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2482"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2489"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2774"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2781"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2788"/>
+        <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"/>
         <source>Lt:</source>
         <translation>Lt:</translation>
     </message>
@@ -1327,60 +1327,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/ui/Primer3Dialog.ui" line="2110"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2117"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2124"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2496"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2503"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2843"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2850"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2857"/>
+        <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"/>
         <source>Gt:</source>
         <translation>Gt:</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2190"/>
+        <location filename="../src/Primer3Dialog.ui" line="2190"/>
         <source>Self complementarity</source>
         <translation>Self complementarity</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2197"/>
+        <location filename="../src/Primer3Dialog.ui" line="2197"/>
         <source>3' self complementarity</source>
         <translation>3' self complementarity</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2204"/>
+        <location filename="../src/Primer3Dialog.ui" line="2204"/>
         <source>#N's</source>
         <translation>N</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2211"/>
+        <location filename="../src/Primer3Dialog.ui" line="2211"/>
         <source>Mispriming</source>
         <translation>Mispriming</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2218"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3282"/>
+        <location filename="../src/Primer3Dialog.ui" line="2218"/>
+        <location filename="../src/Primer3Dialog.ui" line="3282"/>
         <source>Sequence quality</source>
         <translation>Sequence quality</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2225"/>
+        <location filename="../src/Primer3Dialog.ui" line="2225"/>
         <source>End sequence quality</source>
         <translation>End sequence quality</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2232"/>
+        <location filename="../src/Primer3Dialog.ui" line="2232"/>
         <source>Position penalty</source>
         <translation>Position penalty</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2239"/>
+        <location filename="../src/Primer3Dialog.ui" line="2239"/>
         <source>End stability</source>
         <translation>End stability</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2246"/>
+        <location filename="../src/Primer3Dialog.ui" line="2246"/>
         <source>Template mispriming</source>
         <translation>Template mispriming</translation>
     </message>
@@ -1409,7 +1409,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;">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/ui/Primer3Dialog.ui" line="2423"/>
+        <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; }
@@ -1422,7 +1422,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:14pt; font-weight:600;">For Primer Pairs</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2436"/>
+        <location filename="../src/Primer3Dialog.ui" line="2436"/>
         <source>Product size</source>
         <translation>Product size</translation>
     </message>
@@ -1439,37 +1439,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/ui/Primer3Dialog.ui" line="2553"/>
+        <location filename="../src/Primer3Dialog.ui" line="2553"/>
         <source>Tm difference</source>
         <translation>Tm difference</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2560"/>
+        <location filename="../src/Primer3Dialog.ui" line="2560"/>
         <source>Any complementarity</source>
         <translation>Any complementarity</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2567"/>
+        <location filename="../src/Primer3Dialog.ui" line="2567"/>
         <source>3' complementarity</source>
         <translation>3' complementarity</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2574"/>
+        <location filename="../src/Primer3Dialog.ui" line="2574"/>
         <source>Pair mispriming</source>
         <translation>Pair mispriming</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2581"/>
+        <location filename="../src/Primer3Dialog.ui" line="2581"/>
         <source>Primer penalty weight</source>
         <translation>Primer penalty weight</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2588"/>
+        <location filename="../src/Primer3Dialog.ui" line="2588"/>
         <source>Hyb oligo penalty weight</source>
         <translation>Hyb oligo penalty weight</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2595"/>
+        <location filename="../src/Primer3Dialog.ui" line="2595"/>
         <source>Primer pair template mispriming weight</source>
         <translation>Primer pair template mispriming weight</translation>
     </message>
@@ -1486,7 +1486,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 a primer pair parameter different from predefined optimum value.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2740"/>
+        <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; }
@@ -1511,17 +1511,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/ui/Primer3Dialog.ui" line="2930"/>
+        <location filename="../src/Primer3Dialog.ui" line="2930"/>
         <source>Hyb oligo #N's</source>
         <translation>Hyb oligo #N's</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2937"/>
+        <location filename="../src/Primer3Dialog.ui" line="2937"/>
         <source>Hyb oligo mishybing</source>
         <translation>Hyb oligo mishybing</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2944"/>
+        <location filename="../src/Primer3Dialog.ui" line="2944"/>
         <source>Hyb oligo sequence quality</source>
         <translation>Hyb oligo sequence quality</translation>
     </message>
@@ -1538,7 +1538,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/ui/Primer3Dialog.ui" line="3033"/>
+        <location filename="../src/Primer3Dialog.ui" line="3033"/>
         <source>RT-PCR</source>
         <translation>RT-PCR</translation>
     </message>
@@ -1569,12 +1569,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/ui/Primer3Dialog.ui" line="3045"/>
+        <location filename="../src/Primer3Dialog.ui" line="3045"/>
         <source>Design primers for RT-PCR analysis</source>
         <translation>Design primers for RT-PCR analysis</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3065"/>
+        <location filename="../src/Primer3Dialog.ui" line="3065"/>
         <source>Exon annotation name:</source>
         <translation>Exon annotation name:</translation>
     </message>
@@ -1583,341 +1583,341 @@ 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/ui/Primer3Dialog.ui" line="3075"/>
+        <location filename="../src/Primer3Dialog.ui" line="3075"/>
         <source>exon</source>
         <translation>exon</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3100"/>
+        <location filename="../src/Primer3Dialog.ui" line="3100"/>
         <source>Minimum exon junction overlap size</source>
         <translation>Minimum exon junction overlap size</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3177"/>
+        <location filename="../src/Primer3Dialog.ui" line="3177"/>
         <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/ui/Primer3Dialog.ui" line="3218"/>
+        <location filename="../src/Primer3Dialog.ui" line="3218"/>
         <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/ui/Primer3Dialog.ui" line="3276"/>
+        <location filename="../src/Primer3Dialog.ui" line="3276"/>
         <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/ui/Primer3Dialog.ui" line="3289"/>
+        <location filename="../src/Primer3Dialog.ui" line="3289"/>
         <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/ui/Primer3Dialog.ui" line="3311"/>
+        <location filename="../src/Primer3Dialog.ui" line="3311"/>
         <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/ui/Primer3Dialog.ui" line="3334"/>
+        <location filename="../src/Primer3Dialog.ui" line="3334"/>
         <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/ui/Primer3Dialog.ui" line="3357"/>
+        <location filename="../src/Primer3Dialog.ui" line="3357"/>
         <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/ui/Primer3Dialog.ui" line="3380"/>
+        <location filename="../src/Primer3Dialog.ui" line="3380"/>
         <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/ui/Primer3Dialog.ui" line="3396"/>
+        <location filename="../src/Primer3Dialog.ui" line="3396"/>
         <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/ui/Primer3Dialog.ui" line="3451"/>
+        <location filename="../src/Primer3Dialog.ui" line="3451"/>
         <source>Help</source>
         <translation>Help</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3471"/>
+        <location filename="../src/Primer3Dialog.ui" line="3471"/>
         <source>Save settings</source>
         <translation>Save settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3478"/>
+        <location filename="../src/Primer3Dialog.ui" line="3478"/>
         <source>Load settings</source>
         <translation>Load settings</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3485"/>
+        <location filename="../src/Primer3Dialog.ui" line="3485"/>
         <source>Reset form</source>
         <translation>Reset form</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3492"/>
+        <location filename="../src/Primer3Dialog.ui" line="3492"/>
         <source>Pick primers</source>
         <translation>Pick primers</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3057"/>
+        <location filename="../src/Primer3Dialog.ui" line="3057"/>
         <source>mRNA sequence</source>
         <translation>mRNA sequence</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1095"/>
+        <location filename="../src/Primer3Dialog.ui" line="1095"/>
         <source><html><head/><body><p>Specifies the salt correction formula for the melting temperature calculation.</p></body></html></source>
         <translation><html><head/><body><p>Specifies the salt correction formula for the melting temperature calculation.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1254"/>
+        <location filename="../src/Primer3Dialog.ui" line="1254"/>
         <source><html><head/><body><p>The maximum allowable 3'-anchored global alignment score when testing a single primer for self-complementarity, and the maximum allowable 3'-anchored global alignment score when testing for complementarity between left and right primers.</p></body></html></source>
         <translation><html><head/><body><p>The maximum allowable 3'-anchored global alignment score when testing a single primer for self-complementarity, and the maximum allowable 3'-anchored global alignment score when testing for complementarity between left and right primers.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1270"/>
+        <location filename="../src/Primer3Dialog.ui" line="1270"/>
         <source><html><head/><body><p>The maximum allowable local alignment score when testing a single primer for (local) self-complementarity and the maximum allowable local alignment score when testing for complementarity between left and right primers.</p><p>Local self-complementarity is taken to predict the tendency of primers to anneal to each other without necessarily causing self-priming in the PCR. The scoring system gives 1.00 for complementa [...]
         <translation><html><head/><body><p>The maximum allowable local alignment score when testing a single primer for (local) self-complementarity and the maximum allowable local alignment score when testing for complementarity between left and right primers.</p><p>Local self-complementarity is taken to predict the tendency of primers to anneal to each other without necessarily causing self-priming in the PCR. The scoring system gives 1.00 for comple [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1286"/>
+        <location filename="../src/Primer3Dialog.ui" line="1286"/>
         <source><html><head/><body><p>Maximum number of unknown bases (N) allowable in any primer.</p></body></html></source>
         <translation><html><head/><body><p>Maximum number of unknown bases (N) allowable in any primer.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1302"/>
+        <location filename="../src/Primer3Dialog.ui" line="1302"/>
         <source><html><head/><body><p>The maximum allowable length of a mononucleotide repeat, for example AAAAAA.</p></body></html></source>
         <translation><html><head/><body><p>The maximum allowable length of a mononucleotide repeat, for example AAAAAA.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1318"/>
+        <location filename="../src/Primer3Dialog.ui" line="1318"/>
         <source><html><head/><body><p>Non-default values valid only for sequences with 0 or 1 target regions.</p><p>If the primer is part of a pair that spans a target and does not overlap the target, then multiply this value times the number of nucleotide positions from the 3' end to the (unique) target to get the 'position penalty'. The effect of this parameter is to allow Primer3 to include nearness to the target as a term in the obje [...]
         <translation><html><head/><body><p>Non-default values valid only for sequences with 0 or 1 target regions.</p><p>If the primer is part of a pair that spans a target and does not overlap the target, then multiply this value times the number of nucleotide positions from the 3' end to the (unique) target to get the 'position penalty'. The effect of this parameter is to allow Primer3 to include nearness to the target as a term in the [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1334"/>
+        <location filename="../src/Primer3Dialog.ui" line="1334"/>
         <source><html><head/><body><p>This parameter is the index of the first base in the input sequence.</p></body></html></source>
         <translation><html><head/><body><p>This parameter is the index of the first base in the input sequence.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1350"/>
+        <location filename="../src/Primer3Dialog.ui" line="1350"/>
         <source><html><head/><body><p>Require the specified number of consecutive Gs and Cs at the 3' end of both the left and right primer.</p><p>This parameter has no effect on the internal oligo if one is requested.</p></body></html></source>
         <translation><html><head/><body><p>Require the specified number of consecutive Gs and Cs at the 3' end of both the left and right primer.</p><p>This parameter has no effect on the internal oligo if one is requested.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1366"/>
+        <location filename="../src/Primer3Dialog.ui" line="1366"/>
         <source><html><head/><body><p>The millimolar (mM) concentration of monovalent salt cations (usually KCl) in the PCR.</p><p>Primer3 uses this argument to calculate oligo and primer melting temperatures.</p></body></html></source>
         <translation><html><head/><body><p>The millimolar (mM) concentration of monovalent salt cations (usually KCl) in the PCR.</p><p>Primer3 uses this argument to calculate oligo and primer melting temperatures.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1382"/>
+        <location filename="../src/Primer3Dialog.ui" line="1382"/>
         <source><html><head/><body><p>The millimolar concentration of divalent salt cations (usually MgCl^(2+)) in the PCR.</p><p>Primer3 converts concentration of divalent cations to concentration of monovalent cations using following formula:</p><p><span style=" font-weight:600;">[Monovalent cations] = [Monovalent cations] + 120*(([divalent cations] - [dNTP])^0.5)</span></p><p>In addition, if the specifie [...]
         <translation><html><head/><body><p>The millimolar concentration of divalent salt cations (usually MgCl^(2+)) in the PCR.</p><p>Primer3 converts concentration of divalent cations to concentration of monovalent cations using following formula:</p><p><span style=" font-weight:600;">[Monovalent cations] = [Monovalent cations] + 120*(([divalent cations] - [dNTP])^0.5)</span></p><p>In addition, if the spe [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1395"/>
+        <location filename="../src/Primer3Dialog.ui" line="1395"/>
         <source><html><head/><body><p>The millimolar concentration of the sum of all deoxyribonucleotide triphosphates.</p></body></html></source>
         <translation><html><head/><body><p>The millimolar concentration of the sum of all deoxyribonucleotide triphosphates.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1408"/>
+        <location filename="../src/Primer3Dialog.ui" line="1408"/>
         <source><html><head/><body><p>A value to use as nanomolar (nM) concentration of each annealing oligo over the course the PCR.</p><p>Primer3 uses this argument to esimate oligo melting temperatures.</p><p>The default (50nM) works well with the standard protocol used at the Whitehead/MIT Center for Genome Research --0.5 microliters of 20 micromolar concentration for each primer in a 20 microliter reaction with 10 nanograms template, 0 [...]
         <translation><html><head/><body><p>A value to use as nanomolar (nM) concentration of each annealing oligo over the course the PCR.</p><p>Primer3 uses this argument to esimate oligo melting temperatures.</p><p>The default (50nM) works well with the standard protocol used at the Whitehead/MIT Center for Genome Research --0.5 microliters of 20 micromolar concentration for each primer in a 20 microliter reaction with 10 nanograms templa [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1415"/>
+        <location filename="../src/Primer3Dialog.ui" line="1415"/>
         <source><html><head/><body><p>Non-default values valid only for sequences with 0 or 1 target regions.</p><p>If the primer is part of a pair that spans a target and overlaps the target, then multiply this value times the number of nucleotide positions by which the primer overlaps the (unique) target to get the 'position penalty'.</p><p>The effect of this parameter is to allow Primer3 to include overlap with the target as a  [...]
         <translation><html><head/><body><p>Non-default values valid only for sequences with 0 or 1 target regions.</p><p>If the primer is part of a pair that spans a target and overlaps the target, then multiply this value times the number of nucleotide positions by which the primer overlaps the (unique) target to get the 'position penalty'.</p><p>The effect of this parameter is to allow Primer3 to include overlap with the target  [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1476"/>
+        <location filename="../src/Primer3Dialog.ui" line="1476"/>
         <source><html><head/><body><p>Parameters governing choice of internal oligos are analogous to the parameters governing choice of primer pairs.</p></body></html></source>
         <translation><html><head/><body><p>Parameters governing choice of internal oligos are analogous to the parameters governing choice of primer pairs.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1491"/>
+        <location filename="../src/Primer3Dialog.ui" line="1491"/>
         <source><html><head/><body><p>Middle oligos may not overlap any region specified by this tag. The associated value must be a space-separated list of</p><p><span style=" font-weight:600;">&lt;start&gt;,&lt;length&gt;</span></p><p>pairs, where &lt;start&gt; is the index of the first base of an excluded region, and &lt;length&gt; is its length. Often one would make Target regions ex [...]
         <translation><html><head/><body><p>Middle oligos may not overlap any region specified by this tag. The associated value must be a space-separated list of</p><p><span style=" font-weight:600;">&lt;start&gt;,&lt;length&gt;</span></p><p>pairs, where &lt;start&gt; is the index of the first base of an excluded region, and &lt;length&gt; is its length. Often one would make Target regio [...]
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1557"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1626"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1686"/>
+        <location filename="../src/Primer3Dialog.ui" line="1557"/>
+        <location filename="../src/Primer3Dialog.ui" line="1626"/>
+        <location filename="../src/Primer3Dialog.ui" line="1686"/>
         <source><html><head/><body><p>Equivalent parameter of Primer Size for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of Primer Size for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1573"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1642"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1699"/>
+        <location filename="../src/Primer3Dialog.ui" line="1573"/>
+        <location filename="../src/Primer3Dialog.ui" line="1642"/>
+        <location filename="../src/Primer3Dialog.ui" line="1699"/>
         <source><html><head/><body><p>Equivalent parameter of Primer Tm for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of Primer Tm for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1589"/>
+        <location filename="../src/Primer3Dialog.ui" line="1589"/>
         <source><html><head/><body><p>Equivalent parameter of primer GC% for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer GC% for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1652"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1712"/>
+        <location filename="../src/Primer3Dialog.ui" line="1652"/>
+        <location filename="../src/Primer3Dialog.ui" line="1712"/>
         <source><html><head/><body><p>Equivalent parameter of Primer GC% for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of Primer GC% for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1778"/>
+        <location filename="../src/Primer3Dialog.ui" line="1778"/>
         <source><html><head/><body><p>Equivalent parameter of primer max self complemntarity for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer max self complemntarity for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1794"/>
+        <location filename="../src/Primer3Dialog.ui" line="1794"/>
         <source><html><head/><body><p>Equivalent parameter of primer max #Ns for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer max #Ns for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1810"/>
+        <location filename="../src/Primer3Dialog.ui" line="1810"/>
         <source><html><head/><body><p>Similar to primer mispriming library, except that the event we seek to avoid is hybridization of the internal oligo to sequences in this library rather than priming from them.</p></body></html></source>
         <translation><html><head/><body><p>Similar to primer mispriming library, except that the event we seek to avoid is hybridization of the internal oligo to sequences in this library rather than priming from them.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1823"/>
+        <location filename="../src/Primer3Dialog.ui" line="1823"/>
         <source><html><head/><body><p>Equivalent parameter of primer minimum quality for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer minimum quality for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1839"/>
+        <location filename="../src/Primer3Dialog.ui" line="1839"/>
         <source><html><head/><body><p>Equivalent parameter of primer concentration of monovalent cations for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer concentration of monovalent cations for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1855"/>
+        <location filename="../src/Primer3Dialog.ui" line="1855"/>
         <source><html><head/><body><p>Equivalent parameter of primer concentration of divalent cations for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer concentration of divalent cations for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1892"/>
+        <location filename="../src/Primer3Dialog.ui" line="1892"/>
         <source><html><head/><body><p>Equivalent parameter of primer max 3' self complementarity for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer max 3' self complementarity for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1908"/>
+        <location filename="../src/Primer3Dialog.ui" line="1908"/>
         <source><html><head/><body><p>Equivalent parameter of primer max poly-X for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer max poly-X for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1924"/>
+        <location filename="../src/Primer3Dialog.ui" line="1924"/>
         <source><html><head/><body><p>Similar to primer max library mispriming.</p></body></html></source>
         <translation><html><head/><body><p>Similar to primer max library mispriming.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1954"/>
+        <location filename="../src/Primer3Dialog.ui" line="1954"/>
         <source><html><head/><body><p>Equivalent parameter of primer concentration of the dNTPs for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer concentration of the dNTPs for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1970"/>
+        <location filename="../src/Primer3Dialog.ui" line="1970"/>
         <source><html><head/><body><p>Equivalent parameter of primer DNA concentration for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer DNA concentration for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1999"/>
+        <location filename="../src/Primer3Dialog.ui" line="1999"/>
         <source><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 specifie [...]
         <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/ui/Primer3Dialog.ui" line="2068"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2084"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2100"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2137"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2153"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2169"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="2259"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2275"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2291"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2307"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2323"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2339"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2371"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2387"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="2355"/>
+        <location filename="../src/Primer3Dialog.ui" line="2355"/>
         <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/ui/Primer3Dialog.ui" line="2456"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2472"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2516"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2532"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="2608"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2624"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2640"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2656"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2672"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2688"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2704"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="2801"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2817"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2833"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2870"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2886"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2902"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="2957"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2973"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2989"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3005"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="3036"/>
+        <location filename="../src/Primer3Dialog.ui" line="3036"/>
         <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/ui/Primer3Dialog.ui" line="3042"/>
+        <location filename="../src/Primer3Dialog.ui" line="3042"/>
         <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/ui/Primer3Dialog.ui" line="3072"/>
+        <location filename="../src/Primer3Dialog.ui" line="3072"/>
         <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/ui/Primer3Dialog.ui" line="3112"/>
+        <location filename="../src/Primer3Dialog.ui" line="3112"/>
         <source>At 5' side (bp):</source>
         <translation>At 5' side (bp):</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3142"/>
+        <location filename="../src/Primer3Dialog.ui" line="3142"/>
         <source>At 3'side (bp)</source>
         <translation>At 3'side (bp)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3164"/>
+        <location filename="../src/Primer3Dialog.ui" line="3164"/>
         <source>Exon range:</source>
         <translation>Exon range:</translation>
     </message>
@@ -1926,12 +1926,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/ui/Primer3Dialog.ui" line="3199"/>
+        <location filename="../src/Primer3Dialog.ui" line="3199"/>
         <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/ui/Primer3Dialog.ui" line="3211"/>
+        <location filename="../src/Primer3Dialog.ui" line="3211"/>
         <source>Max number of pairs to query:</source>
         <translation>Max number of pairs to query:</translation>
     </message>
@@ -1940,7 +1940,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/ui/Primer3Dialog.ui" line="3273"/>
+        <location filename="../src/Primer3Dialog.ui" line="3273"/>
         <source>Sequence Quality</source>
         <translation>Sequence Quality</translation>
     </message>
@@ -1969,7 +1969,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/ui/Primer3Dialog.ui" line="3298"/>
+        <location filename="../src/Primer3Dialog.ui" line="3298"/>
         <source>Min sequence quality:</source>
         <translation>Min sequence quality:</translation>
     </message>
@@ -1978,7 +1978,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">The minimum sequence quality allowed within a primer.</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3321"/>
+        <location filename="../src/Primer3Dialog.ui" line="3321"/>
         <source>Min 3' sequence quality:</source>
         <translation>Min 3' sequence quality:</translation>
     </message>
@@ -1999,7 +1999,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/ui/Primer3Dialog.ui" line="3344"/>
+        <location filename="../src/Primer3Dialog.ui" line="3344"/>
         <source>Sequence quality range min:</source>
         <translation>Sequence quality range min:</translation>
     </message>
@@ -2008,7 +2008,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">The minimum legal sequence quality.</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3367"/>
+        <location filename="../src/Primer3Dialog.ui" line="3367"/>
         <source>Sequence quality range max:</source>
         <translation>Sequence quality range max:</translation>
     </message>
@@ -2017,7 +2017,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">The maximum legal sequence quality.</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3393"/>
+        <location filename="../src/Primer3Dialog.ui" line="3393"/>
         <source>Result Settings</source>
         <translation>Result Settings</translation>
     </message>
diff --git a/src/plugins_3rdparty/primer3/transl/russian.ts b/src/plugins_3rdparty/primer3/transl/russian.ts
index 27f63bc..425777d 100644
--- a/src/plugins_3rdparty/primer3/transl/russian.ts
+++ b/src/plugins_3rdparty/primer3/transl/russian.ts
@@ -67,164 +67,164 @@
 <context>
     <name>Primer3Dialog</name>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="33"/>
+        <location filename="../src/Primer3Dialog.ui" line="33"/>
         <source>Main</source>
         <translation>Основные параметры</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="48"/>
+        <location filename="../src/Primer3Dialog.ui" line="48"/>
         <source>Targets</source>
         <translation>Целевые регионы</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="55"/>
+        <location filename="../src/Primer3Dialog.ui" line="55"/>
         <source><html><head/><body><p>Primer oligos may not overlap any region specified in this tag. The associated value must be a space-separated list of</p><p><span style=" font-weight:600;">start,length</span></p><p>pairs where start is the index of the first base of the excluded region, and length is its length. This tag is useful for tasks such as excluding regions of low sequence quality or for excluding region [...]
         <translation><html><head/><body><p>Олиго праймера не могут перекрывать регионы, указанные в этом теге.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="62"/>
+        <location filename="../src/Primer3Dialog.ui" line="62"/>
         <source><html><head/><body><p>If one or more Targets is specified then a legal primer pair must flank at least one of them. A Target might be a simple sequence repeat site (for example a CA repeat) or a single-base-pair polymorphism. The value should be a space-separated list of </p><p><span style=" font-weight:600;">start,length</span></p><p>pairs where start is the index of the first base of a Target, and len [...]
         <translation><html><head/><body><p>Если указаны один или больше целевых регионов то пара праймеров должна обрамлять как минимум один из них.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="113"/>
+        <location filename="../src/Primer3Dialog.ui" line="113"/>
         <source><html><head/><body><p>A list of product size ranges, for example:</p><p><span style="font-weight:600;"> 150-250 100-300 301-400 </span></p><p>Primer3 first tries to pick primers in the first range. If that is not possible, it goes to the next range and tries again. It continues in this way until it has either picked all necessary primers or until there are no more ranges. For technical reasons this opti [...]
         <translation><html><head/><body><p>Список диапазонов размера продукта, например:</p><p><span style="font-weight:600;"> 150-250 100-300 301-400 </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="130"/>
+        <location filename="../src/Primer3Dialog.ui" line="130"/>
         <source><html><head/><body><p>This selection indicates what mispriming library (if any) Primer3 should use to screen for interspersed repeats or for other sequence to avoid as a location for primers.</p></body></html></source>
         <translation><html><head/><body><p>Этот параметр указывает какую библиотеку будет использовать Primer3.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="235"/>
+        <location filename="../src/Primer3Dialog.ui" line="235"/>
         <source><html><head/><body><p>The maximum number of primer pairs to return.</p><p>Primer pairs returned are sorted by their &quot;quality&quot;, in other words by the value of the objective function (where a lower number indicates a better primer pair).</p><p>Caution: setting this parameter to a large value will increase running time.</p></body></html></source>
         <translation><html><head/><body><p>Максимальное число пар праймеров.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="254"/>
+        <location filename="../src/Primer3Dialog.ui" line="254"/>
         <source><html><head/><body><p>The maximum stability for the last five 3' bases of a left or right primer.</p><p>Bigger numbers mean more stable 3' ends. The value is the maximum delta G (kcal/mol) for duplex disruption for the five 3' bases as calculated using the Nearest-Neighbor parameter values specified by the option of 'Table of thermodynamic parameters'.</p></body></html></source>
         <translation><html><head/><body><p>Максимум стабильности для последних пяти 3' оснований левого или правого праймеров. </p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="270"/>
+        <location filename="../src/Primer3Dialog.ui" line="270"/>
         <source><html><head/><body><p>The maximum allowed weighted similarity with any sequence in Mispriming Library.</p></body></html></source>
         <translation><html><head/><body><p>Максимально допустимое взвешенное сходство с любой последовательностью из библиотеки ошибочного праймирования.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="286"/>
+        <location filename="../src/Primer3Dialog.ui" line="286"/>
         <source><html><head/><body><p>The maximum allowed sum of similarities of a primer pair (one similarity for each primer) with any single sequence in Mispriming Library. </p><p>Library sequence weights are not used in computing the sum of similarities.</p></body></html></source>
         <translation><html><head/><body><p>Максимально допустимая сумма сходств пар праймеров с любой последовательностью из библиотеки ошибочного праймирования.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="302"/>
+        <location filename="../src/Primer3Dialog.ui" line="302"/>
         <source><html><head/><body><p>The maximum allowed similarity to ectopic sites in the sequence from which you are designing the primers.</p><p>The scoring system is the same as used for Max Mispriming, except that an ambiguity code is never treated as a consensus.</p></body></html></source>
         <translation><html><head/><body><p>Максимально допустимое сходство со смещенными сайтами в последовательности из которой конструируются праймеры.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="318"/>
+        <location filename="../src/Primer3Dialog.ui" line="318"/>
         <source><html><head/><body><p>The maximum allowed summed similarity of both primers to ectopic sites in the sequence from which you are designing the primers.</p><p>The scoring system is the same as used for Max Mispriming, except that an ambiguity code is never treated as a consensus.</p></body></html></source>
         <translation><html><head/><body><p>Максимально разрешенное суммарное сходство обоих праймеров со смещенными сайтами в последовательности из которой конструируются праймеры. </span></p></body></html></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="335"/>
+        <location filename="../src/Primer3Dialog.ui" line="335"/>
         <source><html><head/><body><p>Index of the first base of a start codon.</p><p>This parameter allows Primer3 to select primer pairs to create in-frame amplicons e.g. to create a template for a fusion protein. Primer3 will attempt to select an in-frame left primer, ideally starting at or to the left of the start codon, or to the right if necessary. Negative values of this parameter are legal if the actual start codon is to the left of available s [...]
         <translation><html><head/><body><p>Индекс первого основания стартового кодона.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="395"/>
+        <location filename="../src/Primer3Dialog.ui" line="395"/>
         <source>Pick left primer</source>
         <translation>Выбрать левый праймер</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="408"/>
+        <location filename="../src/Primer3Dialog.ui" line="408"/>
         <source>or use left primer below</source>
         <translation>или использовать этот левый праймер</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="501"/>
+        <location filename="../src/Primer3Dialog.ui" line="501"/>
         <source>General Settings</source>
         <translation>Общие настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="504"/>
+        <location filename="../src/Primer3Dialog.ui" line="504"/>
         <source><html><head/><body><p>This section covers such settings as primer size, temperature, GC and other general settings.</p></body></html></source>
         <translation><html><head/><body><p>>В этом разделе рассматриваются такие параметры, как размер праймера, температура, GC и другие общие настройки.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="519"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="547"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="575"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="603"/>
+        <location filename="../src/Primer3Dialog.ui" line="519"/>
+        <location filename="../src/Primer3Dialog.ui" line="547"/>
+        <location filename="../src/Primer3Dialog.ui" line="575"/>
+        <location filename="../src/Primer3Dialog.ui" line="603"/>
         <source>Min</source>
         <translation>Минимум</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="526"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="554"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="582"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="610"/>
+        <location filename="../src/Primer3Dialog.ui" line="526"/>
+        <location filename="../src/Primer3Dialog.ui" line="554"/>
+        <location filename="../src/Primer3Dialog.ui" line="582"/>
+        <location filename="../src/Primer3Dialog.ui" line="610"/>
         <source>Opt</source>
         <translation>Оптимум</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="533"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="561"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="589"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="617"/>
+        <location filename="../src/Primer3Dialog.ui" line="533"/>
+        <location filename="../src/Primer3Dialog.ui" line="561"/>
+        <location filename="../src/Primer3Dialog.ui" line="589"/>
+        <location filename="../src/Primer3Dialog.ui" line="617"/>
         <source>Max</source>
         <translation>Максимум</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="540"/>
+        <location filename="../src/Primer3Dialog.ui" line="540"/>
         <source>Primer Tm</source>
         <translation>Т. плав. праймера</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="734"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="747"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="760"/>
+        <location filename="../src/Primer3Dialog.ui" line="734"/>
+        <location filename="../src/Primer3Dialog.ui" line="747"/>
+        <location filename="../src/Primer3Dialog.ui" line="760"/>
         <source><html><head/><body><p>Minimum, Optimum, and Maximum lengths (in bases) of a primer oligo.</p><p>Primer3 will not pick primers shorter than Min or longer than Max, and with default arguments will attempt to pick primers close with size close to Opt.</p><p>Min cannot be smaller than 1. Max cannot be larger than 36. (This limit is governed by maximum oligo size for which melting-temperature calculations are valid.)</p>&lt [...]
         <translation><html><head/><body><p>Минимальная, оптимальная и максимальная длины олиго праймера.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="773"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="789"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="805"/>
+        <location filename="../src/Primer3Dialog.ui" line="773"/>
+        <location filename="../src/Primer3Dialog.ui" line="789"/>
+        <location filename="../src/Primer3Dialog.ui" line="805"/>
         <source><html><head/><body><p>Minimum, Optimum, and Maximum melting temperatures (Celsius) for a primer oligo.</p><p>Primer3 will not pick oligos with temperatures smaller than Min or larger than Max, and with default conditions will try to pick primers with melting temperatures close to Opt.</p></body></html></source>
         <translation><html><head/><body><p>Минимальная, оптимальная и максимальная температуры плавления олиго праймера.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="821"/>
+        <location filename="../src/Primer3Dialog.ui" line="821"/>
         <source><html><head/><body><p>Minimum, Optimum, and Maximum percentage of Gs and Cs in any primer or oligo.</p></body></html>
 </source>
         <translation><html><head/><body><p>Минимальное, оптимальное и максимальное процентное содержание Gs и Cs в праймере или олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="838"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="869"/>
+        <location filename="../src/Primer3Dialog.ui" line="838"/>
+        <location filename="../src/Primer3Dialog.ui" line="869"/>
         <source><html><head/><body><p>Minimum, Optimum, and Maximum percentage of Gs and Cs in any primer or oligo.</p></body></html></source>
         <translation><html><head/><body><p>Минимальное, оптимальное и максимальное процентное содержание Gs и Cs в праймере или олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="848"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="855"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="862"/>
+        <location filename="../src/Primer3Dialog.ui" line="848"/>
+        <location filename="../src/Primer3Dialog.ui" line="855"/>
+        <location filename="../src/Primer3Dialog.ui" line="862"/>
         <source><html><head/><body><p>The minimum, optimum, and maximum melting temperature of the amplicon.</p><p>Primer3 will not pick a product with melting temperature less than min or greater than max. If Opt is supplied and the Penalty Weights for Product Size are non-0 Primer3 will attempt to pick an amplicon with melting temperature close to Opt.</p></body></html></source>
         <translation><html><head/><body><p>Минимальная, оптимальная и максимальная температуры плавления ампликона.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="967"/>
+        <location filename="../src/Primer3Dialog.ui" line="967"/>
         <source><html><head/><body><p>Maximum acceptable (unsigned) difference between the melting temperatures of the left and right primers.</p></body></html></source>
         <translation><html><head/><body><p>Максимально допустимое различие между температурами плавления левого и правого праймеров.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="977"/>
+        <location filename="../src/Primer3Dialog.ui" line="977"/>
         <source>Table of thermodynamic parameters</source>
         <translation>Таблица термодинамических параметров</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3396"/>
+        <location filename="../src/Primer3Dialog.ui" line="3396"/>
         <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>
@@ -247,23 +247,23 @@ 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/ui/Primer3Dialog.ui" line="996"/>
+        <location filename="../src/Primer3Dialog.ui" line="996"/>
         <source>Breslauer et. al 1986</source>
         <translation>Breslauer et. al 1986</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="991"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1099"/>
+        <location filename="../src/Primer3Dialog.ui" line="991"/>
+        <location filename="../src/Primer3Dialog.ui" line="1099"/>
         <source>SantaLucia 1998</source>
         <translation>SantaLucia 1998</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="20"/>
+        <location filename="../src/Primer3Dialog.ui" line="20"/>
         <source>Primer Designer</source>
         <translation>Дизайнер праймеров</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="41"/>
+        <location filename="../src/Primer3Dialog.ui" line="41"/>
         <source>Excluded regions</source>
         <translation>Исключенные регионы</translation>
     </message>
@@ -300,7 +300,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;">Если указаны один или больше целевых регионов то пара праймеров должна обрамлять как минимум один из них.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="106"/>
+        <location filename="../src/Primer3Dialog.ui" line="106"/>
         <source>Product size ranges</source>
         <translation>Диапазоны размера продукта</translation>
     </message>
@@ -324,7 +324,7 @@ p, li { white-space: pre-wrap; }
 </p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="120"/>
+        <location filename="../src/Primer3Dialog.ui" line="120"/>
         <source>Mispriming/Repeat library</source>
         <translation>Библиотека повторов/ошибочного праймирования</translation>
     </message>
@@ -342,32 +342,32 @@ 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;">Этот параметр указывает какую библиотеку будет использовать Primer3.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="148"/>
+        <location filename="../src/Primer3Dialog.ui" line="148"/>
         <source>Number to return</source>
         <translation>Результатов не более</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="155"/>
+        <location filename="../src/Primer3Dialog.ui" line="155"/>
         <source>Max repeat mispriming</source>
         <translation>Максимальный повтор ошибочного праймирования</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="162"/>
+        <location filename="../src/Primer3Dialog.ui" line="162"/>
         <source>Max template mispriming</source>
         <translation>Максимальный шаблон ошибочного праймирования</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="169"/>
+        <location filename="../src/Primer3Dialog.ui" line="169"/>
         <source>Max 3' stability</source>
         <translation>Максимальная 3' стабильность</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="176"/>
+        <location filename="../src/Primer3Dialog.ui" line="176"/>
         <source>Pair max repeat mispriming</source>
         <translation>Парный максимальный повтор ошибочного праймирования</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="183"/>
+        <location filename="../src/Primer3Dialog.ui" line="183"/>
         <source>Pair max template mispriming</source>
         <translation>Парный максимальный шаблон ошибочного праймирования</translation>
     </message>
@@ -457,7 +457,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/ui/Primer3Dialog.ui" line="328"/>
+        <location filename="../src/Primer3Dialog.ui" line="328"/>
         <source>Start codon position</source>
         <translation>Позиция стартового кодона</translation>
     </message>
@@ -479,22 +479,22 @@ 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/ui/Primer3Dialog.ui" line="425"/>
+        <location filename="../src/Primer3Dialog.ui" line="425"/>
         <source>Pick hybridization probe (internal oligo)</source>
         <translation>Выбрать гибридизационную пробу (internal oligo)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="438"/>
+        <location filename="../src/Primer3Dialog.ui" line="438"/>
         <source>or use oligo below</source>
         <translation>или использовать эту oligo</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="458"/>
+        <location filename="../src/Primer3Dialog.ui" line="458"/>
         <source>Pick right primer</source>
         <translation>Выбрать правый праймер</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="471"/>
+        <location filename="../src/Primer3Dialog.ui" line="471"/>
         <source>or use right primer below (5' to 3' on opposite strand)</source>
         <translation>или использовать этот правый праймер (5' в 3' в противоположном направлении)</translation>
     </message>
@@ -523,18 +523,18 @@ p, li { white-space: pre-wrap; }
 <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></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="512"/>
+        <location filename="../src/Primer3Dialog.ui" line="512"/>
         <source>Primer size</source>
         <translation>Размер праймера</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="568"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2443"/>
+        <location filename="../src/Primer3Dialog.ui" line="568"/>
+        <location filename="../src/Primer3Dialog.ui" line="2443"/>
         <source>Product Tm</source>
         <translation>Т. плав. продукта</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="596"/>
+        <location filename="../src/Primer3Dialog.ui" line="596"/>
         <source>Primer GC%</source>
         <translation>GC состав %</translation>
     </message>
@@ -588,7 +588,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/ui/Primer3Dialog.ui" line="954"/>
+        <location filename="../src/Primer3Dialog.ui" line="954"/>
         <source>Max Tm difference</source>
         <translation>Максимальная разница Т. плав</translation>
     </message>
@@ -597,47 +597,47 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">Максимально допустимое различие между температурами плавления левого и правого праймеров.</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1015"/>
+        <location filename="../src/Primer3Dialog.ui" line="1015"/>
         <source>Max self complementarity</source>
         <translation>Максимальная комплементарность</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1022"/>
+        <location filename="../src/Primer3Dialog.ui" line="1022"/>
         <source>Max 3' self complementarity</source>
         <translation>Максимальная 3' комплементарность</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1029"/>
+        <location filename="../src/Primer3Dialog.ui" line="1029"/>
         <source>Inside target penalty</source>
         <translation>Внутренний целевой штраф</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1036"/>
+        <location filename="../src/Primer3Dialog.ui" line="1036"/>
         <source>Outside target penalty</source>
         <translation>Внешний целевой штраф</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1057"/>
+        <location filename="../src/Primer3Dialog.ui" line="1057"/>
         <source>Max poly-X</source>
         <translation>Максимум poly-X</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1064"/>
+        <location filename="../src/Primer3Dialog.ui" line="1064"/>
         <source>First base index</source>
         <translation>Индекс первого основания</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1071"/>
+        <location filename="../src/Primer3Dialog.ui" line="1071"/>
         <source>CG clamp</source>
         <translation>Зажим CG</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1095"/>
+        <location filename="../src/Primer3Dialog.ui" line="1095"/>
         <source><html><head/><body><p>Specifies the salt correction formula for the melting temperature calculation.</p></body></html></source>
         <translation><html><head/><body><p>Задает коррекционную формулу для расчета температуры плавления.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1124"/>
+        <location filename="../src/Primer3Dialog.ui" line="1124"/>
         <source>Annealing oligo concentration</source>
         <translation>Концентрация отжига олиго</translation>
     </message>
@@ -801,12 +801,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;">Внутренний целевой штраф.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1433"/>
+        <location filename="../src/Primer3Dialog.ui" line="1433"/>
         <source> Liberal base</source>
         <translation>Разрешить неоднозначные символы</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1446"/>
+        <location filename="../src/Primer3Dialog.ui" line="1446"/>
         <source>Show debuging info</source>
         <translation>Показывать отладочную информацию</translation>
     </message>
@@ -823,7 +823,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/ui/Primer3Dialog.ui" line="1484"/>
+        <location filename="../src/Primer3Dialog.ui" line="1484"/>
         <source>Hyb oligo excluded region</source>
         <translation>Исключаемые регионы гибридизации олиго</translation>
     </message>
@@ -844,71 +844,71 @@ 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/ui/Primer3Dialog.ui" line="1509"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2760"/>
+        <location filename="../src/Primer3Dialog.ui" line="1509"/>
+        <location filename="../src/Primer3Dialog.ui" line="2760"/>
         <source>Hyb oligo size</source>
         <translation>Размер гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1516"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2753"/>
+        <location filename="../src/Primer3Dialog.ui" line="1516"/>
+        <location filename="../src/Primer3Dialog.ui" line="2753"/>
         <source>Hyb oligo Tm</source>
         <translation>Tm гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1523"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2767"/>
+        <location filename="../src/Primer3Dialog.ui" line="1523"/>
+        <location filename="../src/Primer3Dialog.ui" line="2767"/>
         <source>Hyb oligo GC%</source>
         <translation>GC% гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1557"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1626"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1686"/>
+        <location filename="../src/Primer3Dialog.ui" line="1557"/>
+        <location filename="../src/Primer3Dialog.ui" line="1626"/>
+        <location filename="../src/Primer3Dialog.ui" line="1686"/>
         <source><html><head/><body><p>Equivalent parameter of Primer Size for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Эквивалентный параметр размера праймера для внутреннего олиго.</p></body></html> </translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1573"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1642"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1699"/>
+        <location filename="../src/Primer3Dialog.ui" line="1573"/>
+        <location filename="../src/Primer3Dialog.ui" line="1642"/>
+        <location filename="../src/Primer3Dialog.ui" line="1699"/>
         <source><html><head/><body><p>Equivalent parameter of Primer Tm for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Tm олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1589"/>
+        <location filename="../src/Primer3Dialog.ui" line="1589"/>
         <source><html><head/><body><p>Equivalent parameter of primer GC% for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>GC% олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1652"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1712"/>
+        <location filename="../src/Primer3Dialog.ui" line="1652"/>
+        <location filename="../src/Primer3Dialog.ui" line="1712"/>
         <source><html><head/><body><p>Equivalent parameter of Primer GC% for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>GC% олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1730"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2923"/>
+        <location filename="../src/Primer3Dialog.ui" line="1730"/>
+        <location filename="../src/Primer3Dialog.ui" line="2923"/>
         <source>Hyb oligo self complementarity</source>
         <translation>Комплементарность гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1744"/>
+        <location filename="../src/Primer3Dialog.ui" line="1744"/>
         <source>Hyb oligo mishyb library</source>
         <translation>Библиотека гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1751"/>
+        <location filename="../src/Primer3Dialog.ui" line="1751"/>
         <source>Hyb oligo min sequence quality</source>
         <translation>Минимальное качество последовательности гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1758"/>
+        <location filename="../src/Primer3Dialog.ui" line="1758"/>
         <source>Hyb oligo conc of monovalent cations</source>
         <translation>Концентрация одновалентных катионов гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1765"/>
+        <location filename="../src/Primer3Dialog.ui" line="1765"/>
         <source>Hyb oligo conc of divalent cations</source>
         <translation>Концентрация двухвалентных катионов гибридизации олиго</translation>
     </message>
@@ -985,17 +985,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;">Концентрация двухвалентных катионов олиго. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1865"/>
+        <location filename="../src/Primer3Dialog.ui" line="1865"/>
         <source>Hyb oligo max 3' self complementarity</source>
         <translation>Максимальная 3' комплементарность гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1872"/>
+        <location filename="../src/Primer3Dialog.ui" line="1872"/>
         <source>Hyb oligo max poly-X</source>
         <translation>Максимум poly-X гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1879"/>
+        <location filename="../src/Primer3Dialog.ui" line="1879"/>
         <source>Hyb oligo max mishyb</source>
         <translation>Максимум ошибки гибридизации олиго</translation>
     </message>
@@ -1036,12 +1036,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;">Максимум ошибки олиго. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1934"/>
+        <location filename="../src/Primer3Dialog.ui" line="1934"/>
         <source>Hyb oligo [dNTP]</source>
         <translation>Гибридизация олиго [dNTP]</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1941"/>
+        <location filename="../src/Primer3Dialog.ui" line="1941"/>
         <source>Hyb oligo DNA concentration</source>
         <translation>ДНК концентрация гибридизации олиго</translation>
     </message>
@@ -1070,17 +1070,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/ui/Primer3Dialog.ui" line="2190"/>
+        <location filename="../src/Primer3Dialog.ui" line="2190"/>
         <source>Self complementarity</source>
         <translation>Комплементарность</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2197"/>
+        <location filename="../src/Primer3Dialog.ui" line="2197"/>
         <source>3' self complementarity</source>
         <translation>3' комплементарность</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3033"/>
+        <location filename="../src/Primer3Dialog.ui" line="3033"/>
         <source>RT-PCR</source>
         <translation>RT-PCR</translation>
     </message>
@@ -1110,12 +1110,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/ui/Primer3Dialog.ui" line="3045"/>
+        <location filename="../src/Primer3Dialog.ui" line="3045"/>
         <source>Design primers for RT-PCR analysis</source>
         <translation>Дизайн праймеров для анализа RT-PCR</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3065"/>
+        <location filename="../src/Primer3Dialog.ui" line="3065"/>
         <source>Exon annotation name:</source>
         <translation>Имя экзон аннотации:</translation>
     </message>
@@ -1124,17 +1124,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/ui/Primer3Dialog.ui" line="3075"/>
+        <location filename="../src/Primer3Dialog.ui" line="3075"/>
         <source>exon</source>
         <translation>exon</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3100"/>
+        <location filename="../src/Primer3Dialog.ui" line="3100"/>
         <source>Minimum exon junction overlap size</source>
         <translation>Минимальный размер перекрытия соединения экзона</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3164"/>
+        <location filename="../src/Primer3Dialog.ui" line="3164"/>
         <source>Exon range:</source>
         <translation>Диапазон экзона:</translation>
     </message>
@@ -1143,7 +1143,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/ui/Primer3Dialog.ui" line="3211"/>
+        <location filename="../src/Primer3Dialog.ui" line="3211"/>
         <source>Max number of pairs to query:</source>
         <translation>Максимальное число пар для запроса:</translation>
     </message>
@@ -1176,7 +1176,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/ui/Primer3Dialog.ui" line="3298"/>
+        <location filename="../src/Primer3Dialog.ui" line="3298"/>
         <source>Min sequence quality:</source>
         <translation>Минимальное качество последовательности:</translation>
     </message>
@@ -1185,7 +1185,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">Минимальное качество последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3321"/>
+        <location filename="../src/Primer3Dialog.ui" line="3321"/>
         <source>Min 3' sequence quality:</source>
         <translation>Минимальное 3'качество последовательности:</translation>
     </message>
@@ -1194,7 +1194,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">Минимальное 3'качество последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3344"/>
+        <location filename="../src/Primer3Dialog.ui" line="3344"/>
         <source>Sequence quality range min:</source>
         <translation>Минимум интервала качества последовательности:</translation>
     </message>
@@ -1203,7 +1203,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">Минимум интервала качества последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3367"/>
+        <location filename="../src/Primer3Dialog.ui" line="3367"/>
         <source>Sequence quality range max:</source>
         <translation>Максимум интервала качества последовательности:</translation>
     </message>
@@ -1224,52 +1224,52 @@ 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/ui/Primer3Dialog.ui" line="3451"/>
+        <location filename="../src/Primer3Dialog.ui" line="3451"/>
         <source>Help</source>
         <translation>Помощь</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3471"/>
+        <location filename="../src/Primer3Dialog.ui" line="3471"/>
         <source>Save settings</source>
         <translation>Сохранить настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3478"/>
+        <location filename="../src/Primer3Dialog.ui" line="3478"/>
         <source>Load settings</source>
         <translation>Загрузить настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3485"/>
+        <location filename="../src/Primer3Dialog.ui" line="3485"/>
         <source>Reset form</source>
         <translation>Сброс параметров</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3492"/>
+        <location filename="../src/Primer3Dialog.ui" line="3492"/>
         <source>Pick primers</source>
         <translation>Подобрать</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1043"/>
+        <location filename="../src/Primer3Dialog.ui" line="1043"/>
         <source>Concentration of monovalent cations</source>
         <translation>Концентрация одновалентных катионов</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="987"/>
+        <location filename="../src/Primer3Dialog.ui" line="987"/>
         <source><html><head/><body><p>Specifies details of melting temperature calculation.</p><p>First method uses the table of thermodynamic parameters from the paper [Breslauer KJ, et. al (1986), Proc Natl Acad Sci 83:4746-50 http://dx.doi.org/10.1073/pnas.83.11.3746]</p><p>Second method (recommended) was suggested in the paper [SantaLucia JR (1998), Proc Natl Acad Sci 95:1460-65 http://dx.doi.org/10.1073/pnas.95.4.1460].</p></b [...]
         <translation><html><head/><body><p>Указывает детали расчета температуры плавления.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1050"/>
+        <location filename="../src/Primer3Dialog.ui" line="1050"/>
         <source>Max #N's</source>
         <translation>Максимум N</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1078"/>
+        <location filename="../src/Primer3Dialog.ui" line="1078"/>
         <source>Concentration of divalent cations</source>
         <translation>Концентрация двухвалентных катионов</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1085"/>
+        <location filename="../src/Primer3Dialog.ui" line="1085"/>
         <source>Salt correction formula</source>
         <translation>Коррекционная формула</translation>
     </message>
@@ -1288,109 +1288,109 @@ p, li { white-space: pre-wrap; }
 <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></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1104"/>
+        <location filename="../src/Primer3Dialog.ui" line="1104"/>
         <source>Schildkraut and Lifson 1965</source>
         <translation>Schildkraut and Lifson 1965</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1109"/>
+        <location filename="../src/Primer3Dialog.ui" line="1109"/>
         <source>Owczarzy et. 2004</source>
         <translation>Owczarzy et. 2004</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1117"/>
+        <location filename="../src/Primer3Dialog.ui" line="1117"/>
         <source>Concentration of dNTPs</source>
         <translation>Концентрация dNTP</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1254"/>
+        <location filename="../src/Primer3Dialog.ui" line="1254"/>
         <source><html><head/><body><p>The maximum allowable 3'-anchored global alignment score when testing a single primer for self-complementarity, and the maximum allowable 3'-anchored global alignment score when testing for complementarity between left and right primers.</p></body></html></source>
         <translation><html><head/><body><p>Максимальная 3&apos;-комплементарность.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1270"/>
+        <location filename="../src/Primer3Dialog.ui" line="1270"/>
         <source><html><head/><body><p>The maximum allowable local alignment score when testing a single primer for (local) self-complementarity and the maximum allowable local alignment score when testing for complementarity between left and right primers.</p><p>Local self-complementarity is taken to predict the tendency of primers to anneal to each other without necessarily causing self-priming in the PCR. The scoring system gives 1.00 for complementa [...]
         <translation><html><head/><body><p>Максимальная комплементарность.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1286"/>
+        <location filename="../src/Primer3Dialog.ui" line="1286"/>
         <source><html><head/><body><p>Maximum number of unknown bases (N) allowable in any primer.</p></body></html></source>
         <translation><html><head/><body><p>Максимальное число неизвестных оснований (N), допустимых в праймере.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1302"/>
+        <location filename="../src/Primer3Dialog.ui" line="1302"/>
         <source><html><head/><body><p>The maximum allowable length of a mononucleotide repeat, for example AAAAAA.</p></body></html></source>
         <translation><html><head/><body><p>Максимальная допустимая для мононуклеотидного повтора, например AAAAAA.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1318"/>
+        <location filename="../src/Primer3Dialog.ui" line="1318"/>
         <source><html><head/><body><p>Non-default values valid only for sequences with 0 or 1 target regions.</p><p>If the primer is part of a pair that spans a target and does not overlap the target, then multiply this value times the number of nucleotide positions from the 3' end to the (unique) target to get the 'position penalty'. The effect of this parameter is to allow Primer3 to include nearness to the target as a term in the obje [...]
         <translation><html><head/><body><p>Внешний целевой штраф.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1334"/>
+        <location filename="../src/Primer3Dialog.ui" line="1334"/>
         <source><html><head/><body><p>This parameter is the index of the first base in the input sequence.</p></body></html></source>
         <translation><html><head/><body><p>Индекс первого основания во входной последовательности.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1350"/>
+        <location filename="../src/Primer3Dialog.ui" line="1350"/>
         <source><html><head/><body><p>Require the specified number of consecutive Gs and Cs at the 3' end of both the left and right primer.</p><p>This parameter has no effect on the internal oligo if one is requested.</p></body></html></source>
         <translation><html><head/><body><p>Зажим CG.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1366"/>
+        <location filename="../src/Primer3Dialog.ui" line="1366"/>
         <source><html><head/><body><p>The millimolar (mM) concentration of monovalent salt cations (usually KCl) in the PCR.</p><p>Primer3 uses this argument to calculate oligo and primer melting temperatures.</p></body></html></source>
         <translation><html><head/><body><p>Концентрация одновалентных катионов.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1382"/>
+        <location filename="../src/Primer3Dialog.ui" line="1382"/>
         <source><html><head/><body><p>The millimolar concentration of divalent salt cations (usually MgCl^(2+)) in the PCR.</p><p>Primer3 converts concentration of divalent cations to concentration of monovalent cations using following formula:</p><p><span style=" font-weight:600;">[Monovalent cations] = [Monovalent cations] + 120*(([divalent cations] - [dNTP])^0.5)</span></p><p>In addition, if the specifie [...]
         <translation><html><head/><body><p>Концентрация двухвалентных катионов.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1395"/>
+        <location filename="../src/Primer3Dialog.ui" line="1395"/>
         <source><html><head/><body><p>The millimolar concentration of the sum of all deoxyribonucleotide triphosphates.</p></body></html></source>
         <translation><html><head/><body><p>Концентрация dNTP.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1408"/>
+        <location filename="../src/Primer3Dialog.ui" line="1408"/>
         <source><html><head/><body><p>A value to use as nanomolar (nM) concentration of each annealing oligo over the course the PCR.</p><p>Primer3 uses this argument to esimate oligo melting temperatures.</p><p>The default (50nM) works well with the standard protocol used at the Whitehead/MIT Center for Genome Research --0.5 microliters of 20 micromolar concentration for each primer in a 20 microliter reaction with 10 nanograms template, 0 [...]
         <translation><html><head/><body><p>Концентрация отжига олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1415"/>
+        <location filename="../src/Primer3Dialog.ui" line="1415"/>
         <source><html><head/><body><p>Non-default values valid only for sequences with 0 or 1 target regions.</p><p>If the primer is part of a pair that spans a target and overlaps the target, then multiply this value times the number of nucleotide positions by which the primer overlaps the (unique) target to get the 'position penalty'.</p><p>The effect of this parameter is to allow Primer3 to include overlap with the target as a  [...]
         <translation><html><head/><body><p>Внешний целевой штраф.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1453"/>
+        <location filename="../src/Primer3Dialog.ui" line="1453"/>
         <source>Do not treat ambiguity codes in libraries as consensus</source>
         <translation>Не относить неоднозначности кода в библиотеке к консенсусу</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1463"/>
+        <location filename="../src/Primer3Dialog.ui" line="1463"/>
         <source>Lowercase masking</source>
         <translation>Строчная маскировка</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1473"/>
+        <location filename="../src/Primer3Dialog.ui" line="1473"/>
         <source>Internal Oligo</source>
         <translation>Внутреннее олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1476"/>
+        <location filename="../src/Primer3Dialog.ui" line="1476"/>
         <source><html><head/><body><p>Parameters governing choice of internal oligos are analogous to the parameters governing choice of primer pairs.</p></body></html></source>
         <translation><html><head/><body><p>Параметры, регулирующие выбор внутренних олиго аналогичны параметрам, регулирующих выбор пар праймеров.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1491"/>
+        <location filename="../src/Primer3Dialog.ui" line="1491"/>
         <source><html><head/><body><p>Middle oligos may not overlap any region specified by this tag. The associated value must be a space-separated list of</p><p><span style=" font-weight:600;">&lt;start&gt;,&lt;length&gt;</span></p><p>pairs, where &lt;start&gt; is the index of the first base of an excluded region, and &lt;length&gt; is its length. Often one would make Target regions ex [...]
         <translation><html><head/><body><p>Исключаемые олиго регионы.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1530"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1537"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1544"/>
+        <location filename="../src/Primer3Dialog.ui" line="1530"/>
+        <location filename="../src/Primer3Dialog.ui" line="1537"/>
+        <location filename="../src/Primer3Dialog.ui" line="1544"/>
         <source>Min:</source>
         <translation>Мин:</translation>
     </message>
@@ -1431,9 +1431,9 @@ 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;">GC% олиго. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1599"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1606"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1613"/>
+        <location filename="../src/Primer3Dialog.ui" line="1599"/>
+        <location filename="../src/Primer3Dialog.ui" line="1606"/>
+        <location filename="../src/Primer3Dialog.ui" line="1613"/>
         <source>Opt:</source>
         <translation>Опт:</translation>
     </message>
@@ -1450,74 +1450,74 @@ 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;">GC% олиго. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1659"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1666"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1673"/>
+        <location filename="../src/Primer3Dialog.ui" line="1659"/>
+        <location filename="../src/Primer3Dialog.ui" line="1666"/>
+        <location filename="../src/Primer3Dialog.ui" line="1673"/>
         <source>Max:</source>
         <translation>Макс:</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1737"/>
+        <location filename="../src/Primer3Dialog.ui" line="1737"/>
         <source>Max #Ns</source>
         <translation>Макс N</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1778"/>
+        <location filename="../src/Primer3Dialog.ui" line="1778"/>
         <source><html><head/><body><p>Equivalent parameter of primer max self complemntarity for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Комплементарность олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1794"/>
+        <location filename="../src/Primer3Dialog.ui" line="1794"/>
         <source><html><head/><body><p>Equivalent parameter of primer max #Ns for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Максимум N символов.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1810"/>
+        <location filename="../src/Primer3Dialog.ui" line="1810"/>
         <source><html><head/><body><p>Similar to primer mispriming library, except that the event we seek to avoid is hybridization of the internal oligo to sequences in this library rather than priming from them.</p></body></html></source>
         <translation><html><head/><body><p>Библиотека олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1823"/>
+        <location filename="../src/Primer3Dialog.ui" line="1823"/>
         <source><html><head/><body><p>Equivalent parameter of primer minimum quality for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Минимальное качество последовательности олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1839"/>
+        <location filename="../src/Primer3Dialog.ui" line="1839"/>
         <source><html><head/><body><p>Equivalent parameter of primer concentration of monovalent cations for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Концентрация одновалентных катионов олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1855"/>
+        <location filename="../src/Primer3Dialog.ui" line="1855"/>
         <source><html><head/><body><p>Equivalent parameter of primer concentration of divalent cations for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Концентрация двухвалентных катионов олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1892"/>
+        <location filename="../src/Primer3Dialog.ui" line="1892"/>
         <source><html><head/><body><p>Equivalent parameter of primer max 3' self complementarity for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Максимальная 3' комплементарность олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1908"/>
+        <location filename="../src/Primer3Dialog.ui" line="1908"/>
         <source><html><head/><body><p>Equivalent parameter of primer max poly-X for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Максимум poly-X олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1924"/>
+        <location filename="../src/Primer3Dialog.ui" line="1924"/>
         <source><html><head/><body><p>Similar to primer max library mispriming.</p></body></html></source>
         <translation><html><head/><body><p>Максимум ошибки олиго.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1954"/>
+        <location filename="../src/Primer3Dialog.ui" line="1954"/>
         <source><html><head/><body><p>Equivalent parameter of primer concentration of the dNTPs for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer concentration of the dNTPs for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1970"/>
+        <location filename="../src/Primer3Dialog.ui" line="1970"/>
         <source><html><head/><body><p>Equivalent parameter of primer DNA concentration for the internal oligo.</p></body></html></source>
         <translation><html><head/><body><p>Equivalent parameter of primer DNA concentration for the internal oligo.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1996"/>
+        <location filename="../src/Primer3Dialog.ui" line="1996"/>
         <source>Penalty Weights</source>
         <translation>Веса штрафов</translation>
     </message>
@@ -1537,7 +1537,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/ui/Primer3Dialog.ui" line="2007"/>
+        <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; }
@@ -1550,29 +1550,29 @@ 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:14pt; font-weight:600;">Для праймеров</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2020"/>
+        <location filename="../src/Primer3Dialog.ui" line="2020"/>
         <source>Tm</source>
         <translation>Tm</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2027"/>
+        <location filename="../src/Primer3Dialog.ui" line="2027"/>
         <source>Size  </source>
         <translation>Размер </translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2034"/>
+        <location filename="../src/Primer3Dialog.ui" line="2034"/>
         <source>GC%</source>
         <translation>GC%</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2041"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2048"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2055"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2482"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2489"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2774"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2781"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2788"/>
+        <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"/>
         <source>Lt:</source>
         <translation>Lt:</translation>
     </message>
@@ -1589,50 +1589,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/ui/Primer3Dialog.ui" line="2110"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2117"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2124"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2496"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2503"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2843"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2850"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2857"/>
+        <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"/>
         <source>Gt:</source>
         <translation>Gt:</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2204"/>
+        <location filename="../src/Primer3Dialog.ui" line="2204"/>
         <source>#N's</source>
         <translation>N</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2211"/>
+        <location filename="../src/Primer3Dialog.ui" line="2211"/>
         <source>Mispriming</source>
         <translation>Ошибочное праймирование</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2218"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3282"/>
+        <location filename="../src/Primer3Dialog.ui" line="2218"/>
+        <location filename="../src/Primer3Dialog.ui" line="3282"/>
         <source>Sequence quality</source>
         <translation>Качество последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2225"/>
+        <location filename="../src/Primer3Dialog.ui" line="2225"/>
         <source>End sequence quality</source>
         <translation>Качество конца последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2232"/>
+        <location filename="../src/Primer3Dialog.ui" line="2232"/>
         <source>Position penalty</source>
         <translation>Позиция штрафа</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2239"/>
+        <location filename="../src/Primer3Dialog.ui" line="2239"/>
         <source>End stability</source>
         <translation>Стабильность конца</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2246"/>
+        <location filename="../src/Primer3Dialog.ui" line="2246"/>
         <source>Template mispriming</source>
         <translation>Шаблон ошибочного праймирования</translation>
     </message>
@@ -1661,7 +1661,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/ui/Primer3Dialog.ui" line="2436"/>
+        <location filename="../src/Primer3Dialog.ui" line="2436"/>
         <source>Product size</source>
         <translation>Размер продукта</translation>
     </message>
@@ -1678,37 +1678,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/ui/Primer3Dialog.ui" line="2553"/>
+        <location filename="../src/Primer3Dialog.ui" line="2553"/>
         <source>Tm difference</source>
         <translation>Максимальная разница Tm</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2560"/>
+        <location filename="../src/Primer3Dialog.ui" line="2560"/>
         <source>Any complementarity</source>
         <translation>Любая комплементарность</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2567"/>
+        <location filename="../src/Primer3Dialog.ui" line="2567"/>
         <source>3' complementarity</source>
         <translation>3' комплементарность</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2574"/>
+        <location filename="../src/Primer3Dialog.ui" line="2574"/>
         <source>Pair mispriming</source>
         <translation>Ошибочное парное праймирование</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2581"/>
+        <location filename="../src/Primer3Dialog.ui" line="2581"/>
         <source>Primer penalty weight</source>
         <translation>Вес штрафа праймера</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2588"/>
+        <location filename="../src/Primer3Dialog.ui" line="2588"/>
         <source>Hyb oligo penalty weight</source>
         <translation>Вес штрафа гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2595"/>
+        <location filename="../src/Primer3Dialog.ui" line="2595"/>
         <source>Primer pair template mispriming weight</source>
         <translation>Вес шаблона ошибочного праймирования</translation>
     </message>
@@ -1737,17 +1737,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/ui/Primer3Dialog.ui" line="2930"/>
+        <location filename="../src/Primer3Dialog.ui" line="2930"/>
         <source>Hyb oligo #N's</source>
         <translation>N гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2937"/>
+        <location filename="../src/Primer3Dialog.ui" line="2937"/>
         <source>Hyb oligo mishybing</source>
         <translation>Ошибочная гибридизация олиго</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2944"/>
+        <location filename="../src/Primer3Dialog.ui" line="2944"/>
         <source>Hyb oligo sequence quality</source>
         <translation>Качество последовательности гибридизации олиго</translation>
     </message>
@@ -1764,32 +1764,32 @@ 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/ui/Primer3Dialog.ui" line="3057"/>
+        <location filename="../src/Primer3Dialog.ui" line="3057"/>
         <source>mRNA sequence</source>
         <translation>Последовательность mRNA</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3112"/>
+        <location filename="../src/Primer3Dialog.ui" line="3112"/>
         <source>At 5' side (bp):</source>
         <translation>Со стороны 5' (нк):</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3142"/>
+        <location filename="../src/Primer3Dialog.ui" line="3142"/>
         <source>At 3'side (bp)</source>
         <translation>Со стороны 3' (нк)</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3199"/>
+        <location filename="../src/Primer3Dialog.ui" line="3199"/>
         <source>Primer product must span at least one intron on the corresponding genomic DNA</source>
         <translation>Продук праймера должен охватывать по крайней мере один интрон на соответствующей геномной ДНК</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3273"/>
+        <location filename="../src/Primer3Dialog.ui" line="3273"/>
         <source>Sequence Quality</source>
         <translation>Качество последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2423"/>
+        <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; }
@@ -1802,58 +1802,58 @@ 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:14pt; font-weight:600;">Для пар праймеров</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="1999"/>
+        <location filename="../src/Primer3Dialog.ui" line="1999"/>
         <source><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 specifie [...]
         <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/ui/Primer3Dialog.ui" line="2068"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2084"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2100"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2137"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2153"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2169"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="2259"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2275"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2291"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2307"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2323"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2339"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2371"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2387"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="2355"/>
+        <location filename="../src/Primer3Dialog.ui" line="2355"/>
         <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/ui/Primer3Dialog.ui" line="2456"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2472"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2516"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2532"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="2608"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2624"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2640"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2656"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2672"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2688"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2704"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="2740"/>
+        <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; }
@@ -1866,80 +1866,80 @@ 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:14pt; font-weight:600;">Для гибридизации олиго</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2801"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2817"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2833"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2870"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2886"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2902"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="2957"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2973"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="2989"/>
-        <location filename="../src/ui/Primer3Dialog.ui" line="3005"/>
+        <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"/>
         <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/ui/Primer3Dialog.ui" line="3036"/>
+        <location filename="../src/Primer3Dialog.ui" line="3036"/>
         <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/ui/Primer3Dialog.ui" line="3042"/>
+        <location filename="../src/Primer3Dialog.ui" line="3042"/>
         <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/ui/Primer3Dialog.ui" line="3072"/>
+        <location filename="../src/Primer3Dialog.ui" line="3072"/>
         <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/ui/Primer3Dialog.ui" line="3177"/>
+        <location filename="../src/Primer3Dialog.ui" line="3177"/>
         <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/ui/Primer3Dialog.ui" line="3218"/>
+        <location filename="../src/Primer3Dialog.ui" line="3218"/>
         <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/ui/Primer3Dialog.ui" line="3276"/>
+        <location filename="../src/Primer3Dialog.ui" line="3276"/>
         <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/ui/Primer3Dialog.ui" line="3289"/>
+        <location filename="../src/Primer3Dialog.ui" line="3289"/>
         <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/ui/Primer3Dialog.ui" line="3311"/>
+        <location filename="../src/Primer3Dialog.ui" line="3311"/>
         <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/ui/Primer3Dialog.ui" line="3334"/>
+        <location filename="../src/Primer3Dialog.ui" line="3334"/>
         <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/ui/Primer3Dialog.ui" line="3357"/>
+        <location filename="../src/Primer3Dialog.ui" line="3357"/>
         <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/ui/Primer3Dialog.ui" line="3380"/>
+        <location filename="../src/Primer3Dialog.ui" line="3380"/>
         <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/ui/Primer3Dialog.ui" line="3393"/>
+        <location filename="../src/Primer3Dialog.ui" line="3393"/>
         <source>Result Settings</source>
         <translation>Параметры результатов</translation>
     </message>
diff --git a/src/plugins_3rdparty/psipred/CMakeLists.txt b/src/plugins_3rdparty/psipred/CMakeLists.txt
new file mode 100644
index 0000000..7b6dcd7
--- /dev/null
+++ b/src/plugins_3rdparty/psipred/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME psipred)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/psipred/src/sspred_avpred.cpp b/src/plugins_3rdparty/psipred/src/sspred_avpred.cpp
index ce04d86..abd3171 100644
--- a/src/plugins_3rdparty/psipred/src/sspred_avpred.cpp
+++ b/src/plugins_3rdparty/psipred/src/sspred_avpred.cpp
@@ -60,7 +60,12 @@ PsiPassOne::PsiPassOne(QTemporaryFile* matFile, const QStringList& weightFiles)
      activation = (float*) malloc(TOTAL*sizeof(float));
      bias = (float*) malloc(TOTAL*sizeof(float));
      weight = (float**) malloc(TOTAL*sizeof(float*));
-};
+
+     profile = (int **)malloc(MAXSEQLEN * sizeof(int *));
+     for (int i = 0; i < MAXSEQLEN; i++) {
+         profile[i] = (int *)malloc(20 * sizeof(int));
+     }
+}
 
 PsiPassOne::~PsiPassOne()
 {
@@ -71,7 +76,10 @@ PsiPassOne::~PsiPassOne()
     free(bias);
     free(weight);
 
-
+    for (int i = 0; i < MAXSEQLEN; i++) {
+        delete profile[i];
+    }
+    delete profile;
 }
 
 void PsiPassOne::compute_output(void)
diff --git a/src/plugins_3rdparty/psipred/src/sspred_avpred.h b/src/plugins_3rdparty/psipred/src/sspred_avpred.h
index 9dfe1e3..0f9c597 100644
--- a/src/plugins_3rdparty/psipred/src/sspred_avpred.h
+++ b/src/plugins_3rdparty/psipred/src/sspred_avpred.h
@@ -13,7 +13,7 @@ class QTemporaryFile;
 class PsiPassOne {
     int     *fwt_to, *lwt_to;
     float   *activation, *bias, **weight;
-    int     profile[MAXSEQLEN][20];
+    int     **profile;
     int     seqlen;
     QTemporaryFile* matrixFile;
     QByteArray seq;
diff --git a/src/plugins_3rdparty/ptools/CMakeLists.txt b/src/plugins_3rdparty/ptools/CMakeLists.txt
new file mode 100644
index 0000000..963c0d4
--- /dev/null
+++ b/src/plugins_3rdparty/ptools/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME ptools)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/sitecon/CMakeLists.txt b/src/plugins_3rdparty/sitecon/CMakeLists.txt
new file mode 100644
index 0000000..da37597
--- /dev/null
+++ b/src/plugins_3rdparty/sitecon/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME sitecon)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/sitecon/sitecon.pro b/src/plugins_3rdparty/sitecon/sitecon.pro
index d9c8733..54d9783 100644
--- a/src/plugins_3rdparty/sitecon/sitecon.pro
+++ b/src/plugins_3rdparty/sitecon/sitecon.pro
@@ -14,7 +14,7 @@ HEADERS += src/DIPropertiesSitecon.h \
            src/SiteconSearchTask.h \
            src/SiteconWorkers.h \
            src/SiteconQuery.h
-FORMS += src/ui/SiteconBuildDialog.ui src/ui/SiteconSearchDialog.ui
+FORMS += src/SiteconBuildDialog.ui src/SiteconSearchDialog.ui
 SOURCES += src/DIPropertiesSitecon.cpp \
            src/DIPropertiesTests.cpp \
            src/SiteconAlgorithm.cpp \
diff --git a/src/plugins_3rdparty/sitecon/src/ui/SiteconBuildDialog.ui b/src/plugins_3rdparty/sitecon/src/SiteconBuildDialog.ui
similarity index 100%
rename from src/plugins_3rdparty/sitecon/src/ui/SiteconBuildDialog.ui
rename to src/plugins_3rdparty/sitecon/src/SiteconBuildDialog.ui
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp b/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp
index 2d19b2d..4b4f6c5 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp
@@ -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/AppContext.h>
 #include <U2Core/Counter.h>
@@ -42,6 +36,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "SiteconBuildDialogController.h"
@@ -55,26 +50,26 @@
 namespace U2 {
 
 SiteconBuildDialogController::SiteconBuildDialogController(SiteconPlugin* pl, QWidget* w) 
-: QDialog(w), plug(pl)
-{
+    : QDialog(w),
+      plug(pl),
+      saveController(NULL) {
     task = NULL;
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467759");
+    new HelpButton(this, buttonBox, "17470692");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
    
     weightAlgCombo->setCurrentIndex(AppContext::getSettings()->getValue(SETTINGS_ROOT + WEIGHT_ALG, 1).toInt());
     calibrationSeqLenBox->setCurrentIndex(AppContext::getSettings()->getValue(SETTINGS_ROOT + CALIBRATION_LEN).toInt());
 
+    initSaveController();
+
     okButton = buttonBox->button(QDialogButtonBox::Ok);
     cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
     connect(inputButton, SIGNAL(clicked()), SLOT(sl_inFileButtonClicked()));
-    connect(outputButton, SIGNAL(clicked()), SLOT(sl_outFileButtonClicked()));
     connect(okButton, SIGNAL(clicked()), SLOT(sl_okButtonClicked()));
-
 }
 
-
 void SiteconBuildDialogController::sl_inFileButtonClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Select file with alignment"), lod,
@@ -85,15 +80,6 @@ void SiteconBuildDialogController::sl_inFileButtonClicked() {
     inputEdit->setText(QFileInfo(lod.url).absoluteFilePath());
 }
 
-void SiteconBuildDialogController::sl_outFileButtonClicked() {
-    LastUsedDirHelper lod(SiteconIO::SITECON_ID);
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Select file to save model to..."), lod, SiteconIO::getFileFilter(false));
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    outputEdit->setText(QFileInfo(lod.url).absoluteFilePath());
-}
-
 void SiteconBuildDialogController::sl_okButtonClicked() {
     if (task != NULL) {
         accept(); //go to background
@@ -116,7 +102,7 @@ void SiteconBuildDialogController::sl_okButtonClicked() {
        errMsg = tr("Illegal alignment file");
        inputEdit->setFocus();
    }
-   QString outFile = outputEdit->text();
+   QString outFile = saveController->getSaveFileName();
    if (outFile.isEmpty()) {
        errMsg = tr("Illegal SITECON model file");
        outputEdit->setFocus();
@@ -169,8 +155,23 @@ void SiteconBuildDialogController::sl_onProgressChanged() {
     statusLabel->setText(tr("Running... State :%1 Progress: %2").arg(task->getStateInfo().getDescription()).arg(task->getProgress()));
 }
 
+void SiteconBuildDialogController::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = SiteconIO::SITECON_ID;
+    config.defaultFormatId = SiteconIO::SITECON_ID;
+    config.fileDialogButton = outputButton;
+    config.fileNameEdit = outputEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file to save model to...");
+
+    SaveDocumentController::SimpleFormatsInfo formats;
+    formats.addFormat(SiteconIO::SITECON_ID, tr("Sitecon models"), QStringList(SiteconIO::SITECON_EXT));
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
 void SiteconBuildDialogController::reject() {
-    if (task!=NULL) {
+    if (task != NULL) {
         task->cancel();
     }
     QDialog::reject();
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.h b/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.h
index c966e6c..0509d8e 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.h
@@ -22,20 +22,18 @@
 #ifndef _U2_SITECON_BUILD_DIALOG_CONTROLLER_H_
 #define _U2_SITECON_BUILD_DIALOG_CONTROLLER_H_
 
-#include <ui/ui_SiteconBuildDialog.h>
+#include <QDialog>
+
+#include <ui_SiteconBuildDialog.h>
 #include "SiteconAlgorithm.h"
 #include <U2Core/Task.h>
 #include <U2Core/MAlignment.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
 
 namespace U2 {
 
 class LoadDocumentTask;
 class SiteconPlugin;
+class SaveDocumentController;
 
 class SiteconBuildDialogController : public QDialog, public Ui_SiteconBuildDialog {
     Q_OBJECT
@@ -48,17 +46,19 @@ public slots:
 
 private slots:
     void sl_inFileButtonClicked();
-    void sl_outFileButtonClicked();
     void sl_okButtonClicked();
 
     void sl_onStateChanged();
     void sl_onProgressChanged();
 
 private:
+    void initSaveController();
+
     Task* task;
     SiteconPlugin* plug;
     QPushButton* okButton;
     QPushButton* cancelButton;
+    SaveDocumentController *saveController;
 };
 
 class SiteconBuildTask : public Task {
diff --git a/src/plugins_3rdparty/sitecon/src/ui/SiteconSearchDialog.ui b/src/plugins_3rdparty/sitecon/src/SiteconSearchDialog.ui
similarity index 100%
rename from src/plugins_3rdparty/sitecon/src/ui/SiteconSearchDialog.ui
rename to src/plugins_3rdparty/sitecon/src/SiteconSearchDialog.ui
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.cpp b/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.cpp
index 4432ec1..84be062 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.cpp
@@ -86,7 +86,7 @@ public:
 
 SiteconSearchDialogController::SiteconSearchDialogController(ADVSequenceObjectContext* _ctx, QWidget *p):QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467755");
+    new HelpButton(this, buttonBox, "17470688");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.h b/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.h
index cb4f78d..dedacde 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.h
@@ -26,7 +26,7 @@
 #include <U2Core/U2Region.h>
 #include <U2Gui/RegionSelector.h>
 
-#include <ui/ui_SiteconSearchDialog.h>
+#include <ui_SiteconSearchDialog.h>
 
 #include <QtCore/QList>
 #if (QT_VERSION < 0x050000) //Qt 5
diff --git a/src/plugins_3rdparty/sitecon/transl/english.ts b/src/plugins_3rdparty/sitecon/transl/english.ts
index 76e63f6..ccbc97e 100644
--- a/src/plugins_3rdparty/sitecon/transl/english.ts
+++ b/src/plugins_3rdparty/sitecon/transl/english.ts
@@ -12,29 +12,29 @@
 <context>
     <name>SiteconBuildDialog</name>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="22"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="22"/>
         <source>Input alignment (nucleic)</source>
         <translation>Input alignment (nucleic)</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="32"/>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="49"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="32"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="49"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="39"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="39"/>
         <source>Output model</source>
         <translation>Output model</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="58"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="58"/>
         <source>Options</source>
         <translation>Options</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="64"/>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="95"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="64"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="95"/>
         <source>Window is used to pick out the most important alignment region and is located at the center of the alignment.
            Must be: windows size is not greater than TFBS alignment length,
            recommended: windows size is not greater than 50 bp.</source>
@@ -43,85 +43,85 @@
            recommended: windows size is not greater than 50 bp.</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="69"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="69"/>
         <source>Window size</source>
         <translation>Window size</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="103"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="103"/>
         <source>bp</source>
         <translation>bp</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="122"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="122"/>
         <source>Calibration random seed</source>
         <translation>Calibration random seed</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="173"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="173"/>
         <source>Calibration sequence length</source>
         <translation>Calibration sequence length</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="206"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="206"/>
         <source>       100 Kb</source>
         <translation>       100 Kb</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="211"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="211"/>
         <source>       500 Kb</source>
         <translation>       500 Kb</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="216"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="216"/>
         <source>         1 Mb</source>
         <translation>         1 Mb</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="221"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="221"/>
         <source>         5 Mb</source>
         <translation>         5 Mb</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="232"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="232"/>
         <source>Weight algorithm</source>
         <translation>Weight algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="290"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="290"/>
         <source>Default status</source>
         <translation>Default status</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="259"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="259"/>
         <source>       None</source>
         <translation>       None</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="264"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="264"/>
         <source>  Algorithm N2</source>
         <translation>  Algorithm N2</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="170"/>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="193"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="170"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="193"/>
         <source>Length of random synthetic sequences used to calibrate the profile. Should not be less than window size.</source>
         <translation>Length of random synthetic sequences used to calibrate the profile. Should not be less than window size.</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="14"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="14"/>
         <source>SITECON Build</source>
         <translation>SITECON Build</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="119"/>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="148"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="119"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="148"/>
         <source>The random seed, where <n> is a positive integer. You can use this option to generate reproducible results for different runs on the same data.</source>
         <translation>The random seed, where <n> is a positive integer. You can use this option to generate reproducible results for different runs on the same data.</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="229"/>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="252"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="229"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="252"/>
         <source>Optional feature, in most cases applying no weight will fit. In some cases choosing algorithm 2 will increase the recognition quality.</source>
         <translation>Optional feature, in most cases applying no weight will fit. In some cases choosing algorithm 2 will increase the recognition quality.</translation>
     </message>
@@ -129,98 +129,98 @@
 <context>
     <name>SiteconSearchDialog</name>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="14"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="14"/>
         <source>SITECON Search</source>
         <translation>SITECON Search</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="22"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="22"/>
         <source>File with model</source>
         <translation>File with model</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="36"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="36"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="46"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="46"/>
         <source>Threshold</source>
         <translation>Threshold</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="190"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="190"/>
         <source>Strands</source>
         <translation>Strands</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="196"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="196"/>
         <source>Both strands</source>
         <translation>Both strands</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="215"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="215"/>
         <source>Search in direct strand only</source>
         <translation>Search in direct strand only</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="218"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="218"/>
         <source>Direct strand</source>
         <translation>Direct strand</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="240"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="240"/>
         <source>Search in complement strand</source>
         <translation>Search in complement strand</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="243"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="243"/>
         <source>Complement strand</source>
         <translation>Complement strand</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="106"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="106"/>
         <source>Range</source>
         <translation>Range</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="111"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="111"/>
         <source>Strand</source>
         <translation>Strand</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="116"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="116"/>
         <source>PSUM</source>
         <translation>PSUM</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="121"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="121"/>
         <source>First type error</source>
         <translation>First type error</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="126"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="126"/>
         <source>Second type error</source>
         <translation>Second type error</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="70"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="70"/>
         <source>Clear results</source>
         <translation>Clear results</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="77"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="77"/>
         <source>Save as annotations</source>
         <translation>Save as annotations</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="136"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="136"/>
         <source>Ready</source>
         <translation>Ready</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="43"/>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="59"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="43"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="59"/>
         <source>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.</source>
         <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>
@@ -679,74 +679,79 @@
 <context>
     <name>U2::SiteconBuildDialogController</name>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="63"/>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="162"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="59"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="148"/>
         <source>Build</source>
         <translation>Build</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="64"/>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="143"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="60"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="129"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="116"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="102"/>
         <source>Illegal alignment file</source>
         <translation>Illegal alignment file</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="121"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="107"/>
         <source>Illegal SITECON model file</source>
         <translation>Illegal SITECON model file</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="127"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="113"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="139"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="125"/>
         <source>Starting calibration process</source>
         <translation>Starting calibration process</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="142"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="128"/>
         <source>Hide</source>
         <translation>Hide</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="156"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="142"/>
         <source>Build finished with error: %1</source>
         <translation>Build finished with error: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="158"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="144"/>
         <source>Build canceled</source>
         <translation>Build canceled</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="160"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="146"/>
         <source>Build finished successfully</source>
         <translation>Build finished successfully</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="163"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="149"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="169"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="155"/>
         <source>Running... State :%1 Progress: %2</source>
         <translation>Running... State :%1 Progress: %2</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="80"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="168"/>
+        <source>Sitecon models</source>
+        <translation type="unfinished">Sitecon models</translation>
+    </message>
+    <message>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="75"/>
         <source>Select file with alignment</source>
         <translation>Select file with alignment</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="90"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="165"/>
         <source>Select file to save model to...</source>
         <translation>Select file to save model to...</translation>
     </message>
@@ -754,52 +759,52 @@
 <context>
     <name>U2::SiteconBuildTask</name>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="184"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="185"/>
         <source>Build SITECON model</source>
         <translation>Build SITECON model</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="194"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="195"/>
         <source>Alignment contains gaps</source>
         <translation>Alignment contains gaps</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="198"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="199"/>
         <source>Alignment is empty</source>
         <translation>Alignment is empty</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="202"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="203"/>
         <source>Alignment must have at least 2 sequences</source>
         <translation>Alignment must have at least 2 sequences</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="206"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="207"/>
         <source>Alignment is not nucleic</source>
         <translation>Alignment is not nucleic</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="210"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="211"/>
         <source>Window size is greater than alignment length</source>
         <translation>Window size is greater than alignment length</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="224"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="225"/>
         <source>Calculating average and dispersion matrixes</source>
         <translation>Calculating average and dispersion matrixes</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="229"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="230"/>
         <source>Calculating weights</source>
         <translation>Calculating weights</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="235"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="236"/>
         <source>Calibrating first type error</source>
         <translation>Calibrating first type error</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="241"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="242"/>
         <source>Calibrating second type error</source>
         <translation>Calibrating second type error</translation>
     </message>
@@ -807,22 +812,22 @@
 <context>
     <name>U2::SiteconBuildToFileTask</name>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="249"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="250"/>
         <source>Build SITECON model to file</source>
         <translation>Build SITECON model to file</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="260"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="261"/>
         <source>Unknown alignment format</source>
         <translation>Unknown alignment format</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="268"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="269"/>
         <source>Loading alignment</source>
         <translation>Loading alignment</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="287"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="288"/>
         <source>No alignment found</source>
         <translation>No alignment found</translation>
     </message>
diff --git a/src/plugins_3rdparty/sitecon/transl/russian.ts b/src/plugins_3rdparty/sitecon/transl/russian.ts
index 2f4f752..bc02a13 100644
--- a/src/plugins_3rdparty/sitecon/transl/russian.ts
+++ b/src/plugins_3rdparty/sitecon/transl/russian.ts
@@ -12,114 +12,114 @@
 <context>
     <name>SiteconBuildDialog</name>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="22"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="22"/>
         <source>Input alignment (nucleic)</source>
         <translation>Входное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="32"/>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="49"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="32"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="49"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="39"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="39"/>
         <source>Output model</source>
         <translation>Результирующая модель</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="58"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="58"/>
         <source>Options</source>
         <translation>Настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="64"/>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="95"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="64"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="95"/>
         <source>Window is used to pick out the most important alignment region and is located at the center of the alignment.
            Must be: windows size is not greater than TFBS alignment length,
            recommended: windows size is not greater than 50 bp.</source>
         <translation>Размер окна должен быть не короче консенсуса для данного сайта но не более длины выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="69"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="69"/>
         <source>Window size</source>
         <translation>Размер окна</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="103"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="103"/>
         <source>bp</source>
         <translation>нукл</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="122"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="122"/>
         <source>Calibration random seed</source>
         <translation>Случайная затравка</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="173"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="173"/>
         <source>Calibration sequence length</source>
         <translation>Длина калибровочной последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="206"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="206"/>
         <source>       100 Kb</source>
         <translation>       100 Кб</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="211"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="211"/>
         <source>       500 Kb</source>
         <translation>       500 Кб</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="216"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="216"/>
         <source>         1 Mb</source>
         <translation>         1 Мб</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="221"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="221"/>
         <source>         5 Mb</source>
         <translation>         5 Мб</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="232"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="232"/>
         <source>Weight algorithm</source>
         <translation>Алгоритм весов</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="290"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="290"/>
         <source>Default status</source>
         <translation>Статус по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="259"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="259"/>
         <source>       None</source>
         <translation>Без весов</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="264"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="264"/>
         <source>  Algorithm N2</source>
         <translation>Алгоритм №2</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="170"/>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="193"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="170"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="193"/>
         <source>Length of random synthetic sequences used to calibrate the profile. Should not be less than window size.</source>
         <translation>Длина случайных синтетических последовательностей для калибрации профайла. Не должна быть меньше размера окна.</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="119"/>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="148"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="119"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="148"/>
         <source>The random seed, where <n> is a positive integer. You can use this option to generate reproducible results for different runs on the same data.</source>
         <translation>Случайная затравка. Использование этого параметра полезно для воспроизведения результата калибрации.</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="14"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="14"/>
         <source>SITECON Build</source>
         <translation>Построение модели SITECON</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="229"/>
-        <location filename="../src/ui/SiteconBuildDialog.ui" line="252"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="229"/>
+        <location filename="../src/SiteconBuildDialog.ui" line="252"/>
         <source>Optional feature, in most cases applying no weight will fit. In some cases choosing algorithm 2 will increase the recognition quality.</source>
         <translation>В большинстве случаев алгоритм без весов вполне адекватен. Использование других алгоритмов может улучшить качество распознавания в отдельных случаях.</translation>
     </message>
@@ -127,98 +127,98 @@
 <context>
     <name>SiteconSearchDialog</name>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="14"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="14"/>
         <source>SITECON Search</source>
         <translation>Поиск сайтов связывания ТФ с помощью SITECON</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="22"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="22"/>
         <source>File with model</source>
         <translation>Модель</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="36"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="36"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="46"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="46"/>
         <source>Threshold</source>
         <translation>Минимальная ошибка</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="190"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="190"/>
         <source>Strands</source>
         <translation>Направление</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="196"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="196"/>
         <source>Both strands</source>
         <translation>Все</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="215"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="215"/>
         <source>Search in direct strand only</source>
         <translation>Искать ССТФ только в прямой последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="218"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="218"/>
         <source>Direct strand</source>
         <translation>Только прямые</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="240"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="240"/>
         <source>Search in complement strand</source>
         <translation>Искать ССТФ только в комплeментарной последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="243"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="243"/>
         <source>Complement strand</source>
         <translation>Только комплeментарные</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="106"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="106"/>
         <source>Range</source>
         <translation>Регион</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="111"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="111"/>
         <source>Strand</source>
         <translation>Стренд</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="116"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="116"/>
         <source>PSUM</source>
         <translation>Оценка</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="121"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="121"/>
         <source>First type error</source>
         <translation>Ошибка 1-го рода</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="126"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="126"/>
         <source>Second type error</source>
         <translation>Ошибка 2-го рода</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="70"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="70"/>
         <source>Clear results</source>
         <translation>Сбросить результаты</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="77"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="77"/>
         <source>Save as annotations</source>
         <translation>Сохранить результаты</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="136"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="136"/>
         <source>Ready</source>
         <translation>Готово</translation>
     </message>
     <message>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="43"/>
-        <location filename="../src/ui/SiteconSearchDialog.ui" line="59"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="43"/>
+        <location filename="../src/SiteconSearchDialog.ui" line="59"/>
         <source>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.</source>
         <translation>Нижний предел качества распознавания, величина более 60% но меньше 100%. Слишком низкий предел приведёт к нахождению большого числа ложных сигналов, чрезмерно высокий отбросит качественные результаты.</translation>
     </message>
@@ -681,74 +681,79 @@
 <context>
     <name>U2::SiteconBuildDialogController</name>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="63"/>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="162"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="59"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="148"/>
         <source>Build</source>
         <translation>Построить</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="64"/>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="143"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="60"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="129"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="116"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="102"/>
         <source>Illegal alignment file</source>
         <translation>Укажите входной файл выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="121"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="107"/>
         <source>Illegal SITECON model file</source>
         <translation>Укажите файл результирующей модели</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="127"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="113"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="139"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="125"/>
         <source>Starting calibration process</source>
         <translation>Начинается построение</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="142"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="128"/>
         <source>Hide</source>
         <translation>Скрыть</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="156"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="142"/>
         <source>Build finished with error: %1</source>
         <translation>Построение завершено с ошибкой: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="158"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="144"/>
         <source>Build canceled</source>
         <translation>Построение отменено</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="160"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="146"/>
         <source>Build finished successfully</source>
         <translation>Построение успешно завершено</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="163"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="149"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="169"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="155"/>
         <source>Running... State :%1 Progress: %2</source>
         <translation>Прогресс %2%: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="80"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="168"/>
+        <source>Sitecon models</source>
+        <translation type="unfinished">Профайлы SITECON</translation>
+    </message>
+    <message>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="75"/>
         <source>Select file with alignment</source>
         <translation>Выбор выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="90"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="165"/>
         <source>Select file to save model to...</source>
         <translation>Выбор файла для сохранения профайла...</translation>
     </message>
@@ -756,52 +761,52 @@
 <context>
     <name>U2::SiteconBuildTask</name>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="184"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="185"/>
         <source>Build SITECON model</source>
         <translation>Построить SITECON</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="194"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="195"/>
         <source>Alignment contains gaps</source>
         <translation>Выравнивание содержит пробелы</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="198"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="199"/>
         <source>Alignment is empty</source>
         <translation>Выравнивание не содержит данных</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="202"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="203"/>
         <source>Alignment must have at least 2 sequences</source>
         <translation>Выравнивание должно содержать минимум 2 последовательности</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="206"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="207"/>
         <source>Alignment is not nucleic</source>
         <translation>Поддерживаются только нуклеотидные выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="210"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="211"/>
         <source>Window size is greater than alignment length</source>
         <translation>Размер окна больше длины последовательности</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="224"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="225"/>
         <source>Calculating average and dispersion matrixes</source>
         <translation>Расчёт матрицы средних и дисперсии</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="229"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="230"/>
         <source>Calculating weights</source>
         <translation>Расчёт весов</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="235"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="236"/>
         <source>Calibrating first type error</source>
         <translation>Расчёт ошибки ошибки 1-го рода</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="241"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="242"/>
         <source>Calibrating second type error</source>
         <translation>Расчёт ошибки ошибки 2-го рода</translation>
     </message>
@@ -809,22 +814,22 @@
 <context>
     <name>U2::SiteconBuildToFileTask</name>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="249"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="250"/>
         <source>Build SITECON model to file</source>
         <translation>Построить SITECON</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="260"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="261"/>
         <source>Unknown alignment format</source>
         <translation>Неверный формат файла</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="268"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="269"/>
         <source>Loading alignment</source>
         <translation>Загрузка выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildDialogController.cpp" line="287"/>
+        <location filename="../src/SiteconBuildDialogController.cpp" line="288"/>
         <source>No alignment found</source>
         <translation>Выравнивание не найдено</translation>
     </message>
diff --git a/src/plugins_3rdparty/umuscle/CMakeLists.txt b/src/plugins_3rdparty/umuscle/CMakeLists.txt
new file mode 100644
index 0000000..01ec4d2
--- /dev/null
+++ b/src/plugins_3rdparty/umuscle/CMakeLists.txt
@@ -0,0 +1,6 @@
+set(UGENE_PLUGIN_NAME umuscle)
+
+# TODO: this are the real UGENE bugs -> fix them
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-conversion-null")
+
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/umuscle/src/ui/MuscleAlignDialog.ui b/src/plugins_3rdparty/umuscle/src/MuscleAlignDialog.ui
similarity index 100%
rename from src/plugins_3rdparty/umuscle/src/ui/MuscleAlignDialog.ui
rename to src/plugins_3rdparty/umuscle/src/MuscleAlignDialog.ui
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp b/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp
index f6bb13b..9dfe8a8 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp
@@ -19,18 +19,12 @@
  * 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/BaseDocumentFormats.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNATranslation.h>
 #include <U2Core/DocumentUtils.h>
@@ -38,19 +32,18 @@
 
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "MuscleAlignDialogController.h"
 
-/* TRANSLATOR U2::MuscleAlignDialogController */    
-
 namespace U2 {
 
 MuscleAlignDialogController::MuscleAlignDialogController(QWidget* w, const MAlignment& _ma, MuscleTaskSettings& _settings) 
     : QDialog(w), ma(_ma), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467770");
+    new HelpButton(this, buttonBox, "17470703");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -135,17 +128,19 @@ void MuscleAlignDialogController::sl_onPresetChanged(int newPreset) {
 ////////////////////////////////////////
 //MuscleAlignWithExtFileSpecifyDialogController
 MuscleAlignWithExtFileSpecifyDialogController::MuscleAlignWithExtFileSpecifyDialogController(QWidget* w, MuscleTaskSettings& _settings)
-: QDialog(w), settings(_settings)
+    : QDialog(w),
+      settings(_settings),
+      saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467769");
+    new HelpButton(this, buttonBox, "17470702");
+
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
-    //this->adjustSize();
-    //add input and output files 
+
+    initSaveController();
 
     connect(inputFilePathButton, SIGNAL(clicked()), SLOT(sl_inputPathButtonClicked()));
-    connect(outputFilePathButton, SIGNAL(clicked()), SLOT(sl_outputPathButtonClicked()));
 
     //we don`t know length of MA, need check this at task
     rangeStartSB->setValue(0);
@@ -154,16 +149,17 @@ MuscleAlignWithExtFileSpecifyDialogController::MuscleAlignWithExtFileSpecifyDial
     connect(confBox, SIGNAL(currentIndexChanged(int)), SLOT(sl_onPresetChanged(int)));
     initPresets();
     foreach(const MuscleAlignPreset* p, presets.qlist) {
-    confBox->addItem(p->name);
+        confBox->addItem(p->name);
     }
     const DNAAlphabet* al = AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
     DNATranslationRegistry* tr = AppContext::getDNATranslationRegistry();
     QList<DNATranslation*> aminoTs = tr->lookupTranslation(al, DNATranslationType_NUCL_2_AMINO);
     assert(!aminoTs.empty());
     foreach(DNATranslation* t, aminoTs) {
-    translationTableBox->addItem(t->getTranslationName());
+        translationTableBox->addItem(t->getTranslationName());
     }
 }
+
 void MuscleAlignWithExtFileSpecifyDialogController::sl_inputPathButtonClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Open an alignment file"), lod.dir,
@@ -174,19 +170,18 @@ void MuscleAlignWithExtFileSpecifyDialogController::sl_inputPathButtonClicked()
     inputFileLineEdit->setText(lod.url);
 }
 
-void MuscleAlignWithExtFileSpecifyDialogController::sl_outputPathButtonClicked() {
-    LastUsedDirHelper lod;
-    lod.url = U2FileDialog::getSaveFileName(this, tr("Save an multiple alignment file"), lod.dir);
-    if (lod.url.isEmpty()) {
-        return;
-    }
-    outputFileLineEdit->setText(lod.url);
-    buildMultipleAlignmentUrl(lod.url);
-}
+void MuscleAlignWithExtFileSpecifyDialogController::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
+    config.fileDialogButton = outputFilePathButton;
+    config.fileNameEdit = outputFileLineEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save an multiple alignment file");
+    config.rollOutProjectUrls = true;
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::CLUSTAL_ALN;
 
-void MuscleAlignWithExtFileSpecifyDialogController::buildMultipleAlignmentUrl(const GUrl &alnUrl) {
-    GUrl url = GUrlUtils::rollFileName(alnUrl.dirPath() + "/" + alnUrl.baseFileName()+ ".aln", DocumentUtils::getNewDocFileNameExcludesHint());
-    outputFileLineEdit->setText(url.getURLString());
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
 void MuscleAlignWithExtFileSpecifyDialogController::accept() {
@@ -230,16 +225,16 @@ void MuscleAlignWithExtFileSpecifyDialogController::accept() {
     }
     if(inputFileLineEdit->text().isEmpty()){
         QMessageBox::information(this, tr("Kalign with Align"),
-            tr("Input file is not set!") );
-        }else if(outputFileLineEdit->text().isEmpty()){
-            QMessageBox::information(this, tr("Kalign with Align"),
-                tr("Output file is not set!") );
-        }
-        else{
-            settings.outputFilePath=outputFileLineEdit->text();
-            settings.inputFilePath=inputFileLineEdit->text();
-            QDialog::accept();
-            }
+                                 tr("Input file is not set!") );
+    }else if(saveController->getSaveFileName().isEmpty()){
+        QMessageBox::information(this, tr("Kalign with Align"),
+                                 tr("Output file is not set!") );
+    }
+    else{
+        settings.outputFilePath = saveController->getSaveFileName();
+        settings.inputFilePath = inputFileLineEdit->text();
+        QDialog::accept();
+    }
 }
 
 void MuscleAlignWithExtFileSpecifyDialogController::sl_onPresetChanged(int newPreset) {//???
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.h b/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.h
index 1f1a40a..1013ccc 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.h
+++ b/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.h
@@ -22,19 +22,18 @@
 #ifndef _U2_MUSCLE_ALIGN_DIALOG_CONTROLLER_H_
 #define _U2_MUSCLE_ALIGN_DIALOG_CONTROLLER_H_
 
-#include "MuscleTask.h"
+#include <QDialog>
 
 #include <U2Core/GAutoDeleteList.h>
-#include <ui/ui_MuscleAlignDialog.h>
+#include <ui_MuscleAlignDialog.h>
 #include <U2Gui/DialogUtils.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+
+#include "MuscleTask.h"
 
 namespace U2 {
 
+class SaveDocumentController;
+
 class MuscleAlignPreset {
 public:
     virtual ~MuscleAlignPreset(){}
@@ -107,13 +106,14 @@ public slots:
 private slots:
     void sl_onPresetChanged(int current);
     void sl_inputPathButtonClicked();
-    void sl_outputPathButtonClicked();
+
 private:
     void initPresets();
+    void initSaveController();
+
     MuscleTaskSettings&                 settings;
     GAutoDeleteList<MuscleAlignPreset>  presets;
-    void buildMultipleAlignmentUrl(const GUrl &alnUrl);
-
+    SaveDocumentController *            saveController;
 };
 
 
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp b/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp
index 810ed47..6ba49ed 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp
@@ -58,7 +58,9 @@ MuscleParallelTask::MuscleParallelTask(const MAlignment& ma, MAlignment& res, co
     prepareTask->setSubtaskProgressWeight(0);
     addSubTask(prepareTask);
 
-    addTaskResource(TaskResourceUsage(RESOURCE_MEMORY, estimateMemoryUsageInMb(ma), true));
+    TaskResourceUsage resourseUsage(RESOURCE_MEMORY, estimateMemoryUsageInMb(ma), true);
+    resourseUsage.errorMessage = tr("There is not enough memory to align these sequences with MUSCLE.");
+    addTaskResource(resourseUsage);
 }
 
 int MuscleParallelTask::estimateMemoryUsageInMb(const MAlignment& ma) {
diff --git a/src/plugins_3rdparty/umuscle/src/MusclePlugin.cpp b/src/plugins_3rdparty/umuscle/src/MusclePlugin.cpp
index 1ea13bc..167307d 100644
--- a/src/plugins_3rdparty/umuscle/src/MusclePlugin.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MusclePlugin.cpp
@@ -234,7 +234,7 @@ void MuscleMSAEditorContext::sl_alignSequencesToProfile() {
 
     LastUsedDirHelper lod;
 #ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         lod.url = U2FileDialog::getOpenFileName(NULL, tr("Select file with sequences"), lod, filter, 0, QFileDialog::DontUseNativeDialog );
     } else
 #endif
@@ -262,7 +262,7 @@ void MuscleMSAEditorContext::sl_alignProfileToProfile() {
 
     LastUsedDirHelper lod;
 #ifdef Q_OS_MAC
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    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 );
     } else
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp b/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp
index 2c6f0e2..22a214d 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp
@@ -72,7 +72,7 @@ void MuscleTaskSettings::reset() {
 }
 
 MuscleTask::MuscleTask(const MAlignment& ma, const MuscleTaskSettings& _config)
-:Task(tr("MUSCLE alignment"), TaskFlags_FOSCOE), config(_config), inputMA(ma)
+:Task(tr("MUSCLE alignment"), TaskFlags_FOSCOE | TaskFlag_MinimizeSubtaskErrorText), config(_config), inputMA(ma)
 {
     GCOUNTER( cvar, tvar, "MuscleTask" );
     config.nThreads = (config.nThreads == 0) ? AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount():config.nThreads;
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp b/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp
index 2d244a1..6a5630e 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp
@@ -28,10 +28,10 @@ namespace U2 {
 
     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),
-        treeNodeStatus(NULL), treeNodeIndexes(NULL), nThreads(_nThreads), uJoin(0), ptrbOscillating(false), bAnyAccepted(false), InternalNodeIndexes(NULL), uInternalNodeCount(0),
+        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)
     {
-            refineConstructot();
+        refineConstructor();
     }
     MuscleWorkPool::~MuscleWorkPool() {
         delete[] Weights;
@@ -92,7 +92,7 @@ namespace U2 {
     ////////////////////////////
     // Refine
     ////////////////////////////
-    void MuscleWorkPool::refineConstructot() {
+    void MuscleWorkPool::refineConstructor() {
         refineTI = NULL;
         uRangeCount = 1;
         uRangeIndex = 0;
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.h b/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.h
index d8b046d..bbf0a2a 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.h
+++ b/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.h
@@ -76,7 +76,7 @@ namespace U2 {
         ////////////////////////////
         // Refine
         ////////////////////////////
-        void refineConstructot();
+        void refineConstructor();
         void refineClear();
         void reset();
 
diff --git a/src/plugins_3rdparty/umuscle/src/muscle/diffpaths.cpp b/src/plugins_3rdparty/umuscle/src/muscle/diffpaths.cpp
index 29892c1..d1c583d 100644
--- a/src/plugins_3rdparty/umuscle/src/muscle/diffpaths.cpp
+++ b/src/plugins_3rdparty/umuscle/src/muscle/diffpaths.cpp
@@ -1,8 +1,16 @@
 #include "muscle.h"
+#include "muscle_context.h"
 #include "pwpath.h"
 
 #define TRACE	0
 
+inline void setEdgeIndex(unsigned Edges[], unsigned uDiffCount, unsigned uEdgeIndex) {
+    if (uDiffCount >= EDGE_ARRAY_SIZE) {
+        return;
+    }
+    Edges[uDiffCount] = uEdgeIndex;
+}
+
 void DiffPaths(const PWPath &p1, const PWPath &p2, unsigned Edges1[],
   unsigned *ptruDiffCount1, unsigned Edges2[], unsigned *ptruDiffCount2)
 	{
@@ -39,8 +47,8 @@ void DiffPaths(const PWPath &p1, const PWPath &p2, unsigned Edges1[],
 			{
 			if (!Edge1->Equal(*Edge2))
 				{
-				Edges1[uDiffCount1++] = uEdgeIndex1;
-				Edges2[uDiffCount2++] = uEdgeIndex2;
+				setEdgeIndex(Edges1, uDiffCount1++, uEdgeIndex1);
+				setEdgeIndex(Edges2, uDiffCount2++, uEdgeIndex2);
 				}
 			++uEdgeIndex1;
 			++uEdgeIndex2;
@@ -48,22 +56,22 @@ void DiffPaths(const PWPath &p1, const PWPath &p2, unsigned Edges1[],
 
 		else if (Edge2->uPrefixLengthA < Edge1->uPrefixLengthA ||
 		  Edge2->uPrefixLengthB < Edge1->uPrefixLengthB)
-			Edges2[uDiffCount2++] = uEdgeIndex2++;
+			setEdgeIndex(Edges2, uDiffCount2++, uEdgeIndex2++);
 
 		else if (Edge1->uPrefixLengthA < Edge2->uPrefixLengthA ||
 		  Edge1->uPrefixLengthB < Edge2->uPrefixLengthB)
-			Edges1[uDiffCount1++] = uEdgeIndex1++;
+			setEdgeIndex(Edges1, uDiffCount1++, uEdgeIndex1++);
 
 		if (uEdgeCount1 == uEdgeIndex1)
 			{
 			while (uEdgeIndex2 < uEdgeCount2)
-				Edges2[uDiffCount2++] = uEdgeIndex2++;
+				setEdgeIndex(Edges2, uDiffCount2++, uEdgeIndex2++);
 			goto Done;
 			}
 		if (uEdgeCount2 == uEdgeIndex2)
 			{
 			while (uEdgeIndex1 < uEdgeCount1)
-				Edges1[uDiffCount1++] = uEdgeIndex1++;
+				setEdgeIndex(Edges1, uDiffCount1++, uEdgeIndex1++);
 			goto Done;
 			}
 		if (uEdgeIndex1 == uEdgeIndexTop1 && uEdgeIndex2 == uEdgeIndexTop2)
diff --git a/src/plugins_3rdparty/umuscle/src/muscle/mhack.cpp b/src/plugins_3rdparty/umuscle/src/muscle/mhack.cpp
index ff6137f..0c157b5 100644
--- a/src/plugins_3rdparty/umuscle/src/muscle/mhack.cpp
+++ b/src/plugins_3rdparty/umuscle/src/muscle/mhack.cpp
@@ -32,8 +32,10 @@ void MHackStart(SeqVect &v)
 			{
 			M[uId] = true;
 			s[0] = 'X';
-			}
-		}
+			}else{
+            M[uId] = false;
+            }
+		} 
 	}
 
 void MHackEnd(MSA &msa)
diff --git a/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.h b/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.h
index 7fadab9..1fa7211 100644
--- a/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.h
+++ b/src/plugins_3rdparty/umuscle/src/muscle/muscle_context.h
@@ -6,6 +6,8 @@
 #include <time.h>
 #include <QVector>
 
+#define EDGE_ARRAY_SIZE 10000
+
 class MuscleException {
 public:
     MuscleException();
@@ -469,8 +471,8 @@ public:
     struct refinehoriz_struct {
         unsigned g_uRefineHeightSubtree;
         unsigned g_uRefineHeightSubtreeTotal;
-        unsigned Edges1[10000];
-        unsigned Edges2[10000];
+        unsigned Edges1[EDGE_ARRAY_SIZE];
+        unsigned Edges2[EDGE_ARRAY_SIZE];
     } refinehoriz;
 
     //spfast.cpp
diff --git a/src/plugins_3rdparty/umuscle/transl/english.ts b/src/plugins_3rdparty/umuscle/transl/english.ts
index a90ce03..e16edd1 100644
--- a/src/plugins_3rdparty/umuscle/transl/english.ts
+++ b/src/plugins_3rdparty/umuscle/transl/english.ts
@@ -4,88 +4,88 @@
 <context>
     <name>MuscleAlignmentDialog</name>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="20"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="20"/>
         <source>Align with MUSCLE</source>
         <translation>Align with MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="36"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="36"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="46"/>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="63"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="46"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="63"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="53"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="53"/>
         <source>Output file</source>
         <translation>Output file</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="83"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="83"/>
         <source>Mode</source>
         <translation>Mode</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="95"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="95"/>
         <source>Mode details:</source>
         <translation>Mode details:</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="115"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="115"/>
         <source>Advanced options</source>
         <translation>Advanced options</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="138"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="138"/>
         <source>Max iterations</source>
         <translation>Max iterations</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="181"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="181"/>
         <source>Max time (minutes)</source>
         <translation>Max time (minutes)</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="225"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="225"/>
         <source>Translating alignment to amino allows to avoid errors of inserting gaps within codon boundaries.</source>
         <translation>Translating alignment to amino allows to avoid errors of inserting gaps within codon boundaries.</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="228"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="228"/>
         <source>Translate to amino when aligning</source>
         <translation>Translate to amino when aligning</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="240"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="240"/>
         <source>Translation table:</source>
         <translation>Translation table:</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="261"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="261"/>
         <source>Region to align</source>
         <translation>Region to align</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="351"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="351"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="269"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="269"/>
         <source>Whole alignment</source>
         <translation>Whole alignment</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="284"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="284"/>
         <source>Column range</source>
         <translation>Column range</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="123"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="123"/>
         <source>Do not re-arrange sequences (-stable)</source>
         <translation>Do not re-arrange sequences (-stable)</translation>
     </message>
@@ -325,17 +325,22 @@
         <translation>MUSCLE align '%2' by profile '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="303"/>
+        <location filename="../src/MuscleTask.cpp" line="271"/>
+        <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"/>
         <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="324"/>
+        <location filename="../src/MuscleTask.cpp" line="325"/>
         <source>No sequences found in file %1</source>
         <translation>No sequences found in file %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="326"/>
+        <location filename="../src/MuscleTask.cpp" line="327"/>
         <source>No alignment found in file %1</source>
         <translation>No alignment found in file %1</translation>
     </message>
@@ -343,67 +348,67 @@
 <context>
     <name>U2::MuscleAlignDialogController</name>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="110"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="103"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="110"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="103"/>
         <source>Illegal alignment region</source>
         <translation>Illegal alignment region</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="54"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="47"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="55"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="48"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="259"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="254"/>
         <source>MUSCLE default</source>
         <translation>MUSCLE default</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="260"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="255"/>
         <source><p>The default settings are designed to give the best accuracy</source>
         <translation><p>The default settings are designed to give the best accuracy</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="261"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="256"/>
         <source><p><b>Command line:</b> muscle <no-parameters></source>
         <translation><p><b>Command line:</b> muscle <no-parameters></translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="265"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="260"/>
         <source>Large alignment</source>
         <translation>Large alignment</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="266"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="261"/>
         <source><p>If you have a large number of sequences (a few thousand), or they are very long, then the default settings may be too slow for practical use. A good compromise between speed and accuracy is to run just the first two iterations of the algorithm</source>
         <translation><p>If you have a large number of sequences (a few thousand), or they are very long, then the default settings may be too slow for practical use. A good compromise between speed and accuracy is to run just the first two iterations of the algorithm</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="267"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="262"/>
         <source><p><b>Command line:</b> muscle <i>-maxiters 2</i></source>
         <translation><p><b>Command line:</b> muscle <i>-maxiters 2</i></translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="271"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="266"/>
         <source>Refine only</source>
         <translation>Refine only</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="272"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="267"/>
         <source><p>Improves existing alignment without complete realignment</source>
         <translation><p>Improves existing alignment without complete realignment</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="273"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="268"/>
         <source><p><b>Command line:</b> muscle <i>-refine</i></source>
         <translation><p><b>Command line:</b> muscle <i>-refine</i></translation>
     </message>
@@ -411,17 +416,17 @@
 <context>
     <name>U2::MuscleAlignWithExtFileSpecifyDialogController</name>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="142"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="138"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="143"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="139"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="169"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="165"/>
         <source>Open an alignment file</source>
         <translation>Open an alignment file</translation>
     </message>
@@ -431,28 +436,28 @@
         <translation>Save an multiple alignment file</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="215"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="210"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="215"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="210"/>
         <source>Illegal alignment region</source>
         <translation>Illegal alignment region</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="232"/>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="235"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="227"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="230"/>
         <source>Kalign with Align</source>
         <translation>Align with Kalign</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="233"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="228"/>
         <source>Input file is not set!</source>
         <translation>Input file is not set!</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="236"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="231"/>
         <source>Output file is not set!</source>
         <translation>Output file is not set!</translation>
     </message>
@@ -460,17 +465,17 @@
 <context>
     <name>U2::MuscleGObjectRunFromSchemaTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="598"/>
+        <location filename="../src/MuscleTask.cpp" line="597"/>
         <source>Workflow wrapper '%1'</source>
         <translation>Workflow wrapper '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="611"/>
+        <location filename="../src/MuscleTask.cpp" line="610"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE align '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="614"/>
+        <location filename="../src/MuscleTask.cpp" line="613"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE refine '%1'</translation>
     </message>
@@ -478,32 +483,27 @@
 <context>
     <name>U2::MuscleGObjectTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="356"/>
+        <location filename="../src/MuscleTask.cpp" line="357"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE align '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="359"/>
+        <location filename="../src/MuscleTask.cpp" line="360"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE refine '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="362"/>
+        <location filename="../src/MuscleTask.cpp" line="363"/>
         <source>MUSCLE add to profile '%1'</source>
         <translation>MUSCLE add to profile '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="365"/>
+        <location filename="../src/MuscleTask.cpp" line="366"/>
         <source>MUSCLE align profiles</source>
         <translation>MUSCLE align profiles</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="397"/>
-        <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="413"/>
+        <location filename="../src/MuscleTask.cpp" line="412"/>
         <source>MAlignment object has been changed</source>
         <translation>MAlignment object has been changed</translation>
     </message>
@@ -545,6 +545,11 @@
         <source>MuscleParallelTask</source>
         <translation>MuscleParallelTask</translation>
     </message>
+    <message>
+        <location filename="../src/MuscleParallel.cpp" line="62"/>
+        <source>There is not enough memory to align these sequences with MUSCLE.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::MusclePlugin</name>
@@ -567,27 +572,27 @@
 <context>
     <name>U2::MusclePrepareTask</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="110"/>
+        <location filename="../src/MuscleParallel.cpp" line="112"/>
         <source>Preparing MUSCLE alignment...</source>
         <translation>Preparing MUSCLE alignment...</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="118"/>
+        <location filename="../src/MuscleParallel.cpp" line="120"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Internal parallel MUSCLE error: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="127"/>
+        <location filename="../src/MuscleParallel.cpp" line="129"/>
         <source>MUSCLE prepared successfully</source>
         <translation>MUSCLE prepared successfully</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="164"/>
+        <location filename="../src/MuscleParallel.cpp" line="166"/>
         <source>No sequences in input file</source>
         <translation>No sequences in input file</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="193"/>
+        <location filename="../src/MuscleParallel.cpp" line="195"/>
         <source>Alignment is empty</source>
         <translation>Alignment is empty</translation>
     </message>
@@ -633,17 +638,17 @@
 <context>
     <name>U2::ProgressiveAlignTask</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="305"/>
+        <location filename="../src/MuscleParallel.cpp" line="307"/>
         <source>ProgressiveAlignTask</source>
         <translation>ProgressiveAlignTask</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="327"/>
+        <location filename="../src/MuscleParallel.cpp" line="329"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Internal parallel MUSCLE error: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="337"/>
+        <location filename="../src/MuscleParallel.cpp" line="339"/>
         <source>alignment "%1" Parallel MUSCLE Iter 1 accomplished. Time elapsed %2 ms</source>
         <translation>alignment "%1" Parallel MUSCLE Iter 1 accomplished. Time elapsed %2 ms</translation>
     </message>
@@ -651,12 +656,12 @@
 <context>
     <name>U2::ProgressiveAlignWorker</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="388"/>
+        <location filename="../src/MuscleParallel.cpp" line="390"/>
         <source>ProgressiveAlignWorker</source>
         <translation>ProgressiveAlignWorker</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="402"/>
+        <location filename="../src/MuscleParallel.cpp" line="404"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Internal parallel MUSCLE error: %1</translation>
     </message>
@@ -664,17 +669,17 @@
 <context>
     <name>U2::RefineTask</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="572"/>
+        <location filename="../src/MuscleParallel.cpp" line="574"/>
         <source>RefineTask</source>
         <translation>RefineTask</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="595"/>
+        <location filename="../src/MuscleParallel.cpp" line="597"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Internal parallel MUSCLE error: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="602"/>
+        <location filename="../src/MuscleParallel.cpp" line="604"/>
         <source>Can't allocate enough memory to perform aligning, try to use 64bit UGENE version</source>
         <translation type="unfinished"></translation>
     </message>
@@ -682,12 +687,12 @@
 <context>
     <name>U2::RefineTreeTask</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="522"/>
+        <location filename="../src/MuscleParallel.cpp" line="524"/>
         <source>RefineTreeTask</source>
         <translation>RefineTreeTask</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="534"/>
+        <location filename="../src/MuscleParallel.cpp" line="536"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Internal parallel MUSCLE error: %1</translation>
     </message>
@@ -695,12 +700,12 @@
 <context>
     <name>U2::RefineWorker</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="653"/>
+        <location filename="../src/MuscleParallel.cpp" line="655"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Internal parallel MUSCLE error: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="659"/>
+        <location filename="../src/MuscleParallel.cpp" line="661"/>
         <source>Can't allocate enough memory to perform aligning, try to use 64bit UGENE version</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/src/plugins_3rdparty/umuscle/transl/russian.ts b/src/plugins_3rdparty/umuscle/transl/russian.ts
index 08a4d36..b93351e 100644
--- a/src/plugins_3rdparty/umuscle/transl/russian.ts
+++ b/src/plugins_3rdparty/umuscle/transl/russian.ts
@@ -4,88 +4,88 @@
 <context>
     <name>MuscleAlignmentDialog</name>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="20"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="20"/>
         <source>Align with MUSCLE</source>
         <translation>Выравнивание с помощью MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="36"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="36"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="46"/>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="63"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="46"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="63"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="53"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="53"/>
         <source>Output file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="83"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="83"/>
         <source>Mode</source>
         <translation>Конфигурация</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="95"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="95"/>
         <source>Mode details:</source>
         <translation>Описание:</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="115"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="115"/>
         <source>Advanced options</source>
         <translation>Дополнительные настройки</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="138"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="138"/>
         <source>Max iterations</source>
         <translation>Максимальное число итераций</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="181"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="181"/>
         <source>Max time (minutes)</source>
         <translation>Максимальное время работы (мин.)</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="225"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="225"/>
         <source>Translating alignment to amino allows to avoid errors of inserting gaps within codon boundaries.</source>
         <translation>Трансляция выравнивания в амино позволяет избежать ошибок вставки пробелов в границах кодонов.</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="228"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="228"/>
         <source>Translate to amino when aligning</source>
         <translation>Транслировать в амины в процессе выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="240"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="240"/>
         <source>Translation table:</source>
         <translation>Таблица трансляций:</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="261"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="261"/>
         <source>Region to align</source>
         <translation>Выравнивать</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="351"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="351"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="269"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="269"/>
         <source>Whole alignment</source>
         <translation>Целые последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="284"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="284"/>
         <source>Column range</source>
         <translation>Указанный регион столбцов</translation>
     </message>
     <message>
-        <location filename="../src/ui/MuscleAlignDialog.ui" line="123"/>
+        <location filename="../src/MuscleAlignDialog.ui" line="123"/>
         <source>Do not re-arrange sequences (-stable)</source>
         <translation>Сохранять порядок последовательностей (ключ -stable)</translation>
     </message>
@@ -325,17 +325,22 @@
         <translation>MUSCLE добавляет '%2' к '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="303"/>
+        <location filename="../src/MuscleTask.cpp" line="271"/>
+        <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"/>
         <source>Sequences in file have different alphabets %1</source>
         <translation>Последовательности в файле имеют разные алфавиты: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="324"/>
+        <location filename="../src/MuscleTask.cpp" line="325"/>
         <source>No sequences found in file %1</source>
         <translation>Файл не содержит последовательностей: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="326"/>
+        <location filename="../src/MuscleTask.cpp" line="327"/>
         <source>No alignment found in file %1</source>
         <translation>Файл не содержит выравниваний: %1</translation>
     </message>
@@ -343,67 +348,67 @@
 <context>
     <name>U2::MuscleAlignDialogController</name>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="110"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="103"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="110"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="103"/>
         <source>Illegal alignment region</source>
         <translation>Неправильный регион</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="54"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="47"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="55"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="48"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="259"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="254"/>
         <source>MUSCLE default</source>
         <translation>По умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="260"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="255"/>
         <source><p>The default settings are designed to give the best accuracy</source>
         <translation><p>Наилучшая точность выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="261"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="256"/>
         <source><p><b>Command line:</b> muscle <no-parameters></source>
         <translation><p><b>Командная строка:</b> muscle <no-parameters></translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="265"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="260"/>
         <source>Large alignment</source>
         <translation>Большие выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="266"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="261"/>
         <source><p>If you have a large number of sequences (a few thousand), or they are very long, then the default settings may be too slow for practical use. A good compromise between speed and accuracy is to run just the first two iterations of the algorithm</source>
         <translation><p>При наличии тысяч последовательностей либо их большой длине, конфигурация по умолчанию может оказаться неприемлемо медленной. Хороший компромисс между скоростью и точностью обеспечивается при прогоне только первых 2-х итераций алгоритма</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="267"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="262"/>
         <source><p><b>Command line:</b> muscle <i>-maxiters 2</i></source>
         <translation><p><b>Командная строка:</b> muscle <i>-maxiters 2</i></translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="271"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="266"/>
         <source>Refine only</source>
         <translation>Только улучшить</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="272"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="267"/>
         <source><p>Improves existing alignment without complete realignment</source>
         <translation><p>Улучшение существующего выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="273"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="268"/>
         <source><p><b>Command line:</b> muscle <i>-refine</i></source>
         <translation><p><b>Командная строка:</b> muscle <i>-refine</i></translation>
     </message>
@@ -411,17 +416,17 @@
 <context>
     <name>U2::MuscleAlignWithExtFileSpecifyDialogController</name>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="142"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="138"/>
         <source>Align</source>
         <translation>Выровнять</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="143"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="139"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="169"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="165"/>
         <source>Open an alignment file</source>
         <translation>Открыть выравнивание</translation>
     </message>
@@ -431,28 +436,28 @@
         <translation>Сохранить множественное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="215"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="210"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="215"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="210"/>
         <source>Illegal alignment region</source>
         <translation>Неправильный регион</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="232"/>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="235"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="227"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="230"/>
         <source>Kalign with Align</source>
         <translation>Выравнивание с помощью Kalign</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="233"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="228"/>
         <source>Input file is not set!</source>
         <translation>Входной файл не указан!</translation>
     </message>
     <message>
-        <location filename="../src/MuscleAlignDialogController.cpp" line="236"/>
+        <location filename="../src/MuscleAlignDialogController.cpp" line="231"/>
         <source>Output file is not set!</source>
         <translation>Выходной файл не указан!</translation>
     </message>
@@ -460,17 +465,17 @@
 <context>
     <name>U2::MuscleGObjectRunFromSchemaTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="598"/>
+        <location filename="../src/MuscleTask.cpp" line="597"/>
         <source>Workflow wrapper '%1'</source>
         <translation>Workflow wrapper '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="611"/>
+        <location filename="../src/MuscleTask.cpp" line="610"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE выравнивает '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="614"/>
+        <location filename="../src/MuscleTask.cpp" line="613"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE улучшает '%1'</translation>
     </message>
@@ -478,32 +483,27 @@
 <context>
     <name>U2::MuscleGObjectTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="356"/>
+        <location filename="../src/MuscleTask.cpp" line="357"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE выравнивает '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="359"/>
+        <location filename="../src/MuscleTask.cpp" line="360"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE улучшает '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="362"/>
+        <location filename="../src/MuscleTask.cpp" line="363"/>
         <source>MUSCLE add to profile '%1'</source>
         <translation>MUSCLE добавляет в выравнивание '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="365"/>
+        <location filename="../src/MuscleTask.cpp" line="366"/>
         <source>MUSCLE align profiles</source>
         <translation>MUSCLE выравнивает пару выравниваний</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="397"/>
-        <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="413"/>
+        <location filename="../src/MuscleTask.cpp" line="412"/>
         <source>MAlignment object has been changed</source>
         <translation>Объект множественного выравнивания был изменен</translation>
     </message>
@@ -545,6 +545,11 @@
         <source>MuscleParallelTask</source>
         <translation>MuscleParallelTask</translation>
     </message>
+    <message>
+        <location filename="../src/MuscleParallel.cpp" line="62"/>
+        <source>There is not enough memory to align these sequences with MUSCLE.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::MusclePlugin</name>
@@ -567,27 +572,27 @@
 <context>
     <name>U2::MusclePrepareTask</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="110"/>
+        <location filename="../src/MuscleParallel.cpp" line="112"/>
         <source>Preparing MUSCLE alignment...</source>
         <translation>Preparing MUSCLE alignment...</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="118"/>
+        <location filename="../src/MuscleParallel.cpp" line="120"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Внутренняя ошибка: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="127"/>
+        <location filename="../src/MuscleParallel.cpp" line="129"/>
         <source>MUSCLE prepared successfully</source>
         <translation>MUSCLE prepared successfully</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="164"/>
+        <location filename="../src/MuscleParallel.cpp" line="166"/>
         <source>No sequences in input file</source>
         <translation>Выравнивание не содержит данных</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="193"/>
+        <location filename="../src/MuscleParallel.cpp" line="195"/>
         <source>Alignment is empty</source>
         <translation>Выравнивание не содержит данных</translation>
     </message>
@@ -633,17 +638,17 @@
 <context>
     <name>U2::ProgressiveAlignTask</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="305"/>
+        <location filename="../src/MuscleParallel.cpp" line="307"/>
         <source>ProgressiveAlignTask</source>
         <translation>ProgressiveAlignTask</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="327"/>
+        <location filename="../src/MuscleParallel.cpp" line="329"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Внутренняя ошибка: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="337"/>
+        <location filename="../src/MuscleParallel.cpp" line="339"/>
         <source>alignment "%1" Parallel MUSCLE Iter 1 accomplished. Time elapsed %2 ms</source>
         <translation>alignment "%1" Parallel MUSCLE Iter 1 accomplished. Time elapsed %2 ms</translation>
     </message>
@@ -651,12 +656,12 @@
 <context>
     <name>U2::ProgressiveAlignWorker</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="388"/>
+        <location filename="../src/MuscleParallel.cpp" line="390"/>
         <source>ProgressiveAlignWorker</source>
         <translation>ProgressiveAlignWorker</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="402"/>
+        <location filename="../src/MuscleParallel.cpp" line="404"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Внутренняя ошибка: %1</translation>
     </message>
@@ -664,17 +669,17 @@
 <context>
     <name>U2::RefineTask</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="572"/>
+        <location filename="../src/MuscleParallel.cpp" line="574"/>
         <source>RefineTask</source>
         <translation>RefineTask</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="595"/>
+        <location filename="../src/MuscleParallel.cpp" line="597"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Внутренняя ошибка: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="602"/>
+        <location filename="../src/MuscleParallel.cpp" line="604"/>
         <source>Can't allocate enough memory to perform aligning, try to use 64bit UGENE version</source>
         <translation type="unfinished"></translation>
     </message>
@@ -682,12 +687,12 @@
 <context>
     <name>U2::RefineTreeTask</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="522"/>
+        <location filename="../src/MuscleParallel.cpp" line="524"/>
         <source>RefineTreeTask</source>
         <translation>RefineTreeTask</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="534"/>
+        <location filename="../src/MuscleParallel.cpp" line="536"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Внутренняя ошибка: %1</translation>
     </message>
@@ -695,12 +700,12 @@
 <context>
     <name>U2::RefineWorker</name>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="653"/>
+        <location filename="../src/MuscleParallel.cpp" line="655"/>
         <source>Internal parallel MUSCLE error: %1</source>
         <translation>Внутренняя ошибка: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleParallel.cpp" line="659"/>
+        <location filename="../src/MuscleParallel.cpp" line="661"/>
         <source>Can't allocate enough memory to perform aligning, try to use 64bit UGENE version</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/src/plugins_3rdparty/umuscle/umuscle.pro b/src/plugins_3rdparty/umuscle/umuscle.pro
index 84a5824..e4f6f11 100644
--- a/src/plugins_3rdparty/umuscle/umuscle.pro
+++ b/src/plugins_3rdparty/umuscle/umuscle.pro
@@ -49,7 +49,7 @@ HEADERS += src/MuscleAdapter.h \
            src/muscle/types.h \
            src/muscle/unixio.h \
            src/umuscle_tests/umuscleTests.h
-FORMS += src/ui/MuscleAlignDialog.ui
+FORMS += src/MuscleAlignDialog.ui
 SOURCES += src/MuscleAdapter.cpp \
            src/MuscleAlignDialogController.cpp \
            src/MuscleParallel.cpp \
diff --git a/src/plugins_3rdparty/variants/CMakeLists.txt b/src/plugins_3rdparty/variants/CMakeLists.txt
new file mode 100644
index 0000000..5009a17
--- /dev/null
+++ b/src/plugins_3rdparty/variants/CMakeLists.txt
@@ -0,0 +1,3 @@
+set(UGENE_PLUGIN_NAME variants)
+
+include(../../Plugin.cmake)
diff --git a/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp b/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp
index e1d3529..bf01a74 100644
--- a/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp
+++ b/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp
@@ -59,6 +59,10 @@ static const QString REF_SEQ_PORT_ID("ref-seq-port-id");
 static const QString ASSEMBLY_PORT_ID("assembly-port-id");
 
 const QString OUT_URL("variants-url");
+const QString REF_SOURCE("reference-source");
+const QString REF_SOURCE_PORT("port");
+const QString REF_SOURCE_FILE("file");
+const QString REF_URL("reference-url");
 
 //mpileup
 const QString ILLUMINA13("illumina13-encoding");
@@ -182,6 +186,18 @@ void CallVariantsWorkerFactory::init() {
         CallVariantsWorker::tr("Output variants file"),
         CallVariantsWorker::tr("The url to the file with the extracted variations."));
 
+    Descriptor refLocation(REF_SOURCE,
+        CallVariantsWorker::tr("Use reference from"),
+        CallVariantsWorker::tr("<p>Specify \"File\" to set a single reference sequence for all input NGS assemblies. "
+                               "The reference should be set in the \"Reference\" parameter.</p>"
+                               "<p>Specify \"Input port\" to be able to set different references for difference NGS assemblies. "
+                               "The references should be input via the \"Input sequences\" port (e.g. use datasets in the \"Read Sequence\" element).</p>"));
+
+    Descriptor refUrl(REF_URL,
+        CallVariantsWorker::tr("Reference"),
+        CallVariantsWorker::tr("<p>Specify a file with the reference sequence.</p>"
+                               "<p>The sequence will be used as reference for all datasets with NGS assemblies.</p>"));
+
     Descriptor illumina13Encoding(ILLUMINA13,
         CallVariantsWorker::tr("Illumina-1.3+ encoding"),
         CallVariantsWorker::tr("Assume the quality is in the Illumina 1.3+ encoding (mpileup)(-6)."));
@@ -370,6 +386,19 @@ void CallVariantsWorkerFactory::init() {
         CallVariantsWorker::tr("Print filtered variants into the log (varFilter) (-p)."));
 
     attributes << new Attribute(outUrl, BaseTypes::STRING_TYPE(), true, "");
+
+    Attribute* refUrlAttr = new Attribute(refUrl, BaseTypes::STRING_TYPE(), true, "");
+    QVariantList refUrlVisibilityValues;
+    refUrlVisibilityValues << QVariant(REF_SOURCE_FILE);
+    refUrlAttr->addRelation(new VisibilityRelation(REF_SOURCE, refUrlVisibilityValues));
+    attributes << refUrlAttr;
+
+    Attribute* refLocationAttr = new Attribute(refLocation, BaseTypes::STRING_TYPE(), false, QVariant(REF_SOURCE_FILE));
+    QVariantList refPortVisibilityValues;
+    refPortVisibilityValues << QVariant(REF_SOURCE_PORT);
+    refLocationAttr->addPortRelation(PortRelationDescriptor( BasePorts::IN_SEQ_PORT_ID(), refPortVisibilityValues));
+    attributes << refLocationAttr;
+
     attributes << new Attribute(illumina13Encoding, BaseTypes::BOOL_TYPE(), false, QVariant(false));
     attributes << new Attribute(useOrphan, BaseTypes::BOOL_TYPE(), false, QVariant(false));
     attributes << new Attribute(disableBaq, BaseTypes::BOOL_TYPE(), false, QVariant(false));
@@ -624,8 +653,15 @@ void CallVariantsWorkerFactory::init() {
         vm["singleStep"] = 0.0001;
         delegates[PVALUE_HWE] = new DoubleSpinBoxDelegate(vm);
     }
+    {
+        QVariantMap vm;
+        vm[CallVariantsWorker::tr("Input port")] = REF_SOURCE_PORT;
+        vm[CallVariantsWorker::tr("File")] = REF_SOURCE_FILE;
+        delegates[REF_SOURCE] = new ComboBoxDelegate(vm);
+    }
 
     delegates[OUT_URL] = new URLDelegate("", "", false, false, true, NULL, "vcf");
+    delegates[REF_URL] = new URLDelegate("", "", false, false, false);
     delegates[BCF_BED] = new URLDelegate("", "", false, false, false);
     delegates[SAMPLES] = new URLDelegate("", "", false, false, false);
 
@@ -650,11 +686,18 @@ void CallVariantsWorkerFactory::init() {
 
 
 QString CallVariantsPrompter::composeRichDoc() {
-    Actor* assemblyProducer = qobject_cast<IntegralBusPort*>(target->getPort(BasePorts::IN_ASSEMBLY_PORT_ID()))->getProducer(BaseSlots::URL_SLOT().getId());
-    Actor* seqProducer = qobject_cast<IntegralBusPort*>(target->getPort(BasePorts::IN_SEQ_PORT_ID()))->getProducer(BaseSlots::URL_SLOT().getId());
-
+    QString reference;
     QString unsetStr = "<font color='red'>"+tr("unset")+"</font>";
-    QString seqName = tr("For reference sequence from <u>%1</u>,").arg(seqProducer ? seqProducer->getLabel() : unsetStr);
+    Port* refPort = target->getPort(BasePorts::IN_SEQ_PORT_ID());
+    if (refPort->isEnabled()) {
+        Actor* seqProducer = qobject_cast<IntegralBusPort*>(refPort)->getProducer(BaseSlots::URL_SLOT().getId());
+        reference = seqProducer ? seqProducer->getLabel() : unsetStr;
+    } else {
+        reference = getHyperlink(REF_URL, getURL(REF_URL));
+    }
+    QString seqName = tr("For reference sequence from <u>%1</u>,").arg(reference);
+
+    Actor* assemblyProducer = qobject_cast<IntegralBusPort*>(target->getPort(BasePorts::IN_ASSEMBLY_PORT_ID()))->getProducer(BaseSlots::URL_SLOT().getId());
     QString assemblyName = tr("with assembly data provided by <u>%1</u>").arg(assemblyProducer ? assemblyProducer->getLabel() : unsetStr);
 
     QString doc = tr("%1 call variants %2.")
@@ -671,7 +714,7 @@ CallVariantsWorker::CallVariantsWorker(Actor* a)
       output(NULL),
       useDatasets(false)
 {
-
+    referenceSource = FromPort;
 }
 
 void CallVariantsWorker::initDatasetMode() {
@@ -690,6 +733,12 @@ void CallVariantsWorker::init() {
     assemblyPort = ports.value(BasePorts::IN_ASSEMBLY_PORT_ID());
     output = ports.value(BasePorts::OUT_VARIATION_TRACK_PORT_ID());
 
+    if (getValue<QString>(REF_SOURCE) == REF_SOURCE_PORT) {
+        referenceSource = FromPort;
+    } else {
+        referenceSource = FromFile;
+    }
+
     settings = getSettings();
 
     output->addComplement(refSeqPort);
@@ -701,11 +750,15 @@ bool CallVariantsWorker::isReady() const {
     if (isDone()) {
         return false;
     }
-    bool seqEnded = refSeqPort->isEnded();
-    bool seqHasMes = (refSeqPort->hasMessage() > 0);
     bool assemblyEnded = assemblyPort->isEnded();
     bool assemblyHasMes = (assemblyPort->hasMessage() > 0);
 
+    if (referenceSource == FromFile) {
+        return assemblyHasMes || assemblyEnded;
+    }
+
+    bool seqEnded = refSeqPort->isEnded();
+    bool seqHasMes = (refSeqPort->hasMessage() > 0);
     if (seqHasMes && assemblyHasMes) {
         return true;
     }
@@ -738,9 +791,13 @@ Task* CallVariantsWorker::tick() {
     }
 
     //take reference sequence
-    if (refSeqPort->hasMessage() && settings.refSeqUrl.isEmpty()) {
-        takeReference(os);
-        CHECK_OP_EXT(os, processError(os), NULL);
+    if (referenceSource == FromPort) {
+        if (refSeqPort->hasMessage() && settings.refSeqUrl.isEmpty()) {
+            takeReference(os);
+            CHECK_OP_EXT(os, processError(os), NULL);
+        }
+    } else if (settings.refSeqUrl.isEmpty()) {
+        settings.refSeqUrl = getValue<QString>(REF_URL);
     }
 
     //do
@@ -878,11 +935,18 @@ void CallVariantsWorker::processError(const U2OpStatus& os) {
 }
 
 void CallVariantsWorker::checkState(U2OpStatus& os) {
-    if (hasAssembly() && !hasReference()) {
+    if (referenceSource == FromFile) {
+        if (!hasAssembly()) {
+            setDone();
+        }
+        return;
+    }
+
+    if (hasAssembly() && !hasReferenceInPort()) {
         os.setError(tr("Not enough references"));
         processError(os);
         setDone();
-    } else if (!hasAssembly() && hasReference()) {
+    } else if (!hasAssembly() && hasReferenceInPort()) {
         if (!useDatasets) {
             os.setError(tr("The dataset slot is not binded, only the first reference sequence "
                            "against all assemblies was processed."));
@@ -891,7 +955,7 @@ void CallVariantsWorker::checkState(U2OpStatus& os) {
         }
         processError(os);
         setDone();
-    } else if (!hasAssembly() && !hasReference()) {
+    } else if (!hasAssembly() && !hasReferenceInPort()) {
         output->setEnded();
         setDone();
     }
@@ -904,7 +968,7 @@ bool CallVariantsWorker::hasAssembly() const {
             assemblyPort->hasMessage();
 }
 
-bool CallVariantsWorker::hasReference() const {
+bool CallVariantsWorker::hasReferenceInPort() const {
     return !settings.refSeqUrl.isEmpty() ||
             !refSeqPort->isEnded() ||
             refSeqPort->hasMessage();
diff --git a/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.h b/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.h
index e1c00f2..2a34f36 100644
--- a/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.h
+++ b/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.h
@@ -64,6 +64,12 @@ private:
     QString currentDatasetName;
     bool useDatasets;
 
+    enum ReferenceSource {
+        FromPort,
+        FromFile
+    };
+    ReferenceSource referenceSource;
+
 private:
     void initDatasetMode();
     void takeAssembly(U2OpStatus &os);
@@ -72,8 +78,8 @@ private:
     void processError(const U2OpStatus& os);
     void checkState(U2OpStatus& os);
     bool hasAssembly() const;
-    bool hasReference() const;
-}; 
+    bool hasReferenceInPort() const;
+};
 
 class CallVariantsWorkerFactory : public DomainFactory {
 public:
diff --git a/src/plugins_3rdparty/variants/transl/english.ts b/src/plugins_3rdparty/variants/transl/english.ts
index 7e2a16d..3bee86c 100644
--- a/src/plugins_3rdparty/variants/transl/english.ts
+++ b/src/plugins_3rdparty/variants/transl/english.ts
@@ -4,22 +4,22 @@
 <context>
     <name>U2::LocalWorkflow::CallVariantsPrompter</name>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="656"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="690"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="657"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="698"/>
         <source>For reference sequence from <u>%1</u>,</source>
         <translation>For reference sequence from <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="658"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="701"/>
         <source>with assembly data provided by <u>%1</u></source>
         <translation>with assembly data provided by <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="660"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="703"/>
         <source>%1 call variants %2.</source>
         <translation>%1 call variants %2.</translation>
     </message>
@@ -75,357 +75,377 @@
 <context>
     <name>U2::LocalWorkflow::CallVariantsWorker</name>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="131"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="135"/>
         <source>Empty input slot: %1</source>
         <translation>Empty input slot: %1</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="151"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="155"/>
         <source>Input sequences</source>
         <translation>Input sequences</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="152"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="156"/>
         <source>A nucleotide reference sequence.</source>
         <translation>A nucleotide reference sequence.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="159"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="163"/>
         <source>Input assembly</source>
         <translation>Input assembly</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="160"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="164"/>
         <source>Position sorted alignment file</source>
         <translation>Position sorted alignment file</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="167"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="171"/>
         <source>Output variations</source>
         <translation>Output variations</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="168"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="172"/>
         <source>Output tracks with SNPs and short INDELs</source>
         <translation>Output tracks with SNPs and short INDELs</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="173"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="177"/>
         <source>Call Variants with SAMtools</source>
         <translation>Call Variants with SAMtools</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="174"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="178"/>
         <source>Calls SNPs and INDELS with SAMtools mpileup and bcftools.</source>
         <translation>Calls SNPs and INDELS with SAMtools mpileup and bcftools.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="182"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="186"/>
         <source>Output variants file</source>
         <translation>Output variants file</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="183"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="187"/>
         <source>The url to the file with the extracted variations.</source>
         <translation>The url to the file with the extracted variations.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="186"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="190"/>
+        <source>Use reference from</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="191"/>
+        <source><p>Specify "File" to set a single reference sequence for all input NGS assemblies. The reference should be set in the "Reference" parameter.</p><p>Specify "Input port" to be able to set different references for difference NGS assemblies. The references should be input via the "Input sequences" port (e.g. use datasets in the "Read Sequence" element).</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="197"/>
+        <source>Reference</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="198"/>
+        <source><p>Specify a file with the reference sequence.</p><p>The sequence will be used as reference for all datasets with NGS assemblies.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="202"/>
         <source>Illumina-1.3+ encoding</source>
         <translation>Illumina-1.3+ encoding</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="187"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="203"/>
         <source>Assume the quality is in the Illumina 1.3+ encoding (mpileup)(-6).</source>
         <translation>Assume the quality is in the Illumina 1.3+ encoding (mpileup)(-6).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="190"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="206"/>
         <source>Count anomalous read pairs</source>
         <translation>Count anomalous read pairs</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="191"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="207"/>
         <source>Do not skip anomalous read pairs in variant calling(mpileup)(-A).</source>
         <translation>Do not skip anomalous read pairs in variant calling(mpileup)(-A).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="194"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="210"/>
         <source>Disable BAQ computation</source>
         <translation>Disable BAQ computation</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="195"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="211"/>
         <source>Disable probabilistic realignment for the computation of base alignment quality (BAQ). BAQ is the Phred-scaled probability of a read base being misaligned. Applying this option greatly helps to reduce false SNPs caused by misalignments. (mpileup)(-B).</source>
         <translation>Disable probabilistic realignment for the computation of base alignment quality (BAQ). BAQ is the Phred-scaled probability of a read base being misaligned. Applying this option greatly helps to reduce false SNPs caused by misalignments. (mpileup)(-B).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="200"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="216"/>
         <source>Mapping quality downgrading coefficient</source>
         <translation>Mapping quality downgrading coefficient</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="201"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="217"/>
         <source>Coefficient for downgrading mapping quality for reads containing excessive mismatches. Given a read with a phred-scaled mapping quality q of being generated from the mapped position, the new mapping quality is about sqrt((INT-q)/INT)*INT. A zero value disables this functionality; if enabled, the recommended value for BWA is 50 (mpileup)(-C).</source>
         <translation>Coefficient for downgrading mapping quality for reads containing excessive mismatches. Given a read with a phred-scaled mapping quality q of being generated from the mapped position, the new mapping quality is about sqrt((INT-q)/INT)*INT. A zero value disables this functionality; if enabled, the recommended value for BWA is 50 (mpileup)(-C).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="206"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="222"/>
         <source>Max number of reads per input BAM</source>
         <translation>Max number of reads per input BAM</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="207"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="223"/>
         <source>At a position, read maximally the number of reads per input BAM (mpileup)(-d).</source>
         <translation>At a position, read maximally the number of reads per input BAM (mpileup)(-d).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="210"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="226"/>
         <source>Extended BAQ computation</source>
         <translation>Extended BAQ computation</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="211"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="227"/>
         <source>Extended BAQ computation. This option helps sensitivity especially for MNPs, but may hurt specificity a little bit (mpileup)(-E).</source>
         <translation>Extended BAQ computation. This option helps sensitivity especially for MNPs, but may hurt specificity a little bit (mpileup)(-E).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="215"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="231"/>
         <source>BED or position list file</source>
         <translation>BED or position list file</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="216"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="232"/>
         <source>BED or position list file containing a list of regions or sites where pileup or BCF should be generated (mpileup)(-l).</source>
         <translation>BED or position list file containing a list of regions or sites where pileup or BCF should be generated (mpileup)(-l).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="220"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="236"/>
         <source>Pileup region</source>
         <translation>Pileup region</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="221"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="237"/>
         <source>Only generate pileup in region STR (mpileup)(-r).</source>
         <translation>Only generate pileup in region STR (mpileup)(-r).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="224"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="240"/>
         <source>Minimum mapping quality</source>
         <translation>Minimum mapping quality</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="225"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="241"/>
         <source>Minimum mapping quality for an alignment to be used (mpileup)(-q).</source>
         <translation>Minimum mapping quality for an alignment to be used (mpileup)(-q).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="228"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="244"/>
         <source>Minimum base quality</source>
         <translation>Minimum base quality</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="229"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="245"/>
         <source>Minimum base quality for a base to be considered (mpileup)(-Q).</source>
         <translation>Minimum base quality for a base to be considered (mpileup)(-Q).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="232"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="248"/>
         <source>Gap extension error</source>
         <translation>Gap extension error</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="233"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="249"/>
         <source>Phred-scaled gap extension sequencing error probability. Reducing INT leads to longer indels (mpileup)(-e).</source>
         <translation>Phred-scaled gap extension sequencing error probability. Reducing INT leads to longer indels (mpileup)(-e).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="236"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="252"/>
         <source>Homopolymer errors coefficient</source>
         <translation>Homopolymer errors coefficient</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="237"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="253"/>
         <source>Coefficient for modeling homopolymer errors. Given an l-long homopolymer run, the sequencing error of an indel of size s is modeled as INT*s/l (mpileup)(-h).</source>
         <translation>Coefficient for modeling homopolymer errors. Given an l-long homopolymer run, the sequencing error of an indel of size s is modeled as INT*s/l (mpileup)(-h).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="240"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="256"/>
         <source>No INDELs</source>
         <translation>No INDELs</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="241"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="257"/>
         <source>Do not perform INDEL calling (mpileup)(-I).</source>
         <translation>Do not perform INDEL calling (mpileup)(-I).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="244"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="260"/>
         <source>Max INDEL depth</source>
         <translation>Max INDEL depth</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="245"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="261"/>
         <source>Skip INDEL calling if the average per-sample depth is above INT (mpileup)(-L).</source>
         <translation>Skip INDEL calling if the average per-sample depth is above INT (mpileup)(-L).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="248"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="264"/>
         <source>Gap open error</source>
         <translation>Gap open error</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="249"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="265"/>
         <source>Phred-scaled gap open sequencing error probability. Reducing INT leads to more indel calls (mpileup)(-o).</source>
         <translation>Phred-scaled gap open sequencing error probability. Reducing INT leads to more indel calls (mpileup)(-o).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="252"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="268"/>
         <source>List of platforms for indels</source>
         <translation>List of platforms for indels</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="253"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="269"/>
         <source>Comma dilimited list of platforms (determined by @RG-PL) from which indel candidates are obtained.It is recommended to collect indel candidates from sequencing technologies that have low indel error rate such as ILLUMINA (mpileup)(-P).</source>
         <translation>Comma dilimited list of platforms (determined by @RG-PL) from which indel candidates are obtained.It is recommended to collect indel candidates from sequencing technologies that have low indel error rate such as ILLUMINA (mpileup)(-P).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="258"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="274"/>
         <source>Retain all possible alternate</source>
         <translation>Retain all possible alternate</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="259"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="275"/>
         <source>Retain all possible alternate alleles at variant sites. By default, the view command discards unlikely alleles (bcf view)(-A).</source>
         <translation>Retain all possible alternate alleles at variant sites. By default, the view command discards unlikely alleles (bcf view)(-A).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="262"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="278"/>
         <source>Indicate PL</source>
         <translation>Indicate PL</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="263"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="279"/>
         <source>Indicate PL is generated by r921 or before (ordering is different) (bcf view)(-F).</source>
         <translation>Indicate PL is generated by r921 or before (ordering is different) (bcf view)(-F).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="266"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="282"/>
         <source>No genotype information</source>
         <translation>No genotype information</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="267"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="283"/>
         <source>Suppress all individual genotype information (bcf view)(-G).</source>
         <translation>Suppress all individual genotype information (bcf view)(-G).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="270"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="286"/>
         <source>A/C/G/T only</source>
         <translation>A/C/G/T only</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="271"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="287"/>
         <source>Skip sites where the REF field is not A/C/G/T (bcf view)(-N).</source>
         <translation>Skip sites where the REF field is not A/C/G/T (bcf view)(-N).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="274"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="290"/>
         <source>List of sites</source>
         <translation>List of sites</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="275"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="291"/>
         <source>List of sites at which information are outputted (bcf view)(-l).</source>
         <translation>List of sites at which information are outputted (bcf view)(-l).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="278"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="294"/>
         <source>QCALL likelihood</source>
         <translation>QCALL likelihood</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="279"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="295"/>
         <source>Output the QCALL likelihood format (bcf view)(-Q).</source>
         <translation>Output the QCALL likelihood format (bcf view)(-Q).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="282"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="298"/>
         <source>List of samples</source>
         <translation>List of samples</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="283"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="299"/>
         <source>List of samples to use. The first column in the input gives the sample names and the second gives the ploidy, which can only be 1 or 2. When the 2nd column is absent, the sample ploidy is assumed to be 2. In the output, the ordering of samples will be identical to the one in FILE (bcf view)(-s).</source>
         <translation>List of samples to use. The first column in the input gives the sample names and the second gives the ploidy, which can only be 1 or 2. When the 2nd column is absent, the sample ploidy is assumed to be 2. In the output, the ordering of samples will be identical to the one in FILE (bcf view)(-s).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="289"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="305"/>
         <source>Min samples fraction</source>
         <translation>Min samples fraction</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="290"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="306"/>
         <source>skip loci where the fraction of samples covered by reads is below FLOAT (bcf view)(-d).</source>
         <translation>skip loci where the fraction of samples covered by reads is below FLOAT (bcf view)(-d).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="293"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="309"/>
         <source>Per-sample genotypes</source>
         <translation>Per-sample genotypes</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="294"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="310"/>
         <source>Call per-sample genotypes at variant sites (bcf view)(-g).</source>
         <translation>Call per-sample genotypes at variant sites (bcf view)(-g).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="297"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="313"/>
         <source>INDEL-to-SNP Ratio</source>
         <translation>INDEL-to-SNP Ratio</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="298"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="314"/>
         <source>Ratio of INDEL-to-SNP mutation rate (bcf view)(-i).</source>
         <translation>Ratio of INDEL-to-SNP mutation rate (bcf view)(-i).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="301"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="317"/>
         <source>Max P(ref|D)</source>
         <translation>Max P(ref|D)</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="302"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="318"/>
         <source>A site is considered to be a variant if P(ref|D)<FLOAT (bcf view)(-p).</source>
         <translation>A site is considered to be a variant if P(ref|D) less than FLOAT (bcf view)(-p).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="305"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="321"/>
         <source>Prior allele frequency spectrum</source>
         <translation>Prior allele frequency spectrum</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="306"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="322"/>
         <source>If STR can be full, cond2, flat or the file consisting of error output from a previous variant calling run (bcf view)(-P).</source>
         <translation>If STR can be full, cond2, flat or the file consisting of error output from a previous variant calling run (bcf view)(-P).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="309"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="325"/>
         <source>Mutation rate</source>
         <translation>Mutation rate</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="310"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="326"/>
         <source>Scaled mutation rate for variant calling (bcf view)(-t).</source>
         <translation>Scaled mutation rate for variant calling (bcf view)(-t).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="313"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="329"/>
         <source>Pair/trio calling</source>
         <translation>Pair/trio calling</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="314"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="330"/>
         <source>Enable pair/trio calling. For trio calling, option -s is usually needed to be applied to configure the trio members and their ordering. In the file supplied to the option -s, the first sample must be the child, the second the father and the third the mother. The valid values of STR are '‘pair’', '‘trioauto’', '‘trioxd’' and '‘trioxs’', where '‘pair’' calls differences between two input samples, and '‘trioxd’' (&a [...]
         <translation type="unfinished"></translation>
     </message>
@@ -434,177 +454,187 @@
         <translation type="vanished">Enable pair/trio calling. For trio calling, option -s is usually needed to be applied to configure the trio members and their ordering. In the file supplied to the option -s, the first sample must be the child, the second the father and the third the mother. The valid values of STR are '‘pair’', '‘trioauto’', '‘trioxd’' and '‘trioxs’', where '‘pair’' calls differences between two input sample [...]
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="321"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="337"/>
         <source>N group-1 samples</source>
         <translation>N group-1 samples</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="322"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="338"/>
         <source>Number of group-1 samples. This option is used for dividing the samples into two groups for contrast SNP calling or association test. When this option is in use, the followingVCF INFO will be outputted: PC2, PCHI2 and QCHI2 (bcf view)(-1).</source>
         <translation>Number of group-1 samples. This option is used for dividing the samples into two groups for contrast SNP calling or association test. When this option is in use, the followingVCF INFO will be outputted: PC2, PCHI2 and QCHI2 (bcf view)(-1).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="327"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="343"/>
         <source>N permutations</source>
         <translation>N permutations</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="328"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="344"/>
         <source>Number of permutations for association test (effective only with -1) (bcf view)(-U).</source>
         <translation>Number of permutations for association test (effective only with -1) (bcf view)(-U).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="331"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="347"/>
         <source>Max P(chi^2)</source>
         <translation>Max P(chi^2)</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="332"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="348"/>
         <source>Only perform permutations for P(chi^2)<FLOAT (N permutations) (bcf view)(-X).</source>
         <translation>Only perform permutations for P(chi^2)<FLOAT (N permutations) (bcf view)(-X).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="336"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="352"/>
         <source>Minimum RMS quality</source>
         <translation>Minimum RMS quality</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="337"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="353"/>
         <source>Minimum RMS mapping quality for SNPs (varFilter) (-Q).</source>
         <translation>Minimum RMS mapping quality for SNPs (varFilter) (-Q).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="339"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="355"/>
         <source>Minimum read depth</source>
         <translation>Minimum read depth</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="340"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="356"/>
         <source>Minimum read depth (varFilter) (-d).</source>
         <translation>Minimum read depth (varFilter) (-d).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="342"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="358"/>
         <source>Maximum read depth</source>
         <translation>Maximum read depth</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="343"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="359"/>
         <source>Maximum read depth (varFilter) (-D).</source>
         <translation>Maximum read depth (varFilter) (-D).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="345"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="361"/>
         <source>Alternate bases</source>
         <translation>Alternate bases</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="346"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="362"/>
         <source>Minimum number of alternate bases (varFilter) (-a).</source>
         <translation>Minimum number of alternate bases (varFilter) (-a).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="348"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="364"/>
         <source>Gap size</source>
         <translation>Gap size</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="349"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="365"/>
         <source>SNP within INT bp around a gap to be filtered (varFilter) (-w).</source>
         <translation>SNP within INT bp around a gap to be filtered (varFilter) (-w).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="351"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="367"/>
         <source>Window size</source>
         <translation>Window size</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="352"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="368"/>
         <source>Window size for filtering adjacent gaps (varFilter) (-W).</source>
         <translation>Window size for filtering adjacent gaps (varFilter) (-W).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="354"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="370"/>
         <source>Strand bias</source>
         <translation>Strand bias</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="355"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="371"/>
         <source>Minimum P-value for strand bias (given PV4) (varFilter) (-1).</source>
         <translation>Minimum P-value for strand bias (given PV4) (varFilter) (-1).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="357"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="373"/>
         <source>BaseQ bias</source>
         <translation>BaseQ bias</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="358"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="374"/>
         <source>Minimum P-value for baseQ bias (varFilter) (-2).</source>
         <translation>Minimum P-value for baseQ bias (varFilter) (-2).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="360"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="376"/>
         <source>MapQ bias</source>
         <translation>MapQ bias</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="361"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="377"/>
         <source>Minimum P-value for mapQ bias (varFilter) (-3).</source>
         <translation>Minimum P-value for mapQ bias (varFilter) (-3).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="363"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="379"/>
         <source>End distance bias</source>
         <translation>End distance bias</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="364"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="380"/>
         <source>Minimum P-value for end distance bias (varFilter) (-4).</source>
         <translation>Minimum P-value for end distance bias (varFilter) (-4).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="366"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="382"/>
         <source>HWE</source>
         <translation>HWE</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="367"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="383"/>
         <source>Minimum P-value for HWE (plus F<0) (varFilter) (-e).</source>
         <translation>Minimum P-value for HWE (plus F<0) (varFilter) (-e).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="369"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="385"/>
         <source>Log filtered</source>
         <translation>Log filtered</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="370"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="386"/>
         <source>Print filtered variants into the log (varFilter) (-p).</source>
         <translation>Print filtered variants into the log (varFilter) (-p).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="781"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="658"/>
+        <source>Input port</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="659"/>
+        <source>File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="842"/>
         <source>Assembly URL slot is empty. Please, specify the URL slot</source>
         <translation>Assembly URL slot is empty. Please, specify the URL slot</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="800"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="867"/>
         <source>Ref sequence URL slot is empty. Please, specify the URL slot</source>
         <translation>Ref sequence URL slot is empty. Please, specify the URL slot</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="872"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="946"/>
         <source>Not enough references</source>
         <translation>Not enough references</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="877"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="951"/>
         <source>The dataset slot is not binded, only the first reference sequence against all assemblies was processed.</source>
         <translation>The dataset slot is not binded, only the first reference sequence against all assemblies was processed.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="880"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="954"/>
         <source>Not enough assemblies</source>
         <translation>Not enough assemblies</translation>
     </message>
diff --git a/src/plugins_3rdparty/variants/transl/russian.ts b/src/plugins_3rdparty/variants/transl/russian.ts
index d7d525d..5272d0a 100644
--- a/src/plugins_3rdparty/variants/transl/russian.ts
+++ b/src/plugins_3rdparty/variants/transl/russian.ts
@@ -4,22 +4,22 @@
 <context>
     <name>U2::LocalWorkflow::CallVariantsPrompter</name>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="656"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="690"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="657"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="698"/>
         <source>For reference sequence from <u>%1</u>,</source>
         <translation>Для референсной последовательности из <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="658"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="701"/>
         <source>with assembly data provided by <u>%1</u></source>
         <translation>с данными сборки, произведенными <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="660"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="703"/>
         <source>%1 call variants %2.</source>
         <translation>%1 вызов вариантов %2.</translation>
     </message>
@@ -75,357 +75,377 @@
 <context>
     <name>U2::LocalWorkflow::CallVariantsWorker</name>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="131"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="135"/>
         <source>Empty input slot: %1</source>
         <translation>Входной слот пуст: %1</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="151"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="155"/>
         <source>Input sequences</source>
         <translation>Входные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="152"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="156"/>
         <source>A nucleotide reference sequence.</source>
         <translation>Нуклеотидная референсная последовательность.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="159"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="163"/>
         <source>Input assembly</source>
         <translation>Входная сборка</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="160"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="164"/>
         <source>Position sorted alignment file</source>
         <translation>Сортированный файл выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="167"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="171"/>
         <source>Output variations</source>
         <translation>Выходные вариации</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="168"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="172"/>
         <source>Output tracks with SNPs and short INDELs</source>
         <translation>Выходные треки с SNP и  короткими INDEL</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="173"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="177"/>
         <source>Call Variants with SAMtools</source>
         <translation>Поиск вариабельных позиций с помощью SAMtools</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="174"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="178"/>
         <source>Calls SNPs and INDELS with SAMtools mpileup and bcftools.</source>
         <translation>этот элемент ищет однонуклеотидные вариации (SNP) и короткие вставки или выпадения (indels) при помощи SAMtools mpileup и bcftools.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="182"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="186"/>
         <source>Output variants file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="183"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="187"/>
         <source>The url to the file with the extracted variations.</source>
         <translation>Путь до файла с извлеченными вариациями.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="186"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="190"/>
+        <source>Use reference from</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="191"/>
+        <source><p>Specify "File" to set a single reference sequence for all input NGS assemblies. The reference should be set in the "Reference" parameter.</p><p>Specify "Input port" to be able to set different references for difference NGS assemblies. The references should be input via the "Input sequences" port (e.g. use datasets in the "Read Sequence" element).</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="197"/>
+        <source>Reference</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="198"/>
+        <source><p>Specify a file with the reference sequence.</p><p>The sequence will be used as reference for all datasets with NGS assemblies.</p></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="202"/>
         <source>Illumina-1.3+ encoding</source>
         <translation>Кодирование Illumina-1.3+</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="187"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="203"/>
         <source>Assume the quality is in the Illumina 1.3+ encoding (mpileup)(-6).</source>
         <translation>значения качества в кодировке Illumina 1.3+. Соответствует опции mpileup -6.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="190"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="206"/>
         <source>Count anomalous read pairs</source>
         <translation>Учитывать аномальные пары прочтений</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="191"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="207"/>
         <source>Do not skip anomalous read pairs in variant calling(mpileup)(-A).</source>
         <translation>не пропускать аномальные пары прочтений при поиске вариаций. Соответствует опции mpileup -A.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="194"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="210"/>
         <source>Disable BAQ computation</source>
         <translation>Отключить расчет BAQ</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="195"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="211"/>
         <source>Disable probabilistic realignment for the computation of base alignment quality (BAQ). BAQ is the Phred-scaled probability of a read base being misaligned. Applying this option greatly helps to reduce false SNPs caused by misalignments. (mpileup)(-B).</source>
         <translation>не выполнять выравнивание для расчета качества выравнивания каждого нуклеотида (base alignment quality, BAQ). BAQ - это приведенная к шкале Phred вероятность того, что данный нуклеотид выровнен неверно. Расчет BAQ сильно снижает вероятность ложного нахождения SNP из-за неверного выравнивания. Соответствует опции mpileup -B.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="200"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="216"/>
         <source>Mapping quality downgrading coefficient</source>
         <translation>Коэффициент снижения качества выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="201"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="217"/>
         <source>Coefficient for downgrading mapping quality for reads containing excessive mismatches. Given a read with a phred-scaled mapping quality q of being generated from the mapped position, the new mapping quality is about sqrt((INT-q)/INT)*INT. A zero value disables this functionality; if enabled, the recommended value for BWA is 50 (mpileup)(-C).</source>
         <translation>применить коэффициент, отражающий снижение качества выравнивания прочтений, содержащих много замен. Если прочтение обладает качеством выравнивания q, новое значение качества выравнивания составит около sqrt[(INT-q)/INT]*INT. Значение 0 отключает эту опцию. Рекомендуемым значением для BWA является 50. Cjjndtncndetn jgwbb ьзшдугз -C INT.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="206"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="222"/>
         <source>Max number of reads per input BAM</source>
         <translation>Максимальное число прочтений для входного BAM-файла</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="207"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="223"/>
         <source>At a position, read maximally the number of reads per input BAM (mpileup)(-d).</source>
         <translation>максимальное число прочтений, которое следует прочитать для каждой позиции из входного BAM-файла. Соответствует опции mpileup -d.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="210"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="226"/>
         <source>Extended BAQ computation</source>
         <translation>Расширенный расчет BAQ</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="211"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="227"/>
         <source>Extended BAQ computation. This option helps sensitivity especially for MNPs, but may hurt specificity a little bit (mpileup)(-E).</source>
         <translation>Расширенные расчет BAQ. Эта опция увеличивает чувствительность, особенно в случае множественных замен (MNPs), однако может снижать специфичность.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="215"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="231"/>
         <source>BED or position list file</source>
         <translation>BED-файл или файл со списком позиций</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="216"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="232"/>
         <source>BED or position list file containing a list of regions or sites where pileup or BCF should be generated (mpileup)(-l).</source>
         <translation>BED-файл или файл со списком позиций или участков, для которых необходимо сгенерировать pileup или BCF. Соответствует опции mpileup -l.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="220"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="236"/>
         <source>Pileup region</source>
         <translation>Pileup для участка</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="221"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="237"/>
         <source>Only generate pileup in region STR (mpileup)(-r).</source>
         <translation>генерировать pileup только для участка STR. Соответствует опции mpileup -r STR.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="224"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="240"/>
         <source>Minimum mapping quality</source>
         <translation>Минимальное качество выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="225"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="241"/>
         <source>Minimum mapping quality for an alignment to be used (mpileup)(-q).</source>
         <translation>использовать выравнивания только с таким или более хорошим качеством. Соответствует опции mpileup -q.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="228"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="244"/>
         <source>Minimum base quality</source>
         <translation>Минимальное качество нуклеотида</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="229"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="245"/>
         <source>Minimum base quality for a base to be considered (mpileup)(-Q).</source>
         <translation>учитывать нуклеотиды только с таким или более хорошим качеством. Соответствует опции mpileup -Q.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="232"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="248"/>
         <source>Gap extension error</source>
         <translation>Ошибка расширения пробела</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="233"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="249"/>
         <source>Phred-scaled gap extension sequencing error probability. Reducing INT leads to longer indels (mpileup)(-e).</source>
         <translation>Вероятность ошибки расширения пробела. (-e).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="236"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="252"/>
         <source>Homopolymer errors coefficient</source>
         <translation>Коэффициент ошибок в гомополимерных участках</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="237"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="253"/>
         <source>Coefficient for modeling homopolymer errors. Given an l-long homopolymer run, the sequencing error of an indel of size s is modeled as INT*s/l (mpileup)(-h).</source>
         <translation>Коэффициент для моделирования ошибок в участках гомополимеров. Для гомополимера длиной l ошибка секвенирования для вставки/выпадения длиной s рассчитывается как INT*s/l. Соответствует опции mpileup -h.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="240"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="256"/>
         <source>No INDELs</source>
         <translation>Не искать INDELs</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="241"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="257"/>
         <source>Do not perform INDEL calling (mpileup)(-I).</source>
         <translation>не выполнять поиск вставок/выпадений. Соответствует опции mpileup -l.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="244"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="260"/>
         <source>Max INDEL depth</source>
         <translation>Максимальное покрытие для поиска INDELs</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="245"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="261"/>
         <source>Skip INDEL calling if the average per-sample depth is above INT (mpileup)(-L).</source>
         <translation>не выполнять поиск вставок/выпадений если среднее покрытие образца превышает INT. Соответствует опции mpileup -L INT.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="248"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="264"/>
         <source>Gap open error</source>
         <translation>Ошибка открытия пробела</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="249"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="265"/>
         <source>Phred-scaled gap open sequencing error probability. Reducing INT leads to more indel calls (mpileup)(-o).</source>
         <translation>вероятность ошибки секвенирования, приводящей к открытию пробела, в шкале Phred. Снижение значения INT приводит к увеличению числа найденных вставок/выпадений. Соответствует опции mpileup -o INT.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="252"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="268"/>
         <source>List of platforms for indels</source>
         <translation>Список платформ для поиска вставок/выпадений</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="253"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="269"/>
         <source>Comma dilimited list of platforms (determined by @RG-PL) from which indel candidates are obtained.It is recommended to collect indel candidates from sequencing technologies that have low indel error rate such as ILLUMINA (mpileup)(-P).</source>
         <translation>список через запятую названий платформ в формате @RG-PL, для которых необходимо проводить поиск возможных вставок/выпадений. Этот анализ рекомендуется проводить для данных платформ секвенирования, обладающих низким уровнем ошибок типа вставка/выпадение (например, ILLUMINA). Соответствует опции mpileup -P.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="258"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="274"/>
         <source>Retain all possible alternate</source>
         <translation>Сохранять все альтернативные варианты</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="259"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="275"/>
         <source>Retain all possible alternate alleles at variant sites. By default, the view command discards unlikely alleles (bcf view)(-A).</source>
         <translation>сохранять все аллельные варианты в вариабельных позициях. По умолчанию команда view отбрасывает аллели с низкой вероятностью. Соответствует опции bcftools view -A.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="262"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="278"/>
         <source>Indicate PL</source>
         <translation>Указать PL</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="263"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="279"/>
         <source>Indicate PL is generated by r921 or before (ordering is different) (bcf view)(-F).</source>
         <translation>указать, получены ли данные с помощью r921 или более ранней версии платформы (отличаются сортировкой). Соответствует опции bcftools view -F.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="266"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="282"/>
         <source>No genotype information</source>
         <translation>Не отображать информацию о генотипе</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="267"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="283"/>
         <source>Suppress all individual genotype information (bcf view)(-G).</source>
         <translation>отключить отображение всей информации о генотипе индивидуума. Соответствует опции bcftools view -G.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="270"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="286"/>
         <source>A/C/G/T only</source>
         <translation>Только A/C/G/T</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="271"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="287"/>
         <source>Skip sites where the REF field is not A/C/G/T (bcf view)(-N).</source>
         <translation>отбрасывать сайты, где поле REF содержит значение не из списка A/C/G/T. Соответствует опции bcftools view -N.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="274"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="290"/>
         <source>List of sites</source>
         <translation>Список позиций</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="275"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="291"/>
         <source>List of sites at which information are outputted (bcf view)(-l).</source>
         <translation>список позиций, для которых необходимо вывести информацию. Соответствует опции bcftools view -l STR.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="278"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="294"/>
         <source>QCALL likelihood</source>
         <translation>Вероятность в QCALL</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="279"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="295"/>
         <source>Output the QCALL likelihood format (bcf view)(-Q).</source>
         <translation>выводить значения вероятности в формате QCALL. Соответствует опции bcftools view -Q.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="282"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="298"/>
         <source>List of samples</source>
         <translation>Список образцов</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="283"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="299"/>
         <source>List of samples to use. The first column in the input gives the sample names and the second gives the ploidy, which can only be 1 or 2. When the 2nd column is absent, the sample ploidy is assumed to be 2. In the output, the ordering of samples will be identical to the one in FILE (bcf view)(-s).</source>
         <translation>список образцов, которые необходимо использовать. В первом столбце необходимо перечислить названия образцов, во втором - плоидность. Если второй столбец отсутствует, плоидность считается равной 2. Порядок образцов в выходном файле будет соответствовать порядку во входном файле. Соответствует опции bcftools view -s.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="289"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="305"/>
         <source>Min samples fraction</source>
         <translation>Минимальная доля образцов</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="290"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="306"/>
         <source>skip loci where the fraction of samples covered by reads is below FLOAT (bcf view)(-d).</source>
         <translation>пропустить участок если доля образцов, у которых этот участок покрыт прочтениями, ниже указанного значения. Соответствует опции bcftools view -d FLOAT.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="293"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="309"/>
         <source>Per-sample genotypes</source>
         <translation>Генотип для каждого образца</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="294"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="310"/>
         <source>Call per-sample genotypes at variant sites (bcf view)(-g).</source>
         <translation>отобразить генотип для каждого образца и каждой вариабельной позиции. Соответствует опции bcftools view -g.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="297"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="313"/>
         <source>INDEL-to-SNP Ratio</source>
         <translation>Соотношение INDEL-to-SNP</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="298"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="314"/>
         <source>Ratio of INDEL-to-SNP mutation rate (bcf view)(-i).</source>
         <translation>указать отношение скоростей появления вставок/выпадений и замен. Соответствует опции bcftools view -i FLOAT.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="301"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="317"/>
         <source>Max P(ref|D)</source>
         <translation>Максимальное P(ref|D)</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="302"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="318"/>
         <source>A site is considered to be a variant if P(ref|D)<FLOAT (bcf view)(-p).</source>
         <translation>считать позицию вариабельной, если вероятность совпадения с референсом (P(ref|D)) меньше указанного значения. Соответствует опции bcftools view -p FLOAT.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="305"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="321"/>
         <source>Prior allele frequency spectrum</source>
         <translation>Априорное распределение частот аллелей</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="306"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="322"/>
         <source>If STR can be full, cond2, flat or the file consisting of error output from a previous variant calling run (bcf view)(-P).</source>
         <translation>значение из следующего списка: full, cond2, flat - или файл, содержащий список ошибок в предыдущем запуске. Соответствует опции bcftools view -P STR.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="309"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="325"/>
         <source>Mutation rate</source>
         <translation>Скорость накоплений мутаций</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="310"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="326"/>
         <source>Scaled mutation rate for variant calling (bcf view)(-t).</source>
         <translation>нормализованная скорость накопления мутаций для поиска вариаций. Соответствует опции bcftools view -t.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="313"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="329"/>
         <source>Pair/trio calling</source>
         <translation>Поиск вариаций в парных образцах или трио</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="314"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="330"/>
         <source>Enable pair/trio calling. For trio calling, option -s is usually needed to be applied to configure the trio members and their ordering. In the file supplied to the option -s, the first sample must be the child, the second the father and the third the mother. The valid values of STR are '‘pair’', '‘trioauto’', '‘trioxd’' and '‘trioxs’', where '‘pair’' calls differences between two input samples, and '‘trioxd’' (&a [...]
         <translation>включить поиск вариаций в парах или трио образцов. Для работы с трио необходимо также применить опцию -s для настройки входящих в трио образцов и порядка их сортировки. В файле, переданном опции -s, первому образцу должны соответствовать данные для ребенка, второму - для отца, третьему - для матери. Корректными значениями этого параметра являются '‘pair’', '‘trioauto’', '‘trioxd’' и '‘trioxs’', где '‘pair’' позволяет  [...]
     </message>
@@ -434,177 +454,187 @@
         <translation type="vanished">Позволен двойной/тройной вызов (-T).</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="321"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="337"/>
         <source>N group-1 samples</source>
         <translation>Число образцов в группе 1</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="322"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="338"/>
         <source>Number of group-1 samples. This option is used for dividing the samples into two groups for contrast SNP calling or association test. When this option is in use, the followingVCF INFO will be outputted: PC2, PCHI2 and QCHI2 (bcf view)(-1).</source>
         <translation>число образцов в первой группе. Эта опция используется для разделения образцов на две группы для поиска различающихся SNP или проведения анализа ассоциаций. Если эта опция включена, в выходном файле будут добавлены следующие значения VCF INFO: PC2, PCHI2 и QCHI2. Соответствует опции bcftools view -1.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="327"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="343"/>
         <source>N permutations</source>
         <translation>Число перестановок</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="328"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="344"/>
         <source>Number of permutations for association test (effective only with -1) (bcf view)(-U).</source>
         <translation>число перестановок для анализа ассоциаций. Работает только в том случае, если включена опция -1. Соответствует опции bcftools view -U.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="331"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="347"/>
         <source>Max P(chi^2)</source>
         <translation>Максимальное P(chi^2)</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="332"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="348"/>
         <source>Only perform permutations for P(chi^2)<FLOAT (N permutations) (bcf view)(-X).</source>
         <translation>выполнять перестановки только для меньших  значений P(chi^2), чем указанное значение. Соответствует опции bcftools view -X FLOAT.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="336"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="352"/>
         <source>Minimum RMS quality</source>
         <translation>Минимальное качество RMS</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="337"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="353"/>
         <source>Minimum RMS mapping quality for SNPs (varFilter) (-Q).</source>
         <translation>минимальное качество выравнивания RMS для SNP. Соответствует опции varFilter -Q.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="339"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="355"/>
         <source>Minimum read depth</source>
         <translation>Минимальная глубина покрытия</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="340"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="356"/>
         <source>Minimum read depth (varFilter) (-d).</source>
         <translation>Минимальная глубина покрытия для прочтения. Соответствует опции varFilter -d.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="342"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="358"/>
         <source>Maximum read depth</source>
         <translation>Максимальная глубина покрытия</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="343"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="359"/>
         <source>Maximum read depth (varFilter) (-D).</source>
         <translation>Максимальная глубина покрытия для прочтения. Соответствует опции varFilter -d.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="345"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="361"/>
         <source>Alternate bases</source>
         <translation>Альтернативные нуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="346"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="362"/>
         <source>Minimum number of alternate bases (varFilter) (-a).</source>
         <translation>минимальное число прочтений, содержащих в этой позиции не соответствующий референсному вариант. Соответствует опции varFilter -a.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="348"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="364"/>
         <source>Gap size</source>
         <translation>Длина пробела</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="349"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="365"/>
         <source>SNP within INT bp around a gap to be filtered (varFilter) (-w).</source>
         <translation>длина участка, включающего вставку/выпадение, на котором следует отбросить SNP. Соответствует опции varFilter -w.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="351"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="367"/>
         <source>Window size</source>
         <translation>Размер окна</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="352"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="368"/>
         <source>Window size for filtering adjacent gaps (varFilter) (-W).</source>
         <translation>Размер окна для фильтрации смежных пробелов. Соответствует опции varFilter -W.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="354"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="370"/>
         <source>Strand bias</source>
         <translation>Смещение по разным цепям</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="355"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="371"/>
         <source>Minimum P-value for strand bias (given PV4) (varFilter) (-1).</source>
         <translation>минимальное P-значение для добавления информации о неравномерном распределении вариаций по двум цепям. Соответствует опции varFilter -1.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="357"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="373"/>
         <source>BaseQ bias</source>
         <translation>Смещение BaseQ</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="358"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="374"/>
         <source>Minimum P-value for baseQ bias (varFilter) (-2).</source>
         <translation>минимальное P-значение для добавления информации о неравномерном распределении качества нуклеотида (baseQ). Соответствует опции varFilter -2.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="360"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="376"/>
         <source>MapQ bias</source>
         <translation>Смещение MapQ</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="361"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="377"/>
         <source>Minimum P-value for mapQ bias (varFilter) (-3).</source>
         <translation>минимальное P-значение для добавления информации о неравномерном распределении качества выравнивания (mapQ). Соответствует опции varFilter -3.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="363"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="379"/>
         <source>End distance bias</source>
         <translation>Смещение расстояния до конца прочтения</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="364"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="380"/>
         <source>Minimum P-value for end distance bias (varFilter) (-4).</source>
         <translation>минимальное P-значение для добавления информации о неравномерном распределении расстояния от вариабельного сайта до конца прочтения. Соответствует опции varFilter -4.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="366"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="382"/>
         <source>HWE</source>
         <translation>HWE</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="367"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="383"/>
         <source>Minimum P-value for HWE (plus F<0) (varFilter) (-e).</source>
         <translation>минимальное P-значение для добавления информации о распределении Харди-Вайнберга (HWE). Соответствует опции varFilter -e.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="369"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="385"/>
         <source>Log filtered</source>
         <translation>Лог фильтрации</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="370"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="386"/>
         <source>Print filtered variants into the log (varFilter) (-p).</source>
         <translation>записывать отфильтрованные вариации в лог-файл. Соответствует опции varFilter -p.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="781"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="658"/>
+        <source>Input port</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="659"/>
+        <source>File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="842"/>
         <source>Assembly URL slot is empty. Please, specify the URL slot</source>
         <translation>Assembly URL slot is empty. Please, specify the URL slot</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="800"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="867"/>
         <source>Ref sequence URL slot is empty. Please, specify the URL slot</source>
         <translation>Ref sequence URL slot is empty. Please, specify the URL slot</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="872"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="946"/>
         <source>Not enough references</source>
         <translation>Not enough references</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="877"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="951"/>
         <source>The dataset slot is not binded, only the first reference sequence against all assemblies was processed.</source>
         <translation>The dataset slot is not binded, only the first reference sequence against all assemblies was processed.</translation>
     </message>
     <message>
-        <location filename="../src/SamtoolMpileupWorker.cpp" line="880"/>
+        <location filename="../src/SamtoolMpileupWorker.cpp" line="954"/>
         <source>Not enough assemblies</source>
         <translation>Not enough assemblies</translation>
     </message>
diff --git a/src/plugins_checker/plugins_checker.pri b/src/plugins_checker/plugins_checker.pri
index 2e38889..192d12a 100644
--- a/src/plugins_checker/plugins_checker.pri
+++ b/src/plugins_checker/plugins_checker.pri
@@ -8,8 +8,7 @@ use_opencl(){
 
 UGENE_RELATIVE_DESTDIR = ''
 
-QT += xml network script webkit
-QT -= gui
+QT += xml network script webkit widgets
 TEMPLATE = app
 CONFIG +=qt dll thread debug_and_release console
 CONFIG -= app_bundle
@@ -35,9 +34,8 @@ LIBS += -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2Private -lu
         DESTDIR=../_release
         DEFINES+=NDEBUG
         MOC_DIR=_tmp/moc/release
-        OBJECTS_DIR=_tmp/obj/release   
+        OBJECTS_DIR=_tmp/obj/release
     }
-
 }
 
 UI_DIR=_tmp/ui
diff --git a/src/plugins_checker/src/Main.cpp b/src/plugins_checker/src/Main.cpp
index e202d49..7c7af12 100644
--- a/src/plugins_checker/src/Main.cpp
+++ b/src/plugins_checker/src/Main.cpp
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QCoreApplication>
+#include <QApplication>
 
 #include <U2Algorithm/OpenCLGpuRegistry.h>
 
@@ -66,11 +66,13 @@ int main(int argc, char **argv)
 
     GTIMER(c1, t1, "main()->QApp::exec");
 
-    QCoreApplication app(argc, argv);
+    QApplication app(argc, argv);
 
     AppContextImpl* appContext = AppContextImpl::getApplicationContext();
     appContext->setWorkingDirectoryPath(QCoreApplication::applicationDirPath());
 
+    appContext->setGUIMode(true);
+
     QCoreApplication::addLibraryPath(AppContext::getWorkingDirectoryPath());
     QString devPluginsPath = QDir(AppContext::getWorkingDirectoryPath()+"/../../installer/windows").absolutePath();
     QCoreApplication::addLibraryPath(devPluginsPath); //dev version
@@ -86,7 +88,6 @@ int main(int argc, char **argv)
     SettingsImpl * settings = new SettingsImpl( QSettings::UserScope );
     appContext->setSettings( settings );
 
-
     AppSettings* appSettings = new AppSettingsImpl();
     appContext->setAppSettings(appSettings);
 
@@ -98,7 +99,7 @@ int main(int argc, char **argv)
     TaskSchedulerImpl* ts = new TaskSchedulerImpl(appSettings->getAppResourcePool());
     appContext->setTaskScheduler(ts);
 
-    PluginSupportImpl* psp = new PluginSupportImpl(true);
+    PluginSupportImpl* psp = new PluginSupportImpl();
     appContext->setPluginSupport(psp);
 
     ServiceRegistryImpl* sreg = new ServiceRegistryImpl() ;
diff --git a/src/ugene_globals.pri b/src/ugene_globals.pri
index 57f7899..74dd518 100644
--- a/src/ugene_globals.pri
+++ b/src/ugene_globals.pri
@@ -4,8 +4,6 @@ UGENE_GLOBALS_DEFINED=1
 
 DEFINES+=U2_DISTRIBUTION_INFO=$${U2_DISTRIBUTION_INFO}
 DEFINES+=UGENE_VERSION=$${UGENE_VERSION}
-DEFINES+=UGENE_MIN_VERSION_SQLITE=$${UGENE_MIN_VERSION_SQLITE}
-DEFINES+=UGENE_MIN_VERSION_MYSQL=$${UGENE_MIN_VERSION_MYSQL}
 DEFINES+=UGENE_VER_MAJOR=$${UGENE_VER_MAJOR}
 DEFINES+=UGENE_VER_MINOR=$${UGENE_VER_MINOR}
 DEFINES+=UGENE_VER_PATCH=$${UGENE_VER_PATCH}
@@ -131,16 +129,20 @@ defineTest( unix_not_mac ) {
 }
 
 
-#By default, UGENE uses bundled zlib (libs_3rdparty/zlib) on windows and mac os.
-#On any OS it can be forced using the following variable
-
-# UGENE_USE_BUNDLED_ZLIB = 1
+# By default, UGENE uses bundled zlib on Windows (libs_3rdparty/zlib) and OS version on Linux.
+# To use bundled version on any platform set UGENE_USE_BUNDLED_ZLIB = 1
 
 defineTest( use_bundled_zlib ) {
     contains( UGENE_USE_BUNDLED_ZLIB, 1 ) : return (true)
     contains( UGENE_USE_BUNDLED_ZLIB, 0 ) : return (false)
-    unix_not_mac() : return (false)
-    return (true)
+    win32 {
+        return (true)
+    }
+    return (false)
+}
+
+use_bundled_zlib() {
+    DEFINES+=UGENE_USE_BUNDLED_ZLIB
 }
 
 #Variable enabling exclude list for ugene modules
diff --git a/src/ugene_plugin_common.pri b/src/ugene_plugin_common.pri
index 37afb61..7111efe 100644
--- a/src/ugene_plugin_common.pri
+++ b/src/ugene_plugin_common.pri
@@ -5,35 +5,27 @@ include (ugene_lib_common.pri)
 
 UGENE_RELATIVE_DESTDIR = 'plugins'
 QT += network xml webkit svg
-LIBS += -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2View -lU2Test -lU2Remote -lU2Lang -lU2Designer
+LIBS += -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2View -lU2Test -lU2Lang -lU2Designer
 
 !debug_and_release|build_pass {
     CONFIG(debug, debug|release) {
         PLUGIN_ID=$$join(PLUGIN_ID, "", "", "d")
         DESTDIR=../../_debug/plugins
-        LIBS -= -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2View -lU2Test -lU2Remote -lU2Lang -lU2Designer
-        LIBS += -L../../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Guid -lU2Viewd -lU2Testd -lU2Remoted -lU2Langd -lU2Designerd
+        LIBS -= -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2View -lU2Test -lU2Lang -lU2Designer
+        LIBS += -L../../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Guid -lU2Viewd -lU2Testd -lU2Langd -lU2Designerd
     }
     CONFIG(release, debug|release) {
         DESTDIR=../../_release/plugins
     }
-    
-    # The directory 'plugins' must exist for plugin desc file   
-    unix {
-    !exists( $$CONFDIR/plugins/*.plugin ) {
-            system( mkdir $$CONFDIR/plugins )
-        }
-    }
-    
-    win32 {
-    !exists( $$CONFDIR/plugins/*.plugin ) {
-            system( mkdir $$CONFDIR\\plugins )
-        }
-    }
+
+    # Plugin output dir must exist before *.plugin/*.license files generation
+    mkpath($$OUT_PWD)
 
     include (./ugene_plugin_descriptor.pri)
 }
 
+DEFINES += PLUGIN_ID=\\\"$${PLUGIN_ID}\\\"
+
 win32 {
     QMAKE_MSVC_PROJECT_NAME=plugin_$${PLUGIN_ID}
     LIBS += psapi.lib
diff --git a/src/ugene_plugin_descriptor.pri b/src/ugene_plugin_descriptor.pri
index 41f5dc7..fd9be66 100644
--- a/src/ugene_plugin_descriptor.pri
+++ b/src/ugene_plugin_descriptor.pri
@@ -76,10 +76,10 @@ isEmpty(PLUGIN_MODE)  {
 
 !debug_and_release|build_pass {
     CONFIG(debug, debug|release) {
-        PLUGIN_DESC_FILE=_debug/plugins/$${PLUGIN_ID}.plugin
+        PLUGIN_DESC_FILE=$$OUT_PWD/../../_debug/plugins/$${PLUGIN_ID}.plugin
     }
     CONFIG(release, debug|release) {
-        PLUGIN_DESC_FILE=_release/plugins/$${PLUGIN_ID}.plugin
+        PLUGIN_DESC_FILE=$$OUT_PWD/../../_release/plugins/$${PLUGIN_ID}.plugin
     }
 }
 
@@ -128,12 +128,12 @@ PLUGIN_LICENSE_FILE=$$_PRO_FILE_PWD_/*.license
 PLUGIN_LICENSE_FILE_REP=$$replace(PLUGIN_LICENSE_FILE, "/","\\")
 !debug_and_release|build_pass {
     CONFIG(debug, debug|release) {
-        unix: system (cat $$PLUGIN_LICENSE_FILE > _debug/plugins/$${PLUGIN_ID}.license)
-        win32: system (copy /B $$PLUGIN_LICENSE_FILE_REP _debug\\plugins\\$${PLUGIN_ID}.license)
+        unix: system (cat $$PLUGIN_LICENSE_FILE > $$OUT_PWD/../../_debug/plugins/$${PLUGIN_ID}.license)
+        win32: system (copy /B $$PLUGIN_LICENSE_FILE_REP $$system_path($$OUT_PWD)\\..\\..\\_debug\\plugins\\$${PLUGIN_ID}.license)
     }
     CONFIG(release, debug|release) {
-        unix: system (cat $$PLUGIN_LICENSE_FILE > _release/plugins/$${PLUGIN_ID}.license)
-        win32: system (copy /B $$PLUGIN_LICENSE_FILE_REP _release\\plugins\\$${PLUGIN_ID}.license)
+        unix: system (cat $$PLUGIN_LICENSE_FILE > $$OUT_PWD/../../_release/plugins/$${PLUGIN_ID}.license)
+        win32: system (copy /B $$PLUGIN_LICENSE_FILE_REP $$system_path($$OUT_PWD)\\..\\..\\_release\\plugins\\$${PLUGIN_ID}.license)
     }
 }
 
diff --git a/src/ugene_version.pri b/src/ugene_version.pri
index 3f6d3c4..9e6e310 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.21.0
+UGENE_VERSION=1.23.1
 
 # minimum UGENE version whose SQLite databases are compatible with this version
 UGENE_MIN_VERSION_SQLITE=1.13.0
@@ -16,5 +16,5 @@ U2_DISTRIBUTION_INFO=sources
 
 # int version levels for executables
 UGENE_VER_MAJOR=1
-UGENE_VER_MINOR=21
-UGENE_VER_PATCH=0
+UGENE_VER_MINOR=23
+UGENE_VER_PATCH=1
diff --git a/src/ugenecl/CMakeLists.txt b/src/ugenecl/CMakeLists.txt
new file mode 100644
index 0000000..f35702a
--- /dev/null
+++ b/src/ugenecl/CMakeLists.txt
@@ -0,0 +1,25 @@
+cmake_minimum_required(VERSION 3.4)
+project(ugenecl)
+
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+find_package(Qt5 REQUIRED Core Gui)
+
+add_definitions(-DHI_EXCLUDED)
+
+include_directories(src)
+include_directories(../include)
+include_directories(../corelibs/U2Private/src)
+
+file(GLOB_RECURSE SRCS src/*.cpp)
+file(GLOB_RECURSE HDRS src/*.h)
+
+add_executable(ugenecl ${HDRS} ${SRCS})
+
+target_link_libraries(ugenecl
+        Qt5::Core Qt5::Gui
+        ugenedb breakpad samtools
+        U2Core U2Algorithm U2Formats U2Remote U2Lang U2Gui U2View U2Test)
+
diff --git a/src/ugenecl/src/Main.cpp b/src/ugenecl/src/Main.cpp
index c4bf951..55d5a0a 100644
--- a/src/ugenecl/src/Main.cpp
+++ b/src/ugenecl/src/Main.cpp
@@ -78,8 +78,6 @@
 #include <U2Lang/WorkflowEnvImpl.h>
 #include <U2Lang/WorkflowRunTask.h>
 
-#include <U2Remote/DistributedComputingUtil.h>
-
 #include <U2Test/GTestFrameworkComponents.h>
 #include <U2Test/TestRunnerTask.h>
 
@@ -195,6 +193,11 @@ int main(int argc, char **argv)
     if (CrashHandler::isEnabled()) {
         CrashHandler::setupHandler();
     }
+
+    if (qgetenv(ENV_SEND_CRASH_REPORTS) == "0") {
+        CrashHandler::setSendCrashReports(false);
+    }
+
     const char* build = QT_VERSION_STR, *runtime = qVersion();
     if (strcmp(build, runtime) > 0){
         printf("Installed Qt version must be %s or greater \r\n", QT_VERSION_STR);
@@ -340,7 +343,7 @@ int main(int argc, char **argv)
     DNAAlphabetRegistry* dal = new DNAAlphabetRegistryImpl(dtr);
     appContext->setDNAAlphabetRegistry(dal);
 
-    // unlike ugene's main.cpp we don't create ScriptManagerView, MSAColorSchemeRegistry
+    // unlike ugene's main.cpp we don't create ScriptManagerView, MsaColorSchemeRegistry
     DBXRefRegistry *dbxrr = new DBXRefRegistry();
     appContext->setDBXRefRegistry(dbxrr);
 
@@ -385,8 +388,6 @@ int main(int argc, char **argv)
     RecentlyDownloadedCache* rdc = new RecentlyDownloadedCache();
     appContext->setRecentlyDownloadedCache(rdc);
 
-    DistributedComputingUtil * distrUtil = new DistributedComputingUtil();
-
     VirtualFileSystemRegistry * vfsReg = new VirtualFileSystemRegistry();
     appContext->setVirtualFileSystemRegistry( vfsReg );
 
@@ -487,8 +488,6 @@ int main(int argc, char **argv)
 
     delete tsbc;
 
-    delete distrUtil;
-
     appContext->setCredentialsAsker(NULL);
     delete credentialsAsker;
 
diff --git a/src/ugenecl/ugenecl.pri b/src/ugenecl/ugenecl.pri
index a347c7c..2714c7d 100644
--- a/src/ugenecl/ugenecl.pri
+++ b/src/ugenecl/ugenecl.pri
@@ -14,7 +14,7 @@ CONFIG +=qt dll thread debug_and_release console
 DEFINES+= QT_DLL QT_FATAL_ASSERT
 INCLUDEPATH += src _tmp ../include ../corelibs/U2Private/src
 
-LIBS += -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2Test -lU2Remote -lU2Lang -lU2Private -lugenedb -lbreakpad -lhumimit
+LIBS += -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2Test -lU2Lang -lU2Private -lugenedb -lbreakpad -lhumimit
 if(exclude_list_enabled()|!exists( ../libs_3rdparty/QSpec/QSpec.pro )) {
     LIBS -= -lhumimit
 }
@@ -26,8 +26,8 @@ if(exclude_list_enabled()|!exists( ../libs_3rdparty/QSpec/QSpec.pro )) {
         DESTDIR=../_debug
         MOC_DIR=_tmp/moc/debug
         OBJECTS_DIR=_tmp/obj/debug
-        LIBS -= -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2Test -lU2Remote -lU2Lang -lU2Private -lugenedb -lbreakpad -lhumimit
-        LIBS += -L../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Guid -lU2Testd -lU2Remoted -lU2Langd -lU2Privated -lugenedbd -lbreakpadd -lhumimitd
+        LIBS -= -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2Test -lU2Lang -lU2Private -lugenedb -lbreakpad -lhumimit
+        LIBS += -L../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Guid -lU2Testd -lU2Langd -lU2Privated -lugenedbd -lbreakpadd -lhumimitd
         if(exclude_list_enabled()|!exists( ../libs_3rdparty/QSpec/QSpec.pro )) {
             LIBS -= -lhumimitd
         }
diff --git a/src/ugenem/src/DetectWin10.cpp b/src/ugenem/src/DetectWin10.cpp
new file mode 100644
index 0000000..ccafaf3
--- /dev/null
+++ b/src/ugenem/src/DetectWin10.cpp
@@ -0,0 +1,103 @@
+/**
+ * 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 "DetectWin10.h"
+
+#include <QScopedArrayPointer>
+
+#if defined (Q_OS_WIN)
+
+bool DetectWindowsVersion::isWindows10() {
+    OSVERSIONINFO osver;
+    detectWinVersion(&osver);
+    return osver.dwMajorVersion == 10 && osver.dwMinorVersion == 0;
+}
+
+QString DetectWindowsVersion::getVersionString() {
+    OSVERSIONINFO osver;
+    detectWinVersion(&osver);
+    return QString::number(osver.dwMajorVersion) + "." + QString::number(osver.dwMinorVersion);
+}
+
+void DetectWindowsVersion::detectWinVersion(OSVERSIONINFO *osver) {
+    if (!determineWinOsVersionPost8(osver)) {
+        determineWinOsVersionFallbackPost8(osver);
+    }
+}
+
+// Determine Windows versions >= 8 by querying the version of kernel32.dll.
+bool DetectWindowsVersion::determineWinOsVersionPost8(OSVERSIONINFO *result) {
+    typedef WORD(WINAPI* PtrGetFileVersionInfoSizeW)(LPCWSTR, LPDWORD);
+    typedef BOOL(WINAPI* PtrVerQueryValueW)(LPCVOID, LPCWSTR, LPVOID, PUINT);
+    typedef BOOL(WINAPI* PtrGetFileVersionInfoW)(LPCWSTR, DWORD, DWORD, LPVOID);
+
+    QSystemLibrary versionLib(QStringLiteral("version"));
+    if (!versionLib.load())
+        return false;
+    PtrGetFileVersionInfoSizeW getFileVersionInfoSizeW = (PtrGetFileVersionInfoSizeW)versionLib.resolve("GetFileVersionInfoSizeW");
+    PtrVerQueryValueW verQueryValueW = (PtrVerQueryValueW)versionLib.resolve("VerQueryValueW");
+    PtrGetFileVersionInfoW getFileVersionInfoW = (PtrGetFileVersionInfoW)versionLib.resolve("GetFileVersionInfoW");
+    if (!getFileVersionInfoSizeW || !verQueryValueW || !getFileVersionInfoW)
+        return false;
+
+    const wchar_t kernel32Dll[] = L"kernel32.dll";
+    DWORD handle;
+    const DWORD size = getFileVersionInfoSizeW(kernel32Dll, &handle);
+    if (!size)
+        return false;
+    QScopedArrayPointer<BYTE> versionInfo(new BYTE[size]);
+    if (!getFileVersionInfoW(kernel32Dll, handle, size, versionInfo.data()))
+        return false;
+    UINT uLen;
+    VS_FIXEDFILEINFO *fileInfo = Q_NULLPTR;
+    if (!verQueryValueW(versionInfo.data(), L"\\", (LPVOID *)&fileInfo, &uLen))
+        return false;
+    const DWORD fileVersionMS = fileInfo->dwFileVersionMS;
+    const DWORD fileVersionLS = fileInfo->dwFileVersionLS;
+    result->dwMajorVersion = HIWORD(fileVersionMS);
+    result->dwMinorVersion = LOWORD(fileVersionMS);
+    result->dwBuildNumber = HIWORD(fileVersionLS);
+    return true;
+}
+
+// Fallback for determining Windows versions >= 8 by looping using the
+// version check macros. Note that it will return build number=0 to avoid
+// inefficient looping.
+void DetectWindowsVersion::determineWinOsVersionFallbackPost8(OSVERSIONINFO *result) {
+    result->dwBuildNumber = 0;
+    DWORDLONG conditionMask = 0;
+    VER_SET_CONDITION(conditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
+    VER_SET_CONDITION(conditionMask, VER_PLATFORMID, VER_EQUAL);
+    OSVERSIONINFOEX checkVersion = { sizeof(OSVERSIONINFOEX), result->dwMajorVersion, 0,
+        result->dwBuildNumber, result->dwPlatformId, { '\0' }, 0, 0, 0, 0, 0 };
+    for (; VerifyVersionInfo(&checkVersion, VER_MAJORVERSION | VER_PLATFORMID, conditionMask); ++checkVersion.dwMajorVersion)
+        result->dwMajorVersion = checkVersion.dwMajorVersion;
+    conditionMask = 0;
+    checkVersion.dwMajorVersion = result->dwMajorVersion;
+    checkVersion.dwMinorVersion = 0;
+    VER_SET_CONDITION(conditionMask, VER_MAJORVERSION, VER_EQUAL);
+    VER_SET_CONDITION(conditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);
+    VER_SET_CONDITION(conditionMask, VER_PLATFORMID, VER_EQUAL);
+    for (; VerifyVersionInfo(&checkVersion, VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID, conditionMask); ++checkVersion.dwMinorVersion)
+        result->dwMinorVersion = checkVersion.dwMinorVersion;
+}
+
+#endif
diff --git a/src/ugenem/src/DetectWin10.h b/src/ugenem/src/DetectWin10.h
new file mode 100644
index 0000000..825ea53
--- /dev/null
+++ b/src/ugenem/src/DetectWin10.h
@@ -0,0 +1,92 @@
+/**
+ * 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 _DETECT_WIN_10_H_
+#define _DETECT_WIN_10_H_
+
+#include <QString>
+
+#if defined (Q_OS_WIN)
+
+#include <windows.h>
+#include <winnt.h>
+
+class DetectWindowsVersion {
+public:
+    static bool isWindows10();
+    static QString getVersionString();
+private:
+    static void detectWinVersion(OSVERSIONINFO *osver);
+    static bool determineWinOsVersionPost8(OSVERSIONINFO *result);
+    static void determineWinOsVersionFallbackPost8(OSVERSIONINFO *result);
+};
+
+//QT class copied from 5.4.0 for WIN 10 correct detection
+class QSystemLibrary {
+public:
+    explicit QSystemLibrary(const QString &libraryName) {
+        m_libraryName = libraryName;
+        m_handle = 0;
+        m_didLoad = false;
+    }
+
+    explicit QSystemLibrary(const wchar_t *libraryName) {
+        m_libraryName = QString::fromWCharArray(libraryName);
+        m_handle = 0;
+        m_didLoad = false;
+    }
+
+    bool load(bool onlySystemDirectory = true) {
+        m_handle = load((const wchar_t *)m_libraryName.utf16(), onlySystemDirectory);
+        m_didLoad = true;
+        return (m_handle != 0);
+    }
+
+    bool isLoaded() {
+        return (m_handle != 0);
+    }
+
+    QFunctionPointer resolve(const char *symbol) {
+        if (!m_didLoad)
+            load();
+        if (!m_handle)
+            return 0;
+#ifdef Q_OS_WINCE
+        return QFunctionPointer(GetProcAddress(m_handle, (const wchar_t*)QString::fromLatin1(symbol).utf16()));
+#else
+        return QFunctionPointer(GetProcAddress(m_handle, symbol));
+#endif
+    }
+
+    static QFunctionPointer resolve(const QString &libraryName, const char *symbol) {
+        return QSystemLibrary(libraryName).resolve(symbol);
+    }
+
+    static Q_CORE_EXPORT HINSTANCE load(const wchar_t *lpFileName, bool onlySystemDirectory = true);
+private:
+    HINSTANCE m_handle;
+    QString m_libraryName;
+    bool m_didLoad;
+};
+
+#endif
+
+#endif
diff --git a/src/ugenem/src/SendReportDialog.cpp b/src/ugenem/src/SendReportDialog.cpp
index 3474cf9..60a29da 100644
--- a/src/ugenem/src/SendReportDialog.cpp
+++ b/src/ugenem/src/SendReportDialog.cpp
@@ -1,23 +1,23 @@
 /**
- * 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.
- */
+* 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 <qglobal.h>
 
@@ -26,6 +26,8 @@
 #include <windows.h>
 #include <Psapi.h>
 #include <Winbase.h> //for IsProcessorFeaturePresent
+
+#include "DetectWin10.h"
 #endif
 #if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
 #include <unistd.h> // for sysconf(3)
@@ -73,7 +75,7 @@ void ReportSender::parse(const QString &htmlReport, const QString &dumpUrl) {
     report = "Exception with code ";
 
     QStringList list = htmlReport.split("|");
-    if (list.size() == 8) {
+    if (list.size() == 9) {
         report += list.takeFirst() + " - ";
         report += list.takeFirst() + "\n\n";
 
@@ -105,6 +107,8 @@ void ReportSender::parse(const QString &htmlReport, const QString &dumpUrl) {
 #else
         report += list.takeFirst() + getUgeneBitCount() + "\n\n";
 #endif
+        report += "UUID: ";
+        report += list.takeFirst() + "\n\n";
 
         report += "ActiveWindow: ";
         report += list.takeFirst() + "\n\n";
@@ -140,13 +144,13 @@ void ReportSender::parse(const QString &htmlReport, const QString &dumpUrl) {
     }
 
     QFile fp("/tmp/UGENEstacktrace.txt");
-    if(fp.open(QIODevice::ReadOnly)) {
+    if (fp.open(QIODevice::ReadOnly)) {
         QByteArray stacktrace = fp.readAll();
         report += "Stack trace:\n";
         report += stacktrace.data();
-        if(stacktrace.isEmpty()) {
+        if (stacktrace.isEmpty()) {
             QFile err("/tmp/UGENEerror");
-            if(err.open(QIODevice::ReadOnly)) {
+            if (err.open(QIODevice::ReadOnly)) {
                 stacktrace = err.readAll();
                 report += stacktrace.data();
                 err.close();
@@ -159,8 +163,8 @@ void ReportSender::parse(const QString &htmlReport, const QString &dumpUrl) {
 bool ReportSender::send(const QString &additionalInfo, const QString &dumpUrl) {
     report += additionalInfo;
 
-    QNetworkAccessManager* netManager=new QNetworkAccessManager(this);
-    QNetworkProxy proxy = QNetworkProxy::applicationProxy ();
+    QNetworkAccessManager* netManager = new QNetworkAccessManager(this);
+    QNetworkProxy proxy = QNetworkProxy::applicationProxy();
     netManager->setProxy(proxy);
 
     connect(netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(sl_replyFinished(QNetworkReply*)));
@@ -218,15 +222,14 @@ void ReportSender::sl_replyFinished(QNetworkReply *) {
 }
 
 SendReportDialog::SendReportDialog(const QString &report, const QString &dumpUrl, QDialog *d) :
-    QDialog(d),
-    dumpUrl(dumpUrl)
-{
+QDialog(d),
+dumpUrl(dumpUrl) {
     setupUi(this);
     sender.parse(report, dumpUrl);
     errorEdit->setText(sender.getReport());
 
-    connect(additionalInfoTextEdit,SIGNAL(textChanged()),
-            SLOT(sl_onMaximumMessageSizeReached()));
+    connect(additionalInfoTextEdit, SIGNAL(textChanged()),
+        SLOT(sl_onMaximumMessageSizeReached()));
     connect(sendButton, SIGNAL(clicked()), SLOT(sl_onOkClicked()));
     connect(cancelButton, SIGNAL(clicked()), SLOT(sl_onCancelClicked()));
 
@@ -245,12 +248,12 @@ void SendReportDialog::sl_onCancelClicked() {
 }
 
 void SendReportDialog::sl_onMaximumMessageSizeReached() {
-    if(additionalInfoTextEdit->toPlainText().length() > 500 ) {
+    if (additionalInfoTextEdit->toPlainText().length() > 500) {
         QMessageBox msgBox;
         msgBox.setWindowTitle(tr("Warning"));
         msgBox.setText(tr("The \"Additional information\" message is too long."));
         msgBox.setInformativeText(tr("You can also send the description of the problem to UGENE team "
-                                     "by e-mail <a href=\"mailto:ugene at unipro.ru\">ugene at unipro.ru</a>."));
+            "by e-mail <a href=\"mailto:ugene at unipro.ru\">ugene at unipro.ru</a>."));
         msgBox.setStandardButtons(QMessageBox::Ok);
         msgBox.setDefaultButton(QMessageBox::Ok);
         msgBox.exec();
@@ -304,12 +307,12 @@ void SendReportDialog::sl_onOkClicked() {
     cancelButton->setEnabled(false);
     checkBox->setEnabled(false);
     QString htmlReport = "";
-    if(!emailLineEdit->text().isEmpty()) {
+    if (!emailLineEdit->text().isEmpty()) {
         htmlReport += "\nUser email: ";
         htmlReport += emailLineEdit->text() + "\n";
     }
 
-    if(!additionalInfoTextEdit->toPlainText().isEmpty()) {
+    if (!additionalInfoTextEdit->toPlainText().isEmpty()) {
         htmlReport += "\nAdditional info: \n";
         htmlReport += additionalInfoTextEdit->toPlainText() + "\n";
     }
@@ -322,7 +325,6 @@ void SendReportDialog::sl_onOkClicked() {
     accept();
 }
 
-
 QString ReportSender::getOSVersion() {
     QString result;
 #if defined(Q_OS_WIN32)
@@ -358,13 +360,15 @@ QString ReportSender::getOSVersion() {
     case QSysInfo::WV_WINDOWS7:
         result += "7, Server 2008 R2 (operating system version 6.1)";
         break;
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
     case QSysInfo::WV_WINDOWS8:
         result += "8 (operating system version 6.2)";
         break;
-#endif
     default:
-        result += "unknown";
+        if (DetectWindowsVersion::isWindows10()) {
+            result += "10 (operating system version 10)";
+        } else {
+            result += QString("unknown (operating system version %1)").arg(DetectWindowsVersion::getVersionString());
+        }
         break;
     }
 
@@ -429,24 +433,24 @@ int ReportSender::getTotalPhysicalMemory() {
 #ifndef Q_OS_MAC
 void cpuID(unsigned i, unsigned regs[4]) {
 #ifdef _WIN32
-  __cpuid((int *)regs, (int)i);
+    __cpuid((int *)regs, (int)i);
 
 #else
 #if !defined(UGENE_X86_64) && defined(__PIC__)
-  asm volatile (
-    "mov %%ebx, %%edi;"
-    "cpuid;"
-    "xchgl %%ebx, %%edi;"
-    : "=a" (regs[0]) ,
-      "=D" (regs[1]) , /* edi */
-      "=c" (regs[2]) ,
-      "=d" (regs[3])
-    : "0" (i)) ;
+    asm volatile (
+        "mov %%ebx, %%edi;"
+        "cpuid;"
+        "xchgl %%ebx, %%edi;"
+        : "=a" (regs[0]),
+        "=D" (regs[1]), /* edi */
+        "=c" (regs[2]),
+        "=d" (regs[3])
+        : "0" (i));
 #else
-  asm volatile
-    ("cpuid" : "=a" (regs[0]), "=b" (regs[1]), "=c" (regs[2]), "=d" (regs[3])
-     : "a" (i), "c" (0));
-  // ECX is set to zero for CPUID function 4
+    asm volatile
+        ("cpuid" : "=a" (regs[0]), "=b" (regs[1]), "=c" (regs[2]), "=d" (regs[3])
+        : "a" (i), "c" (0));
+    // ECX is set to zero for CPUID function 4
 #endif
 #endif
 }
@@ -463,8 +467,8 @@ QString ReportSender::getCPUInfo() {
     ((unsigned *)vendor)[0] = regs[1]; // EBX
     ((unsigned *)vendor)[1] = regs[3]; // EDX
     ((unsigned *)vendor)[2] = regs[2]; // ECX
-    QString cpuVendor=QString(vendor);
-    result+= "\n  Vendor :"+ cpuVendor;
+    QString cpuVendor = QString(vendor);
+    result += "\n  Vendor :" + cpuVendor;
 
     // Get CPU features
     cpuID(1, regs);
@@ -474,28 +478,28 @@ QString ReportSender::getCPUInfo() {
     cpuID(1, regs);
     unsigned logical = (regs[1] >> 16) & 0xff; // EBX[23:16]
 
-    result+= "\n  logical cpus: " + QString::number(logical);
+    result += "\n  logical cpus: " + QString::number(logical);
     unsigned cores = 0;
 
     if (cpuVendor.contains("GenuineIntel")) {
-      // Get DCP cache info
-      cpuID(4, regs);
-      cores = ((regs[0] >> 26) & 0x3f) + 1; // EAX[31:26] + 1
+        // Get DCP cache info
+        cpuID(4, regs);
+        cores = ((regs[0] >> 26) & 0x3f) + 1; // EAX[31:26] + 1
 
     } else if (cpuVendor.contains("AuthenticAMD")) {
-      // Get NC: Number of CPU cores - 1
-      cpuID(0x80000008, regs);
-      cores = ((unsigned)(regs[2] & 0xff)) + 1; // ECX[7:0] + 1
+        // Get NC: Number of CPU cores - 1
+        cpuID(0x80000008, regs);
+        cores = ((unsigned)(regs[2] & 0xff)) + 1; // ECX[7:0] + 1
     }
 
-    result+= "\n  cpu cores: " + QString::number(cores);
+    result += "\n  cpu cores: " + QString::number(cores);
 
     // Detect hyper-threads..
     bool hyperThreads = cpuFeatures & (1 << 28) && cores < logical;
 
-    result+= "\n  hyper-threads: " + QString(hyperThreads ? "true" : "false");
+    result += "\n  hyper-threads: " + QString(hyperThreads ? "true" : "false");
 #else
-    result="unknown";
+    result = "unknown";
 #endif
     return result;
 }
diff --git a/src/ugenem/src/SendReportDialog.h b/src/ugenem/src/SendReportDialog.h
index fe8e938..8b97960 100644
--- a/src/ugenem/src/SendReportDialog.h
+++ b/src/ugenem/src/SendReportDialog.h
@@ -23,19 +23,19 @@
 #define _SEND_REPORT_DIALOG_H_
 
 
-#include <ui/ui_SendReportDialog.h>
+#include <ui_SendReportDialog.h>
 
 class QEventLoop;
 class QNetworkReply;
 
-class ReportSender:public QObject {
+class ReportSender :public QObject {
     Q_OBJECT
 public:
     ReportSender(bool addGuiTestInfo = false);
     void parse(const QString &str, const QString &dumpUrl);
     bool send(const QString &additionalInfo, const QString &dumpUrl);
     QString getOSVersion();
-    QString getReport() const {return report;}
+    QString getReport() const { return report; }
     int getTotalPhysicalMemory();
     QString getCPUInfo();
     QString getUgeneBitCount() const;
@@ -51,7 +51,7 @@ private:
     QString failedTest;
 };
 
-class SendReportDialog:public QDialog, public Ui_Dialog {
+class SendReportDialog :public QDialog, public Ui_Dialog {
     Q_OBJECT
 public:
     SendReportDialog(const QString &report, const QString &dumpUrl, QDialog *d = NULL);
@@ -71,6 +71,4 @@ private:
     const QString dumpUrl;
 };
 
-
-
 #endif
diff --git a/src/ugenem/ugenem.pro b/src/ugenem/ugenem.pro
index 21a5f92..a8a880c 100644
--- a/src/ugenem/ugenem.pro
+++ b/src/ugenem/ugenem.pro
@@ -49,12 +49,14 @@ unix {
 
 unix_not_mac() : LIBS += -lX11
 
-HEADERS += src/SendReportDialog.h \
-           src/Utils.h
+HEADERS += src/DetectWin10.h \
+           src/SendReportDialog.h \
+           src/Utils.h 
 
 FORMS += src/ui/SendReportDialog.ui
 
-SOURCES += src/main.cpp \
+SOURCES += src/DetectWin10.cpp \
+           src/main.cpp \
            src/SendReportDialog.cpp \
            src/Utils.cpp \
            src/getMemorySize.c
diff --git a/src/ugeneui/CMakeLists.txt b/src/ugeneui/CMakeLists.txt
new file mode 100644
index 0000000..4e2e452
--- /dev/null
+++ b/src/ugeneui/CMakeLists.txt
@@ -0,0 +1,30 @@
+cmake_minimum_required(VERSION 3.4)
+project(ugeneui)
+
+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 Script Svg WebKit WebKitWidgets LinguistTools)
+
+add_definitions(-DHI_EXCLUDED)
+
+include_directories(src)
+include_directories(../include)
+include_directories(../corelibs/U2Private/src)
+
+file(GLOB_RECURSE SRCS src/*.cpp)
+file(GLOB_RECURSE HDRS src/*.h)
+file(GLOB TS_FILES transl/*.ts)
+
+qt5_add_translation(QM_FILES ${TS_FILES})
+qt5_add_resources(RCC_SRCS ugeneui.qrc)
+
+add_executable(ugeneui ${HDRS} ${SRCS} ${QM_FILES} ${RCC_SRCS})
+
+target_link_libraries(ugeneui
+        Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml Qt5::Network Qt5::Script Qt5::WebKit Qt5::WebKitWidgets
+        ugenedb breakpad samtools
+        U2Core U2Algorithm U2Formats U2Remote U2Lang U2Gui U2View U2Test)
+
diff --git a/src/ugeneui/html/version_news.html b/src/ugeneui/html/version_news.html
index b8099eb..342e977 100644
--- a/src/ugeneui/html/version_news.html
+++ b/src/ugeneui/html/version_news.html
@@ -1,71 +1,81 @@
-<!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>
- 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.
--->
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-    <link rel="stylesheet" type="text/css" href="qrc:javascript/bootstrap/css/bootstrap.min.css"/>
-    <style>
-        * {
-            text-indent: 20px;
-        }
-        h3 {
-            margin-bottom: 25px;
-        }
-        .features_list li {
-            margin-bottom: 14px;
-            list-style-type: square;
-            list-style-position: inside;
-        }
-        .features_list li:last-child {
-            margin-bottom: 0;
-        }
-        .sub_features_list li {
-            margin-top: 4px;
-            margin-bottom: 4px;
-            margin-left: -6px;
-            list-style-type: none;
-        }
-        .sub_features_list li:before {
-            content: "- ";
-        }
-        .research_field {
-            font-style: italic;
-            font-weight: bold;
-            margin-right: 1px;
-        }
-    </style>
-</head>
-<body>
-<div>
-    <h3 lang="en">Сhanges in UGENE 1.21</h3>
-    <h3 lang="ru">Изменения в UGENE 1.21</h3>
-    <ul class="features_list" lang="en">
-        <li>Enhancement of the clipboard support in the Sequence View and the Alignment Editor.</li>
-        <li>Bug fixes and minor interface improvements.</li>
-    </ul>
-    <ul class="features_list" lang="ru">
-        <li>Поддержка более удобной работы с буфером обмена в редакторе последовательностей и редакторе множественных выравниваний.</li>
-        <li>Исправление ошибок и улучшение графического интерфейса программы.</li>
-    </ul>
-    <p lang="en">For details see <a href="http://ugene.net/50-whats-new-in-ugene-1-20-1-21/">video about UGENE 1.20 and 1.21 versions</a>.</p>
-    <p lang="ru">Обзор изменений в версиях UGENE 1.20 и 1.21 можно посмотреть в следующем <a href="http://ugene.net/ru/50-whats-new-in-ugene-1-20-1-21/">видео</a>.</p>
-</div>
-</body>
+<!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>
+ 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.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta charset="utf-8">
+    <link rel="stylesheet" type="text/css" href="qrc:///javascript/bootstrap/css/bootstrap.min.css"/>
+    <style>
+        h3 {
+            margin-bottom: 25px;
+        }
+        .features_list li {
+            margin-bottom: 14px;
+            list-style-type: square;
+        }
+        .features_list li:last-child {
+            margin-bottom: 0;
+        }
+        .sub_features_list li {
+            margin-top: 4px;
+            margin-bottom: 4px;
+            margin-left: -6px;
+            list-style-type: none;
+        }
+        .sub_features_list li:before {
+            content: "- ";
+        }
+        .research_field {
+            font-style: italic;
+            font-weight: bold;
+            margin-right: 1px;
+        }
+    </style>
+</head>
+<body>
+<div>
+    <h3 lang="en">Major changes in UGENE 1.23</h3>
+    <ul class="features_list" lang="en">
+        <li><span class="research_field">Auto-update:</span> there is no need to download a new version manually anymore. As soon as the new version released, UGENE will ask your permission to update and with your consent the program will be updated automatically.</li>
+        <li>Performance:
+            <ul class="sub_features_list">
+                <li>Opening of large Genbank files was improved.</li>
+                <li>The visualisation of restriction sites was improved.</li>
+            </ul>
+        </li>
+        <li>Minor interface improvements and bug fixes.</li>
+    </ul>
+    <p lang="en">For details see <a href="https://youtu.be/viDH3EgXvO0">the video</a> about UGENE 1.22 and 1.23 versions.</p>
+
+    <h3 lang="ru">Изменения в UGENE 1.23</h3>
+    <ul class="features_list" lang="ru">
+        <li><span class="research_field">Авто-обновление:</span> больше не нужно скачивать новую версию вручную. Как только новая версия будет доступна, UGENE предложит Вам обновить программу. С Вашего согласия UGENE будет автоматически обновлен.</li>
+        <li>Производительность:
+            <ul class="sub_features_list">
+                <li>Большие файлы Genbank открываются быстрее.</li>
+                <li>Ускорен процесс отрисовки сайтов рестрикции.</li>
+            </ul>
+        </li>
+        <li>Небольшие улучшения графического интерфейса и исправление ошибок.</li>
+    </ul>
+    <p lang="ru">Обзор изменений в версиях программы 1.22 и 1.23 можно посмотреть в следующем <a href="https://youtu.be/viDH3EgXvO0">видео</a>.</p>
+</div>
+</body>
diff --git a/src/ugeneui/html/welcome_page.css b/src/ugeneui/html/welcome_page.css
index 167df1b..3b58edc 100644
--- a/src/ugeneui/html/welcome_page.css
+++ b/src/ugeneui/html/welcome_page.css
@@ -131,7 +131,7 @@ html, body {
 .stripped_line {
     height: 31px;
     width: 100%;
-    background: url("qrc:ugene/images/welcome_page/line.png");
+    background: url("qrc:///ugene/images/welcome_page/line.png");
     vertical-align: top;
 }
 
diff --git a/src/ugeneui/html/welcome_page.html b/src/ugeneui/html/welcome_page.html
index e069eb8..1743139 100644
--- a/src/ugeneui/html/welcome_page.html
+++ b/src/ugeneui/html/welcome_page.html
@@ -21,11 +21,12 @@
 <!DOCTYPE html>
 <html>
 <head>
+    <meta charset="utf-8">
     <title>Welcome to UGENE</title>
-    <link rel="stylesheet" type="text/css" href="qrc:javascript/bootstrap/css/bootstrap.min.css"/>
-    <link rel="stylesheet" type="text/css" href="qrc:ugene/html/welcome_page.css">
-    <script type="text/javascript" src="qrc:javascript/jquery/jquery.js"></script>
-    <script type="text/javascript" src="qrc:javascript/bootstrap/js/bootstrap.js"></script>
+    <link rel="stylesheet" type="text/css" href="qrc:///javascript/bootstrap/css/bootstrap.min.css" />
+    <link rel="stylesheet" type="text/css" href="qrc:///ugene/html/welcome_page.css">
+    <script type="text/javascript" src="qrc:///javascript/jquery/jquery.js"></script>
+    <script type="text/javascript" src="qrc:///javascript/bootstrap/js/bootstrap.js"></script>
 </head>
 <body>
     <table class="main_table">
@@ -45,7 +46,7 @@
                             <div class="button_block">
                                 <a href="#" onclick="ugene.performAction('load_data')">
                                     <div class="button_image">
-                                        <img align="middle" src="qrc:ugene/images/welcome_page/welcome_btn_open.png"/>
+                                        <img align="middle" src="qrc:///ugene/images/welcome_page/welcome_btn_open.png" />
                                     </div>
                                     <div class="button_caption">
                                         <span lang="en">Open File(s)</span>
@@ -58,7 +59,7 @@
                             <div class="button_block">
                                 <a href="#" onclick="ugene.performAction('create_sequence')">
                                     <div class="button_image">
-                                        <img src="qrc:ugene/images/welcome_page/welcome_btn_create_seq.png"/>
+                                        <img src="qrc:///ugene/images/welcome_page/welcome_btn_create_seq.png" />
                                     </div>
                                     <div class="button_caption">
                                         <span lang="en">Create Sequence</span>
@@ -73,7 +74,7 @@
                             <div class="button_block">
                                 <a href="#" onclick="ugene.performAction('create_workflow')">
                                     <div class="button_image">
-                                        <img src="qrc:ugene/images/welcome_page/welcome_btn_workflow.png"/>
+                                        <img src="qrc:///ugene/images/welcome_page/welcome_btn_workflow.png" />
                                     </div>
                                     <div class="button_caption">
                                         <span lang="en">Create Workflow</span>
@@ -86,7 +87,7 @@
                             <div class="button_block">
                                 <a href="#" onclick="ugene.openUrl('quick_start')">
                                     <div class="button_image">
-                                        <img src="qrc:ugene/images/welcome_page/welcome_btn_help.png"/>
+                                        <img src="qrc:///ugene/images/welcome_page/welcome_btn_help.png" />
                                     </div>
                                     <div class="button_caption">
                                         <span lang="en">Quick Start Guide</span>
@@ -147,28 +148,28 @@
                             </div>
                             <div class="footer_content">
                                 <div class="social_icon">
-                                    <a href="#" onclick="ugene.openUrl('facebook')"><img src="qrc:ugene/images/welcome_page/social_icon_facebook.png"/></a>
+                                    <a href="#" onclick="ugene.openUrl('facebook')"><img src="qrc:///ugene/images/welcome_page/social_icon_facebook.png" /></a>
                                 </div>
                                 <div class="social_icon">
-                                    <a href="#" onclick="ugene.openUrl('twitter')"><img src="qrc:ugene/images/welcome_page/social_icon_twitter.png"/></a>
+                                    <a href="#" onclick="ugene.openUrl('twitter')"><img src="qrc:///ugene/images/welcome_page/social_icon_twitter.png" /></a>
                                 </div>
                                 <div class="social_icon">
-                                    <a href="#" onclick="ugene.openUrl('linkedin')"><img src="qrc:ugene/images/welcome_page/social_icon_linkedin.png"/></a>
+                                    <a href="#" onclick="ugene.openUrl('linkedin')"><img src="qrc:///ugene/images/welcome_page/social_icon_linkedin.png" /></a>
                                 </div>
                                 <div class="social_icon">
-                                    <a href="#" onclick="ugene.openUrl('google_plus')"><img src="qrc:ugene/images/welcome_page/social_icon_google_plus.png"/></a>
+                                    <a href="#" onclick="ugene.openUrl('google_plus')"><img src="qrc:///ugene/images/welcome_page/social_icon_google_plus.png" /></a>
                                 </div>
                                 <div class="social_icon">
-                                    <a href="#" onclick="ugene.openUrl('youtube')"><img src="qrc:ugene/images/welcome_page/social_icon_youtube.png"/></a>
+                                    <a href="#" onclick="ugene.openUrl('youtube')"><img src="qrc:///ugene/images/welcome_page/social_icon_youtube.png" /></a>
                                 </div>
                                 <div class="social_icon">
-                                    <a href="#" onclick="ugene.openUrl('vkontakte')"><img src="qrc:ugene/images/welcome_page/social_icon_vkontakte.png"/></a>
+                                    <a href="#" onclick="ugene.openUrl('vkontakte')"><img src="qrc:///ugene/images/welcome_page/social_icon_vkontakte.png" /></a>
                                 </div>
                                 <div class="social_icon">
-                                    <a href="#" onclick="ugene.openUrl('mendeley')"><img src="qrc:ugene/images/welcome_page/social_icon_mendeley.png"/></a>
+                                    <a href="#" onclick="ugene.openUrl('mendeley')"><img src="qrc:///ugene/images/welcome_page/social_icon_mendeley.png" /></a>
                                 </div>
                                 <div class="social_icon">
-                                    <a href="#" onclick="ugene.openUrl('rss')"><img src="qrc:ugene/images/welcome_page/social_icon_rss.png"/></a>
+                                    <a href="#" onclick="ugene.openUrl('rss')"><img src="qrc:///ugene/images/welcome_page/social_icon_rss.png" /></a>
                                 </div>
                             </div>
                         </td>
diff --git a/src/ugeneui/src/Main.cpp b/src/ugeneui/src/Main.cpp
index ba5891e..f06c0c8 100644
--- a/src/ugeneui/src/Main.cpp
+++ b/src/ugeneui/src/Main.cpp
@@ -30,10 +30,11 @@
 #include <U2Algorithm/CudaGpuRegistry.h>
 #include <U2Algorithm/DnaAssemblyAlgRegistry.h>
 #include <U2Algorithm/GenomeAssemblyRegistry.h>
-#include <U2Algorithm/MSAColorScheme.h>
 #include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
 #include <U2Algorithm/MSADistanceAlgorithmRegistry.h>
 #include <U2Algorithm/MolecularSurfaceFactoryRegistry.h>
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
 #include <U2Algorithm/OpenCLGpuRegistry.h>
 #include <U2Algorithm/PWMConversionAlgorithmRegistry.h>
 #include <U2Algorithm/PhyTreeGeneratorRegistry.h>
@@ -85,12 +86,12 @@
 #include <U2Gui/FeatureKeyFilterTask.h>
 #include <U2Gui/ImportDialogsFactories.h>
 #include <U2Gui/LogView.h>
-#include <U2Gui/PasteController.h>
 #include <U2Gui/MsaContentFilterTask.h>
 #include <U2Gui/MsaSeqNameFilterTask.h>
 #include <U2Gui/OPWidgetFactoryRegistry.h>
 #include <U2Gui/ObjectNameFilterTask.h>
 #include <U2Gui/ObjectViewModel.h>
+#include <U2Gui/PasteController.h>
 #include <U2Gui/SequenceAccFilterTask.h>
 #include <U2Gui/TextContentFilterTask.h>
 #include <U2Gui/ToolsMenu.h>
@@ -100,8 +101,6 @@
 #include <U2Lang/WorkflowEnvImpl.h>
 #include <U2Lang/WorkflowSettings.h>
 
-#include <U2Remote/DistributedComputingUtil.h>
-
 #include <U2Test/GTestFrameworkComponents.h>
 #ifndef HI_EXCLUDED
 #include <U2Test/UGUITestBase.h>
@@ -147,6 +146,7 @@
 #include "project_view/ProjectViewImpl.h"
 #include "shtirlitz/Shtirlitz.h"
 #include "task_view/TaskViewController.h"
+#include "update/UgeneUpdater.h"
 #include "welcome_page/WelcomePageController.h"
 
 using namespace U2;
@@ -204,7 +204,7 @@ static void initLogsCache(LogCacheExt& logsCache, const QStringList& ) {
     QString consoleOutVal = qgetenv("UGENE_PRINT_TO_CONSOLE");
     logsCache.setConsoleOutputEnabled(consoleOutVal == "true" || consoleOutVal == "1");
 #endif
-    QString file = qgetenv("UGENE_PRINT_TO_FILE");
+    QString file = qgetenv(U2_PRINT_TO_FILE);
     if (!file.isEmpty()) {
         logsCache.setFileOutputEnabled(file);
         return;
@@ -413,12 +413,16 @@ int main(int argc, char **argv)
         trOK = translator.load(QString("transl_") + envTranslation, AppContext::getWorkingDirectoryPath());
         settings->setValue("UGENE_CURR_TRANSL", envTranslation);
     }
+    QString envTranslationFile = findKey(envList, "UGENE_TRANSLATION_FILE");
+    if (!envTranslationFile.isEmpty()) {
+        trOK = translator.load(envTranslationFile);
+        settings->setValue("UGENE_CURR_TRANSL", QFileInfo(envTranslationFile).fileName().right(2));
+    }
 
     if (!trOK) {
         // set translations
         QString transFile[] = {
             userAppSettings->getTranslationFile(),
-            "transl_" + QLocale::system().name().left(2),
             "transl_en"
         };
         for (int i = transFile[0].isEmpty() ? 1 : 0; i < 3; ++i) {
@@ -495,6 +499,7 @@ int main(int argc, char **argv)
     MainWindowImpl* mw = new MainWindowImpl();
     appContext->setMainWindow(mw);
     mw->prepare();
+    QObject::connect(UgeneUpdater::getInstance(), SIGNAL(si_update()), mw, SLOT(sl_exitAction()));
 
     AppSettingsGUI* appSettingsGUI = new AppSettingsGUIImpl();
     appContext->setAppSettingsGUI(appSettingsGUI);
@@ -532,13 +537,13 @@ int main(int argc, char **argv)
     DBXRefRegistry* dbxr = new DBXRefRegistry();
     appContext->setDBXRefRegistry(dbxr);
 
-    MSAColorSchemeRegistry* mcsr = new MSAColorSchemeRegistry();
-    appContext->setMSAColorSchemeRegistry(mcsr);
+    MsaColorSchemeRegistry* mcsr = new MsaColorSchemeRegistry();
+    appContext->setMsaColorSchemeRegistry(mcsr);
 
     AppContext::getAppSettingsGUI()->registerPage(new ColorSchemaSettingsPageController(mcsr));
 
-    MSAHighlightingSchemeRegistry* mhsr = new MSAHighlightingSchemeRegistry();
-    appContext->setMSAHighlightingSchemeRegistry(mhsr);
+    MsaHighlightingSchemeRegistry* mhsr = new MsaHighlightingSchemeRegistry();
+    appContext->setMsaHighlightingSchemeRegistry(mhsr);
 
     MSAConsensusAlgorithmRegistry* msaConsReg = new MSAConsensusAlgorithmRegistry();
     appContext->setMSAConsensusAlgorithmRegistry(msaConsReg);
@@ -670,8 +675,6 @@ int main(int argc, char **argv)
     RecentlyDownloadedCache* rdc = new RecentlyDownloadedCache();
     appContext->setRecentlyDownloadedCache(rdc);
 
-    DistributedComputingUtil * dcu = new DistributedComputingUtil();
-
     AutoAnnotationsSupport* aaSupport = new AutoAnnotationsSupport();
     appContext->setAutoAnnotationsSupport(aaSupport);
 #ifndef HI_EXCLUDED
@@ -692,27 +695,25 @@ int main(int argc, char **argv)
     // Register all Options Panel groups on the required GObjectViews
     initOptionsPanels();
 
-    if(!cmdLineRegistry->hasParameter(CMDLineCoreOptions::LAUNCH_GUI_TEST)) {
-        QStringList urls = CMDLineRegistryUtils::getPureValues();
+    QStringList urls = CMDLineRegistryUtils::getPureValues();
 
-        if(urls.isEmpty() && AppContext::getAppSettings()->getUserAppsSettings()->openLastProjectAtStartup()) {
-            QString lastProject = ProjectLoaderImpl::getLastProjectURL();
-            if (!lastProject.isEmpty()) {
-                urls << lastProject;
-            }
+    if (urls.isEmpty() && AppContext::getAppSettings()->getUserAppsSettings()->openLastProjectAtStartup()) {
+        QString lastProject = ProjectLoaderImpl::getLastProjectURL();
+        if (!lastProject.isEmpty()) {
+            urls << lastProject;
         }
+    }
 
-        if( !urls.isEmpty() ) {
-            // defer loading until all plugins/services loaded
-            app.openAfterPluginsLoaded(urls, TaskStarter::NoProject);
-        }
+    if (!urls.isEmpty()) {
+        // defer loading until all plugins/services loaded
+        app.openAfterPluginsLoaded(urls, TaskStarter::NoProject);
     }
 
     registerCoreServices();
+
 #ifndef HI_EXCLUDED
-    if ( envList.contains(ENV_GUI_TEST+QString("=1")) ) {
-        GUITestService *guiTestService = new GUITestService();
-        Q_UNUSED(guiTestService);
+    if (GUITestService::isGuiTestServiceNeeded()) {
+        new GUITestService();
     }
 #endif //HI_EXCLUDED
 
@@ -738,7 +739,7 @@ int main(int argc, char **argv)
 
     QList<Task*> tasks;
 
-    if(AppContext::getSettings()->getValue(ASK_VESRION_SETTING, true).toBool() && qgetenv("UGENE_GUI_TEST").toInt() != 1) {
+    if (UgeneUpdater::isEnabled() && qgetenv("UGENE_GUI_TEST").toInt() != 1) {
         tasks << new CheckUpdatesTask(true);
 
         TmpDirChecker* tempDirChecker = new TmpDirChecker;
@@ -762,8 +763,6 @@ int main(int argc, char **argv)
 
     delete wpc;
 
-    delete dcu;
-
     appContext->setPasteFactory(NULL);
     delete pasteFactory;
 
@@ -887,10 +886,10 @@ int main(int argc, char **argv)
     appContext->setMSAConsensusAlgorithmRegistry(NULL);
     delete msaConsReg;
 
-    appContext->setMSAHighlightingSchemeRegistry(NULL);
+    appContext->setMsaHighlightingSchemeRegistry(NULL);
     delete mhsr;
 
-    appContext->setMSAColorSchemeRegistry(NULL);
+    appContext->setMsaColorSchemeRegistry(NULL);
     delete mcsr;
 
     appContext->setDBXRefRegistry(NULL);
@@ -958,6 +957,7 @@ int main(int argc, char **argv)
         ff.remove(iniFile);
     }
 
+    UgeneUpdater::onClose();
     CrashHandler::shutdown();
 
     return rc;
diff --git a/src/ugeneui/src/app_settings/ui/AppSettingsDialog.ui b/src/ugeneui/src/app_settings/AppSettingsDialog.ui
similarity index 100%
rename from src/ugeneui/src/app_settings/ui/AppSettingsDialog.ui
rename to src/ugeneui/src/app_settings/AppSettingsDialog.ui
diff --git a/src/ugeneui/src/app_settings/AppSettingsDialogController.cpp b/src/ugeneui/src/app_settings/AppSettingsDialogController.cpp
index fb8e8d0..0853706 100644
--- a/src/ugeneui/src/app_settings/AppSettingsDialogController.cpp
+++ b/src/ugeneui/src/app_settings/AppSettingsDialogController.cpp
@@ -22,6 +22,7 @@
 #include <QHBoxLayout>
 #include <QTreeWidget>
 #include <QMessageBox>
+#include <QPushButton>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
@@ -39,6 +40,9 @@ AppSettingsDialogController::AppSettingsDialogController(const QString& pageId,
 
     currentPage = NULL;
     helpButton = new HelpButton(this, buttonBox, QString());
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+
 
     QHBoxLayout *pageLayout = new QHBoxLayout();
     settingsBox->setLayout(pageLayout);
diff --git a/src/ugeneui/src/app_settings/AppSettingsDialogController.h b/src/ugeneui/src/app_settings/AppSettingsDialogController.h
index 365e37b..442269a 100644
--- a/src/ugeneui/src/app_settings/AppSettingsDialogController.h
+++ b/src/ugeneui/src/app_settings/AppSettingsDialogController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_APPSETTINGS_DIALOG_CONTROLLER_H_
 #define _U2_APPSETTINGS_DIALOG_CONTROLLER_H_
 
-#include <ui/ui_AppSettingsDialog.h>
+#include <ui_AppSettingsDialog.h>
 
 #if (QT_VERSION < 0x050000) //Qt 5
 #include <QtGui/QTreeWidgetItem>
diff --git a/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp
index 0959ff5..2b5c155 100644
--- a/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp
@@ -82,7 +82,7 @@ AppSettingsGUIPageWidget* DirectoriesSettingsPageController::createWidget(AppSet
     return r;
 }
 
-const QString DirectoriesSettingsPageController::helpPageId = QString("17467528");
+const QString DirectoriesSettingsPageController::helpPageId = QString("17470455");
 
 DirectoriesSettingsPageWidget::DirectoriesSettingsPageWidget(DirectoriesSettingsPageController* /*ctrl*/) {
     setupUi(this);
diff --git a/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.h b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.h
index 397276b..f6121d3 100644
--- a/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_DIRECTORIES_SETTINGS_GUI_CONTROLLER_H_
 #define _U2_DIRECTORIES_SETTINGS_GUI_CONTROLLER_H_
 
-#include "ui/ui_DirectoriesSettingsWidget.h"
+#include "ui_DirectoriesSettingsWidget.h"
 
 #include <U2Core/NetworkConfiguration.h>
 #include <U2Gui/AppSettingsGUI.h>
diff --git a/src/ugeneui/src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsWidget.ui
similarity index 100%
rename from src/ugeneui/src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui
rename to src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsWidget.ui
diff --git a/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.cpp b/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.cpp
index cc2f7fa..d6350f3 100644
--- a/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.cpp
@@ -71,7 +71,7 @@ AppSettingsGUIPageWidget* FormatSettingsGUIPageController::createWidget(AppSetti
     return r;
 }
 
-const QString FormatSettingsGUIPageController::helpPageId = QString("17467521");
+const QString FormatSettingsGUIPageController::helpPageId = QString("17470448");
 
 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 9836b85..2a6ed55 100644
--- a/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_FORMAT_SETTINGS_GUI_CONTROLLER_H_
 #define _U2_FORMAT_SETTINGS_GUI_CONTROLLER_H_
 
-#include <ui/ui_FormatSettingsWidget.h>
+#include <ui_FormatSettingsWidget.h>
 
 #include <U2Core/FormatSettings.h>
 
diff --git a/src/ugeneui/src/app_settings/format_settings/ui/FormatSettingsWidget.ui b/src/ugeneui/src/app_settings/format_settings/FormatSettingsWidget.ui
similarity index 100%
rename from src/ugeneui/src/app_settings/format_settings/ui/FormatSettingsWidget.ui
rename to src/ugeneui/src/app_settings/format_settings/FormatSettingsWidget.ui
diff --git a/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp b/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp
index c71d8ea..088a57a 100644
--- a/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp
@@ -19,23 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QColorDialog>
-#include <QtGui/QHeaderView>
-#include <QtGui/QMessageBox>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QColorDialog>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QToolButton>
-#endif
+#include <QColorDialog>
+#include <QHeaderView>
+#include <QMessageBox>
+#include <QToolButton>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/LogCache.h>
 
+#include <U2Gui/SaveDocumentController.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "LogSettingsGUIController.h"
@@ -69,7 +62,7 @@ AppSettingsGUIPageWidget* LogSettingsPageController::createWidget(AppSettingsGUI
     return w;
 }
 
-const QString LogSettingsPageController::helpPageId = QString("17467522");
+const QString LogSettingsPageController::helpPageId = QString("17470449");
 
 //////////////////////////////////////////////////////////////////////////
 // widget
@@ -77,9 +70,11 @@ const QString LogSettingsPageController::helpPageId = QString("17467522");
 LogSettingsPageWidget::LogSettingsPageWidget() {
     setupUi( this );
     tableWidget->verticalHeader()->setVisible(false);
+
+    initSaveController();
+
     connect(tableWidget, SIGNAL(currentCellChanged(int, int, int, int)), SLOT(sl_currentCellChanged(int, int, int, int)));
     connect(fileOutCB, SIGNAL(stateChanged(int)), SLOT(sl_outFileStateChanged(int)));
-    connect(browseFileButton, SIGNAL(clicked()), SLOT(sl_browseFileClicked()));
 
 #ifdef Q_OS_MAC
     // Layout fix for mac: the font size is bigger than in another systems.
@@ -167,7 +162,7 @@ void LogSettingsPageWidget::setState(AppSettingsGUIPageState* s) {
     colorCB->setChecked(settings.enableColor);
     dateFormatEdit->setText(settings.logPattern);
     fileOutCB->setChecked(settings.toFile);
-    outFileEdit->setText(settings.outputFile);
+    saveController->setPath(settings.outputFile);
 
     sl_outFileStateChanged(settings.toFile ? Qt::Checked : Qt::Unchecked);
 }
@@ -195,17 +190,17 @@ AppSettingsGUIPageState* LogSettingsPageWidget::getState(QString& err) const {
         settings.addCategory(logCat);
     }
 
-    if(fileOutCB->isChecked() != settings.toFile || settings.outputFile != outFileEdit->text() ){
+    if(fileOutCB->isChecked() != settings.toFile || settings.outputFile != saveController->getSaveFileName()){
         LogCacheExt *lce = qobject_cast<LogCacheExt *>(LogCache::getAppGlobalInstance());
         if(fileOutCB->isChecked()){
-            lce->setFileOutputEnabled(outFileEdit->text());
+            lce->setFileOutputEnabled(saveController->getSaveFileName());
         }else{
             lce->setFileOutputDisabled();
         }
     }
 
     if (fileOutCB->isChecked()){
-        QString logFile(outFileEdit->text());
+        QString logFile(saveController->getSaveFileName());
         QFileInfo lf(logFile);
         QFile file(logFile);
         bool writeble = file.open(QIODevice::WriteOnly);
@@ -222,7 +217,7 @@ AppSettingsGUIPageState* LogSettingsPageWidget::getState(QString& err) const {
     settings.enableColor = colorCB->isChecked();
     settings.logPattern = dateFormatEdit->text();
     settings.toFile = fileOutCB->isChecked();
-    settings.outputFile = outFileEdit->text();
+    settings.outputFile = saveController->getSaveFileName();
     
     return state;
 }
@@ -296,14 +291,25 @@ void LogSettingsPageWidget::sl_outFileStateChanged(int state){
     
 }
 
-void LogSettingsPageWidget::sl_browseFileClicked(){
-    outFileEdit->setText(U2FileDialog::getSaveFileName());
-}
-
 void LogSettingsPageWidget::updateColorLabel(QLabel* l, const QString& color) {
     QString style = "{color: "+color+"; text-decoration: none;};";
     l->setText("<style> a "+style+" a:visited "+style+" a:hover "+style+"</style>"
-                + "<a href=\".\">" + tr("Sample text") + "</a>");
+               + "<a href=\".\">" + tr("Sample text") + "</a>");
+}
+
+void LogSettingsPageWidget::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFormatId = "log";
+    config.fileDialogButton = browseFileButton;
+    config.fileNameEdit = outFileEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save to...");
+    config.rollFileName = false;
+
+    SaveDocumentController::SimpleFormatsInfo formats;
+    formats.addFormat("log", "log plain text", QStringList() << "log" << "txt");
+
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
 } //namespace
diff --git a/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.h b/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.h
index 8e3434d..d4a1817 100644
--- a/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.h
@@ -22,22 +22,20 @@
 #ifndef _U2_LOG_SETTINGS_WIDGET_IMPL_H_
 #define _U2_LOG_SETTINGS_WIDGET_IMPL_H_
 
-#include <ui/ui_LogSettingsWidget.h>
+#include <QLabel>
+#include <QTableWidgetItem>
+#include <QUrl>
+#include <ui_LogSettingsWidget.h>
 
 #include <LogSettings.h>
+
 #include <U2Gui/AppSettingsGUI.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QTableWidgetItem>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QTableWidgetItem>
-#endif
-#include <QtCore/QUrl>
 
 namespace U2 {
 
+class SaveDocumentController;
+
 class LogSettingsPageController : public AppSettingsGUIPageController {
     Q_OBJECT
 public:
@@ -49,7 +47,7 @@ public:
 
     virtual AppSettingsGUIPageWidget* createWidget(AppSettingsGUIPageState* data);
 
-    const QString& getHelpPageId() const {return helpPageId;};
+    const QString& getHelpPageId() const {return helpPageId;}
 
 private:
     LogSettingsHolder* target;
@@ -80,10 +78,12 @@ private slots:
     void sl_catItemStateChanged(QTableWidgetItem *item);
     void sl_changeColor(const QString& v);
     void sl_outFileStateChanged(int state);
-    void sl_browseFileClicked();
 
 private:
     void updateColorLabel(QLabel* l, const QString& color);
+    void initSaveController();
+
+    SaveDocumentController *saveController;
 };
 
 class LogSettingsTopLineWidget : public QWidget {
diff --git a/src/ugeneui/src/app_settings/logview_settings/ui/LogSettingsWidget.ui b/src/ugeneui/src/app_settings/logview_settings/LogSettingsWidget.ui
similarity index 100%
rename from src/ugeneui/src/app_settings/logview_settings/ui/LogSettingsWidget.ui
rename to src/ugeneui/src/app_settings/logview_settings/LogSettingsWidget.ui
diff --git a/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.cpp b/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.cpp
index 9836c4b..7a0f3ef 100644
--- a/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.cpp
@@ -65,7 +65,7 @@ AppSettingsGUIPageWidget* NetworkSettingsPageController::createWidget(AppSetting
     return r;
 }
 
-const QString NetworkSettingsPageController::helpPageId = QString("17467520");
+const QString NetworkSettingsPageController::helpPageId = QString("17470447");
 
 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 8310969..225ea62 100644
--- a/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_NETWORK_SETTINGS_WIDGET_IMPL_H_
 #define _U2_NETWORK_SETTINGS_WIDGET_IMPL_H_
 
-#include <ui/ui_NetworkSettingsWidget.h>
+#include <ui_NetworkSettingsWidget.h>
 
 #include <U2Core/NetworkConfiguration.h>
 #include <U2Gui/AppSettingsGUI.h>
diff --git a/src/ugeneui/src/app_settings/network_settings/ui/NetworkSettingsWidget.ui b/src/ugeneui/src/app_settings/network_settings/NetworkSettingsWidget.ui
similarity index 100%
rename from src/ugeneui/src/app_settings/network_settings/ui/NetworkSettingsWidget.ui
rename to src/ugeneui/src/app_settings/network_settings/NetworkSettingsWidget.ui
diff --git a/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.cpp b/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.cpp
index 588f205..460912e 100644
--- a/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.cpp
@@ -59,7 +59,7 @@ AppSettingsGUIPageWidget* ResourceSettingsGUIPageController::createWidget(AppSet
     return r;
 }
 
-const QString ResourceSettingsGUIPageController::helpPageId = QString("17467519");
+const QString ResourceSettingsGUIPageController::helpPageId = QString("17470446");
 
 ResourceSettingsGUIPageWidget::ResourceSettingsGUIPageWidget(ResourceSettingsGUIPageController*) {
     setupUi(this);
@@ -79,6 +79,7 @@ void ResourceSettingsGUIPageWidget::setState(AppSettingsGUIPageState* s) {
     cpuBox->setValue(state->nCpus);
     threadBox->setValue(state->nThreads);
     memBox->setValue(state->maxMem);
+    memBox->setObjectName("memorySpinBox");
 }
 
 AppSettingsGUIPageState* ResourceSettingsGUIPageWidget::getState(QString& err) const {
diff --git a/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.h b/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.h
index 863151e..32483e5 100644
--- a/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_RESOURCE_SETTINGS_GUI_CONTROLLER_H_
 #define _U2_RESOURCE_SETTINGS_GUI_CONTROLLER_H_
 
-#include <ui/ui_ResourceSettingsWidget.h>
+#include <ui_ResourceSettingsWidget.h>
 
 #include <U2Core/NetworkConfiguration.h>
 #include <U2Gui/AppSettingsGUI.h>
diff --git a/src/ugeneui/src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui b/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsWidget.ui
similarity index 100%
rename from src/ugeneui/src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui
rename to src/ugeneui/src/app_settings/resource_settings/ResourceSettingsWidget.ui
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 fcf9d99..75abb2d 100644
--- a/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp
@@ -82,6 +82,7 @@ AppSettingsGUIPageState* UserApplicationsSettingsPageController::getSavedState()
     state->enableStatistics = s->isStatisticsCollectionEnabled();
     state->tabbedWindowLayout = s->tabbedWindowLayout();
     state->resetSettings = s->resetSettings();
+    state->updatesEnabled = s->updatesEnabled();
     return state;
 }
 
@@ -94,6 +95,7 @@ void UserApplicationsSettingsPageController::saveState(AppSettingsGUIPageState*
     st->setEnableCollectingStatistics(state->enableStatistics);
     st->setTabbedWindowLayout(state->tabbedWindowLayout);
     st->setResetSettings(state->resetSettings);
+    st->setUpdatesEnabled(state->updatesEnabled);
 
     if (0 != state->style.compare(st->getVisualStyle(), Qt::CaseInsensitive)) {
         QStyle* style = QStyleFactory::create(state->style);
@@ -108,7 +110,7 @@ AppSettingsGUIPageWidget* UserApplicationsSettingsPageController::createWidget(A
     return r;
 }
 
-const QString UserApplicationsSettingsPageController::helpPageId = QString("17467518");
+const QString UserApplicationsSettingsPageController::helpPageId = QString("17470445");
 
 UserApplicationsSettingsPageWidget::UserApplicationsSettingsPageWidget(UserApplicationsSettingsPageController* ctrl) {
     setupUi(this);
@@ -146,6 +148,7 @@ void UserApplicationsSettingsPageWidget::setState(AppSettingsGUIPageState* s) {
     askToSaveProject->setCurrentIndex(askToSaveProject->findData(state->askToSaveProject));
 
     resetSettingsBox->setChecked(state->resetSettings);
+    updatesCheckBox->setChecked(state->updatesEnabled);
 }
 
 AppSettingsGUIPageState* UserApplicationsSettingsPageWidget::getState(QString& /*err*/) const {
@@ -157,6 +160,7 @@ AppSettingsGUIPageState* UserApplicationsSettingsPageWidget::getState(QString& /
     state->enableStatistics = enableStatisticsEdit->isChecked();
     state->tabbedWindowLayout = tabbedButton->isChecked();
     state->resetSettings = resetSettingsBox->isChecked();
+    state->updatesEnabled = updatesCheckBox->isChecked();
 
     return state;
 }
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 4337fa0..7580af4 100644
--- a/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_USER_APP_SETTINGS_GUI_CONTROLLER_H_
 #define _U2_USER_APP_SETTINGS_GUI_CONTROLLER_H_
 
-#include <ui/ui_UserApplicationsSettingsWidget.h>
+#include <ui_UserApplicationsSettingsWidget.h>
 
 #include <U2Core/NetworkConfiguration.h>
 #include <U2Gui/AppSettingsGUI.h>
@@ -55,8 +55,9 @@ private:
 class UserApplicationsSettingsPageState : public AppSettingsGUIPageState {
     Q_OBJECT
 public:
-    UserApplicationsSettingsPageState() : openLastProjectFlag(false),
-        askToSaveProject(0), enableStatistics(false), tabbedWindowLayout(false), resetSettings(false) {}
+    UserApplicationsSettingsPageState()
+        : openLastProjectFlag(false), askToSaveProject(0), enableStatistics(false),
+        tabbedWindowLayout(false), resetSettings(false), updatesEnabled(true) {}
 
     QString translFile;
     QString style;
@@ -65,6 +66,7 @@ public:
     bool enableStatistics;
     bool tabbedWindowLayout;
     bool resetSettings;
+    bool updatesEnabled;
 };
 
 
diff --git a/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui b/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui
new file mode 100644
index 0000000..54cca06
--- /dev/null
+++ b/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>UserApplicationsSettingsWidget</class>
+ <widget class="QWidget" name="UserApplicationsSettingsWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>641</width>
+    <height>449</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_4">
+   <item>
+    <widget class="QGroupBox" name="langBox">
+     <property name="title">
+      <string>LangBoxTitle</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <item>
+       <widget class="QComboBox" name="langCombo"/>
+      </item>
+      <item>
+       <widget class="QToolButton" name="langButton">
+        <property name="minimumSize">
+         <size>
+          <width>24</width>
+          <height>25</height>
+         </size>
+        </property>
+        <property name="text">
+         <string>...</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>Appearance</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <item>
+       <widget class="QComboBox" name="styleCombo"/>
+      </item>
+     </layout>
+    </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>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <widget class="QCheckBox" name="autoOpenProjectBox">
+        <property name="text">
+         <string>Open last project at startup</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_11">
+        <item>
+         <widget class="QComboBox" name="askToSaveProject"/>
+        </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>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="statisticsBox">
+     <property name="title">
+      <string>Statistical reports</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_3">
+      <item>
+       <widget class="QCheckBox" name="enableStatisticsEdit">
+        <property name="text">
+         <string>Enable statistical reports collecting</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="updatesBox">
+     <property name="title">
+      <string>Updates</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="QCheckBox" name="updatesCheckBox">
+        <property name="text">
+         <string>Check for updates when UGENE starts</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="reset">
+     <property name="title">
+      <string>Default settings</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_5">
+      <item>
+       <widget class="QCheckBox" name="resetSettingsBox">
+        <property name="text">
+         <string>Reset settings to default on the next run</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </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>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+ <buttongroups>
+  <buttongroup name="buttonGroup"/>
+ </buttongroups>
+</ui>
diff --git a/src/ugeneui/src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui b/src/ugeneui/src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui
deleted file mode 100644
index 0ef8f9e..0000000
--- a/src/ugeneui/src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>UserApplicationsSettingsWidget</class>
- <widget class="QWidget" name="UserApplicationsSettingsWidget">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>641</width>
-    <height>424</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string/>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_4">
-   <item>
-    <widget class="QGroupBox" name="langBox">
-     <property name="title">
-      <string>LangBoxTitle</string>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout">
-      <item>
-       <widget class="QComboBox" name="langCombo"/>
-      </item>
-      <item>
-       <widget class="QToolButton" name="langButton">
-        <property name="minimumSize">
-         <size>
-          <width>24</width>
-          <height>25</height>
-         </size>
-        </property>
-        <property name="text">
-         <string>...</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="groupBox_2">
-     <property name="title">
-      <string>Appearance</string>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_2">
-      <item>
-       <widget class="QComboBox" name="styleCombo"/>
-      </item>
-     </layout>
-    </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>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout">
-      <item>
-       <widget class="QCheckBox" name="autoOpenProjectBox">
-        <property name="text">
-         <string>Open last project at startup</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_11">
-        <item>
-         <widget class="QComboBox" name="askToSaveProject"/>
-        </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>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="statisticsBox">
-     <property name="title">
-      <string>Statistical reports</string>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout_3">
-      <item>
-       <widget class="QCheckBox" name="enableStatisticsEdit">
-        <property name="text">
-         <string>Enable statistical reports collecting</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="reset">
-     <property name="title">
-      <string>Default settings</string>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout_5">
-      <item>
-       <widget class="QCheckBox" name="resetSettingsBox">
-        <property name="text">
-         <string>Reset settings to default on the next run</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </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>
-  </layout>
- </widget>
- <resources/>
- <connections/>
- <buttongroups>
-  <buttongroup name="buttonGroup"/>
- </buttongroups>
-</ui>
diff --git a/src/ugeneui/src/main_window/ui/AboutDialog.ui b/src/ugeneui/src/main_window/AboutDialog.ui
similarity index 100%
rename from src/ugeneui/src/main_window/ui/AboutDialog.ui
rename to src/ugeneui/src/main_window/AboutDialog.ui
diff --git a/src/ugeneui/src/main_window/AboutDialogController.h b/src/ugeneui/src/main_window/AboutDialogController.h
index 77afe8d..5d2c7be 100644
--- a/src/ugeneui/src/main_window/AboutDialogController.h
+++ b/src/ugeneui/src/main_window/AboutDialogController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_ABOUT_DIALOG_CONTROLLER_
 #define _U2_ABOUT_DIALOG_CONTROLLER_
 
-#include <ui/ui_AboutDialog.h>
+#include <ui_AboutDialog.h>
 
 #include <QtCore/QBasicTimer>
 #include <QtCore/QPointer>
diff --git a/src/ugeneui/src/main_window/CheckUpdatesTask.cpp b/src/ugeneui/src/main_window/CheckUpdatesTask.cpp
index 5edd26e..249d0c6 100644
--- a/src/ugeneui/src/main_window/CheckUpdatesTask.cpp
+++ b/src/ugeneui/src/main_window/CheckUpdatesTask.cpp
@@ -28,13 +28,12 @@
 #include <U2Core/AppSettings.h>
 #include <U2Core/NetworkConfiguration.h>
 #include <U2Core/Settings.h>
+#include <U2Core/SyncHttp.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <U2Gui/GUIUtils.h>
 #include <U2Gui/MainWindow.h>
-#include <U2Core/QObjectScopedPointer.h>
 
-#include <U2Remote/SynchHttp.h>
+#include "update/UgeneUpdater.h"
 
 #include "CheckUpdatesTask.h"
 
@@ -58,7 +57,7 @@ void CheckUpdatesTask::run() {
 
     bool isProxy = nc->isProxyUsed(QNetworkProxy::HttpProxy);
     bool isException = nc->getExceptionsList().contains(SITE_URL);
-    SyncHTTP http(stateInfo);
+    SyncHttp http(stateInfo);
     if (isProxy && !isException) {
         http.setProxy(nc->getProxy(QNetworkProxy::HttpProxy));
     }
@@ -92,52 +91,97 @@ Task::ReportResult CheckUpdatesTask::report() {
 
     Version thisVersion = Version::appVersion();
 
-    if(runOnStartup) {
-        if (siteVersion > thisVersion) {
-            QString message = tr("Newer version available. You can download it from our site.");
-            QObjectScopedPointer<QMessageBox> box = new QMessageBox(QMessageBox::Information, tr("Version information"), message, QMessageBox::NoButton,
-                AppContext::getMainWindow()->getQMainWindow());
-            box->addButton(QMessageBox::Cancel);
-            QPushButton *siteButton = box->addButton(tr("Visit web site"), QMessageBox::ActionRole);
-            QPushButton *dontAsk = box->addButton(tr("Don't ask again"), QMessageBox::ActionRole);
-
-            box->exec();
-            CHECK(!box.isNull(), ReportResult_Finished);
-
-            if (box->clickedButton() == siteButton) {
-                GUIUtils::runWebBrowser("http://ugene.unipro.ru/download.html");
-            } else if(box->clickedButton() == dontAsk) {
-                AppContext::getSettings()->setValue(ASK_VESRION_SETTING, false);
-            }
+    Answer answer = DoNothing;
+    if (runOnStartup) {
+        if (siteVersion > thisVersion && !UgeneUpdater::isUpdateSkipped(siteVersion)) {
+            UpdateMessage message(siteVersion.text);
+            answer = message.getAnswer();
         }
-    } else {    
-        QString message = "<table><tr><td>"+tr("Your version:") + "</td><td><b>" + thisVersion.text + "</b></td></tr>";
-        message += "<tr><td>" + tr("Latest version:") + "</td><td><b>" + siteVersion.text + "</b></td></tr></table>";
-        bool needUpdate = thisVersion != siteVersion;
-        if (!needUpdate) {
-            message += "<p>" + tr("You have the latest version");
-        }
-        
-        QWidget *p = (QWidget*)(AppContext::getMainWindow()->getQMainWindow());
-        QObjectScopedPointer<QMessageBox> box = new QMessageBox(QMessageBox::Information, tr("Version information"), message, QMessageBox::NoButton, p);
-        box->addButton(QMessageBox::Ok);
-        QAbstractButton* updateButton = NULL;
-        
-        if (needUpdate) {
-            updateButton = box->addButton(tr("Visit web site"), QMessageBox::ActionRole);
-        }
-        box->exec();
-        CHECK(!box.isNull(), ReportResult_Finished);
+    } else {
+        VersionMessage message(siteVersion);
+        answer = message.getAnswer();
+    }
 
-        if (box->clickedButton() == updateButton) {
-            GUIUtils::runWebBrowser("http://ugene.unipro.ru/download.html");
-        }
+    switch (answer) {
+        case Update:
+            UgeneUpdater::getInstance()->update();
+            break;
+        case Skip:
+            UgeneUpdater::skipUpdate(siteVersion);
+            break;
+        case DoNothing:
+        default:
+            break;
     }
-    return ReportResult_Finished;    
+    return ReportResult_Finished;
 }
 
 void CheckUpdatesTask::sl_registerInTaskScheduler(){
     AppContext::getTaskScheduler()->registerTopLevelTask(this);
 }
 
+/************************************************************************/
+/* UpdateMessage */
+/************************************************************************/
+UpdateMessage::UpdateMessage(const QString &newVersion) {
+    QWidget *parent = AppContext::getMainWindow()->getQMainWindow();
+    const QString message = tr("UGENE %1 is available for downloading.\nWould you like to download and install it?").arg(newVersion);
+    const QString title = tr("New Updates");
+
+    dialog = new QMessageBox(QMessageBox::Question, title, message, QMessageBox::NoButton, parent);
+
+    updateButton = dialog->addButton(tr("Update now"), QMessageBox::ActionRole);
+    postponeButton = dialog->addButton(tr("Ask later"), QMessageBox::ActionRole);
+    dialog->addButton(tr("Skip this update"), QMessageBox::ActionRole);
+}
+
+CheckUpdatesTask::Answer UpdateMessage::getAnswer() const {
+    dialog->exec();
+    CHECK(!dialog.isNull(), CheckUpdatesTask::DoNothing);
+
+    if (updateButton == dialog->clickedButton()) {
+        return CheckUpdatesTask::Update;
+    }
+    if (postponeButton == dialog->clickedButton()) {
+        return CheckUpdatesTask::DoNothing;
+    }
+    return CheckUpdatesTask::Skip;
+}
+
+/************************************************************************/
+/* VersionMessage */
+/************************************************************************/
+VersionMessage::VersionMessage(const Version &newVersion) {
+    QWidget *parent = AppContext::getMainWindow()->getQMainWindow();
+    const QString message = getMessageText(Version::appVersion(), newVersion);
+    const QString title = tr("Version Information");
+
+    dialog = new QMessageBox(QMessageBox::Information, title, message, QMessageBox::NoButton, parent);
+    dialog->addButton(QMessageBox::Ok);
+    updateButton = NULL;
+    if (Version::appVersion() < newVersion) {
+        updateButton = dialog->addButton(tr("Update Now"), QMessageBox::ActionRole);
+    }
+}
+
+CheckUpdatesTask::Answer VersionMessage::getAnswer() const {
+    dialog->exec();
+    CHECK(!dialog.isNull(), CheckUpdatesTask::DoNothing);
+
+    if (dialog->clickedButton() == updateButton) {
+        return CheckUpdatesTask::Update;
+    }
+    return CheckUpdatesTask::DoNothing;
+}
+
+QString VersionMessage::getMessageText(const Version &thisVersion, const Version &newVersion) const {
+    QString message = "<table><tr><td>%1</td><td><b>%2</b></td></tr>"
+                      "<tr><td>%3</td><td><b>%4</b></td></tr></table>";
+    message = message.arg(tr("Your version:")).arg(thisVersion.text).arg(tr("Latest version:")).arg(newVersion.text);
+    if (thisVersion >= newVersion) {
+        message += "<p>" + tr("You have the latest version") + "</p>";
+    }
+    return message;
+}
+
 } //namespace
diff --git a/src/ugeneui/src/main_window/CheckUpdatesTask.h b/src/ugeneui/src/main_window/CheckUpdatesTask.h
index c76ae97..8a59447 100644
--- a/src/ugeneui/src/main_window/CheckUpdatesTask.h
+++ b/src/ugeneui/src/main_window/CheckUpdatesTask.h
@@ -22,27 +22,55 @@
 #ifndef _U2_CHECK_UPDATES_TASKS_H_
 #define _U2_CHECK_UPDATES_TASKS_H_
 
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Task.h>
 #include <U2Core/Version.h>
 
-namespace U2 {
+class QMessageBox;
+class QPushButton;
 
-#define ASK_VESRION_SETTING QString("user_apps/ask_update")
+namespace U2 {
 
 class CheckUpdatesTask : public Task {
     Q_OBJECT
 public slots:
     void sl_registerInTaskScheduler();
 public:
+    enum Answer {Update, DoNothing, Skip};
+
     CheckUpdatesTask(bool startUp = false);
     void run();
     ReportResult report();
 
+private:
     Version siteVersion;
     bool    runOnStartup;
     bool    startError;
 };
 
+class UpdateMessage : public QObject {
+public:
+    UpdateMessage(const QString &newVersion);
+    CheckUpdatesTask::Answer getAnswer() const;
+
+private:
+    QObjectScopedPointer<QMessageBox> dialog;
+    QPushButton *updateButton;
+    QPushButton *postponeButton;
+};
+
+class VersionMessage : public QObject {
+public:
+    VersionMessage(const Version &newVersion);
+    CheckUpdatesTask::Answer getAnswer() const;
+
+private:
+    QString getMessageText(const Version &thisVersion, const Version &newVersion) const;
+
+private:
+    QObjectScopedPointer<QMessageBox> dialog;
+    QPushButton *updateButton;
+};
 
 }//namespace
 
diff --git a/src/ugeneui/src/main_window/MainWindowImpl.cpp b/src/ugeneui/src/main_window/MainWindowImpl.cpp
index a2cc717..12c8da8 100644
--- a/src/ugeneui/src/main_window/MainWindowImpl.cpp
+++ b/src/ugeneui/src/main_window/MainWindowImpl.cpp
@@ -58,6 +58,7 @@
 #include "ShutdownTask.h"
 #include "TmpDirChangeDialogController.h"
 #include "ToolBarManager.h"
+#include "update/UgeneUpdater.h"
 #include "shtirlitz/Shtirlitz.h"
 
 namespace U2 {
@@ -387,7 +388,7 @@ void MainWindowImpl::runClosingTask() {
 
         if(getQMainWindow()) {
             if(msgBox->clickedButton() == closeButton) {
-                //QCoreApplication::exit();
+                UgeneUpdater::onClose();
                 exit(0);
             }
         }
diff --git a/src/ugeneui/src/main_window/ui/TmpDirChangeDialog.ui b/src/ugeneui/src/main_window/TmpDirChangeDialog.ui
similarity index 100%
rename from src/ugeneui/src/main_window/ui/TmpDirChangeDialog.ui
rename to src/ugeneui/src/main_window/TmpDirChangeDialog.ui
diff --git a/src/ugeneui/src/main_window/TmpDirChangeDialogController.h b/src/ugeneui/src/main_window/TmpDirChangeDialogController.h
index e19da02..8ede9e2 100644
--- a/src/ugeneui/src/main_window/TmpDirChangeDialogController.h
+++ b/src/ugeneui/src/main_window/TmpDirChangeDialogController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_TMP_DIR_CHANGE_DIALOG_CONTROLLER_
 #define _U2_TMP_DIR_CHANGE_DIALOG_CONTROLLER_
 
-#include <ui/ui_TmpDirChangeDialog.h>
+#include <ui_TmpDirChangeDialog.h>
 
 
 #if (QT_VERSION < 0x050000) //Qt 5
diff --git a/src/ugeneui/src/plugin_viewer/PluginViewerController.h b/src/ugeneui/src/plugin_viewer/PluginViewerController.h
index cea6b1c..82d3187 100644
--- a/src/ugeneui/src/plugin_viewer/PluginViewerController.h
+++ b/src/ugeneui/src/plugin_viewer/PluginViewerController.h
@@ -21,7 +21,7 @@
 
 #ifndef _U2_PLUGIN_VIEWER_CONTROLLER_H_
 
-#include "ui/ui_PluginViewerWidget.h"
+#include "ui_PluginViewerWidget.h"
 
 #include <U2Core/PluginModel.h>
 #include <U2Gui/MainWindow.h>
@@ -85,7 +85,7 @@ private:
 	PlugViewServiceItem* getCurrentServiceItem() const;
     PlugViewPluginItem* getCurrentPluginItem() const;
 
-    Ui::PluginViewWidget ui;
+    Ui_PluginViewWidget ui;
     
     MWMDIWindow* mdiWindow;
     
diff --git a/src/ugeneui/src/plugin_viewer/ui/PluginViewerWidget.ui b/src/ugeneui/src/plugin_viewer/PluginViewerWidget.ui
similarity index 100%
rename from src/ugeneui/src/plugin_viewer/ui/PluginViewerWidget.ui
rename to src/ugeneui/src/plugin_viewer/PluginViewerWidget.ui
diff --git a/src/ugeneui/src/project_support/ui/CreateNewProjectWidget.ui b/src/ugeneui/src/project_support/CreateNewProjectWidget.ui
similarity index 100%
rename from src/ugeneui/src/project_support/ui/CreateNewProjectWidget.ui
rename to src/ugeneui/src/project_support/CreateNewProjectWidget.ui
diff --git a/src/ugeneui/src/project_support/DocumentFormatSelectorController.cpp b/src/ugeneui/src/project_support/DocumentFormatSelectorController.cpp
index 47790cc..a7fcc70 100644
--- a/src/ugeneui/src/project_support/DocumentFormatSelectorController.cpp
+++ b/src/ugeneui/src/project_support/DocumentFormatSelectorController.cpp
@@ -58,7 +58,7 @@ DocumentFormatSelectorController::DocumentFormatSelectorController(QList<FormatD
 : QDialog(p), formatDetectionResults(results)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467499");
+    new HelpButton(this, buttonBox, "17470424");
 
     setObjectName("DocumentFormatSelectorDialog");
 }
diff --git a/src/ugeneui/src/project_support/DocumentFormatSelectorController.h b/src/ugeneui/src/project_support/DocumentFormatSelectorController.h
index d8e9bb2..d73ef6c 100644
--- a/src/ugeneui/src/project_support/DocumentFormatSelectorController.h
+++ b/src/ugeneui/src/project_support/DocumentFormatSelectorController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_DOCUMENT_FORMAT_SELECTOR_CONTROLLER_
 #define _U2_DOCUMENT_FORMAT_SELECTOR_CONTROLLER_
 
-#include <ui/ui_DocumentFormatSelectorDialog.h>
+#include <ui_DocumentFormatSelectorDialog.h>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/DocumentUtils.h>
diff --git a/src/ugeneui/src/project_support/ui/DocumentFormatSelectorDialog.ui b/src/ugeneui/src/project_support/DocumentFormatSelectorDialog.ui
similarity index 100%
rename from src/ugeneui/src/project_support/ui/DocumentFormatSelectorDialog.ui
rename to src/ugeneui/src/project_support/DocumentFormatSelectorDialog.ui
diff --git a/src/ugeneui/src/project_support/DocumentProviderSelectorController.cpp b/src/ugeneui/src/project_support/DocumentProviderSelectorController.cpp
index 9dda3fe..e581510 100644
--- a/src/ugeneui/src/project_support/DocumentProviderSelectorController.cpp
+++ b/src/ugeneui/src/project_support/DocumentProviderSelectorController.cpp
@@ -99,7 +99,7 @@ DocumentProviderSelectorController::DocumentProviderSelectorController(const QLi
     formatDetectionResults(formatDetectionResults)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467699");
+    new HelpButton(this, buttonBox, "17470632");
 }
 
 int DocumentProviderSelectorController::getSelectedFormatIdx() const {
diff --git a/src/ugeneui/src/project_support/DocumentProviderSelectorController.h b/src/ugeneui/src/project_support/DocumentProviderSelectorController.h
index a8f2eba..74ddc91 100644
--- a/src/ugeneui/src/project_support/DocumentProviderSelectorController.h
+++ b/src/ugeneui/src/project_support/DocumentProviderSelectorController.h
@@ -24,7 +24,7 @@
 
 #include <U2Core/DocumentUtils.h>
 
-#include "ui/ui_DocumentProviderSelectorDialog.h"
+#include "ui_DocumentProviderSelectorDialog.h"
 
 class QRadioButton;
 class QToolButton;
diff --git a/src/ugeneui/src/project_support/ui/DocumentProviderSelectorDialog.ui b/src/ugeneui/src/project_support/DocumentProviderSelectorDialog.ui
similarity index 100%
rename from src/ugeneui/src/project_support/ui/DocumentProviderSelectorDialog.ui
rename to src/ugeneui/src/project_support/DocumentProviderSelectorDialog.ui
diff --git a/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp b/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp
index 365a190..a16035e 100644
--- a/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp
+++ b/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp
@@ -31,7 +31,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include "DocumentReadingModeSelectorController.h"
-#include "ui/ui_SequenceReadingModeSelectorDialog.h"
+#include "ui_SequenceReadingModeSelectorDialog.h"
 
 namespace U2{
 
@@ -80,7 +80,7 @@ bool DocumentReadingModeSelectorController::adjustReadingMode(FormatDetectionRes
     d->setModal(true);
     ui.setupUi(d.data());
 
-    new HelpButton(d.data(), ui.buttonBox, "17467472");
+    new HelpButton(d.data(), ui.buttonBox, "17470397");
 
     bool canBeShortReads = minSequenceSize > 0 && maxSequenceSize < 2000;
     bool haveReadAligners = !AppContext::getDnaAssemblyAlgRegistry()->getRegisteredAlgorithmIds().isEmpty();
diff --git a/src/ugeneui/src/project_support/ui/ExportProjectDialog.ui b/src/ugeneui/src/project_support/ExportProjectDialog.ui
similarity index 100%
rename from src/ugeneui/src/project_support/ui/ExportProjectDialog.ui
rename to src/ugeneui/src/project_support/ExportProjectDialog.ui
diff --git a/src/ugeneui/src/project_support/ExportProjectDialogController.cpp b/src/ugeneui/src/project_support/ExportProjectDialogController.cpp
index 3b6ebcd..53d94c9 100644
--- a/src/ugeneui/src/project_support/ExportProjectDialogController.cpp
+++ b/src/ugeneui/src/project_support/ExportProjectDialogController.cpp
@@ -55,7 +55,7 @@ ExportProjectDialogController::ExportProjectDialogController(QWidget *p, const Q
 : QDialog(p) 
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467472");
+    new HelpButton(this, buttonBox, "17470397");
 
     setModal(true);
     projectFile = fixProjectFile(defaultProjectFileName);
diff --git a/src/ugeneui/src/project_support/ExportProjectDialogController.h b/src/ugeneui/src/project_support/ExportProjectDialogController.h
index fd23c79..c860c9d 100644
--- a/src/ugeneui/src/project_support/ExportProjectDialogController.h
+++ b/src/ugeneui/src/project_support/ExportProjectDialogController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_EXPORT_PROJECT_DIALOG_CONTROLLER_
 #define _U2_EXPORT_PROJECT_DIALOG_CONTROLLER_
 
-#include <ui/ui_ExportProjectDialog.h>
+#include <ui_ExportProjectDialog.h>
 
 #include <U2Core/AppContext.h>
 
diff --git a/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp b/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp
index 9568950..705bb8f 100644
--- a/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp
+++ b/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QDir>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
@@ -30,17 +32,16 @@
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/HelpButton.h>
-#include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/SaveDocumentController.h>
 
 #include "MultipleDocumentsReadingModeSelectorController.h"
 
 namespace U2{
 
 struct GUrlLess {
-        bool operator()(GUrl a, GUrl b) const {
-            return a.getURLString() < b.getURLString();
-        }
+    bool operator()(GUrl a, GUrl b) const {
+        return a.getURLString() < b.getURLString();
+    }
 }; 
 
 bool MultipleDocumentsReadingModeSelectorController::adjustReadingMode(QVariantMap& props, QList<GUrl>& urls, const QMap<QString, qint64>& headerSequenceLengths){	
@@ -50,20 +51,6 @@ bool MultipleDocumentsReadingModeSelectorController::adjustReadingMode(QVariantM
     return d.setupGUI(urls, props, headerSequenceLengths);    
 }
 
-void MultipleDocumentsReadingModeDialog::sl_onChooseDirPath(){
-    QString fileFormats;
-    fileFormats += extension4MergedDocument.toUpper() + " format (*." + extension4MergedDocument + ");;";
- 
-    fileFormats.append("All files (*)");
-
-    LastUsedDirHelper helper("SaveMergeDocumentsAsOneDocument");
-    helper.url = U2FileDialog::getSaveFileName(this, tr("Select file to save new document"), helper.dir, fileFormats, 
-        NULL, QFileDialog::DontConfirmOverwrite);
-    if(!helper.url.isEmpty()){
-        newDocUrl->setText(helper.url);
-    }
-}
-
 bool MultipleDocumentsReadingModeSelectorController::mergeDocumentOption(const FormatDetectionResult& formatResult, QMap<QString, qint64>* headerSequenceLengths){
     QVariantMap docHints = formatResult.rawDataCheckResult.properties;
     if(formatResult.format == NULL){
@@ -103,29 +90,43 @@ bool MultipleDocumentsReadingModeSelectorController::mergeDocumentOption(const F
 }
 
 
-MultipleDocumentsReadingModeDialog::MultipleDocumentsReadingModeDialog(const QList<GUrl>& _urls,QWidget* parent /* = 0 */):QDialog(parent),  urls(_urls){}
+MultipleDocumentsReadingModeDialog::MultipleDocumentsReadingModeDialog(const QList<GUrl>& _urls,QWidget* parent)
+    : QDialog(parent),
+      saveController(NULL),
+      urls(_urls) {
+
+}
+
+QString MultipleDocumentsReadingModeDialog::setupNewUrl() {
+    QString urlStr = newDocUrl->text();
+    if (urlStr.isEmpty()) {
+        GUrl url = urls.at(0);
+        urlStr = url.getURLString();
+    }
+    QFileInfo fi(urlStr);
+    urlStr = fi.dir().path();
 
-void MultipleDocumentsReadingModeDialog::setupNewUrl(){
-    GUrl url = urls.at(0);
-    QString urlStr = url.getURLString(); 
-    int startFileName = urlStr.lastIndexOf(url.fileName());
-    urlStr.remove(startFileName, url.fileName().size());
+    QString extension4MergedDocument;
+    if (mergeMode->isChecked()) {
+        extension4MergedDocument = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::PLAIN_GENBANK)->getSupportedDocumentFileExtensions().first();
+    } else if (join2alignmentMode->isChecked()) {
+        extension4MergedDocument = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::CLUSTAL_ALN)->getSupportedDocumentFileExtensions().first();
+    }
 
-    QString randomFileName = GUrlUtils::rollFileName(urlStr + QString("merged_document") + "." + extension4MergedDocument , DocumentUtils::getNewDocFileNameExcludesHint()) ;
-    newDocUrl->setText(randomFileName);
+    return urlStr + "/merged_document." + extension4MergedDocument;
 }
 
 bool MultipleDocumentsReadingModeDialog::setupGUI(QList<GUrl>& _urls, QVariantMap& props, const QMap<QString, qint64>& headerSequenceLengths){
     setModal(true);
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467560");
+    new HelpButton(this, buttonBox, "17470488");
 
     // doesn't matter from what position, because excluded fileName all path of documents are the same
     CHECK(!urls.isEmpty(), false);
 
-    connect(separateMode, SIGNAL(toggled(bool)), SLOT(sl_optionChanged(bool)));
-    connect(mergeMode, SIGNAL(toggled(bool)), SLOT(sl_optionChanged(bool)));
-    connect(join2alignmentMode, SIGNAL(toggled(bool)), SLOT(sl_optionChanged(bool)));
+    connect(separateMode, SIGNAL(toggled(bool)), SLOT(sl_optionChanged()));
+    connect(mergeMode, SIGNAL(toggled(bool)), SLOT(sl_optionChanged()));
+    connect(join2alignmentMode, SIGNAL(toggled(bool)), SLOT(sl_optionChanged()));
     connect(upperButton, SIGNAL(clicked()), SLOT(sl_onMoveUp()));
     connect(bottomButton, SIGNAL(clicked()), SLOT(sl_onMoveDown()));
 
@@ -142,7 +143,7 @@ bool MultipleDocumentsReadingModeDialog::setupGUI(QList<GUrl>& _urls, QVariantMa
         return false;
     }
 
-    if(separateMode->isChecked() || newDocUrl->text().isEmpty()){
+    if(separateMode->isChecked() || saveController->getSaveFileName().isEmpty()){
         return true;
     }
 
@@ -167,7 +168,7 @@ bool MultipleDocumentsReadingModeDialog::setupGUI(QList<GUrl>& _urls, QVariantMa
         props[ProjectLoaderHint_MultipleFilesMode_RealDocumentFormat] = BaseDocumentFormats::CLUSTAL_ALN;
         props[DocumentReadingMode_SequenceAsAlignmentHint] = true;
     }
-    props[ProjectLoaderHint_MultipleFilesMode_URLDocument] = newDocUrl->text();
+    props[ProjectLoaderHint_MultipleFilesMode_URLDocument] = saveController->getSaveFileName();
     props[ProjectLoaderHint_MultipleFilesMode_SaveDocumentFlag] = saveBox->isChecked();
     props[ProjectLoaderHint_MultipleFilesMode_Flag] = true;
     
@@ -179,18 +180,12 @@ bool MultipleDocumentsReadingModeDialog::setupGUI(QList<GUrl>& _urls, QVariantMa
 
     props[ProjectLoaderHint_MultipleFilesMode_URLsDocumentConsistOf] =  urlsStr;
 
-    
-
     _urls.clear();
-    _urls << GUrl(newDocUrl->text());
+    _urls << GUrl(saveController->getSaveFileName());
     
     return true;
 }
 
-void MultipleDocumentsReadingModeDialog::setupOrderingMergeDocuments(){
-    
-}
-
 QString MultipleDocumentsReadingModeDialog::findUrlByFileName(const QString& fileName){
     foreach(GUrl url, urls){
         QString _fileName = url.fileName();
@@ -202,7 +197,7 @@ QString MultipleDocumentsReadingModeDialog::findUrlByFileName(const QString& fil
     return "";
 }
 
-void MultipleDocumentsReadingModeDialog::sl_optionChanged(bool ){
+void MultipleDocumentsReadingModeDialog::sl_optionChanged() {
     bool isNewDocInfoAvailable = !separateMode->isChecked();
 
     saveBox->setEnabled(isNewDocInfoAvailable);
@@ -213,19 +208,50 @@ void MultipleDocumentsReadingModeDialog::sl_optionChanged(bool ){
     newDocUrl->setEnabled(isNewDocInfoAvailable);
 
     bool mergeInfoAvailable = mergeMode->isChecked();
-    fileGap->setEnabled(mergeInfoAvailable );
-    mergeModeLabel->setEnabled(mergeInfoAvailable );
-
-    if(mergeMode->isChecked()){
-        extension4MergedDocument = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::PLAIN_GENBANK)->getSupportedDocumentFileExtensions().first();
-    }
-    else if(join2alignmentMode->isChecked()){
-        extension4MergedDocument = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::CLUSTAL_ALN)->getSupportedDocumentFileExtensions().first();
-    }
-    else{
+    fileGap->setEnabled(mergeInfoAvailable);
+    mergeModeLabel->setEnabled(mergeInfoAvailable);
+
+    if (mergeMode->isChecked()) {
+        delete saveController;
+        initSequenceSaveController();
+    } else if (join2alignmentMode->isChecked()) {
+        delete saveController;
+        initMsaSaveController();
+    } else {
         return;
     }
-    setupNewUrl();
+}
+
+void MultipleDocumentsReadingModeDialog::initSequenceSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = "SaveMergeDocumentsAsOneDocument";
+    config.defaultFileName = setupNewUrl();
+    config.defaultFormatId = BaseDocumentFormats::PLAIN_GENBANK;
+    config.fileDialogButton = toolButton;
+    config.fileNameEdit = newDocUrl;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file to save new document");
+    config.rollOutProjectUrls = true;
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::PLAIN_GENBANK;
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
+void MultipleDocumentsReadingModeDialog::initMsaSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultDomain = "SaveMergeDocumentsAsOneDocument";
+    config.defaultFileName = setupNewUrl();
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
+    config.fileDialogButton = toolButton;
+    config.fileNameEdit = newDocUrl;
+    config.parentWidget = this;
+    config.saveTitle = tr("Select file to save new document");
+    config.rollOutProjectUrls = true;
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::CLUSTAL_ALN;
+
+    saveController = new SaveDocumentController(config, formats, this);
 }
 
 void MultipleDocumentsReadingModeDialog::sl_onMoveUp(){
@@ -276,8 +302,4 @@ void MultipleDocumentsReadingModeDialog::deleteAllNumPrefix(){
     }
 }
 
-MultipleDocumentsReadingModeDialog::~MultipleDocumentsReadingModeDialog(){
-    
 }
-
-};
diff --git a/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.h b/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.h
index 87d95d6..1c4876b 100644
--- a/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.h
+++ b/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.h
@@ -23,45 +23,49 @@
 #define _U2_MULTIPLE_SEQUENCE_FILES_SELECTOR_H_
 
 #include <QDialog>
+#include <QList>
 #include <QVariant>
-#include <QtCore/QList>
 
-#include <U2Core/GUrl.h>
 #include <U2Core/DocumentUtils.h>
+#include <U2Core/GUrl.h>
 
-#include "ui/ui_MultipleSequenceFilesReadingMode.h"
+#include "ui_MultipleSequenceFilesReadingMode.h"
 
-namespace U2{
+namespace U2 {
+
+class SaveDocumentController;
 
 class MultipleDocumentsReadingModeSelectorController {
 public:	
     static bool adjustReadingMode(QVariantMap& , QList<GUrl>& urls,const QMap<QString, qint64>& headerSequenceLengths);
-    static bool mergeDocumentOption(const FormatDetectionResult& formatResult, QMap<QString, qint64>* headerSequenceLengths);    
+    static bool mergeDocumentOption(const FormatDetectionResult& formatResult, QMap<QString, qint64>* headerSequenceLengths);
 private:
     MultipleDocumentsReadingModeSelectorController();
 };
 
 class MultipleDocumentsReadingModeDialog : public QDialog, public Ui_MultipleDocumentsReadingModeSelectorController{
-Q_OBJECT
+    Q_OBJECT
 public:
-    MultipleDocumentsReadingModeDialog(const QList<GUrl>& urls, QWidget* parent = 0); 
-    ~MultipleDocumentsReadingModeDialog();
+    MultipleDocumentsReadingModeDialog(const QList<GUrl>& urls, QWidget* parent = 0);
+
     bool setupGUI(QList<GUrl>& urls, QVariantMap& hintsDocuments, const QMap<QString, qint64>& headerSequenceLengths);
-    void setupOrderingMergeDocuments();
+
 private slots:
-   void sl_onMoveUp();
-   void sl_onMoveDown();
-   void sl_onChooseDirPath();
-   void sl_optionChanged(bool);
-private:
-   void setupNewUrl();
-   QString deleteNumPrefix(QString);
-   void deleteAllNumPrefix();
-   void changeNumPrefix();
-   QString findUrlByFileName(const QString& fileName);
+    void sl_onMoveUp();
+    void sl_onMoveDown();
+    void sl_optionChanged();
+
 private:
+    void initSequenceSaveController();
+    void initMsaSaveController();
+    QString setupNewUrl();
+    QString deleteNumPrefix(QString);
+    void deleteAllNumPrefix();
+    void changeNumPrefix();
+    QString findUrlByFileName(const QString& fileName);
+
+    SaveDocumentController *saveController;
     QList<GUrl> urls;
-    QString extension4MergedDocument;
 };
 
 }
diff --git a/src/ugeneui/src/project_support/MultipleSequenceFilesReadingMode.ui b/src/ugeneui/src/project_support/MultipleSequenceFilesReadingMode.ui
new file mode 100644
index 0000000..810f34f
--- /dev/null
+++ b/src/ugeneui/src/project_support/MultipleSequenceFilesReadingMode.ui
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MultipleDocumentsReadingModeSelectorController</class>
+ <widget class="QDialog" name="MultipleDocumentsReadingModeSelectorController">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>682</width>
+    <height>364</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Multiple Sequence Reading Mode</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QGroupBox" name="multipleSequenceFilesBox">
+     <property name="title">
+      <string/>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QRadioButton" name="separateMode">
+        <property name="text">
+         <string>Separate sequence mode</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QRadioButton" name="mergeMode">
+        <property name="text">
+         <string>Merge sequence mode</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0" colspan="2">
+       <layout class="QFormLayout" name="formLayout">
+        <property name="fieldGrowthPolicy">
+         <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+        </property>
+        <item row="0" column="0">
+         <widget class="QLabel" name="mergeModeLabel">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="text">
+           <string>Number of unknown symbols ('N 'for nucleic acid or 'X' for amino acid) between sequences</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1">
+         <widget class="QSpinBox" name="fileGap">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="value">
+           <number>10</number>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item row="5" column="0">
+       <layout class="QHBoxLayout" name="horizontalLayout_3">
+        <item>
+         <widget class="QLabel" name="newDocLabel">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="text">
+           <string>New document name</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLineEdit" name="newDocUrl">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="readOnly">
+           <bool>false</bool>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QToolButton" name="toolButton">
+          <property name="text">
+           <string>...</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item row="6" column="0">
+       <layout class="QHBoxLayout" name="horizontalLayout_4">
+        <property name="bottomMargin">
+         <number>9</number>
+        </property>
+        <item>
+         <widget class="QCheckBox" name="saveBox">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="text">
+           <string>Save document</string>
+          </property>
+          <property name="checked">
+           <bool>true</bool>
+          </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 row="7" column="0" rowspan="2">
+       <widget class="QListWidget" name="listDocuments">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="7" column="1">
+       <widget class="QPushButton" name="upperButton">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>21</width>
+          <height>21</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>21</width>
+          <height>21</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="8" column="1">
+       <widget class="QPushButton" name="bottomButton">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="minimumSize">
+         <size>
+          <width>21</width>
+          <height>21</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>21</width>
+          <height>21</height>
+         </size>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="9" column="0">
+       <spacer name="verticalSpacer">
+        <property name="orientation">
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeType">
+         <enum>QSizePolicy::Expanding</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>20</width>
+          <height>50</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="4" column="0">
+       <widget class="QRadioButton" name="join2alignmentMode">
+        <property name="text">
+         <string>Join sequences into alignment</string>
+        </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>MultipleDocumentsReadingModeSelectorController</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>245</x>
+     <y>292</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>225</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>MultipleDocumentsReadingModeSelectorController</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>504</x>
+     <y>292</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>225</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+ <slots>
+  <slot>sl_onChooseDirPath()</slot>
+  <slot>sl_onSaveNewDocument()</slot>
+ </slots>
+</ui>
diff --git a/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp b/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp
index 2e67972..42b92c5 100644
--- a/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp
+++ b/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp
@@ -224,7 +224,7 @@ void ProjectLoaderImpl::sl_openProject() {
     QStringList files;
 
 #if defined(Q_OS_MAC) || (QT_VERSION >= 0x050000)
-    if (qgetenv("UGENE_GUI_TEST").toInt() == 1 && qgetenv("UGENE_USE_NATIVE_DIALOGS").toInt() == 0) {
+    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
@@ -408,8 +408,6 @@ bool ProjectLoaderImpl::detectFormat(const GUrl &url, QList<FormatDetectionResul
     return true;
 }
 
-#define MAX_DOCS_TO_OPEN_VIEWS 5
-
 Task* ProjectLoaderImpl::openWithProjectTask(const QList<GUrl>& _urls, const QVariantMap& hints) {
     QList<GUrl> urls = _urls;
     // detect if we open real UGENE project file
@@ -531,7 +529,7 @@ Task* ProjectLoaderImpl::openWithProjectTask(const QList<GUrl>& _urls, const QVa
                         if(hints.value(ProjectLoaderHint_LoadWithoutView, false).toBool() == true){
                             info.openView = false;
                         }else{
-                            info.openView = nViews++ < MAX_DOCS_TO_OPEN_VIEWS;
+                            info.openView = nViews++ < OpenViewTask::MAX_DOC_NUMBER_TO_OPEN_VIEWS;
                         }
                         if(hints.value(ProjectLoaderHint_LoadUnloadedDocument, true).toBool() == false){
                             info.loadDocuments = false;
@@ -554,7 +552,7 @@ Task* ProjectLoaderImpl::openWithProjectTask(const QList<GUrl>& _urls, const QVa
                         if(hints.value(ProjectLoaderHint_LoadWithoutView, false).toBool() == true){
                             info.openView = false;
                         }else{
-                            info.openView = nViews++ < MAX_DOCS_TO_OPEN_VIEWS;
+                            info.openView = nViews++ < OpenViewTask::MAX_DOC_NUMBER_TO_OPEN_VIEWS;
                         }
                         QVariantMap hints;
                         info.dp = dr.importer->createImportTask(dr, true, hints);
@@ -823,7 +821,7 @@ void SaveProjectDialogController::sl_clicked(QAbstractButton *button) {
 //////////////////////////////////////////////////////////////////////////
 ProjectDialogController::ProjectDialogController(ProjectDialogController::Mode m, QWidget *p):QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "17467496");
+    new HelpButton(this, buttonBox, "17470421");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/ugeneui/src/project_support/ProjectLoaderImpl.h b/src/ugeneui/src/project_support/ProjectLoaderImpl.h
index 9e04d96..e47b40f 100644
--- a/src/ugeneui/src/project_support/ProjectLoaderImpl.h
+++ b/src/ugeneui/src/project_support/ProjectLoaderImpl.h
@@ -22,8 +22,8 @@
 #ifndef _U2_PROJECT_SUPPORT_H_
 #define _U2_PROJECT_SUPPORT_H_
 
-#include "ui/ui_CreateNewProjectWidget.h"
-#include "ui/ui_SaveProjectDialog.h"
+#include "ui_CreateNewProjectWidget.h"
+#include "ui_SaveProjectDialog.h"
 
 #include <U2Core/ProjectModel.h>
 #include <U2Core/ProjectService.h>
@@ -141,7 +141,7 @@ private:
 
 //TODO: merge project dir & project name fields
 
-class SaveProjectDialogController : public QDialog, public Ui::SaveProjectDialog {
+class SaveProjectDialogController : public QDialog, public Ui_SaveProjectDialog {
     Q_OBJECT
 public:
     SaveProjectDialogController(QWidget *p);
@@ -149,7 +149,7 @@ public slots:
     void sl_clicked(QAbstractButton *button);
 };
 
-class ProjectDialogController : public QDialog, public Ui::CreateNewProjectDialog {
+class ProjectDialogController : public QDialog, public Ui_CreateNewProjectDialog {
     Q_OBJECT
 public:
     enum Mode {New_Project, Save_Project};
diff --git a/src/ugeneui/src/project_support/ProjectTasksGui.cpp b/src/ugeneui/src/project_support/ProjectTasksGui.cpp
index 41ac318..ce6e6f6 100644
--- a/src/ugeneui/src/project_support/ProjectTasksGui.cpp
+++ b/src/ugeneui/src/project_support/ProjectTasksGui.cpp
@@ -54,7 +54,7 @@
 #include "ProjectLoaderImpl.h"
 #include "ProjectServiceImpl.h"
 #include "ProjectTasksGui.h"
-#include "ui/ui_SaveProjectDialog.h"
+#include "ui_SaveProjectDialog.h"
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/project_support/ui/SaveProjectDialog.ui b/src/ugeneui/src/project_support/SaveProjectDialog.ui
similarity index 100%
rename from src/ugeneui/src/project_support/ui/SaveProjectDialog.ui
rename to src/ugeneui/src/project_support/SaveProjectDialog.ui
diff --git a/src/ugeneui/src/project_support/ui/SequenceReadingModeSelectorDialog.ui b/src/ugeneui/src/project_support/SequenceReadingModeSelectorDialog.ui
similarity index 100%
rename from src/ugeneui/src/project_support/ui/SequenceReadingModeSelectorDialog.ui
rename to src/ugeneui/src/project_support/SequenceReadingModeSelectorDialog.ui
diff --git a/src/ugeneui/src/project_support/ui/MultipleSequenceFilesReadingMode.ui b/src/ugeneui/src/project_support/ui/MultipleSequenceFilesReadingMode.ui
deleted file mode 100644
index 3e0a449..0000000
--- a/src/ugeneui/src/project_support/ui/MultipleSequenceFilesReadingMode.ui
+++ /dev/null
@@ -1,281 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>MultipleDocumentsReadingModeSelectorController</class>
- <widget class="QDialog" name="MultipleDocumentsReadingModeSelectorController">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>555</width>
-    <height>302</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Multiple Sequence Reading Mode</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QGroupBox" name="multipleSequenceFilesBox">
-     <property name="title">
-      <string/>
-     </property>
-     <layout class="QGridLayout" name="gridLayout">
-      <item row="0" column="0">
-       <widget class="QRadioButton" name="separateMode">
-        <property name="text">
-         <string>Separate sequence mode</string>
-        </property>
-        <property name="checked">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QRadioButton" name="mergeMode">
-        <property name="text">
-         <string>Merge sequence mode</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0" colspan="2">
-       <layout class="QFormLayout" name="formLayout">
-        <property name="fieldGrowthPolicy">
-         <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
-        </property>
-        <item row="0" column="0">
-         <widget class="QLabel" name="mergeModeLabel">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="text">
-           <string>Number of unknown symbols ('N 'for nucleic acid or 'X' for amino acid) between sequences</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1">
-         <widget class="QSpinBox" name="fileGap">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="value">
-           <number>10</number>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item row="5" column="0">
-       <layout class="QHBoxLayout" name="horizontalLayout_3">
-        <item>
-         <widget class="QLabel" name="newDocLabel">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="text">
-           <string>New document name</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QLineEdit" name="newDocUrl">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="readOnly">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QToolButton" name="toolButton">
-          <property name="text">
-           <string>...</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item row="6" column="0">
-       <layout class="QHBoxLayout" name="horizontalLayout_4">
-        <property name="bottomMargin">
-         <number>9</number>
-        </property>
-        <item>
-         <widget class="QCheckBox" name="saveBox">
-          <property name="enabled">
-           <bool>false</bool>
-          </property>
-          <property name="text">
-           <string>Save document</string>
-          </property>
-          <property name="checked">
-           <bool>true</bool>
-          </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 row="7" column="0" rowspan="2">
-       <widget class="QListWidget" name="listDocuments">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="7" column="1">
-       <widget class="QPushButton" name="upperButton">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>21</width>
-          <height>21</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>21</width>
-          <height>21</height>
-         </size>
-        </property>
-        <property name="text">
-         <string/>
-        </property>
-       </widget>
-      </item>
-      <item row="8" column="1">
-       <widget class="QPushButton" name="bottomButton">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>21</width>
-          <height>21</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>21</width>
-          <height>21</height>
-         </size>
-        </property>
-        <property name="text">
-         <string/>
-        </property>
-       </widget>
-      </item>
-      <item row="9" column="0">
-       <spacer name="verticalSpacer">
-        <property name="orientation">
-         <enum>Qt::Vertical</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Expanding</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>20</width>
-          <height>50</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="4" column="0">
-       <widget class="QRadioButton" name="join2alignmentMode">
-        <property name="text">
-         <string>Join sequences into alignment</string>
-        </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>MultipleDocumentsReadingModeSelectorController</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>245</x>
-     <y>292</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>225</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>MultipleDocumentsReadingModeSelectorController</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>504</x>
-     <y>292</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>225</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>toolButton</sender>
-   <signal>clicked()</signal>
-   <receiver>MultipleDocumentsReadingModeSelectorController</receiver>
-   <slot>sl_onChooseDirPath()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>506</x>
-     <y>139</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>516</x>
-     <y>131</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
- <slots>
-  <slot>sl_onChooseDirPath()</slot>
-  <slot>sl_onSaveNewDocument()</slot>
- </slots>
-</ui>
\ No newline at end of file
diff --git a/src/ugeneui/src/project_view/ProjectViewDocTree.cpp b/src/ugeneui/src/project_view/ProjectViewDocTree.cpp
deleted file mode 100644
index 8f7c128..0000000
--- a/src/ugeneui/src/project_view/ProjectViewDocTree.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 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 "ProjectViewDocTree.h"
-
-#include <U2Core/BunchMimeData.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/GObject.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Gui/ProjectTreeController.h>
-
-namespace U2 {
-
-ProjectViewDocTree::ProjectViewDocTree(QWidget* w) : QTreeView(w) 
-{
-    setDragDropMode(QAbstractItemView::DragDrop);
-    setContextMenuPolicy(Qt::CustomContextMenu);
-    setDragEnabled(true);
-    setAcceptDrops(true);
-    setDropIndicatorShown(true);
-    setDragDropOverwriteMode(true);
-}
-
-} //namespace
diff --git a/src/ugeneui/src/project_view/ProjectViewDocTree.h b/src/ugeneui/src/project_view/ProjectViewDocTree.h
deleted file mode 100644
index 7b00a65..0000000
--- a/src/ugeneui/src/project_view/ProjectViewDocTree.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 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_PROJECT_VIEW_DOC_TREE_H_
-#define _U2_PROJECT_VIEW_DOC_TREE_H_
-
-#include <QtCore/QMimeData>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeView>
-#else
-#include <QtWidgets/QTreeView>
-#endif
-
-namespace U2 {
-
-class ProjectViewDocTree : public QTreeView {
-public:
-    ProjectViewDocTree(QWidget* w);
-};
-
-}//namespace
-
-#endif
diff --git a/src/ugeneui/src/project_view/ProjectViewImpl.h b/src/ugeneui/src/project_view/ProjectViewImpl.h
index 79d61a1..b8eec4c 100644
--- a/src/ugeneui/src/project_view/ProjectViewImpl.h
+++ b/src/ugeneui/src/project_view/ProjectViewImpl.h
@@ -35,7 +35,7 @@
 #include <U2Gui/ProjectTreeController.h>
 #include <U2Gui/ObjectViewTreeController.h>
 
-#include "../_tmp/ui/ui_ProjectViewWidget.h"
+#include "ui_ProjectViewWidget.h"
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/project_view/ProjectViewWidget.ui b/src/ugeneui/src/project_view/ProjectViewWidget.ui
new file mode 100644
index 0000000..a2118b2
--- /dev/null
+++ b/src/ugeneui/src/project_view/ProjectViewWidget.ui
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ProjectViewWidget</class>
+ <widget class="QWidget" name="ProjectViewWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>333</width>
+    <height>790</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <property name="spacing">
+    <number>0</number>
+   </property>
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>5</number>
+   </property>
+   <property name="rightMargin">
+    <number>1</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <widget class="QSplitter" name="splitter">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <widget class="QWidget" name="layoutWidget1">
+      <layout class="QVBoxLayout" name="verticalLayout">
+       <property name="spacing">
+        <number>0</number>
+       </property>
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout">
+         <property name="spacing">
+          <number>3</number>
+         </property>
+         <property name="leftMargin">
+          <number>0</number>
+         </property>
+         <property name="bottomMargin">
+          <number>5</number>
+         </property>
+         <item>
+          <widget class="U2::ProjectViewSearchBox" name="nameFilterEdit"/>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <widget class="QLabel" name="objectsLabel">
+         <property name="text">
+          <string>Objects</string>
+         </property>
+         <property name="alignment">
+          <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
+         </property>
+         <property name="indent">
+          <number>3</number>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="U2::EditableTreeView" name="documentTreeWidget">
+         <property name="contextMenuPolicy">
+          <enum>Qt::CustomContextMenu</enum>
+         </property>
+         <property name="acceptDrops">
+          <bool>true</bool>
+         </property>
+         <property name="showDropIndicator" stdset="0">
+          <bool>true</bool>
+         </property>
+         <property name="dragEnabled">
+          <bool>true</bool>
+         </property>
+         <property name="dragDropOverwriteMode">
+          <bool>true</bool>
+         </property>
+         <property name="dragDropMode">
+          <enum>QAbstractItemView::DragDrop</enum>
+         </property>
+         <property name="uniformRowHeights">
+          <bool>true</bool>
+         </property>
+         <property name="headerHidden">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="layoutWidget2">
+      <layout class="QVBoxLayout" name="bookmarksLayout">
+       <property name="spacing">
+        <number>0</number>
+       </property>
+       <item>
+        <widget class="QLabel" name="bookmarksLabel">
+         <property name="text">
+          <string>Bookmarks</string>
+         </property>
+         <property name="alignment">
+          <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
+         </property>
+         <property name="indent">
+          <number>3</number>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QTreeWidget" name="viewTreeWidget">
+         <property name="uniformRowHeights">
+          <bool>true</bool>
+         </property>
+         <property name="headerHidden">
+          <bool>true</bool>
+         </property>
+         <column>
+          <property name="text">
+           <string/>
+          </property>
+         </column>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </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>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/ugeneui/src/project_view/ui/ProjectViewWidget.ui b/src/ugeneui/src/project_view/ui/ProjectViewWidget.ui
deleted file mode 100644
index a9217cb..0000000
--- a/src/ugeneui/src/project_view/ui/ProjectViewWidget.ui
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ProjectViewWidget</class>
- <widget class="QWidget" name="ProjectViewWidget">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>333</width>
-    <height>790</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
-   <property name="spacing">
-    <number>0</number>
-   </property>
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="topMargin">
-    <number>5</number>
-   </property>
-   <property name="rightMargin">
-    <number>1</number>
-   </property>
-   <property name="bottomMargin">
-    <number>0</number>
-   </property>
-   <item>
-    <widget class="QSplitter" name="splitter">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <widget class="QWidget" name="layoutWidget1">
-      <layout class="QVBoxLayout" name="verticalLayout">
-       <property name="spacing">
-        <number>0</number>
-       </property>
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout">
-         <property name="spacing">
-          <number>3</number>
-         </property>
-         <property name="leftMargin">
-          <number>0</number>
-         </property>
-         <property name="bottomMargin">
-          <number>5</number>
-         </property>
-         <item>
-          <widget class="U2::ProjectViewSearchBox" name="nameFilterEdit">
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <widget class="QLabel" name="objectsLabel">
-         <property name="text">
-          <string>Objects</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
-         </property>
-         <property name="indent">
-          <number>3</number>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="U2::ProjectViewDocTree" name="documentTreeWidget">
-         <property name="uniformRowHeights">
-          <bool>true</bool>
-         </property>
-         <property name="headerHidden">
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="layoutWidget2">
-      <layout class="QVBoxLayout" name="bookmarksLayout">
-       <property name="spacing">
-        <number>0</number>
-       </property>
-       <item>
-        <widget class="QLabel" name="bookmarksLabel">
-         <property name="text">
-          <string>Bookmarks</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
-         </property>
-         <property name="indent">
-          <number>3</number>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QTreeWidget" name="viewTreeWidget">
-         <property name="uniformRowHeights">
-          <bool>true</bool>
-         </property>
-         <property name="headerHidden">
-          <bool>true</bool>
-         </property>
-         <column>
-          <property name="text">
-           <string/>
-          </property>
-         </column>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>U2::ProjectViewDocTree</class>
-   <extends>QTreeView</extends>
-   <header location="global">project_view/ProjectViewDocTree.h</header>
-  </customwidget>
-  <customwidget>
-   <class>U2::ProjectViewSearchBox</class>
-   <extends>QLineEdit</extends>
-   <header location="global">project_view/ProjectViewSearchBox.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/ugeneui/src/shtirlitz/Shtirlitz.cpp b/src/ugeneui/src/shtirlitz/Shtirlitz.cpp
index e4d1b14..95f2fe2 100644
--- a/src/ugeneui/src/shtirlitz/Shtirlitz.cpp
+++ b/src/ugeneui/src/shtirlitz/Shtirlitz.cpp
@@ -35,6 +35,7 @@
 #include <U2Core/Log.h>
 #include <U2Core/NetworkConfiguration.h>
 #include <U2Core/Settings.h>
+#include <U2Core/SyncHttp.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
 #include <U2Core/Version.h>
@@ -42,8 +43,6 @@
 #include <U2Gui/MainWindow.h>
 #include <U2Core/QObjectScopedPointer.h>
 
-#include <U2Remote/SynchHttp.h>
-
 #include "Shtirlitz.h"
 #include "StatisticalReportController.h"
 
@@ -98,6 +97,7 @@ QList<Task*> Shtirlitz::wakeup() {
     if (minorVersionFirstLaunch) {
         s->setValue(minorVersionFirstLaunchKey, QVariant(true));
     }
+    getUniqueUgeneId();
     
     // Do nothing if Shtirlitz was disabled
      if (QProcess::systemEnvironment().contains(ENV_UGENE_DEV)) {
@@ -110,7 +110,7 @@ QList<Task*> Shtirlitz::wakeup() {
     if(minorVersionFirstLaunch) {
         MainWindow *mainWindow = AppContext::getMainWindow();
         CHECK(NULL != mainWindow, result);
-        QObjectScopedPointer<StatisticalReportController> dialog = new StatisticalReportController(":ugene/html/version_news.html", mainWindow->getQMainWindow());
+        QObjectScopedPointer<StatisticalReportController> dialog = new StatisticalReportController("qrc:///ugene/html/version_news.html", mainWindow->getQMainWindow());
         dialog->exec();
         CHECK(!dialog.isNull(), result);
 
@@ -276,7 +276,7 @@ void ShtirlitzTask::run() {
     stateInfo.setDescription( tr("Connecting to remote server") );
 
     //Creating SyncHttp object and enabling proxy if needed.
-    SyncHTTP http(stateInfo, this);
+    SyncHttp http(stateInfo, this);
     NetworkConfiguration * nc = AppContext::getAppSettings()->getNetworkConfiguration();
     bool isProxy = nc->isProxyUsed( QNetworkProxy::HttpProxy );
     bool isException = nc->getExceptionsList().contains( QUrl(DESTINATION_URL_KEEPER_SRV).host() );
@@ -301,7 +301,7 @@ void ShtirlitzTask::run() {
     }
 
     //Checking proxy again, for the new url
-    SyncHTTP http2(stateInfo, this);
+    SyncHttp http2(stateInfo, this);
     isException = nc->getExceptionsList().contains( QUrl(reportsPath).host() );
     if( isProxy && !isException ) {
         http2.setProxy( nc->getProxy(QNetworkProxy::HttpProxy) );
diff --git a/src/ugeneui/src/shtirlitz/StatisticalReport.ui b/src/ugeneui/src/shtirlitz/StatisticalReport.ui
new file mode 100644
index 0000000..8ed7f8d
--- /dev/null
+++ b/src/ugeneui/src/shtirlitz/StatisticalReport.ui
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>StatisticalReport</class>
+ <widget class="QDialog" name="StatisticalReport">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>491</width>
+    <height>67</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Welcome to UGENE 1.16</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QFrame" name="frame">
+     <property name="frameShape">
+      <enum>QFrame::StyledPanel</enum>
+     </property>
+     <property name="frameShadow">
+      <enum>QFrame::Raised</enum>
+     </property>
+     <layout class="QVBoxLayout" name="frameLayout">
+      <property name="spacing">
+       <number>0</number>
+      </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="topMargin">
+      <number>10</number>
+     </property>
+     <property name="bottomMargin">
+      <number>10</number>
+     </property>
+     <item>
+      <widget class="QCheckBox" name="chkStat">
+       <property name="text">
+        <string/>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="lblStat">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="layoutDirection">
+        <enum>Qt::RightToLeft</enum>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="scaledContents">
+        <bool>false</bool>
+       </property>
+       <property name="wordWrap">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp b/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp
index 926b870..3c43fcb 100644
--- a/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp
+++ b/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp
@@ -59,7 +59,13 @@ void StatisticalReportController::paintEvent(QPaintEvent *event) {
         htmlView->setMinimumHeight(htmlView->size().height() + 1);
     }
     htmlView->setMinimumHeight(htmlView->size().height() + 10);
+#ifndef Q_OS_MAC
+    // UGENE crashes on the update event processing on mac
+    // It has some connection with htmlView loading method
+    // There was no crash before f3a45ef1cd53fe28faf90a763d195e964bc6c752 commit
+    // Find a solution and fix it, if you have some free time
     move(x(), (qApp->desktop()->screenGeometry().height() / 2) - htmlView->minimumHeight());
+#endif
 }
 
 }
diff --git a/src/ugeneui/src/shtirlitz/StatisticalReportController.h b/src/ugeneui/src/shtirlitz/StatisticalReportController.h
index 6b2a79c..2f952e0 100644
--- a/src/ugeneui/src/shtirlitz/StatisticalReportController.h
+++ b/src/ugeneui/src/shtirlitz/StatisticalReportController.h
@@ -22,7 +22,7 @@
 #ifndef _U2_STATISTICAL_REPORT_CONTROLLER_H_
 #define _U2_STATISTICAL_REPORT_CONTROLLER_H_
 
-#include "ui/ui_StatisticalReport.h"
+#include "ui_StatisticalReport.h"
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/shtirlitz/ui/StatisticalReport.ui b/src/ugeneui/src/shtirlitz/ui/StatisticalReport.ui
deleted file mode 100644
index 7212f80..0000000
--- a/src/ugeneui/src/shtirlitz/ui/StatisticalReport.ui
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>StatisticalReport</class>
- <widget class="QDialog" name="StatisticalReport">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>491</width>
-    <height>67</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Welcome to UGENE 1.16</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QFrame" name="frame">
-     <property name="frameShape">
-      <enum>QFrame::StyledPanel</enum>
-     </property>
-     <property name="frameShadow">
-      <enum>QFrame::Raised</enum>
-     </property>
-     <layout class="QVBoxLayout" name="frameLayout">
-      <property name="spacing">
-       <number>0</number>
-      </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="topMargin">
-      <number>10</number>
-     </property>
-     <property name="bottomMargin">
-      <number>10</number>
-     </property>
-     <item>
-      <widget class="QCheckBox" name="chkStat">
-       <property name="text">
-        <string/>
-       </property>
-       <property name="checked">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLabel" name="lblStat">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="layoutDirection">
-        <enum>Qt::RightToLeft</enum>
-       </property>
-       <property name="text">
-        <string/>
-       </property>
-       <property name="scaledContents">
-        <bool>false</bool>
-       </property>
-       <property name="wordWrap">
-        <bool>false</bool>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/ugeneui/src/task_view/TaskViewController.cpp b/src/ugeneui/src/task_view/TaskViewController.cpp
index 2c862b2..17207c0 100644
--- a/src/ugeneui/src/task_view/TaskViewController.cpp
+++ b/src/ugeneui/src/task_view/TaskViewController.cpp
@@ -443,14 +443,14 @@ QString TVReportWindow::prepareReportHTML(Task* t) {
 
     report+="<table>";
     QString status = t->hasError() ? tr("Failed") : t->isCanceled() ? tr("Canceled") : tr("Finished");
-    report+="<tr><td width=200><b>"+tr("status")+"</b></td><td>" +status+ "</td></tr>";
+    report+="<tr><td width=200><b>"+tr("Status")+"</b></td><td>" +status+ "</td></tr>";
     if (t->hasError()) {
-    report+="<tr><td><b>"+tr("error:")+"</b></td><td>" + t->getError().replace('|',"|") + "</td></tr>";
+        report +="<tr><td><b>"+tr("Error:")+"</b></td><td>" + t->getError().replace('|',"|") + "</td></tr>";
     }
 
     int msecs = GTimer::millisBetween(t->getTimeInfo().startTime, t->getTimeInfo().finishTime);
 
-    report+="<tr><td><b>"+tr("time")+"</b></td><td>" + convertTime(msecs) + "</td></tr>";
+    report+="<tr><td><b>"+tr("Time")+"</b></td><td>" + convertTime(msecs) + "</td></tr>";
     report+="</td></tr>";
     report+="</table>";
 
@@ -537,7 +537,7 @@ QString TVReportWindow::convertTime(int msecs) {
     msecs /= 60;
     int hours = msecs;
 
-    return QString("%1.%2.%3.%4").
+    return QString("%1h %2m %3.%4s").
             arg(hours).
             arg(minutes, 2, 10, QLatin1Char('0')).
             arg(seconds, 2, 10, QLatin1Char('0')).
diff --git a/src/ugeneui/src/update/UgeneUpdater.cpp b/src/ugeneui/src/update/UgeneUpdater.cpp
new file mode 100644
index 0000000..02d8300
--- /dev/null
+++ b/src/ugeneui/src/update/UgeneUpdater.cpp
@@ -0,0 +1,126 @@
+/**
+ * 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 <QCoreApplication>
+#include <QFile>
+#include <QProcess>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/Settings.h>
+#include <U2Core/UserApplicationsSettings.h>
+#include <U2Core/Version.h>
+#include <U2Gui/GUIUtils.h>
+
+#include "UgeneUpdater.h"
+
+namespace U2 {
+
+QScopedPointer<UgeneUpdater> UgeneUpdater::instance(NULL);
+QMutex UgeneUpdater::mutex;
+
+UgeneUpdater * UgeneUpdater::getInstance() {
+    QMutexLocker lock(&mutex);
+    if (NULL != instance.data()) {
+        return instance.data();
+    }
+    instance.reset(new UgeneUpdater());
+    return instance.data();
+}
+
+void UgeneUpdater::release() {
+    QMutexLocker lock(&mutex);
+    delete instance.take();
+}
+
+void UgeneUpdater::onClose() {
+    if (instance->isUpdateOnClose()) {
+        instance->startMaintenanceTool();
+    }
+    release();
+}
+
+UgeneUpdater::UgeneUpdater()
+: updateOnClose(false)
+{
+
+}
+
+void UgeneUpdater::update() {
+    if (hasMaintenanceTool()) {
+        setUpdateOnClose(true);
+        emit si_update();
+    } else {
+        GUIUtils::runWebBrowser("http://ugene.unipro.ru/download.html");
+    }
+}
+
+void UgeneUpdater::setUpdateOnClose(bool value) {
+    updateOnClose = value;
+}
+
+bool UgeneUpdater::isUpdateOnClose() const {
+    return updateOnClose;
+}
+
+bool UgeneUpdater::isUpdateSkipped(const Version &version) {
+    UserAppsSettings *settings = AppContext::getAppSettings()->getUserAppsSettings();
+    return settings->isUpdateSkipped(version.text);
+}
+
+void UgeneUpdater::skipUpdate(const Version &version) {
+    UserAppsSettings *settings = AppContext::getAppSettings()->getUserAppsSettings();
+    settings->skipUpdate(version.text);
+}
+
+bool UgeneUpdater::isEnabled() {
+    UserAppsSettings *settings = AppContext::getAppSettings()->getUserAppsSettings();
+    return settings->updatesEnabled();
+}
+
+void UgeneUpdater::setEnabled(bool value) {
+    UserAppsSettings *settings = AppContext::getAppSettings()->getUserAppsSettings();
+    settings->setUpdatesEnabled(value);
+}
+
+QString UgeneUpdater::getMaintenanceToolPath() const {
+#ifdef Q_OS_MAC
+    QString path = QCoreApplication::applicationDirPath() + "/../../setup.app/Contents/MacOS/setup";
+#else
+    QString path = QCoreApplication::applicationDirPath() + "/setup";
+#endif
+#ifdef Q_OS_WIN
+    path += ".exe";
+#endif
+    return path;
+}
+
+bool UgeneUpdater::hasMaintenanceTool() const {
+    return QFile::exists(getMaintenanceToolPath());
+}
+
+void UgeneUpdater::startMaintenanceTool() const {
+    QStringList arguments;
+    arguments << "--updater";
+    QProcess::startDetached(getMaintenanceToolPath(), arguments);
+}
+
+} // U2
diff --git a/src/ugeneui/src/update/UgeneUpdater.h b/src/ugeneui/src/update/UgeneUpdater.h
new file mode 100644
index 0000000..eb396fe
--- /dev/null
+++ b/src/ugeneui/src/update/UgeneUpdater.h
@@ -0,0 +1,69 @@
+/**
+ * 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_UGENE_UPDATER_H_
+#define _U2_UGENE_UPDATER_H_
+
+#include <QMutex>
+#include <QObject>
+#include <QScopedPointer>
+
+namespace U2 {
+
+class Version;
+
+class UgeneUpdater : public QObject {
+    Q_OBJECT
+    Q_DISABLE_COPY(UgeneUpdater)
+public:
+    static UgeneUpdater * getInstance();
+    static void release();
+    static void onClose();
+
+    void update();
+    void setUpdateOnClose(bool value);
+    bool isUpdateOnClose() const;
+
+    static bool isUpdateSkipped(const Version &version);
+    static void skipUpdate(const Version &version);
+    static bool isEnabled();
+    static void setEnabled(bool value);
+
+signals:
+    void si_update();
+
+private:
+    QString getMaintenanceToolPath() const;
+    bool hasMaintenanceTool() const;
+    void startMaintenanceTool() const;
+
+private:
+    bool updateOnClose;
+
+private:
+    UgeneUpdater();
+    static QScopedPointer<UgeneUpdater> instance;
+    static QMutex mutex;
+};
+
+} // U2
+
+#endif // _U2_UGENE_UPDATER_H_
diff --git a/src/ugeneui/src/utils/MultilingualHtmlView.cpp b/src/ugeneui/src/utils/MultilingualHtmlView.cpp
index 859ad46..83ab490 100644
--- a/src/ugeneui/src/utils/MultilingualHtmlView.cpp
+++ b/src/ugeneui/src/utils/MultilingualHtmlView.cpp
@@ -26,9 +26,6 @@
 #include <U2Core/U2SafePoints.h>
 
 #include <QDesktopServices>
-#include <QFile>
-#include <QTextStream>
-#include <QWebElement>
 #include <QWebElementCollection>
 #include <QWebFrame>
 
@@ -71,18 +68,9 @@ void MultilingualHtmlView::sl_linkActivated(const QUrl &url) {
 }
 
 void MultilingualHtmlView::loadPage(const QString& htmlPath) {
-    QFile file(htmlPath);
-    bool opened = file.open(QIODevice::ReadOnly);
-    SAFE_POINT(opened, "Can not load file", );
-
-    QTextStream stream(&file);
-    stream.setCodec("UTF-8");
-    QString html = stream.readAll();
-    file.close();
-
     connect(this, SIGNAL(loadFinished(bool)), this, SLOT(sl_loaded(bool)));
     connect(this, SIGNAL(linkClicked(QUrl)), this, SLOT(sl_linkActivated(QUrl)));
-    page()->mainFrame()->setHtml(html);
+    load(QUrl(htmlPath));
 }
 
 } // namespace
diff --git a/src/ugeneui/src/welcome_page/WelcomePageWidget.cpp b/src/ugeneui/src/welcome_page/WelcomePageWidget.cpp
index 66ed553..180a536 100644
--- a/src/ugeneui/src/welcome_page/WelcomePageWidget.cpp
+++ b/src/ugeneui/src/welcome_page/WelcomePageWidget.cpp
@@ -44,7 +44,7 @@ namespace {
 }
 
 WelcomePageWidget::WelcomePageWidget(QWidget *parent, WelcomePageController *controller)
-    : MultilingualHtmlView(":ugene/html/welcome_page.html", parent),
+    : MultilingualHtmlView("qrc:///ugene/html/welcome_page.html", parent),
       controller(controller)
 {
     installEventFilter(this);
diff --git a/src/ugeneui/transl/english.ts b/src/ugeneui/transl/english.ts
index 5557713..ec3ac63 100644
--- a/src/ugeneui/transl/english.ts
+++ b/src/ugeneui/transl/english.ts
@@ -4,17 +4,17 @@
 <context>
     <name>AboutDialog</name>
     <message>
-        <location filename="../src/main_window/ui/AboutDialog.ui" line="23"/>
+        <location filename="../src/main_window/AboutDialog.ui" line="23"/>
         <source>About UGENE</source>
         <translation>About UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/AboutDialog.ui" line="60"/>
+        <location filename="../src/main_window/AboutDialog.ui" line="60"/>
         <source>Web Page</source>
         <translation>Web Page</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/AboutDialog.ui" line="80"/>
+        <location filename="../src/main_window/AboutDialog.ui" line="80"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
@@ -29,17 +29,17 @@
 <context>
     <name>AppSettingsDialog</name>
     <message>
-        <location filename="../src/app_settings/ui/AppSettingsDialog.ui" line="14"/>
+        <location filename="../src/app_settings/AppSettingsDialog.ui" line="14"/>
         <source>AppSettingsDialog</source>
         <translation>Application Settings</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/ui/AppSettingsDialog.ui" line="50"/>
+        <location filename="../src/app_settings/AppSettingsDialog.ui" line="50"/>
         <source>1</source>
         <translation>1</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/ui/AppSettingsDialog.ui" line="58"/>
+        <location filename="../src/app_settings/AppSettingsDialog.ui" line="58"/>
         <source>GroupBox</source>
         <translation>GroupBox</translation>
     </message>
@@ -47,27 +47,27 @@
 <context>
     <name>CreateNewProjectDialog</name>
     <message>
-        <location filename="../src/project_support/ui/CreateNewProjectWidget.ui" line="20"/>
+        <location filename="../src/project_support/CreateNewProjectWidget.ui" line="20"/>
         <source>Create New Project</source>
         <translation>Create New Project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/CreateNewProjectWidget.ui" line="28"/>
+        <location filename="../src/project_support/CreateNewProjectWidget.ui" line="28"/>
         <source>Project name</source>
         <translation>Project name</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/CreateNewProjectWidget.ui" line="38"/>
+        <location filename="../src/project_support/CreateNewProjectWidget.ui" line="38"/>
         <source>Project folder</source>
         <translation>Project folder</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/CreateNewProjectWidget.ui" line="45"/>
+        <location filename="../src/project_support/CreateNewProjectWidget.ui" line="45"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/CreateNewProjectWidget.ui" line="52"/>
+        <location filename="../src/project_support/CreateNewProjectWidget.ui" line="52"/>
         <source>Project file</source>
         <translation>Project file</translation>
     </message>
@@ -75,29 +75,29 @@
 <context>
     <name>DirectoriesSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="26"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="26"/>
         <source>Path to downloaded data:</source>
         <translation>Path to downloaded data:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="46"/>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="84"/>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="128"/>
+        <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"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="58"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="58"/>
         <source>Path for temporary files</source>
         <translation>Path for temporary files</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="102"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="102"/>
         <source>File storage</source>
         <translation>File storage</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="158"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="158"/>
         <source>Cleanup storage</source>
         <translation>Cleanup storage</translation>
     </message>
@@ -105,17 +105,17 @@
 <context>
     <name>DocumentFormatSelectorDialog</name>
     <message>
-        <location filename="../src/project_support/ui/DocumentFormatSelectorDialog.ui" line="14"/>
+        <location filename="../src/project_support/DocumentFormatSelectorDialog.ui" line="14"/>
         <source>Select Correct Document Format</source>
         <translation>Select Correct Document Format</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/DocumentFormatSelectorDialog.ui" line="32"/>
+        <location filename="../src/project_support/DocumentFormatSelectorDialog.ui" line="32"/>
         <source>Options</source>
         <translation>Options</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/DocumentFormatSelectorDialog.ui" line="39"/>
+        <location filename="../src/project_support/DocumentFormatSelectorDialog.ui" line="39"/>
         <source>File preview</source>
         <translation>File preview</translation>
     </message>
@@ -123,12 +123,12 @@
 <context>
     <name>DocumentProviderSelectorDialog</name>
     <message>
-        <location filename="../src/project_support/ui/DocumentProviderSelectorDialog.ui" line="20"/>
+        <location filename="../src/project_support/DocumentProviderSelectorDialog.ui" line="20"/>
         <source>Select Document Format</source>
         <translation>Select Document Format</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/DocumentProviderSelectorDialog.ui" line="35"/>
+        <location filename="../src/project_support/DocumentProviderSelectorDialog.ui" line="35"/>
         <source>Document Format</source>
         <translation>Document Format</translation>
     </message>
@@ -136,7 +136,7 @@
 <context>
     <name>ExportProjectDialog</name>
     <message>
-        <location filename="../src/project_support/ui/ExportProjectDialog.ui" line="20"/>
+        <location filename="../src/project_support/ExportProjectDialog.ui" line="20"/>
         <source>Export Project</source>
         <translation>Export Project</translation>
     </message>
@@ -153,7 +153,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; font-weight:600; color:#a6392e;">Warning! All pending changes in the active project will be saved!</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/ExportProjectDialog.ui" line="41"/>
+        <location filename="../src/project_support/ExportProjectDialog.ui" line="41"/>
         <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; }
@@ -162,17 +162,17 @@ p, li { white-space: pre-wrap; }
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/ExportProjectDialog.ui" line="54"/>
+        <location filename="../src/project_support/ExportProjectDialog.ui" line="54"/>
         <source>Destination folder</source>
         <translation>Destination folder</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/ExportProjectDialog.ui" line="71"/>
+        <location filename="../src/project_support/ExportProjectDialog.ui" line="71"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/ExportProjectDialog.ui" line="78"/>
+        <location filename="../src/project_support/ExportProjectDialog.ui" line="78"/>
         <source>Project file name</source>
         <translation>Project file name</translation>
     </message>
@@ -180,17 +180,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>FormatSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/format_settings/ui/FormatSettingsWidget.ui" line="14"/>
+        <location filename="../src/app_settings/format_settings/FormatSettingsWidget.ui" line="14"/>
         <source>Format settings</source>
         <translation>Format settings</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/format_settings/ui/FormatSettingsWidget.ui" line="20"/>
+        <location filename="../src/app_settings/format_settings/FormatSettingsWidget.ui" line="20"/>
         <source>Sequence annotations</source>
         <translation>Sequence annotations</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/format_settings/ui/FormatSettingsWidget.ui" line="32"/>
+        <location filename="../src/app_settings/format_settings/FormatSettingsWidget.ui" line="32"/>
         <source>Create annotations for case switchings:</source>
         <translation>Create annotations for case switchings:</translation>
     </message>
@@ -198,47 +198,47 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>LogSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="14"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="14"/>
         <source>LogSettingsWidget</source>
         <translation>Logger settings</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="47"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="47"/>
         <source>Log format</source>
         <translation>Log format</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="53"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="53"/>
         <source>Show date</source>
         <translation>Show date</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="60"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="60"/>
         <source>Date format:</source>
         <translation>Date format:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="83"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="83"/>
         <source>Show log level</source>
         <translation>Show log level</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="90"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="90"/>
         <source>Show log category</source>
         <translation>Show log category</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="97"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="97"/>
         <source>Enable colored log output</source>
         <translation>Enable colored log output</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="106"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="106"/>
         <source>Save output to file:</source>
         <translation>Save output to file:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="116"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="116"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -246,42 +246,42 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>MultipleDocumentsReadingModeSelectorController</name>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="14"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="14"/>
         <source>Multiple Sequence Reading Mode</source>
         <translation>Multiple Sequence Reading Mode</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="26"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="26"/>
         <source>Separate sequence mode</source>
         <translation>Separate sequence mode</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="36"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="36"/>
         <source>Merge sequence mode</source>
         <translation>Merge sequence mode</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="51"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="51"/>
         <source>Number of unknown symbols ('N 'for nucleic acid or 'X' for amino acid) between sequences</source>
         <translation>Number of unknown symbols ('N 'for nucleic acid or 'X' for amino acid) between sequences</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="75"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="75"/>
         <source>New document name</source>
         <translation>New document name</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="92"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="92"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="109"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="109"/>
         <source>Save document</source>
         <translation>Save document</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="207"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="207"/>
         <source>Join sequences into alignment</source>
         <translation>Join sequences into alignment</translation>
     </message>
@@ -289,97 +289,97 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>NetworkSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="47"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="47"/>
         <source>Preferred Web browser</source>
         <translation>Preferred Web browser</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="67"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="67"/>
         <source>System default browser</source>
         <translation>System default browser</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="77"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="77"/>
         <source>Custom browser</source>
         <translation>Custom browser</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="100"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="100"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="187"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="187"/>
         <source>Proxy</source>
         <translation>Proxy</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="198"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="198"/>
         <source>Type:</source>
         <translation>Type:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="205"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="205"/>
         <source>Server:</source>
         <translation>Server:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="212"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="212"/>
         <source>Port:</source>
         <translation>Port:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="225"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="225"/>
         <source>HTTP</source>
         <translation>HTTP</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="334"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="334"/>
         <source>Do not use proxy on following addresses (separate line for each):</source>
         <translation>Do not use proxy on following addresses (separate line for each):</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="266"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="266"/>
         <source>Use authentication with HTTP proxy:</source>
         <translation>Use authentication with HTTP proxy:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="278"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="278"/>
         <source>Login</source>
         <translation>Login</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="288"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="288"/>
         <source>Password</source>
         <translation>Password</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="353"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="353"/>
         <source>SSL settings</source>
         <translation>SSL settings</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="364"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="364"/>
         <source>Secure Socket protocol:</source>
         <translation>Secure Socket protocol:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="121"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="121"/>
         <source>Remote request settings</source>
         <translation>Remote request settings</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="26"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="26"/>
         <source>Network settings</source>
         <translation>Network settings</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="130"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="130"/>
         <source>Remote request timeout</source>
         <translation>Remote request timeout</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="143"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="143"/>
         <source> sec</source>
         <translation>sec</translation>
     </message>
@@ -387,47 +387,47 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PluginViewWidget</name>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="14"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="14"/>
         <source>Plugin Viewer</source>
         <translation>Plugin Viewer</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="24"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="24"/>
         <source>Pugin info:</source>
         <translation>Pugin info:</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="38"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="38"/>
         <source>Plugin license:</source>
         <translation>Plugin license:</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="63"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="63"/>
         <source>Accept</source>
         <translation>Accept</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="70"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="70"/>
         <source>Show License</source>
         <translation>Show License</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="94"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="94"/>
         <source>Type</source>
         <translation>Type</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="99"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="99"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="104"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="104"/>
         <source>State</source>
         <translation>State</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="109"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="109"/>
         <source>Description</source>
         <translation>Description</translation>
     </message>
@@ -435,17 +435,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ProjectViewWidget</name>
     <message>
-        <location filename="../src/project_view/ui/ProjectViewWidget.ui" line="14"/>
+        <location filename="../src/project_view/ProjectViewWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Project View</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ui/ProjectViewWidget.ui" line="92"/>
+        <location filename="../src/project_view/ProjectViewWidget.ui" line="109"/>
         <source>Bookmarks</source>
         <translation>Bookmarks</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ui/ProjectViewWidget.ui" line="62"/>
+        <location filename="../src/project_view/ProjectViewWidget.ui" line="61"/>
         <source>Objects</source>
         <translation>Objects</translation>
     </message>
@@ -453,17 +453,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/Main.cpp" line="726"/>
+        <location filename="../src/Main.cpp" line="728"/>
         <source>UGENE started</source>
         <translation>UGENE started</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="727"/>
+        <location filename="../src/Main.cpp" line="729"/>
         <source>UGENE version: %1 %2-bit</source>
         <translation>UGENE version: %1 %2-bit</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="728"/>
+        <location filename="../src/Main.cpp" line="730"/>
         <source>UGENE distribution: %1</source>
         <translation>UGENE distribution: %1</translation>
     </message>
@@ -476,32 +476,32 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ResourceSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="14"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="14"/>
         <source>Resource settings</source>
         <translation>Resource settings</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="20"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="20"/>
         <source>Application resources</source>
         <translation>Application resources</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="32"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="32"/>
         <source>Optimize for CPU count</source>
         <translation>Optimize for CPU count</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="64"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="64"/>
         <source>Tasks memory limit</source>
         <translation>Tasks memory limit</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="83"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="83"/>
         <source>Mb</source>
         <translation>Mb</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="105"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="105"/>
         <source>Threads limit</source>
         <translation>Threads limit</translation>
     </message>
@@ -509,17 +509,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>SaveProjectDialog</name>
     <message>
-        <location filename="../src/project_support/ui/SaveProjectDialog.ui" line="26"/>
+        <location filename="../src/project_support/SaveProjectDialog.ui" line="26"/>
         <source>UGENE</source>
         <translation>UGENE</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SaveProjectDialog.ui" line="38"/>
+        <location filename="../src/project_support/SaveProjectDialog.ui" line="38"/>
         <source>Save current project?</source>
         <translation>Save current project?</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SaveProjectDialog.ui" line="71"/>
+        <location filename="../src/project_support/SaveProjectDialog.ui" line="71"/>
         <source>don't ask again</source>
         <translation>don't ask again</translation>
     </message>
@@ -527,12 +527,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>SequenceReadingModeSelectorDialog</name>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="14"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="14"/>
         <source>Sequence Reading Options</source>
         <translation>Sequence Reading Options</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="20"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="20"/>
         <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; }
@@ -549,17 +549,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;">Please select the way UGENE will read these sequences:</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="39"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="39"/>
         <source> As separate sequences in sequence viewer</source>
         <translation> As separate sequences in sequence viewer</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="65"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="65"/>
         <source>Merge sequences into a single sequence to show in sequence viewer</source>
         <translation>Merge sequences into a single sequence to show in sequence viewer</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="90"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="90"/>
         <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; }
@@ -572,22 +572,22 @@ 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;">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></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="110"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="110"/>
         <source> bases</source>
         <translation> bases</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="141"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="141"/>
         <source>Join sequences into alignment and open in multiple alignment viewer</source>
         <translation>Join sequences into alignment and open in multiple alignment viewer</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="167"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="167"/>
         <source>Align reads to reference sequence</source>
         <translation>Align reads to reference sequence</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="193"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="193"/>
         <source>File preview:</source>
         <translation>File preview:</translation>
     </message>
@@ -595,7 +595,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>StatisticalReport</name>
     <message>
-        <location filename="../src/shtirlitz/ui/StatisticalReport.ui" line="20"/>
+        <location filename="../src/shtirlitz/StatisticalReport.ui" line="20"/>
         <source>Welcome to UGENE 1.16</source>
         <translation>Welcome to UGENE 1.16</translation>
     </message>
@@ -615,27 +615,27 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>TmpDirChangeDialog</name>
     <message>
-        <location filename="../src/main_window/ui/TmpDirChangeDialog.ui" line="20"/>
+        <location filename="../src/main_window/TmpDirChangeDialog.ui" line="20"/>
         <source>Dialog</source>
         <translation>Create New Project</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/TmpDirChangeDialog.ui" line="39"/>
+        <location filename="../src/main_window/TmpDirChangeDialog.ui" line="39"/>
         <source>Path for temporary files</source>
         <translation>Path for temporary files</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/TmpDirChangeDialog.ui" line="72"/>
+        <location filename="../src/main_window/TmpDirChangeDialog.ui" line="72"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/TmpDirChangeDialog.ui" line="99"/>
+        <location filename="../src/main_window/TmpDirChangeDialog.ui" line="99"/>
         <source>Exit UGENE</source>
         <translation>Exit UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/TmpDirChangeDialog.ui" line="119"/>
+        <location filename="../src/main_window/TmpDirChangeDialog.ui" line="119"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
@@ -671,17 +671,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AddDocumentsToProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="960"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="955"/>
         <source>Loading documents</source>
         <translation>Loading documents</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1022"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1017"/>
         <source>No active project found!</source>
         <translation>No active project found!</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1058"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1053"/>
         <source>Load document and add to project: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -689,7 +689,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AppContextImpl</name>
     <message>
-        <location filename="../src/Main.cpp" line="471"/>
+        <location filename="../src/Main.cpp" line="475"/>
         <source>Style not available %1</source>
         <translation type="unfinished">Style not available %1</translation>
     </message>
@@ -697,8 +697,18 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AppSettingsDialogController</name>
     <message>
-        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="76"/>
-        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="78"/>
+        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="43"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="44"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="80"/>
+        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="82"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
@@ -714,63 +724,54 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CheckUpdatesTask</name>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="44"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="43"/>
         <source>Check for updates</source>
         <translation>Check for updates</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="55"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="54"/>
         <source>Connecting to updates server</source>
         <translation>Connecting to updates server</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="68"/>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="70"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="67"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="69"/>
         <source>Cannot load the current version.</source>
         <translation>Cannot load the current version.</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="97"/>
         <source>Newer version available. You can download it from our site.</source>
-        <translation>Newer version available. You can download it from our site.</translation>
+        <translation type="vanished">Newer version available. You can download it from our site.</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="102"/>
         <source>Don't ask again</source>
-        <translation>Don't ask again</translation>
+        <translation type="vanished">Don't ask again</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="114"/>
         <source>Your version:</source>
-        <translation>Your version:</translation>
+        <translation type="vanished">Your version:</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="115"/>
         <source>Latest version:</source>
-        <translation>Latest version:</translation>
+        <translation type="vanished">Latest version:</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="118"/>
         <source>You have the latest version</source>
-        <translation>You have the latest version</translation>
+        <translation type="vanished">You have the latest version</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="98"/>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="122"/>
         <source>Version information</source>
-        <translation>Version information</translation>
+        <translation type="vanished">Version information</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="79"/>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="81"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="78"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="80"/>
         <source>Connection error while checking for updates: %1</source>
         <translation>Connection error while checking for updates: %1</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="101"/>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="127"/>
         <source>Visit web site</source>
-        <translation>Visit web site</translation>
+        <translation type="vanished">Visit web site</translation>
     </message>
 </context>
 <context>
@@ -1119,7 +1120,7 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::LogSettingsPageController</name>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="50"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="43"/>
         <source>Logging</source>
         <translation>Logging</translation>
     </message>
@@ -1127,30 +1128,35 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::LogSettingsPageWidget</name>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="99"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="94"/>
         <source>Category</source>
         <translation>Category</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="106"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="101"/>
         <source><<all>></source>
         <translation><<all>></translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="214"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="209"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="214"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="209"/>
         <source>Unable to open log file for writing, log writing to file disabled</source>
         <translation>Unable to open log file for writing, log writing to file disabled</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="306"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="297"/>
         <source>Sample text</source>
         <translation>Sample text</translation>
     </message>
+    <message>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="306"/>
+        <source>Save to...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::MWMDIManagerImpl</name>
@@ -1227,99 +1233,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="236"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="245"/>
+        <source>Application paste shortcut is triggered</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="252"/>
         <source>Exit</source>
         <translation>Exit</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="240"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="256"/>
         <source>About</source>
         <translation>About</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="247"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="263"/>
         <source>Visit UGENE Web Site</source>
         <translation>Visit UGENE Web Site</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="251"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="267"/>
         <source>View UGENE Documentation Online</source>
         <translation>View UGENE Documentation Online</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="259"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="275"/>
         <source>Open UGENE User Manual</source>
         <translation>Open UGENE User Manual</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="263"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="279"/>
         <source>Open Workflow Designer Manual</source>
         <translation>Open Workflow Designer Manual</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="267"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="283"/>
         <source>Open Query Designer Manual</source>
         <translation>Open Query Designer Manual</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="271"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="287"/>
         <source>Open Start Page</source>
         <translation>Open Start Page</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="275"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="291"/>
         <source>Crash UGENE</source>
         <translation>Crash UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="280"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="296"/>
         <source>Enable Terminal Usage...</source>
         <translation>Enable Terminal Usage...</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="366"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="383"/>
         <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="367"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="384"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="368"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="385"/>
         <source>Wait</source>
         <translation>Wait</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="446"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="451"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="459"/>
+        <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"/>
         <source>Installation failed</source>
         <translation>Installation failed</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="446"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="463"/>
         <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="451"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="468"/>
         <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="459"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="476"/>
         <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="464"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="481"/>
         <source>Installation successful</source>
         <translation>Installation successful</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="464"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="481"/>
         <source>Terminal usage successfully enabled.
 
 Now you can type ugene in command line to start UGENE.</source>
@@ -1328,12 +1339,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="477"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="494"/>
         <source>Can not open %1 file. </source>
         <translation>Can not open %1 file. </translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="478"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="495"/>
         <source>You can try open it manualy from here: %1 
 or view online documentation.
 
@@ -1344,7 +1355,7 @@ or view online documentation.
 Do you want view online documentation?</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="255"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="271"/>
         <source>Check for Updates</source>
         <translation>Check for Updates</translation>
     </message>
@@ -1352,7 +1363,8 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::MultipleDocumentsReadingModeDialog</name>
     <message>
-        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="60"/>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="233"/>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="249"/>
         <source>Select file to save new document</source>
         <translation>Select file to save new document</translation>
     </message>
@@ -1394,12 +1406,12 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::OpenWithProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1089"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1084"/>
         <source>Opening document: %1</source>
         <translation>Opening document: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1091"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1086"/>
         <source>Opening %1 documents</source>
         <translation>Opening %1 documents</translation>
     </message>
@@ -1519,22 +1531,22 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ProjectDialogController</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="830"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="825"/>
         <source>Create</source>
         <translation>Create</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="831"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="826"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="890"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="885"/>
         <source>Choose directory</source>
         <translation>Choose directory</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="924"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="919"/>
         <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>
@@ -1593,17 +1605,17 @@ Do you want view online documentation?</translation>
     <message>
         <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="228"/>
         <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="232"/>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="940"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="935"/>
         <source>Select files to open</source>
         <translation>Select files to open</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="472"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="470"/>
         <source>Project file '%1' ignored</source>
         <translation>Project file '%1' ignored</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="478"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="476"/>
         <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>
@@ -1612,57 +1624,57 @@ Do you want view online documentation?</translation>
         <translation type="vanished">warning</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="487"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="485"/>
         <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="494"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="490"/>
         <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="571"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="566"/>
         <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="574"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="569"/>
         <source>File is empty: %1</source>
         <translation>File is empty: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="610"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="605"/>
         <source>Project is already opened</source>
         <translation>Project is already opened</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="616"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="611"/>
         <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="617"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="612"/>
         <source>New Window</source>
         <translation>New Window</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="619"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="614"/>
         <source>This Window</source>
         <translation>This Window</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="630"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="625"/>
         <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="636"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="631"/>
         <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="912"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="907"/>
         <source>New Project</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1671,7 +1683,7 @@ Do you want view online documentation?</translation>
         <translation type="vanished">New Project...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="914"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="909"/>
         <source>project</source>
         <translation>project</translation>
     </message>
@@ -1696,12 +1708,12 @@ Do you want view online documentation?</translation>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="840"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="835"/>
         <source>Save project as</source>
         <translation>Save project as</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="841"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="836"/>
         <source>Save</source>
         <translation>Save</translation>
     </message>
@@ -1951,7 +1963,7 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ShtirlitzStartupTask</name>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="315"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="317"/>
         <source>Shtirlitz Startup Task</source>
         <translation>Shtirlitz Startup Task</translation>
     </message>
@@ -1959,32 +1971,32 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ShtirlitzTask</name>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="119"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="121"/>
         <source>Shtirlitz is sending the first-time report</source>
         <translation>Shtirlitz is sending the first-time report</translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="131"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="133"/>
         <source>%1 days passed passed since previous Shtirlitz's report. Shtirlitz is sending the new one.</source>
         <translation>%1 days passed passed since previous Shtirlitz's report. Shtirlitz is sending the new one.</translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="273"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="275"/>
         <source>Connecting to remote server</source>
         <translation>Connecting to remote server</translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="292"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="294"/>
         <source>Cannot resolve destination path for statistical reports</source>
         <translation>Cannot resolve destination path for statistical reports</translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="296"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="298"/>
         <source>Network error while resolving destination URL: </source>
         <translation>Network error while resolving destination URL: </translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="309"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="311"/>
         <source>Network error while sending report: </source>
         <translation>Network error while sending report: </translation>
     </message>
@@ -2033,12 +2045,12 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::StatisticalReportController</name>
     <message>
-        <location filename="../src/shtirlitz/StatisticalReportController.cpp" line="42"/>
+        <location filename="../src/shtirlitz/StatisticalReportController.cpp" line="39"/>
         <source><b>Optional:</b> Help make UGENE better by automatically sending anonymous usage statistics.</source>
         <translation><b>Optional:</b> Help make UGENE better by automatically sending anonymous usage statistics.</translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/StatisticalReportController.cpp" line="45"/>
+        <location filename="../src/shtirlitz/StatisticalReportController.cpp" line="42"/>
         <source>Welcome to UGENE %1.%2</source>
         <translation>Welcome to UGENE %1.%2</translation>
     </message>
@@ -2079,18 +2091,30 @@ Do you want view online documentation?</translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="446"/>
-        <source>status</source>
-        <translation>status</translation>
+        <source>Status</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="448"/>
-        <source>error:</source>
-        <translation>error:</translation>
+        <source>Error:</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="453"/>
+        <source>Time</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>status</source>
+        <translation type="vanished">status</translation>
+    </message>
+    <message>
+        <source>error:</source>
+        <translation type="vanished">error:</translation>
+    </message>
+    <message>
         <source>time</source>
-        <translation>time</translation>
+        <translation type="vanished">time</translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="513"/>
@@ -2245,6 +2269,35 @@ Do you want view online documentation?</translation>
     </message>
 </context>
 <context>
+    <name>U2::UpdateMessage</name>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="128"/>
+        <source>UGENE %1 is available for downloading.
+Would you like to download and install it?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="129"/>
+        <source>New Updates</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="133"/>
+        <source>Update now</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="134"/>
+        <source>Ask later</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="135"/>
+        <source>Skip this update</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::UserApplicationsSettingsPageController</name>
     <message>
         <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="46"/>
@@ -2270,28 +2323,28 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::UserApplicationsSettingsPageWidget</name>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="133"/>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="177"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="135"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="181"/>
         <source>Custom translation [%1]</source>
         <translation>Custom translation [%1]</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="143"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="145"/>
         <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="144"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="146"/>
         <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="145"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="147"/>
         <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="165"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="169"/>
         <source>Select translation file</source>
         <translation>Select translation file</translation>
     </message>
@@ -2299,12 +2352,40 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/Main.cpp" line="449"/>
+        <location filename="../src/Main.cpp" line="453"/>
         <source>UGENE initialization started</source>
         <translation type="unfinished">UGENE initialization started</translation>
     </message>
 </context>
 <context>
+    <name>U2::VersionMessage</name>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="157"/>
+        <source>Version Information</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="163"/>
+        <source>Update Now</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="180"/>
+        <source>Your version:</source>
+        <translation type="unfinished">Your version:</translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="180"/>
+        <source>Latest version:</source>
+        <translation type="unfinished">Latest version:</translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="182"/>
+        <source>You have the latest version</source>
+        <translation type="unfinished">You have the latest version</translation>
+    </message>
+</context>
+<context>
     <name>U2::WelcomePageController</name>
     <message>
         <location filename="../src/welcome_page/WelcomePageController.cpp" line="86"/>
@@ -2320,12 +2401,12 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::WelcomePageWidget</name>
     <message>
-        <location filename="../src/welcome_page/WelcomePageWidget.cpp" line="67"/>
+        <location filename="../src/welcome_page/WelcomePageWidget.cpp" line="61"/>
         <source>No opened projects yet</source>
         <translation>No opened projects yet</translation>
     </message>
     <message>
-        <location filename="../src/welcome_page/WelcomePageWidget.cpp" line="68"/>
+        <location filename="../src/welcome_page/WelcomePageWidget.cpp" line="62"/>
         <source>No opened files yet</source>
         <translation>No opened files yet</translation>
     </message>
@@ -2333,62 +2414,72 @@ Do you want view online documentation?</translation>
 <context>
     <name>UserApplicationsSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="26"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="26"/>
         <source>LangBoxTitle</source>
         <translation>Language of User Interface (applied after restart)</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="41"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="41"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="63"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="63"/>
         <source>Window Layout</source>
         <translation>Window Layout</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="69"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="69"/>
         <source>Multiple documents</source>
         <translation>Multiple documents</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="79"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="79"/>
         <source>Tabbed documents</source>
         <translation>Tabbed documents</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="98"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="98"/>
         <source>Open last project at startup</source>
         <translation>Open last project at startup</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="92"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="92"/>
         <source>Project</source>
         <translation>Project</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="128"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="128"/>
         <source>Statistical reports</source>
         <translation>Statistical reports</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="134"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="134"/>
         <source>Enable statistical reports collecting</source>
         <translation>Enable statistical reports collecting</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="144"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="144"/>
+        <source>Updates</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="150"/>
+        <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"/>
         <source>Default settings</source>
         <translation>Default settings</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="150"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="166"/>
         <source>Reset settings to default on the next run</source>
         <translation>Reset settings to default on the next run</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="51"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="51"/>
         <source>Appearance</source>
         <translation>Appearance</translation>
     </message>
diff --git a/src/ugeneui/transl/russian.ts b/src/ugeneui/transl/russian.ts
index d2cc0af..ccb1f6f 100644
--- a/src/ugeneui/transl/russian.ts
+++ b/src/ugeneui/transl/russian.ts
@@ -4,17 +4,17 @@
 <context>
     <name>AboutDialog</name>
     <message>
-        <location filename="../src/main_window/ui/AboutDialog.ui" line="23"/>
+        <location filename="../src/main_window/AboutDialog.ui" line="23"/>
         <source>About UGENE</source>
         <translation>О программе</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/AboutDialog.ui" line="60"/>
+        <location filename="../src/main_window/AboutDialog.ui" line="60"/>
         <source>Web Page</source>
         <translation>Домашняя страница</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/AboutDialog.ui" line="80"/>
+        <location filename="../src/main_window/AboutDialog.ui" line="80"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
@@ -29,17 +29,17 @@
 <context>
     <name>AppSettingsDialog</name>
     <message>
-        <location filename="../src/app_settings/ui/AppSettingsDialog.ui" line="14"/>
+        <location filename="../src/app_settings/AppSettingsDialog.ui" line="14"/>
         <source>AppSettingsDialog</source>
         <translation>Настройки</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/ui/AppSettingsDialog.ui" line="50"/>
+        <location filename="../src/app_settings/AppSettingsDialog.ui" line="50"/>
         <source>1</source>
         <translation>1</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/ui/AppSettingsDialog.ui" line="58"/>
+        <location filename="../src/app_settings/AppSettingsDialog.ui" line="58"/>
         <source>GroupBox</source>
         <translation>GroupBox</translation>
     </message>
@@ -47,27 +47,27 @@
 <context>
     <name>CreateNewProjectDialog</name>
     <message>
-        <location filename="../src/project_support/ui/CreateNewProjectWidget.ui" line="20"/>
+        <location filename="../src/project_support/CreateNewProjectWidget.ui" line="20"/>
         <source>Create New Project</source>
         <translation>Создать новый проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/CreateNewProjectWidget.ui" line="28"/>
+        <location filename="../src/project_support/CreateNewProjectWidget.ui" line="28"/>
         <source>Project name</source>
         <translation>Имя проекта</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/CreateNewProjectWidget.ui" line="38"/>
+        <location filename="../src/project_support/CreateNewProjectWidget.ui" line="38"/>
         <source>Project folder</source>
         <translation>Папка проекта</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/CreateNewProjectWidget.ui" line="45"/>
+        <location filename="../src/project_support/CreateNewProjectWidget.ui" line="45"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/CreateNewProjectWidget.ui" line="52"/>
+        <location filename="../src/project_support/CreateNewProjectWidget.ui" line="52"/>
         <source>Project file</source>
         <translation>Файл проекта</translation>
     </message>
@@ -75,29 +75,29 @@
 <context>
     <name>DirectoriesSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="26"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="26"/>
         <source>Path to downloaded data:</source>
         <translation>Папка для загрузок:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="46"/>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="84"/>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="128"/>
+        <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"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="58"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="58"/>
         <source>Path for temporary files</source>
         <translation>Папка для временных файлов</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="102"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="102"/>
         <source>File storage</source>
         <translation>Хранение файла</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui" line="158"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="158"/>
         <source>Cleanup storage</source>
         <translation>Очистить</translation>
     </message>
@@ -105,17 +105,17 @@
 <context>
     <name>DocumentFormatSelectorDialog</name>
     <message>
-        <location filename="../src/project_support/ui/DocumentFormatSelectorDialog.ui" line="14"/>
+        <location filename="../src/project_support/DocumentFormatSelectorDialog.ui" line="14"/>
         <source>Select Correct Document Format</source>
         <translation>Выбор формата открываемого документа</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/DocumentFormatSelectorDialog.ui" line="32"/>
+        <location filename="../src/project_support/DocumentFormatSelectorDialog.ui" line="32"/>
         <source>Options</source>
         <translation>Опции</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/DocumentFormatSelectorDialog.ui" line="39"/>
+        <location filename="../src/project_support/DocumentFormatSelectorDialog.ui" line="39"/>
         <source>File preview</source>
         <translation>Просмотр</translation>
     </message>
@@ -123,12 +123,12 @@
 <context>
     <name>DocumentProviderSelectorDialog</name>
     <message>
-        <location filename="../src/project_support/ui/DocumentProviderSelectorDialog.ui" line="20"/>
+        <location filename="../src/project_support/DocumentProviderSelectorDialog.ui" line="20"/>
         <source>Select Document Format</source>
         <translation>Выбор формата открываемого документа</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/DocumentProviderSelectorDialog.ui" line="35"/>
+        <location filename="../src/project_support/DocumentProviderSelectorDialog.ui" line="35"/>
         <source>Document Format</source>
         <translation>Формат документа</translation>
     </message>
@@ -136,7 +136,7 @@
 <context>
     <name>ExportProjectDialog</name>
     <message>
-        <location filename="../src/project_support/ui/ExportProjectDialog.ui" line="20"/>
+        <location filename="../src/project_support/ExportProjectDialog.ui" line="20"/>
         <source>Export Project</source>
         <translation>Экспортировать проект</translation>
     </message>
@@ -153,7 +153,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; font-weight:600; color:#a6392e;">Внимание! Все отложенные изменения в активном проекте будут сохранены!</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/ExportProjectDialog.ui" line="41"/>
+        <location filename="../src/project_support/ExportProjectDialog.ui" line="41"/>
         <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; }
@@ -162,17 +162,17 @@ p, li { white-space: pre-wrap; }
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/ExportProjectDialog.ui" line="54"/>
+        <location filename="../src/project_support/ExportProjectDialog.ui" line="54"/>
         <source>Destination folder</source>
         <translation>Сохранить в директорию</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/ExportProjectDialog.ui" line="71"/>
+        <location filename="../src/project_support/ExportProjectDialog.ui" line="71"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/ExportProjectDialog.ui" line="78"/>
+        <location filename="../src/project_support/ExportProjectDialog.ui" line="78"/>
         <source>Project file name</source>
         <translation>Имя файла проекта</translation>
     </message>
@@ -180,17 +180,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>FormatSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/format_settings/ui/FormatSettingsWidget.ui" line="14"/>
+        <location filename="../src/app_settings/format_settings/FormatSettingsWidget.ui" line="14"/>
         <source>Format settings</source>
         <translation>Настройки формата</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/format_settings/ui/FormatSettingsWidget.ui" line="20"/>
+        <location filename="../src/app_settings/format_settings/FormatSettingsWidget.ui" line="20"/>
         <source>Sequence annotations</source>
         <translation>Аннотации</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/format_settings/ui/FormatSettingsWidget.ui" line="32"/>
+        <location filename="../src/app_settings/format_settings/FormatSettingsWidget.ui" line="32"/>
         <source>Create annotations for case switchings:</source>
         <translation>Создать аннотации для:</translation>
     </message>
@@ -198,47 +198,47 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>LogSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="14"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="14"/>
         <source>LogSettingsWidget</source>
         <translation>Logger settings</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="47"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="47"/>
         <source>Log format</source>
         <translation>Формат записей</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="53"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="53"/>
         <source>Show date</source>
         <translation>Показывать дату</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="60"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="60"/>
         <source>Date format:</source>
         <translation>Формат даты:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="83"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="83"/>
         <source>Show log level</source>
         <translation>Показывать тип</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="90"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="90"/>
         <source>Show log category</source>
         <translation>Показывать категорию</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="97"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="97"/>
         <source>Enable colored log output</source>
         <translation>Разрешить подсветку событий лога</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="106"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="106"/>
         <source>Save output to file:</source>
         <translation>Сохранить в файл:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/ui/LogSettingsWidget.ui" line="116"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsWidget.ui" line="116"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -246,42 +246,42 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>MultipleDocumentsReadingModeSelectorController</name>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="14"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="14"/>
         <source>Multiple Sequence Reading Mode</source>
         <translation>Чтение нескольких последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="26"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="26"/>
         <source>Separate sequence mode</source>
         <translation>Разделить последовательности</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="36"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="36"/>
         <source>Merge sequence mode</source>
         <translation>Соединить последовательности</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="51"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="51"/>
         <source>Number of unknown symbols ('N 'for nucleic acid or 'X' for amino acid) between sequences</source>
         <translation>Число неизвестных символов ('N' для нуклеотидных и 'X' для амино) между последовательностями</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="75"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="75"/>
         <source>New document name</source>
         <translation>Имя нового документа</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="92"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="92"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="109"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="109"/>
         <source>Save document</source>
         <translation>Сохранить документ</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/MultipleSequenceFilesReadingMode.ui" line="207"/>
+        <location filename="../src/project_support/MultipleSequenceFilesReadingMode.ui" line="207"/>
         <source>Join sequences into alignment</source>
         <translation>Соединить последовательности в выравнивание</translation>
     </message>
@@ -289,97 +289,97 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>NetworkSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="47"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="47"/>
         <source>Preferred Web browser</source>
         <translation>Предпочитаемый Интернет-браузер </translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="67"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="67"/>
         <source>System default browser</source>
         <translation>Стандартный браузер ОС</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="77"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="77"/>
         <source>Custom browser</source>
         <translation>Обычный браузер</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="100"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="100"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="187"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="187"/>
         <source>Proxy</source>
         <translation>Прокси</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="198"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="198"/>
         <source>Type:</source>
         <translation>Тип:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="205"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="205"/>
         <source>Server:</source>
         <translation>Сервер:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="212"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="212"/>
         <source>Port:</source>
         <translation>Порт:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="225"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="225"/>
         <source>HTTP</source>
         <translation>HTTP</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="334"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="334"/>
         <source>Do not use proxy on following addresses (separate line for each):</source>
         <translation>Не использовать прокси для следующих адресов (разделять переводом строки):</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="266"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="266"/>
         <source>Use authentication with HTTP proxy:</source>
         <translation>Использовать аутентификацию с HTTP прокси:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="278"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="278"/>
         <source>Login</source>
         <translation>Логин</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="288"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="288"/>
         <source>Password</source>
         <translation>Пароль</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="353"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="353"/>
         <source>SSL settings</source>
         <translation>Настройки SSL</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="364"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="364"/>
         <source>Secure Socket protocol:</source>
         <translation>Безопасный протокол:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="121"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="121"/>
         <source>Remote request settings</source>
         <translation>Настройки удаленного запроса</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="26"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="26"/>
         <source>Network settings</source>
         <translation>Конфигурация сети</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="130"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="130"/>
         <source>Remote request timeout</source>
         <translation>Тайм-фут удаленного запроса</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/network_settings/ui/NetworkSettingsWidget.ui" line="143"/>
+        <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="143"/>
         <source> sec</source>
         <translation>сек</translation>
     </message>
@@ -387,47 +387,47 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PluginViewWidget</name>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="14"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="14"/>
         <source>Plugin Viewer</source>
         <translation>Управление модулями</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="24"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="24"/>
         <source>Pugin info:</source>
         <translation>Информация о модуле:</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="38"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="38"/>
         <source>Plugin license:</source>
         <translation>Лицензия модуля:</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="63"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="63"/>
         <source>Accept</source>
         <translation>Принять</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="70"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="70"/>
         <source>Show License</source>
         <translation>Показать лицензию</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="94"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="94"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="99"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="99"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="104"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="104"/>
         <source>State</source>
         <translation>Статус</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/ui/PluginViewerWidget.ui" line="109"/>
+        <location filename="../src/plugin_viewer/PluginViewerWidget.ui" line="109"/>
         <source>Description</source>
         <translation>Описание</translation>
     </message>
@@ -435,17 +435,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ProjectViewWidget</name>
     <message>
-        <location filename="../src/project_view/ui/ProjectViewWidget.ui" line="14"/>
+        <location filename="../src/project_view/ProjectViewWidget.ui" line="14"/>
         <source>Form</source>
         <translation>Проект</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ui/ProjectViewWidget.ui" line="92"/>
+        <location filename="../src/project_view/ProjectViewWidget.ui" line="109"/>
         <source>Bookmarks</source>
         <translation>Закладки</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ui/ProjectViewWidget.ui" line="62"/>
+        <location filename="../src/project_view/ProjectViewWidget.ui" line="61"/>
         <source>Objects</source>
         <translation>Объекты</translation>
     </message>
@@ -453,17 +453,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/Main.cpp" line="726"/>
+        <location filename="../src/Main.cpp" line="728"/>
         <source>UGENE started</source>
         <translation>UGENE готов к работе</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="727"/>
+        <location filename="../src/Main.cpp" line="729"/>
         <source>UGENE version: %1 %2-bit</source>
         <translation>Версия UGENE: %1 %2-бит</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="728"/>
+        <location filename="../src/Main.cpp" line="730"/>
         <source>UGENE distribution: %1</source>
         <translation>Распределение UGENE: %1</translation>
     </message>
@@ -476,32 +476,32 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ResourceSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="14"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="14"/>
         <source>Resource settings</source>
         <translation>Параметры ресурсов</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="20"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="20"/>
         <source>Application resources</source>
         <translation>Общие ресурсы приложения</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="32"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="32"/>
         <source>Optimize for CPU count</source>
         <translation>Оптимизировать под кол-во ЦПУ</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="64"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="64"/>
         <source>Tasks memory limit</source>
         <translation>Ограничение по памяти для задач</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="83"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="83"/>
         <source>Mb</source>
         <translation>Мб</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui" line="105"/>
+        <location filename="../src/app_settings/resource_settings/ResourceSettingsWidget.ui" line="105"/>
         <source>Threads limit</source>
         <translation>Ограничение по параллельным потокам</translation>
     </message>
@@ -509,17 +509,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>SaveProjectDialog</name>
     <message>
-        <location filename="../src/project_support/ui/SaveProjectDialog.ui" line="26"/>
+        <location filename="../src/project_support/SaveProjectDialog.ui" line="26"/>
         <source>UGENE</source>
         <translation>UGENE</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SaveProjectDialog.ui" line="38"/>
+        <location filename="../src/project_support/SaveProjectDialog.ui" line="38"/>
         <source>Save current project?</source>
         <translation>Сохранить текущий проект?</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SaveProjectDialog.ui" line="71"/>
+        <location filename="../src/project_support/SaveProjectDialog.ui" line="71"/>
         <source>don't ask again</source>
         <translation>больше не задавать этот вопрос</translation>
     </message>
@@ -527,12 +527,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>SequenceReadingModeSelectorDialog</name>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="14"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="14"/>
         <source>Sequence Reading Options</source>
         <translation>Способы отображения последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="20"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="20"/>
         <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; }
@@ -549,17 +549,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;">Выберите способ отображения этих последовательностей:</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="39"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="39"/>
         <source> As separate sequences in sequence viewer</source>
         <translation>Как отдельные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="65"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="65"/>
         <source>Merge sequences into a single sequence to show in sequence viewer</source>
         <translation>Соединить все последовательности в одну последовательность</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="90"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="90"/>
         <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; }
@@ -572,22 +572,22 @@ 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><span style=" font-size:8pt; font-style:italic;">('N 'для нуклеотидных или 'X' для аминных)</span><span style=" font-size:8pt;"> между частями:</span></p></body></html&gt [...]
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="110"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="110"/>
         <source> bases</source>
         <translation> осн</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="141"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="141"/>
         <source>Join sequences into alignment and open in multiple alignment viewer</source>
         <translation>Соединить последовательности во множественное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="167"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="167"/>
         <source>Align reads to reference sequence</source>
         <translation>Выровнять на референсную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ui/SequenceReadingModeSelectorDialog.ui" line="193"/>
+        <location filename="../src/project_support/SequenceReadingModeSelectorDialog.ui" line="193"/>
         <source>File preview:</source>
         <translation>Просмотр:</translation>
     </message>
@@ -595,7 +595,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>StatisticalReport</name>
     <message>
-        <location filename="../src/shtirlitz/ui/StatisticalReport.ui" line="20"/>
+        <location filename="../src/shtirlitz/StatisticalReport.ui" line="20"/>
         <source>Welcome to UGENE 1.16</source>
         <translation>Добро пожаловать в UGENE 1.16</translation>
     </message>
@@ -615,27 +615,27 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>TmpDirChangeDialog</name>
     <message>
-        <location filename="../src/main_window/ui/TmpDirChangeDialog.ui" line="20"/>
+        <location filename="../src/main_window/TmpDirChangeDialog.ui" line="20"/>
         <source>Dialog</source>
         <translation>Содать проект</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/TmpDirChangeDialog.ui" line="39"/>
+        <location filename="../src/main_window/TmpDirChangeDialog.ui" line="39"/>
         <source>Path for temporary files</source>
         <translation>Папка для временных файлов</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/TmpDirChangeDialog.ui" line="72"/>
+        <location filename="../src/main_window/TmpDirChangeDialog.ui" line="72"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/TmpDirChangeDialog.ui" line="99"/>
+        <location filename="../src/main_window/TmpDirChangeDialog.ui" line="99"/>
         <source>Exit UGENE</source>
         <translation>Выход</translation>
     </message>
     <message>
-        <location filename="../src/main_window/ui/TmpDirChangeDialog.ui" line="119"/>
+        <location filename="../src/main_window/TmpDirChangeDialog.ui" line="119"/>
         <source>OK</source>
         <translation>Готово</translation>
     </message>
@@ -671,17 +671,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AddDocumentsToProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="960"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="955"/>
         <source>Loading documents</source>
         <translation>Loading documents</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1022"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1017"/>
         <source>No active project found!</source>
         <translation>No active project found!</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1058"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1053"/>
         <source>Load document and add to project: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -689,7 +689,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AppContextImpl</name>
     <message>
-        <location filename="../src/Main.cpp" line="471"/>
+        <location filename="../src/Main.cpp" line="475"/>
         <source>Style not available %1</source>
         <translation type="unfinished">Стиль не доступен: %1</translation>
     </message>
@@ -697,8 +697,18 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AppSettingsDialogController</name>
     <message>
-        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="76"/>
-        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="78"/>
+        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="43"/>
+        <source>OK</source>
+        <translation>ОК</translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="44"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="80"/>
+        <location filename="../src/app_settings/AppSettingsDialogController.cpp" line="82"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
@@ -714,63 +724,54 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CheckUpdatesTask</name>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="44"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="43"/>
         <source>Check for updates</source>
         <translation>Проверить обновления</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="55"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="54"/>
         <source>Connecting to updates server</source>
         <translation>Соединение с сервером</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="68"/>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="70"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="67"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="69"/>
         <source>Cannot load the current version.</source>
         <translation>Cannot load the current version.</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="79"/>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="81"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="78"/>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="80"/>
         <source>Connection error while checking for updates: %1</source>
         <translation>Connection error while checking for updates: %1</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="97"/>
         <source>Newer version available. You can download it from our site.</source>
-        <translation>Доступна более новая версия. Вы можете скачать ее с сайта.</translation>
+        <translation type="vanished">Доступна более новая версия. Вы можете скачать ее с сайта.</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="102"/>
         <source>Don't ask again</source>
-        <translation>Больше не спрашивать</translation>
+        <translation type="vanished">Больше не спрашивать</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="114"/>
         <source>Your version:</source>
-        <translation>Локальная версия:</translation>
+        <translation type="vanished">Локальная версия:</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="115"/>
         <source>Latest version:</source>
-        <translation>Последняя версия:</translation>
+        <translation type="vanished">Последняя версия:</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="118"/>
         <source>You have the latest version</source>
-        <translation>У вас установлена самая последняя версия</translation>
+        <translation type="vanished">У вас установлена самая последняя версия</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="98"/>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="122"/>
         <source>Version information</source>
-        <translation>Информация</translation>
+        <translation type="vanished">Информация</translation>
     </message>
     <message>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="101"/>
-        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="127"/>
         <source>Visit web site</source>
-        <translation>Перейти на сайт UGENE</translation>
+        <translation type="vanished">Перейти на сайт UGENE</translation>
     </message>
 </context>
 <context>
@@ -1119,7 +1120,7 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::LogSettingsPageController</name>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="50"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="43"/>
         <source>Logging</source>
         <translation>Настройки логирования</translation>
     </message>
@@ -1127,30 +1128,35 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::LogSettingsPageWidget</name>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="99"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="94"/>
         <source>Category</source>
         <translation>Категория</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="106"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="101"/>
         <source><<all>></source>
         <translation><< все >></translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="214"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="209"/>
         <source>Warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="214"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="209"/>
         <source>Unable to open log file for writing, log writing to file disabled</source>
         <translation>Невозможно открыть файл логирования для записи, запись лога в файл недоступна</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="306"/>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="297"/>
         <source>Sample text</source>
         <translation>образец</translation>
     </message>
+    <message>
+        <location filename="../src/app_settings/logview_settings/LogSettingsGUIController.cpp" line="306"/>
+        <source>Save to...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::MWMDIManagerImpl</name>
@@ -1227,104 +1233,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="236"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="252"/>
         <source>Exit</source>
         <translation>Выход</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="366"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="383"/>
         <source>Shutdown already in process. Close UGENE immediately?</source>
         <translation>Программа уже в процессе выключения. Закрыть немедленно?</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="367"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="384"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="368"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="385"/>
         <source>Wait</source>
         <translation>Подождать</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="240"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="256"/>
         <source>About</source>
         <translation>О программе</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="247"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="245"/>
+        <source>Application paste shortcut is triggered</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="263"/>
         <source>Visit UGENE Web Site</source>
         <translation>Перейти на сайт UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="251"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="267"/>
         <source>View UGENE Documentation Online</source>
         <translation>Открыть документацию UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="255"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="271"/>
         <source>Check for Updates</source>
         <translation>Проверить обновления</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="259"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="275"/>
         <source>Open UGENE User Manual</source>
         <translation>Открыть основное руководство UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="263"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="279"/>
         <source>Open Workflow Designer Manual</source>
         <translation>Открыть руководство дизайнера вычислительных схем</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="267"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="283"/>
         <source>Open Query Designer Manual</source>
         <translation>Открыть руководство дизайнера вычислительных запросов</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="271"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="287"/>
         <source>Open Start Page</source>
         <translation>Открыть стартовую страницу</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="275"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="291"/>
         <source>Crash UGENE</source>
         <translation>Падение UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="280"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="296"/>
         <source>Enable Terminal Usage...</source>
         <translation>Разрешить использование терминала...</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="446"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="451"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="459"/>
+        <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"/>
         <source>Installation failed</source>
         <translation>Installation failed</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="446"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="463"/>
         <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="451"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="468"/>
         <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="459"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="476"/>
         <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="464"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="481"/>
         <source>Installation successful</source>
         <translation>Installation successful</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="464"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="481"/>
         <source>Terminal usage successfully enabled.
 
 Now you can type ugene in command line to start UGENE.</source>
@@ -1333,12 +1344,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="477"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="494"/>
         <source>Can not open %1 file. </source>
         <translation>Невозможно открыть файл %1. </translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="478"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="495"/>
         <source>You can try open it manualy from here: %1 
 or view online documentation.
 
@@ -1352,7 +1363,8 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::MultipleDocumentsReadingModeDialog</name>
     <message>
-        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="60"/>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="233"/>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="249"/>
         <source>Select file to save new document</source>
         <translation>Выберите файл куда сохранить новый документ</translation>
     </message>
@@ -1394,12 +1406,12 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::OpenWithProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1089"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1084"/>
         <source>Opening document: %1</source>
         <translation>Opening document: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1091"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1086"/>
         <source>Opening %1 documents</source>
         <translation>Opening %1 documents</translation>
     </message>
@@ -1519,22 +1531,22 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ProjectDialogController</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="830"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="825"/>
         <source>Create</source>
         <translation>Создать</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="831"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="826"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="890"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="885"/>
         <source>Choose directory</source>
         <translation>Выбрать директорию</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="924"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="919"/>
         <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>
@@ -1592,17 +1604,17 @@ Do you want view online documentation?</source>
     <message>
         <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="228"/>
         <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="232"/>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="940"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="935"/>
         <source>Select files to open</source>
         <translation>Открыть файлы</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="472"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="470"/>
         <source>Project file '%1' ignored</source>
         <translation>Project file '%1' ignored</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="478"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="476"/>
         <source>The document with the same URL is already added to the project</source>
         <translation>Этот документ уже добавлен в проект</translation>
     </message>
@@ -1611,62 +1623,62 @@ Do you want view online documentation?</source>
         <translation type="vanished">внимание</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="487"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="485"/>
         <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="494"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="490"/>
         <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="571"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="566"/>
         <source>Failed to detect file format: %1</source>
         <translation>Невозможно определить формат файла: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="574"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="569"/>
         <source>File is empty: %1</source>
         <translation>Файл пуст: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="610"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="605"/>
         <source>Project is already opened</source>
         <translation>Проект уже открыт</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="616"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="611"/>
         <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="617"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="612"/>
         <source>New Window</source>
         <translation>В новом окне</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="619"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="614"/>
         <source>This Window</source>
         <translation>В текущем окне</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="630"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="625"/>
         <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="636"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="631"/>
         <source>Stopped loading project: %1. Reason: active project found</source>
         <translation>Загрузка проекта остановлена: %1, поскольку активен другой проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="912"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="907"/>
         <source>New Project</source>
         <translation>Новый проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="914"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="909"/>
         <source>project</source>
         <translation>проект</translation>
     </message>
@@ -1691,12 +1703,12 @@ Do you want view online documentation?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="840"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="835"/>
         <source>Save project as</source>
         <translation>Сохранить проект как</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="841"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="836"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
@@ -1946,7 +1958,7 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ShtirlitzStartupTask</name>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="315"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="317"/>
         <source>Shtirlitz Startup Task</source>
         <translation>Shtirlitz Startup Task</translation>
     </message>
@@ -1954,32 +1966,32 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ShtirlitzTask</name>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="119"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="121"/>
         <source>Shtirlitz is sending the first-time report</source>
         <translation>Отправляется отчет о системе</translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="131"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="133"/>
         <source>%1 days passed passed since previous Shtirlitz's report. Shtirlitz is sending the new one.</source>
         <translation>%1 дней прошло со времени отправки последнего отчета. Отправляется новый отчет.</translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="273"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="275"/>
         <source>Connecting to remote server</source>
         <translation>Соединение с удаленным сервером</translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="292"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="294"/>
         <source>Cannot resolve destination path for statistical reports</source>
         <translation>Невозможно определить адрес сервера статистики</translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="296"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="298"/>
         <source>Network error while resolving destination URL: </source>
         <translation>Ошибка сети при определении адреса сервера статистики:</translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="309"/>
+        <location filename="../src/shtirlitz/Shtirlitz.cpp" line="311"/>
         <source>Network error while sending report: </source>
         <translation>Ошибка сети при отправке отчета:</translation>
     </message>
@@ -2028,12 +2040,12 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::StatisticalReportController</name>
     <message>
-        <location filename="../src/shtirlitz/StatisticalReportController.cpp" line="42"/>
+        <location filename="../src/shtirlitz/StatisticalReportController.cpp" line="39"/>
         <source><b>Optional:</b> Help make UGENE better by automatically sending anonymous usage statistics.</source>
         <translation><b>Опционально:</b> Помогите сделать UGENE лучше, автоматически отправляя анонимную статистику использования.</translation>
     </message>
     <message>
-        <location filename="../src/shtirlitz/StatisticalReportController.cpp" line="45"/>
+        <location filename="../src/shtirlitz/StatisticalReportController.cpp" line="42"/>
         <source>Welcome to UGENE %1.%2</source>
         <translation>Добро пожаловать в UGENE %1.%2</translation>
     </message>
@@ -2074,18 +2086,30 @@ Do you want view online documentation?</source>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="446"/>
-        <source>status</source>
-        <translation>состояние</translation>
+        <source>Status</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="448"/>
-        <source>error:</source>
-        <translation>ошибка:</translation>
+        <source>Error:</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="453"/>
+        <source>Time</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>status</source>
+        <translation type="vanished">состояние</translation>
+    </message>
+    <message>
+        <source>error:</source>
+        <translation type="vanished">ошибка:</translation>
+    </message>
+    <message>
         <source>time</source>
-        <translation>время выполнения</translation>
+        <translation type="vanished">время выполнения</translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="513"/>
@@ -2239,6 +2263,35 @@ Do you want view online documentation?</source>
     </message>
 </context>
 <context>
+    <name>U2::UpdateMessage</name>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="128"/>
+        <source>UGENE %1 is available for downloading.
+Would you like to download and install it?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="129"/>
+        <source>New Updates</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="133"/>
+        <source>Update now</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="134"/>
+        <source>Ask later</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="135"/>
+        <source>Skip this update</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::UserApplicationsSettingsPageController</name>
     <message>
         <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="46"/>
@@ -2264,28 +2317,28 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::UserApplicationsSettingsPageWidget</name>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="133"/>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="177"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="135"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="181"/>
         <source>Custom translation [%1]</source>
         <translation>Другой перевод [%1]</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="143"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="145"/>
         <source>Ask to save new project on exit</source>
         <translation>Спрашивать о сохранении нового проекта при выходе</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="144"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="146"/>
         <source>Don't save new project on exit</source>
         <translation>Не сохранять новый проект при выходе</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="147"/>
         <source>Always save new project on exit</source>
         <translation>Всегда сохранять новый проект при выходе</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="165"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="169"/>
         <source>Select translation file</source>
         <translation>Выбрать файл перевода</translation>
     </message>
@@ -2293,12 +2346,40 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/Main.cpp" line="449"/>
+        <location filename="../src/Main.cpp" line="453"/>
         <source>UGENE initialization started</source>
         <translation type="unfinished">Инициализация UGENE</translation>
     </message>
 </context>
 <context>
+    <name>U2::VersionMessage</name>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="157"/>
+        <source>Version Information</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="163"/>
+        <source>Update Now</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="180"/>
+        <source>Your version:</source>
+        <translation type="unfinished">Локальная версия:</translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="180"/>
+        <source>Latest version:</source>
+        <translation type="unfinished">Последняя версия:</translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/CheckUpdatesTask.cpp" line="182"/>
+        <source>You have the latest version</source>
+        <translation type="unfinished">У вас установлена самая последняя версия</translation>
+    </message>
+</context>
+<context>
     <name>U2::WelcomePageController</name>
     <message>
         <location filename="../src/welcome_page/WelcomePageController.cpp" line="86"/>
@@ -2314,12 +2395,12 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::WelcomePageWidget</name>
     <message>
-        <location filename="../src/welcome_page/WelcomePageWidget.cpp" line="67"/>
+        <location filename="../src/welcome_page/WelcomePageWidget.cpp" line="61"/>
         <source>No opened projects yet</source>
         <translation>Нет открытых проектов</translation>
     </message>
     <message>
-        <location filename="../src/welcome_page/WelcomePageWidget.cpp" line="68"/>
+        <location filename="../src/welcome_page/WelcomePageWidget.cpp" line="62"/>
         <source>No opened files yet</source>
         <translation>Нет открытых файлов</translation>
     </message>
@@ -2327,62 +2408,72 @@ Do you want view online documentation?</source>
 <context>
     <name>UserApplicationsSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="26"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="26"/>
         <source>LangBoxTitle</source>
         <translation>Язык интерфейса (изменение после перезапуска)</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="41"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="41"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="63"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="63"/>
         <source>Window Layout</source>
         <translation>Макет окна</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="69"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="69"/>
         <source>Multiple documents</source>
         <translation>Несколько документов</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="79"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="79"/>
         <source>Tabbed documents</source>
         <translation>Режим вкладок</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="98"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="98"/>
         <source>Open last project at startup</source>
         <translation>Открывать последний проект при старте</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="92"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="92"/>
         <source>Project</source>
         <translation>Проект</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="144"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="144"/>
+        <source>Updates</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="150"/>
+        <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"/>
         <source>Default settings</source>
         <translation>Настройки по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="150"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="166"/>
         <source>Reset settings to default on the next run</source>
         <translation>Установить настройки по умолчанию при следующем запуске</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="128"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="128"/>
         <source>Statistical reports</source>
         <translation>Отчеты о статистике использования</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="134"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="134"/>
         <source>Enable statistical reports collecting</source>
         <translation>Разрешить сбор отчетов</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui" line="51"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="51"/>
         <source>Appearance</source>
         <translation>Стиль</translation>
     </message>
diff --git a/src/ugeneui/ugeneui.pri b/src/ugeneui/ugeneui.pri
index ac77b19..53ab305 100644
--- a/src/ugeneui/ugeneui.pri
+++ b/src/ugeneui/ugeneui.pri
@@ -16,7 +16,7 @@ DEFINES+= QT_DLL QT_FATAL_ASSERT
 INCLUDEPATH += src _tmp ../include ../corelibs/U2Private/src ../libs_3rdparty/QSpec/src
 macx : INCLUDEPATH += /System/Library/Frameworks/Security.framework/Headers
 
-LIBS += -L../_release -L../libs_3rdparty/humimit/ -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2View -lU2Test -lU2Remote -lU2Lang -lU2Private -lugenedb -lbreakpad -lhumimit
+LIBS += -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2View -lU2Test -lU2Lang -lU2Private -lugenedb -lbreakpad -lhumimit
 macx: LIBS += /System/Library/Frameworks/Security.framework/Security
 if(exclude_list_enabled()|!exists( ../libs_3rdparty/QSpec/QSpec.pro )) {
     LIBS -= -lhumimit
@@ -31,8 +31,8 @@ if(exclude_list_enabled()|!exists( ../libs_3rdparty/QSpec/QSpec.pro )) {
         DESTDIR=../_debug
         MOC_DIR=_tmp/moc/debug
         OBJECTS_DIR=_tmp/obj/debug
-        LIBS -= -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2View -lU2Test -lU2Remote -lU2Lang -lU2Private -lugenedb -lbreakpad -lhumimit
-        LIBS += -L../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Guid -lU2Viewd -lU2Testd -lU2Remoted -lU2Langd -lU2Privated -lugenedbd -lbreakpadd -lhumimitd
+        LIBS -= -L../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Gui -lU2View -lU2Test -lU2Lang -lU2Private -lugenedb -lbreakpad -lhumimit
+        LIBS += -L../_debug -lU2Cored -lU2Algorithmd -lU2Formatsd -lU2Guid -lU2Viewd -lU2Testd -lU2Langd -lU2Privated -lugenedbd -lbreakpadd -lhumimitd
         if(exclude_list_enabled()|!exists( ../libs_3rdparty/QSpec/QSpec.pro )) {
             LIBS -= -lhumimitd
         }
diff --git a/src/ugeneui/ugeneui.pro b/src/ugeneui/ugeneui.pro
index 9ea78e4..220a654 100644
--- a/src/ugeneui/ugeneui.pro
+++ b/src/ugeneui/ugeneui.pro
@@ -31,36 +31,36 @@ HEADERS += src/app_settings/AppSettingsDialogController.h \
            src/project_support/ProjectLoaderImpl.h \
            src/project_support/ProjectServiceImpl.h \
            src/project_support/ProjectTasksGui.h \
-           src/project_view/ProjectViewDocTree.h \
            src/project_view/ProjectViewImpl.h \
            src/project_view/ProjectViewSearchBox.h \
            src/shtirlitz/Shtirlitz.h \
            src/shtirlitz/StatisticalReportController.h \
            src/task_view/TaskStatusBar.h \
            src/task_view/TaskViewController.h \
+           src/update/UgeneUpdater.h \
            src/utils/MultilingualHtmlView.h \
            src/welcome_page/WelcomePageController.h \
            src/welcome_page/WelcomePageMdi.h \
            src/welcome_page/WelcomePageWidget.h
-FORMS += src/app_settings/directories_settings/ui/DirectoriesSettingsWidget.ui \
-         src/app_settings/format_settings/ui/FormatSettingsWidget.ui \
-         src/app_settings/logview_settings/ui/LogSettingsWidget.ui \
-         src/app_settings/network_settings/ui/NetworkSettingsWidget.ui \
-         src/app_settings/resource_settings/ui/ResourceSettingsWidget.ui \
-         src/app_settings/ui/AppSettingsDialog.ui \
-         src/app_settings/user_apps_settings/ui/UserApplicationsSettingsWidget.ui \
-         src/main_window/ui/AboutDialog.ui \
-         src/main_window/ui/TmpDirChangeDialog.ui \
-         src/plugin_viewer/ui/PluginViewerWidget.ui \
-         src/project_support/ui/CreateNewProjectWidget.ui \
-         src/project_support/ui/DocumentFormatSelectorDialog.ui \
-         src/project_support/ui/DocumentProviderSelectorDialog.ui \
-         src/project_support/ui/ExportProjectDialog.ui \
-         src/project_support/ui/MultipleSequenceFilesReadingMode.ui \
-         src/project_support/ui/SequenceReadingModeSelectorDialog.ui \
-         src/project_support/ui/SaveProjectDialog.ui \
-         src/project_view/ui/ProjectViewWidget.ui \
-         src/shtirlitz/ui/StatisticalReport.ui
+FORMS += src/app_settings/directories_settings/DirectoriesSettingsWidget.ui \
+         src/app_settings/format_settings/FormatSettingsWidget.ui \
+         src/app_settings/logview_settings/LogSettingsWidget.ui \
+         src/app_settings/network_settings/NetworkSettingsWidget.ui \
+         src/app_settings/resource_settings/ResourceSettingsWidget.ui \
+         src/app_settings/AppSettingsDialog.ui \
+         src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui \
+         src/main_window/AboutDialog.ui \
+         src/main_window/TmpDirChangeDialog.ui \
+         src/plugin_viewer/PluginViewerWidget.ui \
+         src/project_support/CreateNewProjectWidget.ui \
+         src/project_support/DocumentFormatSelectorDialog.ui \
+         src/project_support/DocumentProviderSelectorDialog.ui \
+         src/project_support/ExportProjectDialog.ui \
+         src/project_support/MultipleSequenceFilesReadingMode.ui \
+         src/project_support/SequenceReadingModeSelectorDialog.ui \
+         src/project_support/SaveProjectDialog.ui \
+         src/project_view/ProjectViewWidget.ui \
+         src/shtirlitz/StatisticalReport.ui
 SOURCES += src/Main.cpp \
            src/app_settings/AppSettingsDialogController.cpp \
            src/app_settings/AppSettingsGUIImpl.cpp \
@@ -92,13 +92,13 @@ SOURCES += src/Main.cpp \
            src/project_support/ProjectServiceImpl.cpp \
            src/project_support/ProjectTasksGui.cpp \
            src/project_view/BuiltInObjectViews.cpp \
-           src/project_view/ProjectViewDocTree.cpp \
            src/project_view/ProjectViewImpl.cpp \
            src/project_view/ProjectViewSearchBox.cpp \
            src/shtirlitz/Shtirlitz.cpp \
            src/shtirlitz/StatisticalReportController.cpp \
            src/task_view/TaskStatusBar.cpp \
            src/task_view/TaskViewController.cpp \
+           src/update/UgeneUpdater.cpp \
            src/utils/MultilingualHtmlView.cpp \
            src/welcome_page/WelcomePageController.cpp \
            src/welcome_page/WelcomePageMdi.cpp \
diff --git a/ugene.pro b/ugene.pro
index 5e52993..06b9ec9 100644
--- a/ugene.pro
+++ b/ugene.pro
@@ -23,7 +23,6 @@ SUBDIRS += \
           src/libs_3rdparty/breakpad \
           src/libs_3rdparty/qscore \
           src/libs_3rdparty/sqlite3 \
-          src/libs_3rdparty/gtest \
           src/libs_3rdparty/samtools \
           src/libs_3rdparty/QSpec \
           src/corelibs/U2Core \
@@ -33,7 +32,6 @@ SUBDIRS += \
           src/corelibs/U2Lang \
           src/corelibs/U2Private \
           src/corelibs/U2Gui \
-          src/corelibs/U2Remote \
           src/corelibs/U2View \
           src/corelibs/U2Designer \
           src/corelibs/U2Script \
@@ -75,8 +73,6 @@ SUBDIRS += \
           src/plugins/dotplot \
           src/plugins/query_designer \
           src/plugins/external_tool_support \
-          src/plugins/expert_discovery \
-          src/plugins/remote_service \
           src/plugins/CoreTests \
           src/plugins/api_tests \
           src/plugins/GUITestBase \
@@ -123,15 +119,13 @@ without_non_free() {
     SUBDIRS -= src/plugins_3rdparty/phylip
 }
 
-#create target directories
-win32 {
-    system( if not exist src\\_debug mkdir src\\_debug )
-    system( if not exist src\\_release mkdir src\\_release )    
-} else {
-    system( cd src && [ -d _debug ] || mkdir _debug )
-    system( cd src && [ -d _release ] || mkdir _release )
-    system( cp ./installer/_common_data/ugene src/_release/ugene )
-    system( cp ./installer/_common_data/ugened src/_debug/ugened )
+# create target build & plugin directories (to copy licenses/descriptors to)
+mkpath($$OUT_PWD/src/_debug/plugins)
+mkpath($$OUT_PWD/src/_release/plugins)
+
+!win32 {
+    system( cp ./installer/_common_data/ugene $$OUT_PWD/src/_release/ugene )
+    system( cp ./installer/_common_data/ugened $$OUT_PWD/src/_debug/ugened )
 }
 
 
@@ -141,20 +135,21 @@ UGENE_TRANSL_FILES = russian.ts english.ts
 UGENE_TRANSL_TAG   = ru         en
 
 UGENE_TRANSL_DIR   = transl
-UGENE_TRANSL_QM_TARGET_DIR = src/_debug src/_release
+UGENE_TRANSL_QM_TARGET_DIR = $$OUT_PWD/src/_debug $$OUT_PWD/src/_release
 
 #detecting lrelease binary
 win32 : UGENE_DEV_NULL = nul
 unix : UGENE_DEV_NULL = /dev/null
 
 UGENE_LRELEASE =
-UGENE_LUPDATE = 
-system(lrelease-qt5 -version > $$UGENE_DEV_NULL 2> $$UGENE_DEV_NULL) {
-    UGENE_LRELEASE = lrelease-qt5
-    UGENE_LUPDATE = lupdate-qt5
-} else : system(lrelease -version > $$UGENE_DEV_NULL 2> $$UGENE_DEV_NULL) {
-    UGENE_LRELEASE = lrelease
-    UGENE_LUPDATE = lupdate
+UGENE_LUPDATE =
+message(Using QT from $$[QT_INSTALL_BINS])
+system($$[QT_INSTALL_BINS]/lrelease-qt5 -version > $$UGENE_DEV_NULL 2> $$UGENE_DEV_NULL) {
+    UGENE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease-qt5
+    UGENE_LUPDATE = $$[QT_INSTALL_BINS]/lupdate-qt5
+} else : system($$[QT_INSTALL_BINS]/lrelease -version > $$UGENE_DEV_NULL 2> $$UGENE_DEV_NULL) {
+    UGENE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
+    UGENE_LUPDATE = $$[QT_INSTALL_BINS]/lupdate
 }
 
 #foreach 'language'
@@ -173,16 +168,15 @@ for( i, UGENE_TRANSL_IDX ) {
 #            system( $$UGENE_LUPDATE $$translFile ) FIXME
         }
     }
-    for( targetDir, UGENE_TRANSL_QM_TARGET_DIR ) {
-        targetQmFile = $$targetDir/transl_$$curTranslTag            # 'transl_en.qm' etc.
-        targetQmFile = $$join( targetQmFile, , , .qm )              # special workaround for adding suffix started with '.'
-
-        !isEmpty(UGENE_LRELEASE) {
+    !isEmpty(UGENE_LRELEASE) {
+        for( targetDir, UGENE_TRANSL_QM_TARGET_DIR ) {
+            targetQmFile = $$targetDir/transl_$$curTranslTag            # 'transl_en.qm' etc.
+            targetQmFile = $$join( targetQmFile, , , .qm )              # special workaround for adding suffix started with '.'
             message( Generating traslations for language: $$curTranslTag )
-            system( $$UGENE_LRELEASE $$UGENE_TRANSLATIONS -qm $$targetQmFile > $$UGENE_DEV_NULL ) 
-        } else {
-            message( Cannot generate translations: no lrelease binary found )
+            system( $$UGENE_LRELEASE $$UGENE_TRANSLATIONS -qm $$targetQmFile > $$UGENE_DEV_NULL )
         }
+    } else {
+        message( Cannot generate translations: no lrelease binary found )
     }
 }
 

-- 
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